summaryrefslogtreecommitdiff
path: root/kernel/sched
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-03-24 10:35:26 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-03-24 10:35:26 -0400
commitbd176ff969fbde282f5e3335fe3e45e341427941 (patch)
treedf59a524cd2cc57e38d181cf20a918aebbba06aa /kernel/sched
parenta415e1f10898f9cb706c57814655cfe578cd8374 (diff)
trace_sched_switch -> trace_sched_wakinglatency_debug
Diffstat (limited to 'kernel/sched')
-rw-r--r--kernel/sched/core.c13
1 files changed, 11 insertions, 2 deletions
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: */