WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Fix acknowledgement of level-triggered IOAPIC interrupts

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Fix acknowledgement of level-triggered IOAPIC interrupts. This is a
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Tue, 10 May 2005 16:45:22 +0000
Delivery-date: Tue, 10 May 2005 17:03:32 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Fix acknowledgement of level-triggered IOAPIC interrupts. This is a, BitKeeper Bot <=