|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.2] AMD IOMMU: fail if there is no southbridge IO-APIC
commit 6bf0275ab0b403fb6327691a06f59bbf71fa323a
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Thu Feb 13 10:18:13 2014 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Feb 13 10:18:13 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 a0ed7b7..a444a5d 100644
--- a/xen/drivers/passthrough/amd/iommu_acpi.c
+++ b/xen/drivers/passthrough/amd/iommu_acpi.c
@@ -882,6 +882,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);
@@ -915,8 +916,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",
@@ -935,6 +943,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.2
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |