Changeset fd67c9f in mainline for kernel/arch/amd64/src/interrupt.c


Ignore:
Timestamp:
2019-04-06T08:10:27Z (5 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
534bcdf
Parents:
ef56a43
Message:

Handle PIC spurious IRQs with care

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/amd64/src/interrupt.c

    ref56a43 rfd67c9f  
    172172        bool ack = false;
    173173        assert(inum < IRQ_COUNT);
    174         assert(inum != IRQ_PIC0_SPUR);
    175         assert(inum != IRQ_PIC1_SPUR);
    176174        assert(inum != IRQ_PIC1);
    177175
     
    190188                irq_spinlock_unlock(&irq->lock, false);
    191189        } else {
    192                 /*
    193                  * Spurious interrupt.
    194                  */
    195190#ifdef CONFIG_DEBUG
    196                 log(LF_ARCH, LVL_DEBUG, "cpu%u: spurious interrupt (inum=%u)",
    197                     CPU->id, inum);
     191                log(LF_ARCH, LVL_DEBUG, "cpu%u: unhandled IRQ %u", CPU->id,
     192                    inum);
    198193#endif
    199194        }
     
    205200static void pic_spurious(unsigned int n, istate_t *istate)
    206201{
    207         /*
    208          * XXX: Examine ISR to figure out whether this is indeed a spurious
    209          *      or actual IRQ.
    210          */
     202        unsigned int inum = n - IVT_IRQBASE;
     203        if (!pic_is_spurious(inum)) {
     204                /* This is actually not a spurious IRQ, so proceed as usual. */
     205                irq_interrupt(n, istate);
     206                return;
     207        }
     208        pic_handle_spurious(n);
    211209#ifdef CONFIG_DEBUG
    212         log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt", CPU->id);
     210        log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt %u", CPU->id,
     211            inum);
    213212#endif
    214213}
Note: See TracChangeset for help on using the changeset viewer.