diff -r eeb9f1e59e56 -r 654bb6f4b9ea src/arch/x86/interrupts.hh --- a/src/arch/x86/interrupts.hh Tue Sep 10 15:20:28 2013 +0200 +++ b/src/arch/x86/interrupts.hh Tue Sep 10 15:20:44 2013 +0200 @@ -274,6 +274,13 @@ */ bool checkInterrupts(ThreadContext *tc) const; + /** + * Check if there are pending interrupts without ignoring the + * interrupts disabled flag. + * + * @return true if there are interrupts pending. + */ + bool checkInterruptsRaw() const; Fault getInterrupt(ThreadContext *tc); void updateIntrInfo(ThreadContext *tc); diff -r eeb9f1e59e56 -r 654bb6f4b9ea src/arch/x86/interrupts.cc --- a/src/arch/x86/interrupts.cc Tue Sep 10 15:20:28 2013 +0200 +++ b/src/arch/x86/interrupts.cc Tue Sep 10 15:20:44 2013 +0200 @@ -649,6 +649,14 @@ return false; } +bool +X86ISA::Interrupts::checkInterruptsRaw() const +{ + return pendingUnmaskableInt || pendingExtInt || + (IRRV > ISRV && bits(IRRV, 7, 4) > + bits(regs[APIC_TASK_PRIORITY], 7, 4)); +} + Fault X86ISA::Interrupts::getInterrupt(ThreadContext *tc) {