summaryrefslogtreecommitdiff
path: root/kernels/xen/bios_workaround.patch
blob: 12fc00184cf4b4207696190a904358e64c487102 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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 )