bug-hurd
[Top][All Lists]
Advanced

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

[PATCH 3/4] Don't call EOI on spurious interrupts


From: Damien Zammit
Subject: [PATCH 3/4] Don't call EOI on spurious interrupts
Date: Mon, 5 Apr 2021 15:29:15 +1000

---
 i386/i386at/interrupt.S | 9 +++------
 x86_64/interrupt.S      | 9 +++------
 2 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/i386/i386at/interrupt.S b/i386/i386at/interrupt.S
index da0eb044..cb314d32 100644
--- a/i386/i386at/interrupt.S
+++ b/i386/i386at/interrupt.S
@@ -33,7 +33,7 @@
 ENTRY(interrupt)
 #ifdef APIC
        cmpl    $255,%eax               /* was this a spurious intr? */
-       je      _null_eoi               /* if so, null eoi handler */
+       je      _no_eoi                 /* if so, just return */
 #endif
        pushl   %eax                    /* save irq number */
        movl    %eax,%ecx               /* copy irq number */
@@ -87,16 +87,13 @@ ENTRY(interrupt)
        ret
 #else
        cmpl    $16,%ecx                /* was this a low ISA intr? */
-       jl      _isa_eoi                /* no, must be PCI */
-       ret                             /* NB: let irq_acknowledge handle pci 
EOI */
+       jge     _no_eoi                 /* no, must be PCI (let irq_ack handle 
EOI) */
 _isa_eoi:
        pushl   %ecx                    /* push irq number */
        call    EXT(ioapic_irq_eoi)     /* ioapic irq specific EOI */
        addl    $4,%esp                 /* pop irq number */
        call    EXT(lapic_eoi)          /* lapic broadcast EOI */
-       ret
-_null_eoi:
-       call    EXT(lapic_eoi)          /* lapic broadcast EOI */
+_no_eoi:
        ret
 #endif
 END(interrupt)
diff --git a/x86_64/interrupt.S b/x86_64/interrupt.S
index 779eae67..0dfda313 100644
--- a/x86_64/interrupt.S
+++ b/x86_64/interrupt.S
@@ -33,7 +33,7 @@
 ENTRY(interrupt)
 #ifdef APIC
        cmpl    $255,%eax               /* was this a spurious intr? */
-       je      _null_eoi               /* if so, null eoi handler */
+       je      _no_eoi                 /* if so, just return */
 #endif
        pushq   %rax                    /* save irq number */
        call    spl7                    /* set ipl */
@@ -92,15 +92,12 @@ ENTRY(interrupt)
        ret
 #else
        cmpl    $16,%ecx                /* was this a low ISA intr? */
-       jl      _isa_eoi                /* no, must be PCI */
-       ret                             /* NB: let irq_acknowledge handle pci 
EOI */
+       jge      _no_eoi                /* no, must be PCI (let irq_ack handle 
EOI) */
 _isa_eoi:
        movl    %ecx,%edi               /* load irq number as 1st arg */
        call    EXT(ioapic_irq_eoi)     /* ioapic irq specific EOI */
        call    EXT(lapic_eoi)          /* lapic broadcast EOI */
-       ret
-_null_eoi:
-       call    EXT(lapic_eoi)          /* lapic broadcast EOI */
+_no_eoi:
        ret
 #endif
 END(interrupt)
-- 
2.30.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]