rumpkernel and bhyve: triple faults
Peter Grehan
grehan at freebsd.org
Tue Mar 6 15:15:50 UTC 2018
Hi Fabian,
> 657 0 350887309700 vm testing[0]: handled exception vmexit at 0x102a56
> 656 0 350887309570 vm testing[0]: Exception 14 pending
> 655 0 350887309442 vm testing[0]: Setting intr_shadow to 0 succeeded
> 654 0 350887305126 vm testing[0]: Reflecting exception 14/0 into the guest
> 653 0 350887302436 vm testing[0]: vm_exit_intinfo: info1(0x80000b0e)
> 652 0 350887248280 vm testing[0]: Resume execution at 0x102a56
> 651 0 350887184160 vm testing[0]: vm_entry_intinfo: info1(0), info2(0x80000b0e), retinfo(0x80000b0e)
> 650 0 350887184040 vm testing[0]: Exception 14 delivered: 0x80000b0e
> 649 0 350887182668 vm testing[0]: handled exception vmexit at 0x102a56
Exception 14 is a page fault (SDM Vol3 ch 6.15). The exception type is
"fault" which means it is delivered at the address it was detected at.
This cascaded very quickly into a triple-fault, so it looks like it
could possibly be an issue with the stack. One debug tool you do have is
to get a register dump on exit, with 'bhyvectl --get-all --vm=<your vn
name>'.
For a page-fault, the virtual address that resulted in the fault will
be in the CR2 register.
From the code at the faulting address:
> 0000000000102a50 <cons_init>:
> 102a50: push rbx
> 102a51: call 103540 <hypervisor_detect>
> 102a56: cmp WORD PTR [rip-0x102a5c],0x0 # 2
<current_lwp+0x2>
It's using RIP-relative addressing here, but objdump seems to think
this may be an offset in the current_lwp structure - is it possible that
may have an uninitialized value ?
(I don't believe this has anything to do with VGA).
later,
Peter.
More information about the freebsd-virtualization
mailing list