diff mbox series

[10/15] lttng-modules: fix build for v6.1+

Message ID f6cbf9be9c2661c2654264b7fa67e12c0bc4083a.1668810409.git.bruce.ashfield@gmail.com
State Accepted, archived
Commit 95851b5c64a632f224c89372d723a22728c7dc38
Headers show
Series [01/15] linux-yocto-dev: bump to v6.0+ | expand

Commit Message

Bruce Ashfield Nov. 18, 2022, 10:28 p.m. UTC
From: Bruce Ashfield <bruce.ashfield@gmail.com>

Backporting a patch from the lttng git repository to address
a build failure when the 6.1-dev kernel is used.

Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
---
 ...on-drop-kmem_alloc-avoid-dereferenci.patch | 278 ++++++++++++++++++
 .../lttng/lttng-modules_2.13.7.bb             |   1 +
 2 files changed, 279 insertions(+)
 create mode 100644 meta/recipes-kernel/lttng/lttng-modules/0001-fix-mm-slab_common-drop-kmem_alloc-avoid-dereferenci.patch
diff mbox series

Patch

diff --git a/meta/recipes-kernel/lttng/lttng-modules/0001-fix-mm-slab_common-drop-kmem_alloc-avoid-dereferenci.patch b/meta/recipes-kernel/lttng/lttng-modules/0001-fix-mm-slab_common-drop-kmem_alloc-avoid-dereferenci.patch
new file mode 100644
index 0000000000..99402ea5e9
--- /dev/null
+++ b/meta/recipes-kernel/lttng/lttng-modules/0001-fix-mm-slab_common-drop-kmem_alloc-avoid-dereferenci.patch
@@ -0,0 +1,278 @@ 
+From b977f96d0a414e76d4c544f65791919dde1bc57e Mon Sep 17 00:00:00 2001
+From: Michael Jeanson <mjeanson@efficios.com>
+Date: Mon, 17 Oct 2022 13:49:51 -0400
+Subject: [PATCH] fix: mm/slab_common: drop kmem_alloc & avoid dereferencing
+ fields when not using (v6.1)
+
+See uptream commit:
+
+  commit 2c1d697fb8ba6d2d44f914d4268ae1ccdf025f1b
+  Author: Hyeonggon Yoo <42.hyeyoo@gmail.com>
+  Date:   Wed Aug 17 19:18:24 2022 +0900
+
+    mm/slab_common: drop kmem_alloc & avoid dereferencing fields when not using
+
+    Drop kmem_alloc event class, and define kmalloc and kmem_cache_alloc
+    using TRACE_EVENT() macro.
+
+    And then this patch does:
+       - Do not pass pointer to struct kmem_cache to trace_kmalloc.
+         gfp flag is enough to know if it's accounted or not.
+       - Avoid dereferencing s->object_size and s->size when not using kmem_cache_alloc event.
+       - Avoid dereferencing s->name in when not using kmem_cache_free event.
+       - Adjust s->size to SLOB_UNITS(s->size) * SLOB_UNIT in SLOB
+
+Upstream-Status: Backport [commit b977f96d0a414e76d4c544f]
+
+Change-Id: Icd7925731ed4a737699c3746cb7bb7760a4e8009
+Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+---
+ include/instrumentation/events/kmem.h | 156 ++++++++++++++++++--------
+ 1 file changed, 111 insertions(+), 45 deletions(-)
+
+diff --git a/include/instrumentation/events/kmem.h b/include/instrumentation/events/kmem.h
+index 219533a1..0f5bd8e6 100644
+--- a/include/instrumentation/events/kmem.h
++++ b/include/instrumentation/events/kmem.h
+@@ -10,9 +10,58 @@
+ #include <lttng/kernel-version.h>
+ 
+ #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0))
+-
+ #include <../../mm/slab.h>
++#endif
++
++#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,1,0))
++LTTNG_TRACEPOINT_EVENT_MAP(kmalloc,
++
++	kmem_kmalloc,
++
++	TP_PROTO(unsigned long call_site,
++		 const void *ptr,
++		 size_t bytes_req,
++		 size_t bytes_alloc,
++		 gfp_t gfp_flags,
++		 int node),
++
++	TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node),
++
++	TP_FIELDS(
++		ctf_integer_hex(unsigned long, call_site, call_site)
++		ctf_integer_hex(const void *, ptr, ptr)
++		ctf_integer(size_t, bytes_req, bytes_req)
++		ctf_integer(size_t, bytes_alloc, bytes_alloc)
++		ctf_integer(gfp_t, gfp_flags, gfp_flags)
++		ctf_integer(int, node, node)
++		ctf_integer(bool, accounted, (IS_ENABLED(CONFIG_MEMCG_KMEM) &&
++			(gfp_flags & __GFP_ACCOUNT) ? true : false))
++	)
++)
++
++LTTNG_TRACEPOINT_EVENT(kmem_cache_alloc,
++
++	TP_PROTO(unsigned long call_site,
++		 const void *ptr,
++		 struct kmem_cache *s,
++		 gfp_t gfp_flags,
++		 int node),
++
++	TP_ARGS(call_site, ptr, s, gfp_flags, node),
+ 
++	TP_FIELDS(
++		ctf_integer_hex(unsigned long, call_site, call_site)
++		ctf_integer_hex(const void *, ptr, ptr)
++		ctf_integer(size_t, bytes_req, s->object_size)
++		ctf_integer(size_t, bytes_alloc, s->size)
++		ctf_integer(gfp_t, gfp_flags, gfp_flags)
++		ctf_integer(int, node, node)
++		ctf_integer(bool, accounted, IS_ENABLED(CONFIG_MEMCG_KMEM) ?
++			((gfp_flags & __GFP_ACCOUNT) ||
++			(s->flags & SLAB_ACCOUNT)) : false)
++	)
++)
++#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0))
+ LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc,
+ 
+ 	TP_PROTO(unsigned long call_site,
+@@ -53,18 +102,16 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc, kmem_cache_alloc,
+ 
+ 	TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags)
+ )
+-
+-LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node,
++#else
++LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc,
+ 
+ 	TP_PROTO(unsigned long call_site,
+ 		 const void *ptr,
+-		 struct kmem_cache *s,
+ 		 size_t bytes_req,
+ 		 size_t bytes_alloc,
+-		 gfp_t gfp_flags,
+-		 int node),
++		 gfp_t gfp_flags),
+ 
+-	TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node),
++	TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags),
+ 
+ 	TP_FIELDS(
+ 		ctf_integer_hex(unsigned long, call_site, call_site)
+@@ -72,42 +119,40 @@ LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node,
+ 		ctf_integer(size_t, bytes_req, bytes_req)
+ 		ctf_integer(size_t, bytes_alloc, bytes_alloc)
+ 		ctf_integer(gfp_t, gfp_flags, gfp_flags)
+-		ctf_integer(int, node, node)
+-		ctf_integer(bool, accounted, IS_ENABLED(CONFIG_MEMCG_KMEM) ?
+-			((gfp_flags & __GFP_ACCOUNT) ||
+-			(s && s->flags & SLAB_ACCOUNT)) : false)
+ 	)
+ )
+ 
+-LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node, kmalloc_node,
++LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc, kmalloc,
+ 
+-	kmem_kmalloc_node,
++	kmem_kmalloc,
+ 
+ 	TP_PROTO(unsigned long call_site, const void *ptr,
+-		 struct kmem_cache *s, size_t bytes_req, size_t bytes_alloc,
+-		 gfp_t gfp_flags, int node),
++		 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
+ 
+-	TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node)
++	TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)
+ )
+ 
+-LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node, kmem_cache_alloc_node,
++LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc, kmem_cache_alloc,
+ 
+ 	TP_PROTO(unsigned long call_site, const void *ptr,
+-		 struct kmem_cache *s, size_t bytes_req, size_t bytes_alloc,
+-		 gfp_t gfp_flags, int node),
++		 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
+ 
+-	TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node)
++	TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)
+ )
+-#else
+-LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc,
++#endif
++
++#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0))
++LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node,
+ 
+ 	TP_PROTO(unsigned long call_site,
+ 		 const void *ptr,
++		 struct kmem_cache *s,
+ 		 size_t bytes_req,
+ 		 size_t bytes_alloc,
+-		 gfp_t gfp_flags),
++		 gfp_t gfp_flags,
++		 int node),
+ 
+-	TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags),
++	TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node),
+ 
+ 	TP_FIELDS(
+ 		ctf_integer_hex(unsigned long, call_site, call_site)
+@@ -115,27 +160,33 @@ LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc,
+ 		ctf_integer(size_t, bytes_req, bytes_req)
+ 		ctf_integer(size_t, bytes_alloc, bytes_alloc)
+ 		ctf_integer(gfp_t, gfp_flags, gfp_flags)
++		ctf_integer(int, node, node)
++		ctf_integer(bool, accounted, IS_ENABLED(CONFIG_MEMCG_KMEM) ?
++			((gfp_flags & __GFP_ACCOUNT) ||
++			(s && s->flags & SLAB_ACCOUNT)) : false)
+ 	)
+ )
+ 
+-LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc, kmalloc,
++LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(kmem_alloc_node, kmalloc_node,
+ 
+-	kmem_kmalloc,
++	kmem_kmalloc_node,
+ 
+ 	TP_PROTO(unsigned long call_site, const void *ptr,
+-		 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
++		 struct kmem_cache *s, size_t bytes_req, size_t bytes_alloc,
++		 gfp_t gfp_flags, int node),
+ 
+-	TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)
++	TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node)
+ )
+ 
+-LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc, kmem_cache_alloc,
++LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_alloc_node, kmem_cache_alloc_node,
+ 
+ 	TP_PROTO(unsigned long call_site, const void *ptr,
+-		 size_t bytes_req, size_t bytes_alloc, gfp_t gfp_flags),
++		 struct kmem_cache *s, size_t bytes_req, size_t bytes_alloc,
++		 gfp_t gfp_flags, int node),
+ 
+-	TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)
++	TP_ARGS(call_site, ptr, s, bytes_req, bytes_alloc, gfp_flags, node)
+ )
+-
++#else
+ LTTNG_TRACEPOINT_EVENT_CLASS(kmem_alloc_node,
+ 
+ 	TP_PROTO(unsigned long call_site,
+@@ -192,19 +243,6 @@ LTTNG_TRACEPOINT_EVENT_MAP(kfree,
+ 		ctf_integer_hex(const void *, ptr, ptr)
+ 	)
+ )
+-
+-LTTNG_TRACEPOINT_EVENT(kmem_cache_free,
+-
+-	TP_PROTO(unsigned long call_site, const void *ptr, const char *name),
+-
+-	TP_ARGS(call_site, ptr, name),
+-
+-	TP_FIELDS(
+-		ctf_integer_hex(unsigned long, call_site, call_site)
+-		ctf_integer_hex(const void *, ptr, ptr)
+-		ctf_string(name, name)
+-	)
+-)
+ #else
+ LTTNG_TRACEPOINT_EVENT_CLASS(kmem_free,
+ 
+@@ -235,6 +273,34 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(kmem_free, kmem_cache_free,
+ )
+ #endif
+ 
++#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,1,0))
++LTTNG_TRACEPOINT_EVENT(kmem_cache_free,
++
++	TP_PROTO(unsigned long call_site, const void *ptr, const struct kmem_cache *s),
++
++	TP_ARGS(call_site, ptr, s),
++
++	TP_FIELDS(
++		ctf_integer_hex(unsigned long, call_site, call_site)
++		ctf_integer_hex(const void *, ptr, ptr)
++		ctf_string(name, s->name)
++	)
++)
++#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,12,0))
++LTTNG_TRACEPOINT_EVENT(kmem_cache_free,
++
++	TP_PROTO(unsigned long call_site, const void *ptr, const char *name),
++
++	TP_ARGS(call_site, ptr, name),
++
++	TP_FIELDS(
++		ctf_integer_hex(unsigned long, call_site, call_site)
++		ctf_integer_hex(const void *, ptr, ptr)
++		ctf_string(name, name)
++	)
++)
++#endif
++
+ #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,3,0))
+ LTTNG_TRACEPOINT_EVENT_MAP(mm_page_free, kmem_mm_page_free,
+ #else
+-- 
+2.19.1
+
diff --git a/meta/recipes-kernel/lttng/lttng-modules_2.13.7.bb b/meta/recipes-kernel/lttng/lttng-modules_2.13.7.bb
index 49c584dff4..d444f9ab0c 100644
--- a/meta/recipes-kernel/lttng/lttng-modules_2.13.7.bb
+++ b/meta/recipes-kernel/lttng/lttng-modules_2.13.7.bb
@@ -11,6 +11,7 @@  include lttng-platforms.inc
 
 SRC_URI = "https://lttng.org/files/${BPN}/${BPN}-${PV}.tar.bz2 \
            file://0009-Rename-genhd-wrapper-to-blkdev.patch \
+           file://0001-fix-mm-slab_common-drop-kmem_alloc-avoid-dereferenci.patch \ 
            "
 
 # Use :append here so that the patch is applied also when using devupstream