When you iterate a list, using the iterator is useful.
Before:
   ID: 5
   ID: 5
   ID: 5
   ID: 5
   EVNT: 0x40088b scale: nan ID: 5 CNT: 
1006252 ID: 6 CNT: 
1011090 ID: 7 CNT: 
1011196 ID: 8 CNT: 
1011095
   EVNT: 0x40088c scale: 1.000000 ID: 5 CNT: 
2003065 ID: 6 CNT: 
2011671 ID: 7 CNT: 
2012620 ID: 8 CNT: 
2013479
   EVNT: 0x40088c scale: 1.000000 ID: 5 CNT: 
3002390 ID: 6 CNT: 
3015996 ID: 7 CNT: 
3018019 ID: 8 CNT: 
3020006
   EVNT: 0x40088b scale: 1.000000 ID: 5 CNT: 
4002406 ID: 6 CNT: 
4021120 ID: 7 CNT: 
4024241 ID: 8 CNT: 
4027059
After:
   ID: 1
   ID: 2
   ID: 3
   ID: 4
   EVNT: 0x400889 scale: nan ID: 1 CNT: 
1005270 ID: 2 CNT: 
1009833 ID: 3 CNT: 
1010065 ID: 4 CNT: 
1010088
   EVNT: 0x400898 scale: nan ID: 1 CNT: 
2001531 ID: 2 CNT: 
2022309 ID: 3 CNT: 
2022470 ID: 4 CNT: 
2022627
   EVNT: 0x400888 scale: 0.489467 ID: 1 CNT: 
3001261 ID: 2 CNT: 
3027088 ID: 3 CNT: 
3027941 ID: 4 CNT: 
3028762
Reported-by: stephane eranian <eranian@googlemail.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Corey J Ashford <cjashfor@us.ibm.com>
Cc: perfmon2-devel <perfmon2-devel@lists.sourceforge.net>
LKML-Reference: <
1250867976.7538.73.camel@twins>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
        size += err;
 
        list_for_each_entry(sub, &leader->sibling_list, list_entry) {
-               err = perf_counter_read_entry(counter, read_format,
+               err = perf_counter_read_entry(sub, read_format,
                                buf + size);
                if (err < 0)
                        return err;