x86: Add support for checking the raw state of an interrupt

In order to support hardware virtualization, we need to be able to
check if there are any interrupts pending irregardless of the
rflags.intf value. This changeset adds the checkInterruptsRaw() method
to the x86 interrupt control. It returns true if there are pending
interrupts that can be delivered as soon as the CPU is ready for
interrupt delivery.
This commit is contained in:
Andreas Sandberg 2013-09-18 11:28:27 +02:00
parent 15733e9b33
commit 4b840b8322
2 changed files with 15 additions and 0 deletions

View file

@ -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)
{

View file

@ -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);