From 82f8034e9facf3a032da4a1454e24d0cb5b41b55 Mon Sep 17 00:00:00 2001 From: wengle Date: Thu, 17 Apr 2025 20:34:30 +0800 Subject: [PATCH] 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 Signed-off-by: wengle --- include/linux/memcontrol.h | 5 +++++ mm/memcontrol.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index ea37a4342334..3283f5db1217 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -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. diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 43ca0b458eb9..ddaba40255bb 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -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