summaryrefslogtreecommitdiff
path: root/kernels/xen/bios_workaround.patch
diff options
context:
space:
mode:
Diffstat (limited to 'kernels/xen/bios_workaround.patch')
-rw-r--r--kernels/xen/bios_workaround.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/kernels/xen/bios_workaround.patch b/kernels/xen/bios_workaround.patch
new file mode 100644
index 000000000..12fc00184
--- /dev/null
+++ b/kernels/xen/bios_workaround.patch
@@ -0,0 +1,51 @@
+--- xen-4.3.1.orig/xen/drivers/passthrough/amd/iommu_acpi.c 2013-07-09 05:46:56.000000000 -0500
++++ xen-4.3.1/xen/drivers/passthrough/amd/iommu_acpi.c 2013-07-18 02:31:38.767195258 -0500
+@@ -668,26 +668,26 @@
+ */
+ for ( apic = 0; apic < nr_ioapics; apic++ )
+ {
+- if ( IO_APIC_ID(apic) != special->handle )
++ if ( ioapic_sbdf[IO_APIC_ID(apic)].bdf != ioapic_sbdf[special->handle].bdf )
+ continue;
+
+- if ( special->handle >= ARRAY_SIZE(ioapic_sbdf) )
++ if ( IO_APIC_ID(apic) >= ARRAY_SIZE(ioapic_sbdf) )
+ {
+ printk(XENLOG_ERR "IVHD Error: IO-APIC %#x entry beyond bounds\n",
+- special->handle);
++ IO_APIC_ID(apic));
+ return 0;
+ }
+
+- if ( ioapic_sbdf[special->handle].pin_setup )
++ if ( ioapic_sbdf[IO_APIC_ID(apic)].pin_setup )
+ {
+- if ( ioapic_sbdf[special->handle].bdf == bdf &&
+- ioapic_sbdf[special->handle].seg == seg )
++ if ( ioapic_sbdf[IO_APIC_ID(apic)].bdf == bdf &&
++ ioapic_sbdf[IO_APIC_ID(apic)].seg == seg )
+ AMD_IOMMU_DEBUG("IVHD Warning: Duplicate IO-APIC %#x entries\n",
+- special->handle);
++ IO_APIC_ID(apic));
+ else
+ {
+ printk(XENLOG_ERR "IVHD Error: Conflicting IO-APIC %#x entries\n",
+- special->handle);
++ IO_APIC_ID(apic));
+ if ( amd_iommu_perdev_intremap )
+ return 0;
+ }
+@@ -695,10 +695,10 @@
+ else
+ {
+ /* set device id of ioapic */
+- ioapic_sbdf[special->handle].bdf = bdf;
+- ioapic_sbdf[special->handle].seg = seg;
++ ioapic_sbdf[IO_APIC_ID(apic)].bdf = bdf;
++ ioapic_sbdf[IO_APIC_ID(apic)].seg = seg;
+
+- ioapic_sbdf[special->handle].pin_setup = xzalloc_array(
++ ioapic_sbdf[IO_APIC_ID(apic)].pin_setup = xzalloc_array(
+ unsigned long, BITS_TO_LONGS(nr_ioapic_entries[apic]));
+ if ( nr_ioapic_entries[apic] &&
+ !ioapic_sbdf[IO_APIC_ID(apic)].pin_setup )