From 22fd6b36254f744dc5dba6beb84abbf7a107c23c Mon Sep 17 00:00:00 2001 From: xieliujie Date: Wed, 10 May 2023 10:21:56 +0800 Subject: [PATCH] ANDROID: vendor_hooks: Add hooks for futex We want to use this hook to record the sleeping time due to Futex Bug: 210947226 Signed-off-by: Liujie Xie Change-Id: I637f889dce42937116d10979e0c40fddf96cd1a2 (cherry picked from commit a7ab784f601a93a78c1c22cd0aacc2af64d8e3c8) --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/futex.h | 3 +++ kernel/futex/waitwake.c | 4 +++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 14e6323e3f70..e708abf0c55d 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -175,6 +175,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_finished); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_rwsem_list_add); 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_do_futex); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_futex_wait_end); diff --git a/include/trace/hooks/futex.h b/include/trace/hooks/futex.h index ab429aca1212..a23b4c83e6d2 100644 --- a/include/trace/hooks/futex.h +++ b/include/trace/hooks/futex.h @@ -17,6 +17,9 @@ 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)); DECLARE_HOOK(android_vh_do_futex, TP_PROTO(int cmd, unsigned int *flags, diff --git a/kernel/futex/waitwake.c b/kernel/futex/waitwake.c index a890954a6abd..99b894d94fd4 100644 --- a/kernel/futex/waitwake.c +++ b/kernel/futex/waitwake.c @@ -356,8 +356,10 @@ void futex_wait_queue(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); schedule(); + } } __set_current_state(TASK_RUNNING); }