|
@@ -4210,6 +4210,14 @@ static void __perf_event_period(struct perf_event *event,
|
|
|
active = (event->state == PERF_EVENT_STATE_ACTIVE);
|
|
|
if (active) {
|
|
|
perf_pmu_disable(ctx->pmu);
|
|
|
+ /*
|
|
|
+ * We could be throttled; unthrottle now to avoid the tick
|
|
|
+ * trying to unthrottle while we already re-started the event.
|
|
|
+ */
|
|
|
+ if (event->hw.interrupts == MAX_INTERRUPTS) {
|
|
|
+ event->hw.interrupts = 0;
|
|
|
+ perf_log_throttle(event, 1);
|
|
|
+ }
|
|
|
event->pmu->stop(event, PERF_EF_UPDATE);
|
|
|
}
|
|
|
|