[PATCH] sched/fair: Change sched_feat(x) in !CONFIG_SCHED_DEBUG case

Peter Zijlstra peterz at infradead.org
Fri Apr 20 03:57:17 EDT 2018


On Mon, Apr 16, 2018 at 10:54:26AM +0200, Philipp Klocke wrote:

> This patch is motivated by the clang warning Wconstant-logical-operand,
> issued when logically comparing a variable to a constant integer that is
> neither 1 nor 0.  It happens for sched_feat(x) when sysctl_sched_features
> is constant, i.e., CONFIG_SCHED_DEBUG is not set.
> 
> kernel/sched/fair.c:3927:14: warning: use of logical '&&' with constant operand [-Wconstant-logical-operand]
>         if (initial && sched_feat(START_DEBIT))
>                     ^  ~~~~~~~~~~~~~~~~~~~~~~~
> kernel/sched/fair.c:3927:14: note: use '&' for a bitwise operation
>         if (initial && sched_feat(START_DEBIT))
>                     ^~
>                     &
> kernel/sched/fair.c:3927:14: note: remove constant to silence this warning
>         if (initial && sched_feat(START_DEBIT))
>                    ~^~~~~~~~~~~~~~~~~~~~~~~~~~


> @@ -1305,7 +1305,11 @@ static const_debug __maybe_unused unsigned int sysctl_sched_features =
>  	0;
>  #undef SCHED_FEAT
>  
> +#ifdef CONFIG_SCHED_DEBUG
>  #define sched_feat(x) (sysctl_sched_features & (1UL << __SCHED_FEAT_##x))
> +#else
> +#define sched_feat(x) ((sysctl_sched_features >> __SCHED_FEAT_##x) & 1UL)
> +#endif

So this is extra ugly, for no gain?

WTH does clang complain about a constant? Can't you just disable that
stupid warning?

Also, if sysctl_sched_features is a constant, the both expressions
_should_ really result in a constant and clang should still warn about
it.

I'm really not seeing why we'd want to do this. Just fix clang to not be
stupid.



More information about the Kernelnewbies mailing list