diff options
| author | Bruce Ashfield <bruce.ashfield@gmail.com> | 2025-08-13 16:49:20 -0400 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-08-14 10:31:11 +0100 |
| commit | ef6155e70fd0d630dfdec5667ca42bb88deb8f33 (patch) | |
| tree | 121061d66ebe51cb5e60b1ae95e280ecba639561 | |
| parent | 80b3439164824bcd3977c3ea32c27ade6f1656af (diff) | |
| download | poky-ef6155e70fd0d630dfdec5667ca42bb88deb8f33.tar.gz | |
lttng-modules: update to v2.14.0
As part of this update:
- drop one patch that is upstream now
- refresh one patch for new context
- backport two patches to fix the build against 6.16 (drop them in
2.14.1+
- update the license checksum, as the following change has been made
to the license:
commit 61baff6e8de2462f45006662bc34bcbf5f645ba0
Author: Michael Jeanson <mjeanson@efficios.com>
Date: Tue Jun 18 14:35:38 2024 -0400
Implement REUSE 3.0 with SPDX identifiers
Implement the full REUSE spec [1] to help with copyright and licensing
audits and compliance. This will reduce a lot of manual work for the
licensing audit required in Debian on each update and also allow using
automated tools.
For files that lacked copyright and licensing information, I used the
following guidelines. If a clear author could be determined from the git
history use it, otherwise use 'EfficiOS Inc.'. For code use
'GPL-2.0-only OR LGPL-2.1-only' unless otherwise stated, for
documentation 'CC-BY-SA-4.0' and for data files 'CC0-1.0'.
Freeform text files were converted to Markdown to allow licensing
comments.
Running the reuse tool on the repo is now succesful:
$ reuse lint
# SUMMARY
* Bad licenses: 0
* Deprecated licenses: 0
* Licenses without file extension: 0
* Missing licenses: 0
* Unused licenses: 0
* Used licenses: CC0-1.0, GPL-2.0-only, CC-BY-SA-4.0, MIT, LGPL-2.1-only
* Read errors: 0
* files with copyright information: 358 / 358
* files with license information: 358 / 358
Congratulations! Your project is compliant with version 3.0 of the REUSE Specification :-)
[1] https://reuse.software/tutorial/
Change-Id: I1755cab24a6fcec7a6c9a2136891418203ec34b8
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
(From OE-Core rev: 114bc08add61adfa72470767f583eeafeb51331c)
Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | meta/recipes-kernel/lttng/lttng-modules/0001-lttng-modules-fix-sigaction-build-without-CONFIG_COM.patch | 35 | ||||
| -rw-r--r-- | meta/recipes-kernel/lttng/lttng-modules/0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch | 18 | ||||
| -rw-r--r-- | meta/recipes-kernel/lttng/lttng-modules/0001-writeback-instrumentation-Add-missing-provider-name-.patch | 45 | ||||
| -rw-r--r-- | meta/recipes-kernel/lttng/lttng-modules/0002-fix-percpu-repurpose-__percpu-tag-as-a-named-address.patch | 438 | ||||
| -rw-r--r-- | meta/recipes-kernel/lttng/lttng-modules_2.14.0.bb (renamed from meta/recipes-kernel/lttng/lttng-modules_2.13.19.bb) | 8 |
5 files changed, 496 insertions, 48 deletions
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0001-lttng-modules-fix-sigaction-build-without-CONFIG_COM.patch b/meta/recipes-kernel/lttng/lttng-modules/0001-lttng-modules-fix-sigaction-build-without-CONFIG_COM.patch deleted file mode 100644 index eb43abbae2..0000000000 --- a/meta/recipes-kernel/lttng/lttng-modules/0001-lttng-modules-fix-sigaction-build-without-CONFIG_COM.patch +++ /dev/null | |||
| @@ -1,35 +0,0 @@ | |||
| 1 | From 0e2095bcc50e7a07d3478f8d3c0ae5ad46575594 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mikko Rapeli <mikko.rapeli@linaro.org> | ||
| 3 | Date: Mon, 28 Apr 2025 12:07:24 +0000 | ||
| 4 | Subject: [PATCH] lttng-modules: fix sigaction build without | ||
| 5 | CONFIG_COMPAT_OLD_SIGACTION | ||
| 6 | |||
| 7 | Workaround build failure when CONFIG_COMPAT_OLD_SIGACTION is not enabled | ||
| 8 | in kernel config. | ||
| 9 | |||
| 10 | Upstream-Status: Submitted [https://bugs.lttng.org/issues/1426] | ||
| 11 | |||
| 12 | Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org> | ||
| 13 | --- | ||
| 14 | .../instrumentation/syscalls/headers/arm-32-syscalls_pointers.h | 2 ++ | ||
| 15 | 1 file changed, 2 insertions(+) | ||
| 16 | |||
| 17 | diff --git a/include/instrumentation/syscalls/headers/arm-32-syscalls_pointers.h b/include/instrumentation/syscalls/headers/arm-32-syscalls_pointers.h | ||
| 18 | index 5f4ca5b..1514cae 100644 | ||
| 19 | --- a/include/instrumentation/syscalls/headers/arm-32-syscalls_pointers.h | ||
| 20 | +++ b/include/instrumentation/syscalls/headers/arm-32-syscalls_pointers.h | ||
| 21 | @@ -1890,9 +1890,11 @@ TRACE_SYSCALL_TABLE(chroot, chroot, 61, 1) | ||
| 22 | #ifndef OVERRIDE_TABLE_32_ustat | ||
| 23 | TRACE_SYSCALL_TABLE(ustat, ustat, 62, 2) | ||
| 24 | #endif | ||
| 25 | +#ifdef CONFIG_COMPAT_OLD_SIGACTION | ||
| 26 | #ifndef OVERRIDE_TABLE_32_sigaction | ||
| 27 | TRACE_SYSCALL_TABLE(sigaction, sigaction, 67, 3) | ||
| 28 | #endif | ||
| 29 | +#endif /* CONFIG_COMPAT_OLD_SIGACTION */ | ||
| 30 | #ifndef OVERRIDE_TABLE_32_sigpending | ||
| 31 | TRACE_SYSCALL_TABLE(sigpending, sigpending, 73, 1) | ||
| 32 | #endif | ||
| 33 | -- | ||
| 34 | 2.49.0 | ||
| 35 | |||
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch b/meta/recipes-kernel/lttng/lttng-modules/0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch index 4911982461..1854d9a944 100644 --- a/meta/recipes-kernel/lttng/lttng-modules/0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch +++ b/meta/recipes-kernel/lttng/lttng-modules/0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch | |||
| @@ -19,11 +19,11 @@ Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com> | |||
| 19 | src/Kbuild | 7 ++++++- | 19 | src/Kbuild | 7 ++++++- |
| 20 | 1 file changed, 6 insertions(+), 1 deletion(-) | 20 | 1 file changed, 6 insertions(+), 1 deletion(-) |
| 21 | 21 | ||
| 22 | diff --git a/src/Kbuild b/src/Kbuild | 22 | Index: lttng-modules-2.14.0/src/Kbuild |
| 23 | index 7137874..04eb5c9 100644 | 23 | =================================================================== |
| 24 | --- a/src/Kbuild | 24 | --- lttng-modules-2.14.0.orig/src/Kbuild |
| 25 | +++ b/src/Kbuild | 25 | +++ lttng-modules-2.14.0/src/Kbuild |
| 26 | @@ -2,10 +2,13 @@ | 26 | @@ -3,10 +3,13 @@ |
| 27 | 27 | ||
| 28 | ifdef CONFIG_LOCALVERSION # Check if dot-config is included. | 28 | ifdef CONFIG_LOCALVERSION # Check if dot-config is included. |
| 29 | ifeq ($(CONFIG_TRACEPOINTS),) | 29 | ifeq ($(CONFIG_TRACEPOINTS),) |
| @@ -38,9 +38,9 @@ index 7137874..04eb5c9 100644 | |||
| 38 | TOP_LTTNG_MODULES_DIR := $(shell dirname $(lastword $(MAKEFILE_LIST)))/.. | 38 | TOP_LTTNG_MODULES_DIR := $(shell dirname $(lastword $(MAKEFILE_LIST)))/.. |
| 39 | 39 | ||
| 40 | lttng_check_linux_version = $(shell pwd)/include/linux/version.h | 40 | lttng_check_linux_version = $(shell pwd)/include/linux/version.h |
| 41 | @@ -150,3 +153,5 @@ lttng-statedump-objs := lttng-statedump-impl.o | 41 | @@ -168,3 +171,5 @@ |
| 42 | obj-$(CONFIG_LTTNG) += probes/ | 42 | obj-$(CONFIG_LTTNG_SYSCALLS_EXTRACTOR) += lttng-syscalls-extractor.o |
| 43 | obj-$(CONFIG_LTTNG) += lib/ | 43 | |
| 44 | obj-$(CONFIG_LTTNG) += tests/ | 44 | # vim:syntax=make |
| 45 | + | 45 | + |
| 46 | +endif # DISABLE_MODULE | 46 | +endif # DISABLE_MODULE |
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0001-writeback-instrumentation-Add-missing-provider-name-.patch b/meta/recipes-kernel/lttng/lttng-modules/0001-writeback-instrumentation-Add-missing-provider-name-.patch new file mode 100644 index 0000000000..2afad7084b --- /dev/null +++ b/meta/recipes-kernel/lttng/lttng-modules/0001-writeback-instrumentation-Add-missing-provider-name-.patch | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | From 039dbff4ba95eca58f8ebbcf1640a46b482c24e0 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | ||
| 3 | Date: Fri, 4 Jul 2025 11:34:45 -0400 | ||
| 4 | Subject: [PATCH 1/2] writeback instrumentation: Add missing provider name | ||
| 5 | prefix | ||
| 6 | |||
| 7 | The events folio_wait_writeback and wait_on_page_writeback do not have | ||
| 8 | the writeback event name prefix mandated by the sanity check in | ||
| 9 | lttng_kernel_probe_register, which trigger a console warning. | ||
| 10 | |||
| 11 | Change those event names to provide the relevant provider name prefix. | ||
| 12 | |||
| 13 | Upstream-Status: Backport [commit 039dbff4] | ||
| 14 | |||
| 15 | Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | ||
| 16 | Change-Id: Ia069e2dac4a373170e059792a947cffb6c956cb2 | ||
| 17 | --- | ||
| 18 | include/instrumentation/events/writeback.h | 4 ++-- | ||
| 19 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
| 20 | |||
| 21 | diff --git a/include/instrumentation/events/writeback.h b/include/instrumentation/events/writeback.h | ||
| 22 | index d694e323..b9e26b5b 100644 | ||
| 23 | --- a/include/instrumentation/events/writeback.h | ||
| 24 | +++ b/include/instrumentation/events/writeback.h | ||
| 25 | @@ -122,7 +122,7 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_folio_template, writeback_dirty_folio, | ||
| 26 | TP_ARGS(folio, mapping) | ||
| 27 | ) | ||
| 28 | |||
| 29 | -LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_folio_template, folio_wait_writeback, | ||
| 30 | +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_folio_template, writeback_folio_wait, | ||
| 31 | |||
| 32 | TP_PROTO(struct folio *folio, struct address_space *mapping), | ||
| 33 | |||
| 34 | @@ -150,7 +150,7 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_page_template, writeback_dirty_page, | ||
| 35 | TP_ARGS(page, mapping) | ||
| 36 | ) | ||
| 37 | |||
| 38 | -LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_page_template, wait_on_page_writeback, | ||
| 39 | +LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_page_template, writeback_wait_on_page, | ||
| 40 | |||
| 41 | TP_PROTO(struct page *page, struct address_space *mapping), | ||
| 42 | |||
| 43 | -- | ||
| 44 | 2.39.2 | ||
| 45 | |||
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0002-fix-percpu-repurpose-__percpu-tag-as-a-named-address.patch b/meta/recipes-kernel/lttng/lttng-modules/0002-fix-percpu-repurpose-__percpu-tag-as-a-named-address.patch new file mode 100644 index 0000000000..26d16c2cb8 --- /dev/null +++ b/meta/recipes-kernel/lttng/lttng-modules/0002-fix-percpu-repurpose-__percpu-tag-as-a-named-address.patch | |||
| @@ -0,0 +1,438 @@ | |||
| 1 | From 243dbd5c83fd647144b4e6f4e6e01e9e59fe910f Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Michael Jeanson <mjeanson@efficios.com> | ||
| 3 | Date: Tue, 29 Jul 2025 15:34:23 -0400 | ||
| 4 | Subject: [PATCH 2/2] fix: percpu: repurpose __percpu tag as a named address | ||
| 5 | space qualifier (v6.15) | ||
| 6 | |||
| 7 | The '__percpu' annotation was repurposed as a named address space | ||
| 8 | qualifier, with compilers supporting 'typeof_unqual' like GCC 14 and | ||
| 9 | Clang 19 this is now enforced at build time. | ||
| 10 | |||
| 11 | See upstream commits: | ||
| 12 | |||
| 13 | commit 6cea5ae714ba47ea4807d15903baca9857a450e6 | ||
| 14 | Author: Uros Bizjak <ubizjak@gmail.com> | ||
| 15 | Date: Mon Jan 27 17:05:09 2025 +0100 | ||
| 16 | |||
| 17 | percpu: repurpose __percpu tag as a named address space qualifier | ||
| 18 | |||
| 19 | The patch introduces __percpu_qual define and repurposes __percpu tag as a | ||
| 20 | named address space qualifier using the new define. | ||
| 21 | |||
| 22 | Arches can now conditionally define __percpu_qual as their named address | ||
| 23 | space qualifier for percpu variables. | ||
| 24 | |||
| 25 | commit 6a367577153acd9b432a5340fb10891eeb7e10f1 | ||
| 26 | Author: Uros Bizjak <ubizjak@gmail.com> | ||
| 27 | Date: Mon Jan 27 17:05:10 2025 +0100 | ||
| 28 | |||
| 29 | percpu/x86: enable strict percpu checks via named AS qualifiers | ||
| 30 | |||
| 31 | This patch declares percpu variables in __seg_gs/__seg_fs named AS and | ||
| 32 | keeps them named AS qualified until they are dereferenced with percpu | ||
| 33 | accessor. This approach enables various compiler check for | ||
| 34 | cross-namespace variable assignments. | ||
| 35 | |||
| 36 | Upstream-Status: Backport [commit 243dbd5c] | ||
| 37 | |||
| 38 | Change-Id: Ib212cb4ef077da994867f0541921529dd4a799a0 | ||
| 39 | Signed-off-by: Michael Jeanson <mjeanson@efficios.com> | ||
| 40 | Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | ||
| 41 | --- | ||
| 42 | include/ringbuffer/backend_types.h | 5 ++- | ||
| 43 | include/ringbuffer/frontend_api.h | 4 +- | ||
| 44 | src/lib/ringbuffer/ring_buffer_backend.c | 30 +++++++------- | ||
| 45 | src/lib/ringbuffer/ring_buffer_frontend.c | 40 +++++++++---------- | ||
| 46 | src/lib/ringbuffer/ring_buffer_iterator.c | 8 ++-- | ||
| 47 | src/lttng-context-callstack.c | 2 +- | ||
| 48 | src/lttng-ring-buffer-event-notifier-client.h | 2 +- | ||
| 49 | src/lttng-ring-buffer-metadata-client.h | 2 +- | ||
| 50 | 8 files changed, 48 insertions(+), 45 deletions(-) | ||
| 51 | |||
| 52 | diff --git a/include/ringbuffer/backend_types.h b/include/ringbuffer/backend_types.h | ||
| 53 | index c23889ea..caafe4da 100644 | ||
| 54 | --- a/include/ringbuffer/backend_types.h | ||
| 55 | +++ b/include/ringbuffer/backend_types.h | ||
| 56 | @@ -79,7 +79,10 @@ struct channel_backend { | ||
| 57 | */ | ||
| 58 | unsigned int buf_size_order; /* Order of buffer size */ | ||
| 59 | unsigned int extra_reader_sb:1; /* has extra reader subbuffer ? */ | ||
| 60 | - struct lttng_kernel_ring_buffer *buf; /* Channel per-cpu buffers */ | ||
| 61 | + union { | ||
| 62 | + struct lttng_kernel_ring_buffer *global_buf; /* Channel global buffer */ | ||
| 63 | + struct lttng_kernel_ring_buffer __percpu *percpu_buf; /* Channel per-cpu buffers */ | ||
| 64 | + }; | ||
| 65 | |||
| 66 | unsigned long num_subbuf; /* Number of sub-buffers for writer */ | ||
| 67 | u64 start_timestamp; /* Channel creation timestamp value */ | ||
| 68 | diff --git a/include/ringbuffer/frontend_api.h b/include/ringbuffer/frontend_api.h | ||
| 69 | index e8d77d95..a0319c98 100644 | ||
| 70 | --- a/include/ringbuffer/frontend_api.h | ||
| 71 | +++ b/include/ringbuffer/frontend_api.h | ||
| 72 | @@ -153,9 +153,9 @@ int lib_ring_buffer_reserve(const struct lttng_kernel_ring_buffer_config *config | ||
| 73 | return -EAGAIN; | ||
| 74 | |||
| 75 | if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) | ||
| 76 | - buf = per_cpu_ptr(chan->backend.buf, ctx->priv.reserve_cpu); | ||
| 77 | + buf = per_cpu_ptr(chan->backend.percpu_buf, ctx->priv.reserve_cpu); | ||
| 78 | else | ||
| 79 | - buf = chan->backend.buf; | ||
| 80 | + buf = chan->backend.global_buf; | ||
| 81 | if (unlikely(atomic_read(&buf->record_disabled))) | ||
| 82 | return -EAGAIN; | ||
| 83 | ctx->priv.buf = buf; | ||
| 84 | diff --git a/src/lib/ringbuffer/ring_buffer_backend.c b/src/lib/ringbuffer/ring_buffer_backend.c | ||
| 85 | index 3eaa1b96..b5ecde4d 100644 | ||
| 86 | --- a/src/lib/ringbuffer/ring_buffer_backend.c | ||
| 87 | +++ b/src/lib/ringbuffer/ring_buffer_backend.c | ||
| 88 | @@ -279,7 +279,7 @@ int lttng_cpuhp_rb_backend_prepare(unsigned int cpu, | ||
| 89 | |||
| 90 | CHAN_WARN_ON(chanb, config->alloc == RING_BUFFER_ALLOC_PER_CHANNEL); | ||
| 91 | |||
| 92 | - buf = per_cpu_ptr(chanb->buf, cpu); | ||
| 93 | + buf = per_cpu_ptr(chanb->percpu_buf, cpu); | ||
| 94 | ret = lib_ring_buffer_create(buf, chanb, cpu); | ||
| 95 | if (ret) { | ||
| 96 | printk(KERN_ERR | ||
| 97 | @@ -320,7 +320,7 @@ int lib_ring_buffer_cpu_hp_callback(struct notifier_block *nb, | ||
| 98 | switch (action) { | ||
| 99 | case CPU_UP_PREPARE: | ||
| 100 | case CPU_UP_PREPARE_FROZEN: | ||
| 101 | - buf = per_cpu_ptr(chanb->buf, cpu); | ||
| 102 | + buf = per_cpu_ptr(chanb->percpu_buf, cpu); | ||
| 103 | ret = lib_ring_buffer_create(buf, chanb, cpu); | ||
| 104 | if (ret) { | ||
| 105 | printk(KERN_ERR | ||
| 106 | @@ -415,8 +415,8 @@ int channel_backend_init(struct channel_backend *chanb, | ||
| 107 | |||
| 108 | if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { | ||
| 109 | /* Allocating the buffer per-cpu structures */ | ||
| 110 | - chanb->buf = alloc_percpu(struct lttng_kernel_ring_buffer); | ||
| 111 | - if (!chanb->buf) | ||
| 112 | + chanb->percpu_buf = alloc_percpu(struct lttng_kernel_ring_buffer); | ||
| 113 | + if (!chanb->percpu_buf) | ||
| 114 | goto free_cpumask; | ||
| 115 | |||
| 116 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0)) | ||
| 117 | @@ -447,7 +447,7 @@ int channel_backend_init(struct channel_backend *chanb, | ||
| 118 | |||
| 119 | lttng_cpus_read_lock(); | ||
| 120 | for_each_online_cpu(i) { | ||
| 121 | - ret = lib_ring_buffer_create(per_cpu_ptr(chanb->buf, i), | ||
| 122 | + ret = lib_ring_buffer_create(per_cpu_ptr(chanb->percpu_buf, i), | ||
| 123 | chanb, i); | ||
| 124 | if (ret) | ||
| 125 | goto free_bufs; /* cpu hotplug locked */ | ||
| 126 | @@ -455,7 +455,7 @@ int channel_backend_init(struct channel_backend *chanb, | ||
| 127 | lttng_cpus_read_unlock(); | ||
| 128 | #else | ||
| 129 | for_each_possible_cpu(i) { | ||
| 130 | - ret = lib_ring_buffer_create(per_cpu_ptr(chanb->buf, i), | ||
| 131 | + ret = lib_ring_buffer_create(per_cpu_ptr(chanb->percpu_buf, i), | ||
| 132 | chanb, i); | ||
| 133 | if (ret) | ||
| 134 | goto free_bufs; | ||
| 135 | @@ -464,10 +464,10 @@ int channel_backend_init(struct channel_backend *chanb, | ||
| 136 | } | ||
| 137 | #endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0)) */ | ||
| 138 | } else { | ||
| 139 | - chanb->buf = kzalloc(sizeof(struct lttng_kernel_ring_buffer), GFP_KERNEL); | ||
| 140 | - if (!chanb->buf) | ||
| 141 | + chanb->global_buf = kzalloc(sizeof(struct lttng_kernel_ring_buffer), GFP_KERNEL); | ||
| 142 | + if (!chanb->global_buf) | ||
| 143 | goto free_cpumask; | ||
| 144 | - ret = lib_ring_buffer_create(chanb->buf, chanb, -1); | ||
| 145 | + ret = lib_ring_buffer_create(chanb->global_buf, chanb, -1); | ||
| 146 | if (ret) | ||
| 147 | goto free_bufs; | ||
| 148 | } | ||
| 149 | @@ -491,15 +491,15 @@ free_bufs: | ||
| 150 | #endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0)) */ | ||
| 151 | for_each_possible_cpu(i) { | ||
| 152 | struct lttng_kernel_ring_buffer *buf = | ||
| 153 | - per_cpu_ptr(chanb->buf, i); | ||
| 154 | + per_cpu_ptr(chanb->percpu_buf, i); | ||
| 155 | |||
| 156 | if (!buf->backend.allocated) | ||
| 157 | continue; | ||
| 158 | lib_ring_buffer_free(buf); | ||
| 159 | } | ||
| 160 | - free_percpu(chanb->buf); | ||
| 161 | + free_percpu(chanb->percpu_buf); | ||
| 162 | } else | ||
| 163 | - kfree(chanb->buf); | ||
| 164 | + kfree(chanb->global_buf); | ||
| 165 | free_cpumask: | ||
| 166 | if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) | ||
| 167 | free_cpumask_var(chanb->cpumask); | ||
| 168 | @@ -542,16 +542,16 @@ void channel_backend_free(struct channel_backend *chanb) | ||
| 169 | |||
| 170 | if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { | ||
| 171 | for_each_possible_cpu(i) { | ||
| 172 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chanb->buf, i); | ||
| 173 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chanb->percpu_buf, i); | ||
| 174 | |||
| 175 | if (!buf->backend.allocated) | ||
| 176 | continue; | ||
| 177 | lib_ring_buffer_free(buf); | ||
| 178 | } | ||
| 179 | free_cpumask_var(chanb->cpumask); | ||
| 180 | - free_percpu(chanb->buf); | ||
| 181 | + free_percpu(chanb->percpu_buf); | ||
| 182 | } else { | ||
| 183 | - struct lttng_kernel_ring_buffer *buf = chanb->buf; | ||
| 184 | + struct lttng_kernel_ring_buffer *buf = chanb->global_buf; | ||
| 185 | |||
| 186 | CHAN_WARN_ON(chanb, !buf->backend.allocated); | ||
| 187 | lib_ring_buffer_free(buf); | ||
| 188 | diff --git a/src/lib/ringbuffer/ring_buffer_frontend.c b/src/lib/ringbuffer/ring_buffer_frontend.c | ||
| 189 | index 1ed9dc47..f9def043 100644 | ||
| 190 | --- a/src/lib/ringbuffer/ring_buffer_frontend.c | ||
| 191 | +++ b/src/lib/ringbuffer/ring_buffer_frontend.c | ||
| 192 | @@ -505,7 +505,7 @@ int lttng_cpuhp_rb_frontend_dead(unsigned int cpu, | ||
| 193 | { | ||
| 194 | struct lttng_kernel_ring_buffer_channel *chan = container_of(node, struct lttng_kernel_ring_buffer_channel, | ||
| 195 | cpuhp_prepare); | ||
| 196 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); | ||
| 197 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, cpu); | ||
| 198 | const struct lttng_kernel_ring_buffer_config *config = &chan->backend.config; | ||
| 199 | |||
| 200 | CHAN_WARN_ON(chan, config->alloc == RING_BUFFER_ALLOC_PER_CHANNEL); | ||
| 201 | @@ -526,7 +526,7 @@ int lttng_cpuhp_rb_frontend_online(unsigned int cpu, | ||
| 202 | { | ||
| 203 | struct lttng_kernel_ring_buffer_channel *chan = container_of(node, struct lttng_kernel_ring_buffer_channel, | ||
| 204 | cpuhp_online); | ||
| 205 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); | ||
| 206 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, cpu); | ||
| 207 | const struct lttng_kernel_ring_buffer_config *config = &chan->backend.config; | ||
| 208 | |||
| 209 | CHAN_WARN_ON(chan, config->alloc == RING_BUFFER_ALLOC_PER_CHANNEL); | ||
| 210 | @@ -543,7 +543,7 @@ int lttng_cpuhp_rb_frontend_offline(unsigned int cpu, | ||
| 211 | { | ||
| 212 | struct lttng_kernel_ring_buffer_channel *chan = container_of(node, struct lttng_kernel_ring_buffer_channel, | ||
| 213 | cpuhp_online); | ||
| 214 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); | ||
| 215 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, cpu); | ||
| 216 | const struct lttng_kernel_ring_buffer_config *config = &chan->backend.config; | ||
| 217 | |||
| 218 | CHAN_WARN_ON(chan, config->alloc == RING_BUFFER_ALLOC_PER_CHANNEL); | ||
| 219 | @@ -574,7 +574,7 @@ int lib_ring_buffer_cpu_hp_callback(struct notifier_block *nb, | ||
| 220 | unsigned int cpu = (unsigned long)hcpu; | ||
| 221 | struct lttng_kernel_ring_buffer_channel *chan = container_of(nb, struct lttng_kernel_ring_buffer_channel, | ||
| 222 | cpu_hp_notifier); | ||
| 223 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); | ||
| 224 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, cpu); | ||
| 225 | const struct lttng_kernel_ring_buffer_config *config = &chan->backend.config; | ||
| 226 | |||
| 227 | if (!chan->cpu_hp_enable) | ||
| 228 | @@ -741,7 +741,7 @@ static void channel_unregister_notifiers(struct lttng_kernel_ring_buffer_channel | ||
| 229 | lttng_cpus_read_lock(); | ||
| 230 | chan->cpu_hp_enable = 0; | ||
| 231 | for_each_online_cpu(cpu) { | ||
| 232 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, | ||
| 233 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, | ||
| 234 | cpu); | ||
| 235 | lib_ring_buffer_stop_switch_timer(buf); | ||
| 236 | lib_ring_buffer_stop_read_timer(buf); | ||
| 237 | @@ -750,7 +750,7 @@ static void channel_unregister_notifiers(struct lttng_kernel_ring_buffer_channel | ||
| 238 | unregister_cpu_notifier(&chan->cpu_hp_notifier); | ||
| 239 | #else | ||
| 240 | for_each_possible_cpu(cpu) { | ||
| 241 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, | ||
| 242 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, | ||
| 243 | cpu); | ||
| 244 | lib_ring_buffer_stop_switch_timer(buf); | ||
| 245 | lib_ring_buffer_stop_read_timer(buf); | ||
| 246 | @@ -759,7 +759,7 @@ static void channel_unregister_notifiers(struct lttng_kernel_ring_buffer_channel | ||
| 247 | } | ||
| 248 | #endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,10,0)) */ | ||
| 249 | } else { | ||
| 250 | - struct lttng_kernel_ring_buffer *buf = chan->backend.buf; | ||
| 251 | + struct lttng_kernel_ring_buffer *buf = chan->backend.global_buf; | ||
| 252 | |||
| 253 | lib_ring_buffer_stop_switch_timer(buf); | ||
| 254 | lib_ring_buffer_stop_read_timer(buf); | ||
| 255 | @@ -788,14 +788,14 @@ void lib_ring_buffer_set_quiescent_channel(struct lttng_kernel_ring_buffer_chann | ||
| 256 | if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { | ||
| 257 | lttng_cpus_read_lock(); | ||
| 258 | for_each_channel_cpu(cpu, chan) { | ||
| 259 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, | ||
| 260 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, | ||
| 261 | cpu); | ||
| 262 | |||
| 263 | lib_ring_buffer_set_quiescent(buf); | ||
| 264 | } | ||
| 265 | lttng_cpus_read_unlock(); | ||
| 266 | } else { | ||
| 267 | - struct lttng_kernel_ring_buffer *buf = chan->backend.buf; | ||
| 268 | + struct lttng_kernel_ring_buffer *buf = chan->backend.global_buf; | ||
| 269 | |||
| 270 | lib_ring_buffer_set_quiescent(buf); | ||
| 271 | } | ||
| 272 | @@ -810,14 +810,14 @@ void lib_ring_buffer_clear_quiescent_channel(struct lttng_kernel_ring_buffer_cha | ||
| 273 | if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) { | ||
| 274 | lttng_cpus_read_lock(); | ||
| 275 | for_each_channel_cpu(cpu, chan) { | ||
| 276 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, | ||
| 277 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, | ||
| 278 | cpu); | ||
| 279 | |||
| 280 | lib_ring_buffer_clear_quiescent(buf); | ||
| 281 | } | ||
| 282 | lttng_cpus_read_unlock(); | ||
| 283 | } else { | ||
| 284 | - struct lttng_kernel_ring_buffer *buf = chan->backend.buf; | ||
| 285 | + struct lttng_kernel_ring_buffer *buf = chan->backend.global_buf; | ||
| 286 | |||
| 287 | lib_ring_buffer_clear_quiescent(buf); | ||
| 288 | } | ||
| 289 | @@ -915,7 +915,7 @@ struct lttng_kernel_ring_buffer_channel *channel_create(const struct lttng_kerne | ||
| 290 | |||
| 291 | lttng_cpus_read_lock(); | ||
| 292 | for_each_online_cpu(cpu) { | ||
| 293 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, | ||
| 294 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, | ||
| 295 | cpu); | ||
| 296 | spin_lock(&per_cpu(ring_buffer_nohz_lock, cpu)); | ||
| 297 | lib_ring_buffer_start_switch_timer(buf); | ||
| 298 | @@ -926,7 +926,7 @@ struct lttng_kernel_ring_buffer_channel *channel_create(const struct lttng_kerne | ||
| 299 | lttng_cpus_read_unlock(); | ||
| 300 | #else | ||
| 301 | for_each_possible_cpu(cpu) { | ||
| 302 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, | ||
| 303 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, | ||
| 304 | cpu); | ||
| 305 | spin_lock(&per_cpu(ring_buffer_nohz_lock, cpu)); | ||
| 306 | lib_ring_buffer_start_switch_timer(buf); | ||
| 307 | @@ -947,7 +947,7 @@ struct lttng_kernel_ring_buffer_channel *channel_create(const struct lttng_kerne | ||
| 308 | #endif /* defined(CONFIG_NO_HZ) && defined(CONFIG_LIB_RING_BUFFER) */ | ||
| 309 | |||
| 310 | } else { | ||
| 311 | - struct lttng_kernel_ring_buffer *buf = chan->backend.buf; | ||
| 312 | + struct lttng_kernel_ring_buffer *buf = chan->backend.global_buf; | ||
| 313 | |||
| 314 | lib_ring_buffer_start_switch_timer(buf); | ||
| 315 | lib_ring_buffer_start_read_timer(buf); | ||
| 316 | @@ -1004,7 +1004,7 @@ void *channel_destroy(struct lttng_kernel_ring_buffer_channel *chan) | ||
| 317 | * unregistered. | ||
| 318 | */ | ||
| 319 | for_each_channel_cpu(cpu, chan) { | ||
| 320 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, | ||
| 321 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, | ||
| 322 | cpu); | ||
| 323 | |||
| 324 | if (config->cb.buffer_finalize) | ||
| 325 | @@ -1019,7 +1019,7 @@ void *channel_destroy(struct lttng_kernel_ring_buffer_channel *chan) | ||
| 326 | wake_up_interruptible(&buf->read_wait); | ||
| 327 | } | ||
| 328 | } else { | ||
| 329 | - struct lttng_kernel_ring_buffer *buf = chan->backend.buf; | ||
| 330 | + struct lttng_kernel_ring_buffer *buf = chan->backend.global_buf; | ||
| 331 | |||
| 332 | if (config->cb.buffer_finalize) | ||
| 333 | config->cb.buffer_finalize(buf, chan->backend.priv, -1); | ||
| 334 | @@ -1044,9 +1044,9 @@ struct lttng_kernel_ring_buffer *channel_get_ring_buffer( | ||
| 335 | struct lttng_kernel_ring_buffer_channel *chan, int cpu) | ||
| 336 | { | ||
| 337 | if (config->alloc == RING_BUFFER_ALLOC_PER_CHANNEL) | ||
| 338 | - return chan->backend.buf; | ||
| 339 | + return chan->backend.global_buf; | ||
| 340 | else | ||
| 341 | - return per_cpu_ptr(chan->backend.buf, cpu); | ||
| 342 | + return per_cpu_ptr(chan->backend.percpu_buf, cpu); | ||
| 343 | } | ||
| 344 | EXPORT_SYMBOL_GPL(channel_get_ring_buffer); | ||
| 345 | |||
| 346 | @@ -2271,9 +2271,9 @@ static struct lttng_kernel_ring_buffer *get_current_buf(struct lttng_kernel_ring | ||
| 347 | const struct lttng_kernel_ring_buffer_config *config = &chan->backend.config; | ||
| 348 | |||
| 349 | if (config->alloc == RING_BUFFER_ALLOC_PER_CPU) | ||
| 350 | - return per_cpu_ptr(chan->backend.buf, cpu); | ||
| 351 | + return per_cpu_ptr(chan->backend.percpu_buf, cpu); | ||
| 352 | else | ||
| 353 | - return chan->backend.buf; | ||
| 354 | + return chan->backend.global_buf; | ||
| 355 | } | ||
| 356 | |||
| 357 | void lib_ring_buffer_lost_event_too_big(struct lttng_kernel_ring_buffer_channel *chan) | ||
| 358 | diff --git a/src/lib/ringbuffer/ring_buffer_iterator.c b/src/lib/ringbuffer/ring_buffer_iterator.c | ||
| 359 | index 88d79412..1a1db5e2 100644 | ||
| 360 | --- a/src/lib/ringbuffer/ring_buffer_iterator.c | ||
| 361 | +++ b/src/lib/ringbuffer/ring_buffer_iterator.c | ||
| 362 | @@ -361,7 +361,7 @@ int lttng_cpuhp_rb_iter_online(unsigned int cpu, | ||
| 363 | { | ||
| 364 | struct lttng_kernel_ring_buffer_channel *chan = container_of(node, struct lttng_kernel_ring_buffer_channel, | ||
| 365 | cpuhp_iter_online); | ||
| 366 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); | ||
| 367 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, cpu); | ||
| 368 | const struct lttng_kernel_ring_buffer_config *config = &chan->backend.config; | ||
| 369 | |||
| 370 | CHAN_WARN_ON(chan, config->alloc == RING_BUFFER_ALLOC_PER_CHANNEL); | ||
| 371 | @@ -382,7 +382,7 @@ int channel_iterator_cpu_hotplug(struct notifier_block *nb, | ||
| 372 | unsigned int cpu = (unsigned long)hcpu; | ||
| 373 | struct lttng_kernel_ring_buffer_channel *chan = container_of(nb, struct lttng_kernel_ring_buffer_channel, | ||
| 374 | hp_iter_notifier); | ||
| 375 | - struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.buf, cpu); | ||
| 376 | + struct lttng_kernel_ring_buffer *buf = per_cpu_ptr(chan->backend.percpu_buf, cpu); | ||
| 377 | const struct lttng_kernel_ring_buffer_config *config = &chan->backend.config; | ||
| 378 | |||
| 379 | if (!chan->hp_iter_enable) | ||
| 380 | @@ -443,14 +443,14 @@ int channel_iterator_init(struct lttng_kernel_ring_buffer_channel *chan) | ||
| 381 | |||
| 382 | lttng_cpus_read_lock(); | ||
| 383 | for_each_online_cpu(cpu) { | ||
| 384 | - buf = per_cpu_ptr(chan->backend.buf, cpu); | ||
| 385 | + buf = per_cpu_ptr(chan->backend.percpu_buf, cpu); | ||
| 386 | lib_ring_buffer_iterator_init(chan, buf); | ||
| 387 | } | ||
| 388 | chan->hp_iter_enable = 1; | ||
| 389 | lttng_cpus_read_unlock(); | ||
| 390 | #else | ||
| 391 | for_each_possible_cpu(cpu) { | ||
| 392 | - buf = per_cpu_ptr(chan->backend.buf, cpu); | ||
| 393 | + buf = per_cpu_ptr(chan->backend.percpu_buf, cpu); | ||
| 394 | lib_ring_buffer_iterator_init(chan, buf); | ||
| 395 | } | ||
| 396 | #endif | ||
| 397 | diff --git a/src/lttng-context-callstack.c b/src/lttng-context-callstack.c | ||
| 398 | index 4385472e..c5910718 100644 | ||
| 399 | --- a/src/lttng-context-callstack.c | ||
| 400 | +++ b/src/lttng-context-callstack.c | ||
| 401 | @@ -69,7 +69,7 @@ void field_data_free(struct field_data *fdata) | ||
| 402 | } | ||
| 403 | |||
| 404 | static | ||
| 405 | -struct field_data __percpu *field_data_create(enum lttng_cs_ctx_modes mode) | ||
| 406 | +struct field_data *field_data_create(enum lttng_cs_ctx_modes mode) | ||
| 407 | { | ||
| 408 | struct lttng_cs __percpu *cs_set; | ||
| 409 | struct field_data *fdata; | ||
| 410 | diff --git a/src/lttng-ring-buffer-event-notifier-client.h b/src/lttng-ring-buffer-event-notifier-client.h | ||
| 411 | index 95deab46..b4145914 100644 | ||
| 412 | --- a/src/lttng-ring-buffer-event-notifier-client.h | ||
| 413 | +++ b/src/lttng-ring-buffer-event-notifier-client.h | ||
| 414 | @@ -363,7 +363,7 @@ size_t lttng_packet_avail_size(struct lttng_kernel_ring_buffer_channel *chan) | ||
| 415 | unsigned long o_begin; | ||
| 416 | struct lttng_kernel_ring_buffer *buf; | ||
| 417 | |||
| 418 | - buf = chan->backend.buf; /* Only for global buffer ! */ | ||
| 419 | + buf = chan->backend.global_buf; /* Only for global buffer ! */ | ||
| 420 | o_begin = v_read(&client_config, &buf->offset); | ||
| 421 | if (subbuf_offset(o_begin, chan) != 0) { | ||
| 422 | return chan->backend.subbuf_size - subbuf_offset(o_begin, chan); | ||
| 423 | diff --git a/src/lttng-ring-buffer-metadata-client.h b/src/lttng-ring-buffer-metadata-client.h | ||
| 424 | index 99158451..9ef73266 100644 | ||
| 425 | --- a/src/lttng-ring-buffer-metadata-client.h | ||
| 426 | +++ b/src/lttng-ring-buffer-metadata-client.h | ||
| 427 | @@ -368,7 +368,7 @@ size_t lttng_packet_avail_size(struct lttng_kernel_ring_buffer_channel *chan) | ||
| 428 | unsigned long o_begin; | ||
| 429 | struct lttng_kernel_ring_buffer *buf; | ||
| 430 | |||
| 431 | - buf = chan->backend.buf; /* Only for global buffer ! */ | ||
| 432 | + buf = chan->backend.global_buf; /* Only for global buffer ! */ | ||
| 433 | o_begin = v_read(&client_config, &buf->offset); | ||
| 434 | if (subbuf_offset(o_begin, chan) != 0) { | ||
| 435 | return chan->backend.subbuf_size - subbuf_offset(o_begin, chan); | ||
| 436 | -- | ||
| 437 | 2.39.2 | ||
| 438 | |||
diff --git a/meta/recipes-kernel/lttng/lttng-modules_2.13.19.bb b/meta/recipes-kernel/lttng/lttng-modules_2.14.0.bb index 63ba488515..6bbe1c5a19 100644 --- a/meta/recipes-kernel/lttng/lttng-modules_2.13.19.bb +++ b/meta/recipes-kernel/lttng/lttng-modules_2.14.0.bb | |||
| @@ -3,21 +3,21 @@ SUMMARY = "Linux Trace Toolkit KERNEL MODULE" | |||
| 3 | DESCRIPTION = "The lttng-modules 2.0 package contains the kernel tracer modules" | 3 | DESCRIPTION = "The lttng-modules 2.0 package contains the kernel tracer modules" |
| 4 | HOMEPAGE = "https://lttng.org/" | 4 | HOMEPAGE = "https://lttng.org/" |
| 5 | LICENSE = "LGPL-2.1-only & GPL-2.0-only & MIT" | 5 | LICENSE = "LGPL-2.1-only & GPL-2.0-only & MIT" |
| 6 | LIC_FILES_CHKSUM = "file://LICENSE;md5=8d0d9f08888046474772a5d745d89d6a" | 6 | LIC_FILES_CHKSUM = "file://LICENSE;md5=018e002dbdda3306682e394ddd65fa32" |
| 7 | 7 | ||
| 8 | inherit module | 8 | inherit module |
| 9 | 9 | ||
| 10 | include lttng-platforms.inc | 10 | include lttng-platforms.inc |
| 11 | 11 | ||
| 12 | SRC_URI = "https://lttng.org/files/${BPN}/${BPN}-${PV}.tar.bz2 \ | 12 | SRC_URI = "https://lttng.org/files/${BPN}/${BPN}-${PV}.tar.bz2 \ |
| 13 | file://0001-lttng-modules-fix-sigaction-build-without-CONFIG_COM.patch \ | 13 | file://0001-writeback-instrumentation-Add-missing-provider-name-.patch \ |
| 14 | file://0002-fix-percpu-repurpose-__percpu-tag-as-a-named-address.patch \ | ||
| 14 | " | 15 | " |
| 15 | 16 | ||
| 16 | # Use :append here so that the patch is applied also when using devupstream | 17 | # Use :append here so that the patch is applied also when using devupstream |
| 17 | SRC_URI:append = " file://0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch \ | 18 | SRC_URI:append = " file://0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch \ |
| 18 | " | 19 | " |
| 19 | 20 | SRC_URI[sha256sum] = "f2261e738b1dd1027640e5ba3040dee292241b847d5745766b3ba640e168c94a" | |
| 20 | SRC_URI[sha256sum] = "06d704633749039f8fa72a954bec6486058386e2a0c3557b22c484698f9b34d5" | ||
| 21 | 21 | ||
| 22 | export INSTALL_MOD_DIR = "kernel/lttng-modules" | 22 | export INSTALL_MOD_DIR = "kernel/lttng-modules" |
| 23 | 23 | ||
