From patchwork Tue Jul 12 13:59:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 71849 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp493075qga; Tue, 12 Jul 2016 07:03:57 -0700 (PDT) X-Received: by 10.107.34.148 with SMTP id i142mr3004205ioi.75.1468332224534; Tue, 12 Jul 2016 07:03:44 -0700 (PDT) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id 73si3332725iou.230.2016.07.12.07.03.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Jul 2016 07:03:44 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bMyEE-0007Kd-6m; Tue, 12 Jul 2016 14:00:02 +0000 Received: from mail6.bemta6.messagelabs.com ([85.158.143.247]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bMyED-0007AQ-FG for xen-devel@lists.xen.org; Tue, 12 Jul 2016 14:00:01 +0000 Received: from [85.158.143.35] by server-3.bemta-6.messagelabs.com id E1/5A-22092-0E7F4875; Tue, 12 Jul 2016 14:00:00 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrJLMWRWlGSWpSXmKPExsVysyfVTff+95Z wgxdXBSyWfFzM4sDocXT3b6YAxijWzLyk/IoE1oxn/yexFfxYy1hx69t/1gbGrS2MXYxcHEIC mxglrs04wgLhnGaUuL11MZDDycEmoClx5/MnJhBbREBa4trny2AdzAINLBILZ/UxgiSEBZwlt p1aB1bEIqAqMWHDVHYQm1fAReLpw35WEFtCQE7i5LHJYDangKvE1+knwXqFgGouLPvKOoGRew EjwypG9eLUorLUIl1jvaSizPSMktzEzBxdQwMzvdzU4uLE9NScxKRiveT83E2MQC8zAMEOxo5 /TocYJTmYlER5m5lbwoX4kvJTKjMSizPii0pzUosPMcpwcChJ8J77BpQTLEpNT61Iy8wBhhtM WoKDR0mE9zVImre4IDG3ODMdInWKUVFKnHcCSEIAJJFRmgfXBgvxS4yyUsK8jECHCPEUpBblZ pagyr9iFOdgVBLmbQaZwpOZVwI3/RXQYiagxbUOzSCLSxIRUlINjJmvLe/598zXDcg+X7nZVy /c1/vJs/b96QlKxacCtd6suLU/dJ391697rKT2vdqRtPzUzgVCi0KldcsP6+7Pu/Rfa2ul0Vq RyCuPF/L77Vz/+azhr9qs/OjOxwflcr2ubVvZuHz/IcWDOUYJ7DOaPX/9N0q/k7O5Z6l+3NoA vx2h/AUVRvpvY5RYijMSDbWYi4oTAXnibVxsAgAA X-Env-Sender: julien.grall@arm.com X-Msg-Ref: server-4.tower-21.messagelabs.com!1468331998!17383968!1 X-Originating-IP: [217.140.101.70] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 8.77; banners=-,-,- X-VirusChecked: Checked Received: (qmail 3919 invoked from network); 12 Jul 2016 13:59:58 -0000 Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by server-4.tower-21.messagelabs.com with SMTP; 12 Jul 2016 13:59:58 -0000 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 2B2AB447; Tue, 12 Jul 2016 07:00:59 -0700 (PDT) Received: from e108454-lin.cambridge.arm.com (e108454-lin.cambridge.arm.com [10.1.215.28]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 09FE73F213; Tue, 12 Jul 2016 06:59:52 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xen.org Date: Tue, 12 Jul 2016 14:59:25 +0100 Message-Id: <1468331975-27331-5-git-send-email-julien.grall@arm.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1468331975-27331-1-git-send-email-julien.grall@arm.com> References: <1468331975-27331-1-git-send-email-julien.grall@arm.com> Cc: Elena Ufimtseva , Kevin Tian , sstabellini@kernel.org, Feng Wu , Suravee Suthikulpanit , Jun Nakajima , Andrew Cooper , Tim Deegan , George Dunlap , Julien Grall , Paul Durrant , Jan Beulich , Boris Ostrovsky Subject: [Xen-devel] [PATCH v7 04/14] xen: Use a typesafe to define INVALID_GFN 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" Also take the opportunity to convert arch/x86/debug.c to the typesafe gfn. Signed-off-by: Julien Grall Reviewed-by: Andrew Cooper Acked-by: Stefano Stabellini Acked-by: Elena Ufimtseva --- Cc: Jan Beulich Cc: Paul Durrant Cc: Boris Ostrovsky Cc: Suravee Suthikulpanit Cc: Jun Nakajima Cc: Kevin Tian Cc: George Dunlap Cc: Tim Deegan Cc: Feng Wu Changes in v7: - Add Elena's acked-by Changes in v6: - Add Stefano's acked-by for ARM bits - Remove set of brackets when it is not necessary - Add Andrew's reviewed-by Changes in v5: - Patch added --- xen/arch/arm/p2m.c | 4 ++-- xen/arch/x86/debug.c | 18 +++++++++--------- xen/arch/x86/domain.c | 2 +- xen/arch/x86/hvm/emulate.c | 7 ++++--- xen/arch/x86/hvm/hvm.c | 6 +++--- xen/arch/x86/hvm/ioreq.c | 8 ++++---- xen/arch/x86/hvm/svm/nestedsvm.c | 2 +- xen/arch/x86/hvm/vmx/vmx.c | 6 +++--- xen/arch/x86/mm/altp2m.c | 2 +- xen/arch/x86/mm/hap/guest_walk.c | 10 +++++----- xen/arch/x86/mm/hap/nested_ept.c | 2 +- xen/arch/x86/mm/p2m-pod.c | 6 +++--- xen/arch/x86/mm/p2m.c | 18 +++++++++--------- xen/arch/x86/mm/shadow/common.c | 2 +- xen/arch/x86/mm/shadow/multi.c | 2 +- xen/arch/x86/mm/shadow/private.h | 2 +- xen/drivers/passthrough/amd/iommu_map.c | 2 +- xen/drivers/passthrough/vtd/iommu.c | 4 ++-- xen/drivers/passthrough/x86/iommu.c | 2 +- xen/include/asm-x86/guest_pt.h | 4 ++-- xen/include/asm-x86/p2m.h | 2 +- xen/include/xen/mm.h | 2 +- 22 files changed, 57 insertions(+), 56 deletions(-) diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c index d690602..c938dde 100644 --- a/xen/arch/arm/p2m.c +++ b/xen/arch/arm/p2m.c @@ -479,7 +479,7 @@ static int __p2m_get_mem_access(struct domain *d, gfn_t gfn, } /* If request to get default access. */ - if ( gfn_x(gfn) == INVALID_GFN ) + if ( gfn_eq(gfn, INVALID_GFN) ) { *access = memaccess[p2m->default_access]; return 0; @@ -1879,7 +1879,7 @@ long p2m_set_mem_access(struct domain *d, gfn_t gfn, uint32_t nr, p2m->mem_access_enabled = true; /* If request to set default access. */ - if ( gfn_x(gfn) == INVALID_GFN ) + if ( gfn_eq(gfn, INVALID_GFN) ) { p2m->default_access = a; return 0; diff --git a/xen/arch/x86/debug.c b/xen/arch/x86/debug.c index 9213ea7..3030022 100644 --- a/xen/arch/x86/debug.c +++ b/xen/arch/x86/debug.c @@ -44,8 +44,7 @@ typedef unsigned char dbgbyte_t; /* Returns: mfn for the given (hvm guest) vaddr */ static mfn_t -dbg_hvm_va2mfn(dbgva_t vaddr, struct domain *dp, int toaddr, - unsigned long *gfn) +dbg_hvm_va2mfn(dbgva_t vaddr, struct domain *dp, int toaddr, gfn_t *gfn) { mfn_t mfn; uint32_t pfec = PFEC_page_present; @@ -53,14 +52,14 @@ dbg_hvm_va2mfn(dbgva_t vaddr, struct domain *dp, int toaddr, DBGP2("vaddr:%lx domid:%d\n", vaddr, dp->domain_id); - *gfn = paging_gva_to_gfn(dp->vcpu[0], vaddr, &pfec); - if ( *gfn == INVALID_GFN ) + *gfn = _gfn(paging_gva_to_gfn(dp->vcpu[0], vaddr, &pfec)); + if ( gfn_eq(*gfn, INVALID_GFN) ) { DBGP2("kdb:bad gfn from gva_to_gfn\n"); return INVALID_MFN; } - mfn = get_gfn(dp, *gfn, &gfntype); + mfn = get_gfn(dp, gfn_x(*gfn), &gfntype); if ( p2m_is_readonly(gfntype) && toaddr ) { DBGP2("kdb:p2m_is_readonly: gfntype:%x\n", gfntype); @@ -72,7 +71,7 @@ dbg_hvm_va2mfn(dbgva_t vaddr, struct domain *dp, int toaddr, if ( mfn_eq(mfn, INVALID_MFN) ) { - put_gfn(dp, *gfn); + put_gfn(dp, gfn_x(*gfn)); *gfn = INVALID_GFN; } @@ -165,7 +164,8 @@ unsigned int dbg_rw_guest_mem(struct domain *dp, void * __user gaddr, char *va; unsigned long addr = (unsigned long)gaddr; mfn_t mfn; - unsigned long gfn = INVALID_GFN, pagecnt; + gfn_t gfn = INVALID_GFN; + unsigned long pagecnt; pagecnt = min_t(long, PAGE_SIZE - (addr & ~PAGE_MASK), len); @@ -189,8 +189,8 @@ unsigned int dbg_rw_guest_mem(struct domain *dp, void * __user gaddr, } unmap_domain_page(va); - if ( gfn != INVALID_GFN ) - put_gfn(dp, gfn); + if ( !gfn_eq(gfn, INVALID_GFN) ) + put_gfn(dp, gfn_x(gfn)); addr += pagecnt; buf += pagecnt; diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index bb59247..c8c7e2d 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -783,7 +783,7 @@ int arch_domain_soft_reset(struct domain *d) * 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 == INVALID_GFN ) + if ( gfn == gfn_x(INVALID_GFN) ) goto exit_put_page; if ( mfn_x(get_gfn_query(d, gfn, &p2mt)) != mfn ) diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index 855af4d..c55ad7b 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -455,7 +455,7 @@ static int hvmemul_linear_to_phys( return rc; pfn = _paddr >> PAGE_SHIFT; } - else if ( (pfn = paging_gva_to_gfn(curr, addr, &pfec)) == INVALID_GFN ) + else if ( (pfn = paging_gva_to_gfn(curr, addr, &pfec)) == gfn_x(INVALID_GFN) ) { if ( pfec & (PFEC_page_paged | PFEC_page_shared) ) return X86EMUL_RETRY; @@ -472,7 +472,8 @@ static int hvmemul_linear_to_phys( npfn = paging_gva_to_gfn(curr, addr, &pfec); /* Is it contiguous with the preceding PFNs? If not then we're done. */ - if ( (npfn == INVALID_GFN) || (npfn != (pfn + (reverse ? -i : i))) ) + if ( (npfn == gfn_x(INVALID_GFN)) || + (npfn != (pfn + (reverse ? -i : i))) ) { if ( pfec & (PFEC_page_paged | PFEC_page_shared) ) return X86EMUL_RETRY; @@ -480,7 +481,7 @@ static int hvmemul_linear_to_phys( if ( done == 0 ) { ASSERT(!reverse); - if ( npfn != INVALID_GFN ) + if ( npfn != gfn_x(INVALID_GFN) ) return X86EMUL_UNHANDLEABLE; hvm_inject_page_fault(pfec, addr & PAGE_MASK); return X86EMUL_EXCEPTION; diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 23757a4..daaee1d 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -3037,7 +3037,7 @@ static enum hvm_copy_result __hvm_copy( if ( flags & HVMCOPY_virt ) { gfn = paging_gva_to_gfn(curr, addr, &pfec); - if ( gfn == INVALID_GFN ) + if ( gfn == gfn_x(INVALID_GFN) ) { if ( pfec & PFEC_page_paged ) return HVMCOPY_gfn_paged_out; @@ -3152,7 +3152,7 @@ static enum hvm_copy_result __hvm_clear(paddr_t addr, int size) count = min_t(int, PAGE_SIZE - (addr & ~PAGE_MASK), todo); gfn = paging_gva_to_gfn(curr, addr, &pfec); - if ( gfn == INVALID_GFN ) + if ( gfn == gfn_x(INVALID_GFN) ) { if ( pfec & PFEC_page_paged ) return HVMCOPY_gfn_paged_out; @@ -5296,7 +5296,7 @@ static int do_altp2m_op( a.u.enable_notify.vcpu_id != curr->vcpu_id ) rc = -EINVAL; - if ( (gfn_x(vcpu_altp2m(curr).veinfo_gfn) != INVALID_GFN) || + if ( !gfn_eq(vcpu_altp2m(curr).veinfo_gfn, INVALID_GFN) || mfn_eq(get_gfn_query_unlocked(curr->domain, a.u.enable_notify.gfn, &p2mt), INVALID_MFN) ) return -EINVAL; diff --git a/xen/arch/x86/hvm/ioreq.c b/xen/arch/x86/hvm/ioreq.c index 7148ac4..d2245e2 100644 --- a/xen/arch/x86/hvm/ioreq.c +++ b/xen/arch/x86/hvm/ioreq.c @@ -204,7 +204,7 @@ static void hvm_free_ioreq_gmfn(struct domain *d, unsigned long gmfn) { unsigned int i = gmfn - d->arch.hvm_domain.ioreq_gmfn.base; - if ( gmfn != INVALID_GFN ) + if ( gmfn != gfn_x(INVALID_GFN) ) set_bit(i, &d->arch.hvm_domain.ioreq_gmfn.mask); } @@ -420,7 +420,7 @@ static int hvm_ioreq_server_map_pages(struct hvm_ioreq_server *s, if ( rc ) return rc; - if ( bufioreq_pfn != INVALID_GFN ) + if ( bufioreq_pfn != gfn_x(INVALID_GFN) ) rc = hvm_map_ioreq_page(s, 1, bufioreq_pfn); if ( rc ) @@ -434,8 +434,8 @@ static int hvm_ioreq_server_setup_pages(struct hvm_ioreq_server *s, bool_t handle_bufioreq) { struct domain *d = s->domain; - unsigned long ioreq_pfn = INVALID_GFN; - unsigned long bufioreq_pfn = INVALID_GFN; + unsigned long ioreq_pfn = gfn_x(INVALID_GFN); + unsigned long bufioreq_pfn = gfn_x(INVALID_GFN); int rc; if ( is_default ) diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nestedsvm.c index 9d2ac09..f9b38ab 100644 --- a/xen/arch/x86/hvm/svm/nestedsvm.c +++ b/xen/arch/x86/hvm/svm/nestedsvm.c @@ -1200,7 +1200,7 @@ nsvm_hap_walk_L1_p2m(struct vcpu *v, paddr_t L2_gpa, paddr_t *L1_gpa, /* Walk the guest-supplied NPT table, just as if it were a pagetable */ gfn = paging_ga_to_gfn_cr3(v, nested_cr3, L2_gpa, &pfec, page_order); - if ( gfn == INVALID_GFN ) + if ( gfn == gfn_x(INVALID_GFN) ) return NESTEDHVM_PAGEFAULT_INJECT; *L1_gpa = (gfn << PAGE_SHIFT) + (L2_gpa & ~PAGE_MASK); diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index e2d69d8..e00d8c2 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -2056,13 +2056,13 @@ static int vmx_vcpu_emulate_vmfunc(struct cpu_user_regs *regs) static bool_t vmx_vcpu_emulate_ve(struct vcpu *v) { bool_t rc = 0, writable; - unsigned long gfn = gfn_x(vcpu_altp2m(v).veinfo_gfn); + gfn_t gfn = vcpu_altp2m(v).veinfo_gfn; ve_info_t *veinfo; - if ( gfn == INVALID_GFN ) + if ( gfn_eq(gfn, INVALID_GFN) ) return 0; - veinfo = hvm_map_guest_frame_rw(gfn, 0, &writable); + veinfo = hvm_map_guest_frame_rw(gfn_x(gfn), 0, &writable); if ( !veinfo ) return 0; if ( !writable || veinfo->semaphore != 0 ) diff --git a/xen/arch/x86/mm/altp2m.c b/xen/arch/x86/mm/altp2m.c index 10605c8..930bdc2 100644 --- a/xen/arch/x86/mm/altp2m.c +++ b/xen/arch/x86/mm/altp2m.c @@ -26,7 +26,7 @@ altp2m_vcpu_reset(struct vcpu *v) struct altp2mvcpu *av = &vcpu_altp2m(v); av->p2midx = INVALID_ALTP2M; - av->veinfo_gfn = _gfn(INVALID_GFN); + av->veinfo_gfn = INVALID_GFN; } void diff --git a/xen/arch/x86/mm/hap/guest_walk.c b/xen/arch/x86/mm/hap/guest_walk.c index d2716f9..1b1a15d 100644 --- a/xen/arch/x86/mm/hap/guest_walk.c +++ b/xen/arch/x86/mm/hap/guest_walk.c @@ -70,14 +70,14 @@ unsigned long hap_p2m_ga_to_gfn(GUEST_PAGING_LEVELS)( if ( top_page ) put_page(top_page); p2m_mem_paging_populate(p2m->domain, cr3 >> PAGE_SHIFT); - return INVALID_GFN; + return gfn_x(INVALID_GFN); } if ( p2m_is_shared(p2mt) ) { pfec[0] = PFEC_page_shared; if ( top_page ) put_page(top_page); - return INVALID_GFN; + return gfn_x(INVALID_GFN); } if ( !top_page ) { @@ -110,12 +110,12 @@ unsigned long hap_p2m_ga_to_gfn(GUEST_PAGING_LEVELS)( ASSERT(p2m_is_hostp2m(p2m)); pfec[0] = PFEC_page_paged; p2m_mem_paging_populate(p2m->domain, gfn_x(gfn)); - return INVALID_GFN; + return gfn_x(INVALID_GFN); } if ( p2m_is_shared(p2mt) ) { pfec[0] = PFEC_page_shared; - return INVALID_GFN; + return gfn_x(INVALID_GFN); } if ( page_order ) @@ -147,7 +147,7 @@ unsigned long hap_p2m_ga_to_gfn(GUEST_PAGING_LEVELS)( if ( !hvm_nx_enabled(v) && !hvm_smep_enabled(v) ) pfec[0] &= ~PFEC_insn_fetch; - return INVALID_GFN; + return gfn_x(INVALID_GFN); } diff --git a/xen/arch/x86/mm/hap/nested_ept.c b/xen/arch/x86/mm/hap/nested_ept.c index 94cf832..02b27b1 100644 --- a/xen/arch/x86/mm/hap/nested_ept.c +++ b/xen/arch/x86/mm/hap/nested_ept.c @@ -236,7 +236,7 @@ int nept_translate_l2ga(struct vcpu *v, paddr_t l2ga, ept_walk_t gw; rwx_acc &= EPTE_RWX_MASK; - *l1gfn = INVALID_GFN; + *l1gfn = gfn_x(INVALID_GFN); rc = nept_walk_tables(v, l2ga, &gw); switch ( rc ) diff --git a/xen/arch/x86/mm/p2m-pod.c b/xen/arch/x86/mm/p2m-pod.c index f384589..149f529 100644 --- a/xen/arch/x86/mm/p2m-pod.c +++ b/xen/arch/x86/mm/p2m-pod.c @@ -1003,7 +1003,7 @@ static void pod_eager_reclaim(struct p2m_domain *p2m) unsigned int idx = (mrp->idx + i++) % ARRAY_SIZE(mrp->list); unsigned long gfn = mrp->list[idx]; - if ( gfn != INVALID_GFN ) + if ( gfn != gfn_x(INVALID_GFN) ) { if ( gfn & POD_LAST_SUPERPAGE ) { @@ -1020,7 +1020,7 @@ static void pod_eager_reclaim(struct p2m_domain *p2m) else p2m_pod_zero_check(p2m, &gfn, 1); - mrp->list[idx] = INVALID_GFN; + mrp->list[idx] = gfn_x(INVALID_GFN); } } while ( (p2m->pod.count == 0) && (i < ARRAY_SIZE(mrp->list)) ); @@ -1031,7 +1031,7 @@ static void pod_eager_record(struct p2m_domain *p2m, { struct pod_mrp_list *mrp = &p2m->pod.mrp; - ASSERT(gfn != INVALID_GFN); + ASSERT(gfn != gfn_x(INVALID_GFN)); mrp->list[mrp->idx++] = gfn | (order == PAGE_ORDER_2M ? POD_LAST_SUPERPAGE : 0); diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index b93c8a2..ff0cce8 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -76,7 +76,7 @@ static int p2m_initialise(struct domain *d, struct p2m_domain *p2m) p2m->np2m_base = P2M_BASE_EADDR; for ( i = 0; i < ARRAY_SIZE(p2m->pod.mrp.list); ++i ) - p2m->pod.mrp.list[i] = INVALID_GFN; + p2m->pod.mrp.list[i] = gfn_x(INVALID_GFN); if ( hap_enabled(d) && cpu_has_vmx ) ret = ept_p2m_init(p2m); @@ -1863,7 +1863,7 @@ long p2m_set_mem_access(struct domain *d, gfn_t gfn, uint32_t nr, } /* If request to set default access. */ - if ( gfn_x(gfn) == INVALID_GFN ) + if ( gfn_eq(gfn, INVALID_GFN) ) { p2m->default_access = a; return 0; @@ -1932,7 +1932,7 @@ int p2m_get_mem_access(struct domain *d, gfn_t gfn, xenmem_access_t *access) }; /* If request to get default access. */ - if ( gfn_x(gfn) == INVALID_GFN ) + if ( gfn_eq(gfn, INVALID_GFN) ) { *access = memaccess[p2m->default_access]; return 0; @@ -2113,8 +2113,8 @@ unsigned long paging_gva_to_gfn(struct vcpu *v, mode = paging_get_nestedmode(v); l2_gfn = mode->gva_to_gfn(v, p2m, va, pfec); - if ( l2_gfn == INVALID_GFN ) - return INVALID_GFN; + if ( l2_gfn == gfn_x(INVALID_GFN) ) + return gfn_x(INVALID_GFN); /* translate l2 guest gfn into l1 guest gfn */ rv = nestedhap_walk_L1_p2m(v, l2_gfn, &l1_gfn, &l1_page_order, &l1_p2ma, @@ -2123,7 +2123,7 @@ unsigned long paging_gva_to_gfn(struct vcpu *v, !!(*pfec & PFEC_insn_fetch)); if ( rv != NESTEDHVM_PAGEFAULT_DONE ) - return INVALID_GFN; + return gfn_x(INVALID_GFN); /* * Sanity check that l1_gfn can be used properly as a 4K mapping, even @@ -2415,7 +2415,7 @@ static void p2m_init_altp2m_helper(struct domain *d, unsigned int i) struct p2m_domain *p2m = d->arch.altp2m_p2m[i]; struct ept_data *ept; - p2m->min_remapped_gfn = INVALID_GFN; + p2m->min_remapped_gfn = gfn_x(INVALID_GFN); p2m->max_remapped_gfn = 0; ept = &p2m->ept; ept->asr = pagetable_get_pfn(p2m_get_pagetable(p2m)); @@ -2551,7 +2551,7 @@ int p2m_change_altp2m_gfn(struct domain *d, unsigned int idx, mfn = ap2m->get_entry(ap2m, gfn_x(old_gfn), &t, &a, 0, NULL, NULL); - if ( gfn_x(new_gfn) == INVALID_GFN ) + if ( gfn_eq(new_gfn, INVALID_GFN) ) { if ( mfn_valid(mfn) ) p2m_remove_page(ap2m, gfn_x(old_gfn), mfn_x(mfn), PAGE_ORDER_4K); @@ -2613,7 +2613,7 @@ static void p2m_reset_altp2m(struct p2m_domain *p2m) /* Uninit and reinit ept to force TLB shootdown */ ept_p2m_uninit(p2m); ept_p2m_init(p2m); - p2m->min_remapped_gfn = INVALID_GFN; + p2m->min_remapped_gfn = gfn_x(INVALID_GFN); p2m->max_remapped_gfn = 0; } diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 42927e4..c22362f 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1707,7 +1707,7 @@ static mfn_t emulate_gva_to_mfn(struct vcpu *v, unsigned long vaddr, /* Translate the VA to a GFN. */ gfn = paging_get_hostmode(v)->gva_to_gfn(v, NULL, vaddr, &pfec); - if ( gfn == INVALID_GFN ) + if ( gfn == gfn_x(INVALID_GFN) ) { if ( is_hvm_vcpu(v) ) hvm_inject_page_fault(pfec, vaddr); diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index f892e2f..e54c8b7 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -3660,7 +3660,7 @@ sh_gva_to_gfn(struct vcpu *v, struct p2m_domain *p2m, */ if ( is_hvm_vcpu(v) && !hvm_nx_enabled(v) && !hvm_smep_enabled(v) ) pfec[0] &= ~PFEC_insn_fetch; - return INVALID_GFN; + return gfn_x(INVALID_GFN); } gfn = guest_walk_to_gfn(&gw); diff --git a/xen/arch/x86/mm/shadow/private.h b/xen/arch/x86/mm/shadow/private.h index c424ad6..824796f 100644 --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -796,7 +796,7 @@ static inline unsigned long vtlb_lookup(struct vcpu *v, unsigned long va, uint32_t pfec) { unsigned long page_number = va >> PAGE_SHIFT; - unsigned long frame_number = INVALID_GFN; + unsigned long frame_number = gfn_x(INVALID_GFN); int i = vtlb_hash(page_number); spin_lock(&v->arch.paging.vtlb_lock); diff --git a/xen/drivers/passthrough/amd/iommu_map.c b/xen/drivers/passthrough/amd/iommu_map.c index c758459..b8c0a48 100644 --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -555,7 +555,7 @@ static int update_paging_mode(struct domain *d, unsigned long gfn) unsigned long old_root_mfn; struct domain_iommu *hd = dom_iommu(d); - if ( gfn == INVALID_GFN ) + if ( gfn == gfn_x(INVALID_GFN) ) return -EADDRNOTAVAIL; ASSERT(!(gfn >> DEFAULT_DOMAIN_ADDRESS_WIDTH)); diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index f010612..c322b9f 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -611,7 +611,7 @@ static int __must_check iommu_flush_iotlb(struct domain *d, if ( iommu_domid == -1 ) continue; - if ( page_count != 1 || gfn == INVALID_GFN ) + if ( page_count != 1 || gfn == gfn_x(INVALID_GFN) ) rc = iommu_flush_iotlb_dsi(iommu, iommu_domid, 0, flush_dev_iotlb); else @@ -640,7 +640,7 @@ static int __must_check iommu_flush_iotlb_pages(struct domain *d, static int __must_check iommu_flush_iotlb_all(struct domain *d) { - return iommu_flush_iotlb(d, INVALID_GFN, 0, 0); + return iommu_flush_iotlb(d, gfn_x(INVALID_GFN), 0, 0); } /* clear one page's page table */ diff --git a/xen/drivers/passthrough/x86/iommu.c b/xen/drivers/passthrough/x86/iommu.c index cd435d7..69cd6c5 100644 --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -61,7 +61,7 @@ int arch_iommu_populate_page_table(struct domain *d) unsigned long mfn = page_to_mfn(page); unsigned long gfn = mfn_to_gmfn(d, mfn); - if ( gfn != INVALID_GFN ) + if ( gfn != gfn_x(INVALID_GFN) ) { ASSERT(!(gfn >> DEFAULT_DOMAIN_ADDRESS_WIDTH)); BUG_ON(SHARED_M2P(gfn)); diff --git a/xen/include/asm-x86/guest_pt.h b/xen/include/asm-x86/guest_pt.h index a8d980c..79ed4ff 100644 --- a/xen/include/asm-x86/guest_pt.h +++ b/xen/include/asm-x86/guest_pt.h @@ -32,7 +32,7 @@ #error GUEST_PAGING_LEVELS not defined #endif -#define VALID_GFN(m) (m != INVALID_GFN) +#define VALID_GFN(m) (m != gfn_x(INVALID_GFN)) static inline int valid_gfn(gfn_t m) @@ -251,7 +251,7 @@ static inline gfn_t guest_walk_to_gfn(walk_t *gw) { if ( !(guest_l1e_get_flags(gw->l1e) & _PAGE_PRESENT) ) - return _gfn(INVALID_GFN); + return INVALID_GFN; return guest_l1e_get_gfn(gw->l1e); } diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index 4ab3574..194020e 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -324,7 +324,7 @@ struct p2m_domain { #define NR_POD_MRP_ENTRIES 32 /* Encode ORDER_2M superpage in top bit of GFN */ -#define POD_LAST_SUPERPAGE (INVALID_GFN & ~(INVALID_GFN >> 1)) +#define POD_LAST_SUPERPAGE (gfn_x(INVALID_GFN) & ~(gfn_x(INVALID_GFN) >> 1)) unsigned long list[NR_POD_MRP_ENTRIES]; unsigned int idx; diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h index 7f207ec..58bc0b8 100644 --- a/xen/include/xen/mm.h +++ b/xen/include/xen/mm.h @@ -84,7 +84,7 @@ static inline bool_t mfn_eq(mfn_t x, mfn_t y) TYPE_SAFE(unsigned long, gfn); #define PRI_gfn "05lx" -#define INVALID_GFN (~0UL) +#define INVALID_GFN _gfn(~0UL) #ifndef gfn_t #define gfn_t /* Grep fodder: gfn_t, _gfn() and gfn_x() are defined above */