Skip to content

Commit 3581fe0

Browse files
wildea01Russell King
authored andcommitted
ARM: 7556/1: perf: fix updated event period in response to PERF_EVENT_IOC_PERIOD
The PERF_EVENT_IOC_PERIOD ioctl command can be used to change the sample period of a running perf_event. Consequently, when calculating the next event period, the new period will only be considered after the previous one has overflowed. This patch changes the calculation of the remaining event ticks so that they are offset if the period has changed. Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Reported-by: Andreas Sandberg <andreas.sandberg@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
1 parent 2456f44 commit 3581fe0

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

arch/arm/kernel/perf_event.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ armpmu_event_set_period(struct perf_event *event,
9696
s64 period = hwc->sample_period;
9797
int ret = 0;
9898

99+
/* The period may have been changed by PERF_EVENT_IOC_PERIOD */
100+
if (unlikely(period != hwc->last_period))
101+
left = period - (hwc->last_period - left);
102+
99103
if (unlikely(left <= -period)) {
100104
left = period;
101105
local64_set(&hwc->period_left, left);

0 commit comments

Comments
 (0)