lkml.org 
[lkml]   [2017]   [Sep]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 06/41] perf pmu: Extract function to get JSON alias map
    Date
    From: Andi Kleen <ak@linux.intel.com>

    Extract the code to get the per cpu JSON alias into a separate function
    for reuse. No behavior changes.

    Signed-off-by: Andi Kleen <ak@linux.intel.com>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Link: http://lkml.kernel.org/r/20170831194036.30146-6-andi@firstfloor.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/pmu.c | 49 +++++++++++++++++++++++++++++++++----------------
    tools/perf/util/pmu.h | 2 ++
    2 files changed, 35 insertions(+), 16 deletions(-)

    diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
    index ac16a9db1fb5..ed25d7f88731 100644
    --- a/tools/perf/util/pmu.c
    +++ b/tools/perf/util/pmu.c
    @@ -516,16 +516,8 @@ char * __weak get_cpuid_str(void)
    return NULL;
    }

    -/*
    - * From the pmu_events_map, find the table of PMU events that corresponds
    - * to the current running CPU. Then, add all PMU events from that table
    - * as aliases.
    - */
    -static void pmu_add_cpu_aliases(struct list_head *head, const char *name)
    +static char *perf_pmu__getcpuid(void)
    {
    - int i;
    - struct pmu_events_map *map;
    - struct pmu_event *pe;
    char *cpuid;
    static bool printed;

    @@ -535,22 +527,50 @@ static void pmu_add_cpu_aliases(struct list_head *head, const char *name)
    if (!cpuid)
    cpuid = get_cpuid_str();
    if (!cpuid)
    - return;
    + return NULL;

    if (!printed) {
    pr_debug("Using CPUID %s\n", cpuid);
    printed = true;
    }
    + return cpuid;
    +}
    +
    +struct pmu_events_map *perf_pmu__find_map(void)
    +{
    + struct pmu_events_map *map;
    + char *cpuid = perf_pmu__getcpuid();
    + int i;

    i = 0;
    - while (1) {
    + for (;;) {
    map = &pmu_events_map[i++];
    - if (!map->table)
    - goto out;
    + if (!map->table) {
    + map = NULL;
    + break;
    + }

    if (!strcmp(map->cpuid, cpuid))
    break;
    }
    + free(cpuid);
    + return map;
    +}
    +
    +/*
    + * From the pmu_events_map, find the table of PMU events that corresponds
    + * to the current running CPU. Then, add all PMU events from that table
    + * as aliases.
    + */
    +static void pmu_add_cpu_aliases(struct list_head *head, const char *name)
    +{
    + int i;
    + struct pmu_events_map *map;
    + struct pmu_event *pe;
    +
    + map = perf_pmu__find_map();
    + if (!map)
    + return;

    /*
    * Found a matching PMU events table. Create aliases
    @@ -575,9 +595,6 @@ static void pmu_add_cpu_aliases(struct list_head *head, const char *name)
    (char *)pe->metric_expr,
    (char *)pe->metric_name);
    }
    -
    -out:
    - free(cpuid);
    }

    struct perf_event_attr * __weak
    diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
    index 389e9729331f..060f6abba8ed 100644
    --- a/tools/perf/util/pmu.h
    +++ b/tools/perf/util/pmu.h
    @@ -90,4 +90,6 @@ int perf_pmu__test(void);

    struct perf_event_attr *perf_pmu__get_default_config(struct perf_pmu *pmu);

    +struct pmu_events_map *perf_pmu__find_map(void);
    +
    #endif /* __PMU_H */
    --
    2.13.5
    \
     
     \ /
      Last update: 2017-09-12 17:20    [W:8.674 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site