[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/7] Nested VMX: Introduce interrupt source supporting
On 09/08/13 09:49, Yang Zhang wrote: > From: Yang Zhang <yang.z.zhang@xxxxxxxxx> > > Introduce interrupt source to determine the source of interrupt that inject > to L1. > > Signed-off-by: Yang Zhang <yang.z.zhang@xxxxxxxxx> > --- > xen/arch/x86/hvm/vmx/intr.c | 4 ++-- > xen/arch/x86/hvm/vmx/vmx.c | 14 ++++++++------ > xen/include/asm-x86/hvm/vmx/vmx.h | 2 +- > xen/include/asm-x86/hvm/vmx/vvmx.h | 1 + > 4 files changed, 12 insertions(+), 9 deletions(-) > > diff --git a/xen/arch/x86/hvm/vmx/intr.c b/xen/arch/x86/hvm/vmx/intr.c > index e376f3c..cb120f2 100644 > --- a/xen/arch/x86/hvm/vmx/intr.c > +++ b/xen/arch/x86/hvm/vmx/intr.c > @@ -180,7 +180,7 @@ static int nvmx_intr_intercept(struct vcpu *v, struct > hvm_intack intack) > if ( !(ctrl & PIN_BASED_EXT_INTR_MASK) ) > return 0; > > - vmx_inject_extint(intack.vector); > + vmx_inject_extint(intack.vector, intack.source); > > ctrl = __get_vvmcs(vcpu_nestedhvm(v).nv_vvmcx, VM_EXIT_CONTROLS); > if ( ctrl & VM_EXIT_ACK_INTR_ON_EXIT ) > @@ -309,7 +309,7 @@ void vmx_intr_assist(void) > else > { > HVMTRACE_2D(INJ_VIRQ, intack.vector, /*fake=*/ 0); > - vmx_inject_extint(intack.vector); > + vmx_inject_extint(intack.vector, intack.source); > pt_intr_post(v, intack); > } > > diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c > index 8ed7026..51c657f 100644 > --- a/xen/arch/x86/hvm/vmx/vmx.c > +++ b/xen/arch/x86/hvm/vmx/vmx.c > @@ -1208,7 +1208,7 @@ static void vmx_update_guest_efer(struct vcpu *v) > } > > void nvmx_enqueue_n2_exceptions(struct vcpu *v, > - unsigned long intr_fields, int error_code) > + unsigned long intr_fields, int error_code, uint8_t source) > { > struct nestedvmx *nvmx = &vcpu_2_nvmx(v); > > @@ -1216,6 +1216,7 @@ void nvmx_enqueue_n2_exceptions(struct vcpu *v, > /* enqueue the exception till the VMCS switch back to L1 */ > nvmx->intr.intr_info = intr_fields; > nvmx->intr.error_code = error_code; > + nvmx->intr.source = source; > vcpu_nestedhvm(v).nv_vmexit_pending = 1; > return; > } > @@ -1227,7 +1228,8 @@ void nvmx_enqueue_n2_exceptions(struct vcpu *v, > > static int nvmx_vmexit_trap(struct vcpu *v, struct hvm_trap *trap) > { > - nvmx_enqueue_n2_exceptions(v, trap->vector, trap->error_code); > + nvmx_enqueue_n2_exceptions(v, trap->vector, trap->error_code, > + hvm_intsrc_none); Alignment here... > return NESTEDHVM_VMEXIT_DONE; > } > > @@ -1258,7 +1260,7 @@ static void __vmx_inject_exception(int trap, int type, > int error_code) > curr->arch.hvm_vmx.vmx_emulate = 1; > } > > -void vmx_inject_extint(int trap) > +void vmx_inject_extint(int trap, uint8_t source) > { > struct vcpu *v = current; > u32 pin_based_cntrl; > @@ -1269,7 +1271,7 @@ void vmx_inject_extint(int trap) > if ( pin_based_cntrl & PIN_BASED_EXT_INTR_MASK ) { > nvmx_enqueue_n2_exceptions (v, > INTR_INFO_VALID_MASK | (X86_EVENTTYPE_EXT_INTR<<8) | trap, > - HVM_DELIVER_NO_ERROR_CODE); > + HVM_DELIVER_NO_ERROR_CODE, source); And these 3 hunks. ~Andrew > return; > } > } > @@ -1288,7 +1290,7 @@ void vmx_inject_nmi(void) > if ( pin_based_cntrl & PIN_BASED_NMI_EXITING ) { > nvmx_enqueue_n2_exceptions (v, > INTR_INFO_VALID_MASK | (X86_EVENTTYPE_NMI<<8) | TRAP_nmi, > - HVM_DELIVER_NO_ERROR_CODE); > + HVM_DELIVER_NO_ERROR_CODE, hvm_intsrc_nmi); > return; > } > } > @@ -1356,7 +1358,7 @@ static void vmx_inject_trap(struct hvm_trap *trap) > { > nvmx_enqueue_n2_exceptions (curr, > INTR_INFO_VALID_MASK | (_trap.type<<8) | _trap.vector, > - _trap.error_code); > + _trap.error_code, hvm_intsrc_none); > return; > } > else > diff --git a/xen/include/asm-x86/hvm/vmx/vmx.h > b/xen/include/asm-x86/hvm/vmx/vmx.h > index c33b9f9..f4d759b 100644 > --- a/xen/include/asm-x86/hvm/vmx/vmx.h > +++ b/xen/include/asm-x86/hvm/vmx/vmx.h > @@ -448,7 +448,7 @@ static inline int __vmxon(u64 addr) > > void vmx_get_segment_register(struct vcpu *, enum x86_segment, > struct segment_register *); > -void vmx_inject_extint(int trap); > +void vmx_inject_extint(int trap, uint8_t source); > void vmx_inject_nmi(void); > > int ept_p2m_init(struct p2m_domain *p2m); > diff --git a/xen/include/asm-x86/hvm/vmx/vvmx.h > b/xen/include/asm-x86/hvm/vmx/vvmx.h > index 3874525..be2b5c6 100644 > --- a/xen/include/asm-x86/hvm/vmx/vvmx.h > +++ b/xen/include/asm-x86/hvm/vmx/vvmx.h > @@ -36,6 +36,7 @@ struct nestedvmx { > struct { > unsigned long intr_info; > u32 error_code; > + uint8_t source; > } intr; > struct { > bool_t enabled; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |