Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

memcg: use __mod_memcg_state in drain_obj_stock

For non-PREEMPT_RT kernels, drain_obj_stock() is always called with irq
disabled, so we can use __mod_memcg_state() instead of mod_memcg_state().
For PREEMPT_RT, we need to add memcg_stats_[un]lock in
__mod_memcg_state().

Link: https://lkml.kernel.org/r/20250404013913.1663035-8-shakeel.butt@linux.dev
Signed-off-by: Shakeel Butt <shakeel.butt@linux.dev>
Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Roman Gushchin <roman.gushchin@linux.dev>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Muchun Song <muchun.song@linux.dev>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Shakeel Butt and committed by
Andrew Morton
42a1910c ae51c775

+3 -1
+3 -1
mm/memcontrol.c
··· 710 710 if (WARN_ONCE(BAD_STAT_IDX(i), "%s: missing stat item %d\n", __func__, idx)) 711 711 return; 712 712 713 + memcg_stats_lock(); 713 714 __this_cpu_add(memcg->vmstats_percpu->state[i], val); 714 715 val = memcg_state_val_in_pages(idx, val); 715 716 memcg_rstat_updated(memcg, val); 716 717 trace_mod_memcg_state(memcg, idx, val); 718 + memcg_stats_unlock(); 717 719 } 718 720 719 721 #ifdef CONFIG_MEMCG_V1 ··· 2868 2866 2869 2867 memcg = get_mem_cgroup_from_objcg(old); 2870 2868 2871 - mod_memcg_state(memcg, MEMCG_KMEM, -nr_pages); 2869 + __mod_memcg_state(memcg, MEMCG_KMEM, -nr_pages); 2872 2870 memcg1_account_kmem(memcg, -nr_pages); 2873 2871 if (!mem_cgroup_is_root(memcg)) 2874 2872 memcg_uncharge(memcg, nr_pages);