Skip to content

Commit

Permalink
Merge tag 'sched-urgent-2022-05-15' of git://git.kernel.org/pub/scm/l…
Browse files Browse the repository at this point in the history
…inux/kernel/git/tip/tip

Pull scheduler fix from Thomas Gleixner:
 "The recent expansion of the sched switch tracepoint inserted a new
  argument in the middle of the arguments. This reordering broke BPF
  programs which relied on the old argument list.

  While tracepoints are not considered stable ABI, it's not trivial to
  make BPF cope with such a change, but it's being worked on. For now
  restore the original argument order and move the new argument to the
  end of the argument list"

* tag 'sched-urgent-2022-05-15' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  sched/tracing: Append prev_state to tp args instead
  • Loading branch information
Linus Torvalds committed May 15, 2022
2 parents fb75628 + 9c2136b commit 990e798
Show file tree
Hide file tree
Showing 9 changed files with 21 additions and 21 deletions.
6 changes: 3 additions & 3 deletions include/trace/events/sched.h
Original file line number Diff line number Diff line change
Expand Up @@ -222,11 +222,11 @@ static inline long __trace_sched_switch_state(bool preempt,
TRACE_EVENT(sched_switch,

TP_PROTO(bool preempt,
unsigned int prev_state,
struct task_struct *prev,
struct task_struct *next),
struct task_struct *next,
unsigned int prev_state),

TP_ARGS(preempt, prev_state, prev, next),
TP_ARGS(preempt, prev, next, prev_state),

TP_STRUCT__entry(
__array( char, prev_comm, TASK_COMM_LEN )
Expand Down
2 changes: 1 addition & 1 deletion kernel/sched/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -6382,7 +6382,7 @@ static void __sched notrace __schedule(unsigned int sched_mode)
migrate_disable_switch(rq, prev);
psi_sched_switch(prev, next, !task_on_rq_queued(prev));

trace_sched_switch(sched_mode & SM_MASK_PREEMPT, prev_state, prev, next);
trace_sched_switch(sched_mode & SM_MASK_PREEMPT, prev, next, prev_state);

/* Also unlocks the rq: */
rq = context_switch(rq, prev, next, &rf);
Expand Down
4 changes: 2 additions & 2 deletions kernel/trace/fgraph.c
Original file line number Diff line number Diff line change
Expand Up @@ -404,9 +404,9 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list)

static void
ftrace_graph_probe_sched_switch(void *ignore, bool preempt,
unsigned int prev_state,
struct task_struct *prev,
struct task_struct *next)
struct task_struct *next,
unsigned int prev_state)
{
unsigned long long timestamp;
int index;
Expand Down
4 changes: 2 additions & 2 deletions kernel/trace/ftrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -7420,9 +7420,9 @@ ftrace_func_t ftrace_ops_get_func(struct ftrace_ops *ops)

static void
ftrace_filter_pid_sched_switch_probe(void *data, bool preempt,
unsigned int prev_state,
struct task_struct *prev,
struct task_struct *next)
struct task_struct *next,
unsigned int prev_state)
{
struct trace_array *tr = data;
struct trace_pid_list *pid_list;
Expand Down
8 changes: 4 additions & 4 deletions kernel/trace/trace_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -773,9 +773,9 @@ void trace_event_follow_fork(struct trace_array *tr, bool enable)

static void
event_filter_pid_sched_switch_probe_pre(void *data, bool preempt,
unsigned int prev_state,
struct task_struct *prev,
struct task_struct *next)
struct task_struct *next,
unsigned int prev_state)
{
struct trace_array *tr = data;
struct trace_pid_list *no_pid_list;
Expand All @@ -799,9 +799,9 @@ event_filter_pid_sched_switch_probe_pre(void *data, bool preempt,

static void
event_filter_pid_sched_switch_probe_post(void *data, bool preempt,
unsigned int prev_state,
struct task_struct *prev,
struct task_struct *next)
struct task_struct *next,
unsigned int prev_state)
{
struct trace_array *tr = data;
struct trace_pid_list *no_pid_list;
Expand Down
4 changes: 2 additions & 2 deletions kernel/trace/trace_osnoise.c
Original file line number Diff line number Diff line change
Expand Up @@ -1168,9 +1168,9 @@ thread_exit(struct osnoise_variables *osn_var, struct task_struct *t)
*/
static void
trace_sched_switch_callback(void *data, bool preempt,
unsigned int prev_state,
struct task_struct *p,
struct task_struct *n)
struct task_struct *n,
unsigned int prev_state)
{
struct osnoise_variables *osn_var = this_cpu_osn_var();

Expand Down
4 changes: 2 additions & 2 deletions kernel/trace/trace_sched_switch.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ static DEFINE_MUTEX(sched_register_mutex);

static void
probe_sched_switch(void *ignore, bool preempt,
unsigned int prev_state,
struct task_struct *prev, struct task_struct *next)
struct task_struct *prev, struct task_struct *next,
unsigned int prev_state)
{
int flags;

Expand Down
4 changes: 2 additions & 2 deletions kernel/trace/trace_sched_wakeup.c
Original file line number Diff line number Diff line change
Expand Up @@ -426,8 +426,8 @@ tracing_sched_wakeup_trace(struct trace_array *tr,

static void notrace
probe_wakeup_sched_switch(void *ignore, bool preempt,
unsigned int prev_state,
struct task_struct *prev, struct task_struct *next)
struct task_struct *prev, struct task_struct *next,
unsigned int prev_state)
{
struct trace_array_cpu *data;
u64 T0, T1, delta;
Expand Down
6 changes: 3 additions & 3 deletions samples/trace_events/trace_custom_sched.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ TRACE_CUSTOM_EVENT(sched_switch,
* that the custom event is using.
*/
TP_PROTO(bool preempt,
unsigned int prev_state,
struct task_struct *prev,
struct task_struct *next),
struct task_struct *next,
unsigned int prev_state),

TP_ARGS(preempt, prev_state, prev, next),
TP_ARGS(preempt, prev, next, prev_state),

/*
* The next fields are where the customization happens.
Expand Down

0 comments on commit 990e798

Please sign in to comment.