Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Xen: Devel

[PATCH 1/7] Nested VMX: Introduce interrupt source supporting

 

 

Xen devel RSS feed   Index | Next | Previous | View Threaded


yang.z.zhang at intel

Aug 9, 2013, 1:49 AM

Post #1 of 4 (16 views)
Permalink
[PATCH 1/7] Nested VMX: Introduce interrupt source supporting

From: Yang Zhang <yang.z.zhang [at] Intel>

Introduce interrupt source to determine the source of interrupt that inject
to L1.

Signed-off-by: Yang Zhang <yang.z.zhang [at] Intel>
---
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


_______________________________________________
Xen-devel mailing list
Xen-devel [at] lists
http://lists.xen.org/xen-devel


andrew.cooper3 at citrix

Aug 9, 2013, 3:14 AM

Post #2 of 4 (13 views)
Permalink
Re: [PATCH 1/7] Nested VMX: Introduce interrupt source supporting [In reply to]

On 09/08/13 09:49, Yang Zhang wrote:
> From: Yang Zhang <yang.z.zhang [at] Intel>
>
> Introduce interrupt source to determine the source of interrupt that inject
> to L1.
>
> Signed-off-by: Yang Zhang <yang.z.zhang [at] Intel>
> ---
> 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 [at] lists
http://lists.xen.org/xen-devel


JBeulich at suse

Aug 9, 2013, 5:03 AM

Post #3 of 4 (11 views)
Permalink
Re: [PATCH 1/7] Nested VMX: Introduce interrupt source supporting [In reply to]

>>> On 09.08.13 at 10:49, Yang Zhang <yang.z.zhang [at] intel> wrote:
> From: Yang Zhang <yang.z.zhang [at] Intel>
>
> 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.

Jan

> Signed-off-by: Yang Zhang <yang.z.zhang [at] Intel>
> ---
> 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



_______________________________________________
Xen-devel mailing list
Xen-devel [at] lists
http://lists.xen.org/xen-devel


yang.z.zhang at intel

Aug 10, 2013, 7:30 PM

Post #4 of 4 (10 views)
Permalink
Re: [PATCH 1/7] Nested VMX: Introduce interrupt source supporting [In reply to]

Jan Beulich wrote on 2013-08-09:
>>>> On 09.08.13 at 10:49, Yang Zhang <yang.z.zhang [at] intel> wrote:
>> From: Yang Zhang <yang.z.zhang [at] Intel>
>>
>> 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 [at] Intel>
>> ---
>> 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 [at] lists
http://lists.xen.org/xen-devel

Xen devel RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.