From 44447dec6eff07fbcddac66d7b153928beb5005c Mon Sep 17 00:00:00 2001 From: Martin Liu Date: Thu, 14 Oct 2021 14:49:19 +0000 Subject: [PATCH] ANDROID: sched: move blocked reason trace point to cover all class Now, we only export CFS taks' blocked reasons but it's important and useful to know other class' blocked reasons such as RT tasks. Move the blocked reason trace point to where the scheduler core layer and before the task's state moves to the waking state. Thus, we could cover all the sched classes. Bug: 203080186 Test: check traces Signed-off-by: Martin Liu Change-Id: Ic61865642d852d0127cdcf474adf8c06e4c2d570 --- kernel/sched/core.c | 3 +++ kernel/sched/fair.c | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index adac9409fb2e..eaa1bc9adf1a 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3116,6 +3116,9 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) if (READ_ONCE(p->on_rq) && ttwu_runnable(p, wake_flags)) goto unlock; + if (p->state & TASK_UNINTERRUPTIBLE) + trace_sched_blocked_reason(p); + #ifdef CONFIG_SMP /* * Ensure we load p->on_cpu _after_ p->on_rq, otherwise it would be diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 6d004a085089..29f84c11acf9 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -999,7 +999,6 @@ update_stats_enqueue_sleeper(struct cfs_rq *cfs_rq, struct sched_entity *se) } trace_sched_stat_blocked(tsk, delta); - trace_sched_blocked_reason(tsk); /* * Blocking time is in units of nanosecs, so shift by