|
@@ -660,8 +660,12 @@ static int p4_pmu_handle_irq(struct pt_regs *regs)
|
|
for (idx = 0; idx < x86_pmu.num_counters; idx++) {
|
|
for (idx = 0; idx < x86_pmu.num_counters; idx++) {
|
|
int overflow;
|
|
int overflow;
|
|
|
|
|
|
- if (!test_bit(idx, cpuc->active_mask))
|
|
|
|
|
|
+ if (!test_bit(idx, cpuc->active_mask)) {
|
|
|
|
+ /* catch in-flight IRQs */
|
|
|
|
+ if (__test_and_clear_bit(idx, cpuc->running))
|
|
|
|
+ handled++;
|
|
continue;
|
|
continue;
|
|
|
|
+ }
|
|
|
|
|
|
event = cpuc->events[idx];
|
|
event = cpuc->events[idx];
|
|
hwc = &event->hw;
|
|
hwc = &event->hw;
|