Re: [PATCH 1/2] perf tools: Fix sample size bit operations

Frederic Weisbecker
2011-05-23T12:39:28Z

On Mon, May 23, 2011 at 01:28:15PM +0200, Ingo Molnar wrote:
>
> * Frederic Weisbecker <fweisbec@gmail.com> wrote:
>
> > What we want is to count the number of bits in the mask,
> > not some other random operation written in the middle
> > of the night.
> >
> > Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
> > Cc: Ingo Molnar <mingo@elte.hu>
> > Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> > Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
> > Cc: Stephane Eranian <eranian@google.com>
> > ---
> > tools/perf/util/event.c | 2 +-
> > 1 files changed, 1 insertions(+), 1 deletions(-)
> >
> > diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
> > index 17c1c3c..d3fa7e4 100644
> > --- a/tools/perf/util/event.c
> > +++ b/tools/perf/util/event.c
> > @@ -42,7 +42,7 @@ int perf_sample_size(u64 sample_type)
> > int i;
> >
> > for (i = 0; i < 64; i++) {
> > - if ((mask << i) & 1)
> > + if (mask & (1 << i))
> > size++;
> > }
>
> I fixed this to be 1UL and applied your fixes out of email - perf top and perf
> report works fine now, so this was a 64-bitness bug (you probably used a 32-bit
> system for testing?).

Nope I was using a 64 machine for testing, but I only tested sched_switch
events with callchains on perf report and perf script.

Perhaps that bug triggered only on perf top or with default cpu-cycle events.

>
> Btw., shouldnt this use hweight() or such?

A real proper way would better have that yeah :)