Re: [RFC PATCH 1/3] sched, tracing: report task state in symbolic chars instead
From: Peter Zijlstra <peterz@infradead.org>
Date: 2023-07-25 08:34:43
Also in:
linux-perf-users, lkml
On Tue, Jul 25, 2023 at 03:22:52PM +0800, Ze Gao wrote:
quoted hunk ↗ jump to hunk
@@ -197,13 +198,6 @@ static inline long __trace_sched_switch_state(bool preempt, BUG_ON(p != current); #endif /* CONFIG_SCHED_DEBUG */ - /* - * Preemption ignores task state, therefore preempted tasks are always - * RUNNING (we will not have dequeued if state != RUNNING). - */ - if (preempt) - return TASK_REPORT_MAX; - /* * 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@@ -212,7 +206,16 @@ static inline long __trace_sched_switch_state(bool preempt, */ state = __task_state_index(prev_state, p->exit_state); - return state ? (1 << (state - 1)) : state; + /* + * Preemption ignores task state, therefore preempted tasks are always + * RUNNING (we will not have dequeued if state != RUNNING). + * Here, we use 'p' to denote this case and only for this case. + */ + if (preempt) + return 'p'; +
I don't get this move, why compute state before this return?
quoted hunk ↗ jump to hunk
+ + return task_index_to_char(state); } #endif /* CREATE_TRACE_POINTS */@@ -232,7 +235,7 @@ TRACE_EVENT(sched_switch, __array( char, prev_comm, TASK_COMM_LEN ) __field( pid_t, prev_pid ) __field( int, prev_prio ) - __field( long, prev_state ) + __field( char, prev_state ) __array( char, next_comm, TASK_COMM_LEN ) __field( pid_t, next_pid ) __field( int, next_prio )
This is a format change and will likely break a ton of programs :/