On Mon, Apr 04, 2016 at 06:12:54AM -0700, [email protected] wrote: > From: Kan Liang <[email protected]> > > The calculation of format value also rely on the continuity of the > format. However, uncore event format is not continuous. > E.g. The bit 21 as qpi event is lost. > > perf stat -a -e uncore_qpi_0/event=0x200038,config1=0x1C00, > config2=0x3FE00/ -vvv > ------------------------------------------------------------ > perf_event_attr: > type 10 > size 112 > config 0x38
could you please share the event's format? would be great to have some simple automated test for this one.. thanks, jirka > > > > This patch checks the bit according to the bit position. > > Signed-off-by: Kan Liang <[email protected]> > --- > tools/perf/util/pmu.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c > index bf34468..47c096c 100644 > --- a/tools/perf/util/pmu.c > +++ b/tools/perf/util/pmu.c > @@ -586,14 +586,14 @@ __u64 perf_pmu__format_bits(struct list_head *formats, > const char *name) > static void pmu_format_value(unsigned long *format, __u64 value, __u64 *v, > bool zero) > { > - unsigned long fbit, vbit; > + unsigned long fbit; > > - for (fbit = 0, vbit = 0; fbit < PERF_PMU_FORMAT_BITS; fbit++) { > + for (fbit = 0; fbit < PERF_PMU_FORMAT_BITS; fbit++) { > > if (!test_bit(fbit, format)) > continue; > > - if (value & (1llu << vbit++)) > + if (value & (1llu << fbit)) > *v |= (1llu << fbit); > else if (zero) > *v &= ~(1llu << fbit); > -- > 2.5.5 >

