linux-alpha.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/5] mm/Kconfig: add ARCH_NEEDS_WEAK_PER_CPU option
       [not found] <cover.1749702889.git.gehao@kylinos.cn>
@ 2025-06-12  7:54 ` Hao Ge
  0 siblings, 0 replies; 12+ messages in thread
From: Hao Ge @ 2025-06-12  7:54 UTC (permalink / raw)
  To: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Mike Rapoport, Richard Henderson, Matt Turner, Dennis Zhou,
	Tejun Heo, Christoph Lameter, Heiko Carstens, Vasily Gorbik,
	Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
	Kent Overstreet
  Cc: linux-mm, linux-kernel, linux-alpha, linux-s390, Hao Ge, Hao Ge

From: Hao Ge <gehao@kylinos.cn>

Recently discovered this entry while checking kallsyms on ARM64:
ffff800083e509c0 D _shared_alloc_tag

If ARCH_NEEDS_WEAK_PER_CPU is not defined((it is only defined for
s390 and alpha architectures),there's no need to statically define
the percpu variable _shared_alloc_tag. As the number of CPUs
increases,the wasted memory will grow correspondingly.

Therefore,we need to implement isolation for this purpose.

However,currently ARCH_NEEDS_WEAK_PER_CPU is a #define and
is enclosed within the #if defined(MODULE) conditional block.

When building the core kernel code for s390 or alpha architectures,
ARCH_NEEDS_WEAK_PER_CPU remains undefined (as it is gated by #if defined(MODULE)).
However,when building modules for these architectures,the macro is explicitly defined.

Therefore,we need to make ARCH_NEEDS_WEAK_PER_CPU a Kconfig option.
And replace all instances of ARCH_NEEDS_WEAK_PER_CPU in the kernel
code with MODULE_NEEDS_WEAK_PER_CPU,gated by #ifdef CONFIG_ARCH_NEEDS_WEAK_PER_CPU.
Then,when defining the percpu variable _shared_alloc_tag,wrap it
with the CONFIG_ARCH_NEEDS_WEAK_PER_CPU condition.

Therefore,we should add the ARCH_NEEDS_WEAK_PER_CPU option
to the mm Kconfig file.

Suggested-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Hao Ge <gehao@kylinos.cn>
---
 mm/Kconfig | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/mm/Kconfig b/mm/Kconfig
index e113f713b493..36bb4d6fd360 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -929,6 +929,10 @@ config ARCH_SUPPORTS_PUD_PFNMAP
 	def_bool y
 	depends on ARCH_SUPPORTS_HUGE_PFNMAP && HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
 
+# s390 and alpha be enabled,see comments for DECLARE_PER_CPU_SECTION
+config ARCH_NEEDS_WEAK_PER_CPU
+       bool
+
 #
 # UP and nommu archs use km based percpu allocator
 #
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 0/5] mm: Restrict the static definition of the per-CPU variable _shared_alloc_tag to s390 and alpha architectures only
@ 2025-06-12  8:27 Hao Ge
  2025-06-12  8:27 ` [PATCH 1/5] mm/Kconfig: add ARCH_NEEDS_WEAK_PER_CPU option Hao Ge
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Hao Ge @ 2025-06-12  8:27 UTC (permalink / raw)
  To: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Mike Rapoport, Richard Henderson, Matt Turner, Dennis Zhou,
	Tejun Heo, Christoph Lameter, Heiko Carstens, Vasily Gorbik,
	Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
	Kent Overstreet
  Cc: linux-mm, linux-kernel, linux-alpha, linux-s390, Hao Ge, Hao Ge

From: Hao Ge <gehao@kylinos.cn>

Recently discovered this entry while checking kallsyms on ARM64:
ffff800083e509c0 D _shared_alloc_tag

If ARCH_NEEDS_WEAK_PER_CPU is not defined((it is only defined for
s390 and alpha architectures),there's no need to statically define
the percpu variable _shared_alloc_tag. As the number of CPUs
increases,the wasted memory will grow correspondingly.

Therefore,we need to implement isolation for this purpose.

However,currently ARCH_NEEDS_WEAK_PER_CPU is a #define and
is enclosed within the #if defined(MODULE) conditional block.

When building the core kernel code for s390 or alpha architectures,
ARCH_NEEDS_WEAK_PER_CPU remains undefined (as it is gated
by #if defined(MODULE)). However,when building modules for these
architectures,the macro is explicitly defined.

Therefore,we need to make ARCH_NEEDS_WEAK_PER_CPU a Kconfig option.
And replace all instances of ARCH_NEEDS_WEAK_PER_CPU in the kernel
code with MODULE_NEEDS_WEAK_PER_CPU,gated
by#ifdef CONFIG_ARCH_NEEDS_WEAK_PER_CPU. Then,when defining the percpu
variable _shared_alloc_tag,wrap it with the
CONFIG_ARCH_NEEDS_WEAK_PER_CPU condition.

The following version could be regarded as Version 1:
https://lore.kernel.org/all/20250529073537.563107-1-hao.ge@linux.dev/
But unfortunately,it caused build errors on s390.
Based on Suren's guidance and suggestions,
I've refined it into this patch series.
Many thanks to Suren for his patient instruction.

Verify:
     1. On Arm64:
        nm vmlinux | grep "_shared_alloc_tag",no output is returned.
     2. On S390:
        Compile tested.
        nm vmlinux | grep "_shared_alloc_tag"
        00000000015605b4 r __crc__shared_alloc_tag
        0000000001585fef r __kstrtab__shared_alloc_tag
        0000000001586897 r __kstrtabns__shared_alloc_tag
        00000000014f6548 r __ksymtab__shared_alloc_tag
        0000000001a8fa28 D _shared_alloc_tag
        nm net/ceph/libceph.ko | grep "_shared"
        U _shared_alloc_tag
     3. On alpha
        Compile tested.
        nm vmlinux | grep "_shared_alloc_tag"
        fffffc0000b080fa r __kstrtab__shared_alloc_tag
        fffffc0000b07ee7 r __kstrtabns__shared_alloc_tag
        fffffc0000adee98 r __ksymtab__shared_alloc_tag
        fffffc0000b83d38 D _shared_alloc_tag
        nm crypto/cryptomgr.ko | grep "_share"
        U _shared_alloc_tag

Hao Ge (5):
  mm/Kconfig: add ARCH_NEEDS_WEAK_PER_CPU option
  alpha: Modify the definition logic of WEAK_PER_CPU
  s390: Modify the definition logic of WEAK_PER_CPU
  mm: use MODULE_NEEDS_WEAK_PER_CPU instead of ARCH_NEEDS_WEAK_PER_CPU
  mm/alloc_tag: add the CONFIG_ARCH_NEEDS_WEAK_PER_CPU macro when
    statically defining the percpu variable _shared_alloc_tag

 arch/alpha/Kconfig              | 1 +
 arch/alpha/include/asm/percpu.h | 4 ++--
 arch/s390/Kconfig               | 1 +
 arch/s390/include/asm/percpu.h  | 4 ++--
 include/linux/alloc_tag.h       | 6 +++---
 include/linux/percpu-defs.h     | 4 ++--
 lib/alloc_tag.c                 | 2 ++
 mm/Kconfig                      | 4 ++++
 8 files changed, 17 insertions(+), 9 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/5] mm/Kconfig: add ARCH_NEEDS_WEAK_PER_CPU option
  2025-06-12  8:27 [PATCH 0/5] mm: Restrict the static definition of the per-CPU variable _shared_alloc_tag to s390 and alpha architectures only Hao Ge
@ 2025-06-12  8:27 ` Hao Ge
  2025-06-12  8:27 ` [PATCH 2/5] alpha: Modify the definition logic of WEAK_PER_CPU Hao Ge
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Hao Ge @ 2025-06-12  8:27 UTC (permalink / raw)
  To: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Mike Rapoport, Richard Henderson, Matt Turner, Dennis Zhou,
	Tejun Heo, Christoph Lameter, Heiko Carstens, Vasily Gorbik,
	Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
	Kent Overstreet
  Cc: linux-mm, linux-kernel, linux-alpha, linux-s390, Hao Ge, Hao Ge

From: Hao Ge <gehao@kylinos.cn>

Recently discovered this entry while checking kallsyms on ARM64:
ffff800083e509c0 D _shared_alloc_tag

If ARCH_NEEDS_WEAK_PER_CPU is not defined((it is only defined for
s390 and alpha architectures),there's no need to statically define
the percpu variable _shared_alloc_tag. As the number of CPUs
increases,the wasted memory will grow correspondingly.

Therefore,we need to implement isolation for this purpose.

However,currently ARCH_NEEDS_WEAK_PER_CPU is a #define and
is enclosed within the #if defined(MODULE) conditional block.

When building the core kernel code for s390 or alpha architectures,
ARCH_NEEDS_WEAK_PER_CPU remains undefined (as it is gated
by #if defined(MODULE)).However,when building modules for these
architectures,the macro is explicitly defined.

Therefore,we need to make ARCH_NEEDS_WEAK_PER_CPU a Kconfig option.
And replace all instances of ARCH_NEEDS_WEAK_PER_CPU in the kernel
code with MODULE_NEEDS_WEAK_PER_CPU,gated
by #ifdef CONFIG_ARCH_NEEDS_WEAK_PER_CPU.Then,when defining
the percpu variable _shared_alloc_tag,wrap it
with the CONFIG_ARCH_NEEDS_WEAK_PER_CPU condition.

Therefore,we should add the ARCH_NEEDS_WEAK_PER_CPU option
to the mm Kconfig file.

Suggested-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Hao Ge <gehao@kylinos.cn>
---
 mm/Kconfig | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/mm/Kconfig b/mm/Kconfig
index e113f713b493..36bb4d6fd360 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -929,6 +929,10 @@ config ARCH_SUPPORTS_PUD_PFNMAP
 	def_bool y
 	depends on ARCH_SUPPORTS_HUGE_PFNMAP && HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
 
+# s390 and alpha be enabled,see comments for DECLARE_PER_CPU_SECTION
+config ARCH_NEEDS_WEAK_PER_CPU
+       bool
+
 #
 # UP and nommu archs use km based percpu allocator
 #
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/5] alpha: Modify the definition logic of WEAK_PER_CPU
  2025-06-12  8:27 [PATCH 0/5] mm: Restrict the static definition of the per-CPU variable _shared_alloc_tag to s390 and alpha architectures only Hao Ge
  2025-06-12  8:27 ` [PATCH 1/5] mm/Kconfig: add ARCH_NEEDS_WEAK_PER_CPU option Hao Ge
@ 2025-06-12  8:27 ` Hao Ge
  2025-06-12 11:22   ` Heiko Carstens
  2025-06-12  8:27 ` [PATCH 3/5] s390: " Hao Ge
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Hao Ge @ 2025-06-12  8:27 UTC (permalink / raw)
  To: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Mike Rapoport, Richard Henderson, Matt Turner, Dennis Zhou,
	Tejun Heo, Christoph Lameter, Heiko Carstens, Vasily Gorbik,
	Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
	Kent Overstreet
  Cc: linux-mm, linux-kernel, linux-alpha, linux-s390, Hao Ge, Hao Ge

From: Hao Ge <gehao@kylinos.cn>

As stated in the first patch of this patch series,
we make ARCH_NEEDS_WEAK_PER_CPU a Kconfig option,
and replace all instances of ARCH_NEEDS_WEAK_PER_CPU
in the kernel code with MODULE_NEEDS_WEAK_PER_CPU,
gated by #ifdef CONFIG_ARCH_NEEDS_WEAK_PER_CPU.

We'll make corresponding changes for the alpha
architecture.

Suggested-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Hao Ge <gehao@kylinos.cn>
---
 arch/alpha/Kconfig              | 1 +
 arch/alpha/include/asm/percpu.h | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
index 109a4cddcd13..ce9bc842e384 100644
--- a/arch/alpha/Kconfig
+++ b/arch/alpha/Kconfig
@@ -7,6 +7,7 @@ config ALPHA
 	select ARCH_HAS_DMA_OPS if PCI
 	select ARCH_MIGHT_HAVE_PC_PARPORT
 	select ARCH_MIGHT_HAVE_PC_SERIO
+	select ARCH_NEEDS_WEAK_PER_CPU
 	select ARCH_NO_PREEMPT
 	select ARCH_NO_SG_CHAIN
 	select ARCH_USE_CMPXCHG_LOCKREF
diff --git a/arch/alpha/include/asm/percpu.h b/arch/alpha/include/asm/percpu.h
index 6923249f2d49..5d8b75ec3bf2 100644
--- a/arch/alpha/include/asm/percpu.h
+++ b/arch/alpha/include/asm/percpu.h
@@ -10,8 +10,8 @@
  *
  * Always use weak definitions for percpu variables in modules.
  */
-#if defined(MODULE) && defined(CONFIG_SMP)
-#define ARCH_NEEDS_WEAK_PER_CPU
+#if defined(MODULE) && defined(CONFIG_SMP) && defined(CONFIG_ARCH_NEEDS_WEAK_PER_CPU)
+#define MODULE_NEEDS_WEAK_PER_CPU
 #endif
 
 #include <asm-generic/percpu.h>
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 3/5] s390: Modify the definition logic of WEAK_PER_CPU
  2025-06-12  8:27 [PATCH 0/5] mm: Restrict the static definition of the per-CPU variable _shared_alloc_tag to s390 and alpha architectures only Hao Ge
  2025-06-12  8:27 ` [PATCH 1/5] mm/Kconfig: add ARCH_NEEDS_WEAK_PER_CPU option Hao Ge
  2025-06-12  8:27 ` [PATCH 2/5] alpha: Modify the definition logic of WEAK_PER_CPU Hao Ge
@ 2025-06-12  8:27 ` Hao Ge
  2025-06-12  8:27 ` [PATCH 4/5] mm: use MODULE_NEEDS_WEAK_PER_CPU instead of ARCH_NEEDS_WEAK_PER_CPU Hao Ge
  2025-06-12  8:27 ` [PATCH 5/5] mm/alloc_tag: add the CONFIG_ARCH_NEEDS_WEAK_PER_CPU macro when statically defining the percpu variable _shared_alloc_tag Hao Ge
  4 siblings, 0 replies; 12+ messages in thread
From: Hao Ge @ 2025-06-12  8:27 UTC (permalink / raw)
  To: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Mike Rapoport, Richard Henderson, Matt Turner, Dennis Zhou,
	Tejun Heo, Christoph Lameter, Heiko Carstens, Vasily Gorbik,
	Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
	Kent Overstreet
  Cc: linux-mm, linux-kernel, linux-alpha, linux-s390, Hao Ge, Hao Ge

From: Hao Ge <gehao@kylinos.cn>

As stated in the first patch of this patch series,
we make ARCH_NEEDS_WEAK_PER_CPU a Kconfig option,
and replace all instances of ARCH_NEEDS_WEAK_PER_CPU
in the kernel code with MODULE_NEEDS_WEAK_PER_CPU,
gated by #ifdef CONFIG_ARCH_NEEDS_WEAK_PER_CPU.

We'll make corresponding changes for the s390
architecture.

Suggested-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Hao Ge <gehao@kylinos.cn>
---
 arch/s390/Kconfig              | 1 +
 arch/s390/include/asm/percpu.h | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index 0c16dc443e2f..716031d22346 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -132,6 +132,7 @@ config S390
 	select ARCH_INLINE_WRITE_UNLOCK_IRQ
 	select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE
 	select ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
+	select ARCH_NEEDS_WEAK_PER_CPU
 	select ARCH_STACKWALK
 	select ARCH_SUPPORTS_ATOMIC_RMW
 	select ARCH_SUPPORTS_DEBUG_PAGEALLOC
diff --git a/arch/s390/include/asm/percpu.h b/arch/s390/include/asm/percpu.h
index 84f6b8357b45..a202baef86fb 100644
--- a/arch/s390/include/asm/percpu.h
+++ b/arch/s390/include/asm/percpu.h
@@ -17,8 +17,8 @@
  * per cpu area, use weak definitions to force the compiler to
  * generate external references.
  */
-#if defined(MODULE)
-#define ARCH_NEEDS_WEAK_PER_CPU
+#if defined(MODULE) && defined(CONFIG_ARCH_NEEDS_WEAK_PER_CPU)
+#define MODULE_NEEDS_WEAK_PER_CPU
 #endif
 
 /*
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 4/5] mm: use MODULE_NEEDS_WEAK_PER_CPU instead of ARCH_NEEDS_WEAK_PER_CPU
  2025-06-12  8:27 [PATCH 0/5] mm: Restrict the static definition of the per-CPU variable _shared_alloc_tag to s390 and alpha architectures only Hao Ge
                   ` (2 preceding siblings ...)
  2025-06-12  8:27 ` [PATCH 3/5] s390: " Hao Ge
@ 2025-06-12  8:27 ` Hao Ge
  2025-06-12  8:27 ` [PATCH 5/5] mm/alloc_tag: add the CONFIG_ARCH_NEEDS_WEAK_PER_CPU macro when statically defining the percpu variable _shared_alloc_tag Hao Ge
  4 siblings, 0 replies; 12+ messages in thread
From: Hao Ge @ 2025-06-12  8:27 UTC (permalink / raw)
  To: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Mike Rapoport, Richard Henderson, Matt Turner, Dennis Zhou,
	Tejun Heo, Christoph Lameter, Heiko Carstens, Vasily Gorbik,
	Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
	Kent Overstreet
  Cc: linux-mm, linux-kernel, linux-alpha, linux-s390, Hao Ge, Hao Ge

From: Hao Ge <gehao@kylinos.cn>

We have made ARCH_NEEDS_WEAK_PER_CPU a Kconfig option and
introduced MODULE_NEEDS_WEAK_PER_CPU,so we should use
MODULE_NEEDS_WEAK_PER_CPU instead of ARCH_NEEDS_WEAK_PER_CPU
in all current places within the mm/ module.

Suggested-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Hao Ge <gehao@kylinos.cn>
---
 include/linux/alloc_tag.h   | 6 +++---
 include/linux/percpu-defs.h | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/include/linux/alloc_tag.h b/include/linux/alloc_tag.h
index 8f7931eb7d16..f349cca0ebed 100644
--- a/include/linux/alloc_tag.h
+++ b/include/linux/alloc_tag.h
@@ -88,7 +88,7 @@ static inline struct alloc_tag *ct_to_alloc_tag(struct codetag *ct)
 	return container_of(ct, struct alloc_tag, ct);
 }
 
-#ifdef ARCH_NEEDS_WEAK_PER_CPU
+#ifdef MODULE_NEEDS_WEAK_PER_CPU
 /*
  * When percpu variables are required to be defined as weak, static percpu
  * variables can't be used inside a function (see comments for DECLARE_PER_CPU_SECTION).
@@ -102,7 +102,7 @@ DECLARE_PER_CPU(struct alloc_tag_counters, _shared_alloc_tag);
 		.ct = CODE_TAG_INIT,						\
 		.counters = &_shared_alloc_tag };
 
-#else /* ARCH_NEEDS_WEAK_PER_CPU */
+#else /* MODULE_NEEDS_WEAK_PER_CPU */
 
 #ifdef MODULE
 
@@ -123,7 +123,7 @@ DECLARE_PER_CPU(struct alloc_tag_counters, _shared_alloc_tag);
 
 #endif /* MODULE */
 
-#endif /* ARCH_NEEDS_WEAK_PER_CPU */
+#endif /* MODULE_NEEDS_WEAK_PER_CPU */
 
 DECLARE_STATIC_KEY_MAYBE(CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT,
 			mem_alloc_profiling_key);
diff --git a/include/linux/percpu-defs.h b/include/linux/percpu-defs.h
index 0aeb0e276a3e..b4ecfc3a7b2b 100644
--- a/include/linux/percpu-defs.h
+++ b/include/linux/percpu-defs.h
@@ -64,13 +64,13 @@
  * 2. Static percpu variables cannot be defined inside a function.
  *
  * Archs which need weak percpu definitions should define
- * ARCH_NEEDS_WEAK_PER_CPU in asm/percpu.h when necessary.
+ * MODULE_NEEDS_WEAK_PER_CPU in asm/percpu.h 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(ARCH_NEEDS_WEAK_PER_CPU) || defined(CONFIG_DEBUG_FORCE_WEAK_PER_CPU)
+#if defined(MODULE_NEEDS_WEAK_PER_CPU) || defined(CONFIG_DEBUG_FORCE_WEAK_PER_CPU)
 /*
  * __pcpu_scope_* dummy variable is used to enforce scope.  It
  * receives the static modifier when it's used in front of
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 5/5] mm/alloc_tag: add the CONFIG_ARCH_NEEDS_WEAK_PER_CPU macro when statically defining the percpu variable _shared_alloc_tag
  2025-06-12  8:27 [PATCH 0/5] mm: Restrict the static definition of the per-CPU variable _shared_alloc_tag to s390 and alpha architectures only Hao Ge
                   ` (3 preceding siblings ...)
  2025-06-12  8:27 ` [PATCH 4/5] mm: use MODULE_NEEDS_WEAK_PER_CPU instead of ARCH_NEEDS_WEAK_PER_CPU Hao Ge
@ 2025-06-12  8:27 ` Hao Ge
  2025-06-12  8:57   ` Mike Rapoport
  4 siblings, 1 reply; 12+ messages in thread
From: Hao Ge @ 2025-06-12  8:27 UTC (permalink / raw)
  To: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Mike Rapoport, Richard Henderson, Matt Turner, Dennis Zhou,
	Tejun Heo, Christoph Lameter, Heiko Carstens, Vasily Gorbik,
	Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
	Kent Overstreet
  Cc: linux-mm, linux-kernel, linux-alpha, linux-s390, Hao Ge, Hao Ge

From: Hao Ge <gehao@kylinos.cn>

Recently discovered this entry while checking kallsyms on ARM64:
ffff800083e509c0 D _shared_alloc_tag

If CONFIG_ARCH_NEEDS_WEAK_PER_CPU is not defined(it is only defined for
s390 and alpha architectures),there's no need to statically define
the percpu variable _shared_alloc_tag. As the number of CPUs
increases,the wasted memory will grow correspondingly.

Enclose the definition of _shared_alloc_tag within the
CONFIG_ARCH_NEEDS_WEAK_PER_CPU condition.

Suggested-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Hao Ge <gehao@kylinos.cn>
---
 lib/alloc_tag.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
index c7f602fa7b23..14fd66f26e42 100644
--- a/lib/alloc_tag.c
+++ b/lib/alloc_tag.c
@@ -24,8 +24,10 @@ static bool mem_profiling_support;
 
 static struct codetag_type *alloc_tag_cttype;
 
+#ifdef CONFIG_ARCH_NEEDS_WEAK_PER_CPU
 DEFINE_PER_CPU(struct alloc_tag_counters, _shared_alloc_tag);
 EXPORT_SYMBOL(_shared_alloc_tag);
+#endif
 
 DEFINE_STATIC_KEY_MAYBE(CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT,
 			mem_alloc_profiling_key);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 5/5] mm/alloc_tag: add the CONFIG_ARCH_NEEDS_WEAK_PER_CPU macro when statically defining the percpu variable _shared_alloc_tag
  2025-06-12  8:27 ` [PATCH 5/5] mm/alloc_tag: add the CONFIG_ARCH_NEEDS_WEAK_PER_CPU macro when statically defining the percpu variable _shared_alloc_tag Hao Ge
@ 2025-06-12  8:57   ` Mike Rapoport
  2025-06-12 11:24     ` Heiko Carstens
  0 siblings, 1 reply; 12+ messages in thread
From: Mike Rapoport @ 2025-06-12  8:57 UTC (permalink / raw)
  To: Hao Ge
  Cc: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Richard Henderson, Matt Turner, Dennis Zhou, Tejun Heo,
	Christoph Lameter, Heiko Carstens, Vasily Gorbik,
	Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
	Kent Overstreet, linux-mm, linux-kernel, linux-alpha, linux-s390,
	Hao Ge

On Thu, Jun 12, 2025 at 04:27:30PM +0800, Hao Ge wrote:
> From: Hao Ge <gehao@kylinos.cn>
> 
> Recently discovered this entry while checking kallsyms on ARM64:
> ffff800083e509c0 D _shared_alloc_tag
> 
> If CONFIG_ARCH_NEEDS_WEAK_PER_CPU is not defined(it is only defined for
> s390 and alpha architectures),there's no need to statically define
> the percpu variable _shared_alloc_tag. As the number of CPUs
> increases,the wasted memory will grow correspondingly.
> 
> Enclose the definition of _shared_alloc_tag within the
> CONFIG_ARCH_NEEDS_WEAK_PER_CPU condition.
> 
> Suggested-by: Suren Baghdasaryan <surenb@google.com>
> Signed-off-by: Hao Ge <gehao@kylinos.cn>
> ---
>  lib/alloc_tag.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
> index c7f602fa7b23..14fd66f26e42 100644
> --- a/lib/alloc_tag.c
> +++ b/lib/alloc_tag.c
> @@ -24,8 +24,10 @@ static bool mem_profiling_support;
>  
>  static struct codetag_type *alloc_tag_cttype;
>  
> +#ifdef CONFIG_ARCH_NEEDS_WEAK_PER_CPU

It should be enough to add #ifdef ARCH_NEEDS_WEAK_PER_CPU here instead of
all the churn.

>  DEFINE_PER_CPU(struct alloc_tag_counters, _shared_alloc_tag);
>  EXPORT_SYMBOL(_shared_alloc_tag);
> +#endif
>  
>  DEFINE_STATIC_KEY_MAYBE(CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT,
>  			mem_alloc_profiling_key);
> -- 
> 2.25.1
> 

-- 
Sincerely yours,
Mike.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/5] alpha: Modify the definition logic of WEAK_PER_CPU
  2025-06-12  8:27 ` [PATCH 2/5] alpha: Modify the definition logic of WEAK_PER_CPU Hao Ge
@ 2025-06-12 11:22   ` Heiko Carstens
  2025-06-12 12:06     ` Hao Ge
  0 siblings, 1 reply; 12+ messages in thread
From: Heiko Carstens @ 2025-06-12 11:22 UTC (permalink / raw)
  To: Hao Ge
  Cc: Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Mike Rapoport, Richard Henderson, Matt Turner, Dennis Zhou,
	Tejun Heo, Christoph Lameter, Vasily Gorbik, Alexander Gordeev,
	Christian Borntraeger, Sven Schnelle, Kent Overstreet, linux-mm,
	linux-kernel, linux-alpha, linux-s390, Hao Ge

On Thu, Jun 12, 2025 at 04:27:27PM +0800, Hao Ge wrote:
> From: Hao Ge <gehao@kylinos.cn>
> 
> As stated in the first patch of this patch series,
> we make ARCH_NEEDS_WEAK_PER_CPU a Kconfig option,
> and replace all instances of ARCH_NEEDS_WEAK_PER_CPU
> in the kernel code with MODULE_NEEDS_WEAK_PER_CPU,
> gated by #ifdef CONFIG_ARCH_NEEDS_WEAK_PER_CPU.
> 
> We'll make corresponding changes for the alpha
> architecture.
> 
> Suggested-by: Suren Baghdasaryan <surenb@google.com>
> Signed-off-by: Hao Ge <gehao@kylinos.cn>
> ---
>  arch/alpha/Kconfig              | 1 +
>  arch/alpha/include/asm/percpu.h | 4 ++--
>  2 files changed, 3 insertions(+), 2 deletions(-)

...

> +	select ARCH_NEEDS_WEAK_PER_CPU
>  	select ARCH_NO_PREEMPT
>  	select ARCH_NO_SG_CHAIN
>  	select ARCH_USE_CMPXCHG_LOCKREF
> diff --git a/arch/alpha/include/asm/percpu.h b/arch/alpha/include/asm/percpu.h
> index 6923249f2d49..5d8b75ec3bf2 100644
> --- a/arch/alpha/include/asm/percpu.h
> +++ b/arch/alpha/include/asm/percpu.h
> @@ -10,8 +10,8 @@
>   *
>   * Always use weak definitions for percpu variables in modules.
>   */
> -#if defined(MODULE) && defined(CONFIG_SMP)
> -#define ARCH_NEEDS_WEAK_PER_CPU
> +#if defined(MODULE) && defined(CONFIG_SMP) && defined(CONFIG_ARCH_NEEDS_WEAK_PER_CPU)
> +#define MODULE_NEEDS_WEAK_PER_CPU

CONFIG_ARCH_NEEDS_WEAK_PER_CPU is always set with the above select.
So there is no point in adding this to the check.

Furthermore this removes ARCH_NEEDS_WEAK_PER_CPU and defines
MODULE_NEEDS_WEAK_PER_CPU while the common code conversion happens
only with patch 4. Or in other words: if patches are split like this
things break.

Same is true for patch 3. Just merging patches 2-4 would be the
easiest solution to this problem.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 5/5] mm/alloc_tag: add the CONFIG_ARCH_NEEDS_WEAK_PER_CPU macro when statically defining the percpu variable _shared_alloc_tag
  2025-06-12  8:57   ` Mike Rapoport
@ 2025-06-12 11:24     ` Heiko Carstens
  0 siblings, 0 replies; 12+ messages in thread
From: Heiko Carstens @ 2025-06-12 11:24 UTC (permalink / raw)
  To: Mike Rapoport
  Cc: Hao Ge, Andrew Morton, David Hildenbrand, Lorenzo Stoakes,
	Liam R. Howlett, Vlastimil Babka, Suren Baghdasaryan,
	Richard Henderson, Matt Turner, Dennis Zhou, Tejun Heo,
	Christoph Lameter, Vasily Gorbik, Alexander Gordeev,
	Christian Borntraeger, Sven Schnelle, Kent Overstreet, linux-mm,
	linux-kernel, linux-alpha, linux-s390, Hao Ge

On Thu, Jun 12, 2025 at 11:57:49AM +0300, Mike Rapoport wrote:
> On Thu, Jun 12, 2025 at 04:27:30PM +0800, Hao Ge wrote:
> > From: Hao Ge <gehao@kylinos.cn>
> > 
> > Recently discovered this entry while checking kallsyms on ARM64:
> > ffff800083e509c0 D _shared_alloc_tag
> > 
> > If CONFIG_ARCH_NEEDS_WEAK_PER_CPU is not defined(it is only defined for
> > s390 and alpha architectures),there's no need to statically define
> > the percpu variable _shared_alloc_tag. As the number of CPUs
> > increases,the wasted memory will grow correspondingly.
> > 
> > Enclose the definition of _shared_alloc_tag within the
> > CONFIG_ARCH_NEEDS_WEAK_PER_CPU condition.
> > 
> > Suggested-by: Suren Baghdasaryan <surenb@google.com>
> > Signed-off-by: Hao Ge <gehao@kylinos.cn>
> > ---
> >  lib/alloc_tag.c | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
> > index c7f602fa7b23..14fd66f26e42 100644
> > --- a/lib/alloc_tag.c
> > +++ b/lib/alloc_tag.c
> > @@ -24,8 +24,10 @@ static bool mem_profiling_support;
> >  
> >  static struct codetag_type *alloc_tag_cttype;
> >  
> > +#ifdef CONFIG_ARCH_NEEDS_WEAK_PER_CPU
> 
> It should be enough to add #ifdef ARCH_NEEDS_WEAK_PER_CPU here instead of
> all the churn.

That won't work since ARCH_NEEDS_WEAK_PER_CPU is only defined if MODULE is
also defined, which is not the case for core kernel code like lib/alloc_tag.c.

As a side note: I'm wondering if s390 still needs ARCH_NEEDS_WEAK_PER_CPU due
to all the compiler option changes we had recently. But that's a different
story and independent of this series.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/5] alpha: Modify the definition logic of WEAK_PER_CPU
  2025-06-12 11:22   ` Heiko Carstens
@ 2025-06-12 12:06     ` Hao Ge
  2025-06-12 12:15       ` Heiko Carstens
  0 siblings, 1 reply; 12+ messages in thread
From: Hao Ge @ 2025-06-12 12:06 UTC (permalink / raw)
  To: Heiko Carstens, Andrew Morton, Suren Baghdasaryan
  Cc: David Hildenbrand, Lorenzo Stoakes, Liam R. Howlett,
	Vlastimil Babka, Mike Rapoport, Richard Henderson, Matt Turner,
	Dennis Zhou, Tejun Heo, Christoph Lameter, Vasily Gorbik,
	Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
	Kent Overstreet, linux-mm, linux-kernel, linux-alpha, linux-s390,
	Hao Ge


On 2025/6/12 19:22, Heiko Carstens wrote:
> On Thu, Jun 12, 2025 at 04:27:27PM +0800, Hao Ge wrote:
>> From: Hao Ge <gehao@kylinos.cn>
>>
>> As stated in the first patch of this patch series,
>> we make ARCH_NEEDS_WEAK_PER_CPU a Kconfig option,
>> and replace all instances of ARCH_NEEDS_WEAK_PER_CPU
>> in the kernel code with MODULE_NEEDS_WEAK_PER_CPU,
>> gated by #ifdef CONFIG_ARCH_NEEDS_WEAK_PER_CPU.
>>
>> We'll make corresponding changes for the alpha
>> architecture.
>>
>> Suggested-by: Suren Baghdasaryan <surenb@google.com>
>> Signed-off-by: Hao Ge <gehao@kylinos.cn>
>> ---
>>   arch/alpha/Kconfig              | 1 +
>>   arch/alpha/include/asm/percpu.h | 4 ++--
>>   2 files changed, 3 insertions(+), 2 deletions(-)
> ...
>
>> +	select ARCH_NEEDS_WEAK_PER_CPU
>>   	select ARCH_NO_PREEMPT
>>   	select ARCH_NO_SG_CHAIN
>>   	select ARCH_USE_CMPXCHG_LOCKREF
>> diff --git a/arch/alpha/include/asm/percpu.h b/arch/alpha/include/asm/percpu.h
>> index 6923249f2d49..5d8b75ec3bf2 100644
>> --- a/arch/alpha/include/asm/percpu.h
>> +++ b/arch/alpha/include/asm/percpu.h
>> @@ -10,8 +10,8 @@
>>    *
>>    * Always use weak definitions for percpu variables in modules.
>>    */
>> -#if defined(MODULE) && defined(CONFIG_SMP)
>> -#define ARCH_NEEDS_WEAK_PER_CPU
>> +#if defined(MODULE) && defined(CONFIG_SMP) && defined(CONFIG_ARCH_NEEDS_WEAK_PER_CPU)
>> +#define MODULE_NEEDS_WEAK_PER_CPU

Hi Heiko

Thank you for taking the time to review these patches.

> CONFIG_ARCH_NEEDS_WEAK_PER_CPU is always set with the above select.
> So there is no point in adding this to the check.
Yes, that's exactly the case.
> Furthermore this removes ARCH_NEEDS_WEAK_PER_CPU and defines
> MODULE_NEEDS_WEAK_PER_CPU while the common code conversion happens
> only with patch 4. Or in other words: if patches are split like this
> things break.
>
> Same is true for patch 3. Just merging patches 2-4 would be the
> easiest solution to this problem.

I think this should be CC'd to the stable branch.

I'm wondering if these need to be integrated into a single patch.

I'm not sure. What do you think?


Hi Andrew and Suren

How do you see this? Any suggestions?

Thanks
Best Regards
Hao


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/5] alpha: Modify the definition logic of WEAK_PER_CPU
  2025-06-12 12:06     ` Hao Ge
@ 2025-06-12 12:15       ` Heiko Carstens
  0 siblings, 0 replies; 12+ messages in thread
From: Heiko Carstens @ 2025-06-12 12:15 UTC (permalink / raw)
  To: Hao Ge
  Cc: Andrew Morton, Suren Baghdasaryan, David Hildenbrand,
	Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka, Mike Rapoport,
	Richard Henderson, Matt Turner, Dennis Zhou, Tejun Heo,
	Christoph Lameter, Vasily Gorbik, Alexander Gordeev,
	Christian Borntraeger, Sven Schnelle, Kent Overstreet, linux-mm,
	linux-kernel, linux-alpha, linux-s390, Hao Ge

On Thu, Jun 12, 2025 at 08:06:25PM +0800, Hao Ge wrote:
> > Furthermore this removes ARCH_NEEDS_WEAK_PER_CPU and defines
> > MODULE_NEEDS_WEAK_PER_CPU while the common code conversion happens
> > only with patch 4. Or in other words: if patches are split like this
> > things break.
> > 
> > Same is true for patch 3. Just merging patches 2-4 would be the
> > easiest solution to this problem.
> 
> I think this should be CC'd to the stable branch.

Why should this go to stable? This is just a minor optimization.

> I'm wondering if these need to be integrated into a single patch.
> 
> I'm not sure. What do you think?

stable or not: this series must be bisectable, which is currently not the case.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2025-06-12 12:16 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-12  8:27 [PATCH 0/5] mm: Restrict the static definition of the per-CPU variable _shared_alloc_tag to s390 and alpha architectures only Hao Ge
2025-06-12  8:27 ` [PATCH 1/5] mm/Kconfig: add ARCH_NEEDS_WEAK_PER_CPU option Hao Ge
2025-06-12  8:27 ` [PATCH 2/5] alpha: Modify the definition logic of WEAK_PER_CPU Hao Ge
2025-06-12 11:22   ` Heiko Carstens
2025-06-12 12:06     ` Hao Ge
2025-06-12 12:15       ` Heiko Carstens
2025-06-12  8:27 ` [PATCH 3/5] s390: " Hao Ge
2025-06-12  8:27 ` [PATCH 4/5] mm: use MODULE_NEEDS_WEAK_PER_CPU instead of ARCH_NEEDS_WEAK_PER_CPU Hao Ge
2025-06-12  8:27 ` [PATCH 5/5] mm/alloc_tag: add the CONFIG_ARCH_NEEDS_WEAK_PER_CPU macro when statically defining the percpu variable _shared_alloc_tag Hao Ge
2025-06-12  8:57   ` Mike Rapoport
2025-06-12 11:24     ` Heiko Carstens
     [not found] <cover.1749702889.git.gehao@kylinos.cn>
2025-06-12  7:54 ` [PATCH 1/5] mm/Kconfig: add ARCH_NEEDS_WEAK_PER_CPU option Hao Ge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).