|
@@ -29,6 +29,17 @@ static int arm_pmu_acpi_register_irq(int cpu)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
gsi = gicc->performance_interrupt;
|
|
gsi = gicc->performance_interrupt;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Per the ACPI spec, the MADT cannot describe a PMU that doesn't
|
|
|
|
+ * have an interrupt. QEMU advertises this by using a GSI of zero,
|
|
|
|
+ * which is not known to be valid on any hardware despite being
|
|
|
|
+ * valid per the spec. Take the pragmatic approach and reject a
|
|
|
|
+ * GSI of zero for now.
|
|
|
|
+ */
|
|
|
|
+ if (!gsi)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
if (gicc->flags & ACPI_MADT_PERFORMANCE_IRQ_MODE)
|
|
if (gicc->flags & ACPI_MADT_PERFORMANCE_IRQ_MODE)
|
|
trigger = ACPI_EDGE_SENSITIVE;
|
|
trigger = ACPI_EDGE_SENSITIVE;
|
|
else
|
|
else
|