tools/lib/traceevent, tools/perf: Move struct tep_handler definition in a local header file
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v2 1/1 tools/lib/traceevent, tools/perf: Move struct tep_handler definition in a local header file
From: "Tzvetomir Stoyanov <[email protected]>"
As traceevent is going to be transfered into a poper library, its local data should be protected from the library users. This patch capsulates struct tep_handler into a local header, not visible outside of the library. It implements also a bunch of new APIs, which library users can use to access tep_handler members.
--- tools/lib/traceevent/Build | 1 + tools/lib/traceevent/event-parse-api.c | 275 +++++++++++++++++++++++ tools/lib/traceevent/event-parse-local.h | 92 ++++++++ tools/lib/traceevent/event-parse.c | 2 + tools/lib/traceevent/event-parse.h | 228 +++---------------- tools/lib/traceevent/event-plugin.c | 1 + tools/lib/traceevent/parse-filter.c | 1 + tools/perf/util/trace-event-parse.c | 25 ++- tools/perf/util/trace-event-read.c | 2 +- 9 files changed, 416 insertions(+), 211 deletions(-) create mode 100644 tools/lib/traceevent/event-parse-api.c create mode 100644 tools/lib/traceevent/event-parse-local.h
tools/lib/traceevent/Build +1 -0
@@ -4,6 +4,7 @@ libtraceevent-y += trace-seq.o libtraceevent-y += parse-filter.o libtraceevent-y += parse-utils.o libtraceevent-y += kbuffer-parse.o +libtraceevent-y += event-parse-api.o plugin_jbd2-y += plugin_jbd2.o plugin_hrtimer-y += plugin_hrtimer.o
tools/lib/traceevent/event-parse-api.c new file +275 -0
275 lines not on this page · raw message
tools/lib/traceevent/event-parse-local.h new file +92 -0
92 lines not on this page · raw message
tools/lib/traceevent/event-parse.c +2 -0
@@ -37,6 +37,8 @@#include <netinet/in.h> #include "event-parse.h" + +#include "event-parse-local.h" #include "event-utils.h" static const char *input_buf;
tools/lib/traceevent/event-parse.h +28 -200
253 lines not on this page · raw message
tools/lib/traceevent/event-plugin.c +1 -0
@@ -28,6 +28,7 @@#include <unistd.h> #include <dirent.h> #include "event-parse.h" +#include "event-parse-local.h" #include "event-utils.h" #define LOCAL_PLUGIN_DIR ".traceevent/plugins"
tools/lib/traceevent/parse-filter.c +1 -0
@@ -25,6 +25,7 @@#include <sys/types.h> #include "event-parse.h" +#include "event-parse-local.h" #include "event-utils.h" #define COMM "COMM"
tools/perf/util/trace-event-parse.c +15 -10
@@ -37,10 +37,11 @@ static int get_common_field(struct scripting_context *context,struct tep_format_field *field;if (!*size) { -if (!pevent->events) + + event =tep_get_first_event (pevent); +if (!event)return 0 ; - event = pevent->events[0 ]; field =tep_find_common_field (event, type);if (!field)return 0 ;
@@ -193,25 +194,29 @@ struct tep_event_format *trace_find_next_event(struct tep_handle *pevent, struct tep_event_format *event) {static int idx; +int events_count; +struct tep_event_format *all_events; -if (!pevent || !pevent->events) + all_events =tep_get_first_event (pevent); + events_count =tep_get_events_count (pevent); +if (!pevent || !all_events || events_count <1 )return NULL ;if (!event) { idx =0 ; -return pevent->events[0 ]; +return all_events; } -if (idx < pevent->nr_events && event == pevent->events[idx]) { +if (idx < events_count && event == (all_events + idx)) { idx++; -if (idx == pevent->nr_events) +if (idx == events_count)return NULL ; -return pevent->events[idx]; +return (all_events + idx); } -for (idx =1 ; idx < pevent->nr_events; idx++) { -if (event == pevent->events[idx -1 ]) -return pevent->events[idx]; +for (idx =1 ; idx < events_count; idx++) { +if (event == (all_events + (idx -1 ))) +return (all_events + idx); }return NULL ; }
tools/perf/util/trace-event-read.c +1 -1
@@ -241,7 +241,7 @@ static int read_header_files(struct tep_handle *pevent)* The commit field in the page is of type long, * use that instead, since it represents the kernel. */ -tep_set_long_size (pevent, pevent->header_page_size_size); +tep_set_long_size (pevent,tep_get_header_page_size (pevent)); }free (header_page);
Signature · 1 line
2.17.1
Quoted 3 lines · On Fri, 5 Oct 2018 16:31:09 +0300 [email protected] wrote:
From: "Tzvetomir Stoyanov <[email protected]>"
As traceevent is going to be transfered into a poper library,
Note, when I sent this out, I fixed the above typos:
transferred and proper.
Quoted 44 lines
its local data should be protected from the library users. This patch capsulates struct
tep_handlerinto a local header, not visible outside of the library. It implements also a bunch of new APIs, which library users can use to accesstep_handlermembers.Signed-off-by Tzvetomir Stoyanov <[email protected]>--- tools/lib/traceevent/Build | 1 + tools/lib/traceevent/event-parse-api.c | 275 +++++++++++++++++++++++ tools/lib/traceevent/event-parse-local.h | 92 ++++++++ tools/lib/traceevent/event-parse.c | 2 + tools/lib/traceevent/event-parse.h | 228 +++---------------- tools/lib/traceevent/event-plugin.c | 1 + tools/lib/traceevent/parse-filter.c | 1 + tools/perf/util/trace-event-parse.c | 25 ++- tools/perf/util/trace-event-read.c | 2 +- 9 files changed, 416 insertions(+), 211 deletions(-) create mode 100644 tools/lib/traceevent/event-parse-api.c create mode 100644 tools/lib/traceevent/event-parse-local.htools/lib/traceevent/Build +1
-0@@ -4,6 +4,7 @@ libtraceevent-y += trace-seq.o libtraceevent-y += parse-filter.o libtraceevent-y += parse-utils.o libtraceevent-y += kbuffer-parse.o +libtraceevent-y += event-parse-api.o plugin_jbd2-y += plugin_jbd2.o plugin_hrtimer-y += plugin_hrtimer.otools/lib/traceevent/event-parse-api.c new file +6
-0@@ -0,0 +1,275 @@ +// SPDX-License-Identifier: LGPL-2.1 +/* +* Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <[email protected]> +* +*/ +
tools/lib/traceevent/event-parse-api.c line 16
Quoted 10 lines
tools/lib/traceevent/event-parse-api.c new file +10
-0+#include "event-parse.h" +#include "event-parse-local.h" +#include "event-utils.h" + +/** +* tep_get_first_event - returns the first event in the events array +* @pevent: a handle to the tep_handle +* +* This returns pointer to the first element of the events array +* If @pevent is NULL, NULL is returned.
I also fixed up the above comments to use @tep instead of @pevent.
tools/lib/traceevent/event-parse-api.c line 20
Quoted 4 lines
tools/lib/traceevent/event-parse-api.c new file +4
-0+*/ +struct tep_event_format *tep_get_first_event (struct tep_handle *tep) +{ +if (tep && tep->events)
I just noticed that the whitespace is wrong here.
Try running checkpatch on your code:
$ git format-patch -o /tmp/ HEAD~1..HEAD $ ./scripts/checkpatch.pl /tmp/[patch-file]
It will find all your formatting errors (it even found the spelling mistakes :-)
tools/lib/traceevent/event-parse-api.c line 31
Quoted 11 lines
tools/lib/traceevent/event-parse-api.c new file +11
-0+return tep->events[0 ]; + +return NULL ; +} + +/** +* tep_get_events_count - get the number of defined events +* @pevent: a handle to the tep_handle +* +* This returns number of elements in event array +* If @pevent is NULL, 0 is returned.
Here too with the pevent/tep.
tools/lib/traceevent/event-parse-api.c line 44
Quoted 13 lines
tools/lib/traceevent/event-parse-api.c new file +13
-0+*/ +int tep_get_events_count (struct tep_handle *tep) +{ +if (tep) +return tep->nr_events; +return 0 ; +} + +/** +* tep_set_flag - set event parser flag +* @pevent: a handle to the tep_handle +* @flag: flag, or combination of flags to be set +* can be any combination from enum tep_flag
Ditto.
tools/lib/traceevent/event-parse-api.c line 55
Quoted 11 lines
tools/lib/traceevent/event-parse-api.c new file +11
-0+* +* This sets a flag or mbination of flags from enum tep_flag +*/ +void tep_set_flag (struct tep_handle *tep,int flag) +{ +if (tep) + tep->flags |= flag; +} + +unsigned short __tep_data2host2 (struct tep_handle *pevent,unsigned short data) +{
As these are not new, it's OK to keep pevent. But we probably should have a patch to rename them all to "tep".
Quoted 26 lines
tools/lib/traceevent/event-parse-api.c new file +26
-0+unsigned short swap; + +if (!pevent || pevent->host_bigendian == pevent->file_bigendian) +return data; + + swap = ((data &0xffULL ) <<8 ) | + ((data & (0xffULL <<8 )) >>8 ); + +return swap; +} + +unsigned int __tep_data2host4 (struct tep_handle *pevent,unsigned int data) +{ +unsigned int swap; + +if (!pevent || pevent->host_bigendian == pevent->file_bigendian) +return data; + + swap = ((data &0xffULL ) <<24 ) | + ((data & (0xffULL <<8 )) <<8 ) | + ((data & (0xffULL <<16 )) >>8 ) | + ((data & (0xffULL <<24 )) >>24 ); + +return swap; +} +
[..]
Quoted 57 lines
tools/lib/traceevent/event-parse-local.h new file +54
-0@@ -0,0 +1,92 @@ +// SPDX-License-Identifier: LGPL-2.1 +/* +* Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <[email protected]> +* +*/ + +#ifndef _PARSE_EVENTS_INT_H +#define _PARSE_EVENTS_INT_H + +struct cmdline; +struct cmdline_list; +struct func_map; +struct func_list; +struct event_handler; +struct func_resolver; + +struct tep_handle { + int ref_count; + + int header_page_ts_offset; + int header_page_ts_size; + int header_page_size_offset; + int header_page_size_size; + int header_page_data_offset; + int header_page_data_size; + int header_page_overwrite; + + enum tep_endian file_bigendian; + enum tep_endian host_bigendian; + + int latency_format; + + int old_format; + + int cpus; + int long_size; + int page_size; + + struct cmdline *cmdlines; + struct cmdline_list *cmdlist; + int cmdline_count; + + struct func_map *func_map; + struct func_resolver *func_resolver; + struct func_list *funclist; + unsigned int func_count; + + struct printk_map *printk_map; + struct printk_list *printklist; + unsigned int printk_count; + + + struct tep_event_format **events; + int nr_events;
tools/lib/traceevent/event-parse-local.h line 64
Quoted 10 lines
tools/lib/traceevent/event-parse-local.h new file +10
-0+struct tep_event_format **sort_events; +enum tep_event_sort_type last_type; + +int type_offset; +int type_size; + +int pid_offset; +int pid_size; + +int pc_offset;
Also, I forgot to tell you that the above line has extra whitespace in it. "[space][tab]int pc_offest;" where that space should be deleted.
I saw this by git am warning. Also, when I do a git show, it shows up as a big red spot.
Again, checkpatch will find all of this.
Can you pull the patch I sent to Arnaldo, and restart with that one, and send a v3?
Thanks!
-- Steve
Quoted 394 lines
tools/lib/traceevent/event-parse-local.h new file +28
-0+int pc_size; + +int flags_offset; +int flags_size; + +int ld_offset; +int ld_size; + +int print_raw; + +int test_filters; + +int flags; + +struct tep_format_field *bprint_ip_field; +struct tep_format_field *bprint_fmt_field; +struct tep_format_field *bprint_buf_field; + +struct event_handler *handlers; +struct tep_function_handler *func_handlers; + +/* cache */ +struct tep_event_format *last_event; + + char *trace_clock; +}; + +#endif /* _PARSE_EVENTS_INT_H */ tools/lib/traceevent/event-parse.c +2
-0@@ -37,6 +37,8 @@#include <netinet/in.h> #include "event-parse.h" + +#include "event-parse-local.h" #include "event-utils.h" static const char *input_buf;tools/lib/traceevent/event-parse.h +28
-200@@ -447,149 +447,18 @@ void tep_print_plugins(struct trace_seq *s, const char *prefix, const char *suffix, const struct tep_plugin_list *list); -struct cmdline ; -struct cmdline_list ; -struct func_map ; -struct func_list ; -struct event_handler ; -struct func_resolver ; - +/* tep_handle */ typedef char *(tep_func_resolver_t )(void *priv,unsigned long long *addrp,char **modp); +void tep_set_flag (struct tep_handle *tep,int flag); +unsigned short __tep_data2host2 (struct tep_handle *pevent,unsigned short data); +unsigned int __tep_data2host4 (struct tep_handle *pevent,unsigned int data); +unsigned long long +__tep_data2host8 (struct tep_handle *pevent,unsigned long long data); -struct tep_handle { -int ref_count; - -int header_page_ts_offset; -int header_page_ts_size; -int header_page_size_offset; -int header_page_size_size; -int header_page_data_offset; -int header_page_data_size; -int header_page_overwrite; - -int file_bigendian; -int host_bigendian; - -int latency_format; - -int old_format; - -int cpus; -int long_size; -int page_size; - -struct cmdline *cmdlines; -struct cmdline_list *cmdlist; -int cmdline_count; - -struct func_map *func_map; -struct func_resolver *func_resolver; -struct func_list *funclist; -unsigned int func_count; - -struct printk_map *printk_map; -struct printk_list *printklist; -unsigned int printk_count; - - -struct tep_event_format **events; -int nr_events; -struct tep_event_format **sort_events; -enum tep_event_sort_type last_type; - -int type_offset; -int type_size; - -int pid_offset; -int pid_size; - -int pc_offset; -int pc_size; - -int flags_offset; -int flags_size; - -int ld_offset; -int ld_size; - -int print_raw; - -int test_filters; - -int flags; - -struct tep_format_field *bprint_ip_field; -struct tep_format_field *bprint_fmt_field; -struct tep_format_field *bprint_buf_field; - -struct event_handler *handlers; -struct tep_function_handler *func_handlers; - -/* cache */ -struct tep_event_format *last_event; - -char *trace_clock; -}; - -static inline void tep_set_flag (struct tep_handle *pevent,int flag) -{ - pevent->flags |= flag; -} - -static inline unsigned short -__tep_data2host2 (struct tep_handle *pevent,unsigned short data) -{ -unsigned short swap; - -if (pevent->host_bigendian == pevent->file_bigendian) -return data; - - swap = ((data &0xffULL ) <<8 ) | - ((data & (0xffULL <<8 )) >>8 ); - -return swap; -} - -static inline unsigned int -__tep_data2host4 (struct tep_handle *pevent,unsigned int data) -{ -unsigned int swap; - -if (pevent->host_bigendian == pevent->file_bigendian) -return data; - - swap = ((data &0xffULL ) <<24 ) | - ((data & (0xffULL <<8 )) <<8 ) | - ((data & (0xffULL <<16 )) >>8 ) | - ((data & (0xffULL <<24 )) >>24 ); - -return swap; -} - -static inline unsigned long long -__tep_data2host8 (struct tep_handle *pevent,unsigned long long data) -{ -unsigned long long swap; - -if (pevent->host_bigendian == pevent->file_bigendian) -return data; - - swap = ((data &0xffULL ) <<56 ) | - ((data & (0xffULL <<8 )) <<40 ) | - ((data & (0xffULL <<16 )) <<24 ) | - ((data & (0xffULL <<24 )) <<8 ) | - ((data & (0xffULL <<32 )) >>8 ) | - ((data & (0xffULL <<40 )) >>24 ) | - ((data & (0xffULL <<48 )) >>40 ) | - ((data & (0xffULL <<56 )) >>56 ); - -return swap; -} - -#define tep_data2host2 (pevent, ptr) __tep_data2host2(pevent, *(unsigned short *)(ptr)) -#define tep_data2host4 (pevent, ptr) __tep_data2host4(pevent, *(unsigned int *)(ptr)) -#define tep_data2host8 (pevent, ptr) \ +#define tep_data2host2 (pevent, ptr) __tep_data2host2(pevent, *(unsigned short *)(ptr)) +#define tep_data2host4 (pevent, ptr) __tep_data2host4(pevent, *(unsigned int *)(ptr)) +#define tep_data2host8 (pevent, ptr) \ ({ \ unsigned long long __val; \ \@@ -697,11 +566,12 @@ unsigned long long tep_read_number(struct tep_handle *pevent, const void *ptr, iint tep_read_number_field (struct tep_format_field *field,const void *data,unsigned long long *value); +struct tep_event_format *tep_get_first_event (struct tep_handle *tep); +int tep_get_events_count (struct tep_handle *tep);struct tep_event_format *tep_find_event (struct tep_handle *pevent,int id);struct tep_event_format *tep_find_event_by_name (struct tep_handle *pevent,const char *sys,const char *name); -struct tep_event_format *tep_find_event_by_record (struct tep_handle *pevent,struct tep_record *record);@@ -731,65 +601,23 @@ struct tep_event_format **tep_list_events(struct tep_handle *pevent, enum tep_evstruct tep_format_field **tep_event_common_fields (struct tep_event_format *event);struct tep_format_field **tep_event_fields (struct tep_event_format *event); -static inline int tep_get_cpus (struct tep_handle *pevent) -{ -return pevent->cpus; -} - -static inline void tep_set_cpus (struct tep_handle *pevent,int cpus) -{ - pevent->cpus = cpus; -} - -static inline int tep_get_long_size (struct tep_handle *pevent) -{ -return pevent->long_size; -} - -static inline void tep_set_long_size (struct tep_handle *pevent,int long_size) -{ - pevent->long_size = long_size; -} - -static inline int tep_get_page_size (struct tep_handle *pevent) -{ -return pevent->page_size; -} - -static inline void tep_set_page_size (struct tep_handle *pevent,int _page_size) -{ - pevent->page_size = _page_size; -} - -static inline int tep_is_file_bigendian (struct tep_handle *pevent) -{ -return pevent->file_bigendian; -} - -static inline void tep_set_file_bigendian (struct tep_handle *pevent,int endian) -{ - pevent->file_bigendian = endian; -} - -static inline int tep_is_host_bigendian (struct tep_handle *pevent) -{ -return pevent->host_bigendian; -} - -static inline void tep_set_host_bigendian (struct tep_handle *pevent,int endian) -{ - pevent->host_bigendian = endian; -} - -static inline int tep_is_latency_format (struct tep_handle *pevent) -{ -return pevent->latency_format; -} - -static inline void tep_set_latency_format (struct tep_handle *pevent,int lat) -{ - pevent->latency_format = lat; -} +enum tep_endian { +TEP_LITTLE_ENDIAN =0 , +TEP_BIG_ENDIAN +}; +int tep_get_cpus (struct tep_handle *pevent); +void tep_set_cpus (struct tep_handle *pevent,int cpus); +int tep_get_long_size (struct tep_handle *pevent); +void tep_set_long_size (struct tep_handle *pevent,int long_size); +int tep_get_page_size (struct tep_handle *pevent); +void tep_set_page_size (struct tep_handle *pevent,int _page_size); +int tep_is_file_bigendian (struct tep_handle *pevent); +void tep_set_file_bigendian (struct tep_handle *pevent,enum tep_endian endian); +int tep_is_host_bigendian (struct tep_handle *pevent); +void tep_set_host_bigendian (struct tep_handle *pevent,enum tep_endian endian); +int tep_is_latency_format (struct tep_handle *pevent); +void tep_set_latency_format (struct tep_handle *pevent,int lat); +int tep_get_header_page_size (struct tep_handle *pevent);struct tep_handle *tep_alloc (void );void tep_free (struct tep_handle *pevent);tools/lib/traceevent/event-plugin.c +1
-0@@ -28,6 +28,7 @@#include <unistd.h> #include <dirent.h> #include "event-parse.h" +#include "event-parse-local.h" #include "event-utils.h" #define LOCAL_PLUGIN_DIR ".traceevent/plugins"tools/lib/traceevent/parse-filter.c +1
-0@@ -25,6 +25,7 @@#include <sys/types.h> #include "event-parse.h" +#include "event-parse-local.h" #include "event-utils.h" #define COMM "COMM"tools/perf/util/trace-event-parse.c +15
-10@@ -37,10 +37,11 @@ static int get_common_field(struct scripting_context *context,struct tep_format_field *field;if (!*size) { -if (!pevent->events) + + event =tep_get_first_event (pevent); +if (!event)return 0 ; - event = pevent->events[0 ]; field =tep_find_common_field (event, type);if (!field)return 0 ;@@ -193,25 +194,29 @@ struct tep_event_format *trace_find_next_event(struct tep_handle *pevent, struct tep_event_format *event) {static int idx; +int events_count; +struct tep_event_format *all_events; -if (!pevent || !pevent->events) + all_events =tep_get_first_event (pevent); + events_count =tep_get_events_count (pevent); +if (!pevent || !all_events || events_count <1 )return NULL ;if (!event) { idx =0 ; -return pevent->events[0 ]; +return all_events; } -if (idx < pevent->nr_events && event == pevent->events[idx]) { +if (idx < events_count && event == (all_events + idx)) { idx++; -if (idx == pevent->nr_events) +if (idx == events_count)return NULL ; -return pevent->events[idx]; +return (all_events + idx); } -for (idx =1 ; idx < pevent->nr_events; idx++) { -if (event == pevent->events[idx -1 ]) -return pevent->events[idx]; +for (idx =1 ; idx < events_count; idx++) { +if (event == (all_events + (idx -1 ))) +return (all_events + idx); }return NULL ; }tools/perf/util/trace-event-read.c +1
-1@@ -241,7 +241,7 @@ static int read_header_files(struct tep_handle *pevent)* The commit field in the page is of type long, * use that instead, since it represents the kernel. */ -tep_set_long_size (pevent, pevent->header_page_size_size); +tep_set_long_size (pevent,tep_get_header_page_size (pevent)); }free (header_page);
Quoted 9 lines · On Fri, 5 Oct 2018 12:31:25 -0400 Steven Rostedt <[email protected]> wrote:
Quoted 6 lines
+/**
+ *tep_get_events_count- get the number of defined events
+ * @pevent: a handle to thetep_handle
+ *
+ * This returns number of elements in event array
+ * If @pevent is NULL, 0 is returned.Here too with the pevent/tep.
Quoted 15 lines
tools/lib/traceevent/event-parse-api.c line 44
Quoted 13 lines
+ */
tools/lib/traceevent/event-parse-api.c new file +12
-0+int tep_get_events_count (struct tep_handle *tep) +{ +if (tep) +return tep->nr_events; +return 0 ; +} + +/** +* tep_set_flag - set event parser flag +* @pevent: a handle to the tep_handle +* @flag: flag, or combination of flags to be set +* can be any combination from enum tep_flag Ditto.
I never committed these changes :-p
So they are not updated. Please fix this on v3.
Thanks!
-- Steve
PATCH v3 1/1 tools/lib/traceevent, tools/perf: Move struct tep_handler definition in a local header file
From: "Tzvetomir Stoyanov" <[email protected]>
As traceevent is going to be transferred into a proper library, its local data should be protected from the library users. This patch capsulates struct tep_handler into a local header, not visible outside of the library. It implements also a bunch of new APIs, which library users can use to access tep_handler members. Version 3 of the patch - fixed whitespace issues.
--- tools/lib/traceevent/Build | 1 + tools/lib/traceevent/event-parse-api.c | 275 +++++++++++++++++++++++ tools/lib/traceevent/event-parse-local.h | 92 ++++++++ tools/lib/traceevent/event-parse.c | 2 + tools/lib/traceevent/event-parse.h | 232 +++---------------- tools/lib/traceevent/event-plugin.c | 1 + tools/lib/traceevent/parse-filter.c | 1 + tools/perf/util/trace-event-parse.c | 25 ++- tools/perf/util/trace-event-read.c | 2 +- 9 files changed, 419 insertions(+), 212 deletions(-) create mode 100644 tools/lib/traceevent/event-parse-api.c create mode 100644 tools/lib/traceevent/event-parse-local.h
tools/lib/traceevent/Build +1 -0
@@ -4,6 +4,7 @@ libtraceevent-y += trace-seq.o libtraceevent-y += parse-filter.o libtraceevent-y += parse-utils.o libtraceevent-y += kbuffer-parse.o +libtraceevent-y += event-parse-api.o plugin_jbd2-y += plugin_jbd2.o plugin_hrtimer-y += plugin_hrtimer.o
tools/lib/traceevent/event-parse-api.c new file +275 -0
275 lines not on this page · raw message
tools/lib/traceevent/event-parse-local.h new file +92 -0
92 lines not on this page · raw message
tools/lib/traceevent/event-parse.c +2 -0
@@ -37,6 +37,8 @@#include <netinet/in.h> #include "event-parse.h" + +#include "event-parse-local.h" #include "event-utils.h" static const char *input_buf;
tools/lib/traceevent/event-parse.h +31 -201
261 lines not on this page · raw message
tools/lib/traceevent/event-plugin.c +1 -0
@@ -28,6 +28,7 @@#include <unistd.h> #include <dirent.h> #include "event-parse.h" +#include "event-parse-local.h" #include "event-utils.h" #define LOCAL_PLUGIN_DIR ".traceevent/plugins"
tools/lib/traceevent/parse-filter.c +1 -0
@@ -25,6 +25,7 @@#include <sys/types.h> #include "event-parse.h" +#include "event-parse-local.h" #include "event-utils.h" #define COMM "COMM"
tools/perf/util/trace-event-parse.c +15 -10
@@ -37,10 +37,11 @@ static int get_common_field(struct scripting_context *context,struct tep_format_field *field;if (!*size) { -if (!pevent->events) + + event =tep_get_first_event (pevent); +if (!event)return 0 ; - event = pevent->events[0 ]; field =tep_find_common_field (event, type);if (!field)return 0 ;
@@ -193,25 +194,29 @@ struct tep_event_format *trace_find_next_event(struct tep_handle *pevent, struct tep_event_format *event) {static int idx; +int events_count; +struct tep_event_format *all_events; -if (!pevent || !pevent->events) + all_events =tep_get_first_event (pevent); + events_count =tep_get_events_count (pevent); +if (!pevent || !all_events || events_count <1 )return NULL ;if (!event) { idx =0 ; -return pevent->events[0 ]; +return all_events; } -if (idx < pevent->nr_events && event == pevent->events[idx]) { +if (idx < events_count && event == (all_events + idx)) { idx++; -if (idx == pevent->nr_events) +if (idx == events_count)return NULL ; -return pevent->events[idx]; +return (all_events + idx); } -for (idx =1 ; idx < pevent->nr_events; idx++) { -if (event == pevent->events[idx -1 ]) -return pevent->events[idx]; +for (idx =1 ; idx < events_count; idx++) { +if (event == (all_events + (idx -1 ))) +return (all_events + idx); }return NULL ; }
tools/perf/util/trace-event-read.c +1 -1
@@ -241,7 +241,7 @@ static int read_header_files(struct tep_handle *pevent)* The commit field in the page is of type long, * use that instead, since it represents the kernel. */ -tep_set_long_size (pevent, pevent->header_page_size_size); +tep_set_long_size (pevent,tep_get_header_page_size (pevent)); }free (header_page);
Signature · 1 line
2.17.1
Quoted 5 lines · On Mon, 8 Oct 2018 15:55:00 +0300 [email protected] wrote:
+++
b/tools/lib/traceevent/event-parse-api.ctools/lib/traceevent/event-parse-api.c new file +3
-0@@ -0,0 +1,275 @@ +// SPDX-License-Identifier: LGPL-2.1 +/* +* Copyright (C) 2009, 2010 Red Hat Inc, Steven Rostedt <[email protected]>
tools/lib/traceevent/event-parse-api.c line 13
Quoted 10 lines
tools/lib/traceevent/event-parse-api.c new file +10
-0+* +*/ + +#include "event-parse.h" +#include "event-parse-local.h" +#include "event-utils.h" + +/** +* tep_get_first_event - returns the first event in the events array +* @pevent: a handle to the tep_handle
I'm fixing up the @pevent to @tep here and below.
Quoted 53 lines
tools/lib/traceevent/event-parse-api.c new file +53
-0+* +* This returns pointer to the first element of the events array +* If @pevent is NULL, NULL is returned. +*/ +struct tep_event_format *tep_get_first_event (struct tep_handle *tep) +{ +if (tep && tep->events) +return tep->events[0 ]; + +return NULL ; +} + +/** +* tep_get_events_count - get the number of defined events +* @pevent: a handle to the tep_handle +* +* This returns number of elements in event array +* If @pevent is NULL, 0 is returned. +*/ +int tep_get_events_count (struct tep_handle *tep) +{ +if (tep) +return tep->nr_events; +return 0 ; +} + +/** +* tep_set_flag - set event parser flag +* @pevent: a handle to the tep_handle +* @flag: flag, or combination of flags to be set +* can be any combination from enum tep_flag +* +* This sets a flag or mbination of flags from enum tep_flag +*/ +void tep_set_flag (struct tep_handle *tep,int flag) +{ +if (tep) + tep->flags |= flag; +} + +unsigned short __tep_data2host2 (struct tep_handle *pevent,unsigned short data) +{ +unsigned short swap; + +if (!pevent || pevent->host_bigendian == pevent->file_bigendian) +return data; + + swap = ((data &0xffULL ) <<8 ) | + ((data & (0xffULL <<8 )) >>8 ); + +return swap; +} +
tools/lib/traceevent/event-parse-api.c
Quoted 10 lines
tools/lib/traceevent/event-parse-api.c new file +4
-3-#define tep_data2host2 (pevent, ptr) __tep_data2host2(pevent, *(unsigned short *)(ptr)) -#define tep_data2host4 (pevent, ptr) __tep_data2host4(pevent, *(unsigned int *)(ptr)) -#define tep_data2host8 (pevent, ptr) \ +#define tep_data2host2 (pevent, ptr) \ + __tep_data2host2(pevent, *(unsigned short *)(ptr)) +#define tep_data2host4 (pevent, ptr) \ + __tep_data2host4(pevent, *(unsigned int *)(ptr))
One thing I hate about checkpatch.pl is it's authoritarian "over 80 chars".
Most of the time I ignore it. I think to myself, "does it look better with or without that line break" and if I think the line break just makes it worse to read, I ignore it.
I'm putting these back to single lines.
Note, this is the one reason I haven't pushed using checkpatch.pl, because some of the suggestions are just wrong.
-- Steve