FAILED: patch "[PATCH] sched, trace: Fix prev_state output in sched_switch" failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
3054426dc68e5d63aa6a6e9b91ac4ec78e3f3805Mon Sep 17 00:00:00 2001
From: Pavankumar Kondeti <[email protected]>
Date: Tue, 30 Oct 2018 12:24:33 +0530
Subject: [PATCH] sched, trace: Fix prev_state output in sched_switch
tracepoint
commit 3f5fe9fef5b2 ("sched/debug: Fix task state recording/printout") tried to fix the problem introduced by a previous commit efb40f588b43 ("sched/tracing: Fix trace_sched_switch task-state printing"). However the prev_state output in sched_switch is still broken.
task_state_index() uses fls() which considers the LSB as 1. Left shifting 1 by this value gives an incorrect mapping to the task state. Fix this by decrementing the value returned by __get_task_state() before shifting.
include/trace/events/sched.h +11 -1
@@ -107,6 +107,8 @@ DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,#ifdef CREATE_TRACE_POINTS static inline long __trace_sched_switch_state (bool preempt,struct task_struct *p) { +unsigned int state; +#ifdef CONFIG_SCHED_DEBUG BUG_ON (p != current);#endif /* CONFIG_SCHED_DEBUG */
@@ -118,7 +120,15 @@ static inline long __trace_sched_switch_state(bool preempt, struct task_struct *if (preempt)return TASK_REPORT_MAX ; - return 1 << task_state_index(p); +/* +* task_state_index() uses fls() and returns a value from 0-8 range. +* Decrement it by 1 (except TASK_RUNNING state i.e 0) before using +* it for left shift operation to get the correct task->state +* mapping. +*/ + state =task_state_index (p); + + return state ? (1 << (state - 1)) : state; }#endif /* CREATE_TRACE_POINTS */