Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1654658 > unrolled thread
| Started by | Jeremy Linton <jeremy.linton@arm.com> |
|---|---|
| First post | 2017-06-01 00:00 +0200 |
| Last post | 2017-06-01 03:20 +0200 |
| Articles | 7 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH 00/12] trace: add the ability to parse sizeof() Jeremy Linton <jeremy.linton@arm.com> - 2017-06-01 00:00 +0200
[PATCH 07/12] trace: rename enum_map functions Jeremy Linton <jeremy.linton@arm.com> - 2017-06-01 00:00 +0200
[PATCH 09/12] tracing: define TRACE_DEFINE_SIZEOF() macro to map sizeof's to their values Jeremy Linton <jeremy.linton@arm.com> - 2017-06-01 00:00 +0200
[PATCH 06/12] trace: rename trace.c enum functions Jeremy Linton <jeremy.linton@arm.com> - 2017-06-01 00:00 +0200
[PATCH 03/12] trace: rename struct module entry for trace enums Jeremy Linton <jeremy.linton@arm.com> - 2017-06-01 00:00 +0200
[PATCH 11/12] tracing: Add TRACE_DEFINE_SIZEOF() macros Jeremy Linton <jeremy.linton@arm.com> - 2017-06-01 00:00 +0200
Re: [PATCH 00/12] trace: add the ability to parse sizeof() Steven Rostedt <rostedt@goodmis.org> - 2017-06-01 03:20 +0200
| From | Jeremy Linton <jeremy.linton@arm.com> |
|---|---|
| Date | 2017-06-01 00:00 +0200 |
| Subject | [PATCH 00/12] trace: add the ability to parse sizeof() |
| Message-ID | <tNjON-28K-3@gated-at.bofh.it> |
There are a few cases of sizeof() embedded in TRACE_EVENT()
macros. That is a problem because the sizeof(structure) gets
passed to userspace which doesn't know how to decode the
size of kernel data structures. This is a similar problem
to enums which were being passed in their symbolic form to
userspace.
Rather than recreating much of that infrastructure lets
simply extend it, and append additional symbols into the
enum_map that can translate string sizeof() calls into
values. Of course that means that much of the infrastructure
is now poorly named so we go through and replace instances
describing "enum" with "eval" to indicate a generic C
expression to numerical evaluation routine.
Jeremy Linton (12):
trace: rename kernel enum section to eval
trace: rename trace_enum_map to trace_eval_map
trace: rename struct module entry for trace enums
trace: rename trace enum data structures in trace.c
trace: rename trace_enum_mutex to trace_eval_mutex
trace: rename trace.c enum functions
trace: rename enum_map functions
tracing: Rename enum_replace to eval_replace
tracing: define TRACE_DEFINE_SIZEOF() macro to map sizeof's to their
values
tracing: Update sample file to describe the new macro
tracing: Add TRACE_DEFINE_SIZEOF() macros
tracing: Rename update the enum_map file
arch/arm64/kvm/trace.h | 2 +
include/asm-generic/vmlinux.lds.h | 6 +-
include/linux/module.h | 4 +-
include/linux/tracepoint.h | 7 +-
include/trace/events/xen.h | 13 +-
include/trace/trace_events.h | 26 +++-
kernel/module.c | 6 +-
kernel/trace/Kconfig | 22 ++--
kernel/trace/trace.c | 194 ++++++++++++++---------------
kernel/trace/trace.h | 4 +-
kernel/trace/trace_events.c | 24 ++--
samples/trace_events/trace-events-sample.h | 7 ++
12 files changed, 175 insertions(+), 140 deletions(-)
--
2.9.4
[toc] | [next] | [standalone]
| From | Jeremy Linton <jeremy.linton@arm.com> |
|---|---|
| Date | 2017-06-01 00:00 +0200 |
| Subject | [PATCH 07/12] trace: rename enum_map functions |
| Message-ID | <tNjOO-28K-31@gated-at.bofh.it> |
| In reply to | #1654658 |
Rename the core trace enum routines to use eval, to
reflect their use by more than just enum to value mapping.
Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
---
kernel/trace/trace.c | 74 ++++++++++++++++++++++-----------------------
kernel/trace/trace.h | 4 +--
kernel/trace/trace_events.c | 2 +-
3 files changed, 40 insertions(+), 40 deletions(-)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 5eda252..676c808 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -145,7 +145,7 @@ static DEFINE_MUTEX(trace_eval_mutex);
* one at the beginning, and one at the end. The beginning item contains
* the count of the saved maps (head.length), and the module they
* belong to if not built in (head.mod). The ending item contains a
- * pointer to the next array of saved enum_map items.
+ * pointer to the next array of saved enum_eval/enum_map items.
*/
union trace_eval_map_item {
struct trace_eval_map map;
@@ -1141,9 +1141,9 @@ unsigned long nsecs_to_usecs(unsigned long nsecs)
/*
* TRACE_FLAGS is defined as a tuple matching bit masks with strings.
- * It uses C(a, b) where 'a' is the enum name and 'b' is the string that
+ * It uses C(a, b) where 'a' is the eval (enum) name and 'b' is the string that
* matches it. By defining "C(a, b) b", TRACE_FLAGS becomes a list
- * of strings in the order that the enums were defined.
+ * of strings in the order that the evals (enum) were defined.
*/
#undef C
#define C(a, b) b
@@ -4719,7 +4719,7 @@ static const struct file_operations tracing_saved_cmdlines_size_fops = {
#ifdef CONFIG_TRACE_ENUM_MAP_FILE
static union trace_eval_map_item *
-update_enum_map(union trace_eval_map_item *ptr)
+update_eval_map(union trace_eval_map_item *ptr)
{
if (!ptr->map.eval_string) {
if (ptr->tail.next) {
@@ -4732,7 +4732,7 @@ update_enum_map(union trace_eval_map_item *ptr)
return ptr;
}
-static void *enum_map_next(struct seq_file *m, void *v, loff_t *pos)
+static void *eval_map_next(struct seq_file *m, void *v, loff_t *pos)
{
union trace_eval_map_item *ptr = v;
@@ -4740,7 +4740,7 @@ static void *enum_map_next(struct seq_file *m, void *v, loff_t *pos)
* Paranoid! If ptr points to end, we don't want to increment past it.
* This really should never happen.
*/
- ptr = update_enum_map(ptr);
+ ptr = update_eval_map(ptr);
if (WARN_ON_ONCE(!ptr))
return NULL;
@@ -4748,12 +4748,12 @@ static void *enum_map_next(struct seq_file *m, void *v, loff_t *pos)
(*pos)++;
- ptr = update_enum_map(ptr);
+ ptr = update_eval_map(ptr);
return ptr;
}
-static void *enum_map_start(struct seq_file *m, loff_t *pos)
+static void *eval_map_start(struct seq_file *m, loff_t *pos)
{
union trace_eval_map_item *v;
loff_t l = 0;
@@ -4765,18 +4765,18 @@ static void *enum_map_start(struct seq_file *m, loff_t *pos)
v++;
while (v && l < *pos) {
- v = enum_map_next(m, v, &l);
+ v = eval_map_next(m, v, &l);
}
return v;
}
-static void enum_map_stop(struct seq_file *m, void *v)
+static void eval_map_stop(struct seq_file *m, void *v)
{
mutex_unlock(&trace_eval_mutex);
}
-static int enum_map_show(struct seq_file *m, void *v)
+static int eval_map_show(struct seq_file *m, void *v)
{
union trace_eval_map_item *ptr = v;
@@ -4787,23 +4787,23 @@ static int enum_map_show(struct seq_file *m, void *v)
return 0;
}
-static const struct seq_operations tracing_enum_map_seq_ops = {
- .start = enum_map_start,
- .next = enum_map_next,
- .stop = enum_map_stop,
- .show = enum_map_show,
+static const struct seq_operations tracing_eval_map_seq_ops = {
+ .start = eval_map_start,
+ .next = eval_map_next,
+ .stop = eval_map_stop,
+ .show = eval_map_show,
};
-static int tracing_enum_map_open(struct inode *inode, struct file *filp)
+static int tracing_eval_map_open(struct inode *inode, struct file *filp)
{
if (tracing_disabled)
return -ENODEV;
- return seq_open(filp, &tracing_enum_map_seq_ops);
+ return seq_open(filp, &tracing_eval_map_seq_ops);
}
-static const struct file_operations tracing_enum_map_fops = {
- .open = tracing_enum_map_open,
+static const struct file_operations tracing_eval_map_fops = {
+ .open = tracing_eval_map_open,
.read = seq_read,
.llseek = seq_lseek,
.release = seq_release,
@@ -4817,7 +4817,7 @@ trace_eval_jmp_to_tail(union trace_eval_map_item *ptr)
}
static void
-trace_insert_enum_map_file(struct module *mod, struct trace_eval_map **start,
+trace_insert_eval_map_file(struct module *mod, struct trace_eval_map **start,
int len)
{
struct trace_eval_map **stop;
@@ -4834,7 +4834,7 @@ trace_insert_enum_map_file(struct module *mod, struct trace_eval_map **start,
*/
map_array = kmalloc(sizeof(*map_array) * (len + 2), GFP_KERNEL);
if (!map_array) {
- pr_warn("Unable to allocate trace enum mapping\n");
+ pr_warn("Unable to allocate trace eval mapping\n");
return;
}
@@ -4866,19 +4866,19 @@ trace_insert_enum_map_file(struct module *mod, struct trace_eval_map **start,
mutex_unlock(&trace_eval_mutex);
}
-static void trace_create_enum_file(struct dentry *d_tracer)
+static void trace_create_eval_file(struct dentry *d_tracer)
{
trace_create_file("enum_map", 0444, d_tracer,
- NULL, &tracing_enum_map_fops);
+ NULL, &tracing_eval_map_fops);
}
#else /* CONFIG_TRACE_ENUM_MAP_FILE */
-static inline void trace_create_enum_file(struct dentry *d_tracer) { }
-static inline void trace_insert_enum_map_file(struct module *mod,
+static inline void trace_create_eval_file(struct dentry *d_tracer) { }
+static inline void trace_insert_eval_map_file(struct module *mod,
struct trace_eval_map **start, int len) { }
#endif /* !CONFIG_TRACE_ENUM_MAP_FILE */
-static void trace_insert_enum_map(struct module *mod,
+static void trace_insert_eval_map(struct module *mod,
struct trace_eval_map **start, int len)
{
struct trace_eval_map **map;
@@ -4888,9 +4888,9 @@ static void trace_insert_enum_map(struct module *mod,
map = start;
- trace_event_enum_update(map, len);
+ trace_event_eval_update(map, len);
- trace_insert_enum_map_file(mod, start, len);
+ trace_insert_eval_map_file(mod, start, len);
}
static ssize_t
@@ -7712,11 +7712,11 @@ static void __init trace_eval_init(void)
int len;
len = __stop_ftrace_eval_maps - __start_ftrace_eval_maps;
- trace_insert_enum_map(NULL, __start_ftrace_eval_maps, len);
+ trace_insert_eval_map(NULL, __start_ftrace_eval_maps, len);
}
#ifdef CONFIG_MODULES
-static void trace_module_add_enums(struct module *mod)
+static void trace_module_add_evals(struct module *mod)
{
if (!mod->num_trace_evals)
return;
@@ -7728,11 +7728,11 @@ static void trace_module_add_enums(struct module *mod)
if (trace_module_has_bad_taint(mod))
return;
- trace_insert_enum_map(mod, mod->trace_evals, mod->num_trace_evals);
+ trace_insert_eval_map(mod, mod->trace_evals, mod->num_trace_evals);
}
#ifdef CONFIG_TRACE_ENUM_MAP_FILE
-static void trace_module_remove_enums(struct module *mod)
+static void trace_module_remove_evals(struct module *mod)
{
union trace_eval_map_item *map;
union trace_eval_map_item **last = &trace_eval_maps;
@@ -7760,7 +7760,7 @@ static void trace_module_remove_enums(struct module *mod)
mutex_unlock(&trace_eval_mutex);
}
#else
-static inline void trace_module_remove_enums(struct module *mod) { }
+static inline void trace_module_remove_evals(struct module *mod) { }
#endif /* CONFIG_TRACE_ENUM_MAP_FILE */
static int trace_module_notify(struct notifier_block *self,
@@ -7770,10 +7770,10 @@ static int trace_module_notify(struct notifier_block *self,
switch (val) {
case MODULE_STATE_COMING:
- trace_module_add_enums(mod);
+ trace_module_add_evals(mod);
break;
case MODULE_STATE_GOING:
- trace_module_remove_enums(mod);
+ trace_module_remove_evals(mod);
break;
}
@@ -7813,7 +7813,7 @@ static __init int tracer_init_tracefs(void)
trace_eval_init();
- trace_create_enum_file(d_tracer);
+ trace_create_eval_file(d_tracer);
#ifdef CONFIG_MODULES
register_module_notifier(&trace_module_nb);
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 75d5e27..5f451a6 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -1768,10 +1768,10 @@ static inline const char *get_syscall_name(int syscall)
#ifdef CONFIG_EVENT_TRACING
void trace_event_init(void);
-void trace_event_enum_update(struct trace_eval_map **map, int len);
+void trace_event_eval_update(struct trace_eval_map **map, int len);
#else
static inline void __init trace_event_init(void) { }
-static inline void trace_event_enum_update(struct trace_eval_map **map, int len) { }
+static inline void trace_event_eval_update(struct trace_eval_map **map, int len) { }
#endif
extern struct trace_iterator *tracepoint_print_iter;
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index cf5b9aa..e6897b0 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -2165,7 +2165,7 @@ static void update_event_printk(struct trace_event_call *call,
}
}
-void trace_event_enum_update(struct trace_eval_map **map, int len)
+void trace_event_eval_update(struct trace_eval_map **map, int len)
{
struct trace_event_call *call, *p;
const char *last_system = NULL;
--
2.9.4
[toc] | [prev] | [next] | [standalone]
| From | Jeremy Linton <jeremy.linton@arm.com> |
|---|---|
| Date | 2017-06-01 00:00 +0200 |
| Subject | [PATCH 09/12] tracing: define TRACE_DEFINE_SIZEOF() macro to map sizeof's to their values |
| Message-ID | <tNjOO-28K-33@gated-at.bofh.it> |
| In reply to | #1654658 |
Perf has a problem that if sizeof() macros are used within TRACE_EVENT()
macro's they end up in userspace as "sizeof(kernel structure)" which
cannot properly be parsed. Add a macro which can forward this data
through the eval_map for userspace utilization.
Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
---
include/linux/tracepoint.h | 1 +
include/trace/trace_events.h | 16 ++++++++++++++++
2 files changed, 17 insertions(+)
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
index f7b0f55..a26ffbe 100644
--- a/include/linux/tracepoint.h
+++ b/include/linux/tracepoint.h
@@ -88,6 +88,7 @@ extern void syscall_unregfunc(void);
#define PARAMS(args...) args
#define TRACE_DEFINE_ENUM(x)
+#define TRACE_DEFINE_SIZEOF(x)
#endif /* _LINUX_TRACEPOINT_H */
diff --git a/include/trace/trace_events.h b/include/trace/trace_events.h
index 49cce5f..3976fa1 100644
--- a/include/trace/trace_events.h
+++ b/include/trace/trace_events.h
@@ -46,6 +46,19 @@ TRACE_MAKE_SYSTEM_STR();
__attribute__((section("_ftrace_eval_map"))) \
*TRACE_SYSTEM##_##a = &__##TRACE_SYSTEM##_##a
+#undef TRACE_DEFINE_SIZEOF
+#define TRACE_DEFINE_SIZEOF(a) \
+ static struct trace_eval_map __used __initdata \
+ __##TRACE_SYSTEM##_##a = \
+ { \
+ .system = TRACE_SYSTEM_STRING, \
+ .eval_string = "sizeof(" #a ")", \
+ .eval_value = sizeof(a) \
+ }; \
+ static struct trace_eval_map __used \
+ __attribute__((section("_ftrace_eval_map"))) \
+ *TRACE_SYSTEM##_##a = &__##TRACE_SYSTEM##_##a
+
/*
* DECLARE_EVENT_CLASS can be used to add a generic function
* handlers for events. That is, if all events have the same
@@ -158,6 +171,9 @@ TRACE_MAKE_SYSTEM_STR();
#undef TRACE_DEFINE_ENUM
#define TRACE_DEFINE_ENUM(a)
+#undef TRACE_DEFINE_SIZEOF
+#define TRACE_DEFINE_SIZEOF(a)
+
#undef __field
#define __field(type, item)
--
2.9.4
[toc] | [prev] | [next] | [standalone]
| From | Jeremy Linton <jeremy.linton@arm.com> |
|---|---|
| Date | 2017-06-01 00:00 +0200 |
| Subject | [PATCH 06/12] trace: rename trace.c enum functions |
| Message-ID | <tNjOO-28K-41@gated-at.bofh.it> |
| In reply to | #1654658 |
Rename the init and trace_enum_jmp_to_tail() routines
to reflect their use by more than enumerated types.
Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
---
kernel/trace/trace.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index e1bc56c..5eda252 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -4810,7 +4810,7 @@ static const struct file_operations tracing_enum_map_fops = {
};
static inline union trace_eval_map_item *
-trace_enum_jmp_to_tail(union trace_eval_map_item *ptr)
+trace_eval_jmp_to_tail(union trace_eval_map_item *ptr)
{
/* Return tail of array given the head */
return ptr + ptr->head.length + 1;
@@ -4845,7 +4845,7 @@ trace_insert_enum_map_file(struct module *mod, struct trace_eval_map **start,
else {
ptr = trace_eval_maps;
for (;;) {
- ptr = trace_enum_jmp_to_tail(ptr);
+ ptr = trace_eval_jmp_to_tail(ptr);
if (!ptr->tail.next)
break;
ptr = ptr->tail.next;
@@ -7707,7 +7707,7 @@ struct dentry *tracing_init_dentry(void)
extern struct trace_eval_map *__start_ftrace_eval_maps[];
extern struct trace_eval_map *__stop_ftrace_eval_maps[];
-static void __init trace_enum_init(void)
+static void __init trace_eval_init(void)
{
int len;
@@ -7747,14 +7747,14 @@ static void trace_module_remove_enums(struct module *mod)
while (map) {
if (map->head.mod == mod)
break;
- map = trace_enum_jmp_to_tail(map);
+ map = trace_eval_jmp_to_tail(map);
last = &map->tail.next;
map = map->tail.next;
}
if (!map)
goto out;
- *last = trace_enum_jmp_to_tail(map)->tail.next;
+ *last = trace_eval_jmp_to_tail(map)->tail.next;
kfree(map);
out:
mutex_unlock(&trace_eval_mutex);
@@ -7811,7 +7811,7 @@ static __init int tracer_init_tracefs(void)
trace_create_file("saved_cmdlines_size", 0644, d_tracer,
NULL, &tracing_saved_cmdlines_size_fops);
- trace_enum_init();
+ trace_eval_init();
trace_create_enum_file(d_tracer);
--
2.9.4
[toc] | [prev] | [next] | [standalone]
| From | Jeremy Linton <jeremy.linton@arm.com> |
|---|---|
| Date | 2017-06-01 00:00 +0200 |
| Subject | [PATCH 03/12] trace: rename struct module entry for trace enums |
| Message-ID | <tNjOO-28K-37@gated-at.bofh.it> |
| In reply to | #1654658 |
Each module has a list of enum's its contributing to the
enum map, rename that entry to reflect its use by more than
enums.
Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
---
include/linux/module.h | 4 ++--
kernel/module.c | 6 +++---
kernel/trace/trace.c | 6 +++---
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/include/linux/module.h b/include/linux/module.h
index 46b4804..8eb9a1e 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -442,8 +442,8 @@ struct module {
#ifdef CONFIG_EVENT_TRACING
struct trace_event_call **trace_events;
unsigned int num_trace_events;
- struct trace_eval_map **trace_enums;
- unsigned int num_trace_enums;
+ struct trace_eval_map **trace_evals;
+ unsigned int num_trace_evals;
#endif
#ifdef CONFIG_FTRACE_MCOUNT_RECORD
unsigned int num_ftrace_callsites;
diff --git a/kernel/module.c b/kernel/module.c
index 9ec4713..df1c4a9 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -3077,9 +3077,9 @@ static int find_module_sections(struct module *mod, struct load_info *info)
mod->trace_events = section_objs(info, "_ftrace_events",
sizeof(*mod->trace_events),
&mod->num_trace_events);
- mod->trace_enums = section_objs(info, "_ftrace_eval_map",
- sizeof(*mod->trace_enums),
- &mod->num_trace_enums);
+ mod->trace_evals = section_objs(info, "_ftrace_eval_map",
+ sizeof(*mod->trace_evals),
+ &mod->num_trace_evals);
#endif
#ifdef CONFIG_TRACING
mod->trace_bprintk_fmt_start = section_objs(info, "__trace_printk_fmt",
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index f82764b..85f0e3c 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -7718,7 +7718,7 @@ static void __init trace_enum_init(void)
#ifdef CONFIG_MODULES
static void trace_module_add_enums(struct module *mod)
{
- if (!mod->num_trace_enums)
+ if (!mod->num_trace_evals)
return;
/*
@@ -7728,7 +7728,7 @@ static void trace_module_add_enums(struct module *mod)
if (trace_module_has_bad_taint(mod))
return;
- trace_insert_enum_map(mod, mod->trace_enums, mod->num_trace_enums);
+ trace_insert_enum_map(mod, mod->trace_evals, mod->num_trace_evals);
}
#ifdef CONFIG_TRACE_ENUM_MAP_FILE
@@ -7737,7 +7737,7 @@ static void trace_module_remove_enums(struct module *mod)
union trace_enum_map_item *map;
union trace_enum_map_item **last = &trace_enum_maps;
- if (!mod->num_trace_enums)
+ if (!mod->num_trace_evals)
return;
mutex_lock(&trace_enum_mutex);
--
2.9.4
[toc] | [prev] | [next] | [standalone]
| From | Jeremy Linton <jeremy.linton@arm.com> |
|---|---|
| Date | 2017-06-01 00:00 +0200 |
| Subject | [PATCH 11/12] tracing: Add TRACE_DEFINE_SIZEOF() macros |
| Message-ID | <tNjOO-28K-43@gated-at.bofh.it> |
| In reply to | #1654658 |
There are a few places in the kernel where sizeof() is already
being used. Update those locations with TRACE_DEFINE_SIZEOF.
Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
---
arch/arm64/kvm/trace.h | 2 ++
include/trace/events/xen.h | 13 +++++++++++--
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/kvm/trace.h b/arch/arm64/kvm/trace.h
index 7fb0008..5188c70 100644
--- a/arch/arm64/kvm/trace.h
+++ b/arch/arm64/kvm/trace.h
@@ -93,6 +93,8 @@ TRACE_EVENT(kvm_arm_set_dreg32,
TP_printk("%s: 0x%08x", __entry->name, __entry->value)
);
+TRACE_DEFINE_SIZEOF(__u64);
+
TRACE_EVENT(kvm_arm_set_regset,
TP_PROTO(const char *type, int len, __u64 *control, __u64 *value),
TP_ARGS(type, len, control, value),
diff --git a/include/trace/events/xen.h b/include/trace/events/xen.h
index 31acce9..b70a38b 100644
--- a/include/trace/events/xen.h
+++ b/include/trace/events/xen.h
@@ -30,6 +30,8 @@ DECLARE_EVENT_CLASS(xen_mc__batch,
DEFINE_XEN_MC_BATCH(xen_mc_batch);
DEFINE_XEN_MC_BATCH(xen_mc_issue);
+TRACE_DEFINE_SIZEOF(ulong);
+
TRACE_EVENT(xen_mc_entry,
TP_PROTO(struct multicall_entry *mc, unsigned nargs),
TP_ARGS(mc, nargs),
@@ -40,8 +42,8 @@ TRACE_EVENT(xen_mc_entry,
),
TP_fast_assign(__entry->op = mc->op;
__entry->nargs = nargs;
- memcpy(__entry->args, mc->args, sizeof(unsigned long) * nargs);
- memset(__entry->args + nargs, 0, sizeof(unsigned long) * (6 - nargs));
+ memcpy(__entry->args, mc->args, sizeof(ulong) * nargs);
+ memset(__entry->args + nargs, 0, sizeof(ulong) * (6 - nargs));
),
TP_printk("op %u%s args [%lx, %lx, %lx, %lx, %lx, %lx]",
__entry->op, xen_hypercall_name(__entry->op),
@@ -122,6 +124,7 @@ TRACE_EVENT(xen_mc_extend_args,
__entry->res == XEN_MC_XE_NO_SPACE ? "NO_SPACE" : "???")
);
+TRACE_DEFINE_SIZEOF(pteval_t);
/* mmu */
DECLARE_EVENT_CLASS(xen_mmu__set_pte,
TP_PROTO(pte_t *ptep, pte_t pteval),
@@ -199,6 +202,8 @@ TRACE_EVENT(xen_mmu_pte_clear,
__entry->mm, __entry->addr, __entry->ptep)
);
+TRACE_DEFINE_SIZEOF(pmdval_t);
+
TRACE_EVENT(xen_mmu_set_pmd,
TP_PROTO(pmd_t *pmdp, pmd_t pmdval),
TP_ARGS(pmdp, pmdval),
@@ -226,6 +231,8 @@ TRACE_EVENT(xen_mmu_pmd_clear,
#if CONFIG_PGTABLE_LEVELS >= 4
+TRACE_DEFINE_SIZEOF(pudval_t);
+
TRACE_EVENT(xen_mmu_set_pud,
TP_PROTO(pud_t *pudp, pud_t pudval),
TP_ARGS(pudp, pudval),
@@ -241,6 +248,8 @@ TRACE_EVENT(xen_mmu_set_pud,
(int)sizeof(pudval_t) * 2, (unsigned long long)__entry->pudval)
);
+TRACE_DEFINE_SIZEOF(p4dval_t);
+
TRACE_EVENT(xen_mmu_set_p4d,
TP_PROTO(p4d_t *p4dp, p4d_t *user_p4dp, p4d_t p4dval),
TP_ARGS(p4dp, user_p4dp, p4dval),
--
2.9.4
[toc] | [prev] | [next] | [standalone]
| From | Steven Rostedt <rostedt@goodmis.org> |
|---|---|
| Date | 2017-06-01 03:20 +0200 |
| Message-ID | <tNmWl-4gd-3@gated-at.bofh.it> |
| In reply to | #1654658 |
Hi Jeremy, I'm currently at the Open Source Summit in Tokyo. It may be a while before I get to look more at this. If I get time during my travels, I may get to it sooner, otherwise it may be a week or so. -- Steve On Wed, 31 May 2017 16:56:41 -0500 Jeremy Linton <jeremy.linton@arm.com> wrote: > There are a few cases of sizeof() embedded in TRACE_EVENT() > macros. That is a problem because the sizeof(structure) gets > passed to userspace which doesn't know how to decode the > size of kernel data structures. This is a similar problem > to enums which were being passed in their symbolic form to > userspace. > > Rather than recreating much of that infrastructure lets > simply extend it, and append additional symbols into the > enum_map that can translate string sizeof() calls into > values. Of course that means that much of the infrastructure > is now poorly named so we go through and replace instances > describing "enum" with "eval" to indicate a generic C > expression to numerical evaluation routine. > > Jeremy Linton (12): > trace: rename kernel enum section to eval > trace: rename trace_enum_map to trace_eval_map > trace: rename struct module entry for trace enums > trace: rename trace enum data structures in trace.c > trace: rename trace_enum_mutex to trace_eval_mutex > trace: rename trace.c enum functions > trace: rename enum_map functions > tracing: Rename enum_replace to eval_replace > tracing: define TRACE_DEFINE_SIZEOF() macro to map sizeof's to their > values > tracing: Update sample file to describe the new macro > tracing: Add TRACE_DEFINE_SIZEOF() macros > tracing: Rename update the enum_map file > > arch/arm64/kvm/trace.h | 2 + > include/asm-generic/vmlinux.lds.h | 6 +- > include/linux/module.h | 4 +- > include/linux/tracepoint.h | 7 +- > include/trace/events/xen.h | 13 +- > include/trace/trace_events.h | 26 +++- > kernel/module.c | 6 +- > kernel/trace/Kconfig | 22 ++-- > kernel/trace/trace.c | 194 > ++++++++++++++--------------- > kernel/trace/trace.h | 4 +- > kernel/trace/trace_events.c | 24 ++-- > samples/trace_events/trace-events-sample.h | 7 ++ 12 files changed, > 175 insertions(+), 140 deletions(-) >
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web