From patchwork Wed Dec 14 10:11:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Haozhong Zhang X-Patchwork-Id: 9473969 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D230660571 for ; Wed, 14 Dec 2016 10:14:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BF3B0286E7 for ; Wed, 14 Dec 2016 10:14:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B24232870D; Wed, 14 Dec 2016 10:14:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 0A7DE286E7 for ; Wed, 14 Dec 2016 10:14:58 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cH6Xv-00089M-P0; Wed, 14 Dec 2016 10:12:23 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cH6Xu-00089G-7i for xen-devel@lists.xen.org; Wed, 14 Dec 2016 10:12:22 +0000 Received: from [193.109.254.147] by server-10.bemta-6.messagelabs.com id 8D/03-13192-50B11585; Wed, 14 Dec 2016 10:12:21 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrPLMWRWlGSWpSXmKPExsVywNwkVpdVOjD CYM5OZoslHxezODB6HN39mymAMYo1My8pvyKBNePL7oNsBVfMKn5/3cfewLhcu4uRk0NIoFLi 7rm7TCC2hACvxJFlM1ghbD+JhvMtLF2MXEA1vYwST5Y9YwZJsAnoS6x4fBCsSERAWuLa58uMI EXMAj8YJfZ2LwGbJCzgJrHiwwJ2EJtFQFVi7jeIOK+ArcSFm5/YIDbIS1y4eooFxOYUsJPYtm MlO8RFthJz2ieyTWDkXcDIsIpRozi1qCy1SNfIUi+pKDM9oyQ3MTNH19DATC83tbg4MT01JzG pWC85P3cTIzAgGIBgB+OBRYGHGCU5mJREebmuBkQI8SXlp1RmJBZnxBeV5qQWH2KU4eBQkuA1 kwyMEBIsSk1PrUjLzAGGJkxagoNHSYRXXRwozVtckJhbnJkOkTrFqCglzpsD0icAksgozYNrg 8XDJUZZKWFeRqBDhHgKUotyM0tQ5V8xinMwKgnzxoNM4cnMK4Gb/gpoMRPQYtEl/iCLSxIRUl INjGHTwqZssa3f5v454ljzOcltq9Ne8DNlB5X+TrPs1ur9w5s10ar5SMifH9c3aF/T/a76Myn 0Ck/A8npv80IJzT1BPTu7H8bfdJc+d2mblr2mt7/zmlr1u97Tk8s2N5i5rfqo/bL00/YUR/8F x+Xm7DsUNiM8++2j5fy/Np7+dnJx5TGmhmbLPCWW4oxEQy3mouJEAPbjcMqCAgAA X-Env-Sender: haozhong.zhang@intel.com X-Msg-Ref: server-2.tower-27.messagelabs.com!1481710332!24842777!4 X-Originating-IP: [192.55.52.93] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTkyLjU1LjUyLjkzID0+IDMyNDY2NQ==\n X-StarScan-Received: X-StarScan-Version: 9.1.1; banners=-,-,- X-VirusChecked: Checked Received: (qmail 38462 invoked from network); 14 Dec 2016 10:12:20 -0000 Received: from mga11.intel.com (HELO mga11.intel.com) (192.55.52.93) by server-2.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 14 Dec 2016 10:12:20 -0000 Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga102.fm.intel.com with ESMTP; 14 Dec 2016 02:12:20 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,346,1477983600"; d="scan'208";a="42364924" Received: from hz-desktop.sh.intel.com (HELO localhost) ([10.239.159.148]) by fmsmga005.fm.intel.com with ESMTP; 14 Dec 2016 02:12:18 -0800 From: Haozhong Zhang To: xen-devel@lists.xen.org Date: Wed, 14 Dec 2016 18:11:45 +0800 Message-Id: <20161214101145.11171-5-haozhong.zhang@intel.com> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20161214101145.11171-1-haozhong.zhang@intel.com> References: <20161214101145.11171-1-haozhong.zhang@intel.com> Cc: Haozhong Zhang , Kevin Tian , Jun Nakajima , Andrew Cooper , Jan Beulich Subject: [Xen-devel] [PATCH v2 4/4] nestedhvm: replace VMCX_EADDR by INVALID_PADDR X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP ... because INVALID_PADDR is a more general one. Suggested-by: Jan Beulich Signed-off-by: Haozhong Zhang Reviewed-by: Jan Beulich Reviewed-by: Kevin Tian Reviewed-by: Boris Ostrovsky --- xen/arch/x86/hvm/nestedhvm.c | 2 +- xen/arch/x86/hvm/svm/nestedsvm.c | 18 +++++++++--------- xen/arch/x86/hvm/svm/vmcb.c | 2 +- xen/arch/x86/hvm/vmx/vvmx.c | 16 ++++++++-------- xen/include/asm-x86/hvm/vcpu.h | 2 -- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/xen/arch/x86/hvm/nestedhvm.c b/xen/arch/x86/hvm/nestedhvm.c index c4671d8..c09c5b2 100644 --- a/xen/arch/x86/hvm/nestedhvm.c +++ b/xen/arch/x86/hvm/nestedhvm.c @@ -54,7 +54,7 @@ nestedhvm_vcpu_reset(struct vcpu *v) hvm_unmap_guest_frame(nv->nv_vvmcx, 1); nv->nv_vvmcx = NULL; - nv->nv_vvmcxaddr = VMCX_EADDR; + nv->nv_vvmcxaddr = INVALID_PADDR; nv->nv_flushp2m = 0; nv->nv_p2m = NULL; diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nestedsvm.c index 8c9b073..4d9de86 100644 --- a/xen/arch/x86/hvm/svm/nestedsvm.c +++ b/xen/arch/x86/hvm/svm/nestedsvm.c @@ -68,10 +68,10 @@ int nestedsvm_vmcb_map(struct vcpu *v, uint64_t vmcbaddr) struct nestedvcpu *nv = &vcpu_nestedhvm(v); if (nv->nv_vvmcx != NULL && nv->nv_vvmcxaddr != vmcbaddr) { - ASSERT(nv->nv_vvmcxaddr != VMCX_EADDR); + ASSERT(nv->nv_vvmcxaddr != INVALID_PADDR); hvm_unmap_guest_frame(nv->nv_vvmcx, 1); nv->nv_vvmcx = NULL; - nv->nv_vvmcxaddr = VMCX_EADDR; + nv->nv_vvmcxaddr = INVALID_PADDR; } if ( !nv->nv_vvmcx ) @@ -154,7 +154,7 @@ void nsvm_vcpu_destroy(struct vcpu *v) if (nv->nv_n2vmcx) { free_vmcb(nv->nv_n2vmcx); nv->nv_n2vmcx = NULL; - nv->nv_n2vmcx_pa = VMCX_EADDR; + nv->nv_n2vmcx_pa = INVALID_PADDR; } if (svm->ns_iomap) svm->ns_iomap = NULL; @@ -164,8 +164,8 @@ int nsvm_vcpu_reset(struct vcpu *v) { struct nestedsvm *svm = &vcpu_nestedsvm(v); - svm->ns_msr_hsavepa = VMCX_EADDR; - svm->ns_ovvmcb_pa = VMCX_EADDR; + svm->ns_msr_hsavepa = INVALID_PADDR; + svm->ns_ovvmcb_pa = INVALID_PADDR; svm->ns_tscratio = DEFAULT_TSC_RATIO; @@ -425,7 +425,7 @@ static int nsvm_vmcb_prepare4vmrun(struct vcpu *v, struct cpu_user_regs *regs) /* Check if virtual VMCB cleanbits are valid */ vcleanbits_valid = 1; - if (svm->ns_ovvmcb_pa == VMCX_EADDR) + if ( svm->ns_ovvmcb_pa == INVALID_PADDR ) vcleanbits_valid = 0; if (svm->ns_ovvmcb_pa != nv->nv_vvmcxaddr) vcleanbits_valid = 0; @@ -674,7 +674,7 @@ nsvm_vcpu_vmentry(struct vcpu *v, struct cpu_user_regs *regs, ns_vmcb = nv->nv_vvmcx; ASSERT(ns_vmcb != NULL); ASSERT(nv->nv_n2vmcx != NULL); - ASSERT(nv->nv_n2vmcx_pa != VMCX_EADDR); + ASSERT(nv->nv_n2vmcx_pa != INVALID_PADDR); /* Save values for later use. Needed for Nested-on-Nested and * Shadow-on-Shadow paging. @@ -1490,8 +1490,8 @@ void nsvm_vcpu_switch(struct cpu_user_regs *regs) ASSERT(v->arch.hvm_svm.vmcb != NULL); ASSERT(nv->nv_n1vmcx != NULL); ASSERT(nv->nv_n2vmcx != NULL); - ASSERT(nv->nv_n1vmcx_pa != VMCX_EADDR); - ASSERT(nv->nv_n2vmcx_pa != VMCX_EADDR); + ASSERT(nv->nv_n1vmcx_pa != INVALID_PADDR); + ASSERT(nv->nv_n2vmcx_pa != INVALID_PADDR); if (nv->nv_vmexit_pending) { vmexit: diff --git a/xen/arch/x86/hvm/svm/vmcb.c b/xen/arch/x86/hvm/svm/vmcb.c index 9ea014f..70d75e7 100644 --- a/xen/arch/x86/hvm/svm/vmcb.c +++ b/xen/arch/x86/hvm/svm/vmcb.c @@ -273,7 +273,7 @@ void svm_destroy_vmcb(struct vcpu *v) } nv->nv_n1vmcx = NULL; - nv->nv_n1vmcx_pa = VMCX_EADDR; + nv->nv_n1vmcx_pa = INVALID_PADDR; arch_svm->vmcb = NULL; } diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index 5523146..c4f19a0 100644 --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -114,7 +114,7 @@ int nvmx_vcpu_initialise(struct vcpu *v) nvmx->guest_vpid = 0; nvmx->vmxon_region_pa = INVALID_PADDR; nvcpu->nv_vvmcx = NULL; - nvcpu->nv_vvmcxaddr = VMCX_EADDR; + nvcpu->nv_vvmcxaddr = INVALID_PADDR; nvmx->intr.intr_info = 0; nvmx->intr.error_code = 0; nvmx->iobitmap[0] = NULL; @@ -766,10 +766,10 @@ static void nvmx_purge_vvmcs(struct vcpu *v) int i; __clear_current_vvmcs(v); - if ( nvcpu->nv_vvmcxaddr != VMCX_EADDR ) + if ( nvcpu->nv_vvmcxaddr != INVALID_PADDR ) hvm_unmap_guest_frame(nvcpu->nv_vvmcx, 1); nvcpu->nv_vvmcx = NULL; - nvcpu->nv_vvmcxaddr = VMCX_EADDR; + nvcpu->nv_vvmcxaddr = INVALID_PADDR; v->arch.hvm_vmx.vmcs_shadow_maddr = 0; for (i=0; i<2; i++) { if ( nvmx->iobitmap[i] ) { @@ -1393,7 +1393,7 @@ int nvmx_handle_vmxon(struct cpu_user_regs *regs) if ( nvmx_vcpu_in_vmx(v) ) { vmreturn(regs, - nvcpu->nv_vvmcxaddr != VMCX_EADDR ? + nvcpu->nv_vvmcxaddr != INVALID_PADDR ? VMFAIL_VALID : VMFAIL_INVALID); return X86EMUL_OKAY; } @@ -1509,7 +1509,7 @@ static int nvmx_vmresume(struct vcpu *v, struct cpu_user_regs *regs) struct nestedvcpu *nvcpu = &vcpu_nestedhvm(v); /* check VMCS is valid and IO BITMAP is set */ - if ( (nvcpu->nv_vvmcxaddr != VMCX_EADDR) && + if ( (nvcpu->nv_vvmcxaddr != INVALID_PADDR) && ((nvmx->iobitmap[0] && nvmx->iobitmap[1]) || !(__n2_exec_control(v) & CPU_BASED_ACTIVATE_IO_BITMAP) ) ) nvcpu->nv_vmentry_pending = 1; @@ -1529,7 +1529,7 @@ int nvmx_handle_vmresume(struct cpu_user_regs *regs) if ( rc != X86EMUL_OKAY ) return rc; - if ( vcpu_nestedhvm(v).nv_vvmcxaddr == VMCX_EADDR ) + if ( vcpu_nestedhvm(v).nv_vvmcxaddr == INVALID_PADDR ) { vmreturn (regs, VMFAIL_INVALID); return X86EMUL_OKAY; @@ -1554,7 +1554,7 @@ int nvmx_handle_vmlaunch(struct cpu_user_regs *regs) if ( rc != X86EMUL_OKAY ) return rc; - if ( vcpu_nestedhvm(v).nv_vvmcxaddr == VMCX_EADDR ) + if ( vcpu_nestedhvm(v).nv_vvmcxaddr == INVALID_PADDR ) { vmreturn (regs, VMFAIL_INVALID); return X86EMUL_OKAY; @@ -1599,7 +1599,7 @@ int nvmx_handle_vmptrld(struct cpu_user_regs *regs) if ( nvcpu->nv_vvmcxaddr != gpa ) nvmx_purge_vvmcs(v); - if ( nvcpu->nv_vvmcxaddr == VMCX_EADDR ) + if ( nvcpu->nv_vvmcxaddr == INVALID_PADDR ) { bool_t writable; void *vvmcx = hvm_map_guest_frame_rw(paddr_to_pfn(gpa), 1, &writable); diff --git a/xen/include/asm-x86/hvm/vcpu.h b/xen/include/asm-x86/hvm/vcpu.h index d485536..7b411a8 100644 --- a/xen/include/asm-x86/hvm/vcpu.h +++ b/xen/include/asm-x86/hvm/vcpu.h @@ -97,8 +97,6 @@ static inline bool_t hvm_vcpu_io_need_completion(const struct hvm_vcpu_io *vio) !vio->io_req.data_is_ptr; } -#define VMCX_EADDR (~0ULL) - struct nestedvcpu { bool_t nv_guestmode; /* vcpu in guestmode? */ void *nv_vvmcx; /* l1 guest virtual VMCB/VMCS */