[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 11/19] x86/emul: Avoid raising faults behind the emulators back
> -----Original Message----- > From: Andrew Cooper [mailto:andrew.cooper3@xxxxxxxxxx] > Sent: 28 November 2016 11:13 > To: Xen-devel <xen-devel@xxxxxxxxxxxxx> > Cc: Andrew Cooper <Andrew.Cooper3@xxxxxxxxxx>; Jan Beulich > <JBeulich@xxxxxxxx>; Paul Durrant <Paul.Durrant@xxxxxxxxxx> > Subject: [PATCH v2 11/19] x86/emul: Avoid raising faults behind the > emulators back > > Introduce a new x86_emul_pagefault() similar to x86_emul_hw_exception(), > and > use this instead of hvm_inject_page_fault() from emulation codepaths. > > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > --- > CC: Jan Beulich <JBeulich@xxxxxxxx> > CC: Paul Durrant <paul.durrant@xxxxxxxxxx> Reviewed-by: Paul Durrant <paul.durrant@xxxxxxxxxx> > > v2: > * Change x86_emul_pagefault()'s error_code parameter to being signed > * Split out shadow changes > --- > xen/arch/x86/hvm/emulate.c | 4 ++-- > xen/arch/x86/x86_emulate/x86_emulate.h | 13 +++++++++++++ > 2 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c > index 7745c5b..35d1d1c 100644 > --- a/xen/arch/x86/hvm/emulate.c > +++ b/xen/arch/x86/hvm/emulate.c > @@ -459,7 +459,7 @@ static int hvmemul_linear_to_phys( > { > if ( pfec & (PFEC_page_paged | PFEC_page_shared) ) > return X86EMUL_RETRY; > - hvm_inject_page_fault(pfec, addr); > + x86_emul_pagefault(pfec, addr, &hvmemul_ctxt->ctxt); > return X86EMUL_EXCEPTION; > } > > @@ -483,7 +483,7 @@ static int hvmemul_linear_to_phys( > ASSERT(!reverse); > if ( npfn != gfn_x(INVALID_GFN) ) > return X86EMUL_UNHANDLEABLE; > - hvm_inject_page_fault(pfec, addr & PAGE_MASK); > + x86_emul_pagefault(pfec, addr & PAGE_MASK, &hvmemul_ctxt- > >ctxt); > return X86EMUL_EXCEPTION; > } > *reps = done; > diff --git a/xen/arch/x86/x86_emulate/x86_emulate.h > b/xen/arch/x86/x86_emulate/x86_emulate.h > index 8019ee1..4679711 100644 > --- a/xen/arch/x86/x86_emulate/x86_emulate.h > +++ b/xen/arch/x86/x86_emulate/x86_emulate.h > @@ -624,6 +624,19 @@ static inline void x86_emul_hw_exception( > ctxt->event_pending = true; > } > > +static inline void x86_emul_pagefault( > + int error_code, unsigned long cr2, struct x86_emulate_ctxt *ctxt) > +{ > + ASSERT(!ctxt->event_pending); > + > + ctxt->event.vector = 14; /* TRAP_page_fault */ > + ctxt->event.type = X86_EVENTTYPE_HW_EXCEPTION; > + ctxt->event.error_code = error_code; > + ctxt->event.cr2 = cr2; > + > + ctxt->event_pending = true; > +} > + > static inline void x86_emul_software_event( > enum x86_swint_type type, uint8_t vector, uint8_t insn_len, > struct x86_emulate_ctxt *ctxt) > -- > 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |