mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-31 00:24:51 +00:00
vbox: make interruptibility state check conditional
If the guest is not in an interruptible state when the recall handler is called, an assertion fails. Since the assertion is only relevant if the recall handler was called during IRQ injection, it should be moved into the corresponding conditional block which already has the assertion for the 'IF' flag. Fixes #1661
This commit is contained in:
parent
26924c9bcd
commit
0885ebd5b1
@ -168,18 +168,21 @@ class Vcpu_handler : public Vmm::Vcpu_dispatcher<pthread>,
|
||||
Nova::Utcb * utcb = reinterpret_cast<Nova::Utcb *>(Thread_base::utcb());
|
||||
|
||||
Assert(utcb->actv_state == ACTIVITY_STATE_ACTIVE);
|
||||
if (utcb->intr_state != INTERRUPT_STATE_NONE)
|
||||
Vmm::printf("intr state %x %x\n", utcb->intr_state, utcb->intr_state & 0xF);
|
||||
|
||||
Assert(utcb->intr_state == INTERRUPT_STATE_NONE);
|
||||
|
||||
if (utcb->inj_info & IRQ_INJ_VALID_MASK) {
|
||||
|
||||
Assert(utcb->flags & X86_EFL_IF);
|
||||
|
||||
if (utcb->intr_state != INTERRUPT_STATE_NONE)
|
||||
Vmm::printf("intr state %x %x\n", utcb->intr_state, utcb->intr_state & 0xF);
|
||||
|
||||
Assert(utcb->intr_state == INTERRUPT_STATE_NONE);
|
||||
|
||||
/*
|
||||
if (!continue_hw_accelerated(utcb))
|
||||
Vmm::printf("WARNING - recall ignored during IRQ delivery\n");
|
||||
*/
|
||||
/* got recall during irq injection and X86_EFL_IF set for
|
||||
/* got recall during irq injection and the guest is ready for
|
||||
* delivery of IRQ - just continue */
|
||||
Nova::reply(_stack_reply);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user