From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wen Congyang Subject: Re: [RFC Patch v2 45/45] x86/hvm: Always set pending event injection when loading VMC[BS] state. Date: Fri, 8 Aug 2014 15:29:06 +0800 Message-ID: <53E47C42.1090608@cn.fujitsu.com> References: <1407481305-19808-1-git-send-email-wency@cn.fujitsu.com> <1407481305-19808-46-git-send-email-wency@cn.fujitsu.com> <53E49743020000780002A5FD@mail.emea.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <53E49743020000780002A5FD@mail.emea.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich Cc: Tim Deegan , Ian Campbell , Dong Eddie , Jiang Yunhong , Ian Jackson , xen devel , Aravind Gopalakrishnan , suravee.suthikulpanit@amd.com, Boris Ostrovsky , Yang Hongyang , Lai Jiangshan List-Id: xen-devel@lists.xenproject.org At 08/08/2014 03:24 PM, Jan Beulich Write: >>>> On 08.08.14 at 09:01, 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 >> >> Also clear pending software exceptions. >> Copy the fix to SVM as well. > > And with this you should also have Cc-ed the SVM maintainers, which > I now did. > > >> Signed-off-by: Tim Deegan >> --- >> 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) ) > > Conventionally the operator goes at the end of the first line, not the > beginning of the second. I will fixed. Thanks Wen Congyang > > Jan > >> { >> 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@lists.xen.org >> http://lists.xen.org/xen-devel > > > > . >