summaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorShakeel Butt <shakeel.butt@linux.dev>2025-05-14 11:41:57 -0700
committerAndrew Morton <akpm@linux-foundation.org>2025-05-22 14:55:38 -0700
commit0ccf1806d44f7c567c73d6ef076a8f6c8c16c74b (patch)
tree999cd81eef1a459e6b8421857ac58ef956894e49 /mm
parenteee8a1778cab9efd5ba0eee1c081b4a4b396375b (diff)
memcg: no stock lock for cpu hot-unplug
Previously on the cpu hot-unplug, the kernel would call drain_obj_stock() with objcg local lock. However local lock was not needed as the stock which was accessed belongs to a dead cpu but we kept it there to disable irqs as drain_obj_stock() may call mod_objcg_mlstate() which required irqs disabled. However there is no need to disable irqs now for mod_objcg_mlstate(), so we can remove the local lock altogether from cpu hot-unplug path. Link: https://lkml.kernel.org/r/20250514184158.3471331-7-shakeel.butt@linux.dev Signed-off-by: Shakeel Butt <shakeel.butt@linux.dev> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Muchun Song <muchun.song@linux.dev> Cc: Roman Gushchin <roman.gushchin@linux.dev> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/memcontrol.c11
1 files changed, 1 insertions, 10 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index f66cacb6f2a0..d8508b57d0fa 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -2023,17 +2023,8 @@ void drain_all_stock(struct mem_cgroup *root_memcg)
static int memcg_hotplug_cpu_dead(unsigned int cpu)
{
- struct obj_stock_pcp *obj_st;
- unsigned long flags;
-
- obj_st = &per_cpu(obj_stock, cpu);
-
- /* drain_obj_stock requires objstock.lock */
- local_lock_irqsave(&obj_stock.lock, flags);
- drain_obj_stock(obj_st);
- local_unlock_irqrestore(&obj_stock.lock, flags);
-
/* no need for the local lock */
+ drain_obj_stock(&per_cpu(obj_stock, cpu));
drain_stock_fully(&per_cpu(memcg_stock, cpu));
return 0;