From nobody Mon Apr 13 00:05:42 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=1775836540; cv=none; d=zohomail.com; s=zohoarc; b=Y1Ox9TMM8F5lL2psiKsIvnMfCnKfsGhJG8ZWU64tBtMlgTXOxPPYunbwdwEajU58BSbot9zZ+FGrgY75yJ0HOy3N5nH8oqxf87u0egRxt7GyP7/jInzUs3/zKp4mitYlFWrEfid4cetFZ8qF4WiQXcFwwFZaPN+W8pF0dnQasrI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836540; 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=QlCZP54FVwoINVQH9AKDNs9Wb2jDgoF1x8rYbTHfdf8=; b=g2zTK/yS7KKYf75dSBUjT3F8jn4PXsl8wA345QKKunecHvcsabtAN6VD7XWvzYMNhvV3Cts6LPlSAvdeH/8XSnpoKU6Z9AfXc3Xp2TZbYL/su8POaqam6CHDF3YE6/jbn4fz6P0ytUQ5Z3qDkhD1F+ZtjtIIyg/6+X+mJQ7d6Lc= 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 1775836540374476.7456681314385; Fri, 10 Apr 2026 08:55:40 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279431.1563923 (Exim 4.92) (envelope-from ) id 1wBECb-0000vZ-EC; Fri, 10 Apr 2026 15:55:25 +0000 Received: by outflank-mailman (output) from mailman id 1279431.1563923; Fri, 10 Apr 2026 15:55:25 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECb-0000vF-9U; Fri, 10 Apr 2026 15:55:25 +0000 Received: by outflank-mailman (input) for mailman id 1279431; Fri, 10 Apr 2026 15:55:22 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECY-0000Lo-N5 for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:22 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECY-00Cgsb-32 for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:22 +0200 Received: from [10.42.69.8] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d5d-e002-0a2a0a5209dd-0a2a4508b042-30 for ; Fri, 10 Apr 2026 17:55:22 +0200 Received: from [209.85.128.43] (helo=mail-wm1-f43.google.com) by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d69-fab6-0a2a45080019-d155802bccf4-3 for ; Fri, 10 Apr 2026 17:55:22 +0200 Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-488971db0fdso21894035e9.0 for ; Fri, 10 Apr 2026 08:55:22 -0700 (PDT) Received: from fedora (user-109-243-69-121.play-internet.pl. [109.243.69.121]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-488d5b3c597sm78285605e9.12.2026.04.10.08.55.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:20 -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=20251104 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=20251104; t=1775836521; x=1776441321; 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=QlCZP54FVwoINVQH9AKDNs9Wb2jDgoF1x8rYbTHfdf8=; b=nkmlAG4FxYmyic2uTgNbvgnloBcv4lHIG4JfWv2Y8MiIxeuRlxdEx/v5LxGRmYZyN3 4kXsv81wvYapMexxFttt4QQzEdscvc9DfIr9myPUrxX1VLZIVnx7+nRdCQmh7h6F5aUy MGq+gJ/dHkmBT1app+vY0AdgmUEA2K8HE/fDBVqU5u7uJcLq/NuVZ/5qltndFkhg7VLe 6HVJpgmr6ukpVTxPOyzqPCglYigDVaeROjQElu8A81wjULMH851yQifbKul7ydNEE0fm eG+O1ncy/2iElyWJXG53mQojAXknOtSkrtXWy1R0M5RCTahfmNi4XlZ8wlZXyrSNq+jy hChw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836521; x=1776441321; 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=QlCZP54FVwoINVQH9AKDNs9Wb2jDgoF1x8rYbTHfdf8=; b=PiLIfSeRF50dSpoek8oA7qYk54D+yhqYGHiizR9PrhcL6MtS7BOF/fOqX0BCJsEKXb CGisXVB4snyRJhCI6841jnyCkPG1LniMvRb57X0tovHpfSeGWWrnBzkXV1xn8bliDIMS dtDuCltudwKl4BB7A2Mg+zKHKCrezqEdFb2dmLi43GuzWb4DplzpGwyeR0s+qm1E4GGd wt61C8f4dzkmaT3RMzVP/Ky4GFUppSk7ZIfds5AonImq5PC6qBpvpmd+lWj/YOsC1JaT HuEVuFWbE5XQlFT3HGN0yvroCrXP0rbP8HLyJQ1LK6hxfPEI525p3brdgVu+yZMVxUfT PH7g== X-Gm-Message-State: AOJu0YxifPvBrtjIcVuuCKxG3mXejSX8y0cx96lldbegVoOn12YOhLWb bmMP5z8nzGcFbiOmt0OF2BTouByfSQtVI7HsH/T8z/gTCjV4rwpuKcZCA6LI/g== X-Gm-Gg: AeBDieu7EgebCA8yc21PL0XA11x77aI35taf1CA0HWW1iJ7/2KK37qmC7h2evqNA9v+ gnqu9iQUrfMax/wD8zbEhOA/4fUoMFOdPPDxZ/S7Ubgp/8OAfH6KcrzawLoQYlFhwKuQMdh+rsk TZMIq3MVLsh0YW5JKUG1mToxBA267HG9MEXtTIKEWg+b76R4o0PreuMSvBMT8G4z2JBCNz9FqIb 4QzeX6a1JLp/zQXyhGPpn3JFL1yoqnUQu540KpPpv6hUakVEiq3tL2nbODGalYuGpESy0pnlQ1R UcMLJgFBtrMM+daRRjZMHV545X1n1wK3Vsds6zMcyvdvnXHzAKApO1a93FSM5rshVykzV/f+9nm LOasCZ9VYxXDPemIat4Lp3bs18OVMeiNaOtnF7/uqHrMNrL0lFW99TDmc2fqJX5MimBQPT3urt1 U6FR0PIPM3m+l8XX1O13DnPo2nczuiWh+uwLJ57/nHkeplWwlWK58t1rDCG/eaLsOKDg== X-Received: by 2002:a05:600d:d:b0:488:ba5f:984f with SMTP id 5b1f17b1804b1-488d67b8dadmr39997735e9.6.1775836521179; Fri, 10 Apr 2026 08:55:21 -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 v3 10/12] xen/riscv: introduce p2m_gpa_bits Date: Fri, 10 Apr 2026 17:54:56 +0200 Message-ID: <87d8050f252fb76e241a40809763e60d9874e902.1775836193.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-c1860d/1775836522-75159497-8D1036E3/10/73395122804 X-purgate-type: spam X-purgate-size: 4033 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836541008154100 Content-Type: text/plain; charset="utf-8" common/device-tree/domain-build.c uses p2m_gpa_bits to determine the upper bound of the GPA space when searching for unused regions, so it must be defined when CONFIG_DOMAIN_BUILD_HELPERS=3Dy. The variable is initialised to PADDR_BITS and narrowed in p2m_init() to the GPA width of the selected G-stage mode, allowing an external entity (e.g. an IOMMU) to restrict it further if needed. p2m_gpa_bits is a global rather than a per-domain value, which is acceptable for now because all domains are required to use the same G-stage MMU mode, as dom0less common code allocates it per all domains. Signed-off-by: Oleksii Kurochko --- Changes in v3: - Update initialization of p2m_gpa_bits and the comment above. - Rework how p2m_gpa_bits is limited. - Update the commit message. --- Changes in v2: - New patch. --- xen/arch/riscv/include/asm/p2m.h | 10 ++++++++-- xen/arch/riscv/p2m.c | 17 ++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/xen/arch/riscv/include/asm/p2m.h b/xen/arch/riscv/include/asm/= p2m.h index b5b6a996baeb..0d1dace1a0d8 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 b0773083ff53..1f229e96d740 100644 --- a/xen/arch/riscv/p2m.c +++ b/xen/arch/riscv/p2m.c @@ -11,6 +11,8 @@ #include #include =20 +#include + #include #include #include @@ -66,6 +68,12 @@ static const struct gstage_mode_desc modes[] =3D { =20 const struct gstage_mode_desc * __ro_after_init max_gstage_mode =3D &modes= [0]; =20 +/* + * 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). + */ +unsigned int __ro_after_init p2m_gpa_bits =3D PADDR_BITS; + 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, @@ -359,6 +367,7 @@ int p2m_init(struct domain *d, const struct xen_domctl_= createdomain *config) */ static const struct gstage_mode_desc *m =3D &modes[0]; struct p2m_domain *p2m =3D p2m_get_hostp2m(d); + unsigned int gpa_bits; =20 /* * "Trivial" initialisation is now complete. Set the backpointer so t= he @@ -408,6 +417,12 @@ int p2m_init(struct domain *d, const struct xen_domctl= _createdomain *config) # error "Add init of p2m->clean_dcache" #endif =20 + gpa_bits =3D P2M_GFN_LEVEL_SHIFT(p2m->mode->paging_levels + 1) + + P2M_ROOT_EXTRA_BITS; + + if ( gpa_bits < p2m_gpa_bits ) + p2m_gpa_bits =3D gpa_bits; + return 0; } =20 @@ -1345,7 +1360,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