ANDROID: add two func in mm/memcontrol.c

- page_to_lruvec: get lruvec from page and pgdat.
- do_traversal_all_lruvec: traversal all lruvec and do hookss.

Bug: 236578020
Signed-off-by: Peifeng Li <lipeifeng@oppo.com>
Change-Id: I3d4f5159faaca1ee71ffa65f2fc1341f51da637c
This commit is contained in:
Peifeng Li 2022-07-15 16:38:06 +08:00 committed by Suren Baghdasaryan
parent e56f8712cf
commit 2b377175a3
2 changed files with 44 additions and 0 deletions

View File

@ -345,6 +345,9 @@ struct mem_cgroup {
extern struct mem_cgroup *root_mem_cgroup;
struct lruvec *page_to_lruvec(struct page *page, pg_data_t *pgdat);
void do_traversal_all_lruvec(void);
static __always_inline bool memcg_stat_item_in_bytes(int idx)
{
if (idx == MEMCG_PERCPU_B)
@ -969,6 +972,15 @@ void split_page_memcg(struct page *head, unsigned int nr);
struct mem_cgroup;
static inline struct lruvec *page_to_lruvec(struct page *page, pg_data_t *pgdat)
{
return NULL;
}
static inline void do_traversal_all_lruvec(void)
{
}
static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)
{
return true;

View File

@ -1372,6 +1372,38 @@ struct lruvec *mem_cgroup_page_lruvec(struct page *page, struct pglist_data *pgd
return lruvec;
}
struct lruvec *page_to_lruvec(struct page *page, pg_data_t *pgdat)
{
struct lruvec *lruvec;
lruvec = mem_cgroup_page_lruvec(page, pgdat);
return lruvec;
}
EXPORT_SYMBOL_GPL(page_to_lruvec);
void do_traversal_all_lruvec(void)
{
pg_data_t *pgdat;
for_each_online_pgdat(pgdat) {
struct mem_cgroup *memcg = NULL;
spin_lock_irq(&pgdat->lru_lock);
memcg = mem_cgroup_iter(NULL, NULL, NULL);
do {
struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdat);
trace_android_vh_do_traversal_lruvec(lruvec);
memcg = mem_cgroup_iter(NULL, memcg, NULL);
} while (memcg);
spin_unlock_irq(&pgdat->lru_lock);
}
}
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