diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 63b12a6cc393..253b5b247964 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -413,3 +413,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_evict); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vmscan_kswapd_done); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_reclaim_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_failure_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_vmalloc_stack); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_stack_hash); diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index 321e75537239..9a2710df972c 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h @@ -11,6 +11,7 @@ #include /* pgprot_t */ #include #include +#include #include @@ -61,6 +62,7 @@ struct vm_struct { unsigned int nr_pages; phys_addr_t phys_addr; const void *caller; + ANDROID_OEM_DATA(1); }; struct vmap_area { diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 21174cd941f5..9200bd1cc9af 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -326,6 +326,12 @@ DECLARE_HOOK(android_vh_alloc_pages_failure_bypass, TP_PROTO(gfp_t gfp_mask, int order, int alloc_flags, int migratetype, struct page **page), TP_ARGS(gfp_mask, order, alloc_flags, migratetype, page)); +DECLARE_HOOK(android_vh_save_vmalloc_stack, + TP_PROTO(unsigned long flags, struct vm_struct *vm), + TP_ARGS(flags, vm)); +DECLARE_HOOK(android_vh_show_stack_hash, + TP_PROTO(struct seq_file *m, struct vm_struct *v), + TP_ARGS(m, v)); DECLARE_HOOK(android_vh_save_track_hash, TP_PROTO(bool alloc, struct track *p), TP_ARGS(alloc, p)); diff --git a/mm/vmalloc.c b/mm/vmalloc.c index db6bde962cee..61231271a677 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -1947,6 +1947,7 @@ static inline void setup_vmalloc_vm(struct vm_struct *vm, vm->size = va_size(va); vm->caller = caller; va->vm = vm; + trace_android_vh_save_vmalloc_stack(flags, vm); } /* @@ -5033,6 +5034,7 @@ static int vmalloc_info_show(struct seq_file *m, void *p) seq_puts(m, " vpages"); show_numa_info(m, v); + trace_android_vh_show_stack_hash(m, v); seq_putc(m, '\n'); } spin_unlock(&vn->busy.lock);