[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC Patch v2 45/45] x86/hvm: Always set pending event injection when loading VMC[BS] state.
> From: Jan Beulich [mailto:JBeulich@xxxxxxxx] > Sent: Tuesday, August 26, 2014 9:02 AM > > >>> On 08.08.14 at 09:01, <wency@xxxxxxxxxxxxxx> wrote: > > In colo mode, secondary vm is running, so VM_ENTRY_INTR_INFO may > > valid before restoring vmcs. If there is no pending event after > > restoring vm, we should clear it. > > > > Signed-off-by: Wen Congyang <wency@xxxxxxxxxxxxxx> > > > > Also clear pending software exceptions. > > Copy the fix to SVM as well. > > > > Signed-off-by: Tim Deegan <tim@xxxxxxx> > > I only now realized that it's no surprise we're not getting acks from > the VMX maintainers on this - the majority of them wasn't Cc-ed. > Now done, but please take care to do so yourself in the future. thanks for forwarding. VMX part looks good to me. Acked-by: Kevin Tian <kevin.tian@xxxxxxxxx> > > As to the SVM maintainers - Ping (I Cc-ed you on an earlier reply)? > > Jan > > > --- > > xen/arch/x86/hvm/svm/svm.c | 16 +++++++++------- > > xen/arch/x86/hvm/vmx/vmx.c | 25 ++++++++++++------------- > > 2 files changed, 21 insertions(+), 20 deletions(-) > > > > diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c > > index 71b8a6a..f7a0cb8 100644 > > --- a/xen/arch/x86/hvm/svm/svm.c > > +++ b/xen/arch/x86/hvm/svm/svm.c > > @@ -321,16 +321,18 @@ static int svm_vmcb_restore(struct vcpu *v, struct > > hvm_hw_cpu *c) > > vmcb_set_h_cr3(vmcb, > pagetable_get_paddr(p2m_get_pagetable(p2m))); > > } > > > > - if ( c->pending_valid ) > > + if ( c->pending_valid > > + && hvm_event_needs_reinjection(c->pending_type, > c->pending_vector) ) > > { > > gdprintk(XENLOG_INFO, > "Re-injecting %#"PRIx32", %#"PRIx32"\n", > > c->pending_event, c->error_code); > > - > > - if ( hvm_event_needs_reinjection(c->pending_type, > c->pending_vector) ) > > - { > > - vmcb->eventinj.bytes = c->pending_event; > > - vmcb->eventinj.fields.errorcode = c->error_code; > > - } > > + vmcb->eventinj.bytes = c->pending_event; > > + vmcb->eventinj.fields.errorcode = c->error_code; > > + } > > + else > > + { > > + vmcb->eventinj.bytes = 0; > > + vmcb->eventinj.fields.errorcode = 0; > > } > > > > vmcb->cleanbits.bytes = 0; > > diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c > > index fb65c7d..5f143c0 100644 > > --- a/xen/arch/x86/hvm/vmx/vmx.c > > +++ b/xen/arch/x86/hvm/vmx/vmx.c > > @@ -509,23 +509,22 @@ static int vmx_vmcs_restore(struct vcpu *v, struct > > hvm_hw_cpu *c) > > > > __vmwrite(GUEST_DR7, c->dr7); > > > > - vmx_vmcs_exit(v); > > - > > - paging_update_paging_modes(v); > > - > > - if ( c->pending_valid ) > > + if ( c->pending_valid > > + && hvm_event_needs_reinjection(c->pending_type, > c->pending_vector) ) > > { > > gdprintk(XENLOG_INFO, > "Re-injecting %#"PRIx32", %#"PRIx32"\n", > > c->pending_event, c->error_code); > > - > > - if ( hvm_event_needs_reinjection(c->pending_type, > c->pending_vector) ) > > - { > > - vmx_vmcs_enter(v); > > - __vmwrite(VM_ENTRY_INTR_INFO, c->pending_event); > > - __vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE, > c->error_code); > > - vmx_vmcs_exit(v); > > - } > > + __vmwrite(VM_ENTRY_INTR_INFO, c->pending_event); > > + __vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE, > c->error_code); > > } > > + else > > + { > > + __vmwrite(VM_ENTRY_INTR_INFO, 0); > > + __vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE, 0); > > + } > > + vmx_vmcs_exit(v); > > + > > + paging_update_paging_modes(v); > > > > return 0; > > } > > -- > > 1.9.3 > > > > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@xxxxxxxxxxxxx > > http://lists.xen.org/xen-devel > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |