From patchwork Tue May 7 15:14:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163537 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883104oca; Tue, 7 May 2019 08:16:47 -0700 (PDT) X-Google-Smtp-Source: APXvYqx6EZ0nx5dlUVvr9tKmxPlBN9y7oFjOsvMoWTLWWnRx+K8OkJ1wBadqfvSCsogCQPmK7VFA X-Received: by 2002:a6b:4a09:: with SMTP id w9mr21656709iob.79.1557242207370; Tue, 07 May 2019 08:16:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242207; cv=none; d=google.com; s=arc-20160816; b=xdBxmoHrZt/ot6tGKNOUWJ+SG2kqilGncErmbBstdB9MeLsEvGCXlFnmWhzKNfygdK m0hM55R+UcSlC+OY2tPJfhkRc9bXS03eXuHtOO3SWwb4RRgbEi1nBmwsnX0gOTlyrQXM XtjN1jiXKul+bjtu1IapViLAOsN16cNM5NNZezzW19J6kLFMWqSl3ue4Ep4He+pNh6Om 6gtyg8nxUNwTQeOzodOxEAosHqCjrAhg/hlov+5zCBKBpAdKG4/rsF8G2p6+Trto9Qvv +8GnOwUr0ER5IqFXp0NSuoD36NmfLVGMSeOFjT4zYedzr9wVrQgY7BhgnhuhKinsDekT 2YZQ== 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=EG7+alMgwO82LH4ioWQnErdjJ5wRfNuINQZ6efmf2LE=; b=wY6VLxT6MH/FgVuhSGVG9xwZPBy5WSx8dQM1CViKAN+nQmKY717vk1jyD8kO7XOpJo ANIDIxy1QK4+3tgpPLRVqE7hMes7s7aPJQSnpldtmXVsvPhBSkkQ8T3ZhDoEGDnoItrc JYKVboNWkOQpSEE1p2KTHc7yDde7bhGqJ4CepckfruLi2og53Q8yNWwDc23lkxFJwhQ8 dbTA+5CPfBAdHqmFt5VBmfu9aSQKCfrH/xROLzWn1DR+4rgn+OLq8Cumqq54ltI8jbqV J3Bii9n9NfPl2KSYfB5bdH/HrV4s/pZmpdQbOS+KIviQ9x/CQxIkoLi+g77vlcre4TpD 65vg== 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 n38si9700669jac.105.2019.05.07.08.16.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:47 -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 1hO1oI-0007JJ-VD; Tue, 07 May 2019 15:15:14 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hO1oH-0007J1-FB for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:13 +0000 X-Inumbo-ID: e891d2aa-70da-11e9-843c-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id e891d2aa-70da-11e9-843c-bc764e045a96; Tue, 07 May 2019 15:15:11 +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 A9B59EBD; Tue, 7 May 2019 08:15:11 -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 E0F483F5AF; Tue, 7 May 2019 08:15:10 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:45 +0100 Message-Id: <20190507151458.29350-2-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 01/14] xen/arm: Use mfn_to_pdx instead of pfn_to_pdx when possible 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: Julien Grall , Stefano Stabellini MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" mfn_to_pdx adds more safety than pfn_to_pdx. Replace all but on place in the Arm code to use the former. No functional changes. Signed-off-by: Julien Grall Reviewed-by: Stefano Stabellini --- There are still one use of pfn_to_pdx in the Arm code (see mfn_valid). Ideally we would want to switch __mfn_valid(...) to be typesafe but it looks like it does not compile on x86. For the details see: <02478ff8-d1e2-abe1-74a5-ca72ab87f154@arm.com> This is unlikely going to be handled in this series. --- xen/arch/arm/mm.c | 2 +- xen/include/asm-arm/mm.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c index 01ae2cccc0..be5338bb4c 100644 --- a/xen/arch/arm/mm.c +++ b/xen/arch/arm/mm.c @@ -886,7 +886,7 @@ void __init setup_frametable_mappings(paddr_t ps, paddr_t pe) int i; #endif - frametable_base_pdx = pfn_to_pdx(ps >> PAGE_SHIFT); + frametable_base_pdx = mfn_to_pdx(maddr_to_mfn(ps)); /* Round up to 2M or 32M boundary, as appropriate. */ frametable_size = ROUNDUP(frametable_size, mapping_size); base_mfn = alloc_boot_pages(frametable_size >> PAGE_SHIFT, 32<<(20-12)); diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h index eafa26f56e..7b6aaf5e3f 100644 --- a/xen/include/asm-arm/mm.h +++ b/xen/include/asm-arm/mm.h @@ -225,7 +225,7 @@ static inline void __iomem *ioremap_wc(paddr_t start, size_t len) /* Convert between frame number and address formats. */ #define pfn_to_paddr(pfn) ((paddr_t)(pfn) << PAGE_SHIFT) #define paddr_to_pfn(pa) ((unsigned long)((pa) >> PAGE_SHIFT)) -#define paddr_to_pdx(pa) pfn_to_pdx(paddr_to_pfn(pa)) +#define paddr_to_pdx(pa) mfn_to_pdx(maddr_to_mfn(pa)) #define gfn_to_gaddr(gfn) pfn_to_paddr(gfn_x(gfn)) #define gaddr_to_gfn(ga) _gfn(paddr_to_pfn(ga)) #define mfn_to_maddr(mfn) pfn_to_paddr(mfn_x(mfn)) @@ -253,7 +253,7 @@ static inline void *maddr_to_virt(paddr_t ma) #else static inline void *maddr_to_virt(paddr_t ma) { - ASSERT(pfn_to_pdx(ma >> PAGE_SHIFT) < (DIRECTMAP_SIZE >> PAGE_SHIFT)); + ASSERT(mfn_to_pdx(maddr_to_mfn(ma)) < (DIRECTMAP_SIZE >> PAGE_SHIFT)); return (void *)(XENHEAP_VIRT_START - mfn_to_maddr(xenheap_mfn_start) + ((ma & ma_va_bottom_mask) | @@ -301,7 +301,7 @@ static inline struct page_info *virt_to_page(const void *v) ASSERT(va < xenheap_virt_end); pdx = (va - XENHEAP_VIRT_START) >> PAGE_SHIFT; - pdx += pfn_to_pdx(mfn_x(xenheap_mfn_start)); + pdx += mfn_to_pdx(xenheap_mfn_start); return frame_table + pdx - frametable_base_pdx; } From patchwork Tue May 7 15:14:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163538 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883131oca; Tue, 7 May 2019 08:16:49 -0700 (PDT) X-Google-Smtp-Source: APXvYqwu3VGbsNk89pwPB+9nF2LjBuJUHKm9sUksS2q8DxPylbJxC+Sg6Kf/wDXhBqJup1K93D1M X-Received: by 2002:a6b:2cc6:: with SMTP id s189mr21328681ios.303.1557242209009; Tue, 07 May 2019 08:16:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242209; cv=none; d=google.com; s=arc-20160816; b=A5/9e0apLWsGrX3W+fq7/VFUrLp3x/e9xtQ5ZQ6R6StwVsGqoc7E3i6TIHFKW1XO+f fNWcOvRvdbHSzt2SFEDNviLD3wlKMKVNXarlPBuM/cN49vIWopxc8TWf6FuvXIISUJuO foPnPp1YKbdV1Yhi4IHUFvUEZA9YVjYtMwvIQJ6eDia965zZvmUiN7kAl1F/x0mRadS1 oBBLk5rn4oI0te6EY7yNw4V+CyeoexDB1kKyqGXRDfqrnaHHCRVTtj1huheTrhcPNj8+ +2tFxBYH8WmFVP2HsRP3s4ptjjWg/eiCJWENIPEye3SLfe5KVhe75wu2TLCX0ui6tSBD 5x0w== 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=XwYKrOpNbjLy2MZyVMAqh4IyU7x6KwMVk7gyigeTpKg=; b=suF1A3xtgEg/DmmK8oo9k/m0oRnOUL49BtietA3rdHxRc+8HjBToaUZfy6GL2iE/G/ Isb5SLLRevtRWwjAUCv3aFyQYxBHPZ3h1SFTwNSwXN/PD9Ci94gwKCbZjtA44/DLX9sl pcN8XiB9YsPqrEkZyer+r/ClH6AcVdEgvwEpQhCk68Wy4jd6GGZ+qdhcv56meMgs2PDT DtLcxap4yNFdtsJJp2bVALW/HKYFvDcQaOFrz3AtU9erpYgWD3Ex5Nxpg+bqY7F/eW2e qHBQYSWqHNDueFb8bYuwWOEhKbed0Mt94G74N9rA6wNnGLVZC3L+KKy8+tEi0zlKO+Eh Mxow== 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 i18si9794092jac.60.2019.05.07.08.16.48 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:48 -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 1hO1oJ-0007JP-89; Tue, 07 May 2019 15:15:15 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hO1oI-0007JC-66 for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:14 +0000 X-Inumbo-ID: e97ee661-70da-11e9-843c-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id e97ee661-70da-11e9-843c-bc764e045a96; Tue, 07 May 2019 15:15:13 +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 2723A15AD; Tue, 7 May 2019 08:15:13 -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 E7EE63F5AF; Tue, 7 May 2019 08:15:11 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:46 +0100 Message-Id: <20190507151458.29350-3-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 02/14] xen/x86: Constify the parameter "d" in mfn_to_gfn 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" The parameter "d" holds the domain and is not modified by the function. So constify it. Signed-off-by: Julien Grall Reviewed-by: Jan Beulich --- Changes in v2: - Fix function name in the title - Add Jan's reviewed-by --- xen/include/asm-x86/p2m.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index 2801a8ccca..c3bd12020e 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -506,7 +506,7 @@ static inline struct page_info *get_page_from_gfn( } /* General conversion function from mfn to gfn */ -static inline unsigned long mfn_to_gfn(struct domain *d, mfn_t mfn) +static inline unsigned long mfn_to_gfn(const struct domain *d, mfn_t mfn) { if ( paging_mode_translate(d) ) return get_gpfn_from_mfn(mfn_x(mfn)); From patchwork Tue May 7 15:14:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163535 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883081oca; Tue, 7 May 2019 08:16:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqw1giU8I30X74/QPeS+HWOooMdOfALiDP3KOdaQLayrHSzT0csZx3BPL3zTyqpUAh3ea7it X-Received: by 2002:a05:6638:29a:: with SMTP id c26mr22182139jaq.140.1557242205940; Tue, 07 May 2019 08:16:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242205; cv=none; d=google.com; s=arc-20160816; b=NVuOO4uHr7jZt0mHvVwPxbnq/+gyVW8aJ1OCjuj22Toi7CoZ/lw8heLPWEl6CWER+L 01Px2+K960J2EQC1QOaRB3NFBgh2HGDHok+hmQ3L0XLqkVpRRc0mEwj6WxSDaxTmnR3V pG8DIZSRa5SfmXRkjWWNez9p9vD474V6xBiBtgFJ35xtoK7HOBZY1LX6ywD84LRPN7Xu JWRdEBFQjJx8y2rM8BZXgjxIE2JebUOZE8LI9BvEffsWomgMFtT7+6hQnPcx+vIjtPS7 DzNZ98NQgq1csxtBM7SbA64fwZSQs93rmIuhDJJhUK+AtJF04JD+kqHhODE1dIThRktv hSjg== 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=hmMq2qUTAfgHqHkwpejLOXXdTOJMI/5wGm4hwhIP6BY=; b=lU7z9qPnKf5vi2fZCcCPXKs2N37N/T2gzhnaMl6Sr+xBjrYQvY72c3aveHCLpIBkFp dukhLs/Ek2+EIJuWgTgQ4wQS7lWpsj3cRn9EYzOOC7KnfNg6Q61FbNfKopC20LkqBDQV HHhjMwWpJW0E7Aw9Z9Lw/aV/WQ9NZcweV7fJwaD7MwF7yQvuHUNSPfYv9ybC2Rcm984f fPjFaokDx9UQGITglpHZlqIM0Th7nw1km8spgxgWCeq4VSacohKt08Nmz3GJPsHa5ZIu fMIkEoQLuccRWbR9lE1iBuQYQKhGSNXDNYpfZSb6MdZaip5p0xicSz5/TwkCKMORhrYi yS0A== 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 j63si10669571itb.19.2019.05.07.08.16.45 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:45 -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 1hO1oL-0007K9-Ll; Tue, 07 May 2019 15:15:17 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hO1oK-0007Jw-Fi for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:16 +0000 X-Inumbo-ID: ea7f034e-70da-11e9-843c-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id ea7f034e-70da-11e9-843c-bc764e045a96; Tue, 07 May 2019 15:15:15 +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 DFD9E1682; Tue, 7 May 2019 08:15:14 -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 65A353F5AF; Tue, 7 May 2019 08:15:13 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:47 +0100 Message-Id: <20190507151458.29350-4-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 03/14] xen/x86: Make mfn_to_gfn typesafe 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: Wei Liu , George Dunlap , Andrew Cooper , Tim Deegan , Julien Grall , Jan Beulich , =?utf-8?q?Ro?= =?utf-8?q?ger_Pau_Monn=C3=A9?= MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" No functional changes intended. Signed-off-by: Julien Grall --- Changes in v2: - Patch added --- xen/arch/x86/mm/p2m.c | 2 +- xen/arch/x86/mm/shadow/common.c | 31 ++++++++++++++++++------------- xen/arch/x86/mm/shadow/multi.c | 4 ++-- xen/include/asm-x86/p2m.h | 6 +++--- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index 9e81a30cc4..b16117dc56 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -935,7 +935,7 @@ guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, } if ( page_get_owner(mfn_to_page(mfn_add(mfn, i))) != d ) continue; - ogfn = _gfn(mfn_to_gfn(d, mfn_add(mfn, i))); + ogfn = mfn_to_gfn(d, mfn_add(mfn, i)); if ( !gfn_eq(ogfn, _gfn(INVALID_M2P_ENTRY)) && !gfn_eq(ogfn, gfn_add(gfn, i)) ) { diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 2d44855388..480fcc740d 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -474,7 +474,8 @@ static inline void trace_resync(int event, mfn_t gmfn) if ( tb_init_done ) { /* Convert gmfn to gfn */ - unsigned long gfn = mfn_to_gfn(current->domain, gmfn); + unsigned long gfn = gfn_x(mfn_to_gfn(current->domain, gmfn)); + __trace_var(event, 0/*!tsc*/, sizeof(gfn), &gfn); } } @@ -986,8 +987,9 @@ static inline void trace_shadow_prealloc_unpin(struct domain *d, mfn_t smfn) { /* Convert smfn to gfn */ unsigned long gfn; + ASSERT(mfn_valid(smfn)); - gfn = mfn_to_gfn(d, backpointer(mfn_to_page(smfn))); + gfn = gfn_x(mfn_to_gfn(d, backpointer(mfn_to_page(smfn)))); __trace_var(TRC_SHADOW_PREALLOC_UNPIN, 0/*!tsc*/, sizeof(gfn), &gfn); } } @@ -1861,7 +1863,8 @@ static inline void trace_shadow_wrmap_bf(mfn_t gmfn) if ( tb_init_done ) { /* Convert gmfn to gfn */ - unsigned long gfn = mfn_to_gfn(current->domain, gmfn); + unsigned long gfn = gfn_x(mfn_to_gfn(current->domain, gmfn)); + __trace_var(TRC_SHADOW_WRMAP_BF, 0/*!tsc*/, sizeof(gfn), &gfn); } } @@ -1946,7 +1949,7 @@ int sh_remove_write_access(struct domain *d, mfn_t gmfn, #if SHADOW_OPTIMIZATIONS & SHOPT_WRITABLE_HEURISTIC if ( curr->domain == d ) { - unsigned long gfn; + gfn_t gfn; /* Heuristic: there is likely to be only one writeable mapping, * and that mapping is likely to be in the current pagetable, * in the guest's linear map (on non-HIGHPTE linux and windows)*/ @@ -1969,8 +1972,9 @@ int sh_remove_write_access(struct domain *d, mfn_t gmfn, GUESS(0xC0000000UL + (fault_addr >> 10), 1); /* Linux lowmem: first 896MB is mapped 1-to-1 above 0xC0000000 */ - if ((gfn = mfn_to_gfn(d, gmfn)) < 0x38000 ) - GUESS(0xC0000000UL + (gfn << PAGE_SHIFT), 4); + gfn = mfn_to_gfn(d, gmfn); + if ( gfn_x(gfn) < 0x38000 ) + GUESS(0xC0000000UL + gfn_to_gaddr(gfn), 4); /* FreeBSD: Linear map at 0xBFC00000 */ if ( level == 1 ) @@ -1987,8 +1991,9 @@ int sh_remove_write_access(struct domain *d, mfn_t gmfn, } /* Linux lowmem: first 896MB is mapped 1-to-1 above 0xC0000000 */ - if ((gfn = mfn_to_gfn(d, gmfn)) < 0x38000 ) - GUESS(0xC0000000UL + (gfn << PAGE_SHIFT), 4); + gfn = mfn_to_gfn(d, gmfn); + if ( gfn_x(gfn) < 0x38000 ) + GUESS(0xC0000000UL + gfn_to_gaddr(gfn), 4); /* FreeBSD PAE: Linear map at 0xBF800000 */ switch ( level ) @@ -2016,15 +2021,15 @@ int sh_remove_write_access(struct domain *d, mfn_t gmfn, * had it at 0xffff810000000000, and older kernels yet had it * at 0x0000010000000000UL */ gfn = mfn_to_gfn(d, gmfn); - GUESS(0xffff880000000000UL + (gfn << PAGE_SHIFT), 4); - GUESS(0xffff810000000000UL + (gfn << PAGE_SHIFT), 4); - GUESS(0x0000010000000000UL + (gfn << PAGE_SHIFT), 4); + GUESS(0xffff880000000000UL + gfn_to_gaddr(gfn), 4); + GUESS(0xffff810000000000UL + gfn_to_gaddr(gfn), 4); + GUESS(0x0000010000000000UL + gfn_to_gaddr(gfn), 4); /* * 64bit Solaris kernel page map at * kpm_vbase; 0xfffffe0000000000UL */ - GUESS(0xfffffe0000000000UL + (gfn << PAGE_SHIFT), 4); + GUESS(0xfffffe0000000000UL + gfn_to_gaddr(gfn), 4); /* FreeBSD 64bit: linear map 0xffff800000000000 */ switch ( level ) @@ -2037,7 +2042,7 @@ int sh_remove_write_access(struct domain *d, mfn_t gmfn, + ((fault_addr & VADDR_MASK) >> 27), 6); break; } /* FreeBSD 64bit: direct map at 0xffffff0000000000 */ - GUESS(0xffffff0000000000 + (gfn << PAGE_SHIFT), 6); + GUESS(0xffffff0000000000 + gfn_to_gaddr(gfn), 6); } #undef GUESS diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 1d282c928f..8781bdcfe5 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -1076,7 +1076,7 @@ static inline void shadow_vram_get_l1e(shadow_l1e_t new_sl1e, || !mfn_valid(mfn) ) /* mfn can be invalid in mmio_direct */ return; - gfn = mfn_to_gfn(d, mfn); + gfn = gfn_x(mfn_to_gfn(d, mfn)); /* Page sharing not supported on shadow PTs */ BUG_ON(SHARED_M2P(gfn)); @@ -1107,7 +1107,7 @@ static inline void shadow_vram_put_l1e(shadow_l1e_t old_sl1e, || !mfn_valid(mfn) ) /* mfn can be invalid in mmio_direct */ return; - gfn = mfn_to_gfn(d, mfn); + gfn = gfn_x(mfn_to_gfn(d, mfn)); /* Page sharing not supported on shadow PTs */ BUG_ON(SHARED_M2P(gfn)); diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index c3bd12020e..0157568be9 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -506,12 +506,12 @@ static inline struct page_info *get_page_from_gfn( } /* General conversion function from mfn to gfn */ -static inline unsigned long mfn_to_gfn(const struct domain *d, mfn_t mfn) +static inline gfn_t mfn_to_gfn(const struct domain *d, mfn_t mfn) { if ( paging_mode_translate(d) ) - return get_gpfn_from_mfn(mfn_x(mfn)); + return _gfn(get_gpfn_from_mfn(mfn_x(mfn))); else - return mfn_x(mfn); + return _gfn(mfn_x(mfn)); } /* Deadlock-avoidance scheme when calling get_gfn on different gfn's */ From patchwork Tue May 7 15:14:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163539 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883139oca; Tue, 7 May 2019 08:16:49 -0700 (PDT) X-Google-Smtp-Source: APXvYqxP9aM0/fTdtOZwRT5vZJKMe3uAJETggdH/96v85Wju/GWhSXJVECsfCbr32Fu17mjxyJAO X-Received: by 2002:a24:c183:: with SMTP id e125mr22953159itg.95.1557242209638; Tue, 07 May 2019 08:16:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242209; cv=none; d=google.com; s=arc-20160816; b=jz94/zjWUmYa2mJ6fdTRheIgHvPOxQUbkuC+Lk6X28EuNaNlab2/qMgw+xYbD3nOTW I1UzlB68M4/xkhN+4YmRbI47jyF18fXrFN/+fErbjakiw1CctvbfPUn+bXqH2Wl22e/Q GTzM4KvPl8c1Ek45geD5VTHhzM2WvAwRt8bPU6xQD6nIc4P8oJacCyB3jLbg3+PPWYmP em1qiRlTQojIg9ITD4M4c3HXG4Ssuy70ir8sAyI36BCcYEGjaTxsuC1tJ4QQmrCpP0sZ RvMPo/7sEUHqqelEOjEMkaIWeWUDaYyO/WP+7eu1dlcAlQpo3EPpcWt8duKYootOZbQy uPEA== 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=sPD6AkqDlyYWNcwjAwQLHM9uGqFhj5oCSgj/X8d3A9A=; b=sfXph3+ppEmObkPMPwzNwY4cdFi/47PTjljfQKiSI4hj/Y/A+vtC4ylxKNeKh/gmMb J018g8BHu5almM2xshSj6pnH30Aw8zWxFh3xMk0SPywCxcP4gJbATUa2uvc+yatUtHIe iTRaunUIuJimtNoLw3NgtLp0bG6cVF8mFE7rSNNFvJznUbNCc7ztxmcWG1zTr5CoJOlJ kOHU2EDVlkb2Ao7vvLUGGywYA6JMaQsko0sdBsa1Iy+DaUfvtBuO3eva/u0Q9ehUxzcb B+QTWhh2Sppmcqg9HyhOvC5hqUQ6usHZd6WGH+TZjtxXSKGdT9Bx4npOvp2n1q2h07r3 NuHg== 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 a199si10289780ita.35.2019.05.07.08.16.49 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:49 -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 1hO1oL-0007KJ-Vc; Tue, 07 May 2019 15:15:17 +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 1hO1oL-0007K1-7N for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:17 +0000 X-Inumbo-ID: eb6aafdc-70da-11e9-914b-9744845dd15d Received: from foss.arm.com (unknown [217.140.101.70]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id eb6aafdc-70da-11e9-914b-9744845dd15d; Tue, 07 May 2019 15:15:16 +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 5D0011684; Tue, 7 May 2019 08:15:16 -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 29CF43F5AF; Tue, 7 May 2019 08:15:15 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:48 +0100 Message-Id: <20190507151458.29350-5-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 04/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. Furthermore, the naming of the former is more consistent with the current naming scheme (GFN/MFN). So use 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 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/mm.c | 9 +++++---- xen/arch/x86/pv/emul-priv-op.c | 4 ++-- xen/drivers/passthrough/x86/iommu.c | 16 +++++++++------- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 9eaa978ce5..8d29dfeecc 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -679,7 +679,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; @@ -713,19 +713,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; } @@ -733,31 +734,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 frame %"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 frame %"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/mm.c b/xen/arch/x86/mm.c index 45fadbab61..9878453eb0 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -2632,19 +2632,20 @@ int free_page_type(struct page_info *page, unsigned long type, { #ifdef CONFIG_PV struct domain *owner = page_get_owner(page); - unsigned long gmfn; int rc; if ( likely(owner != NULL) && unlikely(paging_mode_enabled(owner)) ) { + gfn_t gfn; + /* A page table is dirtied when its type count becomes zero. */ paging_mark_dirty(owner, page_to_mfn(page)); ASSERT(!shadow_mode_refcounts(owner)); - gmfn = mfn_to_gmfn(owner, mfn_x(page_to_mfn(page))); - if ( VALID_M2P(gmfn) ) - shadow_remove_all_shadows(owner, _mfn(gmfn)); + gfn = mfn_to_gfn(owner, page_to_mfn(page)); + if ( VALID_M2P(gfn_x(gfn)) ) + shadow_remove_all_shadows(owner, _mfn(gfn_x(gfn))); } if ( !(type & PGT_partial) ) diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-op.c index af74f50dc8..e976ff9898 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 034ac903dd..7a756ef19e 100644 --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -92,15 +92,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); @@ -118,7 +120,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) ) From patchwork Tue May 7 15:14:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163541 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883231oca; Tue, 7 May 2019 08:16:54 -0700 (PDT) X-Google-Smtp-Source: APXvYqxWVJPq3bIR/GQZGQgZwzIkLK3arl8Zk9I6sabi5UdxUaTcno3BFfw34PL2rWI2NSAiy9pF X-Received: by 2002:a5d:8843:: with SMTP id t3mr17664031ios.102.1557242214290; Tue, 07 May 2019 08:16:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242214; cv=none; d=google.com; s=arc-20160816; b=tUuTO06OhBeECwc7zdAN8fc1yLTK2BzP6tgZD0YzoGmRMIs0mRQFLoR7zrDkRJ/TsS ovRUQvmMqDqEw2P4aShosFvryn2Dj6yPl2bX17wPIkvAa/GBedVzosESxx/0l5GFTGjO hDaq6n7AUJP7AA4Bg3TluA5JwGQBNpG2zWYiesKV+hjnY3Yss6IsJeZsw6Hohmlfs9Bq 41Z4E0sGsXMHz0LSHYUMt1k8qRgymYS6FaTlvRawr49F6nkK79Vb0eg8vuOFFmt9oYAZ 43nybRUXs7GbXNwU6vwG6vy7dACwbNdpbUExCaKaX92i1nfhCDMscmYtTe2kb+sWfFhf 1JwA== 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=Xd3+7Olhhm6rfKoym/O4qbSdHhJ3GK0QWJEJ5/2B2n0=; b=LPckz4dvimIJFvUkHpZY9cTgoj/F0jefW9ltKn28eYUtRGsjFhtkiL/hS767F7LoUQ PdFKsLELdSlccWQI3PPwu0lAwnuRmIjn1SlRAzUvFyhT5P5HoHFCjLdeedslIeF//zG9 CFTZhUm5Kk+eeDB6+OZ4C9khoyTbMV41eO7K1yI501/XRT0pBw9EdMwVFm/8+9qvaJws MMvbjRcJxhy9B95vBWX5R8M0SAw/bqiQV6iINzdIi63jh8I3vKL3Ovic4P7rT7lDJuhE 2VTyZmcvXoX+h7iP+ffSSjZRvB46c+/YP/sm//nDurmJ+1tW64SB/p4m2Wa0HTQ12/Gk OYoA== 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 d140si9328364itd.57.2019.05.07.08.16.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:54 -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 1hO1oP-0007Ll-A4; Tue, 07 May 2019 15:15:21 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hO1oO-0007LK-2w for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:20 +0000 X-Inumbo-ID: ecb7c372-70da-11e9-843c-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id ecb7c372-70da-11e9-843c-bc764e045a96; Tue, 07 May 2019 15:15:18 +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 8D03115AD; Tue, 7 May 2019 08:15:18 -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 9CA613F5AF; Tue, 7 May 2019 08:15:16 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:49 +0100 Message-Id: <20190507151458.29350-6-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 05/14] xen/grant-table: Make arch specific macros typesafe 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: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Julien Grall , 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" This patch rework all the arch specific macros in grant_table.h to use the typesafe MFN/GFN. At the same time, some functions are renamed s/gmfn/gfn/ to match the current naming scheme (see include/mm.h). No functional changes intended. Signed-off-by: Julien Grall Acked-by: Jan Beulich Reviewed-by: Stefano Stabellini --- Changes in v2: - Update commit message to explain the changes made - Fix indentation - Adapt the code to match the new prototype of mfn_to_gfn - Add Jan's acked-by for non-ARM parts --- xen/common/grant_table.c | 4 ++-- xen/include/asm-arm/grant_table.h | 12 ++++++------ xen/include/asm-x86/grant_table.h | 19 +++++++------------ 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c index 80728ea57d..abc966f775 100644 --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -1935,7 +1935,7 @@ gnttab_setup_table( op.status = GNTST_okay; for ( i = 0; i < op.nr_frames; i++ ) { - xen_pfn_t gmfn = gnttab_shared_gmfn(d, gt, i); + xen_pfn_t gmfn = gfn_x(gnttab_shared_gfn(d, gt, i)); /* Grant tables cannot be shared */ BUG_ON(SHARED_M2P(gmfn)); @@ -3149,7 +3149,7 @@ gnttab_get_status_frames(XEN_GUEST_HANDLE_PARAM(gnttab_get_status_frames_t) uop, for ( i = 0; i < op.nr_frames; i++ ) { - gmfn = gnttab_status_gmfn(d, gt, i); + gmfn = gfn_x(gnttab_status_gfn(d, gt, i)); if ( copy_to_guest_offset(op.frame_list, i, &gmfn, 1) ) op.status = GNTST_bad_virt_addr; } diff --git a/xen/include/asm-arm/grant_table.h b/xen/include/asm-arm/grant_table.h index 051db1362b..750536184e 100644 --- a/xen/include/asm-arm/grant_table.h +++ b/xen/include/asm-arm/grant_table.h @@ -65,15 +65,15 @@ void gnttab_mark_dirty(struct domain *d, mfn_t mfn); } while ( 0 ) #define gnttab_get_frame_gfn(gt, st, idx) ({ \ - _gfn((st) ? gnttab_status_gmfn(NULL, gt, idx) \ - : gnttab_shared_gmfn(NULL, gt, idx)); \ + (st) ? gnttab_status_gfn(NULL, gt, idx) \ + : gnttab_shared_gfn(NULL, gt, idx); \ }) -#define gnttab_shared_gmfn(d, t, i) \ - gfn_x(((i) >= nr_grant_frames(t)) ? INVALID_GFN : (t)->arch.shared_gfn[i]) +#define gnttab_shared_gfn(d, t, i) \ + (((i) >= nr_grant_frames(t)) ? INVALID_GFN : (t)->arch.shared_gfn[i]) -#define gnttab_status_gmfn(d, t, i) \ - gfn_x(((i) >= nr_status_frames(t)) ? INVALID_GFN : (t)->arch.status_gfn[i]) +#define gnttab_status_gfn(d, t, i) \ + (((i) >= nr_status_frames(t)) ? INVALID_GFN : (t)->arch.status_gfn[i]) #define gnttab_need_iommu_mapping(d) \ (is_domain_direct_mapped(d) && need_iommu_pt_sync(d)) diff --git a/xen/include/asm-x86/grant_table.h b/xen/include/asm-x86/grant_table.h index 8b604ed51f..661228dd39 100644 --- a/xen/include/asm-x86/grant_table.h +++ b/xen/include/asm-x86/grant_table.h @@ -39,24 +39,19 @@ static inline int replace_grant_host_mapping(uint64_t addr, mfn_t frame, #define gnttab_destroy_arch(gt) do {} while ( 0 ) #define gnttab_set_frame_gfn(gt, st, idx, gfn) do {} while ( 0 ) #define gnttab_get_frame_gfn(gt, st, idx) ({ \ - unsigned long mfn_ = (st) ? gnttab_status_mfn(gt, idx) \ - : gnttab_shared_mfn(gt, idx); \ - unsigned long gpfn_ = get_gpfn_from_mfn(mfn_); \ + mfn_t mfn_ = (st) ? gnttab_status_mfn(gt, idx) \ + : gnttab_shared_mfn(gt, idx); \ + unsigned long gpfn_ = get_gpfn_from_mfn(mfn_x(mfn_)); \ VALID_M2P(gpfn_) ? _gfn(gpfn_) : INVALID_GFN; \ }) -#define gnttab_shared_mfn(t, i) \ - ((virt_to_maddr((t)->shared_raw[i]) >> PAGE_SHIFT)) +#define gnttab_shared_mfn(t, i) _mfn(__virt_to_mfn((t)->shared_raw[i])) -#define gnttab_shared_gmfn(d, t, i) \ - (mfn_to_gmfn(d, gnttab_shared_mfn(t, i))) +#define gnttab_shared_gfn(d, t, i) mfn_to_gfn(d, gnttab_shared_mfn(t, i)) +#define gnttab_status_mfn(t, i) _mfn(__virt_to_mfn((t)->status[i])) -#define gnttab_status_mfn(t, i) \ - ((virt_to_maddr((t)->status[i]) >> PAGE_SHIFT)) - -#define gnttab_status_gmfn(d, t, i) \ - (mfn_to_gmfn(d, gnttab_status_mfn(t, i))) +#define gnttab_status_gfn(d, t, i) mfn_to_gfn(d, gnttab_status_mfn(t, i)) #define gnttab_mark_dirty(d, f) paging_mark_dirty(d, f) From patchwork Tue May 7 15:14:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163542 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883252oca; Tue, 7 May 2019 08:16:55 -0700 (PDT) X-Google-Smtp-Source: APXvYqztvLqcrH02veW0dP8zVIMgoDUjngsLBuPROlWczC5XBzt/m/qyThL3664CWj2FSLhoVTRH X-Received: by 2002:a5d:9397:: with SMTP id c23mr1187250iol.206.1557242215069; Tue, 07 May 2019 08:16:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242215; cv=none; d=google.com; s=arc-20160816; b=Mci/AW0zYxhAWjPBBHismMBKzeq/FgRsmzhdlGPNmVuZNvMfSIJJnpLh11LHMWcJlO BRtSwNZSTr0SyTjOtMOcitwVGNVXBSSEE8xAacPley5RZNDH9z/egMJ0ztgMXj35KPhU imJjz74vkbIgf5P/gVKMB4/Ag4m/3mrcaE8KzLQJnEZviwAwpKKQKkE7kTsdOlziphF0 5ieA5tayVZyhLI/QAOVp0pBBLOkpO5y0X7vdfAXAubJa+qp4IFSW0ynPOaHmvHxDORIS CWXQ9KJoCIw0x3KXH0YRexMbGNwy6FX85U8EnnVGVuFG56PCJtsKyXtzHNGnoOHiB/Sw aazw== 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=J0821RA/OnovgfPlzifASdxHCjoXlyuWc2dO2uxdjQQ=; b=ruipVtlfByvTPe402fOT+J5zMk8S3iJYV/CjIEn8OQLpQa1PFPwkuv0NE1XChshtlx tkuWg5/XVt4Iojuxnbxk6YdTqCEtPgpYW6XZ5+191aoBtWUHIdcCBW2hYLX+RCMGBJcu GSWF1u2LU/I8RttpYD5/DJ3RbDCEOTLCaCFa4BuvTeHG9mZ34UuRD6lATlwTQ1fUTriV yrGOWAXViLihoppkeKcHgHWxwp6lFCVbfPqdhBIFv1jihUZ8xq4bb6ylUXFBMCVoeN6u nL0/jWJbMuIASdDjn9XUzfcOwZu+QTxYsy4d53AMTYvvtGzVjVDnouC77LNrToAKXnPg M9dA== 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 84si9948366ita.50.2019.05.07.08.16.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:55 -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 1hO1oS-0007NQ-Ku; Tue, 07 May 2019 15:15:24 +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 1hO1oR-0007Mn-5r for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:23 +0000 X-Inumbo-ID: ee0e99ec-70da-11e9-9df6-03527982748a Received: from foss.arm.com (unknown [217.140.101.70]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id ee0e99ec-70da-11e9-9df6-03527982748a; Tue, 07 May 2019 15:15:21 +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 E073A1682; Tue, 7 May 2019 08:15:20 -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 CC56B3F5AF; Tue, 7 May 2019 08:15:18 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:50 +0100 Message-Id: <20190507151458.29350-7-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 06/14] xen: Convert hotplug page function to use typesafe MFN 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: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Julien Grall , 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" Convert online_page, offline_page and query_page_offline to use typesafe MFN. Note, for clarity, the words have been re-ordered in the error message updated by this patch. No functional changes. Signed-off-by: Julien Grall Acked-by: Jan Beulich --- Changes: - Update error message - Add Jan's acked-by --- xen/arch/x86/cpu/mcheck/mcaction.c | 18 ++++++++++-------- xen/common/page_alloc.c | 24 ++++++++++++------------ xen/common/sysctl.c | 14 +++++++------- xen/include/xen/mm.h | 6 +++--- 4 files changed, 32 insertions(+), 30 deletions(-) diff --git a/xen/arch/x86/cpu/mcheck/mcaction.c b/xen/arch/x86/cpu/mcheck/mcaction.c index e42267414e..69332fb84d 100644 --- a/xen/arch/x86/cpu/mcheck/mcaction.c +++ b/xen/arch/x86/cpu/mcheck/mcaction.c @@ -6,7 +6,7 @@ static struct mcinfo_recovery * mci_action_add_pageoffline(int bank, struct mc_info *mi, - uint64_t mfn, uint32_t status) + mfn_t mfn, uint32_t status) { struct mcinfo_recovery *rec; @@ -22,7 +22,7 @@ mci_action_add_pageoffline(int bank, struct mc_info *mi, rec->mc_bank = bank; rec->action_types = MC_ACTION_PAGE_OFFLINE; - rec->action_info.page_retire.mfn = mfn; + rec->action_info.page_retire.mfn = mfn_x(mfn); rec->action_info.page_retire.status = status; return rec; } @@ -42,7 +42,8 @@ mc_memerr_dhandler(struct mca_binfo *binfo, struct mcinfo_bank *bank = binfo->mib; struct mcinfo_global *global = binfo->mig; struct domain *d; - unsigned long mfn, gfn; + mfn_t mfn; + unsigned long gfn; uint32_t status; int vmce_vcpuid; unsigned int mc_vcpuid; @@ -54,11 +55,12 @@ mc_memerr_dhandler(struct mca_binfo *binfo, return; } - mfn = bank->mc_addr >> PAGE_SHIFT; + mfn = maddr_to_mfn(bank->mc_addr); if ( offline_page(mfn, 1, &status) ) { dprintk(XENLOG_WARNING, - "Failed to offline page %lx for MCE error\n", mfn); + "Failed to offline page %"PRI_mfn" for MCE error\n", + mfn_x(mfn)); return; } @@ -89,10 +91,10 @@ mc_memerr_dhandler(struct mca_binfo *binfo, ASSERT(d); gfn = get_gpfn_from_mfn((bank->mc_addr) >> PAGE_SHIFT); - if ( unmmap_broken_page(d, _mfn(mfn), gfn) ) + if ( unmmap_broken_page(d, mfn, gfn) ) { - printk("Unmap broken memory %lx for DOM%d failed\n", - mfn, d->domain_id); + printk("Unmap broken memory %"PRI_mfn" for DOM%d failed\n", + mfn_x(mfn), d->domain_id); goto vmce_failed; } diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index be44158033..f445f7daec 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -1568,23 +1568,23 @@ static int reserve_heap_page(struct page_info *pg) } -int offline_page(unsigned long mfn, int broken, uint32_t *status) +int offline_page(mfn_t mfn, int broken, uint32_t *status) { unsigned long old_info = 0; struct domain *owner; struct page_info *pg; - if ( !mfn_valid(_mfn(mfn)) ) + if ( !mfn_valid(mfn) ) { dprintk(XENLOG_WARNING, - "try to offline page out of range %lx\n", mfn); + "try to offline out of range page %"PRI_mfn"\n", mfn_x(mfn)); return -EINVAL; } *status = 0; - pg = mfn_to_page(_mfn(mfn)); + pg = mfn_to_page(mfn); - if ( is_xen_fixed_mfn(mfn) ) + if ( is_xen_fixed_mfn(mfn_x(mfn)) ) { *status = PG_OFFLINE_XENPAGE | PG_OFFLINE_FAILED | (DOMID_XEN << PG_OFFLINE_OWNER_SHIFT); @@ -1595,7 +1595,7 @@ int offline_page(unsigned long mfn, int broken, uint32_t *status) * N.B. xen's txt in x86_64 is marked reserved and handled already. * Also kexec range is reserved. */ - if ( !page_is_ram_type(mfn, RAM_TYPE_CONVENTIONAL) ) + if ( !page_is_ram_type(mfn_x(mfn), RAM_TYPE_CONVENTIONAL) ) { *status = PG_OFFLINE_FAILED | PG_OFFLINE_NOT_CONV_RAM; return -EINVAL; @@ -1677,19 +1677,19 @@ int offline_page(unsigned long mfn, int broken, uint32_t *status) * The caller should make sure end_pfn <= max_page, * if not, expand_pages() should be called prior to online_page(). */ -unsigned int online_page(unsigned long mfn, uint32_t *status) +unsigned int online_page(mfn_t mfn, uint32_t *status) { unsigned long x, nx, y; struct page_info *pg; int ret; - if ( !mfn_valid(_mfn(mfn)) ) + if ( !mfn_valid(mfn) ) { dprintk(XENLOG_WARNING, "call expand_pages() first\n"); return -EINVAL; } - pg = mfn_to_page(_mfn(mfn)); + pg = mfn_to_page(mfn); spin_lock(&heap_lock); @@ -1730,11 +1730,11 @@ unsigned int online_page(unsigned long mfn, uint32_t *status) return ret; } -int query_page_offline(unsigned long mfn, uint32_t *status) +int query_page_offline(mfn_t mfn, uint32_t *status) { struct page_info *pg; - if ( !mfn_valid(_mfn(mfn)) || !page_is_ram_type(mfn, RAM_TYPE_CONVENTIONAL) ) + if ( !mfn_valid(mfn) || !page_is_ram_type(mfn_x(mfn), RAM_TYPE_CONVENTIONAL) ) { dprintk(XENLOG_WARNING, "call expand_pages() first\n"); return -EINVAL; @@ -1743,7 +1743,7 @@ int query_page_offline(unsigned long mfn, uint32_t *status) *status = 0; spin_lock(&heap_lock); - pg = mfn_to_page(_mfn(mfn)); + pg = mfn_to_page(mfn); if ( page_state_is(pg, offlining) ) *status |= PG_OFFLINE_STATUS_OFFLINE_PENDING; diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c index c0aa6bde4e..ab161793e5 100644 --- a/xen/common/sysctl.c +++ b/xen/common/sysctl.c @@ -186,7 +186,7 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl) case XEN_SYSCTL_page_offline_op: { uint32_t *status, *ptr; - unsigned long pfn; + mfn_t mfn; ret = xsm_page_offline(XSM_HOOK, op->u.page_offline.cmd); if ( ret ) @@ -205,21 +205,21 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl) memset(status, PG_OFFLINE_INVALID, sizeof(uint32_t) * (op->u.page_offline.end - op->u.page_offline.start + 1)); - for ( pfn = op->u.page_offline.start; - pfn <= op->u.page_offline.end; - pfn ++ ) + for ( mfn = _mfn(op->u.page_offline.start); + mfn_x(mfn) <= op->u.page_offline.end; + mfn = mfn_add(mfn, 1) ) { switch ( op->u.page_offline.cmd ) { /* Shall revert her if failed, or leave caller do it? */ case sysctl_page_offline: - ret = offline_page(pfn, 0, ptr++); + ret = offline_page(mfn, 0, ptr++); break; case sysctl_page_online: - ret = online_page(pfn, ptr++); + ret = online_page(mfn, ptr++); break; case sysctl_query_page_offline: - ret = query_page_offline(pfn, ptr++); + ret = query_page_offline(mfn, ptr++); break; default: ret = -EINVAL; diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h index e971147234..3ba7168cc9 100644 --- a/xen/include/xen/mm.h +++ b/xen/include/xen/mm.h @@ -206,9 +206,9 @@ unsigned long avail_domheap_pages(void); unsigned long avail_node_heap_pages(unsigned int); #define alloc_domheap_page(d,f) (alloc_domheap_pages(d,0,f)) #define free_domheap_page(p) (free_domheap_pages(p,0)) -unsigned int online_page(unsigned long mfn, uint32_t *status); -int offline_page(unsigned long mfn, int broken, uint32_t *status); -int query_page_offline(unsigned long mfn, uint32_t *status); +unsigned int online_page(mfn_t mfn, uint32_t *status); +int offline_page(mfn_t mfn, int broken, uint32_t *status); +int query_page_offline(mfn_t mfn, uint32_t *status); unsigned long total_free_pages(void); void heap_init_late(void); From patchwork Tue May 7 15:14:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163540 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883178oca; Tue, 7 May 2019 08:16:51 -0700 (PDT) X-Google-Smtp-Source: APXvYqyTBF7xQrfn3vkXoEl1y7N9NwXM6jbqDHeYyegxxzQUOpaAKl7T/Dh5mFTgErSyOenk5Pon X-Received: by 2002:a02:3342:: with SMTP id k2mr21789621jak.15.1557242211621; Tue, 07 May 2019 08:16:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242211; cv=none; d=google.com; s=arc-20160816; b=O5Lk3khDjjBzMk4i96WA/OiOv2LFw/Xh8RGTGhnGBQYuqze70dsJhTBtKGHTChqFzv Ud79ujg3cWjd4wc//q3TISALcl6B69j1LPtvr7mhZANqEbQmWk2qEu790llVWhRGB4As N+WWYh2Q5TkttS/gvk6P8iUYUN9wBHIMEYSxRXJfvH1HKmlmTVWdpLKGDQH9grajCzwq WhztL1NbwFups+jaeEMINKQTBFeLyyhkHOamQuPt1rcCD/VuWvRcEfYEq+OMQ28VfoLU sV+eZbjts4HmhglcEuslzOYIN0OUCwL8+q2sddzH0nryXhcqbli6V6e9R9SJh+zbIkS3 1pYg== 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=2dyr9eAQpdHVeXG+OlaeiKcumRIFOcnZQiA32I1R9XM=; b=Qo55JYYwP8hFVnFSTyddUmHiBHQXeOchdnAyuIY+PR3ANZCDlD3l7iYw2VQcu2bPKU Y4lbQx8QrSDnqUp9HOQR1famwMc5ki1lNQ2R6n1w6NYFa98Q3halSFptcAHzukmIl3rM 54XXrWxN4sxoI8dj/VahyocHGwtrg0AutaF6F/R/K3/XUwPdDTBUzjoIqOfh6CMemePB 0AGYe/7YxaKiVVFIbxwOUo4EwxnTLCYSHNU2Y3s8okygktj4uGb35Kg71ZoE9dVkUkBi vLkLptu5eccBgS8BqYzTaITaO7aAL7ZWgN1Pr0YAOFMnSbRxAufck8PULxqWXTJaVIfV S4KA== 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 y199si7297451itc.65.2019.05.07.08.16.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:51 -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 1hO1oT-0007OC-5Z; Tue, 07 May 2019 15:15:25 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hO1oS-0007NN-IZ for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:24 +0000 X-Inumbo-ID: ef840d39-70da-11e9-843c-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id ef840d39-70da-11e9-843c-bc764e045a96; Tue, 07 May 2019 15:15:23 +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 63E2F15AD; Tue, 7 May 2019 08:15:23 -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 2C5923F5AF; Tue, 7 May 2019 08:15:21 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:51 +0100 Message-Id: <20190507151458.29350-8-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 07/14] xen: Convert is_xen_fixed_mfn to use typesafe MFN 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: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Shane Wang , Ian Jackson , Tim Deegan , Julien Grall , Jan Beulich , Andrew Cooper , Gang Wei , =?utf-8?q?Roger_Pau_Monn=C3=A9?= MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" No functional changes. Signed-off-by: Julien Grall Reviewed-by: Jan Beulich Acked-by: Stefano Stabellini Reviewed-by: George Dunlap --- Changes in v2: - Add Jan's reviewed-by - Add Stefano's acked-by --- xen/arch/x86/tboot.c | 2 +- xen/common/page_alloc.c | 2 +- xen/include/asm-arm/mm.h | 4 ++-- xen/include/asm-x86/mm.h | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/tboot.c b/xen/arch/x86/tboot.c index f3fdee4d39..30d159cc62 100644 --- a/xen/arch/x86/tboot.c +++ b/xen/arch/x86/tboot.c @@ -280,7 +280,7 @@ static void tboot_gen_xenheap_integrity(const uint8_t key[TB_KEY_SIZE], if ( !mfn_valid(_mfn(mfn)) ) continue; - if ( is_xen_fixed_mfn(mfn) ) + if ( is_xen_fixed_mfn(_mfn(mfn)) ) continue; /* skip Xen */ if ( (mfn >= PFN_DOWN(g_tboot_shared->tboot_base - 3 * PAGE_SIZE)) && (mfn < PFN_UP(g_tboot_shared->tboot_base diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index f445f7daec..b4067ae202 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -1584,7 +1584,7 @@ int offline_page(mfn_t mfn, int broken, uint32_t *status) *status = 0; pg = mfn_to_page(mfn); - if ( is_xen_fixed_mfn(mfn_x(mfn)) ) + if ( is_xen_fixed_mfn(mfn) ) { *status = PG_OFFLINE_XENPAGE | PG_OFFLINE_FAILED | (DOMID_XEN << PG_OFFLINE_OWNER_SHIFT); diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h index 7b6aaf5e3f..b56018aace 100644 --- a/xen/include/asm-arm/mm.h +++ b/xen/include/asm-arm/mm.h @@ -151,8 +151,8 @@ extern vaddr_t xenheap_virt_start; #endif #define is_xen_fixed_mfn(mfn) \ - ((pfn_to_paddr(mfn) >= virt_to_maddr(&_start)) && \ - (pfn_to_paddr(mfn) <= virt_to_maddr(&_end))) + ((mfn_to_maddr(mfn) >= virt_to_maddr(&_start)) && \ + (mfn_to_maddr(mfn) <= virt_to_maddr(&_end))) #define page_get_owner(_p) (_p)->v.inuse.domain #define page_set_owner(_p,_d) ((_p)->v.inuse.domain = (_d)) diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index 6faa563167..f124f57964 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -280,8 +280,8 @@ struct page_info #define is_xen_heap_mfn(mfn) \ (__mfn_valid(mfn) && is_xen_heap_page(mfn_to_page(_mfn(mfn)))) #define is_xen_fixed_mfn(mfn) \ - ((((mfn) << PAGE_SHIFT) >= __pa(&_stext)) && \ - (((mfn) << PAGE_SHIFT) <= __pa(&__2M_rwdata_end))) + (((mfn_to_maddr(mfn)) >= __pa(&_stext)) && \ + ((mfn_to_maddr(mfn)) <= __pa(&__2M_rwdata_end))) #define PRtype_info "016lx"/* should only be used for printk's */ From patchwork Tue May 7 15:14:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163544 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883273oca; Tue, 7 May 2019 08:16:56 -0700 (PDT) X-Google-Smtp-Source: APXvYqxo6yP6uFrICHNzG49EgzGoLlGA7pro1UcUaabHBmsJ6k3McapUmbKWckUhWcHnTpMWYbJ/ X-Received: by 2002:a6b:b408:: with SMTP id d8mr18718893iof.12.1557242216173; Tue, 07 May 2019 08:16:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242216; cv=none; d=google.com; s=arc-20160816; b=hknUuQTM0SEUzJ6inVVWg6Z5BtLHbbiCBOwul1T1PxZOJhLGRcVEhR08oPOGR2TDgB GXLQw1jnagEuJW9QksjHeTvNLFrOPRe8KGAEu4M3YGYSbRlVgDva0PZRxUVJhY42DMat ywUF5jAUcWLU6PvTE8KlfjEGLG2G0jQnZM14VyUT8JpRdDG6N027EsGJeJXTDBqEVIfB 582DvY6F9P5syVOXNIC3VEfWlUFBf2uefFgQk9BIQw1oWgAY8HM1BW27DsxjqsiAwFWE jzC60kDvQt4KDhRNgbW3nOlywq6TmUhqmYBIeSz93D7v5lJR6VlGe4EuH98sEF34wWms y0iw== 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=CiiBpNn8ZtALvMO0bELhJlGVABiBpv1WTsJiaSmu314=; b=HgEQgctNDSUXtuAqFNDK5O9oqG/tnmJ5rXRsXuoHRLzBfs8p5d0pRTOS76XBs8FamA jmPBFTOwFs6vT/F62hZC4EqGrS+mIx+MCRjO/rIRUi3XZ5xtdSaWSp8f7SRILRCeXII6 +1SGeKkrCrQKJcQBa6rKoEYZTROpIQRmtGLCtU0w0RDpbCdiW4qWN8kmL8PDR9Faxrbo nOOC1W1m0t9shm5OYYLQYhvYjIi7Bo2+Exn3QeeIlOYVL+7Avf0WcptJ/FuHYOBAZGjk OiSEBSYC43ED2wiCe8MzL8FCfep0Doa2fbfc3jPar9N/sWFgjR6w/keq/IHPajY/cKIr MKXQ== 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 r193si11029783ith.37.2019.05.07.08.16.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:56 -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 1hO1oZ-0007ST-HJ; Tue, 07 May 2019 15:15:31 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hO1oY-0007Ra-Cj for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:30 +0000 X-Inumbo-ID: f2afb956-70da-11e9-843c-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id f2afb956-70da-11e9-843c-bc764e045a96; Tue, 07 May 2019 15:15:28 +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 69ECC1684; Tue, 7 May 2019 08:15:25 -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 A38F03F5AF; Tue, 7 May 2019 08:15:23 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:52 +0100 Message-Id: <20190507151458.29350-9-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 08/14] xen: Convert is_xen_heap_mfn to use typesafe MFN 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: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Julien Grall , 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" No functional changes. Signed-off-by: Julien Grall Reviewed-by: Jan Beulich Acked-by: Stefano Stabellini Reviewed-by: George Dunlap --- Changes in v2: - Fix coding style - Merge the declaration for gpfn and old_gpfn - Don't open-code mfn_valid - Add Jan's reviewed-by - Use mfn_add(mfn, -1) - Add Stefano's acked-by for ARM parts --- xen/arch/x86/mm.c | 10 +++++----- xen/arch/x86/mm/p2m.c | 2 +- xen/arch/x86/mm/shadow/multi.c | 2 +- xen/common/page_alloc.c | 4 ++-- xen/include/asm-arm/mm.h | 8 ++++---- xen/include/asm-x86/mm.h | 2 +- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 9878453eb0..570e1e0deb 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -4462,8 +4462,8 @@ int xenmem_add_to_physmap_one( gfn_t gpfn) { struct page_info *page = NULL; - unsigned long gfn = 0; /* gcc ... */ - unsigned long prev_mfn, old_gpfn; + unsigned long gfn = 0 /* gcc ... */, old_gpfn; + mfn_t prev_mfn; int rc = 0; mfn_t mfn = INVALID_MFN; p2m_type_t p2mt; @@ -4512,12 +4512,12 @@ int xenmem_add_to_physmap_one( } /* Remove previously mapped page if it was present. */ - prev_mfn = mfn_x(get_gfn(d, gfn_x(gpfn), &p2mt)); - if ( mfn_valid(_mfn(prev_mfn)) ) + prev_mfn = get_gfn(d, gfn_x(gpfn), &p2mt); + if ( mfn_valid(prev_mfn) ) { if ( is_xen_heap_mfn(prev_mfn) ) /* Xen heap frames are simply unhooked from this phys slot. */ - rc = guest_physmap_remove_page(d, gpfn, _mfn(prev_mfn), PAGE_ORDER_4K); + rc = guest_physmap_remove_page(d, gpfn, prev_mfn, PAGE_ORDER_4K); else /* Normal domain memory is freed, to avoid leaking memory. */ rc = guest_remove_page(d, gfn_x(gpfn)); diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index b16117dc56..3c98f72dbb 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -2935,7 +2935,7 @@ int p2m_add_foreign(struct domain *tdom, unsigned long fgfn, prev_mfn = get_gfn(tdom, gpfn, &p2mt_prev); if ( mfn_valid(prev_mfn) ) { - if ( is_xen_heap_mfn(mfn_x(prev_mfn)) ) + if ( is_xen_heap_mfn(prev_mfn) ) /* Xen heap frames are simply unhooked from this phys slot */ rc = guest_physmap_remove_page(tdom, _gfn(gpfn), prev_mfn, 0); else diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 8781bdcfe5..35a7b606d0 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -559,7 +559,7 @@ _sh_propagate(struct vcpu *v, * caching attributes in the shadows to match what was asked for. */ if ( (level == 1) && is_hvm_domain(d) && - !is_xen_heap_mfn(mfn_x(target_mfn)) ) + !is_xen_heap_mfn(target_mfn) ) { int type; diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index b4067ae202..6061cce24f 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -2121,9 +2121,9 @@ void init_xenheap_pages(paddr_t ps, paddr_t pe) * Yuk! Ensure there is a one-page buffer between Xen and Dom zones, to * prevent merging of power-of-two blocks across the zone boundary. */ - if ( ps && !is_xen_heap_mfn(paddr_to_pfn(ps)-1) ) + if ( ps && !is_xen_heap_mfn(mfn_add(maddr_to_mfn(ps), -1)) ) ps += PAGE_SIZE; - if ( !is_xen_heap_mfn(paddr_to_pfn(pe)) ) + if ( !is_xen_heap_mfn(maddr_to_mfn(pe)) ) pe -= PAGE_SIZE; memguard_guard_range(maddr_to_virt(ps), pe - ps); diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h index b56018aace..a9c8352b94 100644 --- a/xen/include/asm-arm/mm.h +++ b/xen/include/asm-arm/mm.h @@ -138,16 +138,16 @@ extern vaddr_t xenheap_virt_start; #endif #ifdef CONFIG_ARM_32 -#define is_xen_heap_page(page) is_xen_heap_mfn(mfn_x(page_to_mfn(page))) +#define is_xen_heap_page(page) is_xen_heap_mfn(page_to_mfn(page)) #define is_xen_heap_mfn(mfn) ({ \ - unsigned long mfn_ = (mfn); \ + unsigned long mfn_ = mfn_x(mfn); \ (mfn_ >= mfn_x(xenheap_mfn_start) && \ mfn_ < mfn_x(xenheap_mfn_end)); \ }) #else #define is_xen_heap_page(page) ((page)->count_info & PGC_xen_heap) #define is_xen_heap_mfn(mfn) \ - (mfn_valid(_mfn(mfn)) && is_xen_heap_page(mfn_to_page(_mfn(mfn)))) + (mfn_valid(mfn) && is_xen_heap_page(mfn_to_page(mfn))) #endif #define is_xen_fixed_mfn(mfn) \ @@ -246,7 +246,7 @@ static inline paddr_t __virt_to_maddr(vaddr_t va) #ifdef CONFIG_ARM_32 static inline void *maddr_to_virt(paddr_t ma) { - ASSERT(is_xen_heap_mfn(ma >> PAGE_SHIFT)); + ASSERT(is_xen_heap_mfn(maddr_to_mfn(ma))); ma -= mfn_to_maddr(xenheap_mfn_start); return (void *)(unsigned long) ma + XENHEAP_VIRT_START; } diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index f124f57964..6f76f004ab 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -278,7 +278,7 @@ struct page_info #define is_xen_heap_page(page) ((page)->count_info & PGC_xen_heap) #define is_xen_heap_mfn(mfn) \ - (__mfn_valid(mfn) && is_xen_heap_page(mfn_to_page(_mfn(mfn)))) + (mfn_valid(mfn) && is_xen_heap_page(mfn_to_page(mfn))) #define is_xen_fixed_mfn(mfn) \ (((mfn_to_maddr(mfn)) >= __pa(&_stext)) && \ ((mfn_to_maddr(mfn)) <= __pa(&__2M_rwdata_end))) From patchwork Tue May 7 15:14:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163546 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883303oca; Tue, 7 May 2019 08:16:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqwF04NSGriJg7CBHAGXQqdzNaT0OGlVHm/mF0e7Uc48ibOpn7LmtKrQQg6vgpSVChCD7j/y X-Received: by 2002:a24:2901:: with SMTP id p1mr13971260itp.54.1557242217785; Tue, 07 May 2019 08:16:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242217; cv=none; d=google.com; s=arc-20160816; b=ejc7mi1rg7R1/qj4nQuMKeK5rQfXYjCQ09LBlmUEv+zrfbA7WEX3w2yNUg/5qZnEXU bseNdfOCNjVb8KizqQa5KMxehRrb6ZiIDhuam9DBDlyrm4cAocll/GzyK2tQH0WPeNPo xn7hcWZpqOpHEnUWsLbSIBar8GnsXjk01qsW8Qc6eyDchCY4A4EE0D0406Q+f8Bs/J0d QHorRRHBt+a5l2G3nu/GfSNT6Fm9BelAqhgiz49GsBu+thD/qL74jetEcuVWH6K672m/ gzfMMUFt3hTyXipbSqW6fKjkfFq7QLaJ1I6jkiwPiyMwvbo8LzTOH+6d+fbeIWgyCKyR bxmQ== 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=dFZfbLq6gj+snmjMn0yv1mvlC4grpH4NVH5RTEQOChg=; b=VmVUpOIg53B6rZvHyssEB6NztAwQGSpvYca13MskikBAjrJ0qK2mKZeovJuCMwcMJm W88FHVYJji9DtWO/YLM/6/XkFls42mBZOOcYwAGGz2lDUL2V52TFQq8n7M9fn6TtNgR8 +KHMkG1sN0rvDBiGuwP7M8m75hb+k1Lmyk4+X8eshrJAIf1DeA0Y7UTuXp0K4bbSN90g eTB8D4X1SsItiC6kRrulJaOekn4bEPVvzZBFKN3XXSQNmAXF27PJ4T26RZezhMwG2jWS NQBZBSTJgRsalDGSiHOG5ol3XyzmHCV7VdWXo3H+H1Xa3ybiO2lc+ijHEt+dNgfYOLi2 X3xQ== 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 f138si10311140itf.102.2019.05.07.08.16.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:57 -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 1hO1ob-0007Ub-7m; Tue, 07 May 2019 15:15:33 +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 1hO1oZ-0007St-VD for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:31 +0000 X-Inumbo-ID: f2b693d2-70da-11e9-9688-eb272ca3a1ee Received: from foss.arm.com (unknown [217.140.101.70]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id f2b693d2-70da-11e9-9688-eb272ca3a1ee; Tue, 07 May 2019 15:15:29 +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 1F42A1688; Tue, 7 May 2019 08:15:28 -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 D3E593F762; Tue, 7 May 2019 08:15:25 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:53 +0100 Message-Id: <20190507151458.29350-10-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 09/14] xen: Introduce HAS_M2P config and use to protect mfn_to_gmfn call 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: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , oleksandr_tyshchenko@epam.com, Julien Grall , Jan Beulich , andrii_anisov@epam.com, =?utf-8?q?Roger_Pau_Monn=C3=A9?= MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" While Arm never had a M2P, the implementation of mfn_to_gmfn is pretty bogus as we directly return the MFN passed in parameter. Thankfully, the use of mfn_to_gmfn is pretty limited on Arm today. There are only 3 callers: - iommu_hwdom_init: mfn_to_gmfn is used for creating IOMMU page-tables when the P2M is not shared with the IOMMU. No issues so far as Arm does not yet support non-shared P2M case. - memory_exchange: Arm cannot not use it because steal_page is not implemented. - getdomaininfo: Toolstack may map the shared page. It looks like this is mostly used for mapping the P2M of PV guest. Therefore the issue might be minor. Implementing the M2P on Arm is not planned. The M2P would require significant amount of VA address (very tough on 32-bit) that can hardly be justified with the current use of mfn_to_gmfn. - iommu_hwdom_init: mfn_to_gmfn is used because the creating of the IOMMU page-tables is delayed until the first device is assigned. In the embedded case, we will known in most of the times what devices are assigned during the domain creation. So it is possible to take to enable the IOMMU from start. See [1] for the patch. - memory_exchange: This does not work and I haven't seen any request for it so far. - getdomaininfo: The structure on Arm does not seem to contain a lot of useful information on Arm. It is unclear whether we want to allow the toolstack mapping it on Arm. This patch introduces a config option HAS_M2P to tell whether an architecture implements the M2P. - iommu_hwdom_init: For now, we require the M2P support when the IOMMU is not sharing the P2M. - memory_exchange: The hypercall is marked as not supported when the M2P does not exist. - getdomaininfo: A new helper is introduced to wrap the call to mfn_to_gfn/mfn_to_gmfn. For Arm, it returns an invalid GFN so the mapping will fail. [1] https://patchwork.kernel.org/patch/9719913/ Signed-off-by Julien Grall --- Cc: oleksandr_tyshchenko@epam.com Cc: andrii_anisov@epam.com Changes in v2: - Add a warning in public headers - Constify local variable in domain_shared_info_gfn - Invert the naming (_d / d) in domain_shared_info_gfn - Use -EOPNOTSUPP rather than -ENOSYS - Rework how the memory_exchange hypercall is removed from Arm --- xen/arch/x86/Kconfig | 1 + xen/common/Kconfig | 3 +++ xen/common/domctl.c | 2 +- xen/common/memory.c | 4 ++++ xen/drivers/passthrough/iommu.c | 6 +++++- xen/include/asm-arm/domain.h | 5 +++++ xen/include/public/domctl.h | 4 ++++ xen/include/xen/domain.h | 8 ++++++++ 8 files changed, 31 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig index 4b8b07b549..52922a87e7 100644 --- a/xen/arch/x86/Kconfig +++ b/xen/arch/x86/Kconfig @@ -16,6 +16,7 @@ config X86 select HAS_IOPORTS select HAS_KEXEC select MEM_ACCESS_ALWAYS_ON + select HAS_M2P select HAS_MEM_PAGING select HAS_MEM_SHARING select HAS_NS16550 diff --git a/xen/common/Kconfig b/xen/common/Kconfig index c838506241..df871adc8f 100644 --- a/xen/common/Kconfig +++ b/xen/common/Kconfig @@ -63,6 +63,9 @@ config HAS_GDBSX config HAS_IOPORTS bool +config HAS_M2P + bool + config NEEDS_LIBELF bool diff --git a/xen/common/domctl.c b/xen/common/domctl.c index bade9a63b1..29940fdea5 100644 --- a/xen/common/domctl.c +++ b/xen/common/domctl.c @@ -205,7 +205,7 @@ void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info) info->outstanding_pages = d->outstanding_pages; info->shr_pages = atomic_read(&d->shr_pages); info->paged_pages = atomic_read(&d->paged_pages); - info->shared_info_frame = mfn_to_gmfn(d, virt_to_mfn(d->shared_info)); + info->shared_info_frame = gfn_x(domain_shared_info_gfn(d)); BUG_ON(SHARED_M2P(info->shared_info_frame)); info->cpupool = d->cpupool ? d->cpupool->cpupool_id : CPUPOOLID_NONE; diff --git a/xen/common/memory.c b/xen/common/memory.c index 86567e6117..d6a580da31 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -512,6 +512,7 @@ static bool propagate_node(unsigned int xmf, unsigned int *memflags) static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg) { +#ifdef CONFIG_M2P struct xen_memory_exchange exch; PAGE_LIST_HEAD(in_chunk_list); PAGE_LIST_HEAD(out_chunk_list); @@ -806,6 +807,9 @@ static long memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg) if ( __copy_field_to_guest(arg, &exch, nr_exchanged) ) rc = -EFAULT; return rc; +#else /* !CONFIG_M2P */ + return -EOPNOTSUPP; +#endif } int xenmem_add_to_physmap(struct domain *d, struct xen_add_to_physmap *xatp, diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c index a6697d58fb..dbb64b13bc 100644 --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -188,9 +188,10 @@ void __hwdom_init iommu_hwdom_init(struct domain *d) hd->need_sync = iommu_hwdom_strict && !iommu_use_hap_pt(d); if ( need_iommu_pt_sync(d) ) { + int rc = 0; +#ifdef CONFIG_HAS_M2P struct page_info *page; unsigned int i = 0, flush_flags = 0; - int rc = 0; page_list_for_each ( page, &d->page_list ) { @@ -217,6 +218,9 @@ void __hwdom_init iommu_hwdom_init(struct domain *d) /* Use while-break to avoid compiler warning */ while ( iommu_iotlb_flush_all(d, flush_flags) ) break; +#else + rc = -EOPNOTSUPP; +#endif if ( rc ) printk(XENLOG_WARNING "d%d: IOMMU mapping failed: %d\n", diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h index 312fec8932..d61b0188da 100644 --- a/xen/include/asm-arm/domain.h +++ b/xen/include/asm-arm/domain.h @@ -267,6 +267,11 @@ static inline void free_vcpu_guest_context(struct vcpu_guest_context *vgc) static inline void arch_vcpu_block(struct vcpu *v) {} +static inline gfn_t domain_shared_info_gfn(struct domain *d) +{ + return INVALID_GFN; +} + #endif /* __ASM_DOMAIN_H__ */ /* diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h index 19486d5e32..cac8ffffe9 100644 --- a/xen/include/public/domctl.h +++ b/xen/include/public/domctl.h @@ -118,6 +118,10 @@ struct xen_domctl_getdomaininfo { uint64_aligned_t outstanding_pages; uint64_aligned_t shr_pages; uint64_aligned_t paged_pages; + /* + * GFN of shared_info struct. Some architectures (e.g Arm) may not + * provide a valid GFN. + */ uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */ uint64_aligned_t cpu_time; uint32_t nr_online_vcpus; /* Number of VCPUs currently online. */ diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h index d1bfc82f57..f1761fe183 100644 --- a/xen/include/xen/domain.h +++ b/xen/include/xen/domain.h @@ -118,4 +118,12 @@ struct vnuma_info { void vnuma_destroy(struct vnuma_info *vnuma); +#ifdef CONFIG_HAS_M2P +#define domain_shared_info_gfn(d) ({ \ + const struct domain *d_ = (d); \ + \ + mfn_to_gfn(d_, _mfn(__virt_to_mfn(d_->shared_info))); \ +}) +#endif + #endif /* __XEN_DOMAIN_H__ */ From patchwork Tue May 7 15:14:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163547 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883338oca; Tue, 7 May 2019 08:16:59 -0700 (PDT) X-Google-Smtp-Source: APXvYqysEAJ8E1Ht38cqIrT+JgawPmHDySpJb7wMOChr9T6UTWaO0CRJ3y9/HPoapPFfeq+Omm8z X-Received: by 2002:a24:760a:: with SMTP id z10mr21725284itb.115.1557242219454; Tue, 07 May 2019 08:16:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242219; cv=none; d=google.com; s=arc-20160816; b=x1mrOjX9YaH8cT/A9D23Ve4Ys6/VkcXX4O1YFkFnn61Xluk4mSIm1uOW6lYGohAM+3 s2etZ0IvpUlCW5/Eb4LCAbJO5ApdeJejf5/e3Yado1xpOAUMUfN6adu6Z5vFX4T/YUne pP+1rUYkz2tQ7aUwhnS7iPDcbOvyyAHJWQJvrX/rUoq4hwrfcHzUmDOJEcJxOYz3ey9h t02UkzPUDxH9u+fbISOR0xzZ4RoNsJEsjOoUM7aUrK8TuxSiLnsfxnaGoO9abUv60gt0 YDNWu1nNUFBsGJhUx62qRNkJxfjNVRg9eWSD2W5TybArbAnqchUJloM0p4Y1kKFDf1KB 76kg== 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=V41zxAloM9tfD+wZ0aHgs323ArobYLItLUYUwOfc7Vw=; b=sRTqQAMDm6hNqDlb7iNLMiKluV0VeUC+oiGJ7+e+vBFjPJJMbVMrMixkO9Liz4PQ7C F+dTAwYTQ1O7eRKyX3aIL8xI/KWuDiNwIw0fN9/m8FjHcDukGpI/WB2Oi1K0LJhDxXKd DrEj2OBAUj/9vi2/IzAX2F4B1x0GCKUnN7LnD8dRKXkmycXtSZcQjt1OwNyY+KVfFv1S qeTlIf6tClOW/yv1pEazJQI0nbJ5BOLErbXl1Osw8Qxvq4tFrXULeCRHgdq31yz/siCE QGCCfdxeXj1fI2ZCNapqc1/7xtw5jYAIltfUOmFevtKfpQ4mwLAbk3iifJNCEPAAWGXw pgNQ== 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 10si5776345ioz.111.2019.05.07.08.16.59 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:59 -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 1hO1oZ-0007Sv-Ta; Tue, 07 May 2019 15:15:31 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hO1oY-0007Rh-KY for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:30 +0000 X-Inumbo-ID: f35238f3-70da-11e9-843c-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id f35238f3-70da-11e9-843c-bc764e045a96; Tue, 07 May 2019 15:15:29 +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 B86A5168F; Tue, 7 May 2019 08:15:29 -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 5CFFF3F90E; Tue, 7 May 2019 08:15:28 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:54 +0100 Message-Id: <20190507151458.29350-11-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 10/14] xen: Remove mfn_to_gmfn macro 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: Stefano Stabellini , Wei Liu , Andrew Cooper , Julien Grall , 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" On x86, mfn_to_gmfn can be replaced with mfn_to_gfn. On Arm, there are no more call to mfn_to_gmfn, so the helper can be dropped. At the same time rework a comment in Arm code that does not make sense. Signed-off-by: Julien Grall Acked-by: Jan Beulich Acked-by: Stefano Stabellini --- Changes in v2: - Add Jan's and Stefano's acked-by --- xen/drivers/passthrough/iommu.c | 7 +++---- xen/include/asm-arm/mm.h | 4 +--- xen/include/asm-x86/mm.h | 5 ----- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c index dbb64b13bc..054f71b919 100644 --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -195,8 +195,8 @@ void __hwdom_init iommu_hwdom_init(struct domain *d) page_list_for_each ( page, &d->page_list ) { - unsigned long mfn = mfn_x(page_to_mfn(page)); - unsigned long dfn = mfn_to_gmfn(d, mfn); + mfn_t mfn = page_to_mfn(page); + dfn_t dfn = _dfn(gfn_x(mfn_to_gfn(d, mfn))); unsigned int mapping = IOMMUF_readable; int ret; @@ -205,8 +205,7 @@ void __hwdom_init iommu_hwdom_init(struct domain *d) == PGT_writable_page) ) mapping |= IOMMUF_writable; - ret = iommu_map(d, _dfn(dfn), _mfn(mfn), 0, mapping, - &flush_flags); + ret = iommu_map(d, dfn, mfn, 0, mapping, &flush_flags); if ( !rc ) rc = ret; diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h index a9c8352b94..a9cb98a6c7 100644 --- a/xen/include/asm-arm/mm.h +++ b/xen/include/asm-arm/mm.h @@ -321,10 +321,8 @@ struct page_info *get_page_from_gva(struct vcpu *v, vaddr_t va, #define SHARED_M2P_ENTRY (~0UL - 1UL) #define SHARED_M2P(_e) ((_e) == SHARED_M2P_ENTRY) -/* Xen always owns P2M on ARM */ +/* We don't have a M2P on Arm */ #define set_gpfn_from_mfn(mfn, pfn) do { (void) (mfn), (void)(pfn); } while (0) -#define mfn_to_gmfn(_d, mfn) (mfn) - /* Arch-specific portion of memory_op hypercall. */ long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg); diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index 6f76f004ab..717378730b 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -506,11 +506,6 @@ extern struct rangeset *mmio_ro_ranges; #define get_gpfn_from_mfn(mfn) (machine_to_phys_mapping[(mfn)]) -#define mfn_to_gmfn(_d, mfn) \ - ( (paging_mode_translate(_d)) \ - ? get_gpfn_from_mfn(mfn) \ - : (mfn) ) - #define compat_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >> 20)) #define compat_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) << 20)) From patchwork Tue May 7 15:14:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163545 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883300oca; Tue, 7 May 2019 08:16:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqzbePCBUHJ0uncXrshIwzySoouT2fAzVwbVXKGOIpvnZJmVToMGOaNam9Gp1fiWt+XMmCoV X-Received: by 2002:a24:2855:: with SMTP id h82mr21849102ith.82.1557242217727; Tue, 07 May 2019 08:16:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242217; cv=none; d=google.com; s=arc-20160816; b=ToS8YbYKBhjY9Uevy0pUx9jT7Y/ehwAWdQl2QXchbA9vyHyKA0r2e0kN+Ci9D+cY5E /JD5Ga4t3Rj5Ex5r73+SCnEzSTOpS5o1OSt+sVvZyjKCnJ/PEUVSIwt0Njlf9fN4Yc4c RUNZXnyisZldl6XlUj2fzMARfHVABhIrLGgHklcdS4YjV2uZ/uy59KC3ZCriZ8Pcl+2M EIak42jlKxDHTfWPJVcV2k9/ewXi7RlEiGYsOUPEwb0Y5arzVEnd+2dMrsJZzjhrC23X yUoSy/PU5FvQiyiYYxRZwCe7eQzNOw/DYqC7WJbfMGg/aEsefOk46NXheVd3qHt+LncH tDqQ== 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=hbhu0YohWONiIdqNjjwb9jC9809YnzZVx3Mwl7Zxu28=; b=w+IdAF+peSdDljh99AAB+NYo2P2Uy/hggG26M+XT2FiiFuqvPqPBGMDPvfId/jeuYd ela4vB6B2bWmjUTfZmpXk7wIQl0/PoiJd+XG6cIEw1hgs4YroKRnA/VA56/PlHIXpthN GIt1EhuokwSJaf3dUr6RVX3ULTGyts5Bx7Ik2Z1C6A+FrQniOZyjLefhXGyBdtDwl9Es Xi37iqgaTNzlPZTSzVuyxbSG/se2iUfw/Ww2IHisP+MTp887CmAq3vXvAoP0w/EfpdJP RF8zFbOwDuz3SM8EdvIUYqHqLxmmp9CYiVs6u2qB+9hLLdb81Gmv7Lrs1F9WDhz96/nf UWEw== 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 k1si9026564ios.153.2019.05.07.08.16.57 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:57 -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 1hO1oc-0007Vq-I2; Tue, 07 May 2019 15:15:34 +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 1hO1ob-0007UV-5f for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:33 +0000 X-Inumbo-ID: f4392e90-70da-11e9-82a8-5b2083d4bc8e Received: from foss.arm.com (unknown [217.140.101.70]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id f4392e90-70da-11e9-82a8-5b2083d4bc8e; Tue, 07 May 2019 15:15:31 +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 35F4F15AD; Tue, 7 May 2019 08:15:31 -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 025F63F5AF; Tue, 7 May 2019 08:15:29 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:55 +0100 Message-Id: <20190507151458.29350-12-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 11/14] xen/x86: mm: Re-implement set_gpfn_from_mfn() as a static inline function 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" set_gpfn_from_mfn() is currently implement in a 2 part macros. The second macro is only called within the first macro, so they can be folded together. Furthermore, this is now converted to a static inline making the code more readable and safer. As set_gpfn_from_mfn is now a static inline function, the extern variable dom_cow should be defined earlier on. For convenience, the definition of all dom_* variables are moved earlier on. Signed-off-by: Julien Grall --- Changes in v2: - Patch added --- xen/include/asm-x86/mm.h | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index 717378730b..4721725c60 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -442,6 +442,8 @@ int check_descriptor(const struct domain *d, seg_desc_t *desc); extern paddr_t mem_hotplug; +extern struct domain *dom_xen, *dom_io, *dom_cow; /* for vmcoreinfo */ + /****************************************************************************** * With shadow pagetables, the different kinds of address start * to get get confusing. @@ -483,24 +485,25 @@ extern paddr_t mem_hotplug; #define SHARED_M2P(_e) ((_e) == SHARED_M2P_ENTRY) #define compat_machine_to_phys_mapping ((unsigned int *)RDWR_COMPAT_MPT_VIRT_START) -#define _set_gpfn_from_mfn(mfn, pfn) ({ \ - struct domain *d = page_get_owner(mfn_to_page(_mfn(mfn))); \ - unsigned long entry = (d && (d == dom_cow)) ? \ - SHARED_M2P_ENTRY : (pfn); \ - ((void)((mfn) >= (RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) / 4 || \ - (compat_machine_to_phys_mapping[(mfn)] = (unsigned int)(entry))), \ - machine_to_phys_mapping[(mfn)] = (entry)); \ - }) /* * Disable some users of set_gpfn_from_mfn() (e.g., free_heap_pages()) until * the machine_to_phys_mapping is actually set up. */ extern bool machine_to_phys_mapping_valid; -#define set_gpfn_from_mfn(mfn, pfn) do { \ - if ( machine_to_phys_mapping_valid ) \ - _set_gpfn_from_mfn(mfn, pfn); \ -} while (0) + +static inline void set_gpfn_from_mfn(unsigned long mfn, unsigned long pfn) +{ + struct domain *d = page_get_owner(mfn_to_page(_mfn(mfn))); + unsigned long entry = (d && (d == dom_cow)) ? SHARED_M2P_ENTRY : pfn; + + if (!machine_to_phys_mapping_valid) + return; + + if ( mfn >= (RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) / 4 ) + compat_machine_to_phys_mapping[mfn] = entry; + machine_to_phys_mapping[mfn] = entry; +} extern struct rangeset *mmio_ro_ranges; @@ -592,8 +595,6 @@ unsigned int domain_clamp_alloc_bitsize(struct domain *d, unsigned int bits); unsigned long domain_get_maximum_gpfn(struct domain *d); -extern struct domain *dom_xen, *dom_io, *dom_cow; /* for vmcoreinfo */ - /* Definition of an mm lock: spinlock with extra fields for debugging */ typedef struct mm_lock { spinlock_t lock; From patchwork Tue May 7 15:14:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163548 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883402oca; Tue, 7 May 2019 08:17:03 -0700 (PDT) X-Google-Smtp-Source: APXvYqznoDMTJ+mG+6HCEUArmbsFGO+NPQ+Yced0315JGsP5gAVpIe3iEU0HbT9j+tmXmf7FroCM X-Received: by 2002:a5d:9a18:: with SMTP id s24mr16419820iol.200.1557242223169; Tue, 07 May 2019 08:17:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242223; cv=none; d=google.com; s=arc-20160816; b=jQmTSTNgfx90Iw9acdSOnpxVXJg7KInFRLpsBiQIuBEvC9crDnwNKdF2KbnwEw4RmU g5HRd79jyuBivNzxkprwftjFgpwz9mvvOAYhI65vRrBDo7ZN6W8X82sAVP582ZGymE9/ SuJtkqagXROhUH1/2oyfD6ylE573AoBpRpKWE2XSUIEAU1NCE3N6g3ZzeTgQD9Pwl/sZ zPEwadUosx3U0DEUBYmd0VP160A0P4wEdMZdOcQjnXIkUTaKbNdVWVYgVURe+0+fcwRn KoTKIUmhUcETA3bu4FA4pEyeGamfhv4Xtz2a2DBUYiBjQFOoYHpM8BqpOCh6C3uxZw0o YFCg== 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=Y9ETzyo+1KP0BmnYQ+Kx9113zhEhvc6xvzoEGYZoItM=; b=cgCxgFCOkkAUH3HBi+BQfu1emglbSB3ioJEbNwzVPorga78EqzmWHpJExP8ICZgepg 3phiUk7NXqw5oysN37uHK9SxCLxoco9GX2WDdRFkhr6yu1YYvFkSekCunajjCQ7mMm/A jIHAbc139I1jxw0Ko2ec1kbmHlbn5qCB7mt44AGnblhY1Ebm1F2qD+R+fdKRjH0Y2T1v YcZRTxrs997k1ulc0ZsJSaJCbqjtQFvrfeVaI3se2cALxBqRtzkC2U9BJ0FuabK7Ixfx mhttihQ0WKuNP7LzscMTzfsdqIeN+jO0pD1k7AQN61+J4PHsr+DcBFd2p9sEQCblwJJf Po6g== 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 i8si11443201jan.35.2019.05.07.08.17.03 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:17:03 -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 1hO1oe-0007Z3-7R; Tue, 07 May 2019 15:15:36 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hO1oc-0007WE-VI for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:35 +0000 X-Inumbo-ID: f50b4400-70da-11e9-843c-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id f50b4400-70da-11e9-843c-bc764e045a96; Tue, 07 May 2019 15:15:32 +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 A77F91682; Tue, 7 May 2019 08:15:32 -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 741453F5AF; Tue, 7 May 2019 08:15:31 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:56 +0100 Message-Id: <20190507151458.29350-13-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 12/14] xen/x86: pv: Convert update_intpte() to use typesafe MFN 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" The third parameter of update_intpte() is a MFN, so it can be switched to use the typesafe. At the same time, the typesafe is propagated as far as possible without major modifications. Signed-off-by: Julien Grall Reviewed-by: Jan Beulich --- Changes in v2: - Patch added --- xen/arch/x86/mm.c | 84 ++++++++++++++++++++--------------------- xen/arch/x86/pv/grant_table.c | 6 +-- xen/arch/x86/pv/mm.h | 6 +-- xen/arch/x86/pv/ro-page-fault.c | 2 +- 4 files changed, 49 insertions(+), 49 deletions(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 570e1e0deb..7d887f2699 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -2080,7 +2080,7 @@ void page_unlock(struct page_info *page) /* Update the L1 entry at pl1e to new value nl1e. */ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgentry_t nl1e, - unsigned long gl1mfn, unsigned int cmd, + mfn_t gl1mfn, unsigned int cmd, struct vcpu *pt_vcpu, struct domain *pg_dom) { bool preserve_ad = (cmd == MMU_PT_UPDATE_PRESERVE_AD); @@ -2177,8 +2177,8 @@ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgentry_t nl1e, } else if ( pv_l1tf_check_l1e(pt_dom, nl1e) ) return -ERESTART; - else if ( unlikely(!UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, pt_vcpu, - preserve_ad)) ) + else if ( unlikely(!UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, + pt_vcpu, preserve_ad)) ) { return -EBUSY; } @@ -2188,16 +2188,16 @@ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgentry_t nl1e, } -/* Update the L2 entry at pl2e to new value nl2e. pl2e is within frame pfn. */ +/* Update the L2 entry at pl2e to new value nl2e. pl2e is within frame mfn. */ static int mod_l2_entry(l2_pgentry_t *pl2e, l2_pgentry_t nl2e, - unsigned long pfn, + mfn_t mfn, int preserve_ad, struct vcpu *vcpu) { l2_pgentry_t ol2e; struct domain *d = vcpu->domain; - struct page_info *l2pg = mfn_to_page(_mfn(pfn)); + struct page_info *l2pg = mfn_to_page(mfn); unsigned long type = l2pg->u.inuse.type_info; int rc = 0; @@ -2224,16 +2224,16 @@ static int mod_l2_entry(l2_pgentry_t *pl2e, if ( !l2e_has_changed(ol2e, nl2e, ~FASTPATH_FLAG_WHITELIST) ) { nl2e = adjust_guest_l2e(nl2e, d); - if ( UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, pfn, vcpu, preserve_ad) ) + if ( UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, mfn, vcpu, preserve_ad) ) return 0; return -EBUSY; } - if ( unlikely((rc = get_page_from_l2e(nl2e, pfn, d, 0)) < 0) ) + if ( unlikely((rc = get_page_from_l2e(nl2e, mfn_x(mfn), d, 0)) < 0) ) return rc; nl2e = adjust_guest_l2e(nl2e, d); - if ( unlikely(!UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, pfn, vcpu, + if ( unlikely(!UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, mfn, vcpu, preserve_ad)) ) { ol2e = nl2e; @@ -2242,21 +2242,21 @@ static int mod_l2_entry(l2_pgentry_t *pl2e, } else if ( pv_l1tf_check_l2e(d, nl2e) ) return -ERESTART; - else if ( unlikely(!UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, pfn, vcpu, + else if ( unlikely(!UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, mfn, vcpu, preserve_ad)) ) { return -EBUSY; } - put_page_from_l2e(ol2e, pfn, 0, true); + put_page_from_l2e(ol2e, mfn_x(mfn), 0, true); return rc; } -/* Update the L3 entry at pl3e to new value nl3e. pl3e is within frame pfn. */ +/* Update the L3 entry at pl3e to new value nl3e. pl3e is within frame mfn. */ static int mod_l3_entry(l3_pgentry_t *pl3e, l3_pgentry_t nl3e, - unsigned long pfn, + mfn_t mfn, int preserve_ad, struct vcpu *vcpu) { @@ -2287,17 +2287,17 @@ static int mod_l3_entry(l3_pgentry_t *pl3e, if ( !l3e_has_changed(ol3e, nl3e, ~FASTPATH_FLAG_WHITELIST) ) { nl3e = adjust_guest_l3e(nl3e, d); - rc = UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, pfn, vcpu, preserve_ad); + rc = UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, mfn, vcpu, preserve_ad); return rc ? 0 : -EFAULT; } - rc = get_page_from_l3e(nl3e, pfn, d, 0); + rc = get_page_from_l3e(nl3e, mfn_x(mfn), d, 0); if ( unlikely(rc < 0) ) return rc; rc = 0; nl3e = adjust_guest_l3e(nl3e, d); - if ( unlikely(!UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, pfn, vcpu, + if ( unlikely(!UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, mfn, vcpu, preserve_ad)) ) { ol3e = nl3e; @@ -2306,7 +2306,7 @@ static int mod_l3_entry(l3_pgentry_t *pl3e, } else if ( pv_l1tf_check_l3e(d, nl3e) ) return -ERESTART; - else if ( unlikely(!UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, pfn, vcpu, + else if ( unlikely(!UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, mfn, vcpu, preserve_ad)) ) { return -EFAULT; @@ -2316,14 +2316,14 @@ static int mod_l3_entry(l3_pgentry_t *pl3e, if ( !create_pae_xen_mappings(d, pl3e) ) BUG(); - put_page_from_l3e(ol3e, pfn, 0, 1); + put_page_from_l3e(ol3e, mfn_x(mfn), 0, 1); return rc; } -/* Update the L4 entry at pl4e to new value nl4e. pl4e is within frame pfn. */ +/* Update the L4 entry at pl4e to new value nl4e. pl4e is within frame mfn. */ static int mod_l4_entry(l4_pgentry_t *pl4e, l4_pgentry_t nl4e, - unsigned long pfn, + mfn_t mfn, int preserve_ad, struct vcpu *vcpu) { @@ -2354,17 +2354,17 @@ static int mod_l4_entry(l4_pgentry_t *pl4e, if ( !l4e_has_changed(ol4e, nl4e, ~FASTPATH_FLAG_WHITELIST) ) { nl4e = adjust_guest_l4e(nl4e, d); - rc = UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, pfn, vcpu, preserve_ad); + rc = UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, mfn, vcpu, preserve_ad); return rc ? 0 : -EFAULT; } - rc = get_page_from_l4e(nl4e, pfn, d, 0); + rc = get_page_from_l4e(nl4e, mfn_x(mfn), d, 0); if ( unlikely(rc < 0) ) return rc; rc = 0; nl4e = adjust_guest_l4e(nl4e, d); - if ( unlikely(!UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, pfn, vcpu, + if ( unlikely(!UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, mfn, vcpu, preserve_ad)) ) { ol4e = nl4e; @@ -2373,13 +2373,13 @@ static int mod_l4_entry(l4_pgentry_t *pl4e, } else if ( pv_l1tf_check_l4e(d, nl4e) ) return -ERESTART; - else if ( unlikely(!UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, pfn, vcpu, + else if ( unlikely(!UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, mfn, vcpu, preserve_ad)) ) { return -EFAULT; } - put_page_from_l4e(ol4e, pfn, 0, 1); + put_page_from_l4e(ol4e, mfn_x(mfn), 0, 1); return rc; } #endif /* CONFIG_PV */ @@ -3083,7 +3083,7 @@ int new_guest_cr3(mfn_t mfn) l4e_from_mfn(mfn, (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)), - mfn_x(gt_mfn), 0, curr); + gt_mfn, 0, curr); unmap_domain_page(pl4e); switch ( rc ) { @@ -3752,12 +3752,12 @@ long do_mmu_update( { struct mmu_update req; void *va = NULL; - unsigned long gpfn, gmfn, mfn; + unsigned long gpfn, gmfn; struct page_info *page; unsigned int cmd, i = 0, done = 0, pt_dom; struct vcpu *curr = current, *v = curr; struct domain *d = v->domain, *pt_owner = d, *pg_owner; - mfn_t map_mfn = INVALID_MFN; + mfn_t map_mfn = INVALID_MFN, mfn; bool sync_guest = false; uint32_t xsm_needed = 0; uint32_t xsm_checked = 0; @@ -3883,14 +3883,14 @@ long do_mmu_update( break; } - mfn = mfn_x(page_to_mfn(page)); + mfn = page_to_mfn(page); - if ( !mfn_eq(_mfn(mfn), map_mfn) ) + if ( !mfn_eq(mfn, map_mfn) ) { if ( va ) unmap_domain_page(va); - va = map_domain_page(_mfn(mfn)); - map_mfn = _mfn(mfn); + va = map_domain_page(mfn); + map_mfn = mfn; } va = _p(((unsigned long)va & PAGE_MASK) + (req.ptr & ~PAGE_MASK)); @@ -3926,7 +3926,8 @@ long do_mmu_update( { bool local_in_use = false; - if ( pagetable_get_pfn(curr->arch.guest_table) == mfn ) + if ( mfn_eq(pagetable_get_mfn(curr->arch.guest_table), + mfn) ) { local_in_use = true; get_cpu_info()->root_pgt_changed = true; @@ -3939,15 +3940,15 @@ long do_mmu_update( */ if ( (page->u.inuse.type_info & PGT_count_mask) > (1 + !!(page->u.inuse.type_info & PGT_pinned) + - (pagetable_get_pfn(curr->arch.guest_table_user) == - mfn) + local_in_use) ) + (mfn_eq(pagetable_get_mfn(curr->arch.guest_table_user), + mfn)) + local_in_use) ) sync_guest = true; } break; case PGT_writable_page: perfc_incr(writable_mmu_updates); - if ( paging_write_guest_entry(v, va, req.val, _mfn(mfn)) ) + if ( paging_write_guest_entry(v, va, req.val, mfn) ) rc = 0; break; } @@ -3958,7 +3959,7 @@ long do_mmu_update( else if ( get_page_type(page, PGT_writable_page) ) { perfc_incr(writable_mmu_updates); - if ( paging_write_guest_entry(v, va, req.val, _mfn(mfn)) ) + if ( paging_write_guest_entry(v, va, req.val, mfn) ) rc = 0; put_page_type(page); } @@ -3980,7 +3981,7 @@ long do_mmu_update( break; } - mfn = req.ptr >> PAGE_SHIFT; + mfn = maddr_to_mfn(req.ptr); gpfn = req.val; xsm_needed |= XSM_MMU_MACHPHYS_UPDATE; @@ -3992,7 +3993,7 @@ long do_mmu_update( xsm_checked = xsm_needed; } - page = get_page_from_mfn(_mfn(mfn), pg_owner); + page = get_page_from_mfn(mfn, pg_owner); if ( unlikely(!page) ) { gdprintk(XENLOG_WARNING, @@ -4001,7 +4002,7 @@ long do_mmu_update( break; } - set_gpfn_from_mfn(mfn, gpfn); + set_gpfn_from_mfn(mfn_x(mfn), gpfn); paging_mark_pfn_dirty(pg_owner, _pfn(gpfn)); put_page(page); @@ -4257,8 +4258,7 @@ static int __do_update_va_mapping( goto out; } - rc = mod_l1_entry(pl1e, val, mfn_x(gl1mfn), MMU_NORMAL_PT_UPDATE, v, - pg_owner); + rc = mod_l1_entry(pl1e, val, gl1mfn, MMU_NORMAL_PT_UPDATE, v, pg_owner); page_unlock(gl1pg); put_page(gl1pg); diff --git a/xen/arch/x86/pv/grant_table.c b/xen/arch/x86/pv/grant_table.c index 5180334f42..0325618c98 100644 --- a/xen/arch/x86/pv/grant_table.c +++ b/xen/arch/x86/pv/grant_table.c @@ -108,7 +108,7 @@ int create_grant_pv_mapping(uint64_t addr, mfn_t frame, goto out_unlock; ol1e = *pl1e; - if ( UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, mfn_x(gl1mfn), curr, 0) ) + if ( UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr, 0) ) rc = GNTST_okay; out_unlock: @@ -165,7 +165,7 @@ static bool steal_linear_address(unsigned long linear, l1_pgentry_t *out) goto out_unlock; ol1e = *pl1e; - okay = UPDATE_ENTRY(l1, pl1e, ol1e, l1e_empty(), mfn_x(gl1mfn), curr, 0); + okay = UPDATE_ENTRY(l1, pl1e, ol1e, l1e_empty(), gl1mfn, curr, 0); if ( okay ) *out = ol1e; @@ -293,7 +293,7 @@ int replace_grant_pv_mapping(uint64_t addr, mfn_t frame, "PTE flags %x for %"PRIx64" don't match grant (%x)\n", l1e_get_flags(ol1e), addr, grant_pte_flags); - if ( UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, mfn_x(gl1mfn), curr, 0) ) + if ( UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr, 0) ) rc = GNTST_okay; out_unlock: diff --git a/xen/arch/x86/pv/mm.h b/xen/arch/x86/pv/mm.h index 976209ba4c..ef84dbb41c 100644 --- a/xen/arch/x86/pv/mm.h +++ b/xen/arch/x86/pv/mm.h @@ -37,7 +37,7 @@ static inline l1_pgentry_t guest_get_eff_l1e(unsigned long linear) * Returns false for failure (pointer not valid), true for success. */ static inline bool update_intpte(intpte_t *p, intpte_t old, intpte_t new, - unsigned long mfn, struct vcpu *v, + mfn_t mfn, struct vcpu *v, bool preserve_ad) { bool rv = true; @@ -45,7 +45,7 @@ static inline bool update_intpte(intpte_t *p, intpte_t old, intpte_t new, #ifndef PTE_UPDATE_WITH_CMPXCHG if ( !preserve_ad ) { - rv = paging_write_guest_entry(v, p, new, _mfn(mfn)); + rv = paging_write_guest_entry(v, p, new, mfn); } else #endif @@ -59,7 +59,7 @@ static inline bool update_intpte(intpte_t *p, intpte_t old, intpte_t new, if ( preserve_ad ) _new |= old & (_PAGE_ACCESSED | _PAGE_DIRTY); - rv = paging_cmpxchg_guest_entry(v, p, &t, _new, _mfn(mfn)); + rv = paging_cmpxchg_guest_entry(v, p, &t, _new, mfn); if ( unlikely(rv == 0) ) { gdprintk(XENLOG_WARNING, diff --git a/xen/arch/x86/pv/ro-page-fault.c b/xen/arch/x86/pv/ro-page-fault.c index e7a7179dda..92911076ef 100644 --- a/xen/arch/x86/pv/ro-page-fault.c +++ b/xen/arch/x86/pv/ro-page-fault.c @@ -197,7 +197,7 @@ static int ptwr_emulated_update(unsigned long addr, intpte_t *p_old, else { ol1e = *pl1e; - if ( !UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, mfn_x(mfn), v, 0) ) + if ( !UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, mfn, v, 0) ) BUG(); } From patchwork Tue May 7 15:14:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163549 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883566oca; Tue, 7 May 2019 08:17:13 -0700 (PDT) X-Google-Smtp-Source: APXvYqx9RyG1DALKTuhuDq/vx5RpZqBIDu2lgPsNAuK9S+vr2sTMwXrHKJaqsAq5+bevAd2v7e/v X-Received: by 2002:a02:c48d:: with SMTP id t13mr23980137jam.48.1557242233617; Tue, 07 May 2019 08:17:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242233; cv=none; d=google.com; s=arc-20160816; b=Zr1ikR7+Luv4BMviSGzbB6lVQ0MDLSAb8K0k3Wzn0buURqQN9VLpkkqNox7/oX9HYt xEnEdKpZOCoIxt9MXiuc41UjQ5JmXZ9tzg3zI1AuQRayGYJhd6DDBmDOCZcTl6mkTtQk 20/0VBtqF93JKV6s/eMKbN4q8lj446heZKbMnJ6Vq5KQ8B0t0aatQlkhqGD2kPJqa2Fu dE8K4oWtS/ZiH8FJbbxJuZ2MHIeemozx5KcapUeLYBh4LWgcQ3ajltEniQfRFoyXuyT6 XTMyLcf4Ns8xhohGn3JOl0u34vGB9O2/jtMrd1c2iaIy0NsfvIRAoXuOY6DnaRrUQGiB wpPA== 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=2ZG/+Kup2A4Q6Ef6n5r/73fgN8TdOy8MUowJoU3rJQc=; b=bbmP5kh/l5BKWT8huMAl+NOFZSCdZwiM18H0g4jYHvPzjJGwCUTNouAoUBVi+H/cdV TJ/kAx3WwHDN9zSqUnIx7wM+ZgguakAfU47FlA3M2/UFFMz/pOlBzuwDmXQIMDDOmIY7 RbKY6FCY0WVIwcXn8CQWfQRx1tniRmZdLzmu86I5OatHxqHgjRVtIcXSvS4k/vWF4QNQ xwcv9IOWormxlW3UIu/ulRtmaAbvGLKkCqm4GGXVWAt5+vNHzGBKMtjOuYaFBjzSGpBY ucPmgeU0n2yNtqP433W+W+Vkh/LZvcR1Ppqfp4q0Y14nNXB2rVgyp2u5W0bMYIVF4Jg9 yufw== 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 d202si1536855itb.130.2019.05.07.08.17.13 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:17:13 -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 1hO1oh-0007fl-I9; Tue, 07 May 2019 15:15:39 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hO1og-0007e8-4p for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:38 +0000 X-Inumbo-ID: f6865222-70da-11e9-843c-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id f6865222-70da-11e9-843c-bc764e045a96; Tue, 07 May 2019 15:15:35 +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 2AAA0374; Tue, 7 May 2019 08:15:35 -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 E71E33F5AF; Tue, 7 May 2019 08:15:32 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:57 +0100 Message-Id: <20190507151458.29350-14-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 13/14] xen/mm: Convert {s, g}et_gpfn_from_mfn() to use typesafe MFN 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: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Julien Grall , Tamas K Lengyel , 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" The first parameter of {s,g}et_gpfn_from_mfn() is an MFN, so it can be switched to use the typesafe. At the same time, replace gpfn with pfn in the helpers as they all deal with PFN and also turn the macros to static inline. Note that the return of the getter and the 2nd parameter of the setter have not been converted to use typesafe PFN because it was requiring more changes than expected. Signed-off-by: Julien Grall Acked-by: Tamas K Lengyel Acked-by: Stefano Stabellini Acked-by: George Dunlap --- Changes in v2: - Patch added --- xen/arch/x86/cpu/mcheck/mcaction.c | 2 +- xen/arch/x86/mm.c | 14 ++++---- xen/arch/x86/mm/mem_sharing.c | 19 +++++------ xen/arch/x86/mm/p2m-pod.c | 4 +-- xen/arch/x86/mm/p2m-pt.c | 37 ++++++++++----------- xen/arch/x86/mm/p2m.c | 66 +++++++++++++++++++------------------- xen/arch/x86/mm/paging.c | 4 +-- xen/arch/x86/pv/dom0_build.c | 6 ++-- xen/arch/x86/x86_64/traps.c | 41 +++++++++++------------ xen/common/memory.c | 2 +- xen/common/page_alloc.c | 2 +- xen/include/asm-arm/mm.h | 2 +- xen/include/asm-x86/grant_table.h | 2 +- xen/include/asm-x86/mm.h | 16 +++++---- xen/include/asm-x86/p2m.h | 2 +- 15 files changed, 113 insertions(+), 106 deletions(-) diff --git a/xen/arch/x86/cpu/mcheck/mcaction.c b/xen/arch/x86/cpu/mcheck/mcaction.c index 69332fb84d..5e78fb7703 100644 --- a/xen/arch/x86/cpu/mcheck/mcaction.c +++ b/xen/arch/x86/cpu/mcheck/mcaction.c @@ -89,7 +89,7 @@ mc_memerr_dhandler(struct mca_binfo *binfo, { d = get_domain_by_id(bank->mc_domid); ASSERT(d); - gfn = get_gpfn_from_mfn((bank->mc_addr) >> PAGE_SHIFT); + gfn = get_pfn_from_mfn(maddr_to_mfn(bank->mc_addr)); if ( unmmap_broken_page(d, mfn, gfn) ) { diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 7d887f2699..60c47582be 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -502,7 +502,7 @@ void share_xen_page_with_guest(struct page_info *page, struct domain *d, if ( page_get_owner(page) == d ) return; - set_gpfn_from_mfn(mfn_x(page_to_mfn(page)), INVALID_M2P_ENTRY); + set_pfn_from_mfn(page_to_mfn(page), INVALID_M2P_ENTRY); spin_lock(&d->page_alloc_lock); @@ -1077,7 +1077,7 @@ get_page_from_l1e( gdprintk(XENLOG_WARNING, "Error updating mappings for mfn %" PRI_mfn " (pfn %" PRI_pfn ", from L1 entry %" PRIpte ") for d%d\n", - mfn, get_gpfn_from_mfn(mfn), + mfn, get_pfn_from_mfn(_mfn(mfn)), l1e_get_intpte(l1e), l1e_owner->domain_id); return err; } @@ -1088,7 +1088,7 @@ get_page_from_l1e( could_not_pin: gdprintk(XENLOG_WARNING, "Error getting mfn %" PRI_mfn " (pfn %" PRI_pfn ") from L1 entry %" PRIpte " for l1e_owner d%d, pg_owner d%d\n", - mfn, get_gpfn_from_mfn(mfn), + mfn, get_pfn_from_mfn(_mfn(mfn)), l1e_get_intpte(l1e), l1e_owner->domain_id, pg_owner->domain_id); if ( real_pg_owner != NULL ) put_page(page); @@ -2604,7 +2604,7 @@ static int alloc_page_type(struct page_info *page, unsigned long type, " (pfn %" PRI_pfn ") for type %" PRtype_info ": caf=%08lx taf=%" PRtype_info "\n", mfn_x(page_to_mfn(page)), - get_gpfn_from_mfn(mfn_x(page_to_mfn(page))), + get_pfn_from_mfn(page_to_mfn(page)), type, page->count_info, page->u.inuse.type_info); if ( page != current->arch.old_guest_table ) page->u.inuse.type_info = 0; @@ -2890,7 +2890,7 @@ static int _get_page_type(struct page_info *page, unsigned long type, "Bad type (saw %" PRtype_info " != exp %" PRtype_info ") " "for mfn %" PRI_mfn " (pfn %" PRI_pfn ")\n", x, type, mfn_x(page_to_mfn(page)), - get_gpfn_from_mfn(mfn_x(page_to_mfn(page)))); + get_pfn_from_mfn(page_to_mfn(page))); return -EINVAL; } else if ( unlikely(!(x & PGT_validated)) ) @@ -4002,7 +4002,7 @@ long do_mmu_update( break; } - set_gpfn_from_mfn(mfn_x(mfn), gpfn); + set_pfn_from_mfn(mfn, gpfn); paging_mark_pfn_dirty(pg_owner, _pfn(gpfn)); put_page(page); @@ -4529,7 +4529,7 @@ int xenmem_add_to_physmap_one( goto put_both; /* Unmap from old location, if any. */ - old_gpfn = get_gpfn_from_mfn(mfn_x(mfn)); + old_gpfn = get_pfn_from_mfn(mfn); ASSERT(!SHARED_M2P(old_gpfn)); if ( space == XENMAPSPACE_gmfn && old_gpfn != gfn ) { diff --git a/xen/arch/x86/mm/mem_sharing.c b/xen/arch/x86/mm/mem_sharing.c index 5ac9d8f54c..af903c11e9 100644 --- a/xen/arch/x86/mm/mem_sharing.c +++ b/xen/arch/x86/mm/mem_sharing.c @@ -391,11 +391,12 @@ static inline void mem_sharing_gfn_destroy(struct page_info *page, xfree(gfn_info); } -static struct page_info* mem_sharing_lookup(unsigned long mfn) +static struct page_info* mem_sharing_lookup(mfn_t mfn) { - if ( mfn_valid(_mfn(mfn)) ) + if ( mfn_valid(mfn) ) { - struct page_info* page = mfn_to_page(_mfn(mfn)); + struct page_info* page = mfn_to_page(mfn); + if ( page_get_owner(page) == dom_cow ) { /* Count has to be at least two, because we're called @@ -404,7 +405,7 @@ static struct page_info* mem_sharing_lookup(unsigned long mfn) unsigned long t = read_atomic(&page->u.inuse.type_info); ASSERT((t & PGT_type_mask) == PGT_shared_page); ASSERT((t & PGT_count_mask) >= 2); - ASSERT(SHARED_M2P(get_gpfn_from_mfn(mfn))); + ASSERT(SHARED_M2P(get_pfn_from_mfn(mfn))); return page; } } @@ -464,10 +465,10 @@ static int audit(void) } /* Check the m2p entry */ - if ( !SHARED_M2P(get_gpfn_from_mfn(mfn_x(mfn))) ) + if ( !SHARED_M2P(get_pfn_from_mfn(mfn)) ) { MEM_SHARING_DEBUG("mfn %lx shared, but wrong m2p entry (%lx)!\n", - mfn_x(mfn), get_gpfn_from_mfn(mfn_x(mfn))); + mfn_x(mfn), get_pfn_from_mfn(mfn)); errors++; } @@ -693,7 +694,7 @@ static inline struct page_info *__grab_shared_page(mfn_t mfn) if ( !mem_sharing_page_lock(pg) ) return NULL; - if ( mem_sharing_lookup(mfn_x(mfn)) == NULL ) + if ( mem_sharing_lookup(mfn) == NULL ) { mem_sharing_page_unlock(pg); return NULL; @@ -877,7 +878,7 @@ static int nominate_page(struct domain *d, gfn_t gfn, atomic_inc(&nr_shared_mfns); /* Update m2p entry to SHARED_M2P_ENTRY */ - set_gpfn_from_mfn(mfn_x(mfn), SHARED_M2P_ENTRY); + set_pfn_from_mfn(mfn, SHARED_M2P_ENTRY); *phandle = page->sharing->handle; audit_add_list(page); @@ -1222,7 +1223,7 @@ private_page_found: } /* Update m2p entry */ - set_gpfn_from_mfn(mfn_x(page_to_mfn(page)), gfn); + set_pfn_from_mfn(page_to_mfn(page), gfn); /* Now that the gfn<->mfn map is properly established, * marking dirty is feasible */ diff --git a/xen/arch/x86/mm/p2m-pod.c b/xen/arch/x86/mm/p2m-pod.c index 4313863066..9e001738f4 100644 --- a/xen/arch/x86/mm/p2m-pod.c +++ b/xen/arch/x86/mm/p2m-pod.c @@ -652,7 +652,7 @@ p2m_pod_decrease_reservation(struct domain *d, gfn_t gfn, unsigned int order) } p2m_tlb_flush_sync(p2m); for ( j = 0; j < n; ++j ) - set_gpfn_from_mfn(mfn_x(mfn), INVALID_M2P_ENTRY); + set_pfn_from_mfn(mfn, INVALID_M2P_ENTRY); p2m_pod_cache_add(p2m, page, cur_order); steal_for_cache = ( p2m->pod.entry_count > p2m->pod.count ); @@ -1203,7 +1203,7 @@ p2m_pod_demand_populate(struct p2m_domain *p2m, gfn_t gfn, for( i = 0; i < (1UL << order); i++ ) { - set_gpfn_from_mfn(mfn_x(mfn) + i, gfn_x(gfn_aligned) + i); + set_pfn_from_mfn(mfn_add(mfn, i), gfn_x(gfn_aligned) + i); paging_mark_pfn_dirty(d, _pfn(gfn_x(gfn_aligned) + i)); } diff --git a/xen/arch/x86/mm/p2m-pt.c b/xen/arch/x86/mm/p2m-pt.c index cafc9f299b..0e85819f9b 100644 --- a/xen/arch/x86/mm/p2m-pt.c +++ b/xen/arch/x86/mm/p2m-pt.c @@ -991,7 +991,8 @@ static int p2m_pt_change_entry_type_range(struct p2m_domain *p2m, long p2m_pt_audit_p2m(struct p2m_domain *p2m) { unsigned long entry_count = 0, pmbad = 0; - unsigned long mfn, gfn, m2pfn; + unsigned long gfn, m2pfn; + mfn_t mfn; ASSERT(p2m_locked_by_me(p2m)); ASSERT(pod_locked_by_me(p2m)); @@ -1030,19 +1031,19 @@ long p2m_pt_audit_p2m(struct p2m_domain *p2m) /* check for 1GB super page */ if ( l3e_get_flags(l3e[i3]) & _PAGE_PSE ) { - mfn = l3e_get_pfn(l3e[i3]); - ASSERT(mfn_valid(_mfn(mfn))); + mfn = l3e_get_mfn(l3e[i3]); + ASSERT(mfn_valid(mfn)); /* we have to cover 512x512 4K pages */ for ( i2 = 0; i2 < (L2_PAGETABLE_ENTRIES * L1_PAGETABLE_ENTRIES); i2++) { - m2pfn = get_gpfn_from_mfn(mfn+i2); + m2pfn = get_pfn_from_mfn(mfn_add(mfn, i2)); if ( m2pfn != (gfn + i2) ) { pmbad++; - P2M_PRINTK("mismatch: gfn %#lx -> mfn %#lx" - " -> gfn %#lx\n", gfn+i2, mfn+i2, + P2M_PRINTK("mismatch: gfn %#lx -> mfn %"PRI_mfn" gfn %#lx\n", + gfn + i2, mfn_x(mfn_add(mfn, i2)), m2pfn); BUG(); } @@ -1067,17 +1068,17 @@ long p2m_pt_audit_p2m(struct p2m_domain *p2m) /* check for super page */ if ( l2e_get_flags(l2e[i2]) & _PAGE_PSE ) { - mfn = l2e_get_pfn(l2e[i2]); - ASSERT(mfn_valid(_mfn(mfn))); + mfn = l2e_get_mfn(l2e[i2]); + ASSERT(mfn_valid(mfn)); for ( i1 = 0; i1 < L1_PAGETABLE_ENTRIES; i1++) { - m2pfn = get_gpfn_from_mfn(mfn+i1); + m2pfn = get_pfn_from_mfn(mfn_add(mfn, i1)); /* Allow shared M2Ps */ if ( (m2pfn != (gfn + i1)) && !SHARED_M2P(m2pfn) ) { pmbad++; - P2M_PRINTK("mismatch: gfn %#lx -> mfn %#lx" - " -> gfn %#lx\n", gfn+i1, mfn+i1, + P2M_PRINTK("mismatch: gfn %#lx -> mfn %"PRI_mfn" -> gfn %#lx\n", + gfn + i1, mfn_x(mfn_add(mfn, i1)), m2pfn); BUG(); } @@ -1099,19 +1100,19 @@ long p2m_pt_audit_p2m(struct p2m_domain *p2m) entry_count++; continue; } - mfn = l1e_get_pfn(l1e[i1]); - ASSERT(mfn_valid(_mfn(mfn))); - m2pfn = get_gpfn_from_mfn(mfn); + mfn = l1e_get_mfn(l1e[i1]); + ASSERT(mfn_valid(mfn)); + m2pfn = get_pfn_from_mfn(mfn); if ( m2pfn != gfn && type != p2m_mmio_direct && !p2m_is_grant(type) && !p2m_is_shared(type) ) { pmbad++; - printk("mismatch: gfn %#lx -> mfn %#lx" - " -> gfn %#lx\n", gfn, mfn, m2pfn); - P2M_PRINTK("mismatch: gfn %#lx -> mfn %#lx" - " -> gfn %#lx\n", gfn, mfn, m2pfn); + printk("mismatch: gfn %#lx -> mfn %"PRI_mfn" -> gfn %#lx\n", + gfn, mfn_x(mfn), m2pfn); + P2M_PRINTK("mismatch: gfn %#lx -> mfn %"PRI_mfn" -> gfn %#lx\n", + gfn, mfn_x(mfn), m2pfn); BUG(); } } diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index 3c98f72dbb..003ed97521 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -769,7 +769,7 @@ void p2m_final_teardown(struct domain *d) static int -p2m_remove_page(struct p2m_domain *p2m, unsigned long gfn_l, unsigned long mfn, +p2m_remove_page(struct p2m_domain *p2m, unsigned long gfn_l, mfn_t mfn, unsigned int page_order) { unsigned long i; @@ -783,17 +783,17 @@ p2m_remove_page(struct p2m_domain *p2m, unsigned long gfn_l, unsigned long mfn, return 0; ASSERT(gfn_locked_by_me(p2m, gfn)); - P2M_DEBUG("removing gfn=%#lx mfn=%#lx\n", gfn_l, mfn); + P2M_DEBUG("removing gfn=%#lx mfn=%"PRI_mfn"\n", gfn_l, mfn_x(mfn)); - if ( mfn_valid(_mfn(mfn)) ) + if ( mfn_valid(mfn) ) { for ( i = 0; i < (1UL << page_order); i++ ) { mfn_return = p2m->get_entry(p2m, gfn_add(gfn, i), &t, &a, 0, NULL, NULL); if ( !p2m_is_grant(t) && !p2m_is_shared(t) && !p2m_is_foreign(t) ) - set_gpfn_from_mfn(mfn+i, INVALID_M2P_ENTRY); - ASSERT( !p2m_is_valid(t) || mfn + i == mfn_x(mfn_return) ); + set_pfn_from_mfn(mfn_add(mfn, i), INVALID_M2P_ENTRY); + ASSERT( !p2m_is_valid(t) || mfn_eq(mfn_add(mfn, i), mfn_return) ); } } return p2m_set_entry(p2m, gfn, INVALID_MFN, page_order, p2m_invalid, @@ -807,7 +807,7 @@ guest_physmap_remove_page(struct domain *d, gfn_t gfn, struct p2m_domain *p2m = p2m_get_hostp2m(d); int rc; gfn_lock(p2m, gfn, page_order); - rc = p2m_remove_page(p2m, gfn_x(gfn), mfn_x(mfn), page_order); + rc = p2m_remove_page(p2m, gfn_x(gfn), mfn, page_order); gfn_unlock(p2m, gfn, page_order); return rc; } @@ -908,7 +908,7 @@ guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, else if ( p2m_is_ram(ot) && !p2m_is_paged(ot) ) { ASSERT(mfn_valid(omfn)); - set_gpfn_from_mfn(mfn_x(omfn), INVALID_M2P_ENTRY); + set_pfn_from_mfn(omfn, INVALID_M2P_ENTRY); } else if ( ot == p2m_populate_on_demand ) { @@ -951,7 +951,7 @@ guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, P2M_DEBUG("old gfn=%#lx -> mfn %#lx\n", gfn_x(ogfn) , mfn_x(omfn)); if ( mfn_eq(omfn, mfn_add(mfn, i)) ) - p2m_remove_page(p2m, gfn_x(ogfn), mfn_x(mfn_add(mfn, i)), + p2m_remove_page(p2m, gfn_x(ogfn), mfn_add(mfn, i), 0); } } @@ -968,8 +968,8 @@ guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, if ( !p2m_is_grant(t) ) { for ( i = 0; i < (1UL << page_order); i++ ) - set_gpfn_from_mfn(mfn_x(mfn_add(mfn, i)), - gfn_x(gfn_add(gfn, i))); + set_pfn_from_mfn(mfn_add(mfn, i), + gfn_x(gfn_add(gfn, i))); } } else @@ -1272,7 +1272,7 @@ static int set_typed_p2m_entry(struct domain *d, unsigned long gfn_l, for ( i = 0; i < (1UL << order); ++i ) { ASSERT(mfn_valid(mfn_add(omfn, i))); - set_gpfn_from_mfn(mfn_x(omfn) + i, INVALID_M2P_ENTRY); + set_pfn_from_mfn(mfn_add(omfn, i), INVALID_M2P_ENTRY); } } @@ -1467,7 +1467,7 @@ int set_shared_p2m_entry(struct domain *d, unsigned long gfn_l, mfn_t mfn) pg_type = read_atomic(&(mfn_to_page(omfn)->u.inuse.type_info)); if ( (pg_type & PGT_count_mask) == 0 || (pg_type & PGT_type_mask) != PGT_shared_page ) - set_gpfn_from_mfn(mfn_x(omfn), INVALID_M2P_ENTRY); + set_pfn_from_mfn(omfn, INVALID_M2P_ENTRY); P2M_DEBUG("set shared %lx %lx\n", gfn_l, mfn_x(mfn)); rc = p2m_set_entry(p2m, gfn, mfn, PAGE_ORDER_4K, p2m_ram_shared, @@ -1821,7 +1821,7 @@ int p2m_mem_paging_prep(struct domain *d, unsigned long gfn_l, uint64_t buffer) ret = p2m_set_entry(p2m, gfn, mfn, PAGE_ORDER_4K, paging_mode_log_dirty(d) ? p2m_ram_logdirty : p2m_ram_rw, a); - set_gpfn_from_mfn(mfn_x(mfn), gfn_l); + set_pfn_from_mfn(mfn, gfn_l); if ( !page_extant ) atomic_dec(&d->paged_pages); @@ -1872,7 +1872,7 @@ void p2m_mem_paging_resume(struct domain *d, vm_event_response_t *rsp) p2m_ram_rw, a); if ( !rc ) - set_gpfn_from_mfn(mfn_x(mfn), gfn_x(gfn)); + set_pfn_from_mfn(mfn, gfn_x(gfn)); } gfn_unlock(p2m, gfn, 0); } @@ -2635,7 +2635,7 @@ int p2m_change_altp2m_gfn(struct domain *d, unsigned int idx, 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); + p2m_remove_page(ap2m, gfn_x(old_gfn), mfn, PAGE_ORDER_4K); rc = 0; goto out; } @@ -2772,8 +2772,8 @@ void audit_p2m(struct domain *d, { struct page_info *page; struct domain *od; - unsigned long mfn, gfn; - mfn_t p2mfn; + unsigned long gfn; + mfn_t p2mfn, mfn; unsigned long orphans_count = 0, mpbad = 0, pmbad = 0; p2m_access_t p2ma; p2m_type_t type; @@ -2795,54 +2795,54 @@ void audit_p2m(struct domain *d, spin_lock(&d->page_alloc_lock); page_list_for_each ( page, &d->page_list ) { - mfn = mfn_x(page_to_mfn(page)); + mfn = page_to_mfn(page); - P2M_PRINTK("auditing guest page, mfn=%#lx\n", mfn); + P2M_PRINTK("auditing guest page, mfn=%"PRI_mfn"\n", mfn_x(mfn)); od = page_get_owner(page); if ( od != d ) { - P2M_PRINTK("wrong owner %#lx -> %p(%u) != %p(%u)\n", - mfn, od, (od?od->domain_id:-1), d, d->domain_id); + P2M_PRINTK("wrong owner %"PRI_mfn" -> %p(%u) != %p(%u)\n", + mfn_x(mfn), od, (od?od->domain_id:-1), d, d->domain_id); continue; } - gfn = get_gpfn_from_mfn(mfn); + gfn = get_pfn_from_mfn(mfn); if ( gfn == INVALID_M2P_ENTRY ) { orphans_count++; - P2M_PRINTK("orphaned guest page: mfn=%#lx has invalid gfn\n", - mfn); + P2M_PRINTK("orphaned guest page: mfn=%"PRI_mfn" has invalid gfn\n", + mfn_x(mfn)); continue; } if ( SHARED_M2P(gfn) ) { - P2M_PRINTK("shared mfn (%lx) on domain page list!\n", - mfn); + P2M_PRINTK("shared mfn (%"PRI_mfn") on domain page list!\n", + mfn_x(mfn)); continue; } p2mfn = get_gfn_type_access(p2m, gfn, &type, &p2ma, 0, NULL); - if ( mfn_x(p2mfn) != mfn ) + if ( !mfn_eq(p2mfn, mfn) ) { mpbad++; - P2M_PRINTK("map mismatch mfn %#lx -> gfn %#lx -> mfn %#lx" + P2M_PRINTK("map mismatch mfn %"PRI_mfn" -> gfn %#lx -> mfn %"PRI_mfn"" " (-> gfn %#lx)\n", - mfn, gfn, mfn_x(p2mfn), + mfn_x(mfn), gfn, mfn_x(p2mfn), (mfn_valid(p2mfn) - ? get_gpfn_from_mfn(mfn_x(p2mfn)) + ? get_pfn_from_mfn(p2mfn) : -1u)); /* This m2p entry is stale: the domain has another frame in * this physical slot. No great disaster, but for neatness, * blow away the m2p entry. */ - set_gpfn_from_mfn(mfn, INVALID_M2P_ENTRY); + set_pfn_from_mfn(mfn, INVALID_M2P_ENTRY); } __put_gfn(p2m, gfn); - P2M_PRINTK("OK: mfn=%#lx, gfn=%#lx, p2mfn=%#lx\n", - mfn, gfn, mfn_x(p2mfn)); + P2M_PRINTK("OK: mfn=%"PRI_mfn", gfn=%#lx, p2mfn=%"PRI_mfn"\n", + mfn_x(mfn), gfn, mfn_x(p2mfn)); } spin_unlock(&d->page_alloc_lock); diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c index 9b0f268e74..cef2f90186 100644 --- a/xen/arch/x86/mm/paging.c +++ b/xen/arch/x86/mm/paging.c @@ -344,7 +344,7 @@ void paging_mark_dirty(struct domain *d, mfn_t gmfn) return; /* We /really/ mean PFN here, even for non-translated guests. */ - pfn = _pfn(get_gpfn_from_mfn(mfn_x(gmfn))); + pfn = _pfn(get_pfn_from_mfn(gmfn)); paging_mark_pfn_dirty(d, pfn); } @@ -362,7 +362,7 @@ int paging_mfn_is_dirty(struct domain *d, mfn_t gmfn) ASSERT(paging_mode_log_dirty(d)); /* We /really/ mean PFN here, even for non-translated guests. */ - pfn = _pfn(get_gpfn_from_mfn(mfn_x(gmfn))); + pfn = _pfn(get_pfn_from_mfn(gmfn)); /* Invalid pages can't be dirty. */ if ( unlikely(!VALID_M2P(pfn_x(pfn))) ) return 0; diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c index cef2d42254..b39ab67092 100644 --- a/xen/arch/x86/pv/dom0_build.c +++ b/xen/arch/x86/pv/dom0_build.c @@ -39,7 +39,7 @@ void __init dom0_update_physmap(struct domain *d, unsigned long pfn, else ((unsigned int *)vphysmap_s)[pfn] = mfn; - set_gpfn_from_mfn(mfn, pfn); + set_pfn_from_mfn(_mfn(mfn), pfn); } static __init void mark_pv_pt_pages_rdonly(struct domain *d, @@ -798,8 +798,8 @@ int __init dom0_construct_pv(struct domain *d, page_list_for_each ( page, &d->page_list ) { mfn = mfn_x(page_to_mfn(page)); - BUG_ON(SHARED_M2P(get_gpfn_from_mfn(mfn))); - if ( get_gpfn_from_mfn(mfn) >= count ) + BUG_ON(SHARED_M2P(get_pfn_from_mfn(_mfn(mfn)))); + if ( get_pfn_from_mfn(_mfn(mfn)) >= count ) { BUG_ON(is_pv_32bit_domain(d)); if ( !page->u.inuse.type_info && diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c index 44af765e3e..f80f2250fe 100644 --- a/xen/arch/x86/x86_64/traps.c +++ b/xen/arch/x86/x86_64/traps.c @@ -184,7 +184,8 @@ void vcpu_show_registers(const struct vcpu *v) void show_page_walk(unsigned long addr) { - unsigned long pfn, mfn = read_cr3() >> PAGE_SHIFT; + unsigned long pfn; + mfn_t mfn = maddr_to_mfn(read_cr3()); l4_pgentry_t l4e, *l4t; l3_pgentry_t l3e, *l3t; l2_pgentry_t l2e, *l2t; @@ -194,52 +195,52 @@ void show_page_walk(unsigned long addr) if ( !is_canonical_address(addr) ) return; - l4t = map_domain_page(_mfn(mfn)); + l4t = map_domain_page(mfn); l4e = l4t[l4_table_offset(addr)]; unmap_domain_page(l4t); - mfn = l4e_get_pfn(l4e); - pfn = mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? - get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; + mfn = l4e_get_mfn(l4e); + pfn = mfn_valid(mfn) && machine_to_phys_mapping_valid ? + get_pfn_from_mfn(mfn) : INVALID_M2P_ENTRY; printk(" L4[0x%03lx] = %"PRIpte" %016lx\n", l4_table_offset(addr), l4e_get_intpte(l4e), pfn); if ( !(l4e_get_flags(l4e) & _PAGE_PRESENT) || - !mfn_valid(_mfn(mfn)) ) + !mfn_valid(mfn) ) return; - l3t = map_domain_page(_mfn(mfn)); + l3t = map_domain_page(mfn); l3e = l3t[l3_table_offset(addr)]; unmap_domain_page(l3t); - mfn = l3e_get_pfn(l3e); - pfn = mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? - get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; + mfn = l3e_get_mfn(l3e); + pfn = mfn_valid(mfn) && machine_to_phys_mapping_valid ? + get_pfn_from_mfn(mfn) : INVALID_M2P_ENTRY; printk(" L3[0x%03lx] = %"PRIpte" %016lx%s\n", l3_table_offset(addr), l3e_get_intpte(l3e), pfn, (l3e_get_flags(l3e) & _PAGE_PSE) ? " (PSE)" : ""); if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) || (l3e_get_flags(l3e) & _PAGE_PSE) || - !mfn_valid(_mfn(mfn)) ) + !mfn_valid(mfn) ) return; - l2t = map_domain_page(_mfn(mfn)); + l2t = map_domain_page(mfn); l2e = l2t[l2_table_offset(addr)]; unmap_domain_page(l2t); - mfn = l2e_get_pfn(l2e); - pfn = mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? - get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; + mfn = l2e_get_mfn(l2e); + pfn = mfn_valid(mfn) && machine_to_phys_mapping_valid ? + get_pfn_from_mfn(mfn) : INVALID_M2P_ENTRY; printk(" L2[0x%03lx] = %"PRIpte" %016lx%s\n", l2_table_offset(addr), l2e_get_intpte(l2e), pfn, (l2e_get_flags(l2e) & _PAGE_PSE) ? " (PSE)" : ""); if ( !(l2e_get_flags(l2e) & _PAGE_PRESENT) || (l2e_get_flags(l2e) & _PAGE_PSE) || - !mfn_valid(_mfn(mfn)) ) + !mfn_valid(mfn) ) return; - l1t = map_domain_page(_mfn(mfn)); + l1t = map_domain_page(mfn); l1e = l1t[l1_table_offset(addr)]; unmap_domain_page(l1t); - mfn = l1e_get_pfn(l1e); - pfn = mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? - get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; + mfn = l1e_get_mfn(l1e); + pfn = mfn_valid(mfn) && machine_to_phys_mapping_valid ? + get_pfn_from_mfn(mfn) : INVALID_M2P_ENTRY; printk(" L1[0x%03lx] = %"PRIpte" %016lx\n", l1_table_offset(addr), l1e_get_intpte(l1e), pfn); } diff --git a/xen/common/memory.c b/xen/common/memory.c index d6a580da31..eecc9671ff 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -273,7 +273,7 @@ static void populate_physmap(struct memop_args *a) if ( !paging_mode_translate(d) ) { for ( j = 0; j < (1U << a->extent_order); j++ ) - set_gpfn_from_mfn(mfn_x(mfn_add(mfn, j)), gpfn + j); + set_pfn_from_mfn(mfn_add(mfn, j), gpfn + j); /* Inform the domain of the new page's machine address. */ if ( unlikely(__copy_mfn_to_guest_offset(a->extent_list, i, diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index 6061cce24f..a100e03e2e 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -1424,7 +1424,7 @@ static void free_heap_pages( /* This page is not a guest frame any more. */ page_set_owner(&pg[i], NULL); /* set_gpfn_from_mfn snoops pg owner */ - set_gpfn_from_mfn(mfn_x(mfn) + i, INVALID_M2P_ENTRY); + set_pfn_from_mfn(mfn_add(mfn, + i), INVALID_M2P_ENTRY); if ( need_scrub ) { diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h index a9cb98a6c7..3c03be3bca 100644 --- a/xen/include/asm-arm/mm.h +++ b/xen/include/asm-arm/mm.h @@ -322,7 +322,7 @@ struct page_info *get_page_from_gva(struct vcpu *v, vaddr_t va, #define SHARED_M2P(_e) ((_e) == SHARED_M2P_ENTRY) /* We don't have a M2P on Arm */ -#define set_gpfn_from_mfn(mfn, pfn) do { (void) (mfn), (void)(pfn); } while (0) +static inline void set_pfn_from_mfn(mfn_t mfn, unsigned long pfn) {} /* Arch-specific portion of memory_op hypercall. */ long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg); diff --git a/xen/include/asm-x86/grant_table.h b/xen/include/asm-x86/grant_table.h index 661228dd39..d731b9e49f 100644 --- a/xen/include/asm-x86/grant_table.h +++ b/xen/include/asm-x86/grant_table.h @@ -41,7 +41,7 @@ static inline int replace_grant_host_mapping(uint64_t addr, mfn_t frame, #define gnttab_get_frame_gfn(gt, st, idx) ({ \ mfn_t mfn_ = (st) ? gnttab_status_mfn(gt, idx) \ : gnttab_shared_mfn(gt, idx); \ - unsigned long gpfn_ = get_gpfn_from_mfn(mfn_x(mfn_)); \ + unsigned long gpfn_ = get_pfn_from_mfn(mfn_); \ VALID_M2P(gpfn_) ? _gfn(gpfn_) : INVALID_GFN; \ }) diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h index 4721725c60..bce60619c3 100644 --- a/xen/include/asm-x86/mm.h +++ b/xen/include/asm-x86/mm.h @@ -492,22 +492,26 @@ extern struct domain *dom_xen, *dom_io, *dom_cow; /* for vmcoreinfo */ */ extern bool machine_to_phys_mapping_valid; -static inline void set_gpfn_from_mfn(unsigned long mfn, unsigned long pfn) +static inline void set_pfn_from_mfn(mfn_t mfn, unsigned long pfn) { - struct domain *d = page_get_owner(mfn_to_page(_mfn(mfn))); + const unsigned long mfn_ = mfn_x(mfn); + struct domain *d = page_get_owner(mfn_to_page(mfn)); unsigned long entry = (d && (d == dom_cow)) ? SHARED_M2P_ENTRY : pfn; if (!machine_to_phys_mapping_valid) return; - if ( mfn >= (RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) / 4 ) - compat_machine_to_phys_mapping[mfn] = entry; - machine_to_phys_mapping[mfn] = entry; + if ( mfn_ >= (RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) / 4 ) + compat_machine_to_phys_mapping[mfn_] = entry; + machine_to_phys_mapping[mfn_] = entry; } extern struct rangeset *mmio_ro_ranges; -#define get_gpfn_from_mfn(mfn) (machine_to_phys_mapping[(mfn)]) +static inline unsigned long get_pfn_from_mfn(mfn_t mfn) +{ + return machine_to_phys_mapping[mfn_x(mfn)]; +} #define compat_pfn_to_cr3(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >> 20)) #define compat_cr3_to_pfn(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) << 20)) diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index 0157568be9..07b7ec6db0 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -509,7 +509,7 @@ static inline struct page_info *get_page_from_gfn( static inline gfn_t mfn_to_gfn(const struct domain *d, mfn_t mfn) { if ( paging_mode_translate(d) ) - return _gfn(get_gpfn_from_mfn(mfn_x(mfn))); + return _gfn(get_pfn_from_mfn(mfn)); else return _gfn(mfn_x(mfn)); } From patchwork Tue May 7 15:14:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 163543 Delivered-To: patch@linaro.org Received: by 2002:ac9:2a84:0:0:0:0:0 with SMTP id p4csp3883275oca; Tue, 7 May 2019 08:16:56 -0700 (PDT) X-Google-Smtp-Source: APXvYqxsKOCEef3DW6mZYgEPM2B00EAWGreQot1xtKxGzClSstiog+woImDyKpz69i6HDZrAVyXL X-Received: by 2002:a24:ad5f:: with SMTP id a31mr25241075itj.55.1557242216226; Tue, 07 May 2019 08:16:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557242216; cv=none; d=google.com; s=arc-20160816; b=U+nUl7OofvfdE+1doOGYLbbJMMeMKMZW1fyXbjSyXV9cRtmBz5axA1F9+qTw/CJvo/ KWa7DIzUz4lsNMX+c4M43Cuys2PXWHWSZ6/5/bELw7jcFRy8y2PLfQPgkO2JArh/asuD EMFv4E3bBddDnFyDI5W/4drqkZ6G2d1nnCad4GgvsDekqU6C8ZQD7LBYX0NEgeugI20v bH9uquhbwODzW4wmUL1UpgHHupqP8KlQmZ6Feur7PdYaCFr0uu7iF650pDbrROSef68h 4QmL3Cj8uNsn51RwrKBN7+EcxuJrS72wZxt8jfL+wF4opNGYBDAx55Wkty1dfub4Dde0 Cvkw== 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=681a4adC5CTLiCzO2hu687VZZRL1HXcwjCCzbYicz0Q=; b=OgpJ1FA+Njxea2xplRv8m+LOJPUShV/V8GRSm1ijUQhTbE3FzrVUWtJy5qNravirdO vemBTt8xfBqnpBlsLBhbUWUClnmMapMztVz0sKHv4z/WfZzrTN+94Ju3OYWTMVRM0j8S 8HKbUDxgL3+a3poRWJZDc6b8TYYHEvmB6HbFD9/rEvHeDl4FS8w9/bwus5mUWlGt/E+7 Zm3P/SfhFjxKaUPMCZXBV2wrwOwXRgkMSi0bhoCLnrsrOHD/F9YK6/QoVstk5OHD38dV Ae14YGpg8r89vhpnqjMtiPNGPNoYmKR8OMV2lQmHkW9v98ZmzmGI28D+75OjodUPI56b PKpQ== 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 w82si10377471itb.0.2019.05.07.08.16.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 May 2019 08:16:56 -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 1hO1oi-0007gP-1p; Tue, 07 May 2019 15:15:40 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hO1og-0007en-O7 for xen-devel@lists.xenproject.org; Tue, 07 May 2019 15:15:38 +0000 X-Inumbo-ID: f7c8fccb-70da-11e9-843c-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id f7c8fccb-70da-11e9-843c-bc764e045a96; Tue, 07 May 2019 15:15:37 +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 3879FEBD; Tue, 7 May 2019 08:15:37 -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 6A03A3F5AF; Tue, 7 May 2019 08:15:35 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 7 May 2019 16:14:58 +0100 Message-Id: <20190507151458.29350-15-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190507151458.29350-1-julien.grall@arm.com> References: <20190507151458.29350-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 14/14] xen/mm: Provide dummy M2P-related helpers when !CONFIG_HAVE_M2P 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: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Julien Grall , Jan Beulich MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" At the moment, Arm is providing a dummy implementation for the M2P helpers used in common code. However, they are quite isolated and could be used by other architecture in the future. So move all the helpers in xen/mm.h. Signed-off-by: Julien Grall Reviewed-by: Stefano Stabellini Acked-by: George Dunlap --- Changes in v2: - Patch added --- xen/include/asm-arm/mm.h | 11 ----------- xen/include/xen/mm.h | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h index 3c03be3bca..d68d1794e5 100644 --- a/xen/include/asm-arm/mm.h +++ b/xen/include/asm-arm/mm.h @@ -313,17 +313,6 @@ static inline void *page_to_virt(const struct page_info *pg) struct page_info *get_page_from_gva(struct vcpu *v, vaddr_t va, unsigned long flags); -/* - * Arm does not have an M2P, but common code expects a handful of - * M2P-related defines and functions. Provide dummy versions of these. - */ -#define INVALID_M2P_ENTRY (~0UL) -#define SHARED_M2P_ENTRY (~0UL - 1UL) -#define SHARED_M2P(_e) ((_e) == SHARED_M2P_ENTRY) - -/* We don't have a M2P on Arm */ -static inline void set_pfn_from_mfn(mfn_t mfn, unsigned long pfn) {} - /* Arch-specific portion of memory_op hypercall. */ long arch_memory_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg); diff --git a/xen/include/xen/mm.h b/xen/include/xen/mm.h index 3ba7168cc9..07d2d44491 100644 --- a/xen/include/xen/mm.h +++ b/xen/include/xen/mm.h @@ -658,4 +658,18 @@ static inline void share_xen_page_with_privileged_guests( share_xen_page_with_guest(page, dom_xen, flags); } +/* + * Dummy implementation of M2P-related helpers for common code when + * the architecture doesn't have an M2P. + */ +#ifndef CONFIG_HAS_M2P + +#define INVALID_M2P_ENTRY (~0UL) +#define SHARED_M2P_ENTRY (~0UL - 1UL) +#define SHARED_M2P(_e) ((_e) == SHARED_M2P_ENTRY) + +static inline void set_pfn_from_mfn(mfn_t mfn, unsigned long pfn) {} + +#endif + #endif /* __XEN_MM_H__ */