mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-19 21:57:55 +00:00
vancouver: Nested events during EPT violation
When an EPT/NPT fault occurs during IDT vectoring, the original event must be reinjected. Additionally we may have to inject an IRQ window if another event is already pending.
This commit is contained in:
parent
1434d0948a
commit
5c886b4962
@ -446,8 +446,14 @@ class Vcpu_dispatcher : public Genode::Thread<STACK_SIZE>,
|
||||
utcb->mtd = 0;
|
||||
|
||||
/* EPT violation during IDT vectoring? */
|
||||
if (utcb->inj_info & 0x80000000)
|
||||
Logging::panic("EPT violation during IDT vectoring - not handled\n");
|
||||
if (utcb->inj_info & 0x80000000) {
|
||||
utcb->mtd |= MTD_INJ;
|
||||
Logging::printf("EPT violation during IDT vectoring.\n");
|
||||
CpuMessage _win(CpuMessage::TYPE_CALC_IRQWINDOW, static_cast<CpuState *>(utcb), utcb->mtd);
|
||||
_win.mtr_out = MTD_INJ;
|
||||
if (!_vcpu->executor.send(_win, true))
|
||||
Logging::panic("nobody to execute %s at %x:%x\n", __func__, utcb->cs.sel, utcb->eip);
|
||||
}
|
||||
|
||||
Nova::Utcb * u = (Nova::Utcb *)utcb;
|
||||
u->set_msg_word(0);
|
||||
|
Loading…
Reference in New Issue
Block a user