From patchwork Mon Jun 3 16:03:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 165662 Delivered-To: patch@linaro.org Received: by 2002:a92:9e1a:0:0:0:0:0 with SMTP id q26csp4660386ili; Mon, 3 Jun 2019 09:05:27 -0700 (PDT) X-Google-Smtp-Source: APXvYqyZomMZv8yNfqJY0vgSr7vsxRXquH9opo/tDUdEkUsKmb0F05Hkv9qVpZcn6d+MEEWDc3CJ X-Received: by 2002:a24:aa42:: with SMTP id y2mr18848016iti.23.1559577927102; Mon, 03 Jun 2019 09:05:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559577927; cv=none; d=google.com; s=arc-20160816; b=GpTflRlIEsMLlR9arViFHPCOY3dWiyL9k78Tz4jUVedIbBa9U4oSskZdSiLk41tosA OeP37wx5U+ggfqls/h6P6zl4YwP6palQgCLq/P0PVKn3Dw+KdKf6kyGFuiagFoApjZJu +JOCtIsUPt7CCubDkJ1sXREOn1ybXUWHmqDJ1wT5OmLxzkZ8Jk96eS2QrvhEpbUnt70B KWU1BGeBCbXt2Ad9BzJbY+vi+NhtUjwoDF8yQwrJfVT1JZpc0QulISkkSVOpIZYlqiD2 aq2GnAKilOTh/OrcbSmRzqP8nsAEfomt0n647AFhuCL4xJj276fE6ar3bNMs28hkUHvg Ma6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:references:in-reply-to:message-id:date:to:from; bh=N11UoGuk6+T2schottcahn0oFtGnqfSGlkL2B9oPHe8=; b=bQO+vBkOyJtexAX6C799Q0gA25+ArqyUbRAYjufGD5pijjr9qmIOY+iMEDluVYT2ax v9p8RU6l3gZxZSIUWcx8Mp69veS/w/7i18vW28Kt1FI5BPoslM2kQRLfqp0t18PjB7Ac VRizdGmrwVbscMr0aYGwjaYu9S39fInOQGnoLrAH0UyKwb2GETGSuPWONmcWM62SvLk1 Ojw4RSwS2g3TegPrQkoQr5AlrTQkWh90d36Gu7JtLPsorZKTv20Cm8FGE4JeQbXqT/RL 4mSftwdeSdW5KFaWfYXI23dKT9OFv8SaBvnqm/ALdGPwm7XeEFAdr2g4cRJy1n+4UQFv Oq7g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id n198si9353067itb.33.2019.06.03.09.05.27 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 03 Jun 2019 09:05:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hXpRN-0001uE-4b; Mon, 03 Jun 2019 16:04:05 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hXpRL-0001tP-O2 for xen-devel@lists.xenproject.org; Mon, 03 Jun 2019 16:04:03 +0000 X-Inumbo-ID: 344ce139-8619-11e9-8980-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id 344ce139-8619-11e9-8980-bc764e045a96; Mon, 03 Jun 2019 16:04:02 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D3D6D80D; Mon, 3 Jun 2019 09:04:01 -0700 (PDT) Received: from e108454-lin.cambridge.arm.com (e108454-lin.cambridge.arm.com [10.1.196.50]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A099C3F246; Mon, 3 Jun 2019 09:04:00 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Mon, 3 Jun 2019 17:03:38 +0100 Message-Id: <20190603160350.29806-3-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190603160350.29806-1-julien.grall@arm.com> References: <20190603160350.29806-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH v3 02/14] xen/x86: Use mfn_to_gfn rather than mfn_to_gmfn 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: Andrew Cooper , Julien Grall , Wei Liu , Jan Beulich , =?utf-8?q?Roger_Pau_Monn=C3=A9?= MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" mfn_to_gfn and mfn_to_gmfn are doing exactly the same except the former is using mfn_t and gfn_t (return type). Furthermore, the naming of the former is more consistent with the current naming scheme (GFN/MFN). So replace mfn_to_gmfn with mfn_to_gfn in x86 code. Take the opportunity to convert some of the callers to use typesafe GFN and format the message correctly. No functional changes. Signed-off-by: Julien Grall Reviewed-by: Jan Beulich --- Changes in v3: - The hunk in x86/mm.c is not necessary anymore - Update printk message to use GFN rather than frame when suitable - Update commit message with some NITs - Add Jan's reviewed-by Changes in v2: - mfn_to_gfn now returns a gfn_t - Use %pd and PRI_gfn when possible in the message - Don't split format string to help grep/ack. --- xen/arch/x86/domain.c | 34 +++++++++++++++++++--------------- xen/arch/x86/pv/emul-priv-op.c | 4 ++-- xen/drivers/passthrough/x86/iommu.c | 16 +++++++++------- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 9485a17ddd..6553adc5c0 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -700,7 +700,7 @@ int arch_domain_soft_reset(struct domain *d) int ret = 0; struct domain *owner; mfn_t mfn; - unsigned long gfn; + gfn_t gfn; p2m_type_t p2mt; unsigned int i; @@ -734,19 +734,20 @@ int arch_domain_soft_reset(struct domain *d) ASSERT( owner == d ); mfn = page_to_mfn(page); - gfn = mfn_to_gmfn(d, mfn_x(mfn)); + gfn = mfn_to_gfn(d, mfn); /* * gfn == INVALID_GFN indicates that the shared_info page was never mapped * to the domain's address space and there is nothing to replace. */ - if ( gfn == gfn_x(INVALID_GFN) ) + if ( gfn_eq(gfn, INVALID_GFN) ) goto exit_put_page; - if ( !mfn_eq(get_gfn_query(d, gfn, &p2mt), mfn) ) + if ( !mfn_eq(get_gfn_query(d, gfn_x(gfn), &p2mt), mfn) ) { - printk(XENLOG_G_ERR "Failed to get Dom%d's shared_info GFN (%lx)\n", - d->domain_id, gfn); + printk(XENLOG_G_ERR + "Failed to get %pd's shared_info GFN (%"PRI_gfn")\n", + d, gfn_x(gfn)); ret = -EINVAL; goto exit_put_gfn; } @@ -754,31 +755,34 @@ int arch_domain_soft_reset(struct domain *d) new_page = alloc_domheap_page(d, 0); if ( !new_page ) { - printk(XENLOG_G_ERR "Failed to alloc a page to replace" - " Dom%d's shared_info frame %lx\n", d->domain_id, gfn); + printk(XENLOG_G_ERR + "Failed to alloc a page to replace %pd's shared_info GFN %"PRI_gfn"\n", + d, gfn_x(gfn)); ret = -ENOMEM; goto exit_put_gfn; } - ret = guest_physmap_remove_page(d, _gfn(gfn), mfn, PAGE_ORDER_4K); + ret = guest_physmap_remove_page(d, gfn, mfn, PAGE_ORDER_4K); if ( ret ) { - printk(XENLOG_G_ERR "Failed to remove Dom%d's shared_info frame %lx\n", - d->domain_id, gfn); + printk(XENLOG_G_ERR + "Failed to remove %pd's shared_info GFN %"PRI_gfn"\n", + d, gfn_x(gfn)); free_domheap_page(new_page); goto exit_put_gfn; } - ret = guest_physmap_add_page(d, _gfn(gfn), page_to_mfn(new_page), + ret = guest_physmap_add_page(d, gfn, page_to_mfn(new_page), PAGE_ORDER_4K); if ( ret ) { - printk(XENLOG_G_ERR "Failed to add a page to replace" - " Dom%d's shared_info frame %lx\n", d->domain_id, gfn); + printk(XENLOG_G_ERR + "Failed to add a page to replace %pd's shared_info frame %"PRI_gfn"\n", + d, gfn_x(gfn)); free_domheap_page(new_page); } exit_put_gfn: - put_gfn(d, gfn); + put_gfn(d, gfn_x(gfn)); exit_put_page: put_page(page); diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-op.c index b20d79c7a3..ab4c8a7ec4 100644 --- a/xen/arch/x86/pv/emul-priv-op.c +++ b/xen/arch/x86/pv/emul-priv-op.c @@ -712,7 +712,7 @@ static int read_cr(unsigned int reg, unsigned long *val, if ( !is_pv_32bit_domain(currd) ) { mfn = pagetable_get_mfn(curr->arch.guest_table); - *val = xen_pfn_to_cr3(mfn_to_gmfn(currd, mfn_x(mfn))); + *val = xen_pfn_to_cr3(gfn_x(mfn_to_gfn(currd, mfn))); } else { @@ -721,7 +721,7 @@ static int read_cr(unsigned int reg, unsigned long *val, mfn = l4e_get_mfn(*pl4e); unmap_domain_page(pl4e); - *val = compat_pfn_to_cr3(mfn_to_gmfn(currd, mfn_x(mfn))); + *val = compat_pfn_to_cr3(gfn_x(mfn_to_gfn(currd, mfn))); } /* PTs should not be shared */ BUG_ON(page_get_owner(mfn_to_page(mfn)) == dom_cow); diff --git a/xen/drivers/passthrough/x86/iommu.c b/xen/drivers/passthrough/x86/iommu.c index 0fa6dcc3fd..35c2b3297c 100644 --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -90,15 +90,17 @@ int arch_iommu_populate_page_table(struct domain *d) if ( is_hvm_domain(d) || (page->u.inuse.type_info & PGT_type_mask) == PGT_writable_page ) { - unsigned long mfn = mfn_x(page_to_mfn(page)); - unsigned long gfn = mfn_to_gmfn(d, mfn); + mfn_t mfn = page_to_mfn(page); + gfn_t gfn = mfn_to_gfn(d, mfn); unsigned int flush_flags = 0; - if ( gfn != gfn_x(INVALID_GFN) ) + if ( !gfn_eq(gfn, INVALID_GFN) ) { - ASSERT(!(gfn >> DEFAULT_DOMAIN_ADDRESS_WIDTH)); - BUG_ON(SHARED_M2P(gfn)); - rc = iommu_map(d, _dfn(gfn), _mfn(mfn), PAGE_ORDER_4K, + dfn_t dfn = _dfn(gfn_x(gfn)); + + ASSERT(!(gfn_x(gfn) >> DEFAULT_DOMAIN_ADDRESS_WIDTH)); + BUG_ON(SHARED_M2P(gfn_x(gfn))); + rc = iommu_map(d, dfn, mfn, PAGE_ORDER_4K, IOMMUF_readable | IOMMUF_writable, &flush_flags); @@ -116,7 +118,7 @@ int arch_iommu_populate_page_table(struct domain *d) ((page->u.inuse.type_info & PGT_type_mask) != PGT_writable_page) ) { - rc = iommu_unmap(d, _dfn(gfn), PAGE_ORDER_4K, &flush_flags); + rc = iommu_unmap(d, dfn, PAGE_ORDER_4K, &flush_flags); /* If the type changed yet again, simply force a retry. */ if ( !rc && ((page->u.inuse.type_info & PGT_type_mask) == PGT_writable_page) )