From a390414140e0782d6dbbaddd0ce7c3c5538aa3db 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 --- drivers/android/vendor_hooks.c | 3 +++ fs/proc/meminfo.c | 2 ++ include/trace/hooks/mm.h | 9 +++++++++ mm/page_alloc.c | 2 ++ 4 files changed, 16 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index edb963ad6d42..1df1f21fb156 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -118,6 +118,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_ftrace_oops_enter); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_oops_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_size_check); diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c index 52a7c129ee6d..24a133eb3576 100644 --- a/fs/proc/meminfo.c +++ b/fs/proc/meminfo.c @@ -16,6 +16,7 @@ #ifdef CONFIG_CMA #include #endif +#include #include #include "internal.h" #include @@ -46,6 +47,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 047b4144426f..9ce2592b3c2e 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -89,6 +89,15 @@ DECLARE_HOOK(android_vh_show_smap, TP_PROTO(struct seq_file *m, unsigned long writeback, unsigned long same, unsigned long huge), TP_ARGS(m, writeback, same, huge)); +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_RESTRICTED_HOOK(android_rvh_ctl_dirty_rate, TP_PROTO(void *unused), diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 42d316550572..856b0009b21f 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -6065,6 +6065,7 @@ long si_mem_available(void) reclaimable = global_node_page_state_pages(NR_SLAB_RECLAIMABLE_B) + global_node_page_state(NR_KERNEL_MISC_RECLAIMABLE); available += reclaimable - min(reclaimable / 2, wmark_low); + trace_android_vh_si_mem_available_adjust(&available); if (available < 0) available = 0; @@ -6081,6 +6082,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);