From 4e4cbc1f28feb272a1137668809df41a8e85a7a4 Mon Sep 17 00:00:00 2001 From: Jaewon Kim Date: Thu, 25 May 2023 11:53:41 +0900 Subject: [PATCH] ANDROID: vendor_hooks: add hooks for extra memory Add vendor hooks for extra memory. If there is extra memory, this can be accounted like other memory stats. One of the usecases could be cleancache. If some of ram memory is used for cleancache, its free, cache, and total size could be added through these vendor hooks. Bug: 283896254 Change-Id: Iad7330310528581f09842f45860f05dc84823f41 Signed-off-by: Jaewon Kim (cherry picked from commit d6889cf8f3a7dc0821aa8a272e7549fd2bee9e67) --- drivers/android/vendor_hooks.c | 3 +++ fs/proc/meminfo.c | 2 ++ include/trace/hooks/mm.h | 9 +++++++++ mm/show_mem.c | 5 +++++ 4 files changed, 19 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 1994236441c8..c7495c0cfdee 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -101,6 +101,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_irqs_disable); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_irqs_enable); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_cgroup_attach); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_cgroup_online); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_meminfo_cache_adjust); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_si_mem_available_adjust); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_si_meminfo_adjust); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_fill_prdt); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_prepare_command); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_update_sysfs); diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c index 245171d9164b..ec902fc9dcc6 100644 --- a/fs/proc/meminfo.c +++ b/fs/proc/meminfo.c @@ -18,6 +18,7 @@ #include #endif #include +#include #include #include "internal.h" @@ -47,6 +48,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v) cached = global_node_page_state(NR_FILE_PAGES) - total_swapcache_pages() - i.bufferram; + trace_android_vh_meminfo_cache_adjust(&cached); if (cached < 0) cached = 0; diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index af9d31b36dc1..79d8ef425f9b 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -81,6 +81,15 @@ DECLARE_HOOK(android_vh_process_madvise_begin, DECLARE_HOOK(android_vh_process_madvise_iter, TP_PROTO(struct task_struct *task, int behavior, ssize_t *ret), TP_ARGS(task, behavior, ret)); +DECLARE_HOOK(android_vh_meminfo_cache_adjust, + TP_PROTO(unsigned long *cached), + TP_ARGS(cached)); +DECLARE_HOOK(android_vh_si_mem_available_adjust, + TP_PROTO(unsigned long *available), + TP_ARGS(available)); +DECLARE_HOOK(android_vh_si_meminfo_adjust, + TP_PROTO(unsigned long *totalram, unsigned long *freeram), + TP_ARGS(totalram, freeram)); DECLARE_HOOK(android_vh_test_clear_look_around_ref, TP_PROTO(struct page *page), TP_ARGS(page)); diff --git a/mm/show_mem.c b/mm/show_mem.c index 4efeb2bf6c81..2a84db109705 100644 --- a/mm/show_mem.c +++ b/mm/show_mem.c @@ -15,6 +15,9 @@ #include #include +#undef CREATE_TRACE_POINTS +#include + #include "internal.h" #include "swap.h" @@ -65,6 +68,7 @@ long si_mem_available(void) global_node_page_state(NR_KERNEL_MISC_RECLAIMABLE); reclaimable -= min(reclaimable / 2, wmark_low); available += reclaimable; + trace_android_vh_si_mem_available_adjust(&available); if (available < 0) available = 0; @@ -81,6 +85,7 @@ void si_meminfo(struct sysinfo *val) val->totalhigh = totalhigh_pages(); val->freehigh = nr_free_highpages(); val->mem_unit = PAGE_SIZE; + trace_android_vh_si_meminfo_adjust(&val->totalram, &val->freeram); } EXPORT_SYMBOL(si_meminfo);