perf/x86-ibs: Trigger overflow if remaining period is too small
authorRobert Richter <robert.richter@amd.com>
Mon, 2 Apr 2012 18:19:14 +0000 (20:19 +0200)
committerIngo Molnar <mingo@kernel.org>
Wed, 9 May 2012 13:23:15 +0000 (15:23 +0200)
There are cases where the remaining period is smaller than the minimal
possible value. In this case the counter is restarted with the minimal
period. This is of no use as the interrupt handler will trigger
immediately again and most likely hits itself. This biases the
results.

So, if the remaining period is within the min range, we better do not
restart the counter and instead trigger the overflow.

Signed-off-by: Robert Richter <robert.richter@amd.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1333390758-10893-9-git-send-email-robert.richter@amd.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/kernel/cpu/perf_event_amd_ibs.c

index 29a1bffe1dfb9144d2c0642345765faf61fceefb..3e32908292a7e9d0ab05d56bf22ceb873122df6d 100644 (file)
@@ -78,16 +78,13 @@ perf_event_set_period(struct hw_perf_event *hwc, u64 min, u64 max, u64 *hw_perio
                overflow = 1;
        }
 
-       if (unlikely(left <= 0)) {
+       if (unlikely(left < (s64)min)) {
                left += period;
                local64_set(&hwc->period_left, left);
                hwc->last_period = period;
                overflow = 1;
        }
 
-       if (unlikely(left < min))
-               left = min;
-
        if (left > max)
                left = max;