Skip to content

Commit eee8a17

Browse files
shakeelbakpm00
authored andcommitted
memcg: make __mod_memcg_lruvec_state re-entrant safe against irqs
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/[email protected] Signed-off-by: Shakeel Butt <[email protected]> Acked-by: Vlastimil Babka <[email protected]> Cc: Alexei Starovoitov <[email protected]> Cc: Johannes Weiner <[email protected]> Cc: Michal Hocko <[email protected]> Cc: Muchun Song <[email protected]> Cc: Roman Gushchin <[email protected]> Cc: Sebastian Andrzej Siewior <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent e52401e commit eee8a17

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

mm/memcontrol.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ unsigned long memcg_page_state_local(struct mem_cgroup *memcg, int idx)
725725
}
726726
#endif
727727

728-
static void __mod_memcg_lruvec_state(struct lruvec *lruvec,
728+
static void mod_memcg_lruvec_state(struct lruvec *lruvec,
729729
enum node_stat_item idx,
730730
int val)
731731
{
@@ -743,10 +743,10 @@ static void __mod_memcg_lruvec_state(struct lruvec *lruvec,
743743
cpu = get_cpu();
744744

745745
/* Update memcg */
746-
__this_cpu_add(memcg->vmstats_percpu->state[i], val);
746+
this_cpu_add(memcg->vmstats_percpu->state[i], val);
747747

748748
/* Update lruvec */
749-
__this_cpu_add(pn->lruvec_stats_percpu->state[i], val);
749+
this_cpu_add(pn->lruvec_stats_percpu->state[i], val);
750750

751751
val = memcg_state_val_in_pages(idx, val);
752752
memcg_rstat_updated(memcg, val, cpu);
@@ -773,7 +773,7 @@ void __mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
773773

774774
/* Update memcg and lruvec */
775775
if (!mem_cgroup_disabled())
776-
__mod_memcg_lruvec_state(lruvec, idx, val);
776+
mod_memcg_lruvec_state(lruvec, idx, val);
777777
}
778778

779779
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)
25252525
folio->memcg_data = (unsigned long)memcg;
25262526
}
25272527

2528-
static inline void __mod_objcg_mlstate(struct obj_cgroup *objcg,
2528+
static inline void mod_objcg_mlstate(struct obj_cgroup *objcg,
25292529
struct pglist_data *pgdat,
25302530
enum node_stat_item idx, int nr)
25312531
{
@@ -2535,7 +2535,7 @@ static inline void __mod_objcg_mlstate(struct obj_cgroup *objcg,
25352535
rcu_read_lock();
25362536
memcg = obj_cgroup_memcg(objcg);
25372537
lruvec = mem_cgroup_lruvec(memcg, pgdat);
2538-
__mod_memcg_lruvec_state(lruvec, idx, nr);
2538+
mod_memcg_lruvec_state(lruvec, idx, nr);
25392539
rcu_read_unlock();
25402540
}
25412541

@@ -2845,12 +2845,12 @@ static void __account_obj_stock(struct obj_cgroup *objcg,
28452845
struct pglist_data *oldpg = stock->cached_pgdat;
28462846

28472847
if (stock->nr_slab_reclaimable_b) {
2848-
__mod_objcg_mlstate(objcg, oldpg, NR_SLAB_RECLAIMABLE_B,
2848+
mod_objcg_mlstate(objcg, oldpg, NR_SLAB_RECLAIMABLE_B,
28492849
stock->nr_slab_reclaimable_b);
28502850
stock->nr_slab_reclaimable_b = 0;
28512851
}
28522852
if (stock->nr_slab_unreclaimable_b) {
2853-
__mod_objcg_mlstate(objcg, oldpg, NR_SLAB_UNRECLAIMABLE_B,
2853+
mod_objcg_mlstate(objcg, oldpg, NR_SLAB_UNRECLAIMABLE_B,
28542854
stock->nr_slab_unreclaimable_b);
28552855
stock->nr_slab_unreclaimable_b = 0;
28562856
}
@@ -2876,7 +2876,7 @@ static void __account_obj_stock(struct obj_cgroup *objcg,
28762876
}
28772877
}
28782878
if (nr)
2879-
__mod_objcg_mlstate(objcg, pgdat, idx, nr);
2879+
mod_objcg_mlstate(objcg, pgdat, idx, nr);
28802880
}
28812881

28822882
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)
29452945
*/
29462946
if (stock->nr_slab_reclaimable_b || stock->nr_slab_unreclaimable_b) {
29472947
if (stock->nr_slab_reclaimable_b) {
2948-
__mod_objcg_mlstate(old, stock->cached_pgdat,
2948+
mod_objcg_mlstate(old, stock->cached_pgdat,
29492949
NR_SLAB_RECLAIMABLE_B,
29502950
stock->nr_slab_reclaimable_b);
29512951
stock->nr_slab_reclaimable_b = 0;
29522952
}
29532953
if (stock->nr_slab_unreclaimable_b) {
2954-
__mod_objcg_mlstate(old, stock->cached_pgdat,
2954+
mod_objcg_mlstate(old, stock->cached_pgdat,
29552955
NR_SLAB_UNRECLAIMABLE_B,
29562956
stock->nr_slab_unreclaimable_b);
29572957
stock->nr_slab_unreclaimable_b = 0;

0 commit comments

Comments
 (0)