f8ea2c1524
Add a metrics table that is just a cast from pmu_events_table. This changes the APIs so that event and metric usage of the underlying table is different. For the no jevents case the tables are already separate, later changes will separate the tables for the jevents case. Reviewed-by: Kajol Jain <kjain@linux.ibm.com> Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Caleb Biggers <caleb.biggers@intel.com> Cc: Florian Fischer <florian.fischer@muhq.space> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@arm.com> Cc: Jing Zhang <renyu.zj@linux.alibaba.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: John Garry <john.g.garry@oracle.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Kang Minchul <tegongkang@gmail.com> Cc: Kim Phillips <kim.phillips@amd.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Mike Leach <mike.leach@linaro.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Perry Taylor <perry.taylor@intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Rob Herring <robh@kernel.org> Cc: Sandipan Das <sandipan.das@amd.com> Cc: Stephane Eranian <eranian@google.com> Cc: Will Deacon <will@kernel.org> Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com> Cc: linux-arm-kernel@lists.infradead.org Cc: linuxppc-dev@lists.ozlabs.org Link: https://lore.kernel.org/r/20230126233645.200509-10-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
70 lines
2.0 KiB
C
70 lines
2.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef PMU_EVENTS_H
|
|
#define PMU_EVENTS_H
|
|
|
|
struct perf_pmu;
|
|
|
|
enum aggr_mode_class {
|
|
PerChip = 1,
|
|
PerCore
|
|
};
|
|
|
|
/*
|
|
* Describe each PMU event. Each CPU has a table of PMU events.
|
|
*/
|
|
struct pmu_event {
|
|
const char *name;
|
|
const char *compat;
|
|
const char *event;
|
|
const char *desc;
|
|
const char *topic;
|
|
const char *long_desc;
|
|
const char *pmu;
|
|
const char *unit;
|
|
const char *perpkg;
|
|
const char *aggr_mode;
|
|
const char *deprecated;
|
|
};
|
|
|
|
struct pmu_metric {
|
|
const char *metric_name;
|
|
const char *metric_group;
|
|
const char *metric_expr;
|
|
const char *unit;
|
|
const char *compat;
|
|
const char *aggr_mode;
|
|
const char *metric_constraint;
|
|
const char *desc;
|
|
const char *long_desc;
|
|
};
|
|
|
|
struct pmu_events_table;
|
|
struct pmu_metrics_table;
|
|
|
|
typedef int (*pmu_event_iter_fn)(const struct pmu_event *pe,
|
|
const struct pmu_events_table *table,
|
|
void *data);
|
|
|
|
typedef int (*pmu_metric_iter_fn)(const struct pmu_metric *pm,
|
|
const struct pmu_metrics_table *table,
|
|
void *data);
|
|
|
|
int pmu_events_table_for_each_event(const struct pmu_events_table *table, pmu_event_iter_fn fn,
|
|
void *data);
|
|
int pmu_metrics_table_for_each_metric(const struct pmu_metrics_table *table, pmu_metric_iter_fn fn,
|
|
void *data);
|
|
|
|
const struct pmu_events_table *perf_pmu__find_events_table(struct perf_pmu *pmu);
|
|
const struct pmu_metrics_table *perf_pmu__find_metrics_table(struct perf_pmu *pmu);
|
|
const struct pmu_events_table *find_core_events_table(const char *arch, const char *cpuid);
|
|
const struct pmu_metrics_table *find_core_metrics_table(const char *arch, const char *cpuid);
|
|
int pmu_for_each_core_event(pmu_event_iter_fn fn, void *data);
|
|
int pmu_for_each_core_metric(pmu_metric_iter_fn fn, void *data);
|
|
|
|
const struct pmu_events_table *find_sys_events_table(const char *name);
|
|
const struct pmu_metrics_table *find_sys_metrics_table(const char *name);
|
|
int pmu_for_each_sys_event(pmu_event_iter_fn fn, void *data);
|
|
int pmu_for_each_sys_metric(pmu_metric_iter_fn fn, void *data);
|
|
|
|
#endif
|