mirror of
https://git.yoctoproject.org/poky
synced 2026-02-13 12:13:02 +01:00
lttng-modules: fix compilation for 3.17-rcX
Updating the lttng-modules 2.5 recipe with backports from the master branch to enable builds on 3.17 based kernels. (From OE-Core rev: cc2ef9b0f6371837faa5e430c0b6c48bf24a8c4c) Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
e107239181
commit
73ef4032a9
@@ -0,0 +1,130 @@
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
|
||||
|
||||
From d3de7f1468be0b18145ff85b3c1a7c7fb1d48c15 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
||||
Date: Fri, 25 Jul 2014 12:30:43 -0400
|
||||
Subject: [PATCH 1/3] Fix: noargs probes should calculate alignment and event
|
||||
length
|
||||
|
||||
A noargs probe could have event fields. noargs just means that the probe
|
||||
does not receive any argument as parameter. However, it could very well
|
||||
serialize data into fields (global variables, constants, etc).
|
||||
|
||||
It just happens that LTTng does not serialize any data in noargs events
|
||||
at the moment, but this may very well change.
|
||||
|
||||
The if (0) with (void) variable access strategy to stop compiler from
|
||||
complaining from unused variables does not seem to work as expected with
|
||||
gcc 4.9.1. Use "unused" attribute instead.
|
||||
|
||||
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
||||
---
|
||||
probes/lttng-events.h | 49 +++++++++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 35 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/probes/lttng-events.h b/probes/lttng-events.h
|
||||
index 596b70608584..ba9563b15cf9 100644
|
||||
--- a/probes/lttng-events.h
|
||||
+++ b/probes/lttng-events.h
|
||||
@@ -456,10 +456,19 @@ static __used struct lttng_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = {
|
||||
static inline size_t __event_get_size__##_name(size_t *__dynamic_len, _proto) \
|
||||
{ \
|
||||
size_t __event_len = 0; \
|
||||
- unsigned int __dynamic_len_idx = 0; \
|
||||
+ unsigned int __dynamic_len_idx __attribute__((unused)) = 0; \
|
||||
+ \
|
||||
+ _tstruct \
|
||||
+ return __event_len; \
|
||||
+}
|
||||
+
|
||||
+#undef DECLARE_EVENT_CLASS_NOARGS
|
||||
+#define DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print) \
|
||||
+static inline size_t __event_get_size__##_name(size_t *__dynamic_len) \
|
||||
+{ \
|
||||
+ size_t __event_len = 0; \
|
||||
+ unsigned int __dynamic_len_idx __attribute__((unused)) = 0; \
|
||||
\
|
||||
- if (0) \
|
||||
- (void) __dynamic_len_idx; /* don't warn if unused */ \
|
||||
_tstruct \
|
||||
return __event_len; \
|
||||
}
|
||||
@@ -514,6 +523,15 @@ static inline size_t __event_get_align__##_name(_proto) \
|
||||
return __event_align; \
|
||||
}
|
||||
|
||||
+#undef DECLARE_EVENT_CLASS_NOARGS
|
||||
+#define DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print) \
|
||||
+static inline size_t __event_get_align__##_name(void) \
|
||||
+{ \
|
||||
+ size_t __event_align = 1; \
|
||||
+ _tstruct \
|
||||
+ return __event_align; \
|
||||
+}
|
||||
+
|
||||
#include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
|
||||
|
||||
|
||||
@@ -553,12 +571,16 @@ static inline size_t __event_get_align__##_name(_proto) \
|
||||
#undef TP_STRUCT__entry
|
||||
#define TP_STRUCT__entry(args...) args
|
||||
|
||||
-#undef DECLARE_EVENT_CLASS
|
||||
-#define DECLARE_EVENT_CLASS(_name, _proto, _args, _tstruct, _assign, _print) \
|
||||
+#undef DECLARE_EVENT_CLASS_NOARGS
|
||||
+#define DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print) \
|
||||
struct __event_typemap__##_name { \
|
||||
_tstruct \
|
||||
};
|
||||
|
||||
+#undef DECLARE_EVENT_CLASS
|
||||
+#define DECLARE_EVENT_CLASS(_name, _proto, _args, _tstruct, _assign, _print) \
|
||||
+ DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print)
|
||||
+
|
||||
#include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
|
||||
|
||||
|
||||
@@ -760,15 +782,11 @@ static void __event_probe__##_name(void *__data, _proto) \
|
||||
struct lttng_channel *__chan = __event->chan; \
|
||||
struct lib_ring_buffer_ctx __ctx; \
|
||||
size_t __event_len, __event_align; \
|
||||
- size_t __dynamic_len_idx = 0; \
|
||||
- size_t __dynamic_len[2 * ARRAY_SIZE(__event_fields___##_name)]; \
|
||||
- struct __event_typemap__##_name __typemap; \
|
||||
+ size_t __dynamic_len_idx __attribute__((unused)) = 0; \
|
||||
+ size_t __dynamic_len[2 * ARRAY_SIZE(__event_fields___##_name)] __attribute__((unused)); \
|
||||
+ struct __event_typemap__##_name __typemap __attribute__((unused)); \
|
||||
int __ret; \
|
||||
\
|
||||
- if (0) { \
|
||||
- (void) __dynamic_len_idx; /* don't warn if unused */ \
|
||||
- (void) __typemap; /* don't warn if unused */ \
|
||||
- } \
|
||||
if (!_TP_SESSION_CHECK(session, __chan->session)) \
|
||||
return; \
|
||||
if (unlikely(!ACCESS_ONCE(__chan->session->active))) \
|
||||
@@ -800,6 +818,9 @@ static void __event_probe__##_name(void *__data) \
|
||||
struct lttng_channel *__chan = __event->chan; \
|
||||
struct lib_ring_buffer_ctx __ctx; \
|
||||
size_t __event_len, __event_align; \
|
||||
+ size_t __dynamic_len_idx __attribute__((unused)) = 0; \
|
||||
+ size_t __dynamic_len[2 * ARRAY_SIZE(__event_fields___##_name)] __attribute__((unused)); \
|
||||
+ struct __event_typemap__##_name __typemap __attribute__((unused)); \
|
||||
int __ret; \
|
||||
\
|
||||
if (!_TP_SESSION_CHECK(session, __chan->session)) \
|
||||
@@ -810,8 +831,8 @@ static void __event_probe__##_name(void *__data) \
|
||||
return; \
|
||||
if (unlikely(!ACCESS_ONCE(__event->enabled))) \
|
||||
return; \
|
||||
- __event_len = 0; \
|
||||
- __event_align = 1; \
|
||||
+ __event_len = __event_get_size__##_name(__dynamic_len); \
|
||||
+ __event_align = __event_get_align__##_name(); \
|
||||
lib_ring_buffer_ctx_init(&__ctx, __chan->chan, __event, __event_len, \
|
||||
__event_align, -1); \
|
||||
__ret = __chan->ops->event_reserve(&__ctx, __event->id); \
|
||||
--
|
||||
1.8.1.2
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
|
||||
|
||||
From 458c2022e992c057bd21d02e4c77bcc7d4d6cd6c Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
||||
Date: Thu, 21 Aug 2014 11:15:50 -0400
|
||||
Subject: [PATCH 3/3] Update kvm instrumentation: compile on 3.17-rc1
|
||||
|
||||
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
||||
---
|
||||
instrumentation/events/lttng-module/arch/x86/kvm/trace.h | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/instrumentation/events/lttng-module/arch/x86/kvm/trace.h b/instrumentation/events/lttng-module/arch/x86/kvm/trace.h
|
||||
index 2354884074eb..3c299c58a1cf 100644
|
||||
--- a/instrumentation/events/lttng-module/arch/x86/kvm/trace.h
|
||||
+++ b/instrumentation/events/lttng-module/arch/x86/kvm/trace.h
|
||||
@@ -724,7 +724,7 @@ TRACE_EVENT(kvm_emulate_insn,
|
||||
tp_memcpy(insn,
|
||||
vcpu->arch.emulate_ctxt.decode.fetch.data,
|
||||
15)
|
||||
-#else
|
||||
+#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0))
|
||||
tp_assign(rip, vcpu->arch.emulate_ctxt.fetch.start)
|
||||
tp_assign(csbase, kvm_x86_ops->get_segment_base(vcpu, VCPU_SREG_CS))
|
||||
tp_assign(len, vcpu->arch.emulate_ctxt._eip
|
||||
@@ -732,6 +732,16 @@ TRACE_EVENT(kvm_emulate_insn,
|
||||
tp_memcpy(insn,
|
||||
vcpu->arch.emulate_ctxt.fetch.data,
|
||||
15)
|
||||
+#else
|
||||
+ tp_assign(rip, vcpu->arch.emulate_ctxt._eip -
|
||||
+ (vcpu->arch.emulate_ctxt.fetch.ptr -
|
||||
+ vcpu->arch.emulate_ctxt.fetch.data))
|
||||
+ tp_assign(csbase, kvm_x86_ops->get_segment_base(vcpu, VCPU_SREG_CS))
|
||||
+ tp_assign(len, vcpu->arch.emulate_ctxt.fetch.ptr -
|
||||
+ vcpu->arch.emulate_ctxt.fetch.data)
|
||||
+ tp_memcpy(insn,
|
||||
+ vcpu->arch.emulate_ctxt.fetch.data,
|
||||
+ 15)
|
||||
#endif
|
||||
tp_assign(flags, kei_decode_mode(vcpu->arch.emulate_ctxt.mode))
|
||||
tp_assign(failed, failed)
|
||||
--
|
||||
1.8.1.2
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
|
||||
|
||||
From 4ba1f53c5aebb4433fedc25d65af010274985043 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
||||
Date: Thu, 21 Aug 2014 10:53:12 -0400
|
||||
Subject: [PATCH 2/3] Update statedump to 3.17 nsproxy locking
|
||||
|
||||
This Linux upstream commit introduces locking strategy back and forth:
|
||||
|
||||
commit 728dba3a39c66b3d8ac889ddbe38b5b1c264aec3
|
||||
Author: Eric W. Biederman <ebiederm@xmission.com>
|
||||
Date: Mon Feb 3 19:13:49 2014 -0800
|
||||
|
||||
namespaces: Use task_lock and not rcu to protect nsproxy
|
||||
|
||||
Use the task lock starting from kernel 3.17 rather than RCU to access
|
||||
the task nsproxy.
|
||||
|
||||
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
||||
---
|
||||
lttng-statedump-impl.c | 15 +++++++++++++++
|
||||
1 file changed, 15 insertions(+)
|
||||
|
||||
diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c
|
||||
index dad51ddaa250..e4caa488e436 100644
|
||||
--- a/lttng-statedump-impl.c
|
||||
+++ b/lttng-statedump-impl.c
|
||||
@@ -378,6 +378,9 @@ int lttng_list_interrupts(struct lttng_session *session)
|
||||
}
|
||||
#endif
|
||||
|
||||
+/*
|
||||
+ * Called with task lock held.
|
||||
+ */
|
||||
static
|
||||
void lttng_statedump_process_ns(struct lttng_session *session,
|
||||
struct task_struct *p,
|
||||
@@ -389,8 +392,18 @@ void lttng_statedump_process_ns(struct lttng_session *session,
|
||||
struct nsproxy *proxy;
|
||||
struct pid_namespace *pid_ns;
|
||||
|
||||
+ /*
|
||||
+ * Back and forth on locking strategy within Linux upstream for nsproxy.
|
||||
+ * See Linux upstream commit 728dba3a39c66b3d8ac889ddbe38b5b1c264aec3
|
||||
+ * "namespaces: Use task_lock and not rcu to protect nsproxy"
|
||||
+ * for details.
|
||||
+ */
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0))
|
||||
rcu_read_lock();
|
||||
proxy = task_nsproxy(p);
|
||||
+#else /* #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0)) */
|
||||
+ proxy = p->nsproxy;
|
||||
+#endif /* #else #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0)) */
|
||||
if (proxy) {
|
||||
pid_ns = lttng_get_proxy_pid_ns(proxy);
|
||||
do {
|
||||
@@ -402,7 +415,9 @@ void lttng_statedump_process_ns(struct lttng_session *session,
|
||||
trace_lttng_statedump_process_state(session,
|
||||
p, type, mode, submode, status, NULL);
|
||||
}
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0))
|
||||
rcu_read_unlock();
|
||||
+#endif /* #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0)) */
|
||||
}
|
||||
|
||||
static
|
||||
--
|
||||
1.8.1.2
|
||||
|
||||
@@ -18,6 +18,9 @@ SRC_URI = "git://git.lttng.org/lttng-modules.git;branch=stable-2.5 \
|
||||
file://lttng-modules-replace-KERNELDIR-with-KERNEL_SRC.patch \
|
||||
file://Update-compaction-instrumentation-to-3.16-kernel.patch \
|
||||
file://Update-vmscan-instrumentation-to-3.16-kernel.patch \
|
||||
file://Fix-noargs-probes-should-calculate-alignment-and-eve.patch \
|
||||
file://Update-statedump-to-3.17-nsproxy-locking.patch \
|
||||
file://Update-kvm-instrumentation-compile-on-3.17-rc1.patch \
|
||||
"
|
||||
|
||||
export INSTALL_MOD_DIR="kernel/lttng-modules"
|
||||
|
||||
Reference in New Issue
Block a user