diff options
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/x86/interrupts.cc | 8 | ||||
-rw-r--r-- | src/arch/x86/interrupts.hh | 7 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/arch/x86/interrupts.cc b/src/arch/x86/interrupts.cc index afed9c132..ca765782e 100644 --- a/src/arch/x86/interrupts.cc +++ b/src/arch/x86/interrupts.cc @@ -649,6 +649,14 @@ X86ISA::Interrupts::checkInterrupts(ThreadContext *tc) const 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) { diff --git a/src/arch/x86/interrupts.hh b/src/arch/x86/interrupts.hh index da0d767fd..8997d7402 100644 --- a/src/arch/x86/interrupts.hh +++ b/src/arch/x86/interrupts.hh @@ -274,6 +274,13 @@ class Interrupts : public BasicPioDevice, IntDevice */ 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); |