|
@@ -126,6 +126,13 @@ static int ppro_check_ctrs(struct pt_regs * const regs,
|
|
u64 val;
|
|
u64 val;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * This can happen if perf counters are in use when
|
|
|
|
+ * we steal the die notifier NMI.
|
|
|
|
+ */
|
|
|
|
+ if (unlikely(!reset_value))
|
|
|
|
+ goto out;
|
|
|
|
+
|
|
for (i = 0 ; i < num_counters; ++i) {
|
|
for (i = 0 ; i < num_counters; ++i) {
|
|
if (!reset_value[i])
|
|
if (!reset_value[i])
|
|
continue;
|
|
continue;
|
|
@@ -136,6 +143,7 @@ static int ppro_check_ctrs(struct pt_regs * const regs,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+out:
|
|
/* Only P6 based Pentium M need to re-unmask the apic vector but it
|
|
/* Only P6 based Pentium M need to re-unmask the apic vector but it
|
|
* doesn't hurt other P6 variant */
|
|
* doesn't hurt other P6 variant */
|
|
apic_write(APIC_LVTPC, apic_read(APIC_LVTPC) & ~APIC_LVT_MASKED);
|
|
apic_write(APIC_LVTPC, apic_read(APIC_LVTPC) & ~APIC_LVT_MASKED);
|