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:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user