blob: b41053b6bc4e580702b6f6aa1e336d9636584cb3 [file] [log] [blame]
Andrew Geisslerd5838332022-05-27 11:33:10 -05001From 9c5b8de32b5745f3ff31079c02da64595e101bee Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Tue, 17 May 2022 11:46:29 -0400
4Subject: [PATCH] fix: sched/tracing: Append prev_state to tp args instead
5 (v5.18)
6
7See upstream commit :
8
9 commit 9c2136be0878c88c53dea26943ce40bb03ad8d8d
10 Author: Delyan Kratunov <delyank@fb.com>
11 Date: Wed May 11 18:28:36 2022 +0000
12
13 sched/tracing: Append prev_state to tp args instead
14
15 Commit fa2c3254d7cf (sched/tracing: Don't re-read p->state when emitting
16 sched_switch event, 2022-01-20) added a new prev_state argument to the
17 sched_switch tracepoint, before the prev task_struct pointer.
18
19 This reordering of arguments broke BPF programs that use the raw
20 tracepoint (e.g. tp_btf programs). The type of the second argument has
21 changed and existing programs that assume a task_struct* argument
22 (e.g. for bpf_task_storage access) will now fail to verify.
23
24 If we instead append the new argument to the end, all existing programs
25 would continue to work and can conditionally extract the prev_state
26 argument on supported kernel versions.
27
28
29Upstream-Status: Backport
30
31Change-Id: Ife2ec88a8bea2743562590cbd357068d7773863f
32Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
33Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
34---
35 include/instrumentation/events/sched.h | 6 +++---
36 1 file changed, 3 insertions(+), 3 deletions(-)
37
38diff --git a/include/instrumentation/events/sched.h b/include/instrumentation/events/sched.h
39index 339bec94..c1c3df15 100644
40--- a/include/instrumentation/events/sched.h
41+++ b/include/instrumentation/events/sched.h
42@@ -356,11 +356,11 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_wakeup_template, sched_wakeup_new,
43 LTTNG_TRACEPOINT_EVENT(sched_switch,
44
45 TP_PROTO(bool preempt,
46- unsigned int prev_state,
47 struct task_struct *prev,
48- struct task_struct *next),
49+ struct task_struct *next,
50+ unsigned int prev_state),
51
52- TP_ARGS(preempt, prev_state, prev, next),
53+ TP_ARGS(preempt, prev, next, prev_state),
54
55 TP_FIELDS(
56 ctf_array_text(char, prev_comm, prev->comm, TASK_COMM_LEN)
57--
582.19.1
59