diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index c7495c0cfdee..6f15f0a33ffa 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -175,6 +175,11 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_expandkey); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_encrypt); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_aes_decrypt); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_fault_around); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_meminfo_proc_show); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_mm); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mem); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_print_slabinfo_header); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cache_show); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_try_fixup_sea); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_free); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_alloc); diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c index ec902fc9dcc6..873996d11ad2 100644 --- a/fs/proc/meminfo.c +++ b/fs/proc/meminfo.c @@ -21,6 +21,7 @@ #include #include #include "internal.h" +#include void __attribute__((weak)) arch_report_meminfo(struct seq_file *m) { @@ -159,6 +160,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v) show_val_kb(m, "CmaFree: ", global_zone_page_state(NR_FREE_CMA_PAGES)); #endif + trace_android_vh_meminfo_proc_show(m); #ifdef CONFIG_UNACCEPTED_MEMORY show_val_kb(m, "Unaccepted: ", diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 79d8ef425f9b..3af5f14496a2 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -100,7 +100,22 @@ DECLARE_HOOK(android_vh_look_around, TP_PROTO(struct page_vma_mapped_walk *pvmw, struct folio *folio, struct vm_area_struct *vma, int *referenced), TP_ARGS(pvmw, folio, vma, referenced)); - +DECLARE_HOOK(android_vh_meminfo_proc_show, + TP_PROTO(struct seq_file *m), + TP_ARGS(m)); +DECLARE_HOOK(android_vh_exit_mm, + TP_PROTO(struct mm_struct *mm), + TP_ARGS(mm)); +DECLARE_HOOK(android_vh_show_mem, + TP_PROTO(unsigned int filter, nodemask_t *nodemask), + TP_ARGS(filter, nodemask)); +DECLARE_HOOK(android_vh_print_slabinfo_header, + TP_PROTO(struct seq_file *m), + TP_ARGS(m)); +struct slabinfo; +DECLARE_HOOK(android_vh_cache_show, + TP_PROTO(struct seq_file *m, struct slabinfo *sinfo, struct kmem_cache *s), + TP_ARGS(m, sinfo, s)); DECLARE_HOOK(android_vh_count_workingset_refault, TP_PROTO(struct folio *folio), TP_ARGS(folio)); diff --git a/kernel/exit.c b/kernel/exit.c index e7ec4bfb93ec..2762415ec538 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -75,6 +75,7 @@ #include #include +#include #include "exit.h" @@ -568,6 +569,7 @@ static void exit_mm(void) task_unlock(current); mmap_read_unlock(mm); mm_update_next_owner(mm); + trace_android_vh_exit_mm(mm); mmput(mm); if (test_thread_flag(TIF_MEMDIE)) exit_oom_victim(); diff --git a/mm/show_mem.c b/mm/show_mem.c index 2a84db109705..dbb5054ce8ca 100644 --- a/mm/show_mem.c +++ b/mm/show_mem.c @@ -457,5 +457,6 @@ void __show_mem(unsigned int filter, nodemask_t *nodemask, int max_zone_idx) } } #endif + trace_android_vh_show_mem(filter, nodemask); } EXPORT_SYMBOL_GPL(__show_mem); diff --git a/mm/slab_common.c b/mm/slab_common.c index 477fa471da18..e95d747d3432 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -34,6 +34,8 @@ #define CREATE_TRACE_POINTS #include +#undef CREATE_TRACE_POINTS +#include enum slab_state slab_state; LIST_HEAD(slab_caches); @@ -1076,6 +1078,7 @@ static void print_slabinfo_header(struct seq_file *m) seq_puts(m, "# name "); seq_puts(m, " : tunables "); seq_puts(m, " : slabdata "); + trace_android_vh_print_slabinfo_header(m); seq_putc(m, '\n'); } @@ -1110,6 +1113,7 @@ static void cache_show(struct kmem_cache *s, struct seq_file *m) sinfo.limit, sinfo.batchcount, sinfo.shared); seq_printf(m, " : slabdata %6lu %6lu %6lu", sinfo.active_slabs, sinfo.num_slabs, sinfo.shared_avail); + trace_android_vh_cache_show(m, &sinfo, s); seq_putc(m, '\n'); }