Re: [PATCH v2 1/4] perf tools: Create for_each_event macro for tracepoints iteration

2017-01-31 Thread Taeung Song

Hi, Arnaldo :)

On 01/31/2017 09:21 PM, Arnaldo Carvalho de Melo wrote:

Em Tue, Jan 31, 2017 at 08:38:28PM +0900, Taeung Song escreveu:

Such as for_each_subsystem and for_each_event in util/parse-events.c,
add new macros 'for_each_event' for easy iteration over the tracepoints
in order to be more compact and readable.


Looks ok, applied, but look below for some minor suggestions.

- Arnaldo


Cc: Steven Rostedt 
Cc: Frederic Weisbecker 
Cc: Jiri Olsa 
Cc: Namhyung Kim 
Signed-off-by: Taeung Song 
---
 tools/perf/util/trace-event-info.c | 38 ++
 1 file changed, 18 insertions(+), 20 deletions(-)

diff --git a/tools/perf/util/trace-event-info.c 
b/tools/perf/util/trace-event-info.c
index ceb0e27..fb6d95d 100644
--- a/tools/perf/util/trace-event-info.c
+++ b/tools/perf/util/trace-event-info.c
@@ -170,6 +170,12 @@ static bool name_in_tp_list(char *sys, struct 
tracepoint_path *tps)
return false;
 }

+#define for_each_event(dir, dent, tps) \
+   while ((dent = readdir(dir)))   \
+   if (dent->d_type == DT_DIR &&\
+   (strcmp(dent->d_name, ".")) && \
+   (strcmp(dent->d_name, "..")))  \
+
 static int copy_event_system(const char *sys, struct tracepoint_path *tps)
 {
struct dirent *dent;
@@ -186,12 +192,10 @@ static int copy_event_system(const char *sys, struct 
tracepoint_path *tps)
return -errno;
}

-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   !name_in_tp_list(dent->d_name, tps))
+   for_each_event(dir, dent, tps) {
+   if (!name_in_tp_list(dent->d_name, tps))
continue;
+
if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
err = -ENOMEM;
goto out;
@@ -210,12 +214,10 @@ static int copy_event_system(const char *sys, struct 
tracepoint_path *tps)
}

rewinddir(dir);
-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   !name_in_tp_list(dent->d_name, tps))
+   for_each_event(dir, dent, tps) {
+   if (!name_in_tp_list(dent->d_name, tps))
continue;
+
if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
err = -ENOMEM;
goto out;
@@ -290,13 +292,11 @@ static int record_event_files(struct tracepoint_path *tps)
goto out;
}

-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   strcmp(dent->d_name, "ftrace") == 0 ||
+   for_each_event(dir, dent, tps) {
+   if (!strcmp(dent->d_name, "ftrace") ||


the existing style was == 0, you switched it to !, equivalent, but
gratuitous, keeping the existing style would make reviewing slightly
faster, as the pattern wouldn't have changed.



I understood !!
In the future, I'll think this when making some patches.

Thanks,
Taeung


Re: [PATCH v2 1/4] perf tools: Create for_each_event macro for tracepoints iteration

2017-01-31 Thread Taeung Song

Hi, Arnaldo :)

On 01/31/2017 09:21 PM, Arnaldo Carvalho de Melo wrote:

Em Tue, Jan 31, 2017 at 08:38:28PM +0900, Taeung Song escreveu:

Such as for_each_subsystem and for_each_event in util/parse-events.c,
add new macros 'for_each_event' for easy iteration over the tracepoints
in order to be more compact and readable.


Looks ok, applied, but look below for some minor suggestions.

- Arnaldo


Cc: Steven Rostedt 
Cc: Frederic Weisbecker 
Cc: Jiri Olsa 
Cc: Namhyung Kim 
Signed-off-by: Taeung Song 
---
 tools/perf/util/trace-event-info.c | 38 ++
 1 file changed, 18 insertions(+), 20 deletions(-)

diff --git a/tools/perf/util/trace-event-info.c 
b/tools/perf/util/trace-event-info.c
index ceb0e27..fb6d95d 100644
--- a/tools/perf/util/trace-event-info.c
+++ b/tools/perf/util/trace-event-info.c
@@ -170,6 +170,12 @@ static bool name_in_tp_list(char *sys, struct 
tracepoint_path *tps)
return false;
 }

+#define for_each_event(dir, dent, tps) \
+   while ((dent = readdir(dir)))   \
+   if (dent->d_type == DT_DIR &&\
+   (strcmp(dent->d_name, ".")) && \
+   (strcmp(dent->d_name, "..")))  \
+
 static int copy_event_system(const char *sys, struct tracepoint_path *tps)
 {
struct dirent *dent;
@@ -186,12 +192,10 @@ static int copy_event_system(const char *sys, struct 
tracepoint_path *tps)
return -errno;
}

-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   !name_in_tp_list(dent->d_name, tps))
+   for_each_event(dir, dent, tps) {
+   if (!name_in_tp_list(dent->d_name, tps))
continue;
+
if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
err = -ENOMEM;
goto out;
@@ -210,12 +214,10 @@ static int copy_event_system(const char *sys, struct 
tracepoint_path *tps)
}

rewinddir(dir);
-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   !name_in_tp_list(dent->d_name, tps))
+   for_each_event(dir, dent, tps) {
+   if (!name_in_tp_list(dent->d_name, tps))
continue;
+
if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
err = -ENOMEM;
goto out;
@@ -290,13 +292,11 @@ static int record_event_files(struct tracepoint_path *tps)
goto out;
}

-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   strcmp(dent->d_name, "ftrace") == 0 ||
+   for_each_event(dir, dent, tps) {
+   if (!strcmp(dent->d_name, "ftrace") ||


the existing style was == 0, you switched it to !, equivalent, but
gratuitous, keeping the existing style would make reviewing slightly
faster, as the pattern wouldn't have changed.



I understood !!
In the future, I'll think this when making some patches.

Thanks,
Taeung


Re: [PATCH v2 1/4] perf tools: Create for_each_event macro for tracepoints iteration

2017-01-31 Thread Steven Rostedt
On Tue, 31 Jan 2017 09:23:48 -0300
Arnaldo Carvalho de Melo  wrote:

> Em Tue, Jan 31, 2017 at 09:21:16AM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Tue, Jan 31, 2017 at 08:38:28PM +0900, Taeung Song escreveu:  
> > > - while ((dent = readdir(dir))) {
> > > - if (dent->d_type != DT_DIR ||
> > > - strcmp(dent->d_name, ".") == 0 ||
> > > - strcmp(dent->d_name, "..") == 0 ||
> > > - strcmp(dent->d_name, "ftrace") == 0 ||
> > > + for_each_event(dir, dent, tps) {
> > > + if (!strcmp(dent->d_name, "ftrace") ||
> > >   !system_in_tp_list(dent->d_name, tps))
> > >   continue;  
> 
> > the existing style was == 0, you switched it to !, equivalent, but
> > gratuitous, keeping the existing style would make reviewing slightly
> > faster, as the pattern wouldn't have changed.  
>  
> Here it is:
> 
> -   while ((dent = readdir(dir))) {
> -   if (dent->d_type != DT_DIR ||
> -   strcmp(dent->d_name, ".") == 0 ||
> -   strcmp(dent->d_name, "..") == 0 ||
> -   strcmp(dent->d_name, "ftrace") == 0 ||
> +   for_each_event(dir, dent, tps) {
> +   if (strcmp(dent->d_name, "ftrace") == 0 ||
> !system_in_tp_list(dent->d_name, tps))
> continue;

Thanks, because I always screw up the !strcmp(). Thus I find the "== 0"
to me is easier to process "matches" and "!= 0" is "doesn't match".

-- Steve


Re: [PATCH v2 1/4] perf tools: Create for_each_event macro for tracepoints iteration

2017-01-31 Thread Steven Rostedt
On Tue, 31 Jan 2017 09:23:48 -0300
Arnaldo Carvalho de Melo  wrote:

> Em Tue, Jan 31, 2017 at 09:21:16AM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Tue, Jan 31, 2017 at 08:38:28PM +0900, Taeung Song escreveu:  
> > > - while ((dent = readdir(dir))) {
> > > - if (dent->d_type != DT_DIR ||
> > > - strcmp(dent->d_name, ".") == 0 ||
> > > - strcmp(dent->d_name, "..") == 0 ||
> > > - strcmp(dent->d_name, "ftrace") == 0 ||
> > > + for_each_event(dir, dent, tps) {
> > > + if (!strcmp(dent->d_name, "ftrace") ||
> > >   !system_in_tp_list(dent->d_name, tps))
> > >   continue;  
> 
> > the existing style was == 0, you switched it to !, equivalent, but
> > gratuitous, keeping the existing style would make reviewing slightly
> > faster, as the pattern wouldn't have changed.  
>  
> Here it is:
> 
> -   while ((dent = readdir(dir))) {
> -   if (dent->d_type != DT_DIR ||
> -   strcmp(dent->d_name, ".") == 0 ||
> -   strcmp(dent->d_name, "..") == 0 ||
> -   strcmp(dent->d_name, "ftrace") == 0 ||
> +   for_each_event(dir, dent, tps) {
> +   if (strcmp(dent->d_name, "ftrace") == 0 ||
> !system_in_tp_list(dent->d_name, tps))
> continue;

Thanks, because I always screw up the !strcmp(). Thus I find the "== 0"
to me is easier to process "matches" and "!= 0" is "doesn't match".

-- Steve


Re: [PATCH v2 1/4] perf tools: Create for_each_event macro for tracepoints iteration

2017-01-31 Thread Arnaldo Carvalho de Melo
Em Tue, Jan 31, 2017 at 09:21:16AM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Tue, Jan 31, 2017 at 08:38:28PM +0900, Taeung Song escreveu:
> > -   while ((dent = readdir(dir))) {
> > -   if (dent->d_type != DT_DIR ||
> > -   strcmp(dent->d_name, ".") == 0 ||
> > -   strcmp(dent->d_name, "..") == 0 ||
> > -   strcmp(dent->d_name, "ftrace") == 0 ||
> > +   for_each_event(dir, dent, tps) {
> > +   if (!strcmp(dent->d_name, "ftrace") ||
> > !system_in_tp_list(dent->d_name, tps))
> > continue;

> the existing style was == 0, you switched it to !, equivalent, but
> gratuitous, keeping the existing style would make reviewing slightly
> faster, as the pattern wouldn't have changed.
 
Here it is:

-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   strcmp(dent->d_name, "ftrace") == 0 ||
+   for_each_event(dir, dent, tps) {
+   if (strcmp(dent->d_name, "ftrace") == 0 ||
!system_in_tp_list(dent->d_name, tps))
continue;


Re: [PATCH v2 1/4] perf tools: Create for_each_event macro for tracepoints iteration

2017-01-31 Thread Arnaldo Carvalho de Melo
Em Tue, Jan 31, 2017 at 09:21:16AM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Tue, Jan 31, 2017 at 08:38:28PM +0900, Taeung Song escreveu:
> > -   while ((dent = readdir(dir))) {
> > -   if (dent->d_type != DT_DIR ||
> > -   strcmp(dent->d_name, ".") == 0 ||
> > -   strcmp(dent->d_name, "..") == 0 ||
> > -   strcmp(dent->d_name, "ftrace") == 0 ||
> > +   for_each_event(dir, dent, tps) {
> > +   if (!strcmp(dent->d_name, "ftrace") ||
> > !system_in_tp_list(dent->d_name, tps))
> > continue;

> the existing style was == 0, you switched it to !, equivalent, but
> gratuitous, keeping the existing style would make reviewing slightly
> faster, as the pattern wouldn't have changed.
 
Here it is:

-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   strcmp(dent->d_name, "ftrace") == 0 ||
+   for_each_event(dir, dent, tps) {
+   if (strcmp(dent->d_name, "ftrace") == 0 ||
!system_in_tp_list(dent->d_name, tps))
continue;


Re: [PATCH v2 1/4] perf tools: Create for_each_event macro for tracepoints iteration

2017-01-31 Thread Arnaldo Carvalho de Melo
Em Tue, Jan 31, 2017 at 08:38:28PM +0900, Taeung Song escreveu:
> Such as for_each_subsystem and for_each_event in util/parse-events.c,
> add new macros 'for_each_event' for easy iteration over the tracepoints
> in order to be more compact and readable.

Looks ok, applied, but look below for some minor suggestions.

- Arnaldo
 
> Cc: Steven Rostedt 
> Cc: Frederic Weisbecker 
> Cc: Jiri Olsa 
> Cc: Namhyung Kim 
> Signed-off-by: Taeung Song 
> ---
>  tools/perf/util/trace-event-info.c | 38 
> ++
>  1 file changed, 18 insertions(+), 20 deletions(-)
> 
> diff --git a/tools/perf/util/trace-event-info.c 
> b/tools/perf/util/trace-event-info.c
> index ceb0e27..fb6d95d 100644
> --- a/tools/perf/util/trace-event-info.c
> +++ b/tools/perf/util/trace-event-info.c
> @@ -170,6 +170,12 @@ static bool name_in_tp_list(char *sys, struct 
> tracepoint_path *tps)
>   return false;
>  }
>  
> +#define for_each_event(dir, dent, tps)   \
> + while ((dent = readdir(dir)))   \
> + if (dent->d_type == DT_DIR &&   \
> + (strcmp(dent->d_name, ".")) &&  \
> + (strcmp(dent->d_name, "..")))   \
> +
>  static int copy_event_system(const char *sys, struct tracepoint_path *tps)
>  {
>   struct dirent *dent;
> @@ -186,12 +192,10 @@ static int copy_event_system(const char *sys, struct 
> tracepoint_path *tps)
>   return -errno;
>   }
>  
> - while ((dent = readdir(dir))) {
> - if (dent->d_type != DT_DIR ||
> - strcmp(dent->d_name, ".") == 0 ||
> - strcmp(dent->d_name, "..") == 0 ||
> - !name_in_tp_list(dent->d_name, tps))
> + for_each_event(dir, dent, tps) {
> + if (!name_in_tp_list(dent->d_name, tps))
>   continue;
> +
>   if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
>   err = -ENOMEM;
>   goto out;
> @@ -210,12 +214,10 @@ static int copy_event_system(const char *sys, struct 
> tracepoint_path *tps)
>   }
>  
>   rewinddir(dir);
> - while ((dent = readdir(dir))) {
> - if (dent->d_type != DT_DIR ||
> - strcmp(dent->d_name, ".") == 0 ||
> - strcmp(dent->d_name, "..") == 0 ||
> - !name_in_tp_list(dent->d_name, tps))
> + for_each_event(dir, dent, tps) {
> + if (!name_in_tp_list(dent->d_name, tps))
>   continue;
> +
>   if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
>   err = -ENOMEM;
>   goto out;
> @@ -290,13 +292,11 @@ static int record_event_files(struct tracepoint_path 
> *tps)
>   goto out;
>   }
>  
> - while ((dent = readdir(dir))) {
> - if (dent->d_type != DT_DIR ||
> - strcmp(dent->d_name, ".") == 0 ||
> - strcmp(dent->d_name, "..") == 0 ||
> - strcmp(dent->d_name, "ftrace") == 0 ||
> + for_each_event(dir, dent, tps) {
> + if (!strcmp(dent->d_name, "ftrace") ||

the existing style was == 0, you switched it to !, equivalent, but
gratuitous, keeping the existing style would make reviewing slightly
faster, as the pattern wouldn't have changed.

>   !system_in_tp_list(dent->d_name, tps))
>   continue;
> +
>   count++;
>   }
>  
> @@ -307,13 +307,11 @@ static int record_event_files(struct tracepoint_path 
> *tps)
>   }
>  
>   rewinddir(dir);
> - while ((dent = readdir(dir))) {
> - if (dent->d_type != DT_DIR ||
> - strcmp(dent->d_name, ".") == 0 ||
> - strcmp(dent->d_name, "..") == 0 ||
> - strcmp(dent->d_name, "ftrace") == 0 ||
> + for_each_event(dir, dent, tps) {
> + if (!strcmp(dent->d_name, "ftrace") ||

Ditto.

>   !system_in_tp_list(dent->d_name, tps))
>   continue;
> +
>   if (asprintf(, "%s/%s", path, dent->d_name) < 0) {
>   err = -ENOMEM;
>   goto out;
> -- 
> 2.7.4


Re: [PATCH v2 1/4] perf tools: Create for_each_event macro for tracepoints iteration

2017-01-31 Thread Arnaldo Carvalho de Melo
Em Tue, Jan 31, 2017 at 08:38:28PM +0900, Taeung Song escreveu:
> Such as for_each_subsystem and for_each_event in util/parse-events.c,
> add new macros 'for_each_event' for easy iteration over the tracepoints
> in order to be more compact and readable.

Looks ok, applied, but look below for some minor suggestions.

- Arnaldo
 
> Cc: Steven Rostedt 
> Cc: Frederic Weisbecker 
> Cc: Jiri Olsa 
> Cc: Namhyung Kim 
> Signed-off-by: Taeung Song 
> ---
>  tools/perf/util/trace-event-info.c | 38 
> ++
>  1 file changed, 18 insertions(+), 20 deletions(-)
> 
> diff --git a/tools/perf/util/trace-event-info.c 
> b/tools/perf/util/trace-event-info.c
> index ceb0e27..fb6d95d 100644
> --- a/tools/perf/util/trace-event-info.c
> +++ b/tools/perf/util/trace-event-info.c
> @@ -170,6 +170,12 @@ static bool name_in_tp_list(char *sys, struct 
> tracepoint_path *tps)
>   return false;
>  }
>  
> +#define for_each_event(dir, dent, tps)   \
> + while ((dent = readdir(dir)))   \
> + if (dent->d_type == DT_DIR &&   \
> + (strcmp(dent->d_name, ".")) &&  \
> + (strcmp(dent->d_name, "..")))   \
> +
>  static int copy_event_system(const char *sys, struct tracepoint_path *tps)
>  {
>   struct dirent *dent;
> @@ -186,12 +192,10 @@ static int copy_event_system(const char *sys, struct 
> tracepoint_path *tps)
>   return -errno;
>   }
>  
> - while ((dent = readdir(dir))) {
> - if (dent->d_type != DT_DIR ||
> - strcmp(dent->d_name, ".") == 0 ||
> - strcmp(dent->d_name, "..") == 0 ||
> - !name_in_tp_list(dent->d_name, tps))
> + for_each_event(dir, dent, tps) {
> + if (!name_in_tp_list(dent->d_name, tps))
>   continue;
> +
>   if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
>   err = -ENOMEM;
>   goto out;
> @@ -210,12 +214,10 @@ static int copy_event_system(const char *sys, struct 
> tracepoint_path *tps)
>   }
>  
>   rewinddir(dir);
> - while ((dent = readdir(dir))) {
> - if (dent->d_type != DT_DIR ||
> - strcmp(dent->d_name, ".") == 0 ||
> - strcmp(dent->d_name, "..") == 0 ||
> - !name_in_tp_list(dent->d_name, tps))
> + for_each_event(dir, dent, tps) {
> + if (!name_in_tp_list(dent->d_name, tps))
>   continue;
> +
>   if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
>   err = -ENOMEM;
>   goto out;
> @@ -290,13 +292,11 @@ static int record_event_files(struct tracepoint_path 
> *tps)
>   goto out;
>   }
>  
> - while ((dent = readdir(dir))) {
> - if (dent->d_type != DT_DIR ||
> - strcmp(dent->d_name, ".") == 0 ||
> - strcmp(dent->d_name, "..") == 0 ||
> - strcmp(dent->d_name, "ftrace") == 0 ||
> + for_each_event(dir, dent, tps) {
> + if (!strcmp(dent->d_name, "ftrace") ||

the existing style was == 0, you switched it to !, equivalent, but
gratuitous, keeping the existing style would make reviewing slightly
faster, as the pattern wouldn't have changed.

>   !system_in_tp_list(dent->d_name, tps))
>   continue;
> +
>   count++;
>   }
>  
> @@ -307,13 +307,11 @@ static int record_event_files(struct tracepoint_path 
> *tps)
>   }
>  
>   rewinddir(dir);
> - while ((dent = readdir(dir))) {
> - if (dent->d_type != DT_DIR ||
> - strcmp(dent->d_name, ".") == 0 ||
> - strcmp(dent->d_name, "..") == 0 ||
> - strcmp(dent->d_name, "ftrace") == 0 ||
> + for_each_event(dir, dent, tps) {
> + if (!strcmp(dent->d_name, "ftrace") ||

Ditto.

>   !system_in_tp_list(dent->d_name, tps))
>   continue;
> +
>   if (asprintf(, "%s/%s", path, dent->d_name) < 0) {
>   err = -ENOMEM;
>   goto out;
> -- 
> 2.7.4


[PATCH v2 1/4] perf tools: Create for_each_event macro for tracepoints iteration

2017-01-31 Thread Taeung Song
Such as for_each_subsystem and for_each_event in util/parse-events.c,
add new macros 'for_each_event' for easy iteration over the tracepoints
in order to be more compact and readable.

Cc: Steven Rostedt 
Cc: Frederic Weisbecker 
Cc: Jiri Olsa 
Cc: Namhyung Kim 
Signed-off-by: Taeung Song 
---
 tools/perf/util/trace-event-info.c | 38 ++
 1 file changed, 18 insertions(+), 20 deletions(-)

diff --git a/tools/perf/util/trace-event-info.c 
b/tools/perf/util/trace-event-info.c
index ceb0e27..fb6d95d 100644
--- a/tools/perf/util/trace-event-info.c
+++ b/tools/perf/util/trace-event-info.c
@@ -170,6 +170,12 @@ static bool name_in_tp_list(char *sys, struct 
tracepoint_path *tps)
return false;
 }
 
+#define for_each_event(dir, dent, tps) \
+   while ((dent = readdir(dir)))   \
+   if (dent->d_type == DT_DIR &&   \
+   (strcmp(dent->d_name, ".")) &&  \
+   (strcmp(dent->d_name, "..")))   \
+
 static int copy_event_system(const char *sys, struct tracepoint_path *tps)
 {
struct dirent *dent;
@@ -186,12 +192,10 @@ static int copy_event_system(const char *sys, struct 
tracepoint_path *tps)
return -errno;
}
 
-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   !name_in_tp_list(dent->d_name, tps))
+   for_each_event(dir, dent, tps) {
+   if (!name_in_tp_list(dent->d_name, tps))
continue;
+
if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
err = -ENOMEM;
goto out;
@@ -210,12 +214,10 @@ static int copy_event_system(const char *sys, struct 
tracepoint_path *tps)
}
 
rewinddir(dir);
-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   !name_in_tp_list(dent->d_name, tps))
+   for_each_event(dir, dent, tps) {
+   if (!name_in_tp_list(dent->d_name, tps))
continue;
+
if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
err = -ENOMEM;
goto out;
@@ -290,13 +292,11 @@ static int record_event_files(struct tracepoint_path *tps)
goto out;
}
 
-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   strcmp(dent->d_name, "ftrace") == 0 ||
+   for_each_event(dir, dent, tps) {
+   if (!strcmp(dent->d_name, "ftrace") ||
!system_in_tp_list(dent->d_name, tps))
continue;
+
count++;
}
 
@@ -307,13 +307,11 @@ static int record_event_files(struct tracepoint_path *tps)
}
 
rewinddir(dir);
-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   strcmp(dent->d_name, "ftrace") == 0 ||
+   for_each_event(dir, dent, tps) {
+   if (!strcmp(dent->d_name, "ftrace") ||
!system_in_tp_list(dent->d_name, tps))
continue;
+
if (asprintf(, "%s/%s", path, dent->d_name) < 0) {
err = -ENOMEM;
goto out;
-- 
2.7.4



[PATCH v2 1/4] perf tools: Create for_each_event macro for tracepoints iteration

2017-01-31 Thread Taeung Song
Such as for_each_subsystem and for_each_event in util/parse-events.c,
add new macros 'for_each_event' for easy iteration over the tracepoints
in order to be more compact and readable.

Cc: Steven Rostedt 
Cc: Frederic Weisbecker 
Cc: Jiri Olsa 
Cc: Namhyung Kim 
Signed-off-by: Taeung Song 
---
 tools/perf/util/trace-event-info.c | 38 ++
 1 file changed, 18 insertions(+), 20 deletions(-)

diff --git a/tools/perf/util/trace-event-info.c 
b/tools/perf/util/trace-event-info.c
index ceb0e27..fb6d95d 100644
--- a/tools/perf/util/trace-event-info.c
+++ b/tools/perf/util/trace-event-info.c
@@ -170,6 +170,12 @@ static bool name_in_tp_list(char *sys, struct 
tracepoint_path *tps)
return false;
 }
 
+#define for_each_event(dir, dent, tps) \
+   while ((dent = readdir(dir)))   \
+   if (dent->d_type == DT_DIR &&   \
+   (strcmp(dent->d_name, ".")) &&  \
+   (strcmp(dent->d_name, "..")))   \
+
 static int copy_event_system(const char *sys, struct tracepoint_path *tps)
 {
struct dirent *dent;
@@ -186,12 +192,10 @@ static int copy_event_system(const char *sys, struct 
tracepoint_path *tps)
return -errno;
}
 
-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   !name_in_tp_list(dent->d_name, tps))
+   for_each_event(dir, dent, tps) {
+   if (!name_in_tp_list(dent->d_name, tps))
continue;
+
if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
err = -ENOMEM;
goto out;
@@ -210,12 +214,10 @@ static int copy_event_system(const char *sys, struct 
tracepoint_path *tps)
}
 
rewinddir(dir);
-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   !name_in_tp_list(dent->d_name, tps))
+   for_each_event(dir, dent, tps) {
+   if (!name_in_tp_list(dent->d_name, tps))
continue;
+
if (asprintf(, "%s/%s/format", sys, dent->d_name) < 0) {
err = -ENOMEM;
goto out;
@@ -290,13 +292,11 @@ static int record_event_files(struct tracepoint_path *tps)
goto out;
}
 
-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   strcmp(dent->d_name, "ftrace") == 0 ||
+   for_each_event(dir, dent, tps) {
+   if (!strcmp(dent->d_name, "ftrace") ||
!system_in_tp_list(dent->d_name, tps))
continue;
+
count++;
}
 
@@ -307,13 +307,11 @@ static int record_event_files(struct tracepoint_path *tps)
}
 
rewinddir(dir);
-   while ((dent = readdir(dir))) {
-   if (dent->d_type != DT_DIR ||
-   strcmp(dent->d_name, ".") == 0 ||
-   strcmp(dent->d_name, "..") == 0 ||
-   strcmp(dent->d_name, "ftrace") == 0 ||
+   for_each_event(dir, dent, tps) {
+   if (!strcmp(dent->d_name, "ftrace") ||
!system_in_tp_list(dent->d_name, tps))
continue;
+
if (asprintf(, "%s/%s", path, dent->d_name) < 0) {
err = -ENOMEM;
goto out;
-- 
2.7.4