mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 14:43:16 +00:00
perf jevent: Add an 'all' architecture argument
When 'all' is passed as the architecture generate a mapping table for all architectures. This simplifies testing. To identify the table for an architecture add an arch variable to the pmu_events_map. Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@arm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: John Garry <john.garry@huawei.com> Cc: Kan Liang <kan.liang@linux.intel.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: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@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 Link: https://lore.kernel.org/r/20220812230949.683239-2-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
8d33834f9f
commit
099b157c08
@ -110,12 +110,14 @@ static const struct pmu_event pme_test_soc_cpu[] = {
|
||||
|
||||
const struct pmu_events_map pmu_events_map[] = {
|
||||
{
|
||||
.arch = "testarch",
|
||||
.cpuid = "testcpu",
|
||||
.version = "v1",
|
||||
.type = "core",
|
||||
.table = pme_test_soc_cpu,
|
||||
},
|
||||
{
|
||||
.arch = 0,
|
||||
.cpuid = 0,
|
||||
.version = 0,
|
||||
.type = 0,
|
||||
|
@ -305,38 +305,45 @@ def process_one_file(parents: Sequence[str], item: os.DirEntry) -> None:
|
||||
print_events_table_entries(item, get_topic(item.name))
|
||||
|
||||
|
||||
def print_mapping_table() -> None:
|
||||
def print_mapping_table(archs: Sequence[str]) -> None:
|
||||
"""Read the mapfile and generate the struct from cpuid string to event table."""
|
||||
with open(f'{_args.starting_dir}/{_args.arch}/mapfile.csv') as csvfile:
|
||||
table = csv.reader(csvfile)
|
||||
_args.output_file.write(
|
||||
'const struct pmu_events_map pmu_events_map[] = {\n')
|
||||
first = True
|
||||
for row in table:
|
||||
# Skip the first row or any row beginning with #.
|
||||
if not first and len(row) > 0 and not row[0].startswith('#'):
|
||||
tblname = file_name_to_table_name([], row[2].replace('/', '_'))
|
||||
_args.output_file.write("""{
|
||||
\t.cpuid = \"%s\",
|
||||
\t.version = \"%s\",
|
||||
\t.type = \"%s\",
|
||||
\t.table = %s
|
||||
},
|
||||
""" % (row[0].replace('\\', '\\\\'), row[1], row[3], tblname))
|
||||
first = False
|
||||
|
||||
_args.output_file.write("""{
|
||||
_args.output_file.write('const struct pmu_events_map pmu_events_map[] = {\n')
|
||||
for arch in archs:
|
||||
if arch == 'test':
|
||||
_args.output_file.write("""{
|
||||
\t.arch = "testarch",
|
||||
\t.cpuid = "testcpu",
|
||||
\t.version = "v1",
|
||||
\t.type = "core",
|
||||
\t.table = pme_test_soc_cpu,
|
||||
},
|
||||
{
|
||||
""")
|
||||
else:
|
||||
with open(f'{_args.starting_dir}/{arch}/mapfile.csv') as csvfile:
|
||||
table = csv.reader(csvfile)
|
||||
first = True
|
||||
for row in table:
|
||||
# Skip the first row or any row beginning with #.
|
||||
if not first and len(row) > 0 and not row[0].startswith('#'):
|
||||
tblname = file_name_to_table_name([], row[2].replace('/', '_'))
|
||||
cpuid = row[0].replace('\\', '\\\\')
|
||||
_args.output_file.write(f"""{{
|
||||
\t.arch = "{arch}",
|
||||
\t.cpuid = "{cpuid}",
|
||||
\t.version = "{row[1]}",
|
||||
\t.type = "{row[3]}",
|
||||
\t.table = {tblname}
|
||||
}},
|
||||
""")
|
||||
first = False
|
||||
|
||||
_args.output_file.write("""{
|
||||
\t.arch = 0,
|
||||
\t.cpuid = 0,
|
||||
\t.version = 0,
|
||||
\t.type = 0,
|
||||
\t.table = 0,
|
||||
},
|
||||
}
|
||||
};
|
||||
""")
|
||||
|
||||
@ -387,15 +394,24 @@ def main() -> None:
|
||||
_args = ap.parse_args()
|
||||
|
||||
_args.output_file.write("#include \"pmu-events/pmu-events.h\"\n")
|
||||
for path in [_args.arch, 'test']:
|
||||
arch_path = f'{_args.starting_dir}/{path}'
|
||||
if not os.path.isdir(arch_path):
|
||||
raise IOError(f'Missing architecture directory in \'{arch_path}\'')
|
||||
archs = []
|
||||
for item in os.scandir(_args.starting_dir):
|
||||
if not item.is_dir():
|
||||
continue
|
||||
if item.name == _args.arch or _args.arch == 'all' or item.name == 'test':
|
||||
archs.append(item.name)
|
||||
|
||||
if len(archs) < 2:
|
||||
raise IOError(f'Missing architecture directory \'{_args.arch}\'')
|
||||
|
||||
archs.sort()
|
||||
for arch in archs:
|
||||
arch_path = f'{_args.starting_dir}/{arch}'
|
||||
preprocess_arch_std_files(arch_path)
|
||||
ftw(arch_path, [], process_one_file)
|
||||
print_events_table_suffix()
|
||||
|
||||
print_mapping_table()
|
||||
print_mapping_table(archs)
|
||||
print_system_mapping_table()
|
||||
|
||||
|
||||
|
@ -38,6 +38,7 @@ struct pmu_event {
|
||||
* The cpuid can contain any character other than the comma.
|
||||
*/
|
||||
struct pmu_events_map {
|
||||
const char *arch;
|
||||
const char *cpuid;
|
||||
const char *version;
|
||||
const char *type; /* core, uncore etc */
|
||||
|
@ -864,8 +864,7 @@ static void expr_failure(const char *msg,
|
||||
const struct pmu_events_map *map,
|
||||
const struct pmu_event *pe)
|
||||
{
|
||||
pr_debug("%s for map %s %s %s\n",
|
||||
msg, map->cpuid, map->version, map->type);
|
||||
pr_debug("%s for map %s %s\n", msg, map->arch, map->cpuid);
|
||||
pr_debug("On metric %s\n", pe->metric_name);
|
||||
pr_debug("On expression %s\n", pe->metric_expr);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user