On Thu, Oct 08, 2020 at 11:19:28PM +0800, John Garry wrote: > The event code for events referencing std arch events is incorrectly > evaluated in json_events(). > > The issue is that je.event is evaluated properly from try_fixup(), but > later NULLified from the real_event() call, as "event" may be NULL. > > Fix by setting "event" same je.event in try_fixup(). > > Also remove support for overwriting event code for events using std arch > events, as it is not used. > > Signed-off-by: John Garry <john.ga...@huawei.com> > > diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c > index 99df41a9543d..e47644cab3fa 100644 > --- a/tools/perf/pmu-events/jevents.c > +++ b/tools/perf/pmu-events/jevents.c > @@ -505,20 +505,15 @@ static char *real_event(const char *name, char *event) > } > > static int > -try_fixup(const char *fn, char *arch_std, unsigned long long eventcode, > - struct json_event *je) > +try_fixup(const char *fn, char *arch_std, struct json_event *je, char > **event) > { > /* try to find matching event from arch standard values */ > struct event_struct *es; > > list_for_each_entry(es, &arch_std_events, list) { > if (!strcmp(arch_std, es->name)) { > - if (!eventcode && es->event) { > - /* allow EventCode to be overridden */ > - free(je->event); > - je->event = NULL; > - } > FOR_ALL_EVENT_STRUCT_FIELDS(TRY_FIXUP_FIELD); > + *event = je->event;
I'm bit rusty on this code, but isn't je->event NULL at this point? jirka > return 0; > } > } > @@ -678,7 +673,7 @@ static int json_events(const char *fn, > * An arch standard event is referenced, so try to > * fixup any unassigned values. > */ > - err = try_fixup(fn, arch_std, eventcode, &je); > + err = try_fixup(fn, arch_std, &je, &event); > if (err) > goto free_strings; > } > -- > 2.26.2 >