public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf c2c: fix '-e list'
@ 2019-11-27  7:34 Ian Rogers
  2019-11-27  8:18 ` Jiri Olsa
  2019-11-27 18:28 ` [PATCH v2] " Ian Rogers
  0 siblings, 2 replies; 4+ messages in thread
From: Ian Rogers @ 2019-11-27  7:34 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	linux-kernel
  Cc: Stephane Eranian, Ian Rogers

When the event is passed as list, the default events should be listed as
per 'perf mem record -e list'. Previous behavior is:

$ perf c2c record -e list
failed: event 'list' not found, use '-e list' to get list of available events

 Usage: perf c2c record [<options>] [<command>]
    or: perf c2c record [<options>] -- <command> [<options>]

    -e, --event <event>   event selector. Use 'perf mem record -e list' to list available events

New behavior:

$ perf c2c record -e list
ldlat-loads  : available
ldlat-stores : available

Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/builtin-c2c.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
index e69f44941aad..dd69cd218e4c 100644
--- a/tools/perf/builtin-c2c.c
+++ b/tools/perf/builtin-c2c.c
@@ -2872,10 +2872,26 @@ static int perf_c2c__report(int argc, const char **argv)
 static int parse_record_events(const struct option *opt,
 			       const char *str, int unset __maybe_unused)
 {
+	int j;
 	bool *event_set = (bool *) opt->value;
 
-	*event_set = true;
-	return perf_mem_events__parse(str);
+	if (strcmp(str, "list")) {
+		*event_set = true;
+		if (!perf_mem_events__parse(str))
+			return 0;
+
+		exit(-1);
+	}
+	for (j = 0; j < PERF_MEM_EVENTS__MAX; j++) {
+		struct perf_mem_event *e = &perf_mem_events[j];
+
+		fprintf(stderr, "%-13s%-*s%s\n",
+			e->tag,
+			verbose > 0 ? 25 : 0,
+			verbose > 0 ? perf_mem_events__name(j) : "",
+			e->supported ? ": available" : "");
+	}
+	exit(0);
 }
 
 
-- 
2.24.0.393.g34dc348eaf-goog


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] perf c2c: fix '-e list'
  2019-11-27  7:34 [PATCH] perf c2c: fix '-e list' Ian Rogers
@ 2019-11-27  8:18 ` Jiri Olsa
  2019-11-27 18:33   ` Ian Rogers
  2019-11-27 18:28 ` [PATCH v2] " Ian Rogers
  1 sibling, 1 reply; 4+ messages in thread
From: Jiri Olsa @ 2019-11-27  8:18 UTC (permalink / raw)
  To: Ian Rogers
  Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Namhyung Kim, linux-kernel,
	Stephane Eranian

On Tue, Nov 26, 2019 at 11:34:42PM -0800, Ian Rogers wrote:
> When the event is passed as list, the default events should be listed as
> per 'perf mem record -e list'. Previous behavior is:
> 
> $ perf c2c record -e list
> failed: event 'list' not found, use '-e list' to get list of available events
> 
>  Usage: perf c2c record [<options>] [<command>]
>     or: perf c2c record [<options>] -- <command> [<options>]
> 
>     -e, --event <event>   event selector. Use 'perf mem record -e list' to list available events

man c2c page do say you should use 'perf mem' not 'perf c2c'
could you please change the man page as well?

> 
> New behavior:
> 
> $ perf c2c record -e list
> ldlat-loads  : available
> ldlat-stores : available
> 
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/builtin-c2c.c | 20 ++++++++++++++++++--
>  1 file changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
> index e69f44941aad..dd69cd218e4c 100644
> --- a/tools/perf/builtin-c2c.c
> +++ b/tools/perf/builtin-c2c.c
> @@ -2872,10 +2872,26 @@ static int perf_c2c__report(int argc, const char **argv)
>  static int parse_record_events(const struct option *opt,
>  			       const char *str, int unset __maybe_unused)
>  {
> +	int j;
>  	bool *event_set = (bool *) opt->value;
>  
> -	*event_set = true;
> -	return perf_mem_events__parse(str);
> +	if (strcmp(str, "list")) {
> +		*event_set = true;
> +		if (!perf_mem_events__parse(str))
> +			return 0;
> +
> +		exit(-1);
> +	}
> +	for (j = 0; j < PERF_MEM_EVENTS__MAX; j++) {
> +		struct perf_mem_event *e = &perf_mem_events[j];
> +
> +		fprintf(stderr, "%-13s%-*s%s\n",
> +			e->tag,
> +			verbose > 0 ? 25 : 0,
> +			verbose > 0 ? perf_mem_events__name(j) : "",
> +			e->supported ? ": available" : "");
> +	}

there's same loop in builtin-mem.c, could you please put it
to function in mem-events.c?

thanks,
jirka


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v2] perf c2c: fix '-e list'
  2019-11-27  7:34 [PATCH] perf c2c: fix '-e list' Ian Rogers
  2019-11-27  8:18 ` Jiri Olsa
@ 2019-11-27 18:28 ` Ian Rogers
  1 sibling, 0 replies; 4+ messages in thread
From: Ian Rogers @ 2019-11-27 18:28 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	linux-kernel
  Cc: Stephane Eranian, Ian Rogers

When the event is passed as list, the default events should be listed as
per 'perf mem record -e list'. Previous behavior is:

$ perf c2c record -e list
failed: event 'list' not found, use '-e list' to get list of available events

 Usage: perf c2c record [<options>] [<command>]
    or: perf c2c record [<options>] -- <command> [<options>]

    -e, --event <event>   event selector. Use 'perf mem record -e list' to list available events

New behavior:

$ perf c2c record -e list
ldlat-loads  : available
ldlat-stores : available

v2: addresses review comments by Jiri Olsa.
Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/Documentation/perf-c2c.txt |  2 +-
 tools/perf/builtin-c2c.c              |  9 ++++++++-
 tools/perf/builtin-mem.c              | 24 +++++++-----------------
 tools/perf/util/mem-events.c          | 15 +++++++++++++++
 tools/perf/util/mem-events.h          |  2 ++
 5 files changed, 33 insertions(+), 19 deletions(-)

diff --git a/tools/perf/Documentation/perf-c2c.txt b/tools/perf/Documentation/perf-c2c.txt
index e6150f21267d..6ab03e04c925 100644
--- a/tools/perf/Documentation/perf-c2c.txt
+++ b/tools/perf/Documentation/perf-c2c.txt
@@ -40,7 +40,7 @@ RECORD OPTIONS
 --------------
 -e::
 --event=::
-	Select the PMU event. Use 'perf mem record -e list'
+	Select the PMU event. Use 'perf c2c record -e list'
 	to list available events.
 
 -v::
diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
index e69f44941aad..193d6a04f61b 100644
--- a/tools/perf/builtin-c2c.c
+++ b/tools/perf/builtin-c2c.c
@@ -2874,8 +2874,15 @@ static int parse_record_events(const struct option *opt,
 {
 	bool *event_set = (bool *) opt->value;
 
+	if (!strcmp(str, "list")) {
+		perf_mem_events__list();
+		exit(0);
+	}
+	if (perf_mem_events__parse(str))
+		exit(-1);
+
 	*event_set = true;
-	return perf_mem_events__parse(str);
+	return 0;
 }
 
 
diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
index a13f5817d6fc..c796bc08abb7 100644
--- a/tools/perf/builtin-mem.c
+++ b/tools/perf/builtin-mem.c
@@ -38,26 +38,16 @@ static int parse_record_events(const struct option *opt,
 			       const char *str, int unset __maybe_unused)
 {
 	struct perf_mem *mem = *(struct perf_mem **)opt->value;
-	int j;
 
-	if (strcmp(str, "list")) {
-		if (!perf_mem_events__parse(str)) {
-			mem->operation = 0;
-			return 0;
-		}
-		exit(-1);
+	if (!strcmp(str, "list")) {
+		perf_mem_events__list();
+		exit(0);
 	}
+	if (perf_mem_events__parse(str))
+		exit(-1);
 
-	for (j = 0; j < PERF_MEM_EVENTS__MAX; j++) {
-		struct perf_mem_event *e = &perf_mem_events[j];
-
-		fprintf(stderr, "%-13s%-*s%s\n",
-			e->tag,
-			verbose > 0 ? 25 : 0,
-			verbose > 0 ? perf_mem_events__name(j) : "",
-			e->supported ? ": available" : "");
-	}
-	exit(0);
+	mem->operation = 0;
+	return 0;
 }
 
 static const char * const __usage[] = {
diff --git a/tools/perf/util/mem-events.c b/tools/perf/util/mem-events.c
index aa29589f6904..ea0af0bc4314 100644
--- a/tools/perf/util/mem-events.c
+++ b/tools/perf/util/mem-events.c
@@ -103,6 +103,21 @@ int perf_mem_events__init(void)
 	return found ? 0 : -ENOENT;
 }
 
+void perf_mem_events__list(void)
+{
+	int j;
+
+	for (j = 0; j < PERF_MEM_EVENTS__MAX; j++) {
+		struct perf_mem_event *e = &perf_mem_events[j];
+
+		fprintf(stderr, "%-13s%-*s%s\n",
+			e->tag,
+			verbose > 0 ? 25 : 0,
+			verbose > 0 ? perf_mem_events__name(j) : "",
+			e->supported ? ": available" : "");
+	}
+}
+
 static const char * const tlb_access[] = {
 	"N/A",
 	"HIT",
diff --git a/tools/perf/util/mem-events.h b/tools/perf/util/mem-events.h
index f1389bdae7bf..904dad34f7f7 100644
--- a/tools/perf/util/mem-events.h
+++ b/tools/perf/util/mem-events.h
@@ -39,6 +39,8 @@ int perf_mem_events__init(void);
 
 char *perf_mem_events__name(int i);
 
+void perf_mem_events__list(void);
+
 struct mem_info;
 int perf_mem__tlb_scnprintf(char *out, size_t sz, struct mem_info *mem_info);
 int perf_mem__lvl_scnprintf(char *out, size_t sz, struct mem_info *mem_info);
-- 
2.24.0.393.g34dc348eaf-goog


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] perf c2c: fix '-e list'
  2019-11-27  8:18 ` Jiri Olsa
@ 2019-11-27 18:33   ` Ian Rogers
  0 siblings, 0 replies; 4+ messages in thread
From: Ian Rogers @ 2019-11-27 18:33 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Namhyung Kim, LKML,
	Stephane Eranian

On Wed, Nov 27, 2019 at 12:18 AM Jiri Olsa <jolsa@redhat.com> wrote:
>
> On Tue, Nov 26, 2019 at 11:34:42PM -0800, Ian Rogers wrote:
> > When the event is passed as list, the default events should be listed as
> > per 'perf mem record -e list'. Previous behavior is:
> >
> > $ perf c2c record -e list
> > failed: event 'list' not found, use '-e list' to get list of available events
> >
> >  Usage: perf c2c record [<options>] [<command>]
> >     or: perf c2c record [<options>] -- <command> [<options>]
> >
> >     -e, --event <event>   event selector. Use 'perf mem record -e list' to list available events
>
> man c2c page do say you should use 'perf mem' not 'perf c2c'
> could you please change the man page as well?

Done.

> >
> > New behavior:
> >
> > $ perf c2c record -e list
> > ldlat-loads  : available
> > ldlat-stores : available
> >
> > Signed-off-by: Ian Rogers <irogers@google.com>
> > ---
> >  tools/perf/builtin-c2c.c | 20 ++++++++++++++++++--
> >  1 file changed, 18 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
> > index e69f44941aad..dd69cd218e4c 100644
> > --- a/tools/perf/builtin-c2c.c
> > +++ b/tools/perf/builtin-c2c.c
> > @@ -2872,10 +2872,26 @@ static int perf_c2c__report(int argc, const char **argv)
> >  static int parse_record_events(const struct option *opt,
> >                              const char *str, int unset __maybe_unused)
> >  {
> > +     int j;
> >       bool *event_set = (bool *) opt->value;
> >
> > -     *event_set = true;
> > -     return perf_mem_events__parse(str);
> > +     if (strcmp(str, "list")) {
> > +             *event_set = true;
> > +             if (!perf_mem_events__parse(str))
> > +                     return 0;
> > +
> > +             exit(-1);
> > +     }
> > +     for (j = 0; j < PERF_MEM_EVENTS__MAX; j++) {
> > +             struct perf_mem_event *e = &perf_mem_events[j];
> > +
> > +             fprintf(stderr, "%-13s%-*s%s\n",
> > +                     e->tag,
> > +                     verbose > 0 ? 25 : 0,
> > +                     verbose > 0 ? perf_mem_events__name(j) : "",
> > +                     e->supported ? ": available" : "");
> > +     }
>
> there's same loop in builtin-mem.c, could you please put it
> to function in mem-events.c?

Done.

Thanks for the review!
Ian

> thanks,
> jirka
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-11-27 18:33 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-11-27  7:34 [PATCH] perf c2c: fix '-e list' Ian Rogers
2019-11-27  8:18 ` Jiri Olsa
2019-11-27 18:33   ` Ian Rogers
2019-11-27 18:28 ` [PATCH v2] " Ian Rogers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox