[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.