[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 1 of 1] Intel VT-D: Don't turn x2APIC if there is a missing DRHD entry for the IOAPIC
# HG changeset patch # User Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> # Date 1268154140 18000 # Node ID 81272f761f631d3c0929642fc833b66243b7d2bc # Parent b8d2a4134a6823f6d5179928a0618eaf33be4684 Intel VT-D: Don't turn x2APIC if there is a missing DRHD entry for the IOAPIC. Follow the Linux kernel lead in which the x2APIC is only turned on only if there is an DRHD entry for all IOAPICs in the system. If we don't do this we might enable x2APIC and see various devices not covered by the IOAPIC mentioned in DRHD, not receive any interrupts. Workaround is to use 'x2apic=0' on command line. diff -r b8d2a4134a68 -r 81272f761f63 xen/drivers/passthrough/vtd/intremap.c --- a/xen/drivers/passthrough/vtd/intremap.c Wed Mar 03 17:41:58 2010 +0000 +++ b/xen/drivers/passthrough/vtd/intremap.c Tue Mar 09 12:02:20 2010 -0500 @@ -127,10 +127,17 @@ int iommu_supports_eim(void) { struct acpi_drhd_unit *drhd; + int apic; if ( !iommu_enabled || !iommu_qinval || !iommu_intremap ) return 0; + // We MUST have a DRHD unit for each IOAPIC. + for ( apic = 0; apic < nr_ioapics; apic++ ) + { + if ( ioapic_to_iommu(IO_APIC_ID(apic)) == NULL ) + return 0; + } for_each_drhd_unit ( drhd ) if ( !ecap_queued_inval(drhd->ecap) || !ecap_intr_remap(drhd->ecap) || _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |