On 2022-02-15 11:43:22 [-0700], Nathan Chancellor wrote: > Commit 9983a9d577db ("locking/local_lock: Make the empty local_lock_*() > function a macro.") in the -tip tree converted the local_lock_*() > functions into macros, which causes a warning with clang with > CONFIG_PREEMPT_RT=n + CONFIG_DEBUG_LOCK_ALLOC=n: > > mm/page_alloc.c:131:40: error: variable 'pagesets' is not needed and will not be emitted [-Werror,-Wunneeded-internal-declaration] > static DEFINE_PER_CPU(struct pagesets, pagesets) = { > ^ > 1 error generated. > > Prior to that change, clang was not able to tell that pagesets was > unused in this configuration because it does not perform cross function > analysis in the frontend. After that change, it sees that the macros > just do a typecheck on the lock member of pagesets, which is evaluated > at compile time (so the variable is technically "used"), meaning the > variable is not needed in the final assembly, as the warning states. > > Mark the variable as __maybe_unused to make it clear to clang that this > is expected in this configuration so there is no more warning. > > Link: https://github.com/ClangBuiltLinux/linux/issues/1593 > Reported-by: "kernelci.org bot" <bot@xxxxxxxxxxxx> > Suggested-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx> > --- > mm/page_alloc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 7ff1efc84205..406f5d0c610f 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -128,7 +128,7 @@ static DEFINE_MUTEX(pcp_batch_high_lock); > struct pagesets { > local_lock_t lock; > }; > -static DEFINE_PER_CPU(struct pagesets, pagesets) = { > +static DEFINE_PER_CPU(struct pagesets, pagesets) __maybe_unused = { No, I need to think of something else then for the local_lock thing. I haven't seen it with gcc. There is probably more than just this one. > .lock = INIT_LOCAL_LOCK(lock), > }; Sebastian