From: Suravee S. <sur...@am...> - 2013-03-14 18:30:37
|
Andi, Maynard; This patch has broken the case: ophelp -c x86-64/family15h -e CPU_CLK_UNHALTED:100000 where we do not specify the unitmask. Here it should have picked up the default value (0). Suravee On 3/8/2013 6:58 PM, Andi Kleen wrote: > From: Andi Kleen <ak...@li...> > > When the default mask is chosen always use the first match, > as we assume the event files are ok. > > Signed-off-by: Andi Kleen <ak...@li...> > --- > libop/op_events.c | 19 ++++++++++++++++++- > 1 files changed, 18 insertions(+), 1 deletions(-) > > diff --git a/libop/op_events.c b/libop/op_events.c > index 8ca07d9..46c854d 100644 > --- a/libop/op_events.c > +++ b/libop/op_events.c > @@ -1324,9 +1324,19 @@ static void extra_check(struct op_event *e, char *name, unsigned w) > } > } > > +static char *save_word(const char *s) > +{ > + int len = strcspn(s, " \t"); > + char *n = xmalloc(len + 1); > + memcpy(n, s, len); > + n[len] = 0; > + return n; > +} > + > static void do_resolve_unit_mask(struct op_event *e, struct parsed_event *pe, u32 *extra) > { > unsigned i; > + int used_default = 0; > > for (;;) { > if (pe->unit_mask_name == NULL) { > @@ -1337,14 +1347,21 @@ static void do_resolve_unit_mask(struct op_event *e, struct parsed_event *pe, u3 > if (!pe->unit_mask_valid) { > pe->unit_mask_valid = 1; > pe->unit_mask = e->unit->default_mask; > + used_default = 1; > } > > /* Checking to see there are any duplicate numerical unit mask > * in which case it should be using named unit mask instead. > */ > for (i = 0; i < e->unit->num; i++) { > - if (e->unit->um[i].value == (unsigned int)pe->unit_mask) > + if (e->unit->um[i].value == (unsigned int)pe->unit_mask) { > found++; > + if (used_default) { > + pe->unit_mask_name = > + save_word(e->unit->um[i].desc); > + break; > + } > + } > } > if (found > 1) { > fprintf(stderr, "Unit mask (0x%x) is non unique.\n" |