Re: [PATCH v4 1/9] sched: Add a generic function to return the preemption string.
From: Sebastian Andrzej Siewior
Date: Mon Mar 17 2025 - 04:32:15 EST
On 2025-03-16 12:15:47 [+0100], Ingo Molnar wrote:
>
> * Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> wrote:
>
> > +const char *preempt_modes[] = {
> > + "none", "voluntary", "full", "lazy", NULL,
> > +};
>
> > + /* Count entries in NULL terminated preempt_modes */
> > + for (j = 0; preempt_modes[j]; j++)
> > + ;
>
> I'm pretty sure the build-time ARRAY_SIZE() primitive is superior here. ;-)
It would be but it is not an option.
That array is defined in core.c where it is "always" required while
debug.c needs it optionally. core.c is its one compile unit while
debug.c is included by build_utility.c. So I don't see how this can work
unless we shift things:
| CC kernel/sched/build_utility.o
| In file included from include/linux/kernel.h:16,
| from include/linux/cpumask.h:11,
| from include/linux/smp.h:13,
| from include/linux/sched/clock.h:5,
| from kernel/sched/build_utility.c:12:
| kernel/sched/debug.c: In function ‘sched_dynamic_show’:
| include/linux/array_size.h:11:32: error: invalid application of ‘sizeof’ to incomplete type ‘const char *[]’
| 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
| | ^
| kernel/sched/debug.c:250:13: note: in expansion of macro ‘ARRAY_SIZE’
| 250 | j = ARRAY_SIZE(preempt_modes);
| | ^~~~~~~~~~
> Thanks,
>
> Ingo
Sebastian