[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.3] AMD IOMMU: fail if there is no southbridge IO-APIC
commit 5e87340cad27dd198386b43da66a0a30c33ba3db Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Thu Feb 13 10:05:54 2014 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Feb 13 10:05:54 2014 +0100 AMD IOMMU: fail if there is no southbridge IO-APIC ... but interrupt remapping is requested (with per-device remapping tables). Without it, the timer interrupt is usually not working. Inspired by Linux'es "iommu/amd: Work around wrong IOAPIC device-id in IVRS table" (commit c2ff5cf5294bcbd7fa50f7d860e90a66db7e5059) by Joerg Roedel <joerg.roedel@xxxxxxx>. Reported-by: Eric Houby <ehouby@xxxxxxxxx> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Tested-by: Eric Houby <ehouby@xxxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx> master commit: 06bbcaf48d09c18a41c482866941ddd5d2846b44 master date: 2014-02-10 10:05:24 +0100 --- xen/drivers/passthrough/amd/iommu_acpi.c | 20 ++++++++++++++++++-- 1 files changed, 18 insertions(+), 2 deletions(-) diff --git a/xen/drivers/passthrough/amd/iommu_acpi.c b/xen/drivers/passthrough/amd/iommu_acpi.c index a88d223..e7c8499 100644 --- a/xen/drivers/passthrough/amd/iommu_acpi.c +++ b/xen/drivers/passthrough/amd/iommu_acpi.c @@ -900,6 +900,7 @@ static int __init parse_ivrs_table(struct acpi_table_header *table) const struct acpi_ivrs_header *ivrs_block; unsigned long length; unsigned int apic; + bool_t sb_ioapic = !iommu_intremap; int error = 0; BUG_ON(!table); @@ -933,8 +934,15 @@ static int __init parse_ivrs_table(struct acpi_table_header *table) /* Each IO-APIC must have been mentioned in the table. */ for ( apic = 0; !error && iommu_intremap && apic < nr_ioapics; ++apic ) { - if ( !nr_ioapic_entries[apic] || - ioapic_sbdf[IO_APIC_ID(apic)].pin_setup ) + if ( !nr_ioapic_entries[apic] ) + continue; + + if ( !ioapic_sbdf[IO_APIC_ID(apic)].seg && + /* SB IO-APIC is always on this device in AMD systems. */ + ioapic_sbdf[IO_APIC_ID(apic)].bdf == PCI_BDF(0, 0x14, 0) ) + sb_ioapic = 1; + + if ( ioapic_sbdf[IO_APIC_ID(apic)].pin_setup ) continue; printk(XENLOG_ERR "IVHD Error: no information for IO-APIC %#x\n", @@ -953,6 +961,14 @@ static int __init parse_ivrs_table(struct acpi_table_header *table) } } + if ( !error && !sb_ioapic ) + { + if ( amd_iommu_perdev_intremap ) + error = -ENXIO; + printk("%sNo southbridge IO-APIC found in IVRS table\n", + amd_iommu_perdev_intremap ? XENLOG_ERR : XENLOG_WARNING); + } + return error; } -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.3 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |