aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-kernel/lttng/lttng-modules/0001-Fix-handle-missing-ftrace-header-on-v4.12.patch
blob: 37c1f9af49cf0aff0ee44a1722dbc03829a6ee27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
From fea65d0c097a42cf163bf7035985a6da330b9a1f Mon Sep 17 00:00:00 2001
From: Michael Jeanson <mjeanson@efficios.com>
Date: Fri, 23 Jun 2017 14:29:42 -0400
Subject: [PATCH 1/8] Fix: handle missing ftrace header on v4.12
Organization: O.S. Systems Software LTDA.

Properly handle the case where we build against the distro headers of a
kernel >= 4.12 and ftrace is enabled but the private header is
unavailable.

Upstream-Status: Backport [2.9.4]

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
---
 Makefile.ABI.workarounds | 21 +++++++++++++++++++++
 lttng-events.h           |  2 +-
 probes/Kbuild            | 19 ++++---------------
 3 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/Makefile.ABI.workarounds b/Makefile.ABI.workarounds
index c3717f8..2e6c4aa 100644
--- a/Makefile.ABI.workarounds
+++ b/Makefile.ABI.workarounds
@@ -27,3 +27,24 @@ RT_PATCH_VERSION:=$(shell $(TOP_LTTNG_MODULES_DIR)/rt-patch-version.sh $(CURDIR)
 ifneq ($(RT_PATCH_VERSION), 0)
   ccflags-y += -DRT_PATCH_VERSION=$(RT_PATCH_VERSION)
 endif
+
+# Starting with kernel 4.12, the ftrace header was moved to private headers
+# and as such is not available when building against distro headers instead
+# of the full kernel sources. In the situation, define LTTNG_FTRACE_MISSING_HEADER
+# so we can enable the compat code even if CONFIG_DYNAMIC_FTRACE is enabled.
+ifneq ($(CONFIG_DYNAMIC_FTRACE),)
+  ftrace_dep = $(srctree)/kernel/trace/trace.h
+  ftrace_dep_check = $(wildcard $(ftrace_dep))
+  have_ftrace_header = $(shell \
+    if [ $(VERSION) -ge 5 -o \( $(VERSION) -eq 4 -a $(PATCHLEVEL) -ge 12 \) ] ; then \
+      if [ -z "$(ftrace_dep_check)" ] ; then \
+        echo "no" ; \
+        exit ; \
+      fi; \
+    fi; \
+    echo "yes" ; \
+    )
+  ifeq ($(have_ftrace_header), no)
+    ccflags-y += -DLTTNG_FTRACE_MISSING_HEADER
+  endif
+endif
diff --git a/lttng-events.h b/lttng-events.h
index 173f369..5a96bf3 100644
--- a/lttng-events.h
+++ b/lttng-events.h
@@ -810,7 +810,7 @@ int lttng_kretprobes_event_enable_state(struct lttng_event *event,
 }
 #endif
 
-#ifdef CONFIG_DYNAMIC_FTRACE
+#if defined(CONFIG_DYNAMIC_FTRACE) && !defined(LTTNG_FTRACE_MISSING_HEADER)
 int lttng_ftrace_register(const char *name,
 			  const char *symbol_name,
 			  struct lttng_event *event);
diff --git a/probes/Kbuild b/probes/Kbuild
index 78bf3fb..cc1c065 100644
--- a/probes/Kbuild
+++ b/probes/Kbuild
@@ -259,22 +259,11 @@ ifneq ($(CONFIG_KRETPROBES),)
 endif # CONFIG_KRETPROBES
 
 ifneq ($(CONFIG_DYNAMIC_FTRACE),)
-  ftrace_dep = $(srctree)/kernel/trace/trace.h
-  ftrace_dep_check = $(wildcard $(ftrace_dep))
-  ftrace = $(shell \
-    if [ $(VERSION) -ge 5 -o \( $(VERSION) -eq 4 -a $(PATCHLEVEL) -ge 12 \) ] ; then \
-      if [ -z "$(ftrace_dep_check)" ] ; then \
-        echo "warn" ; \
-        exit ; \
-      fi; \
-    fi; \
-    echo "lttng-ftrace.o" ; \
-    )
-  ifeq ($(ftrace),warn)
+  ifeq ($(have_ftrace_header),yes)
+    obj-$(CONFIG_LTTNG) += lttng-ftrace.o
+  else
     $(warning Files $(ftrace_dep) not found. Probe "ftrace" is disabled. Use full kernel source tree to enable it.)
-    ftrace =
-  endif # $(ftrace),warn
-  obj-$(CONFIG_LTTNG) += $(ftrace)
+  endif
 endif # CONFIG_DYNAMIC_FTRACE
 
 # vim:syntax=make
-- 
2.14.1