summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/lttng/lttng-modules/0005-Fix-Remove-start-and-number-from-syscall_get_argumen.patch
diff options
context:
space:
mode:
authorNaveen Saini <naveen.kumar.saini@intel.com>2019-05-19 21:38:09 +0800
committerAnuj Mittal <anuj.mittal@intel.com>2019-05-21 14:54:56 +0800
commit886d2063cd54069f831239febf2be118ab774d01 (patch)
treec87ae8a2363f532a9a1c5d36ecc0ce5054565a97 /recipes-kernel/lttng/lttng-modules/0005-Fix-Remove-start-and-number-from-syscall_get_argumen.patch
parent8cd484abb6f5728f4dcbb4d760d81a2e66240159 (diff)
downloadmeta-intel-886d2063cd54069f831239febf2be118ab774d01.tar.gz
lttng-modules: add bbappend
Backport patches from upstream to fix build errors when building with kernel v5.1. These patches are backported from stable branch. The code v5.1 is protected by ifdefs so v4.19 works as well. Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
Diffstat (limited to 'recipes-kernel/lttng/lttng-modules/0005-Fix-Remove-start-and-number-from-syscall_get_argumen.patch')
-rw-r--r--recipes-kernel/lttng/lttng-modules/0005-Fix-Remove-start-and-number-from-syscall_get_argumen.patch260
1 files changed, 260 insertions, 0 deletions
diff --git a/recipes-kernel/lttng/lttng-modules/0005-Fix-Remove-start-and-number-from-syscall_get_argumen.patch b/recipes-kernel/lttng/lttng-modules/0005-Fix-Remove-start-and-number-from-syscall_get_argumen.patch
new file mode 100644
index 00000000..53583aba
--- /dev/null
+++ b/recipes-kernel/lttng/lttng-modules/0005-Fix-Remove-start-and-number-from-syscall_get_argumen.patch
@@ -0,0 +1,260 @@
1From bd3fb656df0fedb0f87d1ef3690260a1d4b135e5 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Tue, 9 Apr 2019 14:12:41 -0400
4Subject: [PATCH 5/5] Fix: Remove start and number from syscall_get_arguments()
5 args (v5.1)
6
7 commit b35f549df1d7520d37ba1e6d4a8d4df6bd52d136
8 Author: Steven Rostedt (Red Hat) <rostedt@goodmis.org>
9 Date: Mon Nov 7 16:26:37 2016 -0500
10
11 syscalls: Remove start and number from syscall_get_arguments() args
12
13 At Linux Plumbers, Andy Lutomirski approached me and pointed out that the
14 function call syscall_get_arguments() implemented in x86 was horribly
15 written and not optimized for the standard case of passing in 0 and 6 for
16 the starting index and the number of system calls to get. When looking at
17 all the users of this function, I discovered that all instances pass in only
18 0 and 6 for these arguments. Instead of having this function handle
19 different cases that are never used, simply rewrite it to return the first 6
20 arguments of a system call.
21
22 This should help out the performance of tracing system calls by ptrace,
23 ftrace and perf.
24
25 Link: http://lkml.kernel.org/r/20161107213233.754809394@goodmis.org
26
27Upstream-Status: Backport [http://git.lttng.org/?p=lttng-modules.git;a=commit;h=1b7b9c650ebb94358365512199559b0ece3e657c]
28
29Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
30Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
31Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com>
32---
33 lttng-syscalls.c | 57 ++++++++++++++++++++++++-----------------------
34 wrapper/syscall.h | 34 ++++++++++++++++++++++++++++
35 2 files changed, 63 insertions(+), 28 deletions(-)
36 create mode 100644 wrapper/syscall.h
37
38diff --git a/lttng-syscalls.c b/lttng-syscalls.c
39index 0b980a1..c9dc275 100644
40--- a/lttng-syscalls.c
41+++ b/lttng-syscalls.c
42@@ -38,6 +38,7 @@
43 #include <wrapper/tracepoint.h>
44 #include <wrapper/file.h>
45 #include <wrapper/rcu.h>
46+#include <wrapper/syscall.h>
47 #include <lttng-events.h>
48
49 #ifndef CONFIG_COMPAT
50@@ -374,9 +375,9 @@ struct lttng_syscall_filter {
51 static void syscall_entry_unknown(struct lttng_event *event,
52 struct pt_regs *regs, unsigned int id)
53 {
54- unsigned long args[UNKNOWN_SYSCALL_NRARGS];
55+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
56
57- syscall_get_arguments(current, regs, 0, UNKNOWN_SYSCALL_NRARGS, args);
58+ lttng_syscall_get_arguments(current, regs, args);
59 if (unlikely(in_compat_syscall()))
60 __event_probe__compat_syscall_entry_unknown(event, id, args);
61 else
62@@ -445,9 +446,9 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
63 case 1:
64 {
65 void (*fptr)(void *__data, unsigned long arg0) = entry->func;
66- unsigned long args[1];
67+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
68
69- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
70+ lttng_syscall_get_arguments(current, regs, args);
71 fptr(event, args[0]);
72 break;
73 }
74@@ -456,9 +457,9 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
75 void (*fptr)(void *__data,
76 unsigned long arg0,
77 unsigned long arg1) = entry->func;
78- unsigned long args[2];
79+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
80
81- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
82+ lttng_syscall_get_arguments(current, regs, args);
83 fptr(event, args[0], args[1]);
84 break;
85 }
86@@ -468,9 +469,9 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
87 unsigned long arg0,
88 unsigned long arg1,
89 unsigned long arg2) = entry->func;
90- unsigned long args[3];
91+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
92
93- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
94+ lttng_syscall_get_arguments(current, regs, args);
95 fptr(event, args[0], args[1], args[2]);
96 break;
97 }
98@@ -481,9 +482,9 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
99 unsigned long arg1,
100 unsigned long arg2,
101 unsigned long arg3) = entry->func;
102- unsigned long args[4];
103+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
104
105- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
106+ lttng_syscall_get_arguments(current, regs, args);
107 fptr(event, args[0], args[1], args[2], args[3]);
108 break;
109 }
110@@ -495,9 +496,9 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
111 unsigned long arg2,
112 unsigned long arg3,
113 unsigned long arg4) = entry->func;
114- unsigned long args[5];
115+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
116
117- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
118+ lttng_syscall_get_arguments(current, regs, args);
119 fptr(event, args[0], args[1], args[2], args[3], args[4]);
120 break;
121 }
122@@ -510,9 +511,9 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
123 unsigned long arg3,
124 unsigned long arg4,
125 unsigned long arg5) = entry->func;
126- unsigned long args[6];
127+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
128
129- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
130+ lttng_syscall_get_arguments(current, regs, args);
131 fptr(event, args[0], args[1], args[2],
132 args[3], args[4], args[5]);
133 break;
134@@ -525,9 +526,9 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
135 static void syscall_exit_unknown(struct lttng_event *event,
136 struct pt_regs *regs, int id, long ret)
137 {
138- unsigned long args[UNKNOWN_SYSCALL_NRARGS];
139+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
140
141- syscall_get_arguments(current, regs, 0, UNKNOWN_SYSCALL_NRARGS, args);
142+ lttng_syscall_get_arguments(current, regs, args);
143 if (unlikely(in_compat_syscall()))
144 __event_probe__compat_syscall_exit_unknown(event, id, ret,
145 args);
146@@ -601,9 +602,9 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
147 void (*fptr)(void *__data,
148 long ret,
149 unsigned long arg0) = entry->func;
150- unsigned long args[1];
151+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
152
153- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
154+ lttng_syscall_get_arguments(current, regs, args);
155 fptr(event, ret, args[0]);
156 break;
157 }
158@@ -613,9 +614,9 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
159 long ret,
160 unsigned long arg0,
161 unsigned long arg1) = entry->func;
162- unsigned long args[2];
163+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
164
165- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
166+ lttng_syscall_get_arguments(current, regs, args);
167 fptr(event, ret, args[0], args[1]);
168 break;
169 }
170@@ -626,9 +627,9 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
171 unsigned long arg0,
172 unsigned long arg1,
173 unsigned long arg2) = entry->func;
174- unsigned long args[3];
175+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
176
177- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
178+ lttng_syscall_get_arguments(current, regs, args);
179 fptr(event, ret, args[0], args[1], args[2]);
180 break;
181 }
182@@ -640,9 +641,9 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
183 unsigned long arg1,
184 unsigned long arg2,
185 unsigned long arg3) = entry->func;
186- unsigned long args[4];
187+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
188
189- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
190+ lttng_syscall_get_arguments(current, regs, args);
191 fptr(event, ret, args[0], args[1], args[2], args[3]);
192 break;
193 }
194@@ -655,9 +656,9 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
195 unsigned long arg2,
196 unsigned long arg3,
197 unsigned long arg4) = entry->func;
198- unsigned long args[5];
199+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
200
201- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
202+ lttng_syscall_get_arguments(current, regs, args);
203 fptr(event, ret, args[0], args[1], args[2], args[3], args[4]);
204 break;
205 }
206@@ -671,9 +672,9 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
207 unsigned long arg3,
208 unsigned long arg4,
209 unsigned long arg5) = entry->func;
210- unsigned long args[6];
211+ unsigned long args[LTTNG_SYSCALL_NR_ARGS];
212
213- syscall_get_arguments(current, regs, 0, entry->nrargs, args);
214+ lttng_syscall_get_arguments(current, regs, args);
215 fptr(event, ret, args[0], args[1], args[2],
216 args[3], args[4], args[5]);
217 break;
218diff --git a/wrapper/syscall.h b/wrapper/syscall.h
219new file mode 100644
220index 0000000..8715f0c
221--- /dev/null
222+++ b/wrapper/syscall.h
223@@ -0,0 +1,34 @@
224+/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1)
225+ *
226+ * wrapper/syscall.h
227+ *
228+ * wrapper around asm/syscall.h.
229+ *
230+ * Copyright (C) 2019 Michael Jeanson <mjeanson@efficios.com>
231+ */
232+
233+#ifndef _LTTNG_WRAPPER_SYSCALL_H
234+#define _LTTNG_WRAPPER_SYSCALL_H
235+
236+#include <asm/syscall.h>
237+#include <lttng-kernel-version.h>
238+
239+#define LTTNG_SYSCALL_NR_ARGS 6
240+
241+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0))
242+
243+#define lttng_syscall_get_arguments(task, regs, args) \
244+ syscall_get_arguments(task, regs, args)
245+
246+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0) */
247+
248+static inline
249+void lttng_syscall_get_arguments(struct task_struct *task,
250+ struct pt_regs *regs, unsigned long *args)
251+{
252+ syscall_get_arguments(task, regs, 0, LTTNG_SYSCALL_NR_ARGS, args);
253+}
254+
255+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(5,1,0) */
256+
257+#endif /* _LTTNG_WRAPPER_SYSCALL_H */
258--
2592.17.0
260