From nobody Mon Feb 9 09:42:54 2026 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1579629087; cv=none; d=zohomail.com; s=zohoarc; b=HAD9qgnwigOKUuusKIO3vXXgaMwKpaXdiSM56tYKHHBtwyOhApX1pcvSFN//0/5CsRiVaMmkWGoa1JRKdFAxpVkgNNMWwnYxpdrbYLkvtrnNV1vx1u/Sxl8MO/KWklKAQDtKP0z/OKVv+NdXBJOeZm+SliCNoDfb/9h/X5rszPY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579629087; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=FhzsdjJF4GhYiexAIqo9Ga/BuK1HErTtmDyi8em9A2k=; b=ETcBKIRGkl8FTEeBpb2t/0sLey1/QGd4FjWdAIwZ08k2gcj5LsqIObnnfKHahLvH2in9evwM6Vyki3CfHHNS0CObRHaF9B410Os+dGYKlIpFeJD09Uv09xmOS+gM4Wtaa6wRlaM80sqNtBw4pQGyzg6ce1ZsL0qpkewTU6L7h/g= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=none (zohomail.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1579629087647839.9568313714462; Tue, 21 Jan 2020 09:51:27 -0800 (PST) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1itxfu-000540-BM; Tue, 21 Jan 2020 17:50:50 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1itxfs-00052C-Bj for xen-devel@lists.xenproject.org; Tue, 21 Jan 2020 17:50:48 +0000 Received: from mga04.intel.com (unknown [192.55.52.120]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 7bdf470a-3c76-11ea-bb21-12813bfff9fa; Tue, 21 Jan 2020 17:50:17 +0000 (UTC) Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Jan 2020 09:50:06 -0800 Received: from tlengyel-mobl2.amr.corp.intel.com (HELO localhost.localdomain) ([10.251.23.127]) by orsmga006.jf.intel.com with ESMTP; 21 Jan 2020 09:50:06 -0800 X-Inumbo-ID: 7bdf470a-3c76-11ea-bb21-12813bfff9fa X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,346,1574150400"; d="scan'208";a="228929210" From: Tamas K Lengyel To: xen-devel@lists.xenproject.org Date: Tue, 21 Jan 2020 09:49:45 -0800 Message-Id: <6be751e27d81f799377e1a07eb11842582f102f6.1579628566.git.tamas.lengyel@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v5 12/18] x86/mem_sharing: Enable mem_sharing on first memop X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Tamas K Lengyel , Tamas K Lengyel , Wei Liu , George Dunlap , Andrew Cooper , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" It is wasteful to require separate hypercalls to enable sharing on both the parent and the client domain during VM forking. To speed things up we enable sharing on the first memop in case it wasn't already enabled. Signed-off-by: Tamas K Lengyel Reviewed-by: Jan Beulich --- xen/arch/x86/mm/mem_sharing.c | 52 ++++++++++++++--------------------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/xen/arch/x86/mm/mem_sharing.c b/xen/arch/x86/mm/mem_sharing.c index 21ce8d32f3..172f02e780 100644 --- a/xen/arch/x86/mm/mem_sharing.c +++ b/xen/arch/x86/mm/mem_sharing.c @@ -1400,6 +1400,24 @@ static int range_share(struct domain *d, struct doma= in *cd, return rc; } =20 +static inline int mem_sharing_control(struct domain *d, bool enable) +{ + if ( enable ) + { + if ( unlikely(!is_hvm_domain(d)) ) + return -EOPNOTSUPP; + + if ( unlikely(!hap_enabled(d)) ) + return -ENODEV; + + if ( unlikely(is_iommu_enabled(d)) ) + return -EXDEV; + } + + d->arch.hvm.mem_sharing.enabled =3D enable; + return 0; +} + int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_sharing_op_t) arg) { int rc; @@ -1421,10 +1439,8 @@ int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem= _sharing_op_t) arg) if ( rc ) goto out; =20 - /* Only HAP is supported */ - rc =3D -ENODEV; - if ( !mem_sharing_enabled(d) ) - goto out; + if ( !mem_sharing_enabled(d) && (rc =3D mem_sharing_control(d, true)) ) + return rc; =20 switch ( mso.op ) { @@ -1432,10 +1448,6 @@ int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem= _sharing_op_t) arg) { shr_handle_t handle; =20 - rc =3D -EINVAL; - if ( !mem_sharing_enabled(d) ) - goto out; - rc =3D nominate_page(d, _gfn(mso.u.nominate.u.gfn), 0, &handle); mso.u.nominate.handle =3D handle; } @@ -1447,9 +1459,6 @@ int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_= sharing_op_t) arg) gfn_t gfn; shr_handle_t handle; =20 - rc =3D -EINVAL; - if ( !mem_sharing_enabled(d) ) - goto out; rc =3D mem_sharing_gref_to_gfn(d->grant_table, gref, &gfn, NULL); if ( rc < 0 ) goto out; @@ -1465,10 +1474,6 @@ int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem= _sharing_op_t) arg) struct domain *cd; shr_handle_t sh, ch; =20 - rc =3D -EINVAL; - if ( !mem_sharing_enabled(d) ) - goto out; - rc =3D rcu_lock_live_remote_domain_by_id(mso.u.share.client_domain, &cd); if ( rc ) @@ -1535,10 +1540,6 @@ int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem= _sharing_op_t) arg) struct domain *cd; shr_handle_t sh; =20 - rc =3D -EINVAL; - if ( !mem_sharing_enabled(d) ) - goto out; - rc =3D rcu_lock_live_remote_domain_by_id(mso.u.share.client_domain, &cd); if ( rc ) @@ -1597,9 +1598,6 @@ int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_= sharing_op_t) arg) mso.u.range.opaque > mso.u.range.last_gfn) ) goto out; =20 - if ( !mem_sharing_enabled(d) ) - goto out; - rc =3D rcu_lock_live_remote_domain_by_id(mso.u.range.client_domain, &cd); if ( rc ) @@ -1691,18 +1689,10 @@ int mem_sharing_domctl(struct domain *d, struct xen= _domctl_mem_sharing_op *mec) { int rc; =20 - /* Only HAP is supported */ - if ( !hap_enabled(d) ) - return -ENODEV; - switch ( mec->op ) { case XEN_DOMCTL_MEM_SHARING_CONTROL: - rc =3D 0; - if ( unlikely(is_iommu_enabled(d) && mec->u.enable) ) - rc =3D -EXDEV; - else - d->arch.hvm.mem_sharing_enabled =3D mec->u.enable; + rc =3D mem_sharing_control(d, mec->u.enable); break; =20 default: --=20 2.20.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel