[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] hvm crash on hypercall event channel
On 10/04/2012 12:30, "Daniel Castro" <evil.dani@xxxxxxxxx> wrote: > Hello All, > > I am writing the PV-Drivers for Seabios. > > When I put a request on the front ring and issue the hypercall to > notify, the hvm guest crashes. > > Here is the dmesg output: > > (XEN) realmode.c:116:d10 Failed to emulate insn. > (XEN) realmode.c:166:d10 Real-mode emulation failed @ f000:00001c4b: > 0f aa ba b2 00 ec Looks like instruction RSM (return from SMM mode). Seems unlikely! However, even if you are trying to run VMCALL (opcode 0F 01 C1) from realmode it may not work as we emulate real mode for older Intel CPUs, and our emulator does not include the vmcall instruction. Also the hypercall stub code we provide to guests is only correct for 32-bit and 64-bit modes. You can't legitimately use the hypercall stubs from real mode, vm86 mode, or 16-bit protected mode. Could you just do the hypercalls from 32-bit mode? Our old rombios had a 32-bit code area for stuff like this, quite probably seabios has similar. Or perhaps if not it could gain this functionality. Hypercalls from 16-bit mode are not something we care to add support for, I think. -- Keir > (XEN) domain_crash called from realmode.c:167 > (XEN) Domain 10 (vcpu#0) crashed on cpu#1: > (XEN) ----[ Xen-4.2-unstable x86_64 debug=y Not tainted ]---- > (XEN) CPU: 1 > (XEN) RIP: f000:[<0000000000001c4b>] > (XEN) RFLAGS: 0000000000000097 CONTEXT: hvm guest > (XEN) rax: 00000000000a0000 rbx: 000000000003fef8 rcx: 0000000000000320 > (XEN) rdx: 00000000000000b3 rsi: 00000000000fd600 rdi: 0000000000000340 > (XEN) rbp: 000000000009a040 rsp: 0000000000000308 r8: 0000000000000000 > (XEN) r9: 0000000000000000 r10: 0000000000000000 r11: 0000000000000000 > (XEN) r12: 0000000000000000 r13: 0000000000000000 r14: 0000000000000000 > (XEN) r15: 0000000000000000 cr0: 0000000000000010 cr4: 0000000000000000 > (XEN) cr3: 0000000000800000 cr2: 0000000000000000 > (XEN) ds: 9940 es: 9940 fs: 0000 gs: 0000 ss: 9940 cs: f000 > > Here is the code for issue the hypercall: > dprintf(1,"Start notify procedure\n"); > evtchn_send_t send; > send.port = GET_GLOBALFLAT(bi->port); > dprintf(1,"In notify before hypercall port is %d = %d",send.port); > //hypercall_event_channel_op(EVTCHNOP_send, &send); > dprintf(1,"read operation notify res %d\n", > hypercall_event_channel_op(EVTCHNOP_send, &send)); > Nothing out of the ordinary. Except that the hypercall is issued under > 16bit, It works under 32bit. > > Any ideas what could be wrong? _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |