summaryrefslogtreecommitdiffstats
path: root/meta/recipes-kernel/lttng/lttng-modules
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-kernel/lttng/lttng-modules')
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0001-Kconfig-fix-dependency-issue-when-building-in-tree-w.patch54
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0001-fix-btrfs-tracepoints-output-proper-root-owner-for-t.patch318
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0002-fix-Move-mmutrace.h-into-the-mmu-sub-directory-v5.9.patch41
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0003-fix-KVM-x86-mmu-Make-kvm_mmu_page-definition-and-acc.patch39
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0004-fix-ext4-limit-the-length-of-per-inode-prealloc-list.patch84
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0005-fix-ext4-indicate-via-a-block-bitmap-read-is-prefetc.patch63
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0006-fix-removal-of-smp_-read_barrier_depends-v5.9.patch391
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0007-fix-objtool-Rename-frame.h-objtool.h-v5.10.patch88
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0007-fix-writeback-Drop-I_DIRTY_TIME_EXPIRE-v5.9.patch59
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0008-fix-writeback-Fix-sync-livelock-due-to-b_dirty_time-.patch117
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0009-fix-btrfs-make-ordered-extent-tracepoint-take-btrfs_.patch179
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0009-fix-version-ranges-for-ext4_discard_preallocations-a.patch52
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0010-Fix-system-call-filter-table.patch918
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0010-fix-ext4-fast-commit-recovery-path-v5.10.patch99
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0012-fix-kvm-x86-mmu-Add-TDP-MMU-PF-handler-v5.10.patch82
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0014-fix-tracepoint-Optimize-using-static_call-v5.10.patch196
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules/0016-fix-statedump-undefined-symbols-caused-by-incorrect-.patch55
17 files changed, 1017 insertions, 1818 deletions
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0001-Kconfig-fix-dependency-issue-when-building-in-tree-w.patch b/meta/recipes-kernel/lttng/lttng-modules/0001-Kconfig-fix-dependency-issue-when-building-in-tree-w.patch
deleted file mode 100644
index ae8bec45de..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/0001-Kconfig-fix-dependency-issue-when-building-in-tree-w.patch
+++ /dev/null
@@ -1,54 +0,0 @@
1From ff4d1d7e85be94ef43709cd698f0ec9a12f247d1 Mon Sep 17 00:00:00 2001
2From: Beniamin Sandu <beniaminsandu@gmail.com>
3Date: Thu, 13 Aug 2020 16:24:39 +0300
4Subject: [PATCH 01/10] Kconfig: fix dependency issue when building in-tree
5 without CONFIG_FTRACE
6
7When building in-tree, one could disable CONFIG_FTRACE from kernel
8config which will leave CONFIG_TRACEPOINTS selected by LTTNG modules,
9but generate a lot of linker errors like below because it leaves out
10other stuff, e.g.:
11
12trace.c:(.text+0xd86b): undefined reference to `trace_event_buffer_reserve'
13ld: trace.c:(.text+0xd8de): undefined reference to `trace_event_buffer_commit'
14ld: trace.c:(.text+0xd926): undefined reference to `event_triggers_call'
15ld: trace.c:(.text+0xd942): undefined reference to `trace_event_ignore_this_pid'
16ld: net/mac80211/trace.o: in function `trace_event_raw_event_drv_tdls_cancel_channel_switch':
17
18It appears to be caused by the fact that TRACE_EVENT macros in the Linux
19kernel depend on the Ftrace ring buffer as soon as CONFIG_TRACEPOINTS is
20enabled.
21
22Steps to reproduce:
23
24- Get a clone of an upstream stable kernel and use scripts/built-in.sh on it
25
26- Configure a standard x86-64 build, enable built-in LTTNG but disable
27 CONFIG_FTRACE from Kernel Hacking-->Tracers using menuconfig
28
29- Build will fail at linking stage
30
31Upstream-Status: Backport
32
33Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
34Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
35---
36 Kconfig | 2 +-
37 1 file changed, 1 insertion(+), 1 deletion(-)
38
39diff --git a/Kconfig b/Kconfig
40index acdab73..10eccff 100644
41--- a/Kconfig
42+++ b/Kconfig
43@@ -2,7 +2,7 @@
44
45 config LTTNG
46 tristate "LTTng support"
47- select TRACEPOINTS
48+ select TRACING
49 help
50 LTTng is an open source tracing framework for Linux.
51
52--
532.19.1
54
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0001-fix-btrfs-tracepoints-output-proper-root-owner-for-t.patch b/meta/recipes-kernel/lttng/lttng-modules/0001-fix-btrfs-tracepoints-output-proper-root-owner-for-t.patch
new file mode 100644
index 0000000000..956f53d7b7
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0001-fix-btrfs-tracepoints-output-proper-root-owner-for-t.patch
@@ -0,0 +1,318 @@
1From e13a7d262928984154fcf89feb14098e0cd1ad31 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Tue, 27 Oct 2020 11:42:23 -0400
4Subject: [PATCH 04/11] fix: btrfs: tracepoints: output proper root owner for
5 trace_find_free_extent() (v5.10)
6
7See upstream commit :
8
9 commit 437490fed3b0c9ae21af8f70e0f338d34560842b
10 Author: Qu Wenruo <wqu@suse.com>
11 Date: Tue Jul 28 09:42:49 2020 +0800
12
13 btrfs: tracepoints: output proper root owner for trace_find_free_extent()
14
15 The current trace event always output result like this:
16
17 find_free_extent: root=2(EXTENT_TREE) len=16384 empty_size=0 flags=4(METADATA)
18 find_free_extent: root=2(EXTENT_TREE) len=16384 empty_size=0 flags=4(METADATA)
19 find_free_extent: root=2(EXTENT_TREE) len=8192 empty_size=0 flags=1(DATA)
20 find_free_extent: root=2(EXTENT_TREE) len=8192 empty_size=0 flags=1(DATA)
21 find_free_extent: root=2(EXTENT_TREE) len=4096 empty_size=0 flags=1(DATA)
22 find_free_extent: root=2(EXTENT_TREE) len=4096 empty_size=0 flags=1(DATA)
23
24 T's saying we're allocating data extent for EXTENT tree, which is not
25 even possible.
26
27 It's because we always use EXTENT tree as the owner for
28 trace_find_free_extent() without using the @root from
29 btrfs_reserve_extent().
30
31 This patch will change the parameter to use proper @root for
32 trace_find_free_extent():
33
34 Now it looks much better:
35
36 find_free_extent: root=5(FS_TREE) len=16384 empty_size=0 flags=36(METADATA|DUP)
37 find_free_extent: root=5(FS_TREE) len=8192 empty_size=0 flags=1(DATA)
38 find_free_extent: root=5(FS_TREE) len=16384 empty_size=0 flags=1(DATA)
39 find_free_extent: root=5(FS_TREE) len=4096 empty_size=0 flags=1(DATA)
40 find_free_extent: root=5(FS_TREE) len=8192 empty_size=0 flags=1(DATA)
41 find_free_extent: root=5(FS_TREE) len=16384 empty_size=0 flags=36(METADATA|DUP)
42 find_free_extent: root=7(CSUM_TREE) len=16384 empty_size=0 flags=36(METADATA|DUP)
43 find_free_extent: root=2(EXTENT_TREE) len=16384 empty_size=0 flags=36(METADATA|DUP)
44 find_free_extent: root=1(ROOT_TREE) len=16384 empty_size=0 flags=36(METADATA|DUP)
45
46Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
47Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
48Change-Id: I1d674064d29b31417e2acffdeb735f5052a87032
49
50Upstream-Status: Backport
51
52Signed-off-by: He Zhe <zhe.he@windriver.com>
53---
54 instrumentation/events/lttng-module/btrfs.h | 206 ++++++++++++--------
55 1 file changed, 122 insertions(+), 84 deletions(-)
56
57diff --git a/instrumentation/events/lttng-module/btrfs.h b/instrumentation/events/lttng-module/btrfs.h
58index 7b29008..52fcfd0 100644
59--- a/instrumentation/events/lttng-module/btrfs.h
60+++ b/instrumentation/events/lttng-module/btrfs.h
61@@ -1856,7 +1856,29 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserved_extent, btrfs_reserved_extent_f
62
63 #endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)) */
64
65-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0))
66+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0) || \
67+ LTTNG_KERNEL_RANGE(5,9,6, 5,10,0) || \
68+ LTTNG_KERNEL_RANGE(5,4,78, 5,5,0))
69+LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
70+
71+ btrfs_find_free_extent,
72+
73+ TP_PROTO(const struct btrfs_root *root, u64 num_bytes, u64 empty_size,
74+ u64 data),
75+
76+ TP_ARGS(root, num_bytes, empty_size, data),
77+
78+ TP_FIELDS(
79+ ctf_array(u8, fsid, root->lttng_fs_info_fsid, BTRFS_UUID_SIZE)
80+ ctf_integer(u64, root_objectid, root->root_key.objectid)
81+ ctf_integer(u64, num_bytes, num_bytes)
82+ ctf_integer(u64, empty_size, empty_size)
83+ ctf_integer(u64, data, data)
84+ )
85+)
86+
87+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0))
88+
89 LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
90
91 btrfs_find_free_extent,
92@@ -1874,6 +1896,105 @@ LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
93 )
94 )
95
96+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,18,0))
97+
98+LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
99+
100+ btrfs_find_free_extent,
101+
102+ TP_PROTO(const struct btrfs_fs_info *fs_info, u64 num_bytes, u64 empty_size,
103+ u64 data),
104+
105+ TP_ARGS(fs_info, num_bytes, empty_size, data),
106+
107+ TP_FIELDS(
108+ ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE)
109+ ctf_integer(u64, num_bytes, num_bytes)
110+ ctf_integer(u64, empty_size, empty_size)
111+ ctf_integer(u64, data, data)
112+ )
113+)
114+
115+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0))
116+
117+LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
118+
119+ btrfs_find_free_extent,
120+
121+ TP_PROTO(const struct btrfs_fs_info *fs_info, u64 num_bytes, u64 empty_size,
122+ u64 data),
123+
124+ TP_ARGS(fs_info, num_bytes, empty_size, data),
125+
126+ TP_FIELDS(
127+ ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE)
128+ ctf_integer(u64, num_bytes, num_bytes)
129+ ctf_integer(u64, empty_size, empty_size)
130+ ctf_integer(u64, data, data)
131+ )
132+)
133+
134+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
135+
136+LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
137+
138+ btrfs_find_free_extent,
139+
140+ TP_PROTO(struct btrfs_fs_info *fs_info, u64 num_bytes, u64 empty_size,
141+ u64 data),
142+
143+ TP_ARGS(fs_info, num_bytes, empty_size, data),
144+
145+ TP_FIELDS(
146+ ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE)
147+ ctf_integer(u64, num_bytes, num_bytes)
148+ ctf_integer(u64, empty_size, empty_size)
149+ ctf_integer(u64, data, data)
150+ )
151+)
152+
153+#elif (LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \
154+ LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \
155+ LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \
156+ LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0))
157+
158+LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
159+
160+ btrfs_find_free_extent,
161+
162+ TP_PROTO(const struct btrfs_root *root, u64 num_bytes, u64 empty_size,
163+ u64 data),
164+
165+ TP_ARGS(root, num_bytes, empty_size, data),
166+
167+ TP_FIELDS(
168+ ctf_integer(u64, root_objectid, root->root_key.objectid)
169+ ctf_integer(u64, num_bytes, num_bytes)
170+ ctf_integer(u64, empty_size, empty_size)
171+ ctf_integer(u64, data, data)
172+ )
173+)
174+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
175+
176+LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
177+
178+ btrfs_find_free_extent,
179+
180+ TP_PROTO(struct btrfs_root *root, u64 num_bytes, u64 empty_size,
181+ u64 data),
182+
183+ TP_ARGS(root, num_bytes, empty_size, data),
184+
185+ TP_FIELDS(
186+ ctf_integer(u64, root_objectid, root->root_key.objectid)
187+ ctf_integer(u64, num_bytes, num_bytes)
188+ ctf_integer(u64, empty_size, empty_size)
189+ ctf_integer(u64, data, data)
190+ )
191+)
192+#endif
193+
194+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0))
195 LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent,
196
197 TP_PROTO(const struct btrfs_block_group *block_group, u64 start,
198@@ -1907,22 +2028,6 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_clus
199 )
200
201 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,18,0))
202-LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
203-
204- btrfs_find_free_extent,
205-
206- TP_PROTO(const struct btrfs_fs_info *fs_info, u64 num_bytes, u64 empty_size,
207- u64 data),
208-
209- TP_ARGS(fs_info, num_bytes, empty_size, data),
210-
211- TP_FIELDS(
212- ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE)
213- ctf_integer(u64, num_bytes, num_bytes)
214- ctf_integer(u64, empty_size, empty_size)
215- ctf_integer(u64, data, data)
216- )
217-)
218
219 LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent,
220
221@@ -1957,22 +2062,6 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_clus
222 )
223
224 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0))
225-LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
226-
227- btrfs_find_free_extent,
228-
229- TP_PROTO(const struct btrfs_fs_info *fs_info, u64 num_bytes, u64 empty_size,
230- u64 data),
231-
232- TP_ARGS(fs_info, num_bytes, empty_size, data),
233-
234- TP_FIELDS(
235- ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE)
236- ctf_integer(u64, num_bytes, num_bytes)
237- ctf_integer(u64, empty_size, empty_size)
238- ctf_integer(u64, data, data)
239- )
240-)
241
242 LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent,
243
244@@ -2011,23 +2100,6 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_clus
245
246 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0))
247
248-LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
249-
250- btrfs_find_free_extent,
251-
252- TP_PROTO(struct btrfs_fs_info *fs_info, u64 num_bytes, u64 empty_size,
253- u64 data),
254-
255- TP_ARGS(fs_info, num_bytes, empty_size, data),
256-
257- TP_FIELDS(
258- ctf_array(u8, fsid, lttng_fs_info_fsid, BTRFS_UUID_SIZE)
259- ctf_integer(u64, num_bytes, num_bytes)
260- ctf_integer(u64, empty_size, empty_size)
261- ctf_integer(u64, data, data)
262- )
263-)
264-
265 LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent,
266
267 TP_PROTO(struct btrfs_fs_info *fs_info,
268@@ -2066,23 +2138,6 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_clus
269 LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \
270 LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0))
271
272-LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
273-
274- btrfs_find_free_extent,
275-
276- TP_PROTO(const struct btrfs_root *root, u64 num_bytes, u64 empty_size,
277- u64 data),
278-
279- TP_ARGS(root, num_bytes, empty_size, data),
280-
281- TP_FIELDS(
282- ctf_integer(u64, root_objectid, root->root_key.objectid)
283- ctf_integer(u64, num_bytes, num_bytes)
284- ctf_integer(u64, empty_size, empty_size)
285- ctf_integer(u64, data, data)
286- )
287-)
288-
289 LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent,
290
291 TP_PROTO(const struct btrfs_root *root,
292@@ -2120,23 +2175,6 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__reserve_extent, btrfs_reserve_extent_clus
293
294 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
295
296-LTTNG_TRACEPOINT_EVENT_MAP(find_free_extent,
297-
298- btrfs_find_free_extent,
299-
300- TP_PROTO(struct btrfs_root *root, u64 num_bytes, u64 empty_size,
301- u64 data),
302-
303- TP_ARGS(root, num_bytes, empty_size, data),
304-
305- TP_FIELDS(
306- ctf_integer(u64, root_objectid, root->root_key.objectid)
307- ctf_integer(u64, num_bytes, num_bytes)
308- ctf_integer(u64, empty_size, empty_size)
309- ctf_integer(u64, data, data)
310- )
311-)
312-
313 LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__reserve_extent,
314
315 TP_PROTO(struct btrfs_root *root,
316--
3172.17.1
318
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0002-fix-Move-mmutrace.h-into-the-mmu-sub-directory-v5.9.patch b/meta/recipes-kernel/lttng/lttng-modules/0002-fix-Move-mmutrace.h-into-the-mmu-sub-directory-v5.9.patch
deleted file mode 100644
index fab673b854..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/0002-fix-Move-mmutrace.h-into-the-mmu-sub-directory-v5.9.patch
+++ /dev/null
@@ -1,41 +0,0 @@
1From e10ab43dd0e425df5bc0ac763447664ed075ba05 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Mon, 10 Aug 2020 11:22:05 -0400
4Subject: [PATCH 02/10] fix: Move mmutrace.h into the mmu/ sub-directory (v5.9)
5
6 commit 33e3042dac6bcc33b80835f7d7b502b1d74c457c
7 Author: Sean Christopherson <sean.j.christopherson@intel.com>
8 Date: Mon Jun 22 13:20:29 2020 -0700
9
10 KVM: x86/mmu: Move mmu_audit.c and mmutrace.h into the mmu/ sub-directory
11
12 Move mmu_audit.c and mmutrace.h under mmu/ where they belong.
13
14Upstream-Status: Backport
15
16Change-Id: I582525ccca34e1e3bd62870364108a7d3e9df2e4
17Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
18Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
19---
20 probes/lttng-probe-kvm-x86-mmu.c | 4 ++++
21 1 file changed, 4 insertions(+)
22
23diff --git a/probes/lttng-probe-kvm-x86-mmu.c b/probes/lttng-probe-kvm-x86-mmu.c
24index 37384a2..5a7ef1e 100644
25--- a/probes/lttng-probe-kvm-x86-mmu.c
26+++ b/probes/lttng-probe-kvm-x86-mmu.c
27@@ -24,7 +24,11 @@
28 */
29 #include <wrapper/tracepoint.h>
30
31+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0))
32+#include <../../arch/x86/kvm/mmu/mmutrace.h>
33+#else
34 #include <../../arch/x86/kvm/mmutrace.h>
35+#endif
36
37 #undef TRACE_INCLUDE_PATH
38 #undef TRACE_INCLUDE_FILE
39--
402.19.1
41
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0003-fix-KVM-x86-mmu-Make-kvm_mmu_page-definition-and-acc.patch b/meta/recipes-kernel/lttng/lttng-modules/0003-fix-KVM-x86-mmu-Make-kvm_mmu_page-definition-and-acc.patch
deleted file mode 100644
index 524631cc72..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/0003-fix-KVM-x86-mmu-Make-kvm_mmu_page-definition-and-acc.patch
+++ /dev/null
@@ -1,39 +0,0 @@
1From f16315cc45c4c6b880de541bb092ca18a13952b7 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Mon, 10 Aug 2020 11:36:03 -0400
4Subject: [PATCH 03/10] fix: KVM: x86/mmu: Make kvm_mmu_page definition and
5 accessor internal-only (v5.9)
6
7 commit 985ab2780164698ec6e7d73fad523d50449261dd
8 Author: Sean Christopherson <sean.j.christopherson@intel.com>
9 Date: Mon Jun 22 13:20:32 2020 -0700
10
11 KVM: x86/mmu: Make kvm_mmu_page definition and accessor internal-only
12
13 Make 'struct kvm_mmu_page' MMU-only, nothing outside of the MMU should
14 be poking into the gory details of shadow pages.
15
16Upstream-Status: Backport
17
18Change-Id: Ia5c1b9c49c2b00dad1d5b17c50c3dc730dafda20
19Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
20Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
21---
22 probes/lttng-probe-kvm-x86-mmu.c | 1 +
23 1 file changed, 1 insertion(+)
24
25diff --git a/probes/lttng-probe-kvm-x86-mmu.c b/probes/lttng-probe-kvm-x86-mmu.c
26index 5a7ef1e..8f98186 100644
27--- a/probes/lttng-probe-kvm-x86-mmu.c
28+++ b/probes/lttng-probe-kvm-x86-mmu.c
29@@ -25,6 +25,7 @@
30 #include <wrapper/tracepoint.h>
31
32 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0))
33+#include <../../arch/x86/kvm/mmu/mmu_internal.h>
34 #include <../../arch/x86/kvm/mmu/mmutrace.h>
35 #else
36 #include <../../arch/x86/kvm/mmutrace.h>
37--
382.19.1
39
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0004-fix-ext4-limit-the-length-of-per-inode-prealloc-list.patch b/meta/recipes-kernel/lttng/lttng-modules/0004-fix-ext4-limit-the-length-of-per-inode-prealloc-list.patch
deleted file mode 100644
index e29c07252c..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/0004-fix-ext4-limit-the-length-of-per-inode-prealloc-list.patch
+++ /dev/null
@@ -1,84 +0,0 @@
1From 8fe742807e65af29dac3fea568ff93cbc5dd9a56 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Mon, 24 Aug 2020 15:26:04 -0400
4Subject: [PATCH 04/10] fix: ext4: limit the length of per-inode prealloc list
5 (v5.9)
6MIME-Version: 1.0
7Content-Type: text/plain; charset=UTF-8
8Content-Transfer-Encoding: 8bit
9
10See upstream commit:
11
12 commit 27bc446e2def38db3244a6eb4bb1d6312936610a
13 Author: brookxu <brookxu.cn@gmail.com>
14 Date: Mon Aug 17 15:36:15 2020 +0800
15
16 ext4: limit the length of per-inode prealloc list
17
18 In the scenario of writing sparse files, the per-inode prealloc list may
19 be very long, resulting in high overhead for ext4_mb_use_preallocated().
20 To circumvent this problem, we limit the maximum length of per-inode
21 prealloc list to 512 and allow users to modify it.
22
23 After patching, we observed that the sys ratio of cpu has dropped, and
24 the system throughput has increased significantly. We created a process
25 to write the sparse file, and the running time of the process on the
26 fixed kernel was significantly reduced, as follows:
27
28 Running time on unfixed kernel:
29 [root@TENCENT64 ~]# time taskset 0x01 ./sparse /data1/sparce.dat
30 real 0m2.051s
31 user 0m0.008s
32 sys 0m2.026s
33
34 Running time on fixed kernel:
35 [root@TENCENT64 ~]# time taskset 0x01 ./sparse /data1/sparce.dat
36 real 0m0.471s
37 user 0m0.004s
38 sys 0m0.395s
39
40Upstream-Status: Backport
41
42Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
43Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
44Change-Id: I5169cb24853d4da32e2862a6626f1f058689b053
45---
46 instrumentation/events/lttng-module/ext4.h | 15 +++++++++++++++
47 1 file changed, 15 insertions(+)
48
49diff --git a/instrumentation/events/lttng-module/ext4.h b/instrumentation/events/lttng-module/ext4.h
50index 5f7ab28..72ad4c9 100644
51--- a/instrumentation/events/lttng-module/ext4.h
52+++ b/instrumentation/events/lttng-module/ext4.h
53@@ -460,6 +460,20 @@ LTTNG_TRACEPOINT_EVENT(ext4_mb_release_group_pa,
54 )
55 #endif
56
57+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0))
58+LTTNG_TRACEPOINT_EVENT(ext4_discard_preallocations,
59+ TP_PROTO(struct inode *inode, unsigned int len, unsigned int needed),
60+
61+ TP_ARGS(inode, len, needed),
62+
63+ TP_FIELDS(
64+ ctf_integer(dev_t, dev, inode->i_sb->s_dev)
65+ ctf_integer(ino_t, ino, inode->i_ino)
66+ ctf_integer(unsigned int, len, len)
67+ ctf_integer(unsigned int, needed, needed)
68+ )
69+)
70+#else
71 LTTNG_TRACEPOINT_EVENT(ext4_discard_preallocations,
72 TP_PROTO(struct inode *inode),
73
74@@ -470,6 +484,7 @@ LTTNG_TRACEPOINT_EVENT(ext4_discard_preallocations,
75 ctf_integer(ino_t, ino, inode->i_ino)
76 )
77 )
78+#endif
79
80 LTTNG_TRACEPOINT_EVENT(ext4_mb_discard_preallocations,
81 TP_PROTO(struct super_block *sb, int needed),
82--
832.19.1
84
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0005-fix-ext4-indicate-via-a-block-bitmap-read-is-prefetc.patch b/meta/recipes-kernel/lttng/lttng-modules/0005-fix-ext4-indicate-via-a-block-bitmap-read-is-prefetc.patch
deleted file mode 100644
index f76e9698c8..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/0005-fix-ext4-indicate-via-a-block-bitmap-read-is-prefetc.patch
+++ /dev/null
@@ -1,63 +0,0 @@
1From 52563d02a9234215b62c5f519aa1b5d8589ccd0a Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Mon, 24 Aug 2020 15:37:50 -0400
4Subject: [PATCH 05/10] =?UTF-8?q?fix:=20ext4:=20indicate=20via=20a=20block?=
5 =?UTF-8?q?=20bitmap=20read=20is=20prefetched=E2=80=A6=20(v5.9)?=
6MIME-Version: 1.0
7Content-Type: text/plain; charset=UTF-8
8Content-Transfer-Encoding: 8bit
9
10See upstream commit:
11
12 commit ab74c7b23f3770935016e3eb3ecdf1e42b73efaa
13 Author: Theodore Ts'o <tytso@mit.edu>
14 Date: Wed Jul 15 11:48:55 2020 -0400
15
16 ext4: indicate via a block bitmap read is prefetched via a tracepoint
17
18 Modify the ext4_read_block_bitmap_load tracepoint so that it tells us
19 whether a block bitmap is being prefetched.
20
21Upstream-Status: Backport
22
23Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
24Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
25Change-Id: I0e5e2c5b8004223d0928235c092449ee16a940e1
26---
27 instrumentation/events/lttng-module/ext4.h | 14 ++++++++++++++
28 1 file changed, 14 insertions(+)
29
30diff --git a/instrumentation/events/lttng-module/ext4.h b/instrumentation/events/lttng-module/ext4.h
31index 72ad4c9..4476abb 100644
32--- a/instrumentation/events/lttng-module/ext4.h
33+++ b/instrumentation/events/lttng-module/ext4.h
34@@ -893,12 +893,26 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__bitmap_load, ext4_mb_buddy_bitmap_load,
35 TP_ARGS(sb, group)
36 )
37
38+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0))
39+LTTNG_TRACEPOINT_EVENT(ext4_read_block_bitmap_load,
40+ TP_PROTO(struct super_block *sb, unsigned long group, bool prefetch),
41+
42+ TP_ARGS(sb, group, prefetch),
43+
44+ TP_FIELDS(
45+ ctf_integer(dev_t, dev, sb->s_dev)
46+ ctf_integer(__u32, group, group)
47+ ctf_integer(bool, prefetch, prefetch)
48+ )
49+)
50+#else
51 LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__bitmap_load, ext4_read_block_bitmap_load,
52
53 TP_PROTO(struct super_block *sb, unsigned long group),
54
55 TP_ARGS(sb, group)
56 )
57+#endif
58
59 LTTNG_TRACEPOINT_EVENT_INSTANCE(ext4__bitmap_load, ext4_load_inode_bitmap,
60
61--
622.19.1
63
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0006-fix-removal-of-smp_-read_barrier_depends-v5.9.patch b/meta/recipes-kernel/lttng/lttng-modules/0006-fix-removal-of-smp_-read_barrier_depends-v5.9.patch
deleted file mode 100644
index 0970dd30aa..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/0006-fix-removal-of-smp_-read_barrier_depends-v5.9.patch
+++ /dev/null
@@ -1,391 +0,0 @@
1From 57ccbfa6a8a79c7b84394c2097efaf7935607aa5 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Tue, 25 Aug 2020 10:56:29 -0400
4Subject: [PATCH 06/10] fix: removal of [smp_]read_barrier_depends (v5.9)
5
6See upstream commits:
7
8 commit 76ebbe78f7390aee075a7f3768af197ded1bdfbb
9 Author: Will Deacon <will@kernel.org>
10 Date: Tue Oct 24 11:22:47 2017 +0100
11
12 locking/barriers: Add implicit smp_read_barrier_depends() to READ_ONCE()
13
14 In preparation for the removal of lockless_dereference(), which is the
15 same as READ_ONCE() on all architectures other than Alpha, add an
16 implicit smp_read_barrier_depends() to READ_ONCE() so that it can be
17 used to head dependency chains on all architectures.
18
19 commit 76ebbe78f7390aee075a7f3768af197ded1bdfbb
20 Author: Will Deacon <will.deacon@arm.com>
21 Date: Tue Oct 24 11:22:47 2017 +0100
22
23 locking/barriers: Add implicit smp_read_barrier_depends() to READ_ONCE()
24
25 In preparation for the removal of lockless_dereference(), which is the
26 same as READ_ONCE() on all architectures other than Alpha, add an
27 implicit smp_read_barrier_depends() to READ_ONCE() so that it can be
28 used to head dependency chains on all architectures.
29
30Upstream-Status: Backport
31
32Change-Id: Ife8880bd9378dca2972da8838f40fc35ccdfaaac
33Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
34Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
35---
36 instrumentation/events/lttng-module/i2c.h | 4 ++--
37 lib/ringbuffer/backend.h | 2 +-
38 lib/ringbuffer/backend_internal.h | 2 +-
39 lib/ringbuffer/frontend.h | 4 ++--
40 lib/ringbuffer/ring_buffer_frontend.c | 4 ++--
41 lib/ringbuffer/ring_buffer_iterator.c | 2 +-
42 lttng-events.c | 8 ++++----
43 probes/lttng-kprobes.c | 6 +++---
44 probes/lttng-kretprobes.c | 6 +++---
45 probes/lttng-tracepoint-event-impl.h | 12 ++++++------
46 probes/lttng-uprobes.c | 6 +++---
47 wrapper/compiler.h | 18 ++++++++++++++++++
48 wrapper/trace-clock.h | 15 +++++----------
49 13 files changed, 51 insertions(+), 38 deletions(-)
50
51diff --git a/instrumentation/events/lttng-module/i2c.h b/instrumentation/events/lttng-module/i2c.h
52index dcbabf6..131d134 100644
53--- a/instrumentation/events/lttng-module/i2c.h
54+++ b/instrumentation/events/lttng-module/i2c.h
55@@ -23,7 +23,7 @@ LTTNG_TRACEPOINT_EVENT_CODE(i2c_write,
56
57 TP_code_pre(
58 tp_locvar->extract_sensitive_payload =
59- READ_ONCE(extract_sensitive_payload);
60+ LTTNG_READ_ONCE(extract_sensitive_payload);
61 ),
62
63 TP_FIELDS(
64@@ -78,7 +78,7 @@ LTTNG_TRACEPOINT_EVENT_CODE(i2c_reply,
65
66 TP_code_pre(
67 tp_locvar->extract_sensitive_payload =
68- READ_ONCE(extract_sensitive_payload);
69+ LTTNG_READ_ONCE(extract_sensitive_payload);
70 ),
71
72 TP_FIELDS(
73diff --git a/lib/ringbuffer/backend.h b/lib/ringbuffer/backend.h
74index da937f2..43e1d47 100644
75--- a/lib/ringbuffer/backend.h
76+++ b/lib/ringbuffer/backend.h
77@@ -156,7 +156,7 @@ size_t lib_ring_buffer_do_strcpy(const struct lib_ring_buffer_config *config,
78 * Only read source character once, in case it is
79 * modified concurrently.
80 */
81- c = READ_ONCE(src[count]);
82+ c = LTTNG_READ_ONCE(src[count]);
83 if (!c)
84 break;
85 lib_ring_buffer_do_copy(config, &dest[count], &c, 1);
86diff --git a/lib/ringbuffer/backend_internal.h b/lib/ringbuffer/backend_internal.h
87index 2d6a345..1226fd8 100644
88--- a/lib/ringbuffer/backend_internal.h
89+++ b/lib/ringbuffer/backend_internal.h
90@@ -367,7 +367,7 @@ void lib_ring_buffer_clear_noref(const struct lib_ring_buffer_config *config,
91 * Performing a volatile access to read the sb_pages, because we want to
92 * read a coherent version of the pointer and the associated noref flag.
93 */
94- id = READ_ONCE(bufb->buf_wsb[idx].id);
95+ id = LTTNG_READ_ONCE(bufb->buf_wsb[idx].id);
96 for (;;) {
97 /* This check is called on the fast path for each record. */
98 if (likely(!subbuffer_id_is_noref(config, id))) {
99diff --git a/lib/ringbuffer/frontend.h b/lib/ringbuffer/frontend.h
100index 6f516d9..41382fe 100644
101--- a/lib/ringbuffer/frontend.h
102+++ b/lib/ringbuffer/frontend.h
103@@ -79,7 +79,7 @@ void *channel_destroy(struct channel *chan);
104 #define for_each_channel_cpu(cpu, chan) \
105 for ((cpu) = -1; \
106 ({ (cpu) = cpumask_next(cpu, (chan)->backend.cpumask); \
107- smp_read_barrier_depends(); (cpu) < nr_cpu_ids; });)
108+ smp_rmb(); (cpu) < nr_cpu_ids; });)
109
110 extern struct lib_ring_buffer *channel_get_ring_buffer(
111 const struct lib_ring_buffer_config *config,
112@@ -155,7 +155,7 @@ static inline
113 int lib_ring_buffer_is_finalized(const struct lib_ring_buffer_config *config,
114 struct lib_ring_buffer *buf)
115 {
116- int finalized = READ_ONCE(buf->finalized);
117+ int finalized = LTTNG_READ_ONCE(buf->finalized);
118 /*
119 * Read finalized before counters.
120 */
121diff --git a/lib/ringbuffer/ring_buffer_frontend.c b/lib/ringbuffer/ring_buffer_frontend.c
122index 3cab365..4980d20 100644
123--- a/lib/ringbuffer/ring_buffer_frontend.c
124+++ b/lib/ringbuffer/ring_buffer_frontend.c
125@@ -1074,7 +1074,7 @@ int lib_ring_buffer_snapshot(struct lib_ring_buffer *buf,
126 int finalized;
127
128 retry:
129- finalized = READ_ONCE(buf->finalized);
130+ finalized = LTTNG_READ_ONCE(buf->finalized);
131 /*
132 * Read finalized before counters.
133 */
134@@ -1245,7 +1245,7 @@ int lib_ring_buffer_get_subbuf(struct lib_ring_buffer *buf,
135 return -EBUSY;
136 }
137 retry:
138- finalized = READ_ONCE(buf->finalized);
139+ finalized = LTTNG_READ_ONCE(buf->finalized);
140 /*
141 * Read finalized before counters.
142 */
143diff --git a/lib/ringbuffer/ring_buffer_iterator.c b/lib/ringbuffer/ring_buffer_iterator.c
144index d25db72..7b4f20a 100644
145--- a/lib/ringbuffer/ring_buffer_iterator.c
146+++ b/lib/ringbuffer/ring_buffer_iterator.c
147@@ -46,7 +46,7 @@ restart:
148 switch (iter->state) {
149 case ITER_GET_SUBBUF:
150 ret = lib_ring_buffer_get_next_subbuf(buf);
151- if (ret && !READ_ONCE(buf->finalized)
152+ if (ret && !LTTNG_READ_ONCE(buf->finalized)
153 && config->alloc == RING_BUFFER_ALLOC_GLOBAL) {
154 /*
155 * Use "pull" scheme for global buffers. The reader
156diff --git a/lttng-events.c b/lttng-events.c
157index be7e389..d719294 100644
158--- a/lttng-events.c
159+++ b/lttng-events.c
160@@ -1719,7 +1719,7 @@ int lttng_metadata_printf(struct lttng_session *session,
161 size_t len;
162 va_list ap;
163
164- WARN_ON_ONCE(!READ_ONCE(session->active));
165+ WARN_ON_ONCE(!LTTNG_READ_ONCE(session->active));
166
167 va_start(ap, fmt);
168 str = kvasprintf(GFP_KERNEL, fmt, ap);
169@@ -2305,7 +2305,7 @@ int _lttng_event_metadata_statedump(struct lttng_session *session,
170 {
171 int ret = 0;
172
173- if (event->metadata_dumped || !READ_ONCE(session->active))
174+ if (event->metadata_dumped || !LTTNG_READ_ONCE(session->active))
175 return 0;
176 if (chan->channel_type == METADATA_CHANNEL)
177 return 0;
178@@ -2377,7 +2377,7 @@ int _lttng_channel_metadata_statedump(struct lttng_session *session,
179 {
180 int ret = 0;
181
182- if (chan->metadata_dumped || !READ_ONCE(session->active))
183+ if (chan->metadata_dumped || !LTTNG_READ_ONCE(session->active))
184 return 0;
185
186 if (chan->channel_type == METADATA_CHANNEL)
187@@ -2604,7 +2604,7 @@ int _lttng_session_metadata_statedump(struct lttng_session *session)
188 struct lttng_event *event;
189 int ret = 0;
190
191- if (!READ_ONCE(session->active))
192+ if (!LTTNG_READ_ONCE(session->active))
193 return 0;
194
195 lttng_metadata_begin(session);
196diff --git a/probes/lttng-kprobes.c b/probes/lttng-kprobes.c
197index a44eaa1..38fb72e 100644
198--- a/probes/lttng-kprobes.c
199+++ b/probes/lttng-kprobes.c
200@@ -31,11 +31,11 @@ int lttng_kprobes_handler_pre(struct kprobe *p, struct pt_regs *regs)
201 int ret;
202 unsigned long data = (unsigned long) p->addr;
203
204- if (unlikely(!READ_ONCE(chan->session->active)))
205+ if (unlikely(!LTTNG_READ_ONCE(chan->session->active)))
206 return 0;
207- if (unlikely(!READ_ONCE(chan->enabled)))
208+ if (unlikely(!LTTNG_READ_ONCE(chan->enabled)))
209 return 0;
210- if (unlikely(!READ_ONCE(event->enabled)))
211+ if (unlikely(!LTTNG_READ_ONCE(event->enabled)))
212 return 0;
213
214 lib_ring_buffer_ctx_init(&ctx, chan->chan, &lttng_probe_ctx, sizeof(data),
215diff --git a/probes/lttng-kretprobes.c b/probes/lttng-kretprobes.c
216index ab98ff2..a6bcd21 100644
217--- a/probes/lttng-kretprobes.c
218+++ b/probes/lttng-kretprobes.c
219@@ -51,11 +51,11 @@ int _lttng_kretprobes_handler(struct kretprobe_instance *krpi,
220 unsigned long parent_ip;
221 } payload;
222
223- if (unlikely(!READ_ONCE(chan->session->active)))
224+ if (unlikely(!LTTNG_READ_ONCE(chan->session->active)))
225 return 0;
226- if (unlikely(!READ_ONCE(chan->enabled)))
227+ if (unlikely(!LTTNG_READ_ONCE(chan->enabled)))
228 return 0;
229- if (unlikely(!READ_ONCE(event->enabled)))
230+ if (unlikely(!LTTNG_READ_ONCE(event->enabled)))
231 return 0;
232
233 payload.ip = (unsigned long) krpi->rp->kp.addr;
234diff --git a/probes/lttng-tracepoint-event-impl.h b/probes/lttng-tracepoint-event-impl.h
235index 77b8638..72a669e 100644
236--- a/probes/lttng-tracepoint-event-impl.h
237+++ b/probes/lttng-tracepoint-event-impl.h
238@@ -1132,11 +1132,11 @@ static void __event_probe__##_name(void *__data, _proto) \
239 \
240 if (!_TP_SESSION_CHECK(session, __session)) \
241 return; \
242- if (unlikely(!READ_ONCE(__session->active))) \
243+ if (unlikely(!LTTNG_READ_ONCE(__session->active))) \
244 return; \
245- if (unlikely(!READ_ONCE(__chan->enabled))) \
246+ if (unlikely(!LTTNG_READ_ONCE(__chan->enabled))) \
247 return; \
248- if (unlikely(!READ_ONCE(__event->enabled))) \
249+ if (unlikely(!LTTNG_READ_ONCE(__event->enabled))) \
250 return; \
251 __lf = lttng_rcu_dereference(__session->pid_tracker.p); \
252 if (__lf && likely(!lttng_id_tracker_lookup(__lf, current->tgid))) \
253@@ -1225,11 +1225,11 @@ static void __event_probe__##_name(void *__data) \
254 \
255 if (!_TP_SESSION_CHECK(session, __session)) \
256 return; \
257- if (unlikely(!READ_ONCE(__session->active))) \
258+ if (unlikely(!LTTNG_READ_ONCE(__session->active))) \
259 return; \
260- if (unlikely(!READ_ONCE(__chan->enabled))) \
261+ if (unlikely(!LTTNG_READ_ONCE(__chan->enabled))) \
262 return; \
263- if (unlikely(!READ_ONCE(__event->enabled))) \
264+ if (unlikely(!LTTNG_READ_ONCE(__event->enabled))) \
265 return; \
266 __lf = lttng_rcu_dereference(__session->pid_tracker.p); \
267 if (__lf && likely(!lttng_id_tracker_lookup(__lf, current->tgid))) \
268diff --git a/probes/lttng-uprobes.c b/probes/lttng-uprobes.c
269index bc10128..bda1d9b 100644
270--- a/probes/lttng-uprobes.c
271+++ b/probes/lttng-uprobes.c
272@@ -40,11 +40,11 @@ int lttng_uprobes_handler_pre(struct uprobe_consumer *uc, struct pt_regs *regs)
273 unsigned long ip;
274 } payload;
275
276- if (unlikely(!READ_ONCE(chan->session->active)))
277+ if (unlikely(!LTTNG_READ_ONCE(chan->session->active)))
278 return 0;
279- if (unlikely(!READ_ONCE(chan->enabled)))
280+ if (unlikely(!LTTNG_READ_ONCE(chan->enabled)))
281 return 0;
282- if (unlikely(!READ_ONCE(event->enabled)))
283+ if (unlikely(!LTTNG_READ_ONCE(event->enabled)))
284 return 0;
285
286 lib_ring_buffer_ctx_init(&ctx, chan->chan, &lttng_probe_ctx,
287diff --git a/wrapper/compiler.h b/wrapper/compiler.h
288index 1496f33..b9f8c51 100644
289--- a/wrapper/compiler.h
290+++ b/wrapper/compiler.h
291@@ -9,6 +9,7 @@
292 #define _LTTNG_WRAPPER_COMPILER_H
293
294 #include <linux/compiler.h>
295+#include <linux/version.h>
296
297 /*
298 * Don't allow compiling with buggy compiler.
299@@ -39,4 +40,21 @@
300 # define WRITE_ONCE(x, val) ({ ACCESS_ONCE(x) = val; })
301 #endif
302
303+/*
304+ * In v4.15 a smp read barrier was added to READ_ONCE to replace
305+ * lockless_dereference(), replicate this behavior on prior kernels
306+ * and remove calls to smp_read_barrier_depends which was dropped
307+ * in v5.9.
308+ */
309+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,15,0))
310+#define LTTNG_READ_ONCE(x) READ_ONCE(x)
311+#else
312+#define LTTNG_READ_ONCE(x) \
313+({ \
314+ typeof(x) __val = READ_ONCE(x); \
315+ smp_read_barrier_depends(); \
316+ __val; \
317+})
318+#endif
319+
320 #endif /* _LTTNG_WRAPPER_COMPILER_H */
321diff --git a/wrapper/trace-clock.h b/wrapper/trace-clock.h
322index 9f4e366..187fc82 100644
323--- a/wrapper/trace-clock.h
324+++ b/wrapper/trace-clock.h
325@@ -160,33 +160,30 @@ static inline void put_trace_clock(void)
326
327 static inline u64 trace_clock_read64(void)
328 {
329- struct lttng_trace_clock *ltc = READ_ONCE(lttng_trace_clock);
330+ struct lttng_trace_clock *ltc = LTTNG_READ_ONCE(lttng_trace_clock);
331
332 if (likely(!ltc)) {
333 return trace_clock_read64_monotonic();
334 } else {
335- read_barrier_depends(); /* load ltc before content */
336 return ltc->read64();
337 }
338 }
339
340 static inline u64 trace_clock_freq(void)
341 {
342- struct lttng_trace_clock *ltc = READ_ONCE(lttng_trace_clock);
343+ struct lttng_trace_clock *ltc = LTTNG_READ_ONCE(lttng_trace_clock);
344
345 if (!ltc) {
346 return trace_clock_freq_monotonic();
347 } else {
348- read_barrier_depends(); /* load ltc before content */
349 return ltc->freq();
350 }
351 }
352
353 static inline int trace_clock_uuid(char *uuid)
354 {
355- struct lttng_trace_clock *ltc = READ_ONCE(lttng_trace_clock);
356+ struct lttng_trace_clock *ltc = LTTNG_READ_ONCE(lttng_trace_clock);
357
358- read_barrier_depends(); /* load ltc before content */
359 /* Use default UUID cb when NULL */
360 if (!ltc || !ltc->uuid) {
361 return trace_clock_uuid_monotonic(uuid);
362@@ -197,24 +194,22 @@ static inline int trace_clock_uuid(char *uuid)
363
364 static inline const char *trace_clock_name(void)
365 {
366- struct lttng_trace_clock *ltc = READ_ONCE(lttng_trace_clock);
367+ struct lttng_trace_clock *ltc = LTTNG_READ_ONCE(lttng_trace_clock);
368
369 if (!ltc) {
370 return trace_clock_name_monotonic();
371 } else {
372- read_barrier_depends(); /* load ltc before content */
373 return ltc->name();
374 }
375 }
376
377 static inline const char *trace_clock_description(void)
378 {
379- struct lttng_trace_clock *ltc = READ_ONCE(lttng_trace_clock);
380+ struct lttng_trace_clock *ltc = LTTNG_READ_ONCE(lttng_trace_clock);
381
382 if (!ltc) {
383 return trace_clock_description_monotonic();
384 } else {
385- read_barrier_depends(); /* load ltc before content */
386 return ltc->description();
387 }
388 }
389--
3902.19.1
391
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0007-fix-objtool-Rename-frame.h-objtool.h-v5.10.patch b/meta/recipes-kernel/lttng/lttng-modules/0007-fix-objtool-Rename-frame.h-objtool.h-v5.10.patch
new file mode 100644
index 0000000000..fde9398394
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0007-fix-objtool-Rename-frame.h-objtool.h-v5.10.patch
@@ -0,0 +1,88 @@
1From 37b9cb0e6cb92181b7a25583849a9d161a558982 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Mon, 26 Oct 2020 13:41:02 -0400
4Subject: [PATCH 07/19] fix: objtool: Rename frame.h -> objtool.h (v5.10)
5
6See upstream commit :
7
8 commit 00089c048eb4a8250325efb32a2724fd0da68cce
9 Author: Julien Thierry <jthierry@redhat.com>
10 Date: Fri Sep 4 16:30:25 2020 +0100
11
12 objtool: Rename frame.h -> objtool.h
13
14 Header frame.h is getting more code annotations to help objtool analyze
15 object files.
16
17 Rename the file to objtool.h.
18
19Upstream-Status: Backport
20
21Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
22Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
23Change-Id: Ic2283161bebcbf1e33b72805eb4d2628f4ae3e89
24---
25 lttng-filter-interpreter.c | 2 +-
26 wrapper/{frame.h => objtool.h} | 19 ++++++++++++-------
27 2 files changed, 13 insertions(+), 8 deletions(-)
28 rename wrapper/{frame.h => objtool.h} (50%)
29
30diff --git a/lttng-filter-interpreter.c b/lttng-filter-interpreter.c
31index 21169f01..5d572437 100644
32--- a/lttng-filter-interpreter.c
33+++ b/lttng-filter-interpreter.c
34@@ -8,7 +8,7 @@
35 */
36
37 #include <wrapper/uaccess.h>
38-#include <wrapper/frame.h>
39+#include <wrapper/objtool.h>
40 #include <wrapper/types.h>
41 #include <linux/swab.h>
42
43diff --git a/wrapper/frame.h b/wrapper/objtool.h
44similarity index 50%
45rename from wrapper/frame.h
46rename to wrapper/objtool.h
47index 6e6dc811..3b997cae 100644
48--- a/wrapper/frame.h
49+++ b/wrapper/objtool.h
50@@ -1,18 +1,23 @@
51-/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1)
52+/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
53 *
54- * wrapper/frame.h
55+ * wrapper/objtool.h
56 *
57 * Copyright (C) 2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
58 */
59
60-#ifndef _LTTNG_WRAPPER_FRAME_H
61-#define _LTTNG_WRAPPER_FRAME_H
62+#ifndef _LTTNG_WRAPPER_OBJTOOL_H
63+#define _LTTNG_WRAPPER_OBJTOOL_H
64
65 #include <linux/version.h>
66
67-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0))
68-
69+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0))
70+#include <linux/objtool.h>
71+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0))
72 #include <linux/frame.h>
73+#endif
74+
75+
76+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0))
77
78 #define LTTNG_STACK_FRAME_NON_STANDARD(func) \
79 STACK_FRAME_NON_STANDARD(func)
80@@ -23,4 +28,4 @@
81
82 #endif
83
84-#endif /* _LTTNG_WRAPPER_FRAME_H */
85+#endif /* _LTTNG_WRAPPER_OBJTOOL_H */
86--
872.19.1
88
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0007-fix-writeback-Drop-I_DIRTY_TIME_EXPIRE-v5.9.patch b/meta/recipes-kernel/lttng/lttng-modules/0007-fix-writeback-Drop-I_DIRTY_TIME_EXPIRE-v5.9.patch
deleted file mode 100644
index 2843c9cb62..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/0007-fix-writeback-Drop-I_DIRTY_TIME_EXPIRE-v5.9.patch
+++ /dev/null
@@ -1,59 +0,0 @@
1From eae02feb58064eee5ce15a9f6bdffd107c47da05 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Mon, 31 Aug 2020 11:41:38 -0400
4Subject: [PATCH 07/10] fix: writeback: Drop I_DIRTY_TIME_EXPIRE (v5.9)
5
6See upstream commit:
7
8 commit 5fcd57505c002efc5823a7355e21f48dd02d5a51
9 Author: Jan Kara <jack@suse.cz>
10 Date: Fri May 29 16:24:43 2020 +0200
11
12 writeback: Drop I_DIRTY_TIME_EXPIRE
13
14 The only use of I_DIRTY_TIME_EXPIRE is to detect in
15 __writeback_single_inode() that inode got there because flush worker
16 decided it's time to writeback the dirty inode time stamps (either
17 because we are syncing or because of age). However we can detect this
18 directly in __writeback_single_inode() and there's no need for the
19 strange propagation with I_DIRTY_TIME_EXPIRE flag.
20
21Upstream-Status: Backport
22
23Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
24Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
25Change-Id: I92e37c2ff3ec36d431e8f9de5c8e37c5a2da55ea
26---
27 instrumentation/events/lttng-module/writeback.h | 16 +++++++++++++++-
28 1 file changed, 15 insertions(+), 1 deletion(-)
29
30diff --git a/instrumentation/events/lttng-module/writeback.h b/instrumentation/events/lttng-module/writeback.h
31index affb4eb..ece67ad 100644
32--- a/instrumentation/events/lttng-module/writeback.h
33+++ b/instrumentation/events/lttng-module/writeback.h
34@@ -46,7 +46,21 @@ static inline struct backing_dev_info *lttng_inode_to_bdi(struct inode *inode)
35
36 #endif
37
38-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0))
39+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0))
40+#define show_inode_state(state) \
41+ __print_flags(state, "|", \
42+ {I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \
43+ {I_DIRTY_DATASYNC, "I_DIRTY_DATASYNC"}, \
44+ {I_DIRTY_PAGES, "I_DIRTY_PAGES"}, \
45+ {I_NEW, "I_NEW"}, \
46+ {I_WILL_FREE, "I_WILL_FREE"}, \
47+ {I_FREEING, "I_FREEING"}, \
48+ {I_CLEAR, "I_CLEAR"}, \
49+ {I_SYNC, "I_SYNC"}, \
50+ {I_DIRTY_TIME, "I_DIRTY_TIME"}, \
51+ {I_REFERENCED, "I_REFERENCED"} \
52+ )
53+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0))
54 #define show_inode_state(state) \
55 __print_flags(state, "|", \
56 {I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \
57--
582.19.1
59
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0008-fix-writeback-Fix-sync-livelock-due-to-b_dirty_time-.patch b/meta/recipes-kernel/lttng/lttng-modules/0008-fix-writeback-Fix-sync-livelock-due-to-b_dirty_time-.patch
deleted file mode 100644
index 7a0d9a38b8..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/0008-fix-writeback-Fix-sync-livelock-due-to-b_dirty_time-.patch
+++ /dev/null
@@ -1,117 +0,0 @@
1From 87b2affc3eb06f3fb2d0923f18af37713eb6814b Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Mon, 31 Aug 2020 14:16:01 -0400
4Subject: [PATCH 08/10] fix: writeback: Fix sync livelock due to b_dirty_time
5 processing (v5.9)
6
7See upstream commit:
8
9 commit f9cae926f35e8230330f28c7b743ad088611a8de
10 Author: Jan Kara <jack@suse.cz>
11 Date: Fri May 29 16:08:58 2020 +0200
12
13 writeback: Fix sync livelock due to b_dirty_time processing
14
15 When we are processing writeback for sync(2), move_expired_inodes()
16 didn't set any inode expiry value (older_than_this). This can result in
17 writeback never completing if there's steady stream of inodes added to
18 b_dirty_time list as writeback rechecks dirty lists after each writeback
19 round whether there's more work to be done. Fix the problem by using
20 sync(2) start time is inode expiry value when processing b_dirty_time
21 list similarly as for ordinarily dirtied inodes. This requires some
22 refactoring of older_than_this handling which simplifies the code
23 noticeably as a bonus.
24
25Upstream-Status: Backport
26
27Change-Id: I8b894b13ccc14d9b8983ee4c2810a927c319560b
28Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
29Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
30---
31 .../events/lttng-module/writeback.h | 39 ++++++++++++-------
32 1 file changed, 26 insertions(+), 13 deletions(-)
33
34diff --git a/instrumentation/events/lttng-module/writeback.h b/instrumentation/events/lttng-module/writeback.h
35index ece67ad..e9018dd 100644
36--- a/instrumentation/events/lttng-module/writeback.h
37+++ b/instrumentation/events/lttng-module/writeback.h
38@@ -384,34 +384,48 @@ LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_balance_dirty_wait, writeback_wbc_balanc
39 #endif
40 LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writepage, writeback_wbc_writepage)
41
42-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
43+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0))
44+LTTNG_TRACEPOINT_EVENT(writeback_queue_io,
45+ TP_PROTO(struct bdi_writeback *wb,
46+ struct wb_writeback_work *work,
47+ unsigned long dirtied_before,
48+ int moved),
49+ TP_ARGS(wb, work, dirtied_before, moved),
50+ TP_FIELDS(
51+ ctf_array_text(char, name, dev_name(wb->bdi->dev), 32)
52+ ctf_integer(unsigned long, older, dirtied_before)
53+ ctf_integer(int, moved, moved)
54+ )
55+)
56+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
57 LTTNG_TRACEPOINT_EVENT(writeback_queue_io,
58 TP_PROTO(struct bdi_writeback *wb,
59-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
60 struct wb_writeback_work *work,
61-#else
62- unsigned long *older_than_this,
63-#endif
64 int moved),
65-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
66 TP_ARGS(wb, work, moved),
67-#else
68+ TP_FIELDS(
69+ ctf_array_text(char, name, dev_name(wb->bdi->dev), 32)
70+ ctf_integer(int, moved, moved)
71+ )
72+)
73+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
74+LTTNG_TRACEPOINT_EVENT(writeback_queue_io,
75+ TP_PROTO(struct bdi_writeback *wb,
76+ unsigned long *older_than_this,
77+ int moved),
78 TP_ARGS(wb, older_than_this, moved),
79-#endif
80 TP_FIELDS(
81 ctf_array_text(char, name, dev_name(wb->bdi->dev), 32)
82-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
83-#else
84 ctf_integer(unsigned long, older,
85 older_than_this ? *older_than_this : 0)
86 ctf_integer(long, age,
87 older_than_this ?
88 (jiffies - *older_than_this) * 1000 / HZ
89 : -1)
90-#endif
91 ctf_integer(int, moved, moved)
92 )
93 )
94+#endif
95
96 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0))
97 LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state,
98@@ -460,7 +474,7 @@ LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state,
99 ctf_integer(unsigned long, dirty_limit, global_dirty_limit)
100 )
101 )
102-#else
103+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
104 LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state,
105
106 writeback_global_dirty_state,
107@@ -485,7 +499,6 @@ LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state,
108 )
109 )
110 #endif
111-#endif
112
113 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
114
115--
1162.19.1
117
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0009-fix-btrfs-make-ordered-extent-tracepoint-take-btrfs_.patch b/meta/recipes-kernel/lttng/lttng-modules/0009-fix-btrfs-make-ordered-extent-tracepoint-take-btrfs_.patch
new file mode 100644
index 0000000000..bc87c7174e
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0009-fix-btrfs-make-ordered-extent-tracepoint-take-btrfs_.patch
@@ -0,0 +1,179 @@
1From ddad4e82bc2cc48c0eb56d2daf69409026e8b31a Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Tue, 27 Oct 2020 12:10:05 -0400
4Subject: [PATCH 09/19] fix: btrfs: make ordered extent tracepoint take
5 btrfs_inode (v5.10)
6
7See upstream commit :
8
9 commit acbf1dd0fcbd10c67826a19958f55a053b32f532
10 Author: Nikolay Borisov <nborisov@suse.com>
11 Date: Mon Aug 31 14:42:40 2020 +0300
12
13 btrfs: make ordered extent tracepoint take btrfs_inode
14
15Upstream-Status: Backport
16
17Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
18Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
19Change-Id: I096d0801ffe0ad826cfe414cdd1c0857cbd2b624
20---
21 instrumentation/events/lttng-module/btrfs.h | 120 +++++++++++++++-----
22 1 file changed, 90 insertions(+), 30 deletions(-)
23
24diff --git a/instrumentation/events/lttng-module/btrfs.h b/instrumentation/events/lttng-module/btrfs.h
25index 52fcfd0d..d47f3280 100644
26--- a/instrumentation/events/lttng-module/btrfs.h
27+++ b/instrumentation/events/lttng-module/btrfs.h
28@@ -346,7 +346,29 @@ LTTNG_TRACEPOINT_EVENT(btrfs_handle_em_exist,
29 )
30 #endif
31
32-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0))
33+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0))
34+LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__ordered_extent,
35+
36+ TP_PROTO(const struct btrfs_inode *inode,
37+ const struct btrfs_ordered_extent *ordered),
38+
39+ TP_ARGS(inode, ordered),
40+
41+ TP_FIELDS(
42+ ctf_array(u8, fsid, inode->root->lttng_fs_info_fsid, BTRFS_UUID_SIZE)
43+ ctf_integer(ino_t, ino, btrfs_ino(inode))
44+ ctf_integer(u64, file_offset, ordered->file_offset)
45+ ctf_integer(u64, start, ordered->disk_bytenr)
46+ ctf_integer(u64, len, ordered->num_bytes)
47+ ctf_integer(u64, disk_len, ordered->disk_num_bytes)
48+ ctf_integer(u64, bytes_left, ordered->bytes_left)
49+ ctf_integer(unsigned long, flags, ordered->flags)
50+ ctf_integer(int, compress_type, ordered->compress_type)
51+ ctf_integer(int, refs, refcount_read(&ordered->refs))
52+ ctf_integer(u64, root_objectid, inode->root->root_key.objectid)
53+ )
54+)
55+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0))
56 LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__ordered_extent,
57
58 TP_PROTO(const struct inode *inode,
59@@ -458,7 +480,39 @@ LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__ordered_extent,
60 )
61 #endif
62
63-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \
64+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0))
65+LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_add,
66+
67+ TP_PROTO(const struct btrfs_inode *inode,
68+ const struct btrfs_ordered_extent *ordered),
69+
70+ TP_ARGS(inode, ordered)
71+)
72+
73+LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_remove,
74+
75+ TP_PROTO(const struct btrfs_inode *inode,
76+ const struct btrfs_ordered_extent *ordered),
77+
78+ TP_ARGS(inode, ordered)
79+)
80+
81+LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_start,
82+
83+ TP_PROTO(const struct btrfs_inode *inode,
84+ const struct btrfs_ordered_extent *ordered),
85+
86+ TP_ARGS(inode, ordered)
87+)
88+
89+LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_put,
90+
91+ TP_PROTO(const struct btrfs_inode *inode,
92+ const struct btrfs_ordered_extent *ordered),
93+
94+ TP_ARGS(inode, ordered)
95+)
96+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \
97 LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \
98 LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \
99 LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \
100@@ -494,7 +548,41 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_put,
101
102 TP_ARGS(inode, ordered)
103 )
104+#else
105+LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_add,
106+
107+ TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
108+
109+ TP_ARGS(inode, ordered)
110+)
111+
112+LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_remove,
113+
114+ TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
115+
116+ TP_ARGS(inode, ordered)
117+)
118+
119+LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_start,
120+
121+ TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
122+
123+ TP_ARGS(inode, ordered)
124+)
125
126+LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_put,
127+
128+ TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
129+
130+ TP_ARGS(inode, ordered)
131+)
132+#endif
133+
134+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,14,0) || \
135+ LTTNG_SLE_KERNEL_RANGE(4,4,73,5,0,0, 4,4,73,6,0,0) || \
136+ LTTNG_SLE_KERNEL_RANGE(4,4,82,6,0,0, 4,4,82,7,0,0) || \
137+ LTTNG_SLE_KERNEL_RANGE(4,4,92,6,0,0, 4,4,92,7,0,0) || \
138+ LTTNG_SLE_KERNEL_RANGE(4,4,103,6,0,0, 4,5,0,0,0,0))
139 LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__writepage,
140
141 TP_PROTO(const struct page *page, const struct inode *inode,
142@@ -563,34 +651,6 @@ LTTNG_TRACEPOINT_EVENT(btrfs_sync_file,
143 )
144 )
145 #else
146-LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_add,
147-
148- TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
149-
150- TP_ARGS(inode, ordered)
151-)
152-
153-LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_remove,
154-
155- TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
156-
157- TP_ARGS(inode, ordered)
158-)
159-
160-LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_start,
161-
162- TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
163-
164- TP_ARGS(inode, ordered)
165-)
166-
167-LTTNG_TRACEPOINT_EVENT_INSTANCE(btrfs__ordered_extent, btrfs_ordered_extent_put,
168-
169- TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
170-
171- TP_ARGS(inode, ordered)
172-)
173-
174 LTTNG_TRACEPOINT_EVENT_CLASS(btrfs__writepage,
175
176 TP_PROTO(struct page *page, struct inode *inode,
177--
1782.19.1
179
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0009-fix-version-ranges-for-ext4_discard_preallocations-a.patch b/meta/recipes-kernel/lttng/lttng-modules/0009-fix-version-ranges-for-ext4_discard_preallocations-a.patch
deleted file mode 100644
index 346e1d63ad..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/0009-fix-version-ranges-for-ext4_discard_preallocations-a.patch
+++ /dev/null
@@ -1,52 +0,0 @@
1From b74b25f349e92d7b5bdc8684e406d6a889f13773 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Fri, 4 Sep 2020 11:52:51 -0400
4Subject: [PATCH 09/10] fix: version ranges for ext4_discard_preallocations and
5 writeback_queue_io
6
7Upstream-Status: Backport
8
9Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
10Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
11Change-Id: Id4fa53cb2e713cbda651e1a75deed91013115592
12---
13 instrumentation/events/lttng-module/ext4.h | 3 ++-
14 instrumentation/events/lttng-module/writeback.h | 8 +++++++-
15 2 files changed, 9 insertions(+), 2 deletions(-)
16
17diff --git a/instrumentation/events/lttng-module/ext4.h b/instrumentation/events/lttng-module/ext4.h
18index 4476abb..b172c8d 100644
19--- a/instrumentation/events/lttng-module/ext4.h
20+++ b/instrumentation/events/lttng-module/ext4.h
21@@ -460,7 +460,8 @@ LTTNG_TRACEPOINT_EVENT(ext4_mb_release_group_pa,
22 )
23 #endif
24
25-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0))
26+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0) || \
27+ LTTNG_KERNEL_RANGE(5,8,6, 5,9,0))
28 LTTNG_TRACEPOINT_EVENT(ext4_discard_preallocations,
29 TP_PROTO(struct inode *inode, unsigned int len, unsigned int needed),
30
31diff --git a/instrumentation/events/lttng-module/writeback.h b/instrumentation/events/lttng-module/writeback.h
32index e9018dd..09637d7 100644
33--- a/instrumentation/events/lttng-module/writeback.h
34+++ b/instrumentation/events/lttng-module/writeback.h
35@@ -384,7 +384,13 @@ LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_balance_dirty_wait, writeback_wbc_balanc
36 #endif
37 LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writepage, writeback_wbc_writepage)
38
39-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0))
40+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0) || \
41+ LTTNG_KERNEL_RANGE(5,8,6, 5,9,0) || \
42+ LTTNG_KERNEL_RANGE(5,4,62, 5,5,0) || \
43+ LTTNG_KERNEL_RANGE(4,19,143, 4,20,0) || \
44+ LTTNG_KERNEL_RANGE(4,14,196, 4,15,0) || \
45+ LTTNG_KERNEL_RANGE(4,9,235, 4,10,0) || \
46+ LTTNG_KERNEL_RANGE(4,4,235, 4,5,0))
47 LTTNG_TRACEPOINT_EVENT(writeback_queue_io,
48 TP_PROTO(struct bdi_writeback *wb,
49 struct wb_writeback_work *work,
50--
512.19.1
52
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0010-Fix-system-call-filter-table.patch b/meta/recipes-kernel/lttng/lttng-modules/0010-Fix-system-call-filter-table.patch
deleted file mode 100644
index a16750ddb3..0000000000
--- a/meta/recipes-kernel/lttng/lttng-modules/0010-Fix-system-call-filter-table.patch
+++ /dev/null
@@ -1,918 +0,0 @@
1From ad594e3a953db1b0c3c059fde45b5a5494f6be78 Mon Sep 17 00:00:00 2001
2From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
3Date: Tue, 28 Jan 2020 16:02:44 -0500
4Subject: [PATCH 10/10] Fix: system call filter table
5
6The system call filter table has effectively been unused for a long
7time due to system call name prefix mismatch. This means the overhead of
8selective system call tracing was larger than it should have been because
9the event payload preparation would be done for all system calls as soon
10as a single system call is traced.
11
12However, fixing this underlying issue unearths several issues that crept
13unnoticed when the "enabler" concept was introduced (after the original
14implementation of the system call filter table).
15
16Here is a list of the issues which are resolved here:
17
18- Split lttng_syscalls_unregister into an unregister and destroy
19 function, thus awaiting for a grace period (and therefore quiescence
20 of the users) after unregistering the system call tracepoints before
21 freeing the system call filter data structures. This effectively fixes
22 a use-after-free.
23
24- The state for enabling "all" system calls vs enabling specific system
25 calls (and sequences of enable-disable) was incorrect with respect to
26 the "enablers" semantic. This is solved by always tracking the
27 bitmap of enabled system calls, and keeping this bitmap even when
28 enabling all system calls. The sc_filter is now always allocated
29 before system call tracing is registered to tracepoints, which means
30 it does not need to be RCU dereferenced anymore.
31
32Padding fields in the ABI are reserved to select whether to:
33
34- Trace either native or compat system call (or both, which is the
35 behavior currently implemented),
36- Trace either system call entry or exit (or both, which is the
37 behavior currently implemented),
38- Select the system call to trace by name (behavior currently
39 implemented) or by system call number,
40
41Upstream-Status: Backport
42
43Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
44---
45 lttng-abi.c | 43 ++++++
46 lttng-abi.h | 26 ++++
47 lttng-events.c | 112 +++++++++++++--
48 lttng-events.h | 31 ++++-
49 lttng-syscalls.c | 348 +++++++++++++++++++++++++----------------------
50 5 files changed, 380 insertions(+), 180 deletions(-)
51
52diff --git a/lttng-abi.c b/lttng-abi.c
53index 64ea99d..b33879d 100644
54--- a/lttng-abi.c
55+++ b/lttng-abi.c
56@@ -1264,6 +1264,46 @@ nomem:
57 return ret;
58 }
59
60+static
61+int lttng_abi_validate_event_param(struct lttng_kernel_event *event_param)
62+{
63+ /* Limit ABI to implemented features. */
64+ switch (event_param->instrumentation) {
65+ case LTTNG_KERNEL_SYSCALL:
66+ switch (event_param->u.syscall.entryexit) {
67+ case LTTNG_KERNEL_SYSCALL_ENTRYEXIT:
68+ break;
69+ default:
70+ return -EINVAL;
71+ }
72+ switch (event_param->u.syscall.abi) {
73+ case LTTNG_KERNEL_SYSCALL_ABI_ALL:
74+ break;
75+ default:
76+ return -EINVAL;
77+ }
78+ switch (event_param->u.syscall.match) {
79+ case LTTNG_SYSCALL_MATCH_NAME:
80+ break;
81+ default:
82+ return -EINVAL;
83+ }
84+ break;
85+
86+ case LTTNG_KERNEL_TRACEPOINT: /* Fallthrough */
87+ case LTTNG_KERNEL_KPROBE: /* Fallthrough */
88+ case LTTNG_KERNEL_KRETPROBE: /* Fallthrough */
89+ case LTTNG_KERNEL_NOOP: /* Fallthrough */
90+ case LTTNG_KERNEL_UPROBE:
91+ break;
92+
93+ case LTTNG_KERNEL_FUNCTION: /* Fallthrough */
94+ default:
95+ return -EINVAL;
96+ }
97+ return 0;
98+}
99+
100 static
101 int lttng_abi_create_event(struct file *channel_file,
102 struct lttng_kernel_event *event_param)
103@@ -1305,6 +1345,9 @@ int lttng_abi_create_event(struct file *channel_file,
104 ret = -EOVERFLOW;
105 goto refcount_error;
106 }
107+ ret = lttng_abi_validate_event_param(event_param);
108+ if (ret)
109+ goto event_error;
110 if (event_param->instrumentation == LTTNG_KERNEL_TRACEPOINT
111 || event_param->instrumentation == LTTNG_KERNEL_SYSCALL) {
112 struct lttng_enabler *enabler;
113diff --git a/lttng-abi.h b/lttng-abi.h
114index 1d356ab..51d60e5 100644
115--- a/lttng-abi.h
116+++ b/lttng-abi.h
117@@ -90,6 +90,31 @@ struct lttng_kernel_event_callsite {
118 } u;
119 } __attribute__((packed));
120
121+enum lttng_kernel_syscall_entryexit {
122+ LTTNG_KERNEL_SYSCALL_ENTRYEXIT = 0,
123+ LTTNG_KERNEL_SYSCALL_ENTRY = 1, /* Not implemented. */
124+ LTTNG_KERNEL_SYSCALL_EXIT = 2, /* Not implemented. */
125+};
126+
127+enum lttng_kernel_syscall_abi {
128+ LTTNG_KERNEL_SYSCALL_ABI_ALL = 0,
129+ LTTNG_KERNEL_SYSCALL_ABI_NATIVE = 1, /* Not implemented. */
130+ LTTNG_KERNEL_SYSCALL_ABI_COMPAT = 2, /* Not implemented. */
131+};
132+
133+enum lttng_kernel_syscall_match {
134+ LTTNG_SYSCALL_MATCH_NAME = 0,
135+ LTTNG_SYSCALL_MATCH_NR = 1, /* Not implemented. */
136+};
137+
138+struct lttng_kernel_syscall {
139+ uint8_t entryexit; /* enum lttng_kernel_syscall_entryexit */
140+ uint8_t abi; /* enum lttng_kernel_syscall_abi */
141+ uint8_t match; /* enum lttng_kernel_syscall_match */
142+ uint8_t padding;
143+ uint32_t nr; /* For LTTNG_SYSCALL_MATCH_NR */
144+} __attribute__((packed));
145+
146 /*
147 * For syscall tracing, name = "*" means "enable all".
148 */
149@@ -106,6 +131,7 @@ struct lttng_kernel_event {
150 struct lttng_kernel_kprobe kprobe;
151 struct lttng_kernel_function_tracer ftrace;
152 struct lttng_kernel_uprobe uprobe;
153+ struct lttng_kernel_syscall syscall;
154 char padding[LTTNG_KERNEL_EVENT_PADDING2];
155 } u;
156 } __attribute__((packed));
157diff --git a/lttng-events.c b/lttng-events.c
158index d719294..4c0b04a 100644
159--- a/lttng-events.c
160+++ b/lttng-events.c
161@@ -201,6 +201,10 @@ void lttng_session_destroy(struct lttng_session *session)
162 WARN_ON(ret);
163 }
164 synchronize_trace(); /* Wait for in-flight events to complete */
165+ list_for_each_entry(chan, &session->chan, list) {
166+ ret = lttng_syscalls_destroy(chan);
167+ WARN_ON(ret);
168+ }
169 list_for_each_entry_safe(enabler, tmpenabler,
170 &session->enablers_head, node)
171 lttng_enabler_destroy(enabler);
172@@ -740,6 +744,28 @@ struct lttng_event *_lttng_event_create(struct lttng_channel *chan,
173 event->enabled = 0;
174 event->registered = 0;
175 event->desc = event_desc;
176+ switch (event_param->u.syscall.entryexit) {
177+ case LTTNG_KERNEL_SYSCALL_ENTRYEXIT:
178+ ret = -EINVAL;
179+ goto register_error;
180+ case LTTNG_KERNEL_SYSCALL_ENTRY:
181+ event->u.syscall.entryexit = LTTNG_SYSCALL_ENTRY;
182+ break;
183+ case LTTNG_KERNEL_SYSCALL_EXIT:
184+ event->u.syscall.entryexit = LTTNG_SYSCALL_EXIT;
185+ break;
186+ }
187+ switch (event_param->u.syscall.abi) {
188+ case LTTNG_KERNEL_SYSCALL_ABI_ALL:
189+ ret = -EINVAL;
190+ goto register_error;
191+ case LTTNG_KERNEL_SYSCALL_ABI_NATIVE:
192+ event->u.syscall.abi = LTTNG_SYSCALL_ABI_NATIVE;
193+ break;
194+ case LTTNG_KERNEL_SYSCALL_ABI_COMPAT:
195+ event->u.syscall.abi = LTTNG_SYSCALL_ABI_COMPAT;
196+ break;
197+ }
198 if (!event->desc) {
199 ret = -EINVAL;
200 goto register_error;
201@@ -826,8 +852,7 @@ void register_event(struct lttng_event *event)
202 event);
203 break;
204 case LTTNG_KERNEL_SYSCALL:
205- ret = lttng_syscall_filter_enable(event->chan,
206- desc->name);
207+ ret = lttng_syscall_filter_enable(event->chan, event);
208 break;
209 case LTTNG_KERNEL_KPROBE:
210 case LTTNG_KERNEL_UPROBE:
211@@ -870,8 +895,7 @@ int _lttng_event_unregister(struct lttng_event *event)
212 ret = 0;
213 break;
214 case LTTNG_KERNEL_SYSCALL:
215- ret = lttng_syscall_filter_disable(event->chan,
216- desc->name);
217+ ret = lttng_syscall_filter_disable(event->chan, event);
218 break;
219 case LTTNG_KERNEL_NOOP:
220 ret = 0;
221@@ -1203,39 +1227,87 @@ int lttng_desc_match_enabler(const struct lttng_event_desc *desc,
222 struct lttng_enabler *enabler)
223 {
224 const char *desc_name, *enabler_name;
225+ bool compat = false, entry = false;
226
227 enabler_name = enabler->event_param.name;
228 switch (enabler->event_param.instrumentation) {
229 case LTTNG_KERNEL_TRACEPOINT:
230 desc_name = desc->name;
231+ switch (enabler->type) {
232+ case LTTNG_ENABLER_STAR_GLOB:
233+ return lttng_match_enabler_star_glob(desc_name, enabler_name);
234+ case LTTNG_ENABLER_NAME:
235+ return lttng_match_enabler_name(desc_name, enabler_name);
236+ default:
237+ return -EINVAL;
238+ }
239 break;
240 case LTTNG_KERNEL_SYSCALL:
241 desc_name = desc->name;
242- if (!strncmp(desc_name, "compat_", strlen("compat_")))
243+ if (!strncmp(desc_name, "compat_", strlen("compat_"))) {
244 desc_name += strlen("compat_");
245+ compat = true;
246+ }
247 if (!strncmp(desc_name, "syscall_exit_",
248 strlen("syscall_exit_"))) {
249 desc_name += strlen("syscall_exit_");
250 } else if (!strncmp(desc_name, "syscall_entry_",
251 strlen("syscall_entry_"))) {
252 desc_name += strlen("syscall_entry_");
253+ entry = true;
254 } else {
255 WARN_ON_ONCE(1);
256 return -EINVAL;
257 }
258+ switch (enabler->event_param.u.syscall.entryexit) {
259+ case LTTNG_KERNEL_SYSCALL_ENTRYEXIT:
260+ break;
261+ case LTTNG_KERNEL_SYSCALL_ENTRY:
262+ if (!entry)
263+ return 0;
264+ break;
265+ case LTTNG_KERNEL_SYSCALL_EXIT:
266+ if (entry)
267+ return 0;
268+ break;
269+ default:
270+ return -EINVAL;
271+ }
272+ switch (enabler->event_param.u.syscall.abi) {
273+ case LTTNG_KERNEL_SYSCALL_ABI_ALL:
274+ break;
275+ case LTTNG_KERNEL_SYSCALL_ABI_NATIVE:
276+ if (compat)
277+ return 0;
278+ break;
279+ case LTTNG_KERNEL_SYSCALL_ABI_COMPAT:
280+ if (!compat)
281+ return 0;
282+ break;
283+ default:
284+ return -EINVAL;
285+ }
286+ switch (enabler->event_param.u.syscall.match) {
287+ case LTTNG_SYSCALL_MATCH_NAME:
288+ switch (enabler->type) {
289+ case LTTNG_ENABLER_STAR_GLOB:
290+ return lttng_match_enabler_star_glob(desc_name, enabler_name);
291+ case LTTNG_ENABLER_NAME:
292+ return lttng_match_enabler_name(desc_name, enabler_name);
293+ default:
294+ return -EINVAL;
295+ }
296+ break;
297+ case LTTNG_SYSCALL_MATCH_NR:
298+ return -EINVAL; /* Not implemented. */
299+ default:
300+ return -EINVAL;
301+ }
302 break;
303 default:
304 WARN_ON_ONCE(1);
305 return -EINVAL;
306 }
307- switch (enabler->type) {
308- case LTTNG_ENABLER_STAR_GLOB:
309- return lttng_match_enabler_star_glob(desc_name, enabler_name);
310- case LTTNG_ENABLER_NAME:
311- return lttng_match_enabler_name(desc_name, enabler_name);
312- default:
313- return -EINVAL;
314- }
315 }
316
317 static
318@@ -1361,9 +1433,21 @@ void lttng_create_event_if_missing(struct lttng_enabler *enabler)
319 static
320 int lttng_enabler_ref_events(struct lttng_enabler *enabler)
321 {
322- struct lttng_session *session = enabler->chan->session;
323+ struct lttng_channel *chan = enabler->chan;
324+ struct lttng_session *session = chan->session;
325 struct lttng_event *event;
326
327+ if (enabler->event_param.instrumentation == LTTNG_KERNEL_SYSCALL &&
328+ enabler->event_param.u.syscall.entryexit == LTTNG_KERNEL_SYSCALL_ENTRYEXIT &&
329+ enabler->event_param.u.syscall.abi == LTTNG_KERNEL_SYSCALL_ABI_ALL &&
330+ enabler->event_param.u.syscall.match == LTTNG_SYSCALL_MATCH_NAME &&
331+ !strcmp(enabler->event_param.name, "*")) {
332+ if (enabler->enabled)
333+ WRITE_ONCE(chan->syscall_all, 1);
334+ else
335+ WRITE_ONCE(chan->syscall_all, 0);
336+ }
337+
338 /* First ensure that probe events are created for this enabler. */
339 lttng_create_event_if_missing(enabler);
340
341diff --git a/lttng-events.h b/lttng-events.h
342index a36a312..d4d9976 100644
343--- a/lttng-events.h
344+++ b/lttng-events.h
345@@ -292,6 +292,16 @@ struct lttng_uprobe_handler {
346 struct list_head node;
347 };
348
349+enum lttng_syscall_entryexit {
350+ LTTNG_SYSCALL_ENTRY,
351+ LTTNG_SYSCALL_EXIT,
352+};
353+
354+enum lttng_syscall_abi {
355+ LTTNG_SYSCALL_ABI_NATIVE,
356+ LTTNG_SYSCALL_ABI_COMPAT,
357+};
358+
359 /*
360 * lttng_event structure is referred to by the tracing fast path. It must be
361 * kept small.
362@@ -318,6 +328,11 @@ struct lttng_event {
363 struct inode *inode;
364 struct list_head head;
365 } uprobe;
366+ struct {
367+ char *syscall_name;
368+ enum lttng_syscall_entryexit entryexit;
369+ enum lttng_syscall_abi abi;
370+ } syscall;
371 } u;
372 struct list_head list; /* Event list in session */
373 unsigned int metadata_dumped:1;
374@@ -457,10 +472,10 @@ struct lttng_channel {
375 struct lttng_syscall_filter *sc_filter;
376 int header_type; /* 0: unset, 1: compact, 2: large */
377 enum channel_type channel_type;
378+ int syscall_all;
379 unsigned int metadata_dumped:1,
380 sys_enter_registered:1,
381 sys_exit_registered:1,
382- syscall_all:1,
383 tstate:1; /* Transient enable state */
384 };
385
386@@ -653,10 +668,11 @@ void lttng_clock_unref(void);
387 #if defined(CONFIG_HAVE_SYSCALL_TRACEPOINTS)
388 int lttng_syscalls_register(struct lttng_channel *chan, void *filter);
389 int lttng_syscalls_unregister(struct lttng_channel *chan);
390+int lttng_syscalls_destroy(struct lttng_channel *chan);
391 int lttng_syscall_filter_enable(struct lttng_channel *chan,
392- const char *name);
393+ struct lttng_event *event);
394 int lttng_syscall_filter_disable(struct lttng_channel *chan,
395- const char *name);
396+ struct lttng_event *event);
397 long lttng_channel_syscall_mask(struct lttng_channel *channel,
398 struct lttng_kernel_syscall_mask __user *usyscall_mask);
399 #else
400@@ -670,14 +686,19 @@ static inline int lttng_syscalls_unregister(struct lttng_channel *chan)
401 return 0;
402 }
403
404+static inline int lttng_syscalls_destroy(struct lttng_channel *chan)
405+{
406+ return 0;
407+}
408+
409 static inline int lttng_syscall_filter_enable(struct lttng_channel *chan,
410- const char *name)
411+ struct lttng_event *event);
412 {
413 return -ENOSYS;
414 }
415
416 static inline int lttng_syscall_filter_disable(struct lttng_channel *chan,
417- const char *name)
418+ struct lttng_event *event);
419 {
420 return -ENOSYS;
421 }
422diff --git a/lttng-syscalls.c b/lttng-syscalls.c
423index 97f1ba9..26cead6 100644
424--- a/lttng-syscalls.c
425+++ b/lttng-syscalls.c
426@@ -367,8 +367,10 @@ const struct trace_syscall_entry compat_sc_exit_table[] = {
427 #undef CREATE_SYSCALL_TABLE
428
429 struct lttng_syscall_filter {
430- DECLARE_BITMAP(sc, NR_syscalls);
431- DECLARE_BITMAP(sc_compat, NR_compat_syscalls);
432+ DECLARE_BITMAP(sc_entry, NR_syscalls);
433+ DECLARE_BITMAP(sc_exit, NR_syscalls);
434+ DECLARE_BITMAP(sc_compat_entry, NR_compat_syscalls);
435+ DECLARE_BITMAP(sc_compat_exit, NR_compat_syscalls);
436 };
437
438 static void syscall_entry_unknown(struct lttng_event *event,
439@@ -391,29 +393,23 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
440 size_t table_len;
441
442 if (unlikely(in_compat_syscall())) {
443- struct lttng_syscall_filter *filter;
444-
445- filter = lttng_rcu_dereference(chan->sc_filter);
446- if (filter) {
447- if (id < 0 || id >= NR_compat_syscalls
448- || !test_bit(id, filter->sc_compat)) {
449- /* System call filtered out. */
450- return;
451- }
452+ struct lttng_syscall_filter *filter = chan->sc_filter;
453+
454+ if (id < 0 || id >= NR_compat_syscalls
455+ || (!READ_ONCE(chan->syscall_all) && !test_bit(id, filter->sc_compat_entry))) {
456+ /* System call filtered out. */
457+ return;
458 }
459 table = compat_sc_table;
460 table_len = ARRAY_SIZE(compat_sc_table);
461 unknown_event = chan->sc_compat_unknown;
462 } else {
463- struct lttng_syscall_filter *filter;
464-
465- filter = lttng_rcu_dereference(chan->sc_filter);
466- if (filter) {
467- if (id < 0 || id >= NR_syscalls
468- || !test_bit(id, filter->sc)) {
469- /* System call filtered out. */
470- return;
471- }
472+ struct lttng_syscall_filter *filter = chan->sc_filter;
473+
474+ if (id < 0 || id >= NR_syscalls
475+ || (!READ_ONCE(chan->syscall_all) && !test_bit(id, filter->sc_entry))) {
476+ /* System call filtered out. */
477+ return;
478 }
479 table = sc_table;
480 table_len = ARRAY_SIZE(sc_table);
481@@ -545,29 +541,23 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret)
482
483 id = syscall_get_nr(current, regs);
484 if (unlikely(in_compat_syscall())) {
485- struct lttng_syscall_filter *filter;
486-
487- filter = lttng_rcu_dereference(chan->sc_filter);
488- if (filter) {
489- if (id < 0 || id >= NR_compat_syscalls
490- || !test_bit(id, filter->sc_compat)) {
491- /* System call filtered out. */
492- return;
493- }
494+ struct lttng_syscall_filter *filter = chan->sc_filter;
495+
496+ if (id < 0 || id >= NR_compat_syscalls
497+ || (!READ_ONCE(chan->syscall_all) && !test_bit(id, filter->sc_compat_exit))) {
498+ /* System call filtered out. */
499+ return;
500 }
501 table = compat_sc_exit_table;
502 table_len = ARRAY_SIZE(compat_sc_exit_table);
503 unknown_event = chan->compat_sc_exit_unknown;
504 } else {
505- struct lttng_syscall_filter *filter;
506-
507- filter = lttng_rcu_dereference(chan->sc_filter);
508- if (filter) {
509- if (id < 0 || id >= NR_syscalls
510- || !test_bit(id, filter->sc)) {
511- /* System call filtered out. */
512- return;
513- }
514+ struct lttng_syscall_filter *filter = chan->sc_filter;
515+
516+ if (id < 0 || id >= NR_syscalls
517+ || (!READ_ONCE(chan->syscall_all) && !test_bit(id, filter->sc_exit))) {
518+ /* System call filtered out. */
519+ return;
520 }
521 table = sc_exit_table;
522 table_len = ARRAY_SIZE(sc_exit_table);
523@@ -713,27 +703,23 @@ int fill_table(const struct trace_syscall_entry *table, size_t table_len,
524 memset(&ev, 0, sizeof(ev));
525 switch (type) {
526 case SC_TYPE_ENTRY:
527- strncpy(ev.name, SYSCALL_ENTRY_STR,
528- LTTNG_KERNEL_SYM_NAME_LEN);
529+ ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_ENTRY;
530+ ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_NATIVE;
531 break;
532 case SC_TYPE_EXIT:
533- strncpy(ev.name, SYSCALL_EXIT_STR,
534- LTTNG_KERNEL_SYM_NAME_LEN);
535+ ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_EXIT;
536+ ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_NATIVE;
537 break;
538 case SC_TYPE_COMPAT_ENTRY:
539- strncpy(ev.name, COMPAT_SYSCALL_ENTRY_STR,
540- LTTNG_KERNEL_SYM_NAME_LEN);
541+ ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_ENTRY;
542+ ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_COMPAT;
543 break;
544 case SC_TYPE_COMPAT_EXIT:
545- strncpy(ev.name, COMPAT_SYSCALL_EXIT_STR,
546- LTTNG_KERNEL_SYM_NAME_LEN);
547- break;
548- default:
549- BUG_ON(1);
550+ ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_EXIT;
551+ ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_COMPAT;
552 break;
553 }
554- strncat(ev.name, desc->name,
555- LTTNG_KERNEL_SYM_NAME_LEN - strlen(ev.name) - 1);
556+ strncpy(ev.name, desc->name, LTTNG_KERNEL_SYM_NAME_LEN);
557 ev.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0';
558 ev.instrumentation = LTTNG_KERNEL_SYSCALL;
559 chan_table[i] = _lttng_event_create(chan, &ev, filter,
560@@ -803,6 +789,8 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter)
561 strncpy(ev.name, desc->name, LTTNG_KERNEL_SYM_NAME_LEN);
562 ev.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0';
563 ev.instrumentation = LTTNG_KERNEL_SYSCALL;
564+ ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_ENTRY;
565+ ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_NATIVE;
566 chan->sc_unknown = _lttng_event_create(chan, &ev, filter,
567 desc,
568 ev.instrumentation);
569@@ -820,6 +808,8 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter)
570 strncpy(ev.name, desc->name, LTTNG_KERNEL_SYM_NAME_LEN);
571 ev.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0';
572 ev.instrumentation = LTTNG_KERNEL_SYSCALL;
573+ ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_ENTRY;
574+ ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_COMPAT;
575 chan->sc_compat_unknown = _lttng_event_create(chan, &ev, filter,
576 desc,
577 ev.instrumentation);
578@@ -837,6 +827,8 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter)
579 strncpy(ev.name, desc->name, LTTNG_KERNEL_SYM_NAME_LEN);
580 ev.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0';
581 ev.instrumentation = LTTNG_KERNEL_SYSCALL;
582+ ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_EXIT;
583+ ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_COMPAT;
584 chan->compat_sc_exit_unknown = _lttng_event_create(chan, &ev,
585 filter, desc,
586 ev.instrumentation);
587@@ -854,6 +846,8 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter)
588 strncpy(ev.name, desc->name, LTTNG_KERNEL_SYM_NAME_LEN);
589 ev.name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0';
590 ev.instrumentation = LTTNG_KERNEL_SYSCALL;
591+ ev.u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_EXIT;
592+ ev.u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_NATIVE;
593 chan->sc_exit_unknown = _lttng_event_create(chan, &ev, filter,
594 desc, ev.instrumentation);
595 WARN_ON_ONCE(!chan->sc_exit_unknown);
596@@ -883,6 +877,14 @@ int lttng_syscalls_register(struct lttng_channel *chan, void *filter)
597 if (ret)
598 return ret;
599 #endif
600+
601+ if (!chan->sc_filter) {
602+ chan->sc_filter = kzalloc(sizeof(struct lttng_syscall_filter),
603+ GFP_KERNEL);
604+ if (!chan->sc_filter)
605+ return -ENOMEM;
606+ }
607+
608 if (!chan->sys_enter_registered) {
609 ret = lttng_wrapper_tracepoint_probe_register("sys_enter",
610 (void *) syscall_entry_probe, chan);
611@@ -930,7 +932,11 @@ int lttng_syscalls_unregister(struct lttng_channel *chan)
612 return ret;
613 chan->sys_exit_registered = 0;
614 }
615- /* lttng_event destroy will be performed by lttng_session_destroy() */
616+ return 0;
617+}
618+
619+int lttng_syscalls_destroy(struct lttng_channel *chan)
620+{
621 kfree(chan->sc_table);
622 kfree(chan->sc_exit_table);
623 #ifdef CONFIG_COMPAT
624@@ -993,136 +999,150 @@ uint32_t get_sc_tables_len(void)
625 return ARRAY_SIZE(sc_table) + ARRAY_SIZE(compat_sc_table);
626 }
627
628-int lttng_syscall_filter_enable(struct lttng_channel *chan,
629- const char *name)
630+static
631+const char *get_syscall_name(struct lttng_event *event)
632 {
633- int syscall_nr, compat_syscall_nr, ret;
634- struct lttng_syscall_filter *filter;
635+ size_t prefix_len = 0;
636
637- WARN_ON_ONCE(!chan->sc_table);
638+ WARN_ON_ONCE(event->instrumentation != LTTNG_KERNEL_SYSCALL);
639
640- if (!name) {
641- /* Enable all system calls by removing filter */
642- if (chan->sc_filter) {
643- filter = chan->sc_filter;
644- rcu_assign_pointer(chan->sc_filter, NULL);
645- synchronize_trace();
646- kfree(filter);
647+ switch (event->u.syscall.entryexit) {
648+ case LTTNG_SYSCALL_ENTRY:
649+ switch (event->u.syscall.abi) {
650+ case LTTNG_SYSCALL_ABI_NATIVE:
651+ prefix_len = strlen(SYSCALL_ENTRY_STR);
652+ break;
653+ case LTTNG_SYSCALL_ABI_COMPAT:
654+ prefix_len = strlen(COMPAT_SYSCALL_ENTRY_STR);
655+ break;
656 }
657- chan->syscall_all = 1;
658- return 0;
659- }
660-
661- if (!chan->sc_filter) {
662- if (chan->syscall_all) {
663- /*
664- * All syscalls are already enabled.
665- */
666- return -EEXIST;
667+ break;
668+ case LTTNG_SYSCALL_EXIT:
669+ switch (event->u.syscall.abi) {
670+ case LTTNG_SYSCALL_ABI_NATIVE:
671+ prefix_len = strlen(SYSCALL_EXIT_STR);
672+ break;
673+ case LTTNG_SYSCALL_ABI_COMPAT:
674+ prefix_len = strlen(COMPAT_SYSCALL_EXIT_STR);
675+ break;
676 }
677- filter = kzalloc(sizeof(struct lttng_syscall_filter),
678- GFP_KERNEL);
679- if (!filter)
680- return -ENOMEM;
681- } else {
682- filter = chan->sc_filter;
683+ break;
684 }
685- syscall_nr = get_syscall_nr(name);
686- compat_syscall_nr = get_compat_syscall_nr(name);
687- if (syscall_nr < 0 && compat_syscall_nr < 0) {
688- ret = -ENOENT;
689- goto error;
690+ WARN_ON_ONCE(prefix_len == 0);
691+ return event->desc->name + prefix_len;
692+}
693+
694+int lttng_syscall_filter_enable(struct lttng_channel *chan,
695+ struct lttng_event *event)
696+{
697+ struct lttng_syscall_filter *filter = chan->sc_filter;
698+ const char *syscall_name;
699+ unsigned long *bitmap;
700+ int syscall_nr;
701+
702+ WARN_ON_ONCE(!chan->sc_table);
703+
704+ syscall_name = get_syscall_name(event);
705+
706+ switch (event->u.syscall.abi) {
707+ case LTTNG_SYSCALL_ABI_NATIVE:
708+ syscall_nr = get_syscall_nr(syscall_name);
709+ break;
710+ case LTTNG_SYSCALL_ABI_COMPAT:
711+ syscall_nr = get_compat_syscall_nr(syscall_name);
712+ break;
713+ default:
714+ return -EINVAL;
715 }
716- if (syscall_nr >= 0) {
717- if (test_bit(syscall_nr, filter->sc)) {
718- ret = -EEXIST;
719- goto error;
720+ if (syscall_nr < 0)
721+ return -ENOENT;
722+
723+
724+ switch (event->u.syscall.entryexit) {
725+ case LTTNG_SYSCALL_ENTRY:
726+ switch (event->u.syscall.abi) {
727+ case LTTNG_SYSCALL_ABI_NATIVE:
728+ bitmap = filter->sc_entry;
729+ break;
730+ case LTTNG_SYSCALL_ABI_COMPAT:
731+ bitmap = filter->sc_compat_entry;
732+ break;
733 }
734- bitmap_set(filter->sc, syscall_nr, 1);
735- }
736- if (compat_syscall_nr >= 0) {
737- if (test_bit(compat_syscall_nr, filter->sc_compat)) {
738- ret = -EEXIST;
739- goto error;
740+ break;
741+ case LTTNG_SYSCALL_EXIT:
742+ switch (event->u.syscall.abi) {
743+ case LTTNG_SYSCALL_ABI_NATIVE:
744+ bitmap = filter->sc_exit;
745+ break;
746+ case LTTNG_SYSCALL_ABI_COMPAT:
747+ bitmap = filter->sc_compat_exit;
748+ break;
749 }
750- bitmap_set(filter->sc_compat, compat_syscall_nr, 1);
751+ break;
752+ default:
753+ return -EINVAL;
754 }
755- if (!chan->sc_filter)
756- rcu_assign_pointer(chan->sc_filter, filter);
757+ if (test_bit(syscall_nr, bitmap))
758+ return -EEXIST;
759+ bitmap_set(bitmap, syscall_nr, 1);
760 return 0;
761-
762-error:
763- if (!chan->sc_filter)
764- kfree(filter);
765- return ret;
766 }
767
768 int lttng_syscall_filter_disable(struct lttng_channel *chan,
769- const char *name)
770+ struct lttng_event *event)
771 {
772- int syscall_nr, compat_syscall_nr, ret;
773- struct lttng_syscall_filter *filter;
774+ struct lttng_syscall_filter *filter = chan->sc_filter;
775+ const char *syscall_name;
776+ unsigned long *bitmap;
777+ int syscall_nr;
778
779 WARN_ON_ONCE(!chan->sc_table);
780
781- if (!chan->sc_filter) {
782- if (!chan->syscall_all)
783- return -EEXIST;
784- filter = kzalloc(sizeof(struct lttng_syscall_filter),
785- GFP_KERNEL);
786- if (!filter)
787- return -ENOMEM;
788- /* Trace all system calls, then apply disable. */
789- bitmap_set(filter->sc, 0, NR_syscalls);
790- bitmap_set(filter->sc_compat, 0, NR_compat_syscalls);
791- } else {
792- filter = chan->sc_filter;
793+ syscall_name = get_syscall_name(event);
794+
795+ switch (event->u.syscall.abi) {
796+ case LTTNG_SYSCALL_ABI_NATIVE:
797+ syscall_nr = get_syscall_nr(syscall_name);
798+ break;
799+ case LTTNG_SYSCALL_ABI_COMPAT:
800+ syscall_nr = get_compat_syscall_nr(syscall_name);
801+ break;
802+ default:
803+ return -EINVAL;
804 }
805+ if (syscall_nr < 0)
806+ return -ENOENT;
807
808- if (!name) {
809- /* Fail if all syscalls are already disabled. */
810- if (bitmap_empty(filter->sc, NR_syscalls)
811- && bitmap_empty(filter->sc_compat,
812- NR_compat_syscalls)) {
813- ret = -EEXIST;
814- goto error;
815- }
816
817- /* Disable all system calls */
818- bitmap_clear(filter->sc, 0, NR_syscalls);
819- bitmap_clear(filter->sc_compat, 0, NR_compat_syscalls);
820- goto apply_filter;
821- }
822- syscall_nr = get_syscall_nr(name);
823- compat_syscall_nr = get_compat_syscall_nr(name);
824- if (syscall_nr < 0 && compat_syscall_nr < 0) {
825- ret = -ENOENT;
826- goto error;
827- }
828- if (syscall_nr >= 0) {
829- if (!test_bit(syscall_nr, filter->sc)) {
830- ret = -EEXIST;
831- goto error;
832+ switch (event->u.syscall.entryexit) {
833+ case LTTNG_SYSCALL_ENTRY:
834+ switch (event->u.syscall.abi) {
835+ case LTTNG_SYSCALL_ABI_NATIVE:
836+ bitmap = filter->sc_entry;
837+ break;
838+ case LTTNG_SYSCALL_ABI_COMPAT:
839+ bitmap = filter->sc_compat_entry;
840+ break;
841 }
842- bitmap_clear(filter->sc, syscall_nr, 1);
843- }
844- if (compat_syscall_nr >= 0) {
845- if (!test_bit(compat_syscall_nr, filter->sc_compat)) {
846- ret = -EEXIST;
847- goto error;
848+ break;
849+ case LTTNG_SYSCALL_EXIT:
850+ switch (event->u.syscall.abi) {
851+ case LTTNG_SYSCALL_ABI_NATIVE:
852+ bitmap = filter->sc_exit;
853+ break;
854+ case LTTNG_SYSCALL_ABI_COMPAT:
855+ bitmap = filter->sc_compat_exit;
856+ break;
857 }
858- bitmap_clear(filter->sc_compat, compat_syscall_nr, 1);
859+ break;
860+ default:
861+ return -EINVAL;
862 }
863-apply_filter:
864- if (!chan->sc_filter)
865- rcu_assign_pointer(chan->sc_filter, filter);
866- chan->syscall_all = 0;
867- return 0;
868+ if (!test_bit(syscall_nr, bitmap))
869+ return -EEXIST;
870+ bitmap_clear(bitmap, syscall_nr, 1);
871
872-error:
873- if (!chan->sc_filter)
874- kfree(filter);
875- return ret;
876+ return 0;
877 }
878
879 static
880@@ -1236,6 +1256,9 @@ const struct file_operations lttng_syscall_list_fops = {
881 .release = seq_release,
882 };
883
884+/*
885+ * A syscall is enabled if it is traced for either entry or exit.
886+ */
887 long lttng_channel_syscall_mask(struct lttng_channel *channel,
888 struct lttng_kernel_syscall_mask __user *usyscall_mask)
889 {
890@@ -1262,8 +1285,9 @@ long lttng_channel_syscall_mask(struct lttng_channel *channel,
891 char state;
892
893 if (channel->sc_table) {
894- if (filter)
895- state = test_bit(bit, filter->sc);
896+ if (!READ_ONCE(channel->syscall_all) && filter)
897+ state = test_bit(bit, filter->sc_entry)
898+ || test_bit(bit, filter->sc_exit);
899 else
900 state = 1;
901 } else {
902@@ -1275,9 +1299,11 @@ long lttng_channel_syscall_mask(struct lttng_channel *channel,
903 char state;
904
905 if (channel->compat_sc_table) {
906- if (filter)
907+ if (!READ_ONCE(channel->syscall_all) && filter)
908 state = test_bit(bit - ARRAY_SIZE(sc_table),
909- filter->sc_compat);
910+ filter->sc_compat_entry)
911+ || test_bit(bit - ARRAY_SIZE(sc_table),
912+ filter->sc_compat_exit);
913 else
914 state = 1;
915 } else {
916--
9172.19.1
918
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0010-fix-ext4-fast-commit-recovery-path-v5.10.patch b/meta/recipes-kernel/lttng/lttng-modules/0010-fix-ext4-fast-commit-recovery-path-v5.10.patch
new file mode 100644
index 0000000000..fb00a44b31
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0010-fix-ext4-fast-commit-recovery-path-v5.10.patch
@@ -0,0 +1,99 @@
1From a28235f8ffa3c961640a835686dddb5ca600dfaf Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Mon, 26 Oct 2020 17:03:23 -0400
4Subject: [PATCH 10/19] fix: ext4: fast commit recovery path (v5.10)
5
6See upstream commit :
7
8 commit 8016e29f4362e285f0f7e38fadc61a5b7bdfdfa2
9 Author: Harshad Shirwadkar <harshadshirwadkar@gmail.com>
10 Date: Thu Oct 15 13:37:59 2020 -0700
11
12 ext4: fast commit recovery path
13
14 This patch adds fast commit recovery path support for Ext4 file
15 system. We add several helper functions that are similar in spirit to
16 e2fsprogs journal recovery path handlers. Example of such functions
17 include - a simple block allocator, idempotent block bitmap update
18 function etc. Using these routines and the fast commit log in the fast
19 commit area, the recovery path (ext4_fc_replay()) performs fast commit
20 log recovery.
21
22Upstream-Status: Backport
23
24Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
25Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
26Change-Id: Ia65cf44e108f2df0b458f0d335f33a8f18f50baa
27---
28 instrumentation/events/lttng-module/ext4.h | 41 ++++++++++++++++++++++
29 1 file changed, 41 insertions(+)
30
31diff --git a/instrumentation/events/lttng-module/ext4.h b/instrumentation/events/lttng-module/ext4.h
32index b172c8d9..6e74abad 100644
33--- a/instrumentation/events/lttng-module/ext4.h
34+++ b/instrumentation/events/lttng-module/ext4.h
35@@ -1274,6 +1274,18 @@ LTTNG_TRACEPOINT_EVENT(ext4_ext_load_extent,
36 )
37 )
38
39+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0))
40+LTTNG_TRACEPOINT_EVENT(ext4_load_inode,
41+ TP_PROTO(struct super_block *sb, unsigned long ino),
42+
43+ TP_ARGS(sb, ino),
44+
45+ TP_FIELDS(
46+ ctf_integer(dev_t, dev, sb->s_dev)
47+ ctf_integer(ino_t, ino, ino)
48+ )
49+)
50+#else
51 LTTNG_TRACEPOINT_EVENT(ext4_load_inode,
52 TP_PROTO(struct inode *inode),
53
54@@ -1284,6 +1296,7 @@ LTTNG_TRACEPOINT_EVENT(ext4_load_inode,
55 ctf_integer(ino_t, ino, inode->i_ino)
56 )
57 )
58+#endif
59
60 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0))
61
62@@ -1895,6 +1908,34 @@ LTTNG_TRACEPOINT_EVENT(ext4_es_shrink_exit,
63
64 #endif
65
66+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0))
67+LTTNG_TRACEPOINT_EVENT(ext4_fc_replay_scan,
68+ TP_PROTO(struct super_block *sb, int error, int off),
69+
70+ TP_ARGS(sb, error, off),
71+
72+ TP_FIELDS(
73+ ctf_integer(dev_t, dev, sb->s_dev)
74+ ctf_integer(int, error, error)
75+ ctf_integer(int, off, off)
76+ )
77+)
78+
79+LTTNG_TRACEPOINT_EVENT(ext4_fc_replay,
80+ TP_PROTO(struct super_block *sb, int tag, int ino, int priv1, int priv2),
81+
82+ TP_ARGS(sb, tag, ino, priv1, priv2),
83+
84+ TP_FIELDS(
85+ ctf_integer(dev_t, dev, sb->s_dev)
86+ ctf_integer(int, tag, tag)
87+ ctf_integer(int, ino, ino)
88+ ctf_integer(int, priv1, priv1)
89+ ctf_integer(int, priv2, priv2)
90+ )
91+)
92+#endif
93+
94 #endif /* LTTNG_TRACE_EXT4_H */
95
96 /* This part must be outside protection */
97--
982.19.1
99
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0012-fix-kvm-x86-mmu-Add-TDP-MMU-PF-handler-v5.10.patch b/meta/recipes-kernel/lttng/lttng-modules/0012-fix-kvm-x86-mmu-Add-TDP-MMU-PF-handler-v5.10.patch
new file mode 100644
index 0000000000..8651bded99
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0012-fix-kvm-x86-mmu-Add-TDP-MMU-PF-handler-v5.10.patch
@@ -0,0 +1,82 @@
1From e30866f96b3ab02639f429e4bd34e59b3a336579 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Mon, 26 Oct 2020 14:28:35 -0400
4Subject: [PATCH 12/19] fix: kvm: x86/mmu: Add TDP MMU PF handler (v5.10)
5
6See upstream commit :
7
8 commit bb18842e21111a979e2e0e1c5d85c09646f18d51
9 Author: Ben Gardon <bgardon@google.com>
10 Date: Wed Oct 14 11:26:50 2020 -0700
11
12 kvm: x86/mmu: Add TDP MMU PF handler
13
14 Add functions to handle page faults in the TDP MMU. These page faults
15 are currently handled in much the same way as the x86 shadow paging
16 based MMU, however the ordering of some operations is slightly
17 different. Future patches will add eager NX splitting, a fast page fault
18 handler, and parallel page faults.
19
20 Tested by running kvm-unit-tests and KVM selftests on an Intel Haswell
21 machine. This series introduced no new failures.
22
23Upstream-Status: Backport
24
25Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
26Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
27Change-Id: Ie56959cb6c77913d2f1188b0ca15da9114623a4e
28---
29 .../lttng-module/arch/x86/kvm/mmutrace.h | 20 ++++++++++++++++++-
30 probes/lttng-probe-kvm-x86-mmu.c | 5 +++++
31 2 files changed, 24 insertions(+), 1 deletion(-)
32
33diff --git a/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h b/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h
34index e5470400..86717835 100644
35--- a/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h
36+++ b/instrumentation/events/lttng-module/arch/x86/kvm/mmutrace.h
37@@ -163,7 +163,25 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(kvm_mmu_page_class, kvm_mmu_prepare_zap_page,
38 TP_ARGS(sp)
39 )
40
41-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0))
42+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0))
43+
44+LTTNG_TRACEPOINT_EVENT_MAP(
45+ mark_mmio_spte,
46+
47+ kvm_mmu_mark_mmio_spte,
48+
49+ TP_PROTO(u64 *sptep, gfn_t gfn, u64 spte),
50+ TP_ARGS(sptep, gfn, spte),
51+
52+ TP_FIELDS(
53+ ctf_integer_hex(void *, sptep, sptep)
54+ ctf_integer(gfn_t, gfn, gfn)
55+ ctf_integer(unsigned, access, spte & ACC_ALL)
56+ ctf_integer(unsigned int, gen, get_mmio_spte_generation(spte))
57+ )
58+)
59+
60+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0))
61
62 LTTNG_TRACEPOINT_EVENT_MAP(
63 mark_mmio_spte,
64diff --git a/probes/lttng-probe-kvm-x86-mmu.c b/probes/lttng-probe-kvm-x86-mmu.c
65index 8f981865..5043c776 100644
66--- a/probes/lttng-probe-kvm-x86-mmu.c
67+++ b/probes/lttng-probe-kvm-x86-mmu.c
68@@ -31,6 +31,11 @@
69 #include <../../arch/x86/kvm/mmutrace.h>
70 #endif
71
72+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,10,0))
73+#include <../arch/x86/kvm/mmu.h>
74+#include <../arch/x86/kvm/mmu/spte.h>
75+#endif
76+
77 #undef TRACE_INCLUDE_PATH
78 #undef TRACE_INCLUDE_FILE
79
80--
812.19.1
82
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 @@
1From bb346792c2cb6995ffc08d2084121935c6384865 Mon Sep 17 00:00:00 2001
2From: Michael Jeanson <mjeanson@efficios.com>
3Date: Mon, 26 Oct 2020 17:09:05 -0400
4Subject: [PATCH 14/19] fix: tracepoint: Optimize using static_call() (v5.10)
5
6See 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
24Upstream-Status: Backport
25
26Change-Id: I739dd84d62cc1a821b8bd8acff74fa29aa25d22f
27Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
28Signed-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
36diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c
37index 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 {
132diff --git a/probes/lttng.c b/probes/lttng.c
133index 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
157diff --git a/tests/probes/lttng-test.c b/tests/probes/lttng-test.c
158index 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
175diff --git a/wrapper/tracepoint.h b/wrapper/tracepoint.h
176index 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--
1952.19.1
196
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0016-fix-statedump-undefined-symbols-caused-by-incorrect-.patch b/meta/recipes-kernel/lttng/lttng-modules/0016-fix-statedump-undefined-symbols-caused-by-incorrect-.patch
new file mode 100644
index 0000000000..e848e16f59
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0016-fix-statedump-undefined-symbols-caused-by-incorrect-.patch
@@ -0,0 +1,55 @@
1From 31f8bf794172102e9758928b481856c4a8800a7f Mon Sep 17 00:00:00 2001
2From: He Zhe <zhe.he@windriver.com>
3Date: Mon, 23 Nov 2020 18:14:25 +0800
4Subject: [PATCH 16/19] fix: statedump: undefined symbols caused by incorrect
5 patch backport
6
7bb346792c2cb ("fix: tracepoint: Optimize using static_call() (v5.10)")
8misses three definitions and causes the following build failures.
9
10ERROR: "__tracepoint_lttng_statedump_process_net_ns" [lttng-statedump.ko] undefined!
11ERROR: "__tracepoint_lttng_statedump_process_user_ns" [lttng-statedump.ko] undefined!
12ERROR: "__tracepoint_lttng_statedump_process_uts_ns" [lttng-statedump.ko] undefined!
13
14Fixes: #1290
15
16Upstream-Status: Backport
17
18Signed-off-by: He Zhe <zhe.he@windriver.com>
19Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
20---
21 lttng-statedump-impl.c | 18 ++++++++++++++++++
22 1 file changed, 18 insertions(+)
23
24diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c
25index 67ecd33c..cf803a73 100644
26--- a/lttng-statedump-impl.c
27+++ b/lttng-statedump-impl.c
28@@ -116,6 +116,24 @@ LTTNG_DEFINE_TRACE(lttng_statedump_process_mnt_ns,
29 TP_ARGS(session, p, mnt_ns));
30 #endif
31
32+LTTNG_DEFINE_TRACE(lttng_statedump_process_net_ns,
33+ TP_PROTO(struct lttng_session *session,
34+ struct task_struct *p,
35+ struct net *net_ns),
36+ TP_ARGS(session, p, net_ns));
37+
38+LTTNG_DEFINE_TRACE(lttng_statedump_process_user_ns,
39+ TP_PROTO(struct lttng_session *session,
40+ struct task_struct *p,
41+ struct user_namespace *user_ns),
42+ TP_ARGS(session, p, user_ns));
43+
44+LTTNG_DEFINE_TRACE(lttng_statedump_process_uts_ns,
45+ TP_PROTO(struct lttng_session *session,
46+ struct task_struct *p,
47+ struct uts_namespace *uts_ns),
48+ TP_ARGS(session, p, uts_ns));
49+
50 LTTNG_DEFINE_TRACE(lttng_statedump_network_interface,
51 TP_PROTO(struct lttng_session *session,
52 struct net_device *dev, struct in_ifaddr *ifa),
53--
542.19.1
55