memcg: simple cleanup of stats update functions

mod_memcg_lruvec_state() is never called from outside of memcontrol.c and
with always irq disabled.  So, replace it with the irq disabled version
and add an assert that irq is disabled in the caller.

Similarly mod_objcg_state() is not called from outside of memcontrol.c, so
simply make it static and change it's name to __mod_objcg_state().

Link: https://lkml.kernel.org/r/20240420232505.2768428-1-shakeel.butt@linux.dev
Signed-off-by: Shakeel Butt <shakeel.butt@linux.dev>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Reviewed-by: T.J. Mercier <tjmercier@google.com>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Roman Gushchin <roman.gushchin@linux.dev>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Shakeel Butt 2024-04-20 16:25:05 -07:00 committed by Andrew Morton
parent 6ed31ba392
commit 91882c1617
3 changed files with 15 additions and 35 deletions

View File

@ -1077,8 +1077,6 @@ static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
void mem_cgroup_flush_stats(struct mem_cgroup *memcg); void mem_cgroup_flush_stats(struct mem_cgroup *memcg);
void mem_cgroup_flush_stats_ratelimited(struct mem_cgroup *memcg); void mem_cgroup_flush_stats_ratelimited(struct mem_cgroup *memcg);
void __mod_memcg_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
int val);
void __mod_lruvec_kmem_state(void *p, enum node_stat_item idx, int val); void __mod_lruvec_kmem_state(void *p, enum node_stat_item idx, int val);
static inline void mod_lruvec_kmem_state(void *p, enum node_stat_item idx, static inline void mod_lruvec_kmem_state(void *p, enum node_stat_item idx,
@ -1091,16 +1089,6 @@ static inline void mod_lruvec_kmem_state(void *p, enum node_stat_item idx,
local_irq_restore(flags); local_irq_restore(flags);
} }
static inline void mod_memcg_lruvec_state(struct lruvec *lruvec,
enum node_stat_item idx, int val)
{
unsigned long flags;
local_irq_save(flags);
__mod_memcg_lruvec_state(lruvec, idx, val);
local_irq_restore(flags);
}
void __count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx, void __count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx,
unsigned long count); unsigned long count);
@ -1594,11 +1582,6 @@ static inline void mem_cgroup_flush_stats_ratelimited(struct mem_cgroup *memcg)
{ {
} }
static inline void __mod_memcg_lruvec_state(struct lruvec *lruvec,
enum node_stat_item idx, int val)
{
}
static inline void __mod_lruvec_kmem_state(void *p, enum node_stat_item idx, static inline void __mod_lruvec_kmem_state(void *p, enum node_stat_item idx,
int val) int val)
{ {

View File

@ -836,8 +836,9 @@ static unsigned long memcg_page_state_local(struct mem_cgroup *memcg, int idx)
return x; return x;
} }
void __mod_memcg_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx, static void __mod_memcg_lruvec_state(struct lruvec *lruvec,
int val) enum node_stat_item idx,
int val)
{ {
struct mem_cgroup_per_node *pn; struct mem_cgroup_per_node *pn;
struct mem_cgroup *memcg; struct mem_cgroup *memcg;
@ -2978,21 +2979,19 @@ void mem_cgroup_commit_charge(struct folio *folio, struct mem_cgroup *memcg)
#ifdef CONFIG_MEMCG_KMEM #ifdef CONFIG_MEMCG_KMEM
/* static inline void __mod_objcg_mlstate(struct obj_cgroup *objcg,
* mod_objcg_mlstate() may be called with irq enabled, so struct pglist_data *pgdat,
* mod_memcg_lruvec_state() should be used. enum node_stat_item idx, int nr)
*/
static inline void mod_objcg_mlstate(struct obj_cgroup *objcg,
struct pglist_data *pgdat,
enum node_stat_item idx, int nr)
{ {
struct mem_cgroup *memcg; struct mem_cgroup *memcg;
struct lruvec *lruvec; struct lruvec *lruvec;
lockdep_assert_irqs_disabled();
rcu_read_lock(); rcu_read_lock();
memcg = obj_cgroup_memcg(objcg); memcg = obj_cgroup_memcg(objcg);
lruvec = mem_cgroup_lruvec(memcg, pgdat); lruvec = mem_cgroup_lruvec(memcg, pgdat);
mod_memcg_lruvec_state(lruvec, idx, nr); __mod_memcg_lruvec_state(lruvec, idx, nr);
rcu_read_unlock(); rcu_read_unlock();
} }
@ -3312,7 +3311,7 @@ void __memcg_kmem_uncharge_page(struct page *page, int order)
obj_cgroup_put(objcg); obj_cgroup_put(objcg);
} }
void mod_objcg_state(struct obj_cgroup *objcg, struct pglist_data *pgdat, static void mod_objcg_state(struct obj_cgroup *objcg, struct pglist_data *pgdat,
enum node_stat_item idx, int nr) enum node_stat_item idx, int nr)
{ {
struct memcg_stock_pcp *stock; struct memcg_stock_pcp *stock;
@ -3340,12 +3339,12 @@ void mod_objcg_state(struct obj_cgroup *objcg, struct pglist_data *pgdat,
struct pglist_data *oldpg = stock->cached_pgdat; struct pglist_data *oldpg = stock->cached_pgdat;
if (stock->nr_slab_reclaimable_b) { 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);
stock->nr_slab_reclaimable_b = 0; stock->nr_slab_reclaimable_b = 0;
} }
if (stock->nr_slab_unreclaimable_b) { 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);
stock->nr_slab_unreclaimable_b = 0; stock->nr_slab_unreclaimable_b = 0;
} }
@ -3371,7 +3370,7 @@ void mod_objcg_state(struct obj_cgroup *objcg, struct pglist_data *pgdat,
} }
} }
if (nr) if (nr)
mod_objcg_mlstate(objcg, pgdat, idx, nr); __mod_objcg_mlstate(objcg, pgdat, idx, nr);
local_unlock_irqrestore(&memcg_stock.stock_lock, flags); local_unlock_irqrestore(&memcg_stock.stock_lock, flags);
obj_cgroup_put(old); obj_cgroup_put(old);
@ -3437,13 +3436,13 @@ static struct obj_cgroup *drain_obj_stock(struct memcg_stock_pcp *stock)
*/ */
if (stock->nr_slab_reclaimable_b || stock->nr_slab_unreclaimable_b) { if (stock->nr_slab_reclaimable_b || stock->nr_slab_unreclaimable_b) {
if (stock->nr_slab_reclaimable_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, NR_SLAB_RECLAIMABLE_B,
stock->nr_slab_reclaimable_b); stock->nr_slab_reclaimable_b);
stock->nr_slab_reclaimable_b = 0; stock->nr_slab_reclaimable_b = 0;
} }
if (stock->nr_slab_unreclaimable_b) { if (stock->nr_slab_unreclaimable_b) {
mod_objcg_mlstate(old, stock->cached_pgdat, __mod_objcg_mlstate(old, stock->cached_pgdat,
NR_SLAB_UNRECLAIMABLE_B, NR_SLAB_UNRECLAIMABLE_B,
stock->nr_slab_unreclaimable_b); stock->nr_slab_unreclaimable_b);
stock->nr_slab_unreclaimable_b = 0; stock->nr_slab_unreclaimable_b = 0;

View File

@ -581,8 +581,6 @@ bool __memcg_slab_post_alloc_hook(struct kmem_cache *s, struct list_lru *lru,
gfp_t flags, size_t size, void **p); gfp_t flags, size_t size, void **p);
void __memcg_slab_free_hook(struct kmem_cache *s, struct slab *slab, void __memcg_slab_free_hook(struct kmem_cache *s, struct slab *slab,
void **p, int objects, struct slabobj_ext *obj_exts); void **p, int objects, struct slabobj_ext *obj_exts);
void mod_objcg_state(struct obj_cgroup *objcg, struct pglist_data *pgdat,
enum node_stat_item idx, int nr);
#endif #endif
size_t __ksize(const void *objp); size_t __ksize(const void *objp);