[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86emul: Add return code information to error messages
commit 1c1c39e210f0c45fcbdb7960e59afea673e433f6 Author: Petre Pircalabu <ppircalabu@xxxxxxxxxxxxxxx> AuthorDate: Mon Oct 2 16:04:55 2017 +0100 Commit: George Dunlap <george.dunlap@xxxxxxxxxx> CommitDate: Mon Oct 2 16:04:55 2017 +0100 x86emul: Add return code information to error messages - print the return code of the last failed emulator operation in hvm_dump_emulation_state. - print the return code in sh_page_fault (SHADOW_PRINTK) to make the distiction between X86EMUL_UNHANDLEABLE and X86EMUL_UNIMPLEMENTED. Signed-off-by: Petre Pircalabu <ppircalabu@xxxxxxxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Paul Durrant <paul.durrant@xxxxxxxxxx> Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx> --- xen/arch/x86/hvm/emulate.c | 13 +++++++------ xen/arch/x86/hvm/io.c | 4 ++-- xen/arch/x86/hvm/vmx/realmode.c | 2 +- xen/arch/x86/mm/shadow/multi.c | 4 ++-- xen/include/asm-x86/hvm/emulate.h | 2 +- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index 385fe1e..4fe61b4 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -2056,7 +2056,7 @@ int hvm_emulate_one_mmio(unsigned long mfn, unsigned long gla) { case X86EMUL_UNHANDLEABLE: case X86EMUL_UNIMPLEMENTED: - hvm_dump_emulation_state(XENLOG_G_WARNING, "MMCFG", &ctxt); + hvm_dump_emulation_state(XENLOG_G_WARNING, "MMCFG", &ctxt, rc); break; case X86EMUL_EXCEPTION: hvm_inject_event(&ctxt.ctxt.event); @@ -2115,7 +2115,7 @@ void hvm_emulate_one_vm_event(enum emul_kind kind, unsigned int trapnr, return; case X86EMUL_UNIMPLEMENTED: case X86EMUL_UNHANDLEABLE: - hvm_dump_emulation_state(XENLOG_G_DEBUG, "Mem event", &ctx); + hvm_dump_emulation_state(XENLOG_G_DEBUG, "Mem event", &ctx, rc); hvm_inject_hw_exception(trapnr, errcode); break; case X86EMUL_EXCEPTION: @@ -2243,16 +2243,17 @@ static const char *guest_x86_mode_to_str(int mode) } void hvm_dump_emulation_state(const char *loglvl, const char *prefix, - struct hvm_emulate_ctxt *hvmemul_ctxt) + struct hvm_emulate_ctxt *hvmemul_ctxt, int rc) { struct vcpu *curr = current; const char *mode_str = guest_x86_mode_to_str(hvm_guest_x86_mode(curr)); const struct segment_register *cs = hvmemul_get_seg_reg(x86_seg_cs, hvmemul_ctxt); - printk("%s%s emulation failed: %pv %s @ %04x:%08lx -> %*ph\n", - loglvl, prefix, curr, mode_str, cs->sel, hvmemul_ctxt->insn_buf_eip, - hvmemul_ctxt->insn_buf_bytes, hvmemul_ctxt->insn_buf); + printk("%s%s emulation failed (%d): %pv %s @ %04x:%08lx -> %*ph\n", + loglvl, prefix, rc, curr, mode_str, cs->sel, + hvmemul_ctxt->insn_buf_eip, hvmemul_ctxt->insn_buf_bytes, + hvmemul_ctxt->insn_buf); } /* diff --git a/xen/arch/x86/hvm/io.c b/xen/arch/x86/hvm/io.c index 508e28f..e449b41 100644 --- a/xen/arch/x86/hvm/io.c +++ b/xen/arch/x86/hvm/io.c @@ -96,11 +96,11 @@ bool hvm_emulate_one_insn(hvm_emulate_validate_t *validate, const char *descr) switch ( rc ) { case X86EMUL_UNHANDLEABLE: - hvm_dump_emulation_state(XENLOG_G_WARNING, descr, &ctxt); + hvm_dump_emulation_state(XENLOG_G_WARNING, descr, &ctxt, rc); return false; case X86EMUL_UNRECOGNIZED: - hvm_dump_emulation_state(XENLOG_G_WARNING, descr, &ctxt); + hvm_dump_emulation_state(XENLOG_G_WARNING, descr, &ctxt, rc); hvm_inject_hw_exception(TRAP_invalid_op, X86_EVENT_NO_EC); break; diff --git a/xen/arch/x86/hvm/vmx/realmode.c b/xen/arch/x86/hvm/vmx/realmode.c index b73fc80..03dea6c 100644 --- a/xen/arch/x86/hvm/vmx/realmode.c +++ b/xen/arch/x86/hvm/vmx/realmode.c @@ -147,7 +147,7 @@ void vmx_realmode_emulate_one(struct hvm_emulate_ctxt *hvmemul_ctxt) return; fail: - hvm_dump_emulation_state(XENLOG_G_ERR, "Real-mode", hvmemul_ctxt); + hvm_dump_emulation_state(XENLOG_G_ERR, "Real-mode", hvmemul_ctxt, rc); domain_crash(curr->domain); } diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 2557e21..28030ac 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -3498,8 +3498,8 @@ static int sh_page_fault(struct vcpu *v, v->arch.paging.last_write_emul_ok = 0; } #endif - SHADOW_PRINTK("emulator failure, unshadowing mfn %#lx\n", - mfn_x(gmfn)); + SHADOW_PRINTK("emulator failure (rc=%d), unshadowing mfn %#lx\n", + r, mfn_x(gmfn)); /* If this is actually a page table, then we have a bug, and need * to support more operations in the emulator. More likely, * though, this is a hint that this page should not be shadowed. */ diff --git a/xen/include/asm-x86/hvm/emulate.h b/xen/include/asm-x86/hvm/emulate.h index 8864775..58d17c4 100644 --- a/xen/include/asm-x86/hvm/emulate.h +++ b/xen/include/asm-x86/hvm/emulate.h @@ -92,7 +92,7 @@ int hvmemul_do_pio_buffer(uint16_t port, void *buffer); void hvm_dump_emulation_state(const char *loglvl, const char *prefix, - struct hvm_emulate_ctxt *hvmemul_ctxt); + struct hvm_emulate_ctxt *hvmemul_ctxt, int rc); #endif /* __ASM_X86_HVM_EMULATE_H__ */ -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |