Re: [PATCH] percpu: Drop CONFIG_DEBUG_FORCE_WEAK_PER_CPU
From: Suren Baghdasaryan
Date: Wed Aug 12 2026 - 19:35:28 EST
On Wed, Aug 12, 2026 at 12:55 PM Tejun Heo <tj@xxxxxxxxxx> 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 <akpm@xxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Tejun Heo <tj@xxxxxxxxxx>
> Cc: Suren Baghdasaryan <surenb@xxxxxxxxxx>
Reviewed-by: Suren Baghdasaryan <surenb@xxxxxxxxxx>
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