From nobody Mon Mar 23 21:29:22 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1774283516; cv=none; d=zohomail.com; s=zohoarc; b=NxAbzmxvUo3rJPuWKDjwpGUnn+Oz/dQQQs/KxsPPOyAssQ4MkT0I12Kqted/ZS/JYrlEEA4e+biC9wqDLm/STPA5YvLyCnkyMfKn4K893TCBaWxrNgekNCDl3A9kvATeHHkO8kQm0AbzyvBP/ITcp6IvfQ4/fYal9YUkipKoHsk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774283516; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zE/rD5OgNgJkWO/wss6LPCSbET9QBlr+zsTkckbS38c=; b=d4bajGyojNpEZMAq/3TIWQNkcS9gZChi1NQb1InY0YuG1e3Bsv2m/cY8Gk1imMYivxPoh/EfnS5+/FXhq33/q6a5uc8YnUgc6S3yrT7MhK4b7J0mbLZ/3WzcgrFEVsOcalvm8/aZHgFMpA7ioUGfdtQykJeCGG0K81NBjV72C9c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 177428351622726.109817436600792; Mon, 23 Mar 2026 09:31:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1259487.1552815 (Exim 4.92) (envelope-from ) id 1w4iBp-0008VJ-Lf; Mon, 23 Mar 2026 16:31:41 +0000 Received: by outflank-mailman (output) from mailman id 1259487.1552815; Mon, 23 Mar 2026 16:31:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w4iBp-0008VC-If; Mon, 23 Mar 2026 16:31:41 +0000 Received: by outflank-mailman (input) for mailman id 1259487; Mon, 23 Mar 2026 16:31:40 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1w4iBo-0008TZ-JI for xen-devel@lists.xenproject.org; Mon, 23 Mar 2026 16:31:40 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1w4iBm-005v6Z-De for xen-devel@lists.xenproject.org; Mon, 23 Mar 2026 17:31:39 +0100 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69c16ae6-5cb7-0a2a0a5109dd-0a2a4501b08a-14 for ; Mon, 23 Mar 2026 17:31:39 +0100 Received: from [209.85.218.47] (helo=mail-ej1-f47.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.55.2) (envelope-from ) id 69c16aeb-6400-0a2a45010019-d155da2fa404-3 for ; Mon, 23 Mar 2026 17:31:39 +0100 Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-b93698bb57aso836110966b.0 for ; Mon, 23 Mar 2026 09:31:39 -0700 (PDT) Received: from fedora (user-109-243-69-121.play-internet.pl. [109.243.69.121]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b9832f8be14sm536248166b.17.2026.03.23.09.31.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 09:31:32 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20230601 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774283499; x=1774888299; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zE/rD5OgNgJkWO/wss6LPCSbET9QBlr+zsTkckbS38c=; b=VjRa8xur2kIBCZkDMDTb6+7pAb2SX5QydzqluAX+FFbmtyhsK4aEAxdiP1UvbTRx4X 1eMTMRPIckMdn7SAzUltiG2g+wCQNCFfi+xsslcaWC/Pm9twr1KdiLGho5wkN92K/TSb s5Rmv3e8CsYGpydT2TlLLxHAts+b54ovntazA6BOVILMQkURH29tqV5LTXpaKf9YbaAd mM3e4X5HkThrdoJK0by6RLO/6tRhmmiv+YVQ1dqi+RcDT90kK173RdVQGkPhT2imk4tN gj2nQoTmjgfevy1mzJRFewchpU8zU1e9mTMAECV8daDNuKMpBKBeYpfDAqwBvqPipWbD ct4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774283499; x=1774888299; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=zE/rD5OgNgJkWO/wss6LPCSbET9QBlr+zsTkckbS38c=; b=LbBg0vT4tk7aCk1Nhh++fkAEZYnLhSTJ+fQ9PPranJrR8qBwVndPd+wD3Hhwkq5Vtd XgX/4xuwLbY/qcakKttUZEmU7dncNnQr2v+2mjlHo3MhbQToo3h/Rxy0qQL7aB2Illfy 7W2YCaGKUBFW30RAeJ/URM1ZWHbLvNBiyKNcbb0u0yRRSl5TgYCWF5K8HP2nmhhv9Aqq fGLXFXdxWxANeHAS0OmUpOrqXHT81zsT6/W+0H10FjerQC3D8fPsuvBbTck+T6Be48Nw jqGHBBIJ08ngysuovFgNrjW8nnDGR82C7TsU2sy2ySGaUxB0iHZ0OTf48PpnRxpJDtEb GlxA== X-Gm-Message-State: AOJu0YzcTsFg1+o2Xv+oJpVx/NlMTJt02Jc4a9uaw/wBf3nNW+dQMMUK dfz9lYNTeXrLrsSNKsMZZ2osAEn1WwsDhQPdD6LSSmxALFTeys9GqdY3RDIDKQ== X-Gm-Gg: ATEYQzwO6gLDIBiMnSwdRr6lIY2V6cUaGy4rBgxf2ts0LXrfBGG44vRI3FUpUZtYkpI jfKs//8UsekrnUi5mA+tQK0JdaNV3dsPV+sOISQOIFvdVMA7yXoXbXZKOiq1SYYVfsML3FPswi2 M0fgKuk1fE34iMf43J5lHq+TIcT+9qnwWXHQsRPvv+jluxVcvm8vuL/Cqu08TWOSCMbbReXDnum 7zcV/uZfl8JNT7KEWE+g3RbWBsBKYvBICwv1KL7ovJnbiySSuaIc1wItD9uLZHIjd5MdThbPGML ePyj5KUcc7FpWM9Sxg9nATNabqs0YtTZl0VvwaalWP3V5I/Upomxvs3vbJpZn06tZC92/8tHxmu rIRIXY1m2bVKo0jui7ri9qufpMA77K+wXINLCcAqtln1aAJ42J4tQzKu+VXNMaj2VEARjst2Xx+ RMhC2yxhvIY3rb3F9/05An0hS+Zc6udeaUEUKWnbUGlL+oEBE5MYAtbQ9NG4wjsTH1rw== X-Received: by 2002:a17:906:7947:b0:b98:cfa:f54e with SMTP id a640c23a62f3a-b988632193dmr17738966b.12.1774283498891; Mon, 23 Mar 2026 09:31:38 -0700 (PDT) From: Oleksii Kurochko To: xen-devel@lists.xenproject.org Cc: Romain Caritey , Oleksii Kurochko , Alistair Francis , Connor Davis , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini Subject: [PATCH v2 09/11] xen/riscv: introduce p2m_gpa_bits Date: Mon, 23 Mar 2026 17:29:50 +0100 Message-ID: <775374eab7b9868b7cabe6c76fa1b7ac2f8466d8.1774281309.git.oleksii.kurochko@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-d62444/1774283499-8FEEADF3-39222399/0/0 X-purgate-type: clean X-purgate-size: 4473 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1774283517783158500 Content-Type: text/plain; charset="utf-8" p2m_gpa_bits is used by common/device-tree/domain-build.c thereby when CONFIG_DOMAIN_BUILD_HELPERS=3Dy it is necessary to have p2m_gpa_bits proper= ly defined as it is going to be used to find unused regions. Introduce default_gstage_mode to have ability to limit p2m_gpa_bits before p2m_init() is being called as it will be too late. Limit p2m_gpa_bits in guest_mm_init() as it could be that default G-stage MMU mode uses less VA wide bits than IOMMU, so p2m_gpa_bits should be restricted more so that dom0less code uses the correct GPA bits. Signed-off-by: Oleksii Kurochko --- Changes in v2: - New patch. --- xen/arch/riscv/include/asm/p2m.h | 10 ++++++++-- xen/arch/riscv/p2m.c | 34 ++++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/xen/arch/riscv/include/asm/p2m.h b/xen/arch/riscv/include/asm/= p2m.h index 54ea67990f06..76b30af8dacb 100644 --- a/xen/arch/riscv/include/asm/p2m.h +++ b/xen/arch/riscv/include/asm/p2m.h @@ -32,10 +32,13 @@ */ #define P2M_LEVEL_ORDER(lvl) XEN_PT_LEVEL_ORDER(lvl) =20 -#define P2M_ROOT_EXTRA_BITS(p2m, lvl) (2 * ((lvl) =3D=3D P2M_ROOT_LEVEL(p2= m))) +#define P2M_ROOT_EXTRA_BITS 2 + +#define P2M_LEVEL_EXTRA_BITS(p2m, lvl) \ + (P2M_ROOT_EXTRA_BITS * ((lvl) =3D=3D P2M_ROOT_LEVEL(p2m))) =20 #define P2M_PAGETABLE_ENTRIES(p2m, lvl) \ - (BIT(PAGETABLE_ORDER + P2M_ROOT_EXTRA_BITS(p2m, lvl), UL)) + (BIT(PAGETABLE_ORDER + P2M_LEVEL_EXTRA_BITS(p2m, lvl), UL)) =20 #define P2M_TABLE_OFFSET(p2m, lvl) (P2M_PAGETABLE_ENTRIES(p2m, lvl) - 1UL) =20 @@ -44,6 +47,9 @@ #define P2M_LEVEL_MASK(p2m, lvl) \ (P2M_TABLE_OFFSET(p2m, lvl) << P2M_GFN_LEVEL_SHIFT(lvl)) =20 +/* Holds the bit size of GPAs in p2m tables */ +extern unsigned int p2m_gpa_bits; + #define paddr_bits PADDR_BITS =20 /* Get host p2m table */ diff --git a/xen/arch/riscv/p2m.c b/xen/arch/riscv/p2m.c index 11beaeead5ac..cd682d6586c7 100644 --- a/xen/arch/riscv/p2m.c +++ b/xen/arch/riscv/p2m.c @@ -51,6 +51,24 @@ static struct gstage_mode_desc __ro_after_init max_gstag= e_mode =3D { .name =3D "Bare", }; =20 +static struct gstage_mode_desc __ro_after_init default_gstage_mode =3D { + .mode =3D HGATP_MODE_SV39X4, + .paging_levels =3D 2, + .name =3D "Sv39x4", +}; + +/* + * Set to the maximum configured support for GPA bits, so the number of GPA + * bits can be restricted by an external entity (e.g. IOMMU) and the + * restriction must happen before the call of guest_mm_init(). + * + * The widest G-stage mode defined by the RISC-V specification is Sv57x4, + * which yields 59-bit GPAs: Sv57 maps 57-bit VAs onto 56-bit PAs (PADDR_B= ITS), + * and the G-stage "x4" extension widens the address space by a further 2 = bits, + * hence PADDR_BITS + 1 + P2M_ROOT_EXTRA_BITS. + */ +unsigned int __ro_after_init p2m_gpa_bits =3D PADDR_BITS + P2M_ROOT_EXTRA_= BITS + 1; + static void p2m_free_page(struct p2m_domain *p2m, struct page_info *pg); =20 static inline void p2m_free_metadata_page(struct p2m_domain *p2m, @@ -191,8 +209,13 @@ static void __init gstage_mode_detect(void) =20 void __init guest_mm_init(void) { + unsigned int gpa_bits; + unsigned int paging_levels =3D default_gstage_mode.paging_levels; + gstage_mode_detect(); =20 + ASSERT(default_gstage_mode.paging_levels <=3D max_gstage_mode.paging_l= evels); + vmid_init(); =20 /* @@ -226,6 +249,11 @@ void __init guest_mm_init(void) * so it could be that we polluted local TLB so flush all guest TLB. */ local_hfence_gvma_all(); + + gpa_bits =3D P2M_GFN_LEVEL_SHIFT(paging_levels + 1) + P2M_ROOT_EXTRA_B= ITS; + + if ( gpa_bits < p2m_gpa_bits ) + p2m_gpa_bits =3D gpa_bits; } =20 /* @@ -363,9 +391,7 @@ int p2m_init(struct domain *d) #endif =20 /* TODO: don't hardcode used for a domain g-stage mode. */ - p2m->mode.mode =3D HGATP_MODE_SV39X4; - p2m->mode.paging_levels =3D 2; - safe_strcpy(p2m->mode.name, "Sv39x4"); + p2m->mode =3D default_gstage_mode; =20 return 0; } @@ -1304,7 +1330,7 @@ static mfn_t p2m_get_entry(struct p2m_domain *p2m, gf= n_t gfn, { unsigned int level =3D P2M_ROOT_LEVEL(p2m); unsigned int gfn_limit_bits =3D - P2M_LEVEL_ORDER(level + 1) + P2M_ROOT_EXTRA_BITS(p2m, level); + P2M_LEVEL_ORDER(level + 1) + P2M_LEVEL_EXTRA_BITS(p2m, level); pte_t entry, *table; int rc; mfn_t mfn =3D INVALID_MFN; --=20 2.53.0