diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 19cf91ca7835..4911325dec12 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -192,6 +192,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_unreserve_highatomic_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_bulk_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ra_tuning_max_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_mmap_readaround); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_slab_alloc_node); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_slab_free); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_insert); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_node_delete); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_node_replace); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index e4b5e99e0472..0b7f301eddf9 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -123,6 +123,12 @@ 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_slab_alloc_node, + TP_PROTO(void *object, unsigned long addr, struct kmem_cache *s), + TP_ARGS(object, addr, s)); +DECLARE_HOOK(android_vh_slab_free, + TP_PROTO(unsigned long addr, struct kmem_cache *s), + TP_ARGS(addr, s)); DECLARE_HOOK(android_vh_meminfo_cache_adjust, TP_PROTO(unsigned long *cached), TP_ARGS(cached)); diff --git a/mm/slub.c b/mm/slub.c index 32c73002a5c5..11bca20a0948 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -3420,6 +3420,8 @@ redo: out: slab_post_alloc_hook(s, objcg, gfpflags, 1, &object, init); + trace_android_vh_slab_alloc_node(object, addr, s); + return object; } @@ -3683,6 +3685,9 @@ static __always_inline void slab_free(struct kmem_cache *s, struct slab *slab, */ if (slab_free_freelist_hook(s, &head, &tail, &cnt)) do_slab_free(s, slab, head, tail, cnt, addr); + + trace_android_vh_slab_free(addr, s); + } #ifdef CONFIG_KASAN_GENERIC