diff options
author | Tudor Florea <tudor.florea@enea.com> | 2015-10-09 22:59:03 +0200 |
---|---|---|
committer | Tudor Florea <tudor.florea@enea.com> | 2015-10-09 22:59:03 +0200 |
commit | 972dcfcdbfe75dcfeb777150c136576cf1a71e99 (patch) | |
tree | 97a61cd7e293d7ae9d56ef7ed0f81253365bb026 /meta/recipes-kernel/lttng/lttng-modules/Fix-noargs-probes-should-calculate-alignment-and-eve.patch | |
download | poky-972dcfcdbfe75dcfeb777150c136576cf1a71e99.tar.gz |
initial commit for Enea Linux 5.0 arm
Signed-off-by: Tudor Florea <tudor.florea@enea.com>
Diffstat (limited to 'meta/recipes-kernel/lttng/lttng-modules/Fix-noargs-probes-should-calculate-alignment-and-eve.patch')
-rw-r--r-- | meta/recipes-kernel/lttng/lttng-modules/Fix-noargs-probes-should-calculate-alignment-and-eve.patch | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/meta/recipes-kernel/lttng/lttng-modules/Fix-noargs-probes-should-calculate-alignment-and-eve.patch b/meta/recipes-kernel/lttng/lttng-modules/Fix-noargs-probes-should-calculate-alignment-and-eve.patch new file mode 100644 index 0000000000..9c3dc9c1e1 --- /dev/null +++ b/meta/recipes-kernel/lttng/lttng-modules/Fix-noargs-probes-should-calculate-alignment-and-eve.patch | |||
@@ -0,0 +1,130 @@ | |||
1 | Upstream-Status: Backport | ||
2 | Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> | ||
3 | |||
4 | From d3de7f1468be0b18145ff85b3c1a7c7fb1d48c15 Mon Sep 17 00:00:00 2001 | ||
5 | From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | ||
6 | Date: Fri, 25 Jul 2014 12:30:43 -0400 | ||
7 | Subject: [PATCH 1/3] Fix: noargs probes should calculate alignment and event | ||
8 | length | ||
9 | |||
10 | A noargs probe could have event fields. noargs just means that the probe | ||
11 | does not receive any argument as parameter. However, it could very well | ||
12 | serialize data into fields (global variables, constants, etc). | ||
13 | |||
14 | It just happens that LTTng does not serialize any data in noargs events | ||
15 | at the moment, but this may very well change. | ||
16 | |||
17 | The if (0) with (void) variable access strategy to stop compiler from | ||
18 | complaining from unused variables does not seem to work as expected with | ||
19 | gcc 4.9.1. Use "unused" attribute instead. | ||
20 | |||
21 | Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | ||
22 | --- | ||
23 | probes/lttng-events.h | 49 +++++++++++++++++++++++++++++++++++-------------- | ||
24 | 1 file changed, 35 insertions(+), 14 deletions(-) | ||
25 | |||
26 | diff --git a/probes/lttng-events.h b/probes/lttng-events.h | ||
27 | index 596b70608584..ba9563b15cf9 100644 | ||
28 | --- a/probes/lttng-events.h | ||
29 | +++ b/probes/lttng-events.h | ||
30 | @@ -456,10 +456,19 @@ static __used struct lttng_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = { | ||
31 | static inline size_t __event_get_size__##_name(size_t *__dynamic_len, _proto) \ | ||
32 | { \ | ||
33 | size_t __event_len = 0; \ | ||
34 | - unsigned int __dynamic_len_idx = 0; \ | ||
35 | + unsigned int __dynamic_len_idx __attribute__((unused)) = 0; \ | ||
36 | + \ | ||
37 | + _tstruct \ | ||
38 | + return __event_len; \ | ||
39 | +} | ||
40 | + | ||
41 | +#undef DECLARE_EVENT_CLASS_NOARGS | ||
42 | +#define DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print) \ | ||
43 | +static inline size_t __event_get_size__##_name(size_t *__dynamic_len) \ | ||
44 | +{ \ | ||
45 | + size_t __event_len = 0; \ | ||
46 | + unsigned int __dynamic_len_idx __attribute__((unused)) = 0; \ | ||
47 | \ | ||
48 | - if (0) \ | ||
49 | - (void) __dynamic_len_idx; /* don't warn if unused */ \ | ||
50 | _tstruct \ | ||
51 | return __event_len; \ | ||
52 | } | ||
53 | @@ -514,6 +523,15 @@ static inline size_t __event_get_align__##_name(_proto) \ | ||
54 | return __event_align; \ | ||
55 | } | ||
56 | |||
57 | +#undef DECLARE_EVENT_CLASS_NOARGS | ||
58 | +#define DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print) \ | ||
59 | +static inline size_t __event_get_align__##_name(void) \ | ||
60 | +{ \ | ||
61 | + size_t __event_align = 1; \ | ||
62 | + _tstruct \ | ||
63 | + return __event_align; \ | ||
64 | +} | ||
65 | + | ||
66 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | ||
67 | |||
68 | |||
69 | @@ -553,12 +571,16 @@ static inline size_t __event_get_align__##_name(_proto) \ | ||
70 | #undef TP_STRUCT__entry | ||
71 | #define TP_STRUCT__entry(args...) args | ||
72 | |||
73 | -#undef DECLARE_EVENT_CLASS | ||
74 | -#define DECLARE_EVENT_CLASS(_name, _proto, _args, _tstruct, _assign, _print) \ | ||
75 | +#undef DECLARE_EVENT_CLASS_NOARGS | ||
76 | +#define DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print) \ | ||
77 | struct __event_typemap__##_name { \ | ||
78 | _tstruct \ | ||
79 | }; | ||
80 | |||
81 | +#undef DECLARE_EVENT_CLASS | ||
82 | +#define DECLARE_EVENT_CLASS(_name, _proto, _args, _tstruct, _assign, _print) \ | ||
83 | + DECLARE_EVENT_CLASS_NOARGS(_name, _tstruct, _assign, _print) | ||
84 | + | ||
85 | #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) | ||
86 | |||
87 | |||
88 | @@ -760,15 +782,11 @@ static void __event_probe__##_name(void *__data, _proto) \ | ||
89 | struct lttng_channel *__chan = __event->chan; \ | ||
90 | struct lib_ring_buffer_ctx __ctx; \ | ||
91 | size_t __event_len, __event_align; \ | ||
92 | - size_t __dynamic_len_idx = 0; \ | ||
93 | - size_t __dynamic_len[2 * ARRAY_SIZE(__event_fields___##_name)]; \ | ||
94 | - struct __event_typemap__##_name __typemap; \ | ||
95 | + size_t __dynamic_len_idx __attribute__((unused)) = 0; \ | ||
96 | + size_t __dynamic_len[2 * ARRAY_SIZE(__event_fields___##_name)] __attribute__((unused)); \ | ||
97 | + struct __event_typemap__##_name __typemap __attribute__((unused)); \ | ||
98 | int __ret; \ | ||
99 | \ | ||
100 | - if (0) { \ | ||
101 | - (void) __dynamic_len_idx; /* don't warn if unused */ \ | ||
102 | - (void) __typemap; /* don't warn if unused */ \ | ||
103 | - } \ | ||
104 | if (!_TP_SESSION_CHECK(session, __chan->session)) \ | ||
105 | return; \ | ||
106 | if (unlikely(!ACCESS_ONCE(__chan->session->active))) \ | ||
107 | @@ -800,6 +818,9 @@ static void __event_probe__##_name(void *__data) \ | ||
108 | struct lttng_channel *__chan = __event->chan; \ | ||
109 | struct lib_ring_buffer_ctx __ctx; \ | ||
110 | size_t __event_len, __event_align; \ | ||
111 | + size_t __dynamic_len_idx __attribute__((unused)) = 0; \ | ||
112 | + size_t __dynamic_len[2 * ARRAY_SIZE(__event_fields___##_name)] __attribute__((unused)); \ | ||
113 | + struct __event_typemap__##_name __typemap __attribute__((unused)); \ | ||
114 | int __ret; \ | ||
115 | \ | ||
116 | if (!_TP_SESSION_CHECK(session, __chan->session)) \ | ||
117 | @@ -810,8 +831,8 @@ static void __event_probe__##_name(void *__data) \ | ||
118 | return; \ | ||
119 | if (unlikely(!ACCESS_ONCE(__event->enabled))) \ | ||
120 | return; \ | ||
121 | - __event_len = 0; \ | ||
122 | - __event_align = 1; \ | ||
123 | + __event_len = __event_get_size__##_name(__dynamic_len); \ | ||
124 | + __event_align = __event_get_align__##_name(); \ | ||
125 | lib_ring_buffer_ctx_init(&__ctx, __chan->chan, __event, __event_len, \ | ||
126 | __event_align, -1); \ | ||
127 | __ret = __chan->ops->event_reserve(&__ctx, __event->id); \ | ||
128 | -- | ||
129 | 1.8.1.2 | ||
130 | |||