Issue
I am using the perf trace -bla-bla-bla -e sched:sched_switch
on a 5.15.53
kernel, however looks like it is not configured to populate all the trace fields.
href="https://elixir.bootlin.com/linux/v5.15.53/source/include/trace/events/sched.h#L252" rel="nofollow noreferrer">trace/events/sched.h does publish the prev_state=%s%s
, nevertheless I can not get why exactly does the TASK_REPORT_MAX - 1
exist there? This macro has no docs on it, nor it is clear for me from the source code what great purpose it serves.
perf trace ...
output shows something like:
0.000 Timer/19125 sched:sched_switch(prev_comm: "Timer", prev_pid: 19125 (Timer), prev_prio: 120, prev_state: 1, next_comm: "swapper/2", next_prio: 120)
Note: prev_state: 1
. 1
is definitely not what I would expect to see there based on the link above I've sent. Do I deal with a misconfigured kernel?
Solution
These are the defined bit values for task->state: https://elixir.bootlin.com/linux/v5.15.53/source/include/linux/sched.h#L83
Among them, only the lower 8 bits are "public" (meaningful for userspace). TASK_REPORT_MAX - 1
mask is used to keep only these bits.
prev_state: 1
means TASK_INTERRUPTIBLE
Answered By - blahgeek Answer Checked By - Terry (WPSolving Volunteer)