[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v13 2/3] x86emul: Add return code information to error messages
> -----Original Message----- > From: Petre Pircalabu [mailto:ppircalabu@xxxxxxxxxxxxxxx] > Sent: 25 September 2017 13:03 > To: xen-devel@xxxxxxxxxxxxx > Cc: Ian Jackson <Ian.Jackson@xxxxxxxxxx>; Wei Liu <wei.liu2@xxxxxxxxxx>; > Andrew Cooper <Andrew.Cooper3@xxxxxxxxxx>; George Dunlap > <George.Dunlap@xxxxxxxxxx>; jbeulich@xxxxxxxx; konrad.wilk@xxxxxxxxxx; > sstabellini@xxxxxxxxxx; Tim (Xen.org) <tim@xxxxxxx>; Paul Durrant > <Paul.Durrant@xxxxxxxxxx>; rcojocaru@xxxxxxxxxxxxxxx; > tamas@xxxxxxxxxxxxx; jun.nakajima@xxxxxxxxx; Kevin Tian > <kevin.tian@xxxxxxxxx>; Petre Pircalabu <ppircalabu@xxxxxxxxxxxxxxx> > Subject: [PATCH v13 2/3] 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> > > --- > Changed since v11: > * Removed "rc=" from the error message. > --- > 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 b8c0ae7..c7b1c53 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__ */ > > -- > 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |