diff options
| -rw-r--r-- | arch/arm/kernel/perf_event.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index f7c65adaa428..557e128e4df0 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c | |||
| @@ -116,8 +116,14 @@ int armpmu_event_set_period(struct perf_event *event) | |||
| 116 | ret = 1; | 116 | ret = 1; |
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | if (left > (s64)armpmu->max_period) | 119 | /* |
| 120 | left = armpmu->max_period; | 120 | * Limit the maximum period to prevent the counter value |
| 121 | * from overtaking the one we are about to program. In | ||
| 122 | * effect we are reducing max_period to account for | ||
| 123 | * interrupt latency (and we are being very conservative). | ||
| 124 | */ | ||
| 125 | if (left > (armpmu->max_period >> 1)) | ||
| 126 | left = armpmu->max_period >> 1; | ||
| 121 | 127 | ||
| 122 | local64_set(&hwc->prev_count, (u64)-left); | 128 | local64_set(&hwc->prev_count, (u64)-left); |
| 123 | 129 | ||
