From 1da7155f076c25dd9986a770cdb47b0bea1be110 Mon Sep 17 00:00:00 2001 From: Jianan Huang Date: Tue, 15 Oct 2024 14:32:06 +0800 Subject: [PATCH] ANDROID: mm: add vendor hook to add folio to specific memcg Add vendor hook when folio charges memcg. This is to manage some specific folios in separate memcg for more accurate memory reclamation. Bug: 423742169 Bug: 373540729 Change-Id: I11b1fca279ea9e9e8be1f789bdf1f9d7c1bf001f Signed-off-by: Jianan Huang (cherry picked from commit 6e2565c513127c425ddfb84e473dba8161154036) (cherry picked from commit f2a18f1865797cb396ba90f89ddb3df8065b29e2) --- drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/mm.h | 7 +++++++ mm/filemap.c | 1 + mm/memcontrol.c | 1 + 4 files changed, 11 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 7327cf4b6b0b..bec69637294a 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -562,3 +562,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_early_resume_begin); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_use_amu_fie); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_tsk_need_resched_lazy); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pr_set_vma_name_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_charge); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_add_folio); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index c00f3fa2bb9a..4ff55c76833a 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -523,6 +523,13 @@ DECLARE_HOOK(android_vh_try_to_unmap_one, TP_PROTO(struct folio *folio, struct vm_area_struct *vma, unsigned long addr, void *arg, bool ret), TP_ARGS(folio, vma, addr, arg, ret)); +DECLARE_HOOK(android_vh_mem_cgroup_charge, + TP_PROTO(struct folio *folio, struct mem_cgroup **memcg), + TP_ARGS(folio, memcg)); +DECLARE_HOOK(android_vh_filemap_add_folio, + TP_PROTO(struct address_space *mapping, struct folio *folio, + pgoff_t index), + TP_ARGS(mapping, folio, index)); #endif /* _TRACE_HOOK_MM_H */ /* This part must be outside protection */ diff --git a/mm/filemap.c b/mm/filemap.c index a19b810206c1..dfbe3de42071 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -990,6 +990,7 @@ int filemap_add_folio(struct address_space *mapping, struct folio *folio, void *shadow = NULL; int ret; + trace_android_vh_filemap_add_folio(mapping, folio, index); ret = mem_cgroup_charge(folio, NULL, gfp); if (ret) return ret; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 8bc9d9a969b3..6935f3ff647f 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4559,6 +4559,7 @@ int __mem_cgroup_charge(struct folio *folio, struct mm_struct *mm, gfp_t gfp) int ret; memcg = get_mem_cgroup_from_mm(mm); + trace_android_vh_mem_cgroup_charge(folio, &memcg); ret = charge_memcg(folio, memcg, gfp); css_put(&memcg->css);