]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
memcg: make __mod_memcg_lruvec_state re-entrant safe against irqs
authorShakeel Butt <shakeel.butt@linux.dev>
Wed, 14 May 2025 18:41:56 +0000 (11:41 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 22 May 2025 21:55:38 +0000 (14:55 -0700)
Let's make __mod_memcg_lruvec_state re-entrant safe and name it
mod_memcg_lruvec_state().  The only thing needed is to convert the usage
of __this_cpu_add() to this_cpu_add().  There are two callers of
mod_memcg_lruvec_state() and one of them i.e.  __mod_objcg_mlstate() will
be re-entrant safe as well, so, rename it mod_objcg_mlstate().  The last
caller __mod_lruvec_state() still calls __mod_node_page_state() which is
not re-entrant safe yet, so keep it as is.

Link: https://lkml.kernel.org/r/20250514184158.3471331-6-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>
mm/memcontrol.c

index 0ef7db12605b4240200f5d90592ad716e3520992..f66cacb6f2a003f0b73dd554c8327a427fae5336 100644 (file)
@@ -725,7 +725,7 @@ unsigned long memcg_page_state_local(struct mem_cgroup *memcg, int idx)
 }
 #endif
 
-static void __mod_memcg_lruvec_state(struct lruvec *lruvec,
+static void mod_memcg_lruvec_state(struct lruvec *lruvec,
                                     enum node_stat_item idx,
                                     int val)
 {
@@ -743,10 +743,10 @@ static void __mod_memcg_lruvec_state(struct lruvec *lruvec,
        cpu = get_cpu();
 
        /* Update memcg */
-       __this_cpu_add(memcg->vmstats_percpu->state[i], val);
+       this_cpu_add(memcg->vmstats_percpu->state[i], val);
 
        /* Update lruvec */
-       __this_cpu_add(pn->lruvec_stats_percpu->state[i], val);
+       this_cpu_add(pn->lruvec_stats_percpu->state[i], val);
 
        val = memcg_state_val_in_pages(idx, val);
        memcg_rstat_updated(memcg, val, cpu);
@@ -773,7 +773,7 @@ void __mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
 
        /* Update memcg and lruvec */
        if (!mem_cgroup_disabled())
-               __mod_memcg_lruvec_state(lruvec, idx, val);
+               mod_memcg_lruvec_state(lruvec, idx, val);
 }
 
 void __lruvec_stat_mod_folio(struct folio *folio, enum node_stat_item idx,
@@ -2525,7 +2525,7 @@ static void commit_charge(struct folio *folio, struct mem_cgroup *memcg)
        folio->memcg_data = (unsigned long)memcg;
 }
 
-static inline void __mod_objcg_mlstate(struct obj_cgroup *objcg,
+static inline void mod_objcg_mlstate(struct obj_cgroup *objcg,
                                       struct pglist_data *pgdat,
                                       enum node_stat_item idx, int nr)
 {
@@ -2535,7 +2535,7 @@ static inline void __mod_objcg_mlstate(struct obj_cgroup *objcg,
        rcu_read_lock();
        memcg = obj_cgroup_memcg(objcg);
        lruvec = mem_cgroup_lruvec(memcg, pgdat);
-       __mod_memcg_lruvec_state(lruvec, idx, nr);
+       mod_memcg_lruvec_state(lruvec, idx, nr);
        rcu_read_unlock();
 }
 
@@ -2845,12 +2845,12 @@ static void __account_obj_stock(struct obj_cgroup *objcg,
                struct pglist_data *oldpg = stock->cached_pgdat;
 
                if (stock->nr_slab_reclaimable_b) {
-                       __mod_objcg_mlstate(objcg, oldpg, NR_SLAB_RECLAIMABLE_B,
+                       mod_objcg_mlstate(objcg, oldpg, NR_SLAB_RECLAIMABLE_B,
                                          stock->nr_slab_reclaimable_b);
                        stock->nr_slab_reclaimable_b = 0;
                }
                if (stock->nr_slab_unreclaimable_b) {
-                       __mod_objcg_mlstate(objcg, oldpg, NR_SLAB_UNRECLAIMABLE_B,
+                       mod_objcg_mlstate(objcg, oldpg, NR_SLAB_UNRECLAIMABLE_B,
                                          stock->nr_slab_unreclaimable_b);
                        stock->nr_slab_unreclaimable_b = 0;
                }
@@ -2876,7 +2876,7 @@ static void __account_obj_stock(struct obj_cgroup *objcg,
                }
        }
        if (nr)
-               __mod_objcg_mlstate(objcg, pgdat, idx, nr);
+               mod_objcg_mlstate(objcg, pgdat, idx, nr);
 }
 
 static bool consume_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes,
@@ -2945,13 +2945,13 @@ static void drain_obj_stock(struct obj_stock_pcp *stock)
         */
        if (stock->nr_slab_reclaimable_b || stock->nr_slab_unreclaimable_b) {
                if (stock->nr_slab_reclaimable_b) {
-                       __mod_objcg_mlstate(old, stock->cached_pgdat,
+                       mod_objcg_mlstate(old, stock->cached_pgdat,
                                          NR_SLAB_RECLAIMABLE_B,
                                          stock->nr_slab_reclaimable_b);
                        stock->nr_slab_reclaimable_b = 0;
                }
                if (stock->nr_slab_unreclaimable_b) {
-                       __mod_objcg_mlstate(old, stock->cached_pgdat,
+                       mod_objcg_mlstate(old, stock->cached_pgdat,
                                          NR_SLAB_UNRECLAIMABLE_B,
                                          stock->nr_slab_unreclaimable_b);
                        stock->nr_slab_unreclaimable_b = 0;