On Wed, Aug 12, 2026 at 12:55 PM Tejun Heo <[email protected]> wrote: > > alpha requires percpu variables in modules to be defined as weak so that the > compiler generates GOT based external references for them. This puts two > extra restrictions on percpu variable definitions. The symbol must be > globally unique even when static and a static percpu variable can't be > defined inside a function. DEBUG_FORCE_WEAK_PER_CPU exists to give generic > code build coverage for these restrictions without building for alpha. > > MEM_ALLOC_PROFILING defines a static percpu counter at each allocation call > site and thus can't be built with weak percpu definitions, so it depends on > !DEBUG_FORCE_WEAK_PER_CPU. As allmodconfig enables DEBUG_FORCE_WEAK_PER_CPU, > this knocks MEM_ALLOC_PROFILING out of allmodconfig build coverage. > > allmodconfig coverage for MEM_ALLOC_PROFILING is worth more than build > coverage for restrictions which only matter to alpha module builds. Drop > DEBUG_FORCE_WEAK_PER_CPU. Restriction violations will now show up only on > alpha builds. > > Reported-by: Andrew Morton <[email protected]> > Signed-off-by: Tejun Heo <[email protected]> > Cc: Suren Baghdasaryan <[email protected]>
Reviewed-by: Suren Baghdasaryan <[email protected]> Thanks Tejun and Andrew! > --- > include/linux/percpu-defs.h | 7 +------ > include/rv/da_monitor.h | 2 +- > lib/Kconfig.debug | 16 ---------------- > 3 files changed, 2 insertions(+), 23 deletions(-) > > --- a/include/linux/percpu-defs.h > +++ b/include/linux/percpu-defs.h > @@ -65,13 +65,8 @@ > * > * Archs which need weak percpu definitions should set > * CONFIG_ARCH_MODULE_NEEDS_WEAK_PER_CPU when necessary. > - * > - * To ensure that the generic code observes the above two > - * restrictions, if CONFIG_DEBUG_FORCE_WEAK_PER_CPU is set weak > - * definition is used for all cases. > */ > -#if (defined(CONFIG_ARCH_MODULE_NEEDS_WEAK_PER_CPU) && defined(MODULE)) || \ > - defined(CONFIG_DEBUG_FORCE_WEAK_PER_CPU) > +#if defined(CONFIG_ARCH_MODULE_NEEDS_WEAK_PER_CPU) && defined(MODULE) > /* > * __pcpu_scope_* dummy variable is used to enforce scope. It > * receives the static modifier when it's used in front of > --- a/include/rv/da_monitor.h > +++ b/include/rv/da_monitor.h > @@ -24,7 +24,7 @@ > > /* > * Per-cpu variables require a unique name although static in some > - * configurations (e.g. CONFIG_DEBUG_FORCE_WEAK_PER_CPU or alpha modules). > + * configurations (e.g. alpha modules). > */ > #define DA_MON_NAME CONCATENATE(da_mon_, MONITOR_NAME) > > --- a/lib/Kconfig.debug > +++ b/lib/Kconfig.debug > @@ -613,21 +613,6 @@ config BUILTIN_MODULE_RANGES > It also records an anchor symbol to determine the load address of the > section. > > -config DEBUG_FORCE_WEAK_PER_CPU > - bool "Force weak per-cpu definitions" > - depends on DEBUG_KERNEL > - help > - s390 and alpha require percpu variables in modules to be > - defined weak to work around addressing range issue which > - puts the following two restrictions on percpu variable > - definitions. > - > - 1. percpu symbols must be unique whether static or not > - 2. percpu variables can't be defined inside a function > - > - To ensure that generic code follows the above rules, this > - option forces all percpu variables to be defined as weak. > - > config WARN_CONTEXT_ANALYSIS > bool "Compiler context-analysis warnings" > depends on CC_IS_CLANG && CLANG_VERSION >= 230000 > @@ -1053,7 +1038,6 @@ config MEM_ALLOC_PROFILING > default n > depends on MMU > depends on PROC_FS > - depends on !DEBUG_FORCE_WEAK_PER_CPU > select CODE_TAGGING > select PAGE_EXTENSION > select SLAB_OBJ_EXT
