LKML Archive on lore.kernel.org
 help / Atom feed
* [PATCH] sched, trace: Fix prev_state output in sched_switch tracepoint
@ 2018-10-30  6:54 Pavankumar Kondeti
  2018-11-27  9:34 ` Pavan Kondeti
  0 siblings, 1 reply; 3+ messages in thread
From: Pavankumar Kondeti @ 2018-10-30  6:54 UTC (permalink / raw)
  To: Thomas Gleixner, Peter Zijlstra, Steven Rostedt, Ingo Molnar,
	linux-kernel
  Cc: Pavankumar Kondeti

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 <pkondeti@codeaurora.org>
---
 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.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] sched, trace: Fix prev_state output in sched_switch tracepoint
  2018-10-30  6:54 [PATCH] sched, trace: Fix prev_state output in sched_switch tracepoint Pavankumar Kondeti
@ 2018-11-27  9:34 ` Pavan Kondeti
  2018-11-27 14:29   ` Steven Rostedt
  0 siblings, 1 reply; 3+ messages in thread
From: Pavan Kondeti @ 2018-11-27  9:34 UTC (permalink / raw)
  To: Pavan Kondeti
  Cc: Thomas Gleixner, Peter Zijlstra, Steven Rostedt, Ingo Molnar, LKML

Hi Peter/Thomas,

On Tue, Oct 30, 2018 at 12:25 PM Pavankumar Kondeti
<pkondeti@codeaurora.org> 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 <pkondeti@codeaurora.org>
> ---
>  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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] sched, trace: Fix prev_state output in sched_switch tracepoint
  2018-11-27  9:34 ` Pavan Kondeti
@ 2018-11-27 14:29   ` Steven Rostedt
  0 siblings, 0 replies; 3+ messages in thread
From: Steven Rostedt @ 2018-11-27 14:29 UTC (permalink / raw)
  To: Pavan Kondeti; +Cc: Thomas Gleixner, Peter Zijlstra, Ingo Molnar, LKML

On Tue, 27 Nov 2018 15:04:25 +0530
Pavan Kondeti <pkondeti@codeaurora.org> wrote:

> Hi Peter/Thomas,
> 
> On Tue, Oct 30, 2018 at 12:25 PM Pavankumar Kondeti
> <pkondeti@codeaurora.org> 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 <pkondeti@codeaurora.org>
> > ---
> >  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

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, back to index

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-30  6:54 [PATCH] sched, trace: Fix prev_state output in sched_switch tracepoint Pavankumar Kondeti
2018-11-27  9:34 ` Pavan Kondeti
2018-11-27 14:29   ` Steven Rostedt

LKML Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git
	git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git
	git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git
	git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git
	git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git
	git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git
	git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git
	git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \
		linux-kernel@vger.kernel.org linux-kernel@archiver.kernel.org
	public-inbox-index lkml


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel


AGPL code for this site: git clone https://public-inbox.org/ public-inbox