From eb67f583227fd814a207ea88897ff6d6cf5665c1 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Tue, 21 Nov 2023 07:18:24 +0000 Subject: [PATCH] ANDROID: sched: Add trace_android_rvh_set_user_nice_locked We will need vendor hook of set_user_nice with lock to avoid race condition. Bug: 300872872 Change-Id: I24fc1e13cc6578dcc418d956a5146ad29ff76a56 Signed-off-by: Rick Yiu --- include/trace/hooks/sched.h | 4 ++++ kernel/sched/core.c | 4 ++++ kernel/sched/vendor_hooks.c | 1 + 3 files changed, 9 insertions(+) diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index b0b039453951..4037082dbebd 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -76,6 +76,10 @@ DECLARE_RESTRICTED_HOOK(android_rvh_set_user_nice, TP_PROTO(struct task_struct *p, long *nice, bool *allowed), TP_ARGS(p, nice, allowed), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_set_user_nice_locked, + TP_PROTO(struct task_struct *p, long *nice), + TP_ARGS(p, nice), 1); + DECLARE_RESTRICTED_HOOK(android_rvh_setscheduler, TP_PROTO(struct task_struct *p), TP_ARGS(p), 1); diff --git a/kernel/sched/core.c b/kernel/sched/core.c index c9acddf7eff1..8a1564c2268f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -7234,6 +7234,10 @@ void set_user_nice(struct task_struct *p, long nice) rq = task_rq_lock(p, &rf); update_rq_clock(rq); + trace_android_rvh_set_user_nice_locked(p, &nice); + if (task_nice(p) == nice) + goto out_unlock; + /* * The RT priorities are set via sched_setscheduler(), but we still * allow the 'normal' nice value to be set - but as expected diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c index 5a195b3e9602..b65262774f73 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -25,6 +25,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_finish_prio_fork); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rtmutex_force_update); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rtmutex_prepare_setprio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_user_nice); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_user_nice_locked); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_setscheduler); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_group); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dump_throttled_rt_tasks);