diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 8db0cf5bbc79..d2f5c267f4ee 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -87,6 +87,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_restore_priority); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wakeup_ilocked); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_send_sig_info); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_futex_plist_add); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_sleep_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_init); diff --git a/include/trace/hooks/futex.h b/include/trace/hooks/futex.h index 1be35fefb610..49850842d313 100644 --- a/include/trace/hooks/futex.h +++ b/include/trace/hooks/futex.h @@ -18,6 +18,11 @@ DECLARE_HOOK(android_vh_alter_futex_plist_add, struct plist_head *head, bool *already_on_hb), TP_ARGS(node, head, already_on_hb)); + +DECLARE_HOOK(android_vh_futex_sleep_start, + TP_PROTO(struct task_struct *p), + TP_ARGS(p)); + #endif /* _TRACE_HOOK_FUTEX_H */ /* This part must be outside protection */ #include diff --git a/kernel/futex/core.c b/kernel/futex/core.c index bcf0940a2e11..5b182434ff2a 100644 --- a/kernel/futex/core.c +++ b/kernel/futex/core.c @@ -2853,8 +2853,10 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q, * flagged for rescheduling. Only call schedule if there * is no timeout, or if it has yet to expire. */ - if (!timeout || timeout->task) + if (!timeout || timeout->task) { + trace_android_vh_futex_sleep_start(current); freezable_schedule(); + } } __set_current_state(TASK_RUNNING); }