diff options
| author | Peter Zijlstra <peterz@infradead.org> | 2017-09-22 12:19:53 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2017-09-29 04:09:10 -0400 |
| commit | efb40f588b4370ffaeffafbd50f6ff213d954254 (patch) | |
| tree | eb9bd7cbdbfeb486184a68ee36258cac029a92b2 | |
| parent | 65d5dc47fe8530e17e318722fb4df676536c2bfc (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.h | 2 | ||||
| -rw-r--r-- | include/trace/events/sched.h | 18 |
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 | ); |
