[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] When injecting an exception into L2 guest,
# HG changeset patch # User cegger # Date 1298892112 -3600 # Node ID c856533343bf2de46b507ac4f815097e4779806f # Parent f9ba1b2ba93d1c168ce597c48681a7ac3434792e When injecting an exception into L2 guest, inject a #VMEXIT if L1 guest intercepts the exception Signed-off-by: Christoph Egger <Christoph.Egger@xxxxxxx> Acked-by: Eddie Dong <eddie.dong@xxxxxxxxx> Acked-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx> Committed-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx> --- diff -r f9ba1b2ba93d -r c856533343bf xen/arch/x86/hvm/hvm.c --- a/xen/arch/x86/hvm/hvm.c Mon Feb 28 12:21:49 2011 +0100 +++ b/xen/arch/x86/hvm/hvm.c Mon Feb 28 12:21:52 2011 +0100 @@ -1117,6 +1117,47 @@ domain_shutdown(v->domain, SHUTDOWN_reboot); } +void hvm_inject_exception(unsigned int trapnr, int errcode, unsigned long cr2) +{ + struct vcpu *v = current; + + if ( !nestedhvm_enabled(v->domain) ) { + hvm_funcs.inject_exception(trapnr, errcode, cr2); + return; + } + + if ( nestedhvm_vmswitch_in_progress(v) ) { + hvm_funcs.inject_exception(trapnr, errcode, cr2); + return; + } + + if ( !nestedhvm_vcpu_in_guestmode(v) ) { + hvm_funcs.inject_exception(trapnr, errcode, cr2); + return; + } + + if ( nhvm_vmcx_guest_intercepts_trap(v, trapnr) ) + { + enum nestedhvm_vmexits nsret; + + nsret = nhvm_vcpu_vmexit_trap(v, trapnr, errcode, cr2); + + switch (nsret) { + case NESTEDHVM_VMEXIT_DONE: + case NESTEDHVM_VMEXIT_ERROR: /* L1 guest will crash L2 guest */ + return; + case NESTEDHVM_VMEXIT_HOST: + case NESTEDHVM_VMEXIT_CONTINUE: + case NESTEDHVM_VMEXIT_FATALERROR: + default: + gdprintk(XENLOG_ERR, "unexpected nestedhvm error %i\n", nsret); + return; + } + } + + hvm_funcs.inject_exception(trapnr, errcode, cr2); +} + bool_t hvm_hap_nested_page_fault(unsigned long gpa, bool_t gla_valid, unsigned long gla, diff -r f9ba1b2ba93d -r c856533343bf xen/include/asm-x86/hvm/hvm.h --- a/xen/include/asm-x86/hvm/hvm.h Mon Feb 28 12:21:49 2011 +0100 +++ b/xen/include/asm-x86/hvm/hvm.h Mon Feb 28 12:21:52 2011 +0100 @@ -278,11 +278,7 @@ void hvm_do_resume(struct vcpu *v); void hvm_migrate_pirqs(struct vcpu *v); -static inline void -hvm_inject_exception(unsigned int trapnr, int errcode, unsigned long cr2) -{ - hvm_funcs.inject_exception(trapnr, errcode, cr2); -} +void hvm_inject_exception(unsigned int trapnr, int errcode, unsigned long cr2); static inline int hvm_event_pending(struct vcpu *v) { _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |