diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index a4dc195df7a0..fc1a832ccac1 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -376,6 +376,10 @@ DECLARE_RESTRICTED_HOOK(android_rvh_effective_cpu_util, struct task_struct *p, unsigned long *new_util), TP_ARGS(cpu, util_cfs, max, type, p, new_util), 1); +DECLARE_HOOK(android_vh_mmput, + TP_PROTO(struct mm_struct *mm), + TP_ARGS(mm)); + /* macro versions of hooks are no longer required */ #endif /* _TRACE_HOOK_SCHED_H */ diff --git a/kernel/fork.c b/kernel/fork.c index a6d6c4dbd433..c52d6666ee15 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1222,8 +1222,10 @@ void mmput(struct mm_struct *mm) { might_sleep(); - if (atomic_dec_and_test(&mm->mm_users)) + if (atomic_dec_and_test(&mm->mm_users)) { + trace_android_vh_mmput(mm); __mmput(mm); + } } EXPORT_SYMBOL_GPL(mmput); diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c index f4a2e52641bc..e1e2601fd84f 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -96,3 +96,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dup_task_struct); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_irqtime_account_process_tick); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_post_init_entity_util_avg); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_effective_cpu_util); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmput);