From bd176ff969fbde282f5e3335fe3e45e341427941 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Mon, 24 Mar 2025 10:35:26 -0400 Subject: trace_sched_switch -> trace_sched_waking --- include/linux/sched.h | 2 -- kernel/sched/core.c | 13 +++++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index 73a330748658..cf7ca571a29d 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -228,8 +228,6 @@ extern ktime_t ktime_get(void); #define set_task_sleep_time(task, state_value) \ do { \ - if (((state_value) & TASK_NORMAL) && !((task)->__state & TASK_NORMAL))\ - task->sleep_timestamp = ktime_get(); \ } while (0) #define __set_task_state(task, type, state_value) \ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index dae03d76cd2c..172defd6ed83 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4200,15 +4200,19 @@ int try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) goto out; trace_sched_waking(p); + + if (p->sleep_timestamp) + sched_wakeup_backtrace(p, p->sleep_timestamp); + p->sleep_timestamp = 0; ttwu_do_wakeup(p); goto out; } - +#if 0 u64 sleep_start; if (p->sleep_timestamp && (sleep_start = xchg(&p->sleep_timestamp, 0))) sched_wakeup_backtrace(p, sleep_start); - +#endif /* * If we are going to wake up a thread waiting for CONDITION we * need to ensure that CONDITION=1 done by the caller can not be @@ -4222,6 +4226,10 @@ int try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) trace_sched_waking(p); + if (p->sleep_timestamp) + sched_wakeup_backtrace(p, p->sleep_timestamp); + p->sleep_timestamp = 0; + /* * Ensure we load p->on_rq _after_ p->state, otherwise it would * be possible to, falsely, observe p->on_rq == 0 and get stuck @@ -6763,6 +6771,7 @@ picked: psi_sched_switch(prev, next, !task_on_rq_queued(prev) || prev->se.sched_delayed); + prev->sleep_timestamp = ktime_get_ns(); trace_sched_switch(preempt, prev, next, prev_state); /* Also unlocks the rq: */ -- cgit v1.2.3