Commit 7298e876 authored by John Garry's avatar John Garry Committed by Arnaldo Carvalho de Melo

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: default avatarIan Rogers <irogers@google.com>
Signed-off-by: default avatarJohn Garry <john.g.garry@oracle.com>
Tested-by: default avatarIlkka Koskinen <ilkka@os.amperecomputing.com>
Link: https://lore.kernel.org/r/20230807111631.3033102-1-john.g.garry@oracle.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 64917f4d
...@@ -347,12 +347,15 @@ class JsonEvent: ...@@ -347,12 +347,15 @@ class JsonEvent:
if self.desc and not self.desc.endswith('. '): if self.desc and not self.desc.endswith('. '):
self.desc += '. ' self.desc += '. '
self.desc = (self.desc if self.desc else '') + ('Unit: ' + self.pmu + ' ') self.desc = (self.desc if self.desc else '') + ('Unit: ' + self.pmu + ' ')
if arch_std and arch_std.lower() in _arch_std_events: if arch_std:
event = _arch_std_events[arch_std.lower()].event if arch_std.lower() in _arch_std_events:
# Copy from the architecture standard event to self for undefined fields. event = _arch_std_events[arch_std.lower()].event
for attr, value in _arch_std_events[arch_std.lower()].__dict__.items(): # Copy from the architecture standard event to self for undefined fields.
if hasattr(self, attr) and not getattr(self, attr): for attr, value in _arch_std_events[arch_std.lower()].__dict__.items():
setattr(self, attr, value) 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) self.event = real_event(self.name, event)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment