aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2017-09-22 12:19:53 -0400
committerIngo Molnar <mingo@kernel.org>2017-09-29 04:09:10 -0400
commitefb40f588b4370ffaeffafbd50f6ff213d954254 (patch)
treeeb9bd7cbdbfeb486184a68ee36258cac029a92b2
parent65d5dc47fe8530e17e318722fb4df676536c2bfc (diff)
sched/tracing: Fix trace_sched_switch task-state printing
Convert trace_sched_switch to use the common task-state helpers and fix the "X" and "Z" order, possibly they ended up in the wrong order because TASK_REPORT has them in the wrong order too. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-kernel@vger.kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--include/linux/sched.h2
-rw-r--r--include/trace/events/sched.h18
2 files changed, 12 insertions, 8 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 69bed5339ffa..a2fe636b6825 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -99,7 +99,7 @@ struct task_group;
99/* get_task_state(): */ 99/* get_task_state(): */
100#define TASK_REPORT (TASK_RUNNING | TASK_INTERRUPTIBLE | \ 100#define TASK_REPORT (TASK_RUNNING | TASK_INTERRUPTIBLE | \
101 TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \ 101 TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \
102 __TASK_TRACED | EXIT_ZOMBIE | EXIT_DEAD) 102 __TASK_TRACED | EXIT_DEAD | EXIT_ZOMBIE)
103 103
104#define task_is_traced(task) ((task->state & __TASK_TRACED) != 0) 104#define task_is_traced(task) ((task->state & __TASK_TRACED) != 0)
105 105
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
index ae1409ffe99a..c63e20c9ef24 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -114,7 +114,10 @@ static inline long __trace_sched_switch_state(bool preempt, struct task_struct *
114 * Preemption ignores task state, therefore preempted tasks are always 114 * Preemption ignores task state, therefore preempted tasks are always
115 * RUNNING (we will not have dequeued if state != RUNNING). 115 * RUNNING (we will not have dequeued if state != RUNNING).
116 */ 116 */
117 return preempt ? TASK_RUNNING | TASK_STATE_MAX : p->state; 117 if (preempt)
118 return TASK_STATE_MAX;
119
120 return __get_task_state(p);
118} 121}
119#endif /* CREATE_TRACE_POINTS */ 122#endif /* CREATE_TRACE_POINTS */
120 123
@@ -152,12 +155,13 @@ TRACE_EVENT(sched_switch,
152 155
153 TP_printk("prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> next_comm=%s next_pid=%d next_prio=%d", 156 TP_printk("prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> next_comm=%s next_pid=%d next_prio=%d",
154 __entry->prev_comm, __entry->prev_pid, __entry->prev_prio, 157 __entry->prev_comm, __entry->prev_pid, __entry->prev_prio,
155 __entry->prev_state & (TASK_STATE_MAX-1) ? 158
156 __print_flags(__entry->prev_state & (TASK_STATE_MAX-1), "|", 159 (__entry->prev_state & TASK_REPORT) ?
157 { 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" }, 160 __print_flags(__entry->prev_state & TASK_REPORT, "|",
158 { 16, "Z" }, { 32, "X" }, { 64, "x" }, 161 { 0x01, "S" }, { 0x02, "D" }, { 0x04, "T" },
159 { 128, "K" }, { 256, "W" }, { 512, "P" }, 162 { 0x08, "t" }, { 0x10, "X" }, { 0x20, "Z" }) :
160 { 1024, "N" }) : "R", 163 "R",
164
161 __entry->prev_state & TASK_STATE_MAX ? "+" : "", 165 __entry->prev_state & TASK_STATE_MAX ? "+" : "",
162 __entry->next_comm, __entry->next_pid, __entry->next_prio) 166 __entry->next_comm, __entry->next_pid, __entry->next_prio)
163); 167);