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

[Xen-changelog] Fix acknowledgement of level-triggered IOAPIC interrupts. This is a



ChangeSet 1.1433, 2005/05/10 17:45:22+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        Fix acknowledgement of level-triggered IOAPIC interrupts. This is a
        second checkin, after disentangling from aborted and utterly broken
        PCI-MSI changes.
        Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>



 arch/x86/io_apic.c        |   32 +++++++++++++++++++++++---------
 include/asm-x86/io_apic.h |    2 --
 2 files changed, 23 insertions(+), 11 deletions(-)


diff -Nru a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c
--- a/xen/arch/x86/io_apic.c    2005-05-10 13:04:05 -04:00
+++ b/xen/arch/x86/io_apic.c    2005-05-10 13:04:05 -04:00
@@ -145,16 +145,16 @@
        __modify_IO_APIC_irq(irq, 0, 0x00010000);
 }
 
-/* mask = 1, trigger = 0 */
-static void __mask_and_edge_IO_APIC_irq (unsigned int irq)
+/* trigger = 0 */
+static void __edge_IO_APIC_irq (unsigned int irq)
 {
-       __modify_IO_APIC_irq(irq, 0x00010000, 0x00008000);
+       __modify_IO_APIC_irq(irq, 0, 0x00008000);
 }
 
-/* mask = 0, trigger = 1 */
-static void __unmask_and_level_IO_APIC_irq (unsigned int irq)
+/* trigger = 1 */
+static void __level_IO_APIC_irq (unsigned int irq)
 {
-       __modify_IO_APIC_irq(irq, 0x00008000, 0x00010000);
+       __modify_IO_APIC_irq(irq, 0x00008000, 0);
 }
 
 static void mask_IO_APIC_irq (unsigned int irq)
@@ -1637,12 +1637,14 @@
        return 0; /* don't check for pending */
 }
 
-static void end_level_ioapic_irq (unsigned int irq)
+static void mask_and_ack_level_ioapic_irq (unsigned int irq)
 {
        unsigned long v;
        int i;
 
        move_irq(irq);
+
+       mask_IO_APIC_irq(irq);
 /*
  * It appears there is an erratum which affects at least version 0x11
  * of I/O APIC (that's the 82093AA and cores integrated into various
@@ -1671,12 +1673,17 @@
        if (!(v & (1 << (i & 0x1f)))) {
                atomic_inc(&irq_mis_count);
                spin_lock(&ioapic_lock);
-               __mask_and_edge_IO_APIC_irq(irq);
-               __unmask_and_level_IO_APIC_irq(irq);
+               __edge_IO_APIC_irq(irq);
+               __level_IO_APIC_irq(irq);
                spin_unlock(&ioapic_lock);
        }
 }
 
+static void end_level_ioapic_irq (unsigned int irq)
+{
+       unmask_IO_APIC_irq(irq);
+}
+
 #ifdef CONFIG_PCI_MSI
 static unsigned int startup_edge_ioapic_vector(unsigned int vector)
 {
@@ -1697,6 +1704,13 @@
        int irq = vector_to_irq(vector);
 
        return startup_level_ioapic_irq (irq);
+}
+
+static void mask_and_ack_level_ioapic_vector (unsigned int vector)
+{
+       int irq = vector_to_irq(vector);
+
+       mask_and_ack_level_ioapic_irq(irq);
 }
 
 static void end_level_ioapic_vector (unsigned int vector)
diff -Nru a/xen/include/asm-x86/io_apic.h b/xen/include/asm-x86/io_apic.h
--- a/xen/include/asm-x86/io_apic.h     2005-05-10 13:04:05 -04:00
+++ b/xen/include/asm-x86/io_apic.h     2005-05-10 13:04:05 -04:00
@@ -17,7 +17,6 @@
 #ifdef CONFIG_PCI_MSI
 static inline int use_pci_vector(void) {return 1;}
 static inline void disable_edge_ioapic_vector(unsigned int vector) { }
-static inline void mask_and_ack_level_ioapic_vector(unsigned int vector) { }
 static inline void end_edge_ioapic_vector (unsigned int vector) { }
 #define startup_level_ioapic   startup_level_ioapic_vector
 #define shutdown_level_ioapic  mask_IO_APIC_vector
@@ -36,7 +35,6 @@
 #else
 static inline int use_pci_vector(void) {return 0;}
 static inline void disable_edge_ioapic_irq(unsigned int irq) { }
-static inline void mask_and_ack_level_ioapic_irq(unsigned int irq) { }
 static inline void end_edge_ioapic_irq (unsigned int irq) { }
 #define startup_level_ioapic   startup_level_ioapic_irq
 #define shutdown_level_ioapic  mask_IO_APIC_irq

_______________________________________________
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®.