diff options
Diffstat (limited to 'meta/recipes-kernel/lttng/lttng-modules/0014-fix-tracepoint-Optimize-using-static_call-v5.10.patch')
-rw-r--r-- | meta/recipes-kernel/lttng/lttng-modules/0014-fix-tracepoint-Optimize-using-static_call-v5.10.patch | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0014-fix-tracepoint-Optimize-using-static_call-v5.10.patch b/meta/recipes-kernel/lttng/lttng-modules/0014-fix-tracepoint-Optimize-using-static_call-v5.10.patch new file mode 100644 index 0000000000..5892a408b3 --- /dev/null +++ b/meta/recipes-kernel/lttng/lttng-modules/0014-fix-tracepoint-Optimize-using-static_call-v5.10.patch | |||
@@ -0,0 +1,196 @@ | |||
1 | From bb346792c2cb6995ffc08d2084121935c6384865 Mon Sep 17 00:00:00 2001 | ||
2 | From: Michael Jeanson <mjeanson@efficios.com> | ||
3 | Date: Mon, 26 Oct 2020 17:09:05 -0400 | ||
4 | Subject: [PATCH 14/19] fix: tracepoint: Optimize using static_call() (v5.10) | ||
5 | |||
6 | See upstream commit : | ||
7 | |||
8 | commit d25e37d89dd2f41d7acae0429039d2f0ae8b4a07 | ||
9 | Author: Steven Rostedt (VMware) <rostedt@goodmis.org> | ||
10 | Date: Tue Aug 18 15:57:52 2020 +0200 | ||
11 | |||
12 | tracepoint: Optimize using static_call() | ||
13 | |||
14 | Currently the tracepoint site will iterate a vector and issue indirect | ||
15 | calls to however many handlers are registered (ie. the vector is | ||
16 | long). | ||
17 | |||
18 | Using static_call() it is possible to optimize this for the common | ||
19 | case of only having a single handler registered. In this case the | ||
20 | static_call() can directly call this handler. Otherwise, if the vector | ||
21 | is longer than 1, call a function that iterates the whole vector like | ||
22 | the current code. | ||
23 | |||
24 | Upstream-Status: Backport | ||
25 | |||
26 | Change-Id: I739dd84d62cc1a821b8bd8acff74fa29aa25d22f | ||
27 | Signed-off-by: Michael Jeanson <mjeanson@efficios.com> | ||
28 | Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | ||
29 | --- | ||
30 | lttng-statedump-impl.c | 80 +++++++++++++++++++++++++++++++-------- | ||
31 | probes/lttng.c | 7 +++- | ||
32 | tests/probes/lttng-test.c | 7 +++- | ||
33 | wrapper/tracepoint.h | 8 ++++ | ||
34 | 4 files changed, 84 insertions(+), 18 deletions(-) | ||
35 | |||
36 | diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c | ||
37 | index a6fa71a5..67ecd33c 100644 | ||
38 | --- a/lttng-statedump-impl.c | ||
39 | +++ b/lttng-statedump-impl.c | ||
40 | @@ -55,26 +55,76 @@ | ||
41 | #define LTTNG_INSTRUMENTATION | ||
42 | #include <instrumentation/events/lttng-module/lttng-statedump.h> | ||
43 | |||
44 | -DEFINE_TRACE(lttng_statedump_block_device); | ||
45 | -DEFINE_TRACE(lttng_statedump_end); | ||
46 | -DEFINE_TRACE(lttng_statedump_interrupt); | ||
47 | -DEFINE_TRACE(lttng_statedump_file_descriptor); | ||
48 | -DEFINE_TRACE(lttng_statedump_start); | ||
49 | -DEFINE_TRACE(lttng_statedump_process_state); | ||
50 | -DEFINE_TRACE(lttng_statedump_process_pid_ns); | ||
51 | +LTTNG_DEFINE_TRACE(lttng_statedump_block_device, | ||
52 | + TP_PROTO(struct lttng_session *session, | ||
53 | + dev_t dev, const char *diskname), | ||
54 | + TP_ARGS(session, dev, diskname)); | ||
55 | + | ||
56 | +LTTNG_DEFINE_TRACE(lttng_statedump_end, | ||
57 | + TP_PROTO(struct lttng_session *session), | ||
58 | + TP_ARGS(session)); | ||
59 | + | ||
60 | +LTTNG_DEFINE_TRACE(lttng_statedump_interrupt, | ||
61 | + TP_PROTO(struct lttng_session *session, | ||
62 | + unsigned int irq, const char *chip_name, | ||
63 | + struct irqaction *action), | ||
64 | + TP_ARGS(session, irq, chip_name, action)); | ||
65 | + | ||
66 | +LTTNG_DEFINE_TRACE(lttng_statedump_file_descriptor, | ||
67 | + TP_PROTO(struct lttng_session *session, | ||
68 | + struct files_struct *files, | ||
69 | + int fd, const char *filename, | ||
70 | + unsigned int flags, fmode_t fmode), | ||
71 | + TP_ARGS(session, files, fd, filename, flags, fmode)); | ||
72 | + | ||
73 | +LTTNG_DEFINE_TRACE(lttng_statedump_start, | ||
74 | + TP_PROTO(struct lttng_session *session), | ||
75 | + TP_ARGS(session)); | ||
76 | + | ||
77 | +LTTNG_DEFINE_TRACE(lttng_statedump_process_state, | ||
78 | + TP_PROTO(struct lttng_session *session, | ||
79 | + struct task_struct *p, | ||
80 | + int type, int mode, int submode, int status, | ||
81 | + struct files_struct *files), | ||
82 | + TP_ARGS(session, p, type, mode, submode, status, files)); | ||
83 | + | ||
84 | +LTTNG_DEFINE_TRACE(lttng_statedump_process_pid_ns, | ||
85 | + TP_PROTO(struct lttng_session *session, | ||
86 | + struct task_struct *p, | ||
87 | + struct pid_namespace *pid_ns), | ||
88 | + TP_ARGS(session, p, pid_ns)); | ||
89 | + | ||
90 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)) | ||
91 | -DEFINE_TRACE(lttng_statedump_process_cgroup_ns); | ||
92 | +LTTNG_DEFINE_TRACE(lttng_statedump_process_cgroup_ns, | ||
93 | + TP_PROTO(struct lttng_session *session, | ||
94 | + struct task_struct *p, | ||
95 | + struct cgroup_namespace *cgroup_ns), | ||
96 | + TP_ARGS(session, p, cgroup_ns)); | ||
97 | #endif | ||
98 | -DEFINE_TRACE(lttng_statedump_process_ipc_ns); | ||
99 | + | ||
100 | +LTTNG_DEFINE_TRACE(lttng_statedump_process_ipc_ns, | ||
101 | + TP_PROTO(struct lttng_session *session, | ||
102 | + struct task_struct *p, | ||
103 | + struct ipc_namespace *ipc_ns), | ||
104 | + TP_ARGS(session, p, ipc_ns)); | ||
105 | + | ||
106 | #ifndef LTTNG_MNT_NS_MISSING_HEADER | ||
107 | -DEFINE_TRACE(lttng_statedump_process_mnt_ns); | ||
108 | +LTTNG_DEFINE_TRACE(lttng_statedump_process_mnt_ns, | ||
109 | + TP_PROTO(struct lttng_session *session, | ||
110 | + struct task_struct *p, | ||
111 | + struct mnt_namespace *mnt_ns), | ||
112 | + TP_ARGS(session, p, mnt_ns)); | ||
113 | #endif | ||
114 | -DEFINE_TRACE(lttng_statedump_process_net_ns); | ||
115 | -DEFINE_TRACE(lttng_statedump_process_user_ns); | ||
116 | -DEFINE_TRACE(lttng_statedump_process_uts_ns); | ||
117 | -DEFINE_TRACE(lttng_statedump_network_interface); | ||
118 | + | ||
119 | +LTTNG_DEFINE_TRACE(lttng_statedump_network_interface, | ||
120 | + TP_PROTO(struct lttng_session *session, | ||
121 | + struct net_device *dev, struct in_ifaddr *ifa), | ||
122 | + TP_ARGS(session, dev, ifa)); | ||
123 | + | ||
124 | #ifdef LTTNG_HAVE_STATEDUMP_CPU_TOPOLOGY | ||
125 | -DEFINE_TRACE(lttng_statedump_cpu_topology); | ||
126 | +LTTNG_DEFINE_TRACE(lttng_statedump_cpu_topology, | ||
127 | + TP_PROTO(struct lttng_session *session, struct cpuinfo_x86 *c), | ||
128 | + TP_ARGS(session, c)); | ||
129 | #endif | ||
130 | |||
131 | struct lttng_fd_ctx { | ||
132 | diff --git a/probes/lttng.c b/probes/lttng.c | ||
133 | index 05bc1388..7ddaa69f 100644 | ||
134 | --- a/probes/lttng.c | ||
135 | +++ b/probes/lttng.c | ||
136 | @@ -8,7 +8,7 @@ | ||
137 | */ | ||
138 | |||
139 | #include <linux/module.h> | ||
140 | -#include <linux/tracepoint.h> | ||
141 | +#include <wrapper/tracepoint.h> | ||
142 | #include <linux/uaccess.h> | ||
143 | #include <linux/gfp.h> | ||
144 | #include <linux/fs.h> | ||
145 | @@ -32,7 +32,10 @@ | ||
146 | #define LTTNG_LOGGER_COUNT_MAX 1024 | ||
147 | #define LTTNG_LOGGER_FILE "lttng-logger" | ||
148 | |||
149 | -DEFINE_TRACE(lttng_logger); | ||
150 | +LTTNG_DEFINE_TRACE(lttng_logger, | ||
151 | + PARAMS(const char __user *text, size_t len), | ||
152 | + PARAMS(text, len) | ||
153 | +); | ||
154 | |||
155 | static struct proc_dir_entry *lttng_logger_dentry; | ||
156 | |||
157 | diff --git a/tests/probes/lttng-test.c b/tests/probes/lttng-test.c | ||
158 | index b450e7d7..a4fa0645 100644 | ||
159 | --- a/tests/probes/lttng-test.c | ||
160 | +++ b/tests/probes/lttng-test.c | ||
161 | @@ -25,7 +25,12 @@ | ||
162 | #define LTTNG_INSTRUMENTATION | ||
163 | #include <instrumentation/events/lttng-module/lttng-test.h> | ||
164 | |||
165 | -DEFINE_TRACE(lttng_test_filter_event); | ||
166 | +LTTNG_DEFINE_TRACE(lttng_test_filter_event, | ||
167 | + PARAMS(int anint, int netint, long *values, | ||
168 | + char *text, size_t textlen, | ||
169 | + char *etext, uint32_t * net_values), | ||
170 | + PARAMS(anint, netint, values, text, textlen, etext, net_values) | ||
171 | +); | ||
172 | |||
173 | #define LTTNG_TEST_FILTER_EVENT_FILE "lttng-test-filter-event" | ||
174 | |||
175 | diff --git a/wrapper/tracepoint.h b/wrapper/tracepoint.h | ||
176 | index c4ba0123..bc19d8c1 100644 | ||
177 | --- a/wrapper/tracepoint.h | ||
178 | +++ b/wrapper/tracepoint.h | ||
179 | @@ -14,6 +14,14 @@ | ||
180 | #include <linux/tracepoint.h> | ||
181 | #include <linux/module.h> | ||
182 | |||
183 | +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0)) | ||
184 | +#define LTTNG_DEFINE_TRACE(name, proto, args) \ | ||
185 | + DEFINE_TRACE(name, PARAMS(proto), PARAMS(args)) | ||
186 | +#else | ||
187 | +#define LTTNG_DEFINE_TRACE(name, proto, args) \ | ||
188 | + DEFINE_TRACE(name) | ||
189 | +#endif | ||
190 | + | ||
191 | #ifndef HAVE_KABI_2635_TRACEPOINT | ||
192 | |||
193 | #define kabi_2635_tracepoint_probe_register tracepoint_probe_register | ||
194 | -- | ||
195 | 2.19.1 | ||
196 | |||