All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Rogers <irogers@google.com>
To: John Garry <john.garry@huawei.com>
Cc: Will Deacon <will@kernel.org>, James Clark <james.clark@arm.com>,
	Mike Leach <mike.leach@linaro.org>, Leo Yan <leo.yan@linaro.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
	Andi Kleen <ak@linux.intel.com>,
	Zhengjun Xing <zhengjun.xing@linux.intel.com>,
	Ravi Bangoria <ravi.bangoria@amd.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-perf-users@vger.kernel.org,
	Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH v4 10/17] perf pmu-events: Hide pmu_events_map
Date: Wed, 10 Aug 2022 07:29:19 -0700	[thread overview]
Message-ID: <CAP-5=fXuG9Jt5x-e3um=-hYNSb18j8dL5np5Edozw+H5PoZ2eA@mail.gmail.com> (raw)
In-Reply-To: <463cffea-51d9-98ad-86ac-d064faac05b9@huawei.com>

On Fri, Aug 5, 2022 at 5:31 AM John Garry <john.garry@huawei.com> wrote:
>
> On 04/08/2022 23:18, Ian Rogers wrote:
> > Move usage of the table to pmu-events.c so it may be hidden. By
> > abstracting the table the implementation can later be changed.
> >
> > Signed-off-by: Ian Rogers <irogers@google.com>
> > ---
> >   tools/perf/pmu-events/empty-pmu-events.c |  81 ++++++++-
> >   tools/perf/pmu-events/jevents.py         |  81 ++++++++-
> >   tools/perf/pmu-events/pmu-events.h       |  29 +--
> >   tools/perf/tests/pmu-events.c            | 218 +++++++++++------------
> >   tools/perf/util/metricgroup.c            |  15 +-
> >   tools/perf/util/pmu.c                    |  34 +---
> >   tools/perf/util/pmu.h                    |   2 +-
> >   7 files changed, 280 insertions(+), 180 deletions(-)
> >
> > diff --git a/tools/perf/pmu-events/empty-pmu-events.c b/tools/perf/pmu-events/empty-pmu-events.c
> > index 216ea0482c37..8ef75aff996c 100644
> > --- a/tools/perf/pmu-events/empty-pmu-events.c
> > +++ b/tools/perf/pmu-events/empty-pmu-events.c
> > @@ -6,6 +6,8 @@
> >    * The test cpu/soc is provided for testing.
> >    */
> >   #include "pmu-events/pmu-events.h"
> > +#include "util/header.h"
> > +#include "util/pmu.h"
> >   #include <string.h>
> >   #include <stddef.h>
> >
> > @@ -110,7 +112,26 @@ static const struct pmu_event pme_test_soc_cpu[] = {
> >       },
> >   };
> >
> > -const struct pmu_events_map pmu_events_map[] = {
> > +
> > +/*
> > + * Map a CPU to its table of PMU events. The CPU is identified by the
> > + * cpuid field, which is an arch-specific identifier for the CPU.
> > + * The identifier specified in tools/perf/pmu-events/arch/xxx/mapfile
> > + * must match the get_cpuid_str() in tools/perf/arch/xxx/util/header.c)
> > + *
> > + * The  cpuid can contain any character other than the comma.
> > + */
> > +struct pmu_events_map {
> > +     const char *arch;
> > +     const char *cpuid;
> > +     const struct pmu_event *table;
> > +};
> > +
> > +/*
> > + * Global table mapping each known CPU for the architecture to its
> > + * table of PMU events.
> > + */
> > +static const struct pmu_events_map pmu_events_map[] = {
> >       {
> >               .arch = "testarch",
> >               .cpuid = "testcpu",
> > @@ -162,6 +183,62 @@ static const struct pmu_sys_events pmu_sys_event_tables[] = {
> >       },
> >   };
> >
> > +const struct pmu_event *perf_pmu__find_table(struct perf_pmu *pmu)
> > +{
> > +     const struct pmu_event *table = NULL;
> > +     char *cpuid = perf_pmu__getcpuid(pmu);
> > +     int i;
> > +
> > +     /* on some platforms which uses cpus map, cpuid can be NULL for
> > +      * PMUs other than CORE PMUs.
> > +      */
> > +     if (!cpuid)
> > +             return NULL;
> > +
> > +     i = 0;
> > +     for (;;) {
> > +             const struct pmu_events_map *map = &pmu_events_map[i++];
> > +
> > +             if (!map->table)
> > +                     break;
> > +
> > +             if (!strcmp_cpuid_str(map->cpuid, cpuid)) {
> > +                     table = map->table;
> > +                     break;
> > +             }
> > +     }
> > +     free(cpuid);
> > +     return table;
> > +}
> > +
> > +const struct pmu_event *find_core_events_table(const char *arch, const char *cpuid)
> > +{
> > +     for (const struct pmu_events_map *tables = &pmu_events_map[0];
> > +          tables->table;
> > +          tables++) {
> > +             if (!strcmp(tables->arch, arch) && !strcmp_cpuid_str(tables->cpuid, cpuid))
> > +                     return tables->table;
> > +     }
> > +     return NULL;
> > +}
> > +
> > +int pmu_for_each_core_event(pmu_event_iter_fn fn, void *data)
> > +{
> > +     for (const struct pmu_events_map *tables = &pmu_events_map[0];
> > +          tables->table;
> > +          tables++) {
> > +             for (const struct pmu_event *pe = &tables->table[0];
> > +                  pe->name || pe->metric_group || pe->metric_name;
> > +                  pe++) {
> > +                     int ret = fn(pe, &tables->table[0], data);
> > +
> > +                     if (ret)
> > +                             return ret;
> > +             }
> > +     }
> > +     return 0;
> > +}
> > +
> >   const struct pmu_event *find_sys_events_table(const char *name)
> >   {
> >       for (const struct pmu_sys_events *tables = &pmu_sys_event_tables[0];
> > @@ -181,7 +258,7 @@ int pmu_for_each_sys_event(pmu_event_iter_fn fn, void *data)
> >               for (const struct pmu_event *pe = &tables->table[0];
> >                    pe->name || pe->metric_group || pe->metric_name;
> >                    pe++) {
> > -                     int ret = fn(pe, data);
> > +                     int ret = fn(pe, &tables->table[0], data);
> >
> >                       if (ret)
> >                               return ret;
> > diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py
> > index dd21bc9eeeed..e976c5e8e80b 100755
> > --- a/tools/perf/pmu-events/jevents.py
> > +++ b/tools/perf/pmu-events/jevents.py
> > @@ -333,7 +333,27 @@ def process_one_file(parents: Sequence[str], item: os.DirEntry) -> None:
> >
> >   def print_mapping_table(archs: Sequence[str]) -> None:
> >     """Read the mapfile and generate the struct from cpuid string to event table."""
> > -  _args.output_file.write('const struct pmu_events_map pmu_events_map[] = {\n')
> > +  _args.output_file.write("""
> > +/*
> > + * Map a CPU to its table of PMU events. The CPU is identified by the
> > + * cpuid field, which is an arch-specific identifier for the CPU.
> > + * The identifier specified in tools/perf/pmu-events/arch/xxx/mapfile
> > + * must match the get_cpuid_str() in tools/perf/arch/xxx/util/header.c)
> > + *
> > + * The  cpuid can contain any character other than the comma.
> > + */
> > +struct pmu_events_map {
> > +        const char *arch;
> > +        const char *cpuid;
> > +        const struct pmu_event *table;
> > +};
> > +
> > +/*
> > + * Global table mapping each known CPU for the architecture to its
> > + * table of PMU events.
> > + */
> > +const struct pmu_events_map pmu_events_map[] = {
> > +""")
> >     for arch in archs:
> >       if arch == 'test':
> >         _args.output_file.write("""{
> > @@ -389,6 +409,61 @@ static const struct pmu_sys_events pmu_sys_event_tables[] = {
> >   \t},
> >   };
> >
> > +const struct pmu_event *perf_pmu__find_table(struct perf_pmu *pmu)
> > +{
> > +        const struct pmu_event *table = NULL;
> > +        char *cpuid = perf_pmu__getcpuid(pmu);
>
> This seems an identical implementation to that in empty-pmu-events.c -
> can we reduce this duplication? Maybe a seperate common c file which can
> be linked in
>
> The indentation seems different also - this version seems to use whitespaces

Agreed. Later on this will change, the empty version isn't compressed
and the jevents.py one is. Having a common C file would defeat the
goal of hiding the API, but ultimately we'd need to get rid of it in
later changes when the empty/compressed implementations diverge.

Thanks,
Ian

> > +        int i;
> > +
> > +        /* on some platforms which uses cpus map, cpuid can be NULL for
> > +         * PMUs other than CORE PMUs.
> > +         */
> > +        if (!cpuid)
> > +                return NULL;
> > +
> > +        i = 0;
> > +        for (;;) {
> > +                const struct pmu_events_map *map = &pmu_events_map[i++];
> > +                if (!map->table)
> > +                        break;
> > +
> > +                if (!strcmp_cpuid_str(map->cpuid, cpuid)) {
> > +                        table = map->table;
> > +                        break;
> > +                }
> > +        }
> > +        free(cpuid);
> > +        return table;
> > +}

WARNING: multiple messages have this Message-ID (diff)
From: Ian Rogers <irogers@google.com>
To: John Garry <john.garry@huawei.com>
Cc: Will Deacon <will@kernel.org>, James Clark <james.clark@arm.com>,
	 Mike Leach <mike.leach@linaro.org>, Leo Yan <leo.yan@linaro.org>,
	 Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	 Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	 Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,  Namhyung Kim <namhyung@kernel.org>,
	Andi Kleen <ak@linux.intel.com>,
	 Zhengjun Xing <zhengjun.xing@linux.intel.com>,
	Ravi Bangoria <ravi.bangoria@amd.com>,
	 Kan Liang <kan.liang@linux.intel.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	 linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	 linux-perf-users@vger.kernel.org,
	Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH v4 10/17] perf pmu-events: Hide pmu_events_map
Date: Wed, 10 Aug 2022 07:29:19 -0700	[thread overview]
Message-ID: <CAP-5=fXuG9Jt5x-e3um=-hYNSb18j8dL5np5Edozw+H5PoZ2eA@mail.gmail.com> (raw)
In-Reply-To: <463cffea-51d9-98ad-86ac-d064faac05b9@huawei.com>

On Fri, Aug 5, 2022 at 5:31 AM John Garry <john.garry@huawei.com> wrote:
>
> On 04/08/2022 23:18, Ian Rogers wrote:
> > Move usage of the table to pmu-events.c so it may be hidden. By
> > abstracting the table the implementation can later be changed.
> >
> > Signed-off-by: Ian Rogers <irogers@google.com>
> > ---
> >   tools/perf/pmu-events/empty-pmu-events.c |  81 ++++++++-
> >   tools/perf/pmu-events/jevents.py         |  81 ++++++++-
> >   tools/perf/pmu-events/pmu-events.h       |  29 +--
> >   tools/perf/tests/pmu-events.c            | 218 +++++++++++------------
> >   tools/perf/util/metricgroup.c            |  15 +-
> >   tools/perf/util/pmu.c                    |  34 +---
> >   tools/perf/util/pmu.h                    |   2 +-
> >   7 files changed, 280 insertions(+), 180 deletions(-)
> >
> > diff --git a/tools/perf/pmu-events/empty-pmu-events.c b/tools/perf/pmu-events/empty-pmu-events.c
> > index 216ea0482c37..8ef75aff996c 100644
> > --- a/tools/perf/pmu-events/empty-pmu-events.c
> > +++ b/tools/perf/pmu-events/empty-pmu-events.c
> > @@ -6,6 +6,8 @@
> >    * The test cpu/soc is provided for testing.
> >    */
> >   #include "pmu-events/pmu-events.h"
> > +#include "util/header.h"
> > +#include "util/pmu.h"
> >   #include <string.h>
> >   #include <stddef.h>
> >
> > @@ -110,7 +112,26 @@ static const struct pmu_event pme_test_soc_cpu[] = {
> >       },
> >   };
> >
> > -const struct pmu_events_map pmu_events_map[] = {
> > +
> > +/*
> > + * Map a CPU to its table of PMU events. The CPU is identified by the
> > + * cpuid field, which is an arch-specific identifier for the CPU.
> > + * The identifier specified in tools/perf/pmu-events/arch/xxx/mapfile
> > + * must match the get_cpuid_str() in tools/perf/arch/xxx/util/header.c)
> > + *
> > + * The  cpuid can contain any character other than the comma.
> > + */
> > +struct pmu_events_map {
> > +     const char *arch;
> > +     const char *cpuid;
> > +     const struct pmu_event *table;
> > +};
> > +
> > +/*
> > + * Global table mapping each known CPU for the architecture to its
> > + * table of PMU events.
> > + */
> > +static const struct pmu_events_map pmu_events_map[] = {
> >       {
> >               .arch = "testarch",
> >               .cpuid = "testcpu",
> > @@ -162,6 +183,62 @@ static const struct pmu_sys_events pmu_sys_event_tables[] = {
> >       },
> >   };
> >
> > +const struct pmu_event *perf_pmu__find_table(struct perf_pmu *pmu)
> > +{
> > +     const struct pmu_event *table = NULL;
> > +     char *cpuid = perf_pmu__getcpuid(pmu);
> > +     int i;
> > +
> > +     /* on some platforms which uses cpus map, cpuid can be NULL for
> > +      * PMUs other than CORE PMUs.
> > +      */
> > +     if (!cpuid)
> > +             return NULL;
> > +
> > +     i = 0;
> > +     for (;;) {
> > +             const struct pmu_events_map *map = &pmu_events_map[i++];
> > +
> > +             if (!map->table)
> > +                     break;
> > +
> > +             if (!strcmp_cpuid_str(map->cpuid, cpuid)) {
> > +                     table = map->table;
> > +                     break;
> > +             }
> > +     }
> > +     free(cpuid);
> > +     return table;
> > +}
> > +
> > +const struct pmu_event *find_core_events_table(const char *arch, const char *cpuid)
> > +{
> > +     for (const struct pmu_events_map *tables = &pmu_events_map[0];
> > +          tables->table;
> > +          tables++) {
> > +             if (!strcmp(tables->arch, arch) && !strcmp_cpuid_str(tables->cpuid, cpuid))
> > +                     return tables->table;
> > +     }
> > +     return NULL;
> > +}
> > +
> > +int pmu_for_each_core_event(pmu_event_iter_fn fn, void *data)
> > +{
> > +     for (const struct pmu_events_map *tables = &pmu_events_map[0];
> > +          tables->table;
> > +          tables++) {
> > +             for (const struct pmu_event *pe = &tables->table[0];
> > +                  pe->name || pe->metric_group || pe->metric_name;
> > +                  pe++) {
> > +                     int ret = fn(pe, &tables->table[0], data);
> > +
> > +                     if (ret)
> > +                             return ret;
> > +             }
> > +     }
> > +     return 0;
> > +}
> > +
> >   const struct pmu_event *find_sys_events_table(const char *name)
> >   {
> >       for (const struct pmu_sys_events *tables = &pmu_sys_event_tables[0];
> > @@ -181,7 +258,7 @@ int pmu_for_each_sys_event(pmu_event_iter_fn fn, void *data)
> >               for (const struct pmu_event *pe = &tables->table[0];
> >                    pe->name || pe->metric_group || pe->metric_name;
> >                    pe++) {
> > -                     int ret = fn(pe, data);
> > +                     int ret = fn(pe, &tables->table[0], data);
> >
> >                       if (ret)
> >                               return ret;
> > diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py
> > index dd21bc9eeeed..e976c5e8e80b 100755
> > --- a/tools/perf/pmu-events/jevents.py
> > +++ b/tools/perf/pmu-events/jevents.py
> > @@ -333,7 +333,27 @@ def process_one_file(parents: Sequence[str], item: os.DirEntry) -> None:
> >
> >   def print_mapping_table(archs: Sequence[str]) -> None:
> >     """Read the mapfile and generate the struct from cpuid string to event table."""
> > -  _args.output_file.write('const struct pmu_events_map pmu_events_map[] = {\n')
> > +  _args.output_file.write("""
> > +/*
> > + * Map a CPU to its table of PMU events. The CPU is identified by the
> > + * cpuid field, which is an arch-specific identifier for the CPU.
> > + * The identifier specified in tools/perf/pmu-events/arch/xxx/mapfile
> > + * must match the get_cpuid_str() in tools/perf/arch/xxx/util/header.c)
> > + *
> > + * The  cpuid can contain any character other than the comma.
> > + */
> > +struct pmu_events_map {
> > +        const char *arch;
> > +        const char *cpuid;
> > +        const struct pmu_event *table;
> > +};
> > +
> > +/*
> > + * Global table mapping each known CPU for the architecture to its
> > + * table of PMU events.
> > + */
> > +const struct pmu_events_map pmu_events_map[] = {
> > +""")
> >     for arch in archs:
> >       if arch == 'test':
> >         _args.output_file.write("""{
> > @@ -389,6 +409,61 @@ static const struct pmu_sys_events pmu_sys_event_tables[] = {
> >   \t},
> >   };
> >
> > +const struct pmu_event *perf_pmu__find_table(struct perf_pmu *pmu)
> > +{
> > +        const struct pmu_event *table = NULL;
> > +        char *cpuid = perf_pmu__getcpuid(pmu);
>
> This seems an identical implementation to that in empty-pmu-events.c -
> can we reduce this duplication? Maybe a seperate common c file which can
> be linked in
>
> The indentation seems different also - this version seems to use whitespaces

Agreed. Later on this will change, the empty version isn't compressed
and the jevents.py one is. Having a common C file would defeat the
goal of hiding the API, but ultimately we'd need to get rid of it in
later changes when the empty/compressed implementations diverge.

Thanks,
Ian

> > +        int i;
> > +
> > +        /* on some platforms which uses cpus map, cpuid can be NULL for
> > +         * PMUs other than CORE PMUs.
> > +         */
> > +        if (!cpuid)
> > +                return NULL;
> > +
> > +        i = 0;
> > +        for (;;) {
> > +                const struct pmu_events_map *map = &pmu_events_map[i++];
> > +                if (!map->table)
> > +                        break;
> > +
> > +                if (!strcmp_cpuid_str(map->cpuid, cpuid)) {
> > +                        table = map->table;
> > +                        break;
> > +                }
> > +        }
> > +        free(cpuid);
> > +        return table;
> > +}

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-08-10 14:29 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-04 22:17 [PATCH v4 00/17] Compress the pmu_event tables Ian Rogers
2022-08-04 22:17 ` Ian Rogers
2022-08-04 22:18 ` [PATCH v4 01/17] perf jevents: Clean up pytype warnings Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-09 19:36   ` Arnaldo Carvalho de Melo
2022-08-09 19:36     ` Arnaldo Carvalho de Melo
2022-08-04 22:18 ` [PATCH v4 02/17] perf jevents: Simplify generation of C-string Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-09 19:37   ` Arnaldo Carvalho de Melo
2022-08-09 19:37     ` Arnaldo Carvalho de Melo
2022-08-04 22:18 ` [PATCH v4 03/17] perf jevents: Add JEVENTS_ARCH make option Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-05  9:55   ` John Garry
2022-08-05  9:55     ` John Garry
2022-08-09 19:38     ` Arnaldo Carvalho de Melo
2022-08-09 19:38       ` Arnaldo Carvalho de Melo
2022-08-04 22:18 ` [PATCH v4 04/17] perf jevent: Add an 'all' architecture argument Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-05 10:34   ` John Garry
2022-08-05 10:34     ` John Garry
2022-08-04 22:18 ` [PATCH v4 05/17] perf jevents: Remove the type/version variables Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-05 10:35   ` John Garry
2022-08-05 10:35     ` John Garry
2022-08-04 22:18 ` [PATCH v4 06/17] perf jevents: Provide path to json file on error Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-04 22:18 ` [PATCH v4 07/17] perf jevents: Sort json files entries Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-05 10:49   ` John Garry
2022-08-05 10:49     ` John Garry
2022-08-10 14:23     ` Ian Rogers
2022-08-10 14:23       ` Ian Rogers
2022-08-10 15:53       ` John Garry
2022-08-10 15:53         ` John Garry
2022-08-04 22:18 ` [PATCH v4 08/17] perf pmu-events: Hide pmu_sys_event_tables Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-05 11:15   ` John Garry
2022-08-05 11:15     ` John Garry
2022-08-10 14:25     ` Ian Rogers
2022-08-10 14:25       ` Ian Rogers
2022-08-04 22:18 ` [PATCH v4 09/17] perf pmu-events: Avoid passing pmu_events_map Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-05 11:28   ` John Garry
2022-08-05 11:28     ` John Garry
2022-08-10 15:23     ` Ian Rogers
2022-08-10 15:23       ` Ian Rogers
2022-08-04 22:18 ` [PATCH v4 10/17] perf pmu-events: Hide pmu_events_map Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-05 12:31   ` John Garry
2022-08-05 12:31     ` John Garry
2022-08-10 14:29     ` Ian Rogers [this message]
2022-08-10 14:29       ` Ian Rogers
2022-08-11 14:47       ` John Garry
2022-08-11 14:47         ` John Garry
2022-08-04 22:18 ` [PATCH v4 11/17] perf test: Use full metric resolution Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-04 22:18 ` [PATCH v4 12/17] perf pmu-events: Move test events/metrics to json Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-05 12:34   ` John Garry
2022-08-05 12:34     ` John Garry
2022-08-04 22:18 ` [PATCH v4 13/17] perf pmu-events: Don't assume pmu_event is an array Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-05 12:56   ` John Garry
2022-08-05 12:56     ` John Garry
2022-08-04 22:18 ` [PATCH v4 14/17] perf pmu-events: Hide the pmu_events Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-04 22:18 ` [PATCH v4 15/17] perf metrics: Copy entire pmu_event in find metric Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-04 22:18 ` [PATCH v4 16/17] perf jevents: Compress the pmu_events_table Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-05 14:02   ` John Garry
2022-08-05 14:02     ` John Garry
2022-08-10 14:35     ` Ian Rogers
2022-08-10 14:35       ` Ian Rogers
2022-08-04 22:18 ` [PATCH v4 17/17] perf jevents: Fold strings optimization Ian Rogers
2022-08-04 22:18   ` Ian Rogers
2022-08-09 19:40 ` [PATCH v4 00/17] Compress the pmu_event tables Arnaldo Carvalho de Melo
2022-08-09 19:40   ` Arnaldo Carvalho de Melo
2022-08-09 19:41   ` Arnaldo Carvalho de Melo
2022-08-09 19:41     ` Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAP-5=fXuG9Jt5x-e3um=-hYNSb18j8dL5np5Edozw+H5PoZ2eA@mail.gmail.com' \
    --to=irogers@google.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=eranian@google.com \
    --cc=james.clark@arm.com \
    --cc=john.garry@huawei.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=leo.yan@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mike.leach@linaro.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=ravi.bangoria@amd.com \
    --cc=will@kernel.org \
    --cc=zhengjun.xing@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.