]>
Commit | Line | Data |
---|---|---|
5041df65 JR |
1 | From 9c5b8de32b5745f3ff31079c02da64595e101bee Mon Sep 17 00:00:00 2001 |
2 | From: Michael Jeanson <mjeanson@efficios.com> | |
3 | Date: Tue, 17 May 2022 11:46:29 -0400 | |
4 | Subject: [PATCH 13/13] fix: sched/tracing: Append prev_state to tp args | |
5 | instead (v5.18) | |
6 | ||
7 | See 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 | Change-Id: Ife2ec88a8bea2743562590cbd357068d7773863f | |
29 | Signed-off-by: Michael Jeanson <mjeanson@efficios.com> | |
30 | Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | |
31 | --- | |
32 | include/instrumentation/events/sched.h | 6 +++--- | |
33 | 1 file changed, 3 insertions(+), 3 deletions(-) | |
34 | ||
35 | diff --git a/include/instrumentation/events/sched.h b/include/instrumentation/events/sched.h | |
36 | index 339bec94..c1c3df15 100644 | |
37 | --- a/include/instrumentation/events/sched.h | |
38 | +++ b/include/instrumentation/events/sched.h | |
39 | @@ -356,11 +356,11 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_wakeup_template, sched_wakeup_new, | |
40 | LTTNG_TRACEPOINT_EVENT(sched_switch, | |
41 | ||
42 | TP_PROTO(bool preempt, | |
43 | - unsigned int prev_state, | |
44 | struct task_struct *prev, | |
45 | - struct task_struct *next), | |
46 | + struct task_struct *next, | |
47 | + unsigned int prev_state), | |
48 | ||
49 | - TP_ARGS(preempt, prev_state, prev, next), | |
50 | + TP_ARGS(preempt, prev, next, prev_state), | |
51 | ||
52 | TP_FIELDS( | |
53 | ctf_array_text(char, prev_comm, prev->comm, TASK_COMM_LEN) | |
54 | -- | |
55 | 2.36.1 | |
56 |