[PATCH v2 0/4] tools lib traceevent: bitmask handling and plugin updates
This is v2 of the patch series that added __get_bitmask() as well as added some plugin code. This version addresses what Namhyung suggested. The diff from v1 is posted below. Steven Rostedt (Red Hat) (4): tools lib traceevent: Add flag to not load event plugins tools lib traceevent: Add options to plugins tools lib traceevent: Add options to function plugin tools lib traceevent: Added support for __get_bitmask() macro tools/lib/traceevent/event-parse.c | 113 tools/lib/traceevent/event-parse.h | 25 ++- tools/lib/traceevent/event-plugin.c| 204 - tools/lib/traceevent/plugin_function.c | 43 - .../perf/util/scripting-engines/trace-event-perl.c | 1 + .../util/scripting-engines/trace-event-python.c| 1 + 6 files changed, 377 insertions(+), 10 deletions(-) diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c index 2d6aa92..93825a1 100644 --- a/tools/lib/traceevent/event-parse.c +++ b/tools/lib/traceevent/event-parse.c @@ -3794,7 +3794,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size, f = pevent_find_any_field(event, arg->bitmask.bitmask); arg->bitmask.offset = f->offset; } - bitmask_offset = data2host4(pevent, data + arg->string.offset); + bitmask_offset = data2host4(pevent, data + arg->bitmask.offset); bitmask_size = bitmask_offset >> 16; bitmask_offset &= 0x; print_bitmask_to_seq(pevent, s, format, len_arg, diff --git a/tools/lib/traceevent/event-parse.h b/tools/lib/traceevent/event-parse.h index 025627f..7a3873f 100644 --- a/tools/lib/traceevent/event-parse.h +++ b/tools/lib/traceevent/event-parse.h @@ -362,7 +362,7 @@ enum pevent_func_arg_type { enum pevent_flag { PEVENT_NSEC_OUTPUT = 1,/* output in NSECS */ PEVENT_DISABLE_SYS_PLUGINS = 1 << 1, - PEVENT_DISABLE_PLUGINS = 1 << 2 + PEVENT_DISABLE_PLUGINS = 1 << 2, }; #define PEVENT_ERRORS\ @@ -419,6 +419,8 @@ enum pevent_errno { struct plugin_list; +#define INVALID_PLUGIN_LIST_OPTION ((char **)((unsigned long)-1)) + struct plugin_list *traceevent_load_plugins(struct pevent *pevent); void traceevent_unload_plugins(struct plugin_list *plugin_list, struct pevent *pevent); diff --git a/tools/lib/traceevent/event-plugin.c b/tools/lib/traceevent/event-plugin.c index a244794..648ef84 100644 --- a/tools/lib/traceevent/event-plugin.c +++ b/tools/lib/traceevent/event-plugin.c @@ -57,7 +57,7 @@ struct plugin_list { * used by toggling the option. * * Returns NULL if there's no options registered. On error it returns - * an (char **)-1 (must check for that) + * INVALID_PLUGIN_LIST_OPTION * * Must be freed with traceevent_plugin_free_options_list(). */ @@ -72,6 +72,7 @@ char **traceevent_plugin_list_options(void) for (reg = registered_options; reg; reg = reg->next) { for (op = reg->options; op->name; op++) { char *alias = op->plugin_alias ? op->plugin_alias : op->file; + char **temp = list; name = malloc(strlen(op->name) + strlen(alias) + 2); if (!name) @@ -80,6 +81,7 @@ char **traceevent_plugin_list_options(void) sprintf(name, "%s:%s", alias, op->name); list = realloc(list, count + 2); if (!list) { + list = temp; free(name); goto err; } @@ -87,16 +89,14 @@ char **traceevent_plugin_list_options(void) list[count] = NULL; } } - if (!count) - return NULL; return list; err: - while (--count > 0) + while (--count >= 0) free(list[count]); free(list); - return (char **)((unsigned long)-1); + return INVALID_PLUGIN_LIST_OPTION; } void traceevent_plugin_free_options_list(char **list) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH v2 0/4] tools lib traceevent: bitmask handling and plugin updates
This is v2 of the patch series that added __get_bitmask() as well as added some plugin code. This version addresses what Namhyung suggested. The diff from v1 is posted below. Steven Rostedt (Red Hat) (4): tools lib traceevent: Add flag to not load event plugins tools lib traceevent: Add options to plugins tools lib traceevent: Add options to function plugin tools lib traceevent: Added support for __get_bitmask() macro tools/lib/traceevent/event-parse.c | 113 tools/lib/traceevent/event-parse.h | 25 ++- tools/lib/traceevent/event-plugin.c| 204 - tools/lib/traceevent/plugin_function.c | 43 - .../perf/util/scripting-engines/trace-event-perl.c | 1 + .../util/scripting-engines/trace-event-python.c| 1 + 6 files changed, 377 insertions(+), 10 deletions(-) diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c index 2d6aa92..93825a1 100644 --- a/tools/lib/traceevent/event-parse.c +++ b/tools/lib/traceevent/event-parse.c @@ -3794,7 +3794,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size, f = pevent_find_any_field(event, arg-bitmask.bitmask); arg-bitmask.offset = f-offset; } - bitmask_offset = data2host4(pevent, data + arg-string.offset); + bitmask_offset = data2host4(pevent, data + arg-bitmask.offset); bitmask_size = bitmask_offset 16; bitmask_offset = 0x; print_bitmask_to_seq(pevent, s, format, len_arg, diff --git a/tools/lib/traceevent/event-parse.h b/tools/lib/traceevent/event-parse.h index 025627f..7a3873f 100644 --- a/tools/lib/traceevent/event-parse.h +++ b/tools/lib/traceevent/event-parse.h @@ -362,7 +362,7 @@ enum pevent_func_arg_type { enum pevent_flag { PEVENT_NSEC_OUTPUT = 1,/* output in NSECS */ PEVENT_DISABLE_SYS_PLUGINS = 1 1, - PEVENT_DISABLE_PLUGINS = 1 2 + PEVENT_DISABLE_PLUGINS = 1 2, }; #define PEVENT_ERRORS\ @@ -419,6 +419,8 @@ enum pevent_errno { struct plugin_list; +#define INVALID_PLUGIN_LIST_OPTION ((char **)((unsigned long)-1)) + struct plugin_list *traceevent_load_plugins(struct pevent *pevent); void traceevent_unload_plugins(struct plugin_list *plugin_list, struct pevent *pevent); diff --git a/tools/lib/traceevent/event-plugin.c b/tools/lib/traceevent/event-plugin.c index a244794..648ef84 100644 --- a/tools/lib/traceevent/event-plugin.c +++ b/tools/lib/traceevent/event-plugin.c @@ -57,7 +57,7 @@ struct plugin_list { * used by toggling the option. * * Returns NULL if there's no options registered. On error it returns - * an (char **)-1 (must check for that) + * INVALID_PLUGIN_LIST_OPTION * * Must be freed with traceevent_plugin_free_options_list(). */ @@ -72,6 +72,7 @@ char **traceevent_plugin_list_options(void) for (reg = registered_options; reg; reg = reg-next) { for (op = reg-options; op-name; op++) { char *alias = op-plugin_alias ? op-plugin_alias : op-file; + char **temp = list; name = malloc(strlen(op-name) + strlen(alias) + 2); if (!name) @@ -80,6 +81,7 @@ char **traceevent_plugin_list_options(void) sprintf(name, %s:%s, alias, op-name); list = realloc(list, count + 2); if (!list) { + list = temp; free(name); goto err; } @@ -87,16 +89,14 @@ char **traceevent_plugin_list_options(void) list[count] = NULL; } } - if (!count) - return NULL; return list; err: - while (--count 0) + while (--count = 0) free(list[count]); free(list); - return (char **)((unsigned long)-1); + return INVALID_PLUGIN_LIST_OPTION; } void traceevent_plugin_free_options_list(char **list) -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/