[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/7] Nested VMX: Introduce interrupt source supporting
Jan Beulich wrote on 2013-08-09: >>>> On 09.08.13 at 10:49, Yang Zhang <yang.z.zhang@xxxxxxxxx> wrote: >> From: Yang Zhang <yang.z.zhang@xxxxxxxxx> >> >> Introduce interrupt source to determine the source of interrupt that >> inject to L1. > > So where's the consumer of that new structure field? Afaics you only > set it, but never read it. It is used in patch 6. I will mention it in the comments in next patch. > > Jan > >> 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); >> 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); >> 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; >> -- >> 1.7.1 > Best regards, Yang _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |