From 6a878921fc8a8821fb7fc490d4027b072e4f4905 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 (cherry picked from commit 44447dec6eff07fbcddac66d7b153928beb5005c) --- 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 4b3c81cb3794..cd81d03cc427 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4055,6 +4055,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 (READ_ONCE(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 18aba5481cc4..ddc7272c696d 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -978,7 +978,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