tracing: Updates for 4.13
Subsystems (5)
Steven Rostedt
maintainercover tracing: Updates for 4.13
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git
for-next
Head SHA1: 681bec0367c2606b6154060310a2ffa543175980
Jeremy Linton (11):
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: Add TRACE_DEFINE_SIZEOF() macros
tracing: Rename update the enum_map file
Joel Fernandes (1):
tracing: Remove unused declaration of trace_stop_cmdline_recording
----
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 | 196 +++++++++++++++++++------------------- kernel/trace/trace.h | 4 +- kernel/trace/trace_events.c | 24 ++--- 11 files changed, 168 insertions(+), 142 deletions(-)
Steven Rostedt
maintainerPATCH 1/12 tracing: Remove unused declaration of trace_stop_cmdline_recording
From: Joel Fernandes <[email protected]>
trace_stop_cmdline_recording declaration isn't in use, remove it.
--- kernel/trace/trace.c | 2 -- 1 file changed, 2 deletions(-)
kernel/trace/trace.c +0 -2
@@ -1910,8 +1910,6 @@ static void tracing_stop_tr(struct trace_array *tr)raw_spin_unlock_irqrestore (&tr->start_lock, flags); } -void trace_stop_cmdline_recording (void ); -static int trace_save_cmdline (struct task_struct *tsk) {unsigned pid, idx;
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 2/12 trace: rename kernel enum section to eval
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
The kernel and its modules have sections containing the enum string to value conversions. Rename this section because we intend to store more than enums in it.
--- include/asm-generic/vmlinux.lds.h | 6 +++--- include/trace/trace_events.h | 2 +- kernel/module.c | 2 +- kernel/trace/trace.c | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-)
include/asm-generic/vmlinux.lds.h +3 -3
@@ -125,9 +125,9 @@ VMLINUX_SYMBOL(__start_ftrace_events) = .; \ KEEP(*(_ftrace_events)) \ VMLINUX_SYMBOL(__stop_ftrace_events) = .; \ - VMLINUX_SYMBOL(__start_ftrace_enum_maps) = .; \ - KEEP(*(_ftrace_enum_map)) \ - VMLINUX_SYMBOL(__stop_ftrace_enum_maps) = .; + VMLINUX_SYMBOL(__start_ftrace_eval_maps) = .; \ + KEEP(*(_ftrace_eval_map)) \ + VMLINUX_SYMBOL(__stop_ftrace_eval_maps) = .;#else #define FTRACE_EVENTS ()#endif
include/trace/trace_events.h +1 -1
@@ -43,7 +43,7 @@ TRACE_MAKE_SYSTEM_STR(); .enum_value = a \ }; \ static struct trace_enum_map __used \ - __attribute__((section("_ftrace_enum_map"))) \ + __attribute__((section("_ftrace_eval_map"))) \ *TRACE_SYSTEM##_##a = &__##TRACE_SYSTEM##_##a/*
kernel/module.c +1 -1
@@ -3077,7 +3077,7 @@ 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_enum_map" , + mod->trace_enums =section_objs (info,"_ftrace_eval_map" ,sizeof (*mod->trace_enums), &mod->num_trace_enums);#endif
kernel/trace/trace.c +4 -4
@@ -7732,15 +7732,15 @@ struct dentry *tracing_init_dentry(void)return NULL ; } -extern struct trace_enum_map *__start_ftrace_enum_maps[]; -extern struct trace_enum_map *__stop_ftrace_enum_maps[]; +extern struct trace_enum_map *__start_ftrace_eval_maps[]; +extern struct trace_enum_map *__stop_ftrace_eval_maps[];static void __init trace_enum_init (void ) {int len; - len = __stop_ftrace_enum_maps - __start_ftrace_enum_maps; -trace_insert_enum_map (NULL , __start_ftrace_enum_maps, len); + len = __stop_ftrace_eval_maps - __start_ftrace_eval_maps; +trace_insert_enum_map (NULL , __start_ftrace_eval_maps, len); }#ifdef CONFIG_MODULES
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 3/12 trace: rename trace_enum_map to trace_eval_map
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
Each enum is loaded into the trace_enum_map, as we are now using this for more than enums rename it.
--- include/linux/module.h | 2 +- include/linux/tracepoint.h | 6 +++--- include/trace/trace_events.h | 8 ++++---- kernel/trace/trace.c | 24 ++++++++++++------------ kernel/trace/trace.h | 4 ++-- kernel/trace/trace_events.c | 14 +++++++------- 6 files changed, 29 insertions(+), 29 deletions(-)
include/linux/module.h +1 -1
@@ -442,7 +442,7 @@ struct module {#ifdef CONFIG_EVENT_TRACING struct trace_event_call **trace_events;unsigned int num_trace_events; -struct trace_enum_map **trace_enums; +struct trace_eval_map **trace_enums;unsigned int num_trace_enums;#endif #ifdef CONFIG_FTRACE_MCOUNT_RECORD
include/linux/tracepoint.h +3 -3
@@ -25,10 +25,10 @@ struct module;struct tracepoint ;struct notifier_block ; -struct trace_enum_map { +struct trace_eval_map {const char *system; -const char *enum_string; -unsigned long enum_value; +const char *eval_string; +unsigned long eval_value; };#define TRACEPOINT_DEFAULT_PRIO 10
include/trace/trace_events.h +4 -4
@@ -35,14 +35,14 @@ TRACE_MAKE_SYSTEM_STR();#undef TRACE_DEFINE_ENUM#define TRACE_DEFINE_ENUM (a) \ - static struct trace_enum_map __used __initdata \ + static struct trace_eval_map __used __initdata \ __##TRACE_SYSTEM##_##a = \ { \ .system = TRACE_SYSTEM_STRING, \ - .enum_string = #a, \ - .enum_value = a \ + .eval_string = #a, \ + .eval_value = a \ }; \ - static struct trace_enum_map __used \ + static struct trace_eval_map __used \ __attribute__((section("_ftrace_eval_map"))) \ *TRACE_SYSTEM##_##a = &__##TRACE_SYSTEM##_##a
kernel/trace/trace.c +12 -12
@@ -132,7 +132,7 @@ union trace_enum_map_item;struct trace_enum_map_tail {/* * "end" is first and points to NULL as it must be different -* than "mod" or "enum_string" +* than "mod" or "eval_string" */ union trace_enum_map_item *next;const char *end;/* points to NULL */
@@ -148,7 +148,7 @@ static DEFINE_MUTEX(trace_enum_mutex);* pointer to the next array of saved enum_map items. */ union trace_enum_map_item { -struct trace_enum_map map; +struct trace_eval_map map;struct trace_enum_map_head head;struct trace_enum_map_tail tail; };
@@ -4748,7 +4748,7 @@ static const struct file_operations tracing_saved_cmdlines_size_fops = {static union trace_enum_map_item *update_enum_map (union trace_enum_map_item *ptr) { -if (!ptr->map.enum_string) { +if (!ptr->map.eval_string) {if (ptr->tail.next) { ptr = ptr->tail.next;/* Set ptr to the next real item (skip head) */
@@ -4808,7 +4808,7 @@ static int enum_map_show(struct seq_file *m, void *v)union trace_enum_map_item *ptr = v;seq_printf (m,"%s %ld (%s)\n" , - ptr->map.enum_string, ptr->map.enum_value, + ptr->map.eval_string, ptr->map.eval_value, ptr->map.system);return 0 ;
@@ -4844,11 +4844,11 @@ trace_enum_jmp_to_tail(union trace_enum_map_item *ptr) }static void -trace_insert_enum_map_file (struct module *mod,struct trace_enum_map **start, +trace_insert_enum_map_file (struct module *mod,struct trace_eval_map **start,int len) { -struct trace_enum_map **stop; -struct trace_enum_map **map; +struct trace_eval_map **stop; +struct trace_eval_map **map;union trace_enum_map_item *map_array;union trace_enum_map_item *ptr;
@@ -4902,13 +4902,13 @@ static void trace_create_enum_file(struct dentry *d_tracer)#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, -struct trace_enum_map **start,int len) { } +struct trace_eval_map **start,int len) { }#endif /* !CONFIG_TRACE_ENUM_MAP_FILE */ static void trace_insert_enum_map (struct module *mod, -struct trace_enum_map **start,int len) +struct trace_eval_map **start,int len) { -struct trace_enum_map **map; +struct trace_eval_map **map;if (len <=0 )return ;
@@ -7732,8 +7732,8 @@ struct dentry *tracing_init_dentry(void)return NULL ; } -extern struct trace_enum_map *__start_ftrace_eval_maps[]; -extern struct trace_enum_map *__stop_ftrace_eval_maps[]; +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 ) {
kernel/trace/trace.h +2 -2
@@ -1773,10 +1773,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_enum_map **map,int len); +void trace_event_enum_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_enum_map **map,int len) { } +static inline void trace_event_enum_update (struct trace_eval_map **map,int len) { }#endif extern struct trace_iterator *tracepoint_print_iter;
kernel/trace/trace_events.c +7 -7
@@ -2067,18 +2067,18 @@ __register_event(struct trace_event_call *call, struct module *mod)return 0 ; } -static char *enum_replace (char *ptr,struct trace_enum_map *map,int len) +static char *enum_replace (char *ptr,struct trace_eval_map *map,int len) {int rlen;int elen;/* Find the length of the enum value as a string */ - elen =snprintf (ptr,0 ,"%ld" , map->enum_value); + elen =snprintf (ptr,0 ,"%ld" , map->eval_value);/* Make sure there's enough room to replace the string with the value */ if (len < elen)return NULL ; -snprintf (ptr, elen +1 ,"%ld" , map->enum_value); +snprintf (ptr, elen +1 ,"%ld" , map->eval_value);/* Get the rest of the string of ptr */ rlen =strlen (ptr + len);
@@ -2090,11 +2090,11 @@ static char *enum_replace(char *ptr, struct trace_enum_map *map, int len) }static void update_event_printk (struct trace_event_call *call, -struct trace_enum_map *map) +struct trace_eval_map *map) {char *ptr;int quote =0 ; -int len =strlen (map->enum_string); +int len =strlen (map->eval_string);for (ptr = call->print_fmt; *ptr; ptr++) {if (*ptr =='\\' ) {
@@ -2125,7 +2125,7 @@ static void update_event_printk(struct trace_event_call *call,continue ; }if (isalpha (*ptr) || *ptr =='_' ) { -if (strncmp (map->enum_string, ptr, len) ==0 && +if (strncmp (map->eval_string, ptr, len) ==0 && !isalnum (ptr[len]) && ptr[len] !='_' ) { ptr =enum_replace (ptr, map, len);/* Hmm, enum string smaller than value */
@@ -2165,7 +2165,7 @@ static void update_event_printk(struct trace_event_call *call, } } -void trace_event_enum_update (struct trace_enum_map **map,int len) +void trace_event_enum_update (struct trace_eval_map **map,int len) {struct trace_event_call *call, *p;const char *last_system =NULL ;
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 4/12 trace: rename struct module entry for trace enums
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
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.
--- include/linux/module.h | 4 ++-- kernel/module.c | 6 +++--- kernel/trace/trace.c | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-)
include/linux/module.h +2 -2
@@ -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;
kernel/module.c +3 -3
@@ -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",
kernel/trace/trace.c +3 -3
@@ -7746,7 +7746,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 ;/*
@@ -7756,7 +7756,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
@@ -7765,7 +7765,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);
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 5/12 trace: rename trace enum data structures in trace.c
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
The enum map entries can be exported to userspace via a sys enum_map file. Rename those functions and structures to reflect the fact that we are using them for more than enums.
--- kernel/trace/trace.c | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-)
kernel/trace/trace.c +26 -26
@@ -122,38 +122,38 @@ int __disable_trace_on_warning;#ifdef CONFIG_TRACE_ENUM_MAP_FILE /* Map of enums to their values, for "enum_map" file */ -struct trace_enum_map_head { +struct trace_eval_map_head {struct module *mod;unsigned long length; }; -union trace_enum_map_item ; +union trace_eval_map_item ; -struct trace_enum_map_tail { +struct trace_eval_map_tail {/* * "end" is first and points to NULL as it must be different * than "mod" or "eval_string" */ -union trace_enum_map_item *next; +union trace_eval_map_item *next;const char *end;/* points to NULL */ };static DEFINE_MUTEX (trace_enum_mutex);/* -* The trace_enum_maps are saved in an array with two extra elements, +* The trace_eval_maps are saved in an array with two extra elements, * 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. */ -union trace_enum_map_item { +union trace_eval_map_item {struct trace_eval_map map; -struct trace_enum_map_head head; -struct trace_enum_map_tail tail; +struct trace_eval_map_head head; +struct trace_eval_map_tail tail; }; -static union trace_enum_map_item *trace_enum_maps; +static union trace_eval_map_item *trace_eval_maps;#endif /* CONFIG_TRACE_ENUM_MAP_FILE */ static int tracing_set_tracer (struct trace_array *tr,const char *buf);
@@ -4745,8 +4745,8 @@ static const struct file_operations tracing_saved_cmdlines_size_fops = { };#ifdef CONFIG_TRACE_ENUM_MAP_FILE -static union trace_enum_map_item * -update_enum_map (union trace_enum_map_item *ptr) +static union trace_eval_map_item * +update_enum_map (union trace_eval_map_item *ptr) {if (!ptr->map.eval_string) {if (ptr->tail.next) {
@@ -4761,7 +4761,7 @@ update_enum_map(union trace_enum_map_item *ptr)static void *enum_map_next (struct seq_file *m,void *v,loff_t *pos) { -union trace_enum_map_item *ptr = v; +union trace_eval_map_item *ptr = v;/* * Paranoid! If ptr points to end, we don't want to increment past it.
@@ -4782,12 +4782,12 @@ static void *enum_map_next(struct seq_file *m, void *v, loff_t *pos)static void *enum_map_start (struct seq_file *m,loff_t *pos) { -union trace_enum_map_item *v; +union trace_eval_map_item *v;loff_t l =0 ;mutex_lock (&trace_enum_mutex); - v = trace_enum_maps; + v = trace_eval_maps;if (v) v++;
@@ -4805,7 +4805,7 @@ static void enum_map_stop(struct seq_file *m, void *v)static int enum_map_show (struct seq_file *m,void *v) { -union trace_enum_map_item *ptr = v; +union trace_eval_map_item *ptr = v; seq_printf(m, "%s %ld (%s)\n", ptr->map.eval_string, ptr->map.eval_value,
@@ -4836,8 +4836,8 @@ static const struct file_operations tracing_enum_map_fops = { .release = seq_release, }; -static inline union trace_enum_map_item * -trace_enum_jmp_to_tail (union trace_enum_map_item *ptr) +static inline union trace_eval_map_item * +trace_enum_jmp_to_tail (union trace_eval_map_item *ptr) {/* Return tail of array given the head */ return ptr + ptr->head.length +1 ;
@@ -4849,13 +4849,13 @@ trace_insert_enum_map_file(struct module *mod, struct trace_eval_map **start, {struct trace_eval_map **stop;struct trace_eval_map **map; -union trace_enum_map_item *map_array; -union trace_enum_map_item *ptr; +union trace_eval_map_item *map_array; +union trace_eval_map_item *ptr; stop = start + len;/* -* The trace_enum_maps contains the map plus a head and tail item, +* The trace_eval_maps contains the map plus a head and tail item, * where the head holds the module and length of array, and the * tail holds a pointer to the next list. */
@@ -4867,10 +4867,10 @@ trace_insert_enum_map_file(struct module *mod, struct trace_eval_map **start,mutex_lock (&trace_enum_mutex); -if (!trace_enum_maps) - trace_enum_maps = map_array; +if (!trace_eval_maps) + trace_eval_maps = map_array;else { - ptr = trace_enum_maps; + ptr = trace_eval_maps;for (;;) { ptr =trace_enum_jmp_to_tail (ptr);if (!ptr->tail.next)
@@ -7762,15 +7762,15 @@ static void trace_module_add_enums(struct module *mod)#ifdef CONFIG_TRACE_ENUM_MAP_FILE static void trace_module_remove_enums (struct module *mod) { -union trace_enum_map_item *map; -union trace_enum_map_item **last = &trace_enum_maps; +union trace_eval_map_item *map; +union trace_eval_map_item **last = &trace_eval_maps;if (!mod->num_trace_evals)return ;mutex_lock (&trace_enum_mutex); - map = trace_enum_maps; + map = trace_eval_maps;while (map) {if (map->head.mod == mod)
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 6/12 trace: rename trace_enum_mutex to trace_eval_mutex
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
There is a lock protecting the trace_enum_map, rename it to reflect the use by more than enums.
--- kernel/trace/trace.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
kernel/trace/trace.c +7 -7
@@ -138,7 +138,7 @@ struct trace_eval_map_tail {const char *end;/* points to NULL */ }; -static DEFINE_MUTEX (trace_enum_mutex); +static DEFINE_MUTEX (trace_eval_mutex);/* * The trace_eval_maps are saved in an array with two extra elements,
@@ -4785,7 +4785,7 @@ static void *enum_map_start(struct seq_file *m, loff_t *pos)union trace_eval_map_item *v;loff_t l =0 ; -mutex_lock (&trace_enum_mutex); +mutex_lock (&trace_eval_mutex); v = trace_eval_maps;if (v)
@@ -4800,7 +4800,7 @@ static void *enum_map_start(struct seq_file *m, loff_t *pos)static void enum_map_stop (struct seq_file *m,void *v) { -mutex_unlock (&trace_enum_mutex); +mutex_unlock (&trace_eval_mutex); }static int enum_map_show (struct seq_file *m,void *v)
@@ -4865,7 +4865,7 @@ trace_insert_enum_map_file(struct module *mod, struct trace_eval_map **start,return ; } -mutex_lock (&trace_enum_mutex); +mutex_lock (&trace_eval_mutex);if (!trace_eval_maps) trace_eval_maps = map_array;
@@ -4890,7 +4890,7 @@ trace_insert_enum_map_file(struct module *mod, struct trace_eval_map **start, }memset (map_array,0 ,sizeof (*map_array)); -mutex_unlock (&trace_enum_mutex); +mutex_unlock (&trace_eval_mutex); }static void trace_create_enum_file (struct dentry *d_tracer)
@@ -7768,7 +7768,7 @@ static void trace_module_remove_enums(struct module *mod)if (!mod->num_trace_evals)return ; -mutex_lock (&trace_enum_mutex); +mutex_lock (&trace_eval_mutex); map = trace_eval_maps;
@@ -7785,7 +7785,7 @@ static void trace_module_remove_enums(struct module *mod) *last =trace_enum_jmp_to_tail (map)->tail.next;kfree (map); out: - mutex_unlock(&trace_enum_mutex); + mutex_unlock(&trace_eval_mutex); }#else static inline void trace_module_remove_enums (struct module *mod) { }
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 7/12 trace: rename trace.c enum functions
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
Rename the init and trace_enum_jmp_to_tail() routines to reflect their use by more than enumerated types.
--- kernel/trace/trace.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
kernel/trace/trace.c +6 -6
@@ -4837,7 +4837,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 ;
@@ -4872,7 +4872,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;
@@ -7735,7 +7735,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;
@@ -7775,14 +7775,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);
@@ -7839,7 +7839,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);
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 8/12 trace: rename enum_map functions
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
Rename the core trace enum routines to use eval, to reflect their use by more than just enum to value mapping.
--- kernel/trace/trace.c | 74 ++++++++++++++++++++++----------------------- kernel/trace/trace.h | 4 +-- kernel/trace/trace_events.c | 2 +- 3 files changed, 40 insertions(+), 40 deletions(-)
kernel/trace/trace.c +37 -37
@@ -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
@@ -4746,7 +4746,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) {
@@ -4759,7 +4759,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;
@@ -4767,7 +4767,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 ;
@@ -4775,12 +4775,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 ;
@@ -4792,18 +4792,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;
@@ -4814,23 +4814,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,
@@ -4844,7 +4844,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;
@@ -4861,7 +4861,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 ; }
@@ -4893,19 +4893,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;
@@ -4915,9 +4915,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
@@ -7740,11 +7740,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 ;
@@ -7756,11 +7756,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;
@@ -7788,7 +7788,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,
@@ -7798,10 +7798,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 ; }
@@ -7841,7 +7841,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);
kernel/trace/trace.h +2 -2
@@ -1773,10 +1773,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;
kernel/trace/trace_events.c +1 -1
@@ -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 ;
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 9/12 tracing: Rename enum_replace to eval_replace
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
The enum_replace stanza works as is for sizeof()
calls as well as enums. Rename it as well.
--- kernel/trace/trace_events.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
kernel/trace/trace_events.c +6 -6
@@ -2067,12 +2067,12 @@ __register_event(struct trace_event_call *call, struct module *mod)return 0 ; } -static char *enum_replace (char *ptr,struct trace_eval_map *map,int len) +static char *eval_replace (char *ptr,struct trace_eval_map *map,int len) {int rlen;int elen; -/* Find the length of the enum value as a string */ +/* Find the length of the eval value as a string */ elen =snprintf (ptr,0 ,"%ld" , map->eval_value);/* Make sure there's enough room to replace the string with the value */ if (len < elen)
@@ -2127,14 +2127,14 @@ static void update_event_printk(struct trace_event_call *call,if (isalpha (*ptr) || *ptr =='_' ) {if (strncmp (map->eval_string, ptr, len) ==0 && !isalnum (ptr[len]) && ptr[len] !='_' ) { - ptr =enum_replace (ptr, map, len); -/* Hmm, enum string smaller than value */ + ptr =eval_replace (ptr, map, len); +/* enum/sizeof string smaller than value */ if (WARN_ON_ONCE (!ptr))return ;/* -* No need to decrement here, as enum_replace() +* No need to decrement here, as eval_replace() * returns the pointer to the character passed -* the enum, and two enums can not be placed +* the eval, and two evals can not be placed * back to back without something in between. * We can skip that something in between. */
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 10/12 tracing: define TRACE_DEFINE_SIZEOF() macro to map sizeofs to their values
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
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.
--- include/linux/tracepoint.h | 1 + include/trace/trace_events.h | 16 ++++++++++++++++ 2 files changed, 17 insertions(+)
include/linux/tracepoint.h +1 -0
@@ -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 */
include/trace/trace_events.h +16 -0
@@ -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)
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 11/12 tracing: Add TRACE_DEFINE_SIZEOF() macros
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
There are a few places in the kernel where sizeof() is already being used. Update those locations with TRACE_DEFINE_SIZEOF.
--- arch/arm64/kvm/trace.h | 2 ++ include/trace/events/xen.h | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-)
arch/arm64/kvm/trace.h +2 -0
@@ -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),
include/trace/events/xen.h +11 -2
@@ -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),
Signature · 1 line
2.10.2
Steven Rostedt
maintainerPATCH 12/12 tracing: Rename update the enum_map file
In reply to Steven RostedtFrom: Jeremy Linton <[email protected]>
The enum_map file is used to display a list of symbol to name conversions. As its now used to resolve sizeof lets update the name and description.
--- kernel/trace/Kconfig | 22 +++++++++++----------- kernel/trace/trace.c | 20 ++++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-)
kernel/trace/Kconfig +11 -11
@@ -667,30 +667,30 @@ config RING_BUFFER_STARTUP_TEST If unsure, say N -config TRACE_ENUM_MAP_FILE - bool "Show enum mappings for trace events" +config TRACE_EVAL_MAP_FILE + bool "Show eval mappings for trace events" depends on TRACING help - The "print fmt" of the trace events will show the enum names instead - of their values. This can cause problems for user space tools that - use this string to parse the raw data as user space does not know + The "print fmt" of the trace events will show the enum/sizeof names + instead of their values. This can cause problems for user space tools + that use this string to parse the raw data as user space does not know how to convert the string to its value. To fix this, there's a special macro in the kernel that can be used - to convert the enum into its value. If this macro is used, then the - print fmt strings will have the enums converted to their values. + to convert an enum/sizeof into its value. If this macro is used, then + the print fmt strings will be converted to their values. If something does not get converted properly, this option can be - used to show what enums the kernel tried to convert. + used to show what enums/sizeof the kernel tried to convert. - This option is for debugging the enum conversions. A file is created - in the tracing directory called "enum_map" that will show the enum + This option is for debugging the conversions. A file is created + in the tracing directory called "eval_map" that will show the names matched with their values and what trace event system they belong too. Normally, the mapping of the strings to values will be freed after boot up or module load. With this option, they will not be freed, as - they are needed for the "enum_map" file. Enabling this option will + they are needed for the "eval_map" file. Enabling this option will increase the memory footprint of the running kernel. If unsure, say N
kernel/trace/trace.c +10 -10
@@ -120,8 +120,8 @@ enum ftrace_dump_mode ftrace_dump_on_oops;/* When set, tracing will stop when a WARN*() is hit */ int __disable_trace_on_warning; -#ifdef CONFIG_TRACE_ENUM_MAP_FILE -/* Map of enums to their values, for "enum_map" file */ +#ifdef CONFIG_TRACE_EVAL_MAP_FILE +/* Map of enums to their values, for "eval_map" file */ struct trace_eval_map_head { struct module *mod; unsigned long length;
@@ -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_eval/enum_map items. +* pointer to the next array of saved eval_map items. */ union trace_eval_map_item {struct trace_eval_map map;
@@ -154,7 +154,7 @@ union trace_eval_map_item { };static union trace_eval_map_item *trace_eval_maps; -#endif /* CONFIG_TRACE_ENUM_MAP_FILE */ +#endif /* CONFIG_TRACE_EVAL_MAP_FILE */ static int tracing_set_tracer (struct trace_array *tr,const char *buf);
@@ -4744,7 +4744,7 @@ static const struct file_operations tracing_saved_cmdlines_size_fops = { .write = tracing_saved_cmdlines_size_write, }; -#ifdef CONFIG_TRACE_ENUM_MAP_FILE +#ifdef CONFIG_TRACE_EVAL_MAP_FILE static union trace_eval_map_item *update_eval_map (union trace_eval_map_item *ptr) {
@@ -4895,15 +4895,15 @@ trace_insert_eval_map_file(struct module *mod, struct trace_eval_map **start,static void trace_create_eval_file (struct dentry *d_tracer) { -trace_create_file ("enum_map" ,0444 , d_tracer, +trace_create_file ("eval_map" ,0444 , d_tracer,NULL , &tracing_eval_map_fops); } -#else /* CONFIG_TRACE_ENUM_MAP_FILE */ +#else /* CONFIG_TRACE_EVAL_MAP_FILE */ 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 */ +#endif /* !CONFIG_TRACE_EVAL_MAP_FILE */ static void trace_insert_eval_map (struct module *mod,struct trace_eval_map **start,int len)
@@ -7759,7 +7759,7 @@ static void trace_module_add_evals(struct module *mod)trace_insert_eval_map (mod, mod->trace_evals, mod->num_trace_evals); } -#ifdef CONFIG_TRACE_ENUM_MAP_FILE +#ifdef CONFIG_TRACE_EVAL_MAP_FILE static void trace_module_remove_evals (struct module *mod) {union trace_eval_map_item *map;
@@ -7789,7 +7789,7 @@ static void trace_module_remove_evals(struct module *mod) }#else static inline void trace_module_remove_evals (struct module *mod) { } -#endif /* CONFIG_TRACE_ENUM_MAP_FILE */ +#endif /* CONFIG_TRACE_EVAL_MAP_FILE */ static int trace_module_notify (struct notifier_block *self,unsigned long val,void *data)
Signature · 1 line
2.10.2