[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] x86: simplify (and fix) clear_IO_APIC{, _pin}()



# HG changeset patch
# User Jan Beulich <jbeulich@xxxxxxxxxx>
# Date 1313503555 -3600
# Node ID fc2be6cb89ad49efd90fe1b650f7efaab72f61b2
# Parent  5c1ebc117f9901bc155d2b92ae902a4144767dfb
x86: simplify (and fix) clear_IO_APIC{,_pin}()

These are used during bootup and (emergency) shutdown only, and their
only purpose is to get the actual IO-APIC's RTE(s) cleared.
Consequently, only the "raw" accessors should be used (and the ones
going through interrupt remapping code can be skipped), with the
exception of determining the delivery mode: This one must always go
through the interrupt remapping path, as in the VT-d case the actual
IO-APIC's RTE will have the delivery mode always set to zero (which
before possibly could have resulted in such an entry getting cleared
in the "raw" pass, though I haven't observed this case in practice).

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---


diff -r 5c1ebc117f99 -r fc2be6cb89ad xen/arch/x86/io_apic.c
--- a/xen/arch/x86/io_apic.c    Tue Aug 16 15:05:30 2011 +0100
+++ b/xen/arch/x86/io_apic.c    Tue Aug 16 15:05:55 2011 +0100
@@ -372,14 +372,12 @@
     spin_unlock_irqrestore(&ioapic_lock, flags);
 }
 
-#define clear_IO_APIC_pin(a,p)     __clear_IO_APIC_pin(a,p,0)
-#define clear_IO_APIC_pin_raw(a,p) __clear_IO_APIC_pin(a,p,1)
-static void __clear_IO_APIC_pin(unsigned int apic, unsigned int pin, int raw)
+static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin)
 {
     struct IO_APIC_route_entry entry;
 
     /* Check delivery_mode to be sure we're not clearing an SMI pin */
-    entry = ioapic_read_entry(apic, pin, raw);
+    entry = __ioapic_read_entry(apic, pin, FALSE);
     if (entry.delivery_mode == dest_SMI)
         return;
 
@@ -388,7 +386,7 @@
      */
     memset(&entry, 0, sizeof(entry));
     entry.mask = 1;
-    ioapic_write_entry(apic, pin, raw, entry);
+    __ioapic_write_entry(apic, pin, TRUE, entry);
 }
 
 static void clear_IO_APIC (void)
@@ -396,10 +394,8 @@
     int apic, pin;
 
     for (apic = 0; apic < nr_ioapics; apic++) {
-        for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) {
+        for (pin = 0; pin < nr_ioapic_registers[apic]; pin++)
             clear_IO_APIC_pin(apic, pin);
-            clear_IO_APIC_pin_raw(apic, pin);
-        }
     }
 }
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.