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.
Signed-off-by: Shakeel Butt <shakeel.butt@linux.dev>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
---
mm/memcontrol.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 1071db0b1df8..04d756be708b 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -2025,17 +2025,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;
--
2.47.1