ANDROID: Add do_traversal_all_lruvec() in mm/memcontrol.c

do_traversal_all_lruvec: traversal all lruvec and do hooks.

this replace vendor hook [1] with callback function which makes the
symbol easy to use.

[1] https: //android-review.googlesource.com/c/kernel/common/+/3075627
Bug: 236578020
Bug: 407947362
Bug: 395197442
Change-Id: I3d4f5159faaca1ee71ffa65f2fc1341f51da637c
Signed-off-by: Hailong Liu <liuhailong@oppo.com>
Signed-off-by: wengle <wengle@oppo.com>
This commit is contained in:
wengle
2025-04-17 20:34:30 +08:00
committed by Treehugger Robot
parent 4e5af979c0
commit 82f8034e9f
2 changed files with 33 additions and 0 deletions
+5
View File
@@ -367,6 +367,11 @@ enum objext_flags {
static inline bool folio_memcg_kmem(struct folio *folio);
void do_traversal_all_lruvec(int (*callback)(struct mem_cgroup *memcg,
struct lruvec *lruvec,
void *private),
void *private);
/*
* After the initialization objcg->memcg is always pointing at
* a valid memcg, but can be atomically swapped to the parent memcg.
+28
View File
@@ -1271,6 +1271,34 @@ struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,
return lruvec;
}
void do_traversal_all_lruvec(int (*callback)(struct mem_cgroup *memcg,
struct lruvec *lruvec,
void *private),
void *private)
{
pg_data_t *pgdat;
int ret;
for_each_online_pgdat(pgdat) {
struct mem_cgroup *memcg = NULL;
memcg = mem_cgroup_iter(NULL, NULL, NULL);
do {
struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdat);
ret = callback(memcg, lruvec, private);
if (ret) {
mem_cgroup_iter_break(NULL, memcg);
break;
}
memcg = mem_cgroup_iter(NULL, memcg, NULL);
} while (memcg);
}
}
EXPORT_SYMBOL_GPL(do_traversal_all_lruvec);
/**
* mem_cgroup_update_lru_size - account for adding or removing an lru page
* @lruvec: mem_cgroup per zone lru vector