2018-10-30 06:55:25

by Pavankumar Kondeti

[permalink] [raw]
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.

Fixes: 3f5fe9fef5b2 ("sched/debug: Fix task state recording/printout")
Signed-off-by: Pavankumar Kondeti <[email protected]>
---
include/trace/events/sched.h | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
index f07b270..9a4bdfa 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -107,6 +107,8 @@
#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 */

--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.



2018-11-27 09:35:49

by Pavankumar Kondeti

[permalink] [raw]
Subject: Re: [PATCH] sched, trace: Fix prev_state output in sched_switch tracepoint

Hi Peter/Thomas,

On Tue, Oct 30, 2018 at 12:25 PM Pavankumar Kondeti
<[email protected]> wrote:
>
> 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.
>
> Fixes: 3f5fe9fef5b2 ("sched/debug: Fix task state recording/printout")
> Signed-off-by: Pavankumar Kondeti <[email protected]>
> ---
> include/trace/events/sched.h | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)

Can you please review this patch?

--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a
Linux Foundation Collaborative Project

2018-11-27 14:38:03

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH] sched, trace: Fix prev_state output in sched_switch tracepoint

On Tue, 27 Nov 2018 15:04:25 +0530
Pavan Kondeti <[email protected]> wrote:

> Hi Peter/Thomas,
>
> On Tue, Oct 30, 2018 at 12:25 PM Pavankumar Kondeti
> <[email protected]> wrote:
> >
> > 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.
> >
> > Fixes: 3f5fe9fef5b2 ("sched/debug: Fix task state recording/printout")
> > Signed-off-by: Pavankumar Kondeti <[email protected]>
> > ---
> > include/trace/events/sched.h | 12 +++++++++++-
> > 1 file changed, 11 insertions(+), 1 deletion(-)
>
> Can you please review this patch?
>

I've already tested this patch. I'm working on getting other patches
upstream and this looks like it should be marked for stable. I'll take
it.

Thanks!

-- Steve