diff options
author | John Garry <john.g.garry@oracle.com> | 2023-08-07 14:16:31 +0300 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2023-08-21 15:57:05 +0300 |
commit | 7298e876075eea8d2e782bf846ab0b4721afac92 (patch) | |
tree | 4c5b50abe5e22929030cae9c3ae12c672cdd3cec /tools | |
parent | 64917f4df048a0649ea7901c2321f020e71e6f24 (diff) | |
download | linux-7298e876075eea8d2e782bf846ab0b4721afac92.tar.xz |
perf jevents: Raise exception for no definition of a arch std event
Recently Ilkka reported that the JSONs for the AmpereOne arm64-based
platform included a dud event which referenced a non-existent arch std
event [0].
Previously in the times of jevents.c, we would raise an exception for this.
This is still invalid, even though the current code just ignores such an
event.
Re-introduce code to raise an exception for when no definition exists to
help catch as many invalid JSONs as possible.
[0] https://lore.kernel.org/linux-perf-users/9e851e2a-26c7-ba78-cb20-be4337b2916a@oracle.com/
Reviewed-by: Ian Rogers <irogers@google.com>
Signed-off-by: John Garry <john.g.garry@oracle.com>
Tested-by: Ilkka Koskinen <ilkka@os.amperecomputing.com>
Link: https://lore.kernel.org/r/20230807111631.3033102-1-john.g.garry@oracle.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/perf/pmu-events/jevents.py | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py index 8cd561aa606a..98cccc3fcbbd 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -347,12 +347,15 @@ class JsonEvent: if self.desc and not self.desc.endswith('. '): self.desc += '. ' self.desc = (self.desc if self.desc else '') + ('Unit: ' + self.pmu + ' ') - if arch_std and arch_std.lower() in _arch_std_events: - event = _arch_std_events[arch_std.lower()].event - # Copy from the architecture standard event to self for undefined fields. - for attr, value in _arch_std_events[arch_std.lower()].__dict__.items(): - if hasattr(self, attr) and not getattr(self, attr): - setattr(self, attr, value) + if arch_std: + if arch_std.lower() in _arch_std_events: + event = _arch_std_events[arch_std.lower()].event + # Copy from the architecture standard event to self for undefined fields. + for attr, value in _arch_std_events[arch_std.lower()].__dict__.items(): + if hasattr(self, attr) and not getattr(self, attr): + setattr(self, attr, value) + else: + raise argparse.ArgumentTypeError('Cannot find arch std event:', arch_std) self.event = real_event(self.name, event) |