[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251127233635.4170047-2-krisman@suse.de>
Date: Thu, 27 Nov 2025 18:36:28 -0500
From: Gabriel Krisman Bertazi <krisman@...e.de>
To: linux-mm@...ck.org
Cc: Gabriel Krisman Bertazi <krisman@...e.de>,
linux-kernel@...r.kernel.org,
jack@...e.cz,
Mateusz Guzik <mjguzik@...il.com>,
Shakeel Butt <shakeel.butt@...ux.dev>,
Michal Hocko <mhocko@...nel.org>,
Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
Dennis Zhou <dennis@...nel.org>,
Tejun Heo <tj@...nel.org>,
Christoph Lameter <cl@...two.org>,
Andrew Morton <akpm@...ux-foundation.org>,
David Hildenbrand <david@...hat.com>,
Lorenzo Stoakes <lorenzo.stoakes@...cle.com>,
"Liam R. Howlett" <Liam.Howlett@...cle.com>,
Vlastimil Babka <vbabka@...e.cz>,
Mike Rapoport <rppt@...nel.org>,
Suren Baghdasaryan <surenb@...gle.com>
Subject: [RFC PATCH 1/4] lib/percpu_counter: Split out a helper to insert into hotplug list
In preparation to using it with the lazy pcpu counter.
Signed-off-by: Gabriel Krisman Bertazi <krisman@...e.de>
---
lib/percpu_counter.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/lib/percpu_counter.c b/lib/percpu_counter.c
index 2891f94a11c6..c2322d53f3b1 100644
--- a/lib/percpu_counter.c
+++ b/lib/percpu_counter.c
@@ -185,11 +185,26 @@ s64 __percpu_counter_sum(struct percpu_counter *fbc)
}
EXPORT_SYMBOL(__percpu_counter_sum);
+static int cpu_hotplug_add_watchlist(struct percpu_counter *fbc, int nr_counters)
+{
+#ifdef CONFIG_HOTPLUG_CPU
+ unsigned long flags;
+ int i;
+
+ spin_lock_irqsave(&percpu_counters_lock, flags);
+ for (i = 0; i < nr_counters; i++) {
+ INIT_LIST_HEAD(&fbc[i].list);
+ list_add(&fbc[i].list, &percpu_counters);
+ }
+ spin_unlock_irqrestore(&percpu_counters_lock, flags);
+#endif
+ return 0;
+}
+
int __percpu_counter_init_many(struct percpu_counter *fbc, s64 amount,
gfp_t gfp, u32 nr_counters,
struct lock_class_key *key)
{
- unsigned long flags __maybe_unused;
size_t counter_size;
s32 __percpu *counters;
u32 i;
@@ -205,21 +220,12 @@ int __percpu_counter_init_many(struct percpu_counter *fbc, s64 amount,
for (i = 0; i < nr_counters; i++) {
raw_spin_lock_init(&fbc[i].lock);
lockdep_set_class(&fbc[i].lock, key);
-#ifdef CONFIG_HOTPLUG_CPU
- INIT_LIST_HEAD(&fbc[i].list);
-#endif
fbc[i].count = amount;
fbc[i].counters = (void __percpu *)counters + i * counter_size;
debug_percpu_counter_activate(&fbc[i]);
}
-
-#ifdef CONFIG_HOTPLUG_CPU
- spin_lock_irqsave(&percpu_counters_lock, flags);
- for (i = 0; i < nr_counters; i++)
- list_add(&fbc[i].list, &percpu_counters);
- spin_unlock_irqrestore(&percpu_counters_lock, flags);
-#endif
+ cpu_hotplug_add_watchlist(fbc, nr_counters);
return 0;
}
EXPORT_SYMBOL(__percpu_counter_init_many);
--
2.51.0
Powered by blists - more mailing lists