From nobody Sun Apr 12 22:37:39 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=1775836536; cv=none; d=zohomail.com; s=zohoarc; b=LhWzxxFhajmapXW28aQUeo9NVBnndY4BCuD/ZvzTvHczsKjoPj0xXSvLSWPmP5qxHitVq9iRaBYl+dN+Ps5tTqlsrgtZec5Q0oITFFRKOM5x8HvmfygD1oFqlN82HmnE9RuIYMZ93pdK0i/kxG/n6DCHgt4St4cog+J44C+qqnw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836536; 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=MSz7tlr6rhlyBnCcpNqgWXaL+9iidsazDOLEUrgU1Kw=; b=oFHLghJGzT2mus1w+7oo/KmoryD+zlUPm0VU/xZV+yOIlrBd9rFdyeijGoZFCkd01OHBMf0X82rIceOTrcP5rTBdGWs7K/AGeuaVCL6WYU5BQ3JzLMZskz7LegdGuyrjVBGBSeLZCzzfarFIn1YFPmoaD/o2p0M0NpKcZInJjAI= 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 1775836536938851.1093986511482; Fri, 10 Apr 2026 08:55:36 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279414.1563842 (Exim 4.92) (envelope-from ) id 1wBECQ-00070B-PV; Fri, 10 Apr 2026 15:55:14 +0000 Received: by outflank-mailman (output) from mailman id 1279414.1563842; Fri, 10 Apr 2026 15:55:14 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECQ-000702-KQ; Fri, 10 Apr 2026 15:55:14 +0000 Received: by outflank-mailman (input) for mailman id 1279414; Fri, 10 Apr 2026 15:55:12 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECO-0006mB-Ch for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:12 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECM-00Cwd5-71 for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:11 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d5e-bab6-0a2a0a5309dd-0a2a450abe1c-6 for ; Fri, 10 Apr 2026 17:55:11 +0200 Received: from [209.85.128.51] (helo=mail-wm1-f51.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d5f-ee98-0a2a450a0019-d1558033c175-3 for ; Fri, 10 Apr 2026 17:55:11 +0200 Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4838c15e3cbso19690445e9.3 for ; Fri, 10 Apr 2026 08:55:11 -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.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:10 -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=1775836511; x=1776441311; 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=MSz7tlr6rhlyBnCcpNqgWXaL+9iidsazDOLEUrgU1Kw=; b=hkRvH8V/UMxke5UZ1Lwi2OAgzeNI7sqEUD29pCsTTe3itNieOme7Hc3EAA7NjFTIRl Vg/GC34oJLhcnG5KGK7lsg7PxSvrqKtId9ybvREqAuXukabeuDRnKZRIU5X/GxoZpeQm ql6rx8xuh9TO2fzSn/4WFVXF+tfUiXvedGj+m0N/AB18Djdp8ZXCszgIPQv6jXF0/S8V INQpZ6O/T3kbmakXPUOd4WQfgh0JGJE605R6pZC3Hj18o0MyZ9EYTsLZ2LbFKzHJzVw7 IPU0J+PwNdw01LreR+X4H5Yxaybv5St5PrzwUUWDrInkv9Kf4Tnzj5tdO8o9OgJwf/PS dMCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836511; x=1776441311; 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=MSz7tlr6rhlyBnCcpNqgWXaL+9iidsazDOLEUrgU1Kw=; b=dt6sdg9BVxKEd4BpZpyuzZUuxmdla3b4BofA9WHqgGcN+mhMlQxPbfoKN0wmVY8VUp tZgGHDSMNOrV59XiknF1SYmwTl9VvviW/YT3i5+Yi7qNcg7L8t3Utoxv/7ocvAW3/iWy O9pkhu0UBKdOS+SF8GYXmkTiXoTN3Q5e4q9yZJpHXh5FSGeYPrYZ1/kgQkB9VziT65DM /EWflfYDuZmYiTmnGFsbgA52Hf54c4B2qCNjTSjWijOcbAz3FUQx8gfNZLkbAgRx2+b2 T/7bO8eddLXypU4iS2dyzX+eQQa+MdcqG7bqLnFsGkXqzjczBqOKy89tYggEA7Q+Apv4 zcWw== X-Gm-Message-State: AOJu0YwrqLSP8cVfERwMt1qomEvtaYCevJd9l8BF6wOySJky+RGiIR7q tuoTLYAtVYz7kgYBKheatPsZJw3lQ08CaAJC1JXONVkF1PDdWlKaxwRwapvJgw== X-Gm-Gg: AeBDiev67pnAEQgFEWo0ghAKMhFtjZsftWc833YSkNx40YbWcIECY9rEIxwWAYK9uuG Tgft9YInLQM9IfaAnI0AfjH8S84FMvMr50NtK52+/esfdbN/IyGunR3NYWcX3j7JoueefKSP+BJ jhsOC/n+H8GGzNhFg+JltLLShHKQIjtBJlhSGXJd6rPKv2Gg8/ci9y/3YQW82OIjHkd2Ihwnwd2 uYyiLSHtB3mSBKbCqZC02GonhJXfIx2afV/ydV/l5Ce1L4VJ1c5bZ36gNbVk9K3s3ndaa0Aj0rk DOcDVi8CqqG9SWcTx7+vg/dJa3Afox7t5Nm1tUsj5Tvx+VhpFRrjL8MxPP9PzQurMW1R4t1UNDT UxUs/WxqOpJGXJGEdsLpVzA+WKeH9Ia3eXbsURz/JxW/w6gOOvipMvPW6c87MiRHRhC2bqADq48 WXCrdDP7Bi+4hpiUMUfG/n45owLDOSRyJthppM+YL7OxetCVCr1Bw0gpQXgrNMoOHmOA== X-Received: by 2002:a05:600d:1c:b0:487:1108:48bc with SMTP id 5b1f17b1804b1-488d6836d87mr38497135e9.17.1775836510630; Fri, 10 Apr 2026 08:55:10 -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 01/12] xen/riscv: implement get_page_from_gfn() Date: Fri, 10 Apr 2026 17:54:47 +0200 Message-ID: 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-4011c0/1775836511-C58140B1-46DD9E41/10/73395122804 X-purgate-type: spam X-purgate-size: 3227 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836538958158500 Content-Type: text/plain; charset="utf-8" The function is implemented out-of-line rather than as a static inline, to avoid header ordering issues where struct domain is incomplete when asm/p2m.h is included, leading to build failures: In file included from ./arch/riscv/include/asm/domain.h:10, from ./include/xen/domain.h:16, from ./include/xen/sched.h:11, from ./include/xen/event.h:12, from common/cpu.c:3: ./arch/riscv/include/asm/p2m.h: In function 'get_page_from_gfn': ./arch/riscv/include/asm/p2m.h:50:33: error: invalid use of undefined typ= e 'struct domain' 50 | #define p2m_get_hostp2m(d) (&(d)->arch.p2m) | ^~ ./arch/riscv/include/asm/p2m.h:180:38: note: in expansion of macro 'p2m_g= et_hostp2m' 180 | return p2m_get_page_from_gfn(p2m_get_hostp2m(d), _gfn(gfn= ), t); | ^~~~~~~~~~~~~~~ make[2]: *** [Rules.mk:253: common/cpu.o] Error 1 make[1]: *** [build.mk:72: common] Error 2 make: *** [Makefile:623: xen] Error 2 Signed-off-by: Oleksii Kurochko --- Changes in v3: - As nothing is called get_page_from_gfn() for system domains, leave only handling of not system domains. --- Changes in v2: - Align implemntation with Arm's get_page_from_gfn(). - Update the first comment about DOMID_XEN to mention that isn't "normal" domain instead of no-autotranslated. - Drop footer after commit message. --- xen/arch/riscv/include/asm/p2m.h | 8 ++------ xen/arch/riscv/p2m.c | 13 +++++++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/xen/arch/riscv/include/asm/p2m.h b/xen/arch/riscv/include/asm/= p2m.h index 60f27f9b347e..54ea67990f06 100644 --- a/xen/arch/riscv/include/asm/p2m.h +++ b/xen/arch/riscv/include/asm/p2m.h @@ -164,12 +164,8 @@ typedef unsigned int p2m_query_t; #define P2M_ALLOC (1u<<0) /* Populate PoD and paged-out entries */ #define P2M_UNSHARE (1u<<1) /* Break CoW sharing */ =20 -static inline struct page_info *get_page_from_gfn( - struct domain *d, unsigned long gfn, p2m_type_t *t, p2m_query_t q) -{ - BUG_ON("unimplemented"); - return NULL; -} +struct page_info *get_page_from_gfn(struct domain *d, unsigned long gfn, + p2m_type_t *t, p2m_query_t q); =20 static inline void memory_type_changed(struct domain *d) { diff --git a/xen/arch/riscv/p2m.c b/xen/arch/riscv/p2m.c index 89e5db606fc8..d63697c89a1a 100644 --- a/xen/arch/riscv/p2m.c +++ b/xen/arch/riscv/p2m.c @@ -1534,3 +1534,16 @@ void p2m_handle_vmenter(void) * won't be reused until need_flush is set to true. */ } + +struct page_info *get_page_from_gfn(struct domain *d, unsigned long gfn, + p2m_type_t *t, p2m_query_t q) +{ + /* + * system domains are domains which doesn't have p2m translation table= s, + * so they can't use p2m_get_page_from_gfn() and extra care should be + * done for them. + */ + ASSERT(!is_system_domain(d)); + + return p2m_get_page_from_gfn(p2m_get_hostp2m(d), _gfn(gfn), t); +} --=20 2.53.0 From nobody Sun Apr 12 22:37:39 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=1775836532; cv=none; d=zohomail.com; s=zohoarc; b=U7YYAM26juOQSJeVl+dkCBTy/yajT9sWnKet+R7IVR1m50OUQ32XjYe2QrpIrnKDskIklr8YAuIqfvSTFlcflNTZvTxJOjxAAzTytLk5bwmA3zK+CUYNBzFkGiQmDG4fxZhVDmiL9kV3GcEAGG71w1ipiqyKilGlJlsoj/2KnXE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836532; 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=Kn185YypiDfOEWixrDVwqtteBm6bdiTVXiEGngdxI1A=; b=eVRTGDsyp8g858wzP4wfnpsowg5pVk1xgc20b/l1E+8ZZQwhjBmtAgG+/qWpSfGBYZViduVTwiqcaYyXUwaje6UH5FlJNqJnHOVIjzJOGRR/huLIFjhEGCR5LHs0Bhuj1WBZEq1phd+HcIDoTg7jkYHYvXTU2qGe3TD7jrGcXAw= 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 1775836532878188.61996507774586; Fri, 10 Apr 2026 08:55:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279415.1563848 (Exim 4.92) (envelope-from ) id 1wBECR-00073M-1v; Fri, 10 Apr 2026 15:55:15 +0000 Received: by outflank-mailman (output) from mailman id 1279415.1563848; Fri, 10 Apr 2026 15:55:15 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECQ-00072l-Sd; Fri, 10 Apr 2026 15:55:14 +0000 Received: by outflank-mailman (input) for mailman id 1279415; Fri, 10 Apr 2026 15:55:13 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECP-0006xl-DC for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:13 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECN-00Cwd5-7o for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:12 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d56-bab6-0a2a0a5309dd-0a2a450cb636-16 for ; Fri, 10 Apr 2026 17:55:12 +0200 Received: from [209.85.128.50] (helo=mail-wm1-f50.google.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d60-f40c-0a2a450c0019-d1558032cce8-3 for ; Fri, 10 Apr 2026 17:55:12 +0200 Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-488971db0fdso21891455e9.0 for ; Fri, 10 Apr 2026 08:55:12 -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.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:11 -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=1775836512; x=1776441312; 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=Kn185YypiDfOEWixrDVwqtteBm6bdiTVXiEGngdxI1A=; b=WMjkiq7nWY1QPOmYYFMstz0ihWMUut040lCHgRvWX7Tsgbf+SA4XlDOQ42/wqAq9Iu B32nDvUR48VyZ92ve75jF1EoVkvNvuVtnL02crGza3F7k/ZmLmz560aT7qs1FKZua5V5 YujsCIdvEZkLRt0p/gTHvZzPJjQ74ZbkvwbZjDoBpkmpJjXk71TQ5YVpj+LLVt7pDJXh L1S2wKC86vySSdioa07VX+WmyJJw9z87RoaIGBWkbsD5pVsxNwBA1OXn/32H7ARUP0Pn gjt8ahAJzyW6qpmT31XtPYrOQajiPE9uHLJMbrO5M4/iccsVkqbQlNk355q7hxUk3/gl VSaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836512; x=1776441312; 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=Kn185YypiDfOEWixrDVwqtteBm6bdiTVXiEGngdxI1A=; b=ejsvwEFcLtaUJrlaa9Gx3JOUIB1MyUqDJ51erhVeuY2IMp9yHMC7gu4VBkWMUvgW3q IMU1+7qhD/ZjESqZc4vPQzELTrIIL44YZzb/xREoNWKrTwYWa9irHbJ2DJkFBd3a8qxK HS7Qo5KxRc4Ik7nurrgQW5Ftj7MEfSJT3U9FG49zofEpfXbYD+cAiUpqOmm4b8znB7CM CHDVp6I5F4hT3+dNw3wzSSkju26LaRx0huy7KJlezzm6nzMSUfcgyRtajk/3dD6KRU4N SoWGFgoYz89caXx3P4Fc7aUi8KAdeUwGIFzNYy4FHsW970Hu61+BVFqLAug3B50x4Vch 1bUg== X-Gm-Message-State: AOJu0YxwX8c2vSUslPaS9fZCpO6zBOklusSozm9UpBm2DP4pByEW/Bs5 oNXTsj/ETrY3kV4NSEEvPnv/u+TX/y9O28F5QXEzvgil5NjY0CYG1siRGbY3ag== X-Gm-Gg: AeBDiesf5UjMtT6c04JsHKu4o67YBDjOBWcqT8RcUpBG+sAoB1+xnQB9ezHckSaI/jZ nxh5jjD0/ww0WrpL5lgVziz5qjS5JN2F+3IPU+n7mxAcrOP6lLlWIKxhagg7Pwhj+qNCMahCdnd Ekl7cG9D5n+zg6G/ahavx1nffhAKY8ZSViv02O1xP5n0fJlLjXu2xAF+T6asYqyJjKbshAv9Za6 7OVMGXeQ2xJUVKjaaoO+pQFznqU5Cdxdq5HxhfVKy7EzbHKS23dbCUUtLlrR9XTksFtg1iujHGV pf69ByYtINBTJaLGTJymw7deJda94a0btiiGRyvIVLuZDZSkjkjh3Mb0BIf4VBgrC4xekrLdEb0 BVwHEFJNakIJI445dwcIIBUd3kbgTJtHnC05QiNgHf083e5WBlQszr+apo4+D1b6lZQPGBM1AY1 P3LGS9uZhiwAhe8AFoBw0zlE3yfvSELOFY0A3I0sdvVHGG2kOv/S4FATACA+Tjw9dv9A== X-Received: by 2002:a05:600c:5249:b0:485:7f02:afd5 with SMTP id 5b1f17b1804b1-488d680079bmr45339755e9.13.1775836511858; Fri, 10 Apr 2026 08:55:11 -0700 (PDT) From: Oleksii Kurochko To: xen-devel@lists.xenproject.org Cc: Romain Caritey , Oleksii Kurochko , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Andrew Cooper , Anthony PERARD , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v3 02/12] xen: fix len type for guest copy functions Date: Fri, 10 Apr 2026 17:54:48 +0200 Message-ID: <9154aea41a11bc0ba95ad15c217db79d029dd119.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-d25034/1775836512-8254FA3D-75CFC99F/10/73395122804 X-purgate-type: spam X-purgate-size: 4947 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836534844154100 Content-Type: text/plain; charset="utf-8" Widen the len argument of copy_to_guest_phys_flush_dcache() and the copy_to_guest_phys_cb typedef from unsigned int to unsigned long, as the function can be used to copy large blobs such as the initrd which may exceed 4GB. Update the internal copy_guest() len argument to unsigned long accordingly. Change the type for local variable size in copy_guest() to avoid compilation error because of type mismatch. raw_* wrappers above copy_guest() keep returning unsigned long to avoid type narrowing; it is not an issue for raw_*'s len argument to remain 'unsigned int' since the assignment to copy_guest()'s wider unsigned long parameter is safe and there is no raw_* users who are using a value bigger than what can fit into 'unsigned int'. Reported-by: Jan Beulich Signed-off-by: Oleksii Kurochko --- Changes in v3: - Correct the declaration of copy_to_guest_phys_cb() instead of return 'unsigned int' to be in sync with len argument, the type of len argument is changed on 'unsigned long' as initrd could be pretty big and also its size is stroed in 'paddr_t' which is 'unsigned long'. - Update copy_guest() prototype to avoid trancation bug for len argument. - Revert prototype changes for raw_* wrappers above copy_guest() as they should keep returning unsigned long to avoid type narrowing; it is not an issue for raw_*'s len argument to remain 'unsigned int' since the assignment to copy_guest()'s wider unsigned long parameter is safe. - Change the type for local variable size in copy_guest() to avoid compilation error because of type mismatch. - Add Reported-by: Jan Beulich --- Changes in v2: - New patch. --- xen/arch/arm/guestcopy.c | 6 +++--- xen/arch/arm/include/asm/guest_access.h | 2 +- xen/include/xen/fdt-domain-build.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/xen/arch/arm/guestcopy.c b/xen/arch/arm/guestcopy.c index fdb06422b8e9..ca0f72a80bff 100644 --- a/xen/arch/arm/guestcopy.c +++ b/xen/arch/arm/guestcopy.c @@ -53,7 +53,7 @@ static struct page_info *translate_get_page(copy_info_t i= nfo, uint64_t addr, return page; } =20 -static unsigned long copy_guest(void *buf, uint64_t addr, unsigned int len, +static unsigned long copy_guest(void *buf, uint64_t addr, unsigned long le= n, copy_info_t info, unsigned int flags) { /* XXX needs to handle faults */ @@ -65,7 +65,7 @@ static unsigned long copy_guest(void *buf, uint64_t addr,= unsigned int len, while ( len ) { void *p; - unsigned int size =3D min(len, (unsigned int)PAGE_SIZE - offset); + unsigned long size =3D min_t(unsigned long, len, PAGE_SIZE - offse= t); struct page_info *page; =20 page =3D translate_get_page(info, addr, flags & COPY_linear, @@ -136,7 +136,7 @@ unsigned long raw_copy_from_guest(void *to, const void = __user *from, unsigned long copy_to_guest_phys_flush_dcache(struct domain *d, paddr_t gpa, void *buf, - unsigned int len) + unsigned long len) { return copy_guest(buf, gpa, len, GPA_INFO(d), COPY_to_guest | COPY_ipa | COPY_flush_dcache); diff --git a/xen/arch/arm/include/asm/guest_access.h b/xen/arch/arm/include= /asm/guest_access.h index 18c88b70d7ec..c13cbec55b65 100644 --- a/xen/arch/arm/include/asm/guest_access.h +++ b/xen/arch/arm/include/asm/guest_access.h @@ -14,7 +14,7 @@ unsigned long raw_clear_guest(void *to, unsigned int len); unsigned long copy_to_guest_phys_flush_dcache(struct domain *d, paddr_t gpa, void *buf, - unsigned int len); + unsigned long len); =20 int access_guest_memory_by_gpa(struct domain *d, paddr_t gpa, void *buf, uint32_t size, bool is_write); diff --git a/xen/include/xen/fdt-domain-build.h b/xen/include/xen/fdt-domai= n-build.h index 886a85381651..1d9e77df0eb3 100644 --- a/xen/include/xen/fdt-domain-build.h +++ b/xen/include/xen/fdt-domain-build.h @@ -47,7 +47,7 @@ static inline int get_allocation_size(paddr_t size) typedef unsigned long (*copy_to_guest_phys_cb)(struct domain *d, paddr_t gpa, void *buf, - unsigned int len); + unsigned long len); =20 void initrd_load(struct kernel_info *kinfo, copy_to_guest_phys_cb cb); --=20 2.53.0 From nobody Sun Apr 12 22:37:39 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=1775836541; cv=none; d=zohomail.com; s=zohoarc; b=PTQFJ0iSvDyrLLvBKgjxBAwoikirKwkJrAuiYKxJG5J3bHRCWiyGLT4hxrccW3Y5tTNFYcUmlN9L7lYU+zojoCKgeyoglDWx9DtelSfQ6SbbZRH/TbfalDa8RI/vBJ8FmDoN/xGu4iDvNwbTlxMhAR79OJWhR4loBPwwXCzc2uE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836541; 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=SFYf07Rw6EEigOnFsAjQXEHqS/FUbbC2HqDC1ySUOAc=; b=M7pQ4JMZvLAc1obCGuNl/53omvGaK1gzf3AaIf8g0vN5Iw9gIv12Crf4a/eItL5rmfQ6E0nDGkMxlwUXOQUzXK+BOwTcsc1rYL1Cb02HdFb//V/7u//IWjnBlZpETEdsjb7QcBseHjR7qeNPHj8bJUDREKMBKb3Y8XQ/0D/Wd/M= 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 177583654182055.14556858283629; Fri, 10 Apr 2026 08:55:41 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279417.1563860 (Exim 4.92) (envelope-from ) id 1wBECS-0007Rt-8I; Fri, 10 Apr 2026 15:55:16 +0000 Received: by outflank-mailman (output) from mailman id 1279417.1563860; Fri, 10 Apr 2026 15:55:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECS-0007Rm-3W; Fri, 10 Apr 2026 15:55:16 +0000 Received: by outflank-mailman (input) for mailman id 1279417; Fri, 10 Apr 2026 15:55:14 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECQ-0006zi-FM for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:14 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECP-00DRdD-RY for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:13 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d5f-2eae-0a2a0a5409dd-0a2a4506e8bc-12 for ; Fri, 10 Apr 2026 17:55:13 +0200 Received: from [209.85.128.53] (helo=mail-wm1-f53.google.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d61-0df0-0a2a45060019-d1558035b098-3 for ; Fri, 10 Apr 2026 17:55:13 +0200 Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-483487335c2so24236935e9.2 for ; Fri, 10 Apr 2026 08:55:13 -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.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:12 -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=1775836513; x=1776441313; 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=SFYf07Rw6EEigOnFsAjQXEHqS/FUbbC2HqDC1ySUOAc=; b=N6OCPPryxPDH7i+Guk+LEXdipKtQX3Sc+ngp9MAxVonaOmZBiy3xMVAs+TfcFSzJfO hQ4oTcZGx/YbJXlzUU5sy2wuwVWIQFUOEL1G3zHWLLCGgW/VvdgoA83NMbAsT19YxXzd lodJW3SfrYsJUtzSICLQWqTAVtGzHu4YYx7vmZMf8Jj6jVD6xuAs4lVk57RuT1HBZ2OD UmG8936YUFyVjbSae40yY90IlOyGJ0Wh7gZnYdMuX22eCo8bbWj7yg7USe8ZvqY7oC9h pWTc2XiH8w/CNmDnqPw9ypQJuLa2ZuiXJ+P1+h5hvPVq4CI4dPhZKoswbJxkzjjNjbBD EWpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836513; x=1776441313; 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=SFYf07Rw6EEigOnFsAjQXEHqS/FUbbC2HqDC1ySUOAc=; b=Qthazv9dAehQ2XuRWmLRNojclxs2rJMfBkuJ505hFza9KsPcNoOZYs8b/xi+C+Rs34 xSNumr3Y0QJUqH4d0ZImjNddsn8ODFExDWmAqLXZpBDFgsMCt1Mu/QO9+tViXzfMQYwu p5acvo03a49DPC/RqOSTYPBj/9XdOe3ilYTyP+JxEafysLj6RznEltZTKK+4FInjLF9k cS9v64PFGBNJ/kAAJYDqUxL7ioII5QE48HGpveEe13VfwvkH6bmzZbaICdQffLWdc8hB 5ADXDfDmB/DSJaLEZZRQFGgXmdJml9NGPz262IdwINW88WHNaD5JW47yQK3xnEquQvdD S+3Q== X-Gm-Message-State: AOJu0YyEcnJ/acFY8B2AR2VRsUV3WGw/BF2IJ8wK9IjhAFAwEQ33R8KU 1OFUiprNJX6f+efKk0IKtATOBRXSG/puKgJMrIoN23CL/FfJT4je5xCaFozkHA== X-Gm-Gg: AeBDieskIljIoEUIFJtGtskyrFL50/IF/jouza3zJUmNW503GalNyyuIZuV5rLJouwE Jlw+H7zptksKpCW3ffCnSBDj5n2mUmDvZbRARpgxXkk5/vl7PVai4MV1PeqJE7TNoTGjd6Ihx+K MY/QOP2Ysktgo5ffAKPkTHz9IjPi7JaJagD2qPLLtuftj78x/x0BWeEuWNg4dISss+HhQzOzU16 0WlETY1FychPAXoKLAndVq4gRDYIdqzbZowpG6Pr0lMIuqH9ycczUzkndYPn43WXFPrJq1QPuUO cX+mUJcG6wuRX3hhOnQTy9yZ3kTZwip/MZoN8trwByrNLVQFSMiG25tAZMpohJas9EtMZV7Ib+S EPjzty5i+JaxytqMGiTK5HcdEF76GXKQyqyBC18YGsMcd6poZFzgCqV/RErtySGPpxEs6+6YOGO W913ibbR7HYdj32lHhb5aHo1XgzKu7Rr+IBGZWDGdlzIY20VjaMaRayATDAAGYvVEBrg== X-Received: by 2002:a05:600c:45cf:b0:483:8062:b2f with SMTP id 5b1f17b1804b1-488d67b8dddmr46630205e9.6.1775836513001; Fri, 10 Apr 2026 08:55:13 -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 03/12] xen/riscv: implement copy_to_guest_phys() Date: Fri, 10 Apr 2026 17:54:49 +0200 Message-ID: <265d9fe7c0ff46c1c969156c889e133593d57fff.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-16d1c6/1775836513-5FF3D3D8-2F861969/10/73395122804 X-purgate-type: spam X-purgate-size: 6368 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836542921154100 Content-Type: text/plain; charset="utf-8" Introduce copy_to_guest_phys() for RISC-V, based on the Arm implementation. Add a generic copy_guest() helper for copying to and from guest physical (and potentially virtual addresses in the future), and implement translate_get_page() to translate a guest physical address into a struct page_info via the domain p2m. Compared to the Arm code: - Drop COPY_flush_dcache(), as no such use cases exist on RISC-V. - Do not implement the linear mapping case, which is currently unused. - Use PAGE_OFFSET() to initialize the local offset variable in copy_guest(). Signed-off-by: Oleksii Kurochko --- Changes in v3: - s/if (page =3D=3D NULL)/if ( !page ). - Drop " - offset" for unmap_domain_page() inside copy_guest() function. unmap_domain_page() is expected to mask (or something similar) the page offset bits. - Change some types for functions as copy_to_guest_phys_cb function pointer prototype was changed too in the prev. commit. --- Changes in v2: - Use BIT() instead of open-coding. - Rename COPY_ipa to COPY_gpa. - Rename COPY_linear to COPY_gva. - Use BUG_ON(linear) instead if (lineer) + BUG_ON. - Rename arg liner to gva for translate_get_page(). - Update translate_get_page() to properly handling write argument. - Return unsigned int for copy_guest() and copy_to_guest_phys() as len function parameter is only 'unsigned int'. - Reformat function arguments for alignment --- xen/arch/riscv/Makefile | 1 + xen/arch/riscv/guestcopy.c | 116 ++++++++++++++++++++++ xen/arch/riscv/include/asm/guest_access.h | 7 ++ 3 files changed, 124 insertions(+) create mode 100644 xen/arch/riscv/guestcopy.c diff --git a/xen/arch/riscv/Makefile b/xen/arch/riscv/Makefile index 04f02ad89cba..cfc3fdf7d208 100644 --- a/xen/arch/riscv/Makefile +++ b/xen/arch/riscv/Makefile @@ -4,6 +4,7 @@ obj-y +=3D domain.o obj-$(CONFIG_EARLY_PRINTK) +=3D early_printk.o obj-y +=3D entry.o obj-y +=3D extable.o +obj-y +=3D guestcopy.o obj-y +=3D imsic.o obj-y +=3D intc.o obj-y +=3D irq.o diff --git a/xen/arch/riscv/guestcopy.c b/xen/arch/riscv/guestcopy.c new file mode 100644 index 000000000000..55a2d6597621 --- /dev/null +++ b/xen/arch/riscv/guestcopy.c @@ -0,0 +1,116 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include + +#include + +#define COPY_from_guest 0U +#define COPY_to_guest BIT(0, U) +#define COPY_gpa 0U +#define COPY_gva BIT(1, U) + +typedef union +{ + struct + { + struct vcpu *v; + } gva; + + struct + { + struct domain *d; + } gpa; +} copy_info_t; + +#define GVA_INFO(vcpu) ((copy_info_t) { .gva =3D { vcpu } }) +#define GPA_INFO(domain) ((copy_info_t) { .gpa =3D { domain } }) + +static struct page_info *translate_get_page(copy_info_t info, uint64_t add= r, + bool gva, bool write) +{ + p2m_type_t p2mt; + struct page_info *page; + + /* + * Not implemented yet. + * + * If gva =3D=3D true, the operation will likely require a struct vcpu + * rather than just a struct domain. For this reason copy_info_t is + * already passed here instead of only struct domain. + */ + BUG_ON(gva); + + page =3D get_page_from_gfn(info.gpa.d, paddr_to_pfn(addr), &p2mt, P2M_= ALLOC); + + if ( !page ) + return NULL; + + if ( write ? p2mt !=3D p2m_ram_rw : !p2m_is_ram(p2mt) ) + { + put_page(page); + return NULL; + } + + return page; +} + +static unsigned long copy_guest(void *buf, uint64_t addr, unsigned long le= n, + copy_info_t info, unsigned int flags) +{ + unsigned int offset =3D PAGE_OFFSET(addr); + + BUILD_BUG_ON((sizeof(addr)) < sizeof(vaddr_t)); + BUILD_BUG_ON((sizeof(addr)) < sizeof(paddr_t)); + + while ( len ) + { + void *p; + unsigned long size =3D min_t(unsigned long, len, PAGE_SIZE - offse= t); + struct page_info *page; + + page =3D translate_get_page(info, addr, flags & COPY_gva, + flags & COPY_to_guest); + if ( !page ) + return len; + + p =3D __map_domain_page(page); + p +=3D offset; + if ( flags & COPY_to_guest ) + { + /* + * buf will be NULL when the caller request to zero the + * guest memory. + */ + if ( buf ) + memcpy(p, buf, size); + else + memset(p, 0, size); + } + else + memcpy(buf, p, size); + + unmap_domain_page(p); + put_page(page); + len -=3D size; + buf +=3D size; + addr +=3D size; + + /* + * After the first iteration, guest virtual address is correctly + * aligned to PAGE_SIZE. + */ + offset =3D 0; + } + + return 0; +} + +unsigned long copy_to_guest_phys(struct domain *d, paddr_t gpa, void *buf, + unsigned long len) +{ + return copy_guest(buf, gpa, len, GPA_INFO(d), + COPY_to_guest | COPY_gpa); +} diff --git a/xen/arch/riscv/include/asm/guest_access.h b/xen/arch/riscv/inc= lude/asm/guest_access.h index 7cd51fbbdead..8d679319ded0 100644 --- a/xen/arch/riscv/include/asm/guest_access.h +++ b/xen/arch/riscv/include/asm/guest_access.h @@ -2,6 +2,10 @@ #ifndef ASM__RISCV__GUEST_ACCESS_H #define ASM__RISCV__GUEST_ACCESS_H =20 +#include + +struct domain; + unsigned long raw_copy_to_guest(void *to, const void *from, unsigned len); unsigned long raw_copy_from_guest(void *to, const void *from, unsigned len= ); unsigned long raw_clear_guest(void *to, unsigned int len); @@ -18,6 +22,9 @@ unsigned long raw_clear_guest(void *to, unsigned int len); #define guest_handle_okay(hnd, nr) (1) #define guest_handle_subrange_okay(hnd, first, last) (1) =20 +unsigned long copy_to_guest_phys(struct domain *d, paddr_t gpa, void *buf, + unsigned long len); + #endif /* ASM__RISCV__GUEST_ACCESS_H */ /* * Local variables: --=20 2.53.0 From nobody Sun Apr 12 22:37:39 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=1775836539; cv=none; d=zohomail.com; s=zohoarc; b=F7Zqkg4VAn42mZ35Ez5aGK3ZjIMJvgAvInecvIccr1VCuEzOI3TfIcTBcUlyINkFd7YSgUEvTAGJzwz2kfjGH2jjx7cRBYqiSln9pmFNPZ1P7SAiOhhs9wAQLM2bXVj5LY0camqX00rkUACwCmIrAYy3MuWuBBGbUOYQwXdcYFM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836539; 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=sTRi4YH+C2jL1DPdQVnyL1+s27z+ZRb1KNlQ9e7rLKA=; b=U/yZuTi891eXYPk1s8qYD20c2VQ+VrR4tEd5paoAPZAgtHHAtnE9CfHddyef3j2pUwOlQoaQGN/pP13ZrZNzPJ5priaWx4SY6baq3Zr7uePa0Hqp0v/Ca+eGHCt0Kf4Vge6lchm1J21cCan+bcZ2xFZPFVUbV3IBot+ljhu3K4c= 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 1775836539250299.85607238754653; Fri, 10 Apr 2026 08:55:39 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279418.1563868 (Exim 4.92) (envelope-from ) id 1wBECT-0007hP-Ka; Fri, 10 Apr 2026 15:55:17 +0000 Received: by outflank-mailman (output) from mailman id 1279418.1563868; Fri, 10 Apr 2026 15:55:17 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECT-0007hE-HA; Fri, 10 Apr 2026 15:55:17 +0000 Received: by outflank-mailman (input) for mailman id 1279418; Fri, 10 Apr 2026 15:55:15 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECR-0007EN-Iz for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:15 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECP-00Cwd5-DQ for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:14 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d56-bab6-0a2a0a5309dd-0a2a450cb636-26 for ; Fri, 10 Apr 2026 17:55:14 +0200 Received: from [209.85.128.45] (helo=mail-wm1-f45.google.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d62-f40c-0a2a450c0019-d155802dc8a2-3 for ; Fri, 10 Apr 2026 17:55:14 +0200 Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-48897fd88ebso23326085e9.2 for ; Fri, 10 Apr 2026 08:55:14 -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.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:13 -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=1775836514; x=1776441314; 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=sTRi4YH+C2jL1DPdQVnyL1+s27z+ZRb1KNlQ9e7rLKA=; b=s/ADolDC1igUBrDPOfb0FyBbtLgF20pDCtb70tfFOXxjW34DJUjmeIpWcZUCgaQGgh Y5qPFZp4pfhZyNi7/+GCs5Pdu1w3LFm2W9SG/rg6yAPNxQTd6AOHb7RxCuOcbgCIfryk 1k1fCeVRwTzybMTvNOVzzs08ju0cOG/k53w/FqY9KgCNqYF9LPtaT4PhBRvBVPdlpyRC ZDckx2a+gjiHdbhPfbuu4uDywDtuLgvn5fc7SQAN70RKuUde2GreZYLiUWX3EcfuLMWu d9ECxqwsJM1a3tH/QtOxMbmtFc5aIaUCsDy92SGc+UWDKs9VYEWBPCAkUtVXqksZj3go YHqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836514; x=1776441314; 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=sTRi4YH+C2jL1DPdQVnyL1+s27z+ZRb1KNlQ9e7rLKA=; b=QSmsXq6xlY8fO41BZfN/YyvJ03QAO8P7sd4t80ENciSQxkBUtdX2cfLaw2Ue6VvDpW IJw5AcKy9+XsGA5uf+bTz90uX7fzhxAUMLge8CdtUY+rH5LGi4Ein+hY+F4HT4wESuaZ pqcVr0pMmmx/pJFS68ZSzwW2sDAjVgtAano4C11vQs+IarZj6+hgisFv+kqaNFswumj9 GljOzpmQXCCGSQyCHFWwFSmh0RdrTGGkEsyGSStD/bivqZyCtj2IQph8bjHpa/CjV/+y TKIEbkAwqiOH0rFsR5Z384JgZ2tfgrvQM2yhfoajVvKkxfGnoDzEOBoAgY+LTmbQ24UV QXWw== X-Gm-Message-State: AOJu0YxRgERfs3ZPJ9PfmGhzGap3LbvEgc0VEBz/hxJbVR9dZg6VvcDq nqWjmMUymYKGiaqrEPJYbmpiD62ki7AO0A+IOpuYnkFDFCyLY4DCNLGFbvawqQ== X-Gm-Gg: AeBDieuspLs7cDOb9Xtz6o2VKI1yCFL0cGf9XyulyV4p1MkqiNrp4Cp6UJgh3V9N91T BvXbob6g3Sa+FGYu6cW4tOM5pj2+5laNO8wDOyrZtlCol3lZC+P5ic+Cbj4sT65/yGnTSW8fOys dmtT/ZCZiVVhENJmCerg9TR+P1Efhdr0S2tRo88J4Pyh7fkOShVNezr9/Z4foYknQu14j3IVIiX Y0x+0U+AvVh5IJDRow1lRc+P8Z3MdY+Y2jFlY3Goe4iTTsnyh49mngT9yk+LISZ9gdpne2MjYEM 8QaB7bODFzvzMf2l6xMqwAl8ZbjYrv6855W24T9v/rl0mAoOTBz9buKJ6izfDvuRA4V9Y06ECkq GKyhqE9Z+akUvCipjZousPEae5vmEflJACgzaQAm5sosjwoqx7TTJOzo1TUrNe7VY7BNvR8BJcw bYI3mpfVXF/Mwbzh9DI82ICqzKmd1lRaTsSYSbERrWK2BoRJhHShRDujRTWz3QGrQXREkptOvEv Fjn X-Received: by 2002:a05:600c:34cd:b0:487:575:5e1 with SMTP id 5b1f17b1804b1-488d68c2cb4mr48418635e9.24.1775836514072; Fri, 10 Apr 2026 08:55:14 -0700 (PDT) From: Oleksii Kurochko To: xen-devel@lists.xenproject.org Cc: Romain Caritey , Oleksii Kurochko , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Andrew Cooper , Anthony PERARD , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v3 04/12] xen/dom0less: rename kernel_zimage_probe() to kernel_image_probe() Date: Fri, 10 Apr 2026 17:54:50 +0200 Message-ID: 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-d25034/1775836514-FF547A3D-4A6AEDB5/10/73395122804 X-purgate-type: spam X-purgate-size: 7698 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836541064154100 Content-Type: text/plain; charset="utf-8" The helper kernel_zimage_probe() is referenced from common code (xen/common/device-tree/kernel.c), but its name is tied to the zImage format which is specific to Arm (from architectures supported by Xen). Other architectures supported by Xen, such as RISC-V, do not use the zImage format and instead rely on other kernel image types (e.g. Image or compressed Image variants: Image.gz, etc). Using "zimage" in the name is therefore misleading in architecture-independent code. Rename kernel_zimage_probe() to kernel_image_probe() and update the associated structure field from "zimage" to "image" to reflect that the code handles generic kernel images rather than the zImage format specifically. No functional change intended. Reported-by: Jan Beulich Signed-off-by: Oleksii Kurochko --- Changes in v3: - Nothing changed. Only rebase. --- Changes in v2: - new patch. --- xen/arch/arm/kernel.c | 48 ++++++++++++++++----------------- xen/common/device-tree/kernel.c | 2 +- xen/include/xen/fdt-kernel.h | 4 +-- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/xen/arch/arm/kernel.c b/xen/arch/arm/kernel.c index 7544fd50a20f..3c613cdb233f 100644 --- a/xen/arch/arm/kernel.c +++ b/xen/arch/arm/kernel.c @@ -101,8 +101,8 @@ static paddr_t __init kernel_zimage_place(struct kernel= _info *info) paddr_t load_addr; =20 #ifdef CONFIG_ARM_64 - if ( (info->arch.type =3D=3D DOMAIN_64BIT) && (info->zimage.start =3D= =3D 0) ) - return mem->bank[0].start + info->zimage.text_offset; + if ( (info->arch.type =3D=3D DOMAIN_64BIT) && (info->image.start =3D= =3D 0) ) + return mem->bank[0].start + info->image.text_offset; #endif =20 /* @@ -111,19 +111,19 @@ static paddr_t __init kernel_zimage_place(struct kern= el_info *info) * and above 32MiB. Load it as high as possible within these * constraints, while also avoiding the DTB. */ - if ( info->zimage.start =3D=3D 0 ) + if ( info->image.start =3D=3D 0 ) { paddr_t load_end; =20 load_end =3D mem->bank[0].start + mem->bank[0].size; load_end =3D MIN(mem->bank[0].start + MB(128), load_end); =20 - load_addr =3D load_end - info->zimage.len; + load_addr =3D load_end - info->image.len; /* Align to 2MB */ load_addr &=3D ~((2 << 20) - 1); } else - load_addr =3D info->zimage.start; + load_addr =3D info->image.start; =20 return load_addr; } @@ -131,8 +131,8 @@ static paddr_t __init kernel_zimage_place(struct kernel= _info *info) static void __init kernel_zimage_load(struct kernel_info *info) { paddr_t load_addr =3D kernel_zimage_place(info); - paddr_t paddr =3D info->zimage.kernel_addr; - paddr_t len =3D info->zimage.len; + paddr_t paddr =3D info->image.kernel_addr; + paddr_t len =3D info->image.len; void *kernel; int rc; =20 @@ -215,7 +215,7 @@ int __init kernel_uimage_probe(struct kernel_info *info, return -EOPNOTSUPP; } =20 - info->zimage.start =3D be32_to_cpu(uimage.load); + info->image.start =3D be32_to_cpu(uimage.load); info->entry =3D be32_to_cpu(uimage.ep); =20 /* @@ -224,20 +224,20 @@ int __init kernel_uimage_probe(struct kernel_info *in= fo, * independent image. That means Xen is free to load such an image at * any valid address. */ - if ( info->zimage.start =3D=3D 0 ) + if ( info->image.start =3D=3D 0 ) printk(XENLOG_INFO "No load address provided. Xen will decide where to load it= .\n"); else printk(XENLOG_INFO "Provided load address: %"PRIpaddr" and entry address: %"PR= Ipaddr"\n", - info->zimage.start, info->entry); + info->image.start, info->entry); =20 /* * If the image supports position independent execution, then user can= not * provide an entry point as Xen will load such an image at any approp= riate * memory address. Thus, we need to return error. */ - if ( (info->zimage.start =3D=3D 0) && (info->entry !=3D 0) ) + if ( (info->image.start =3D=3D 0) && (info->entry !=3D 0) ) { printk(XENLOG_ERR "Entry point cannot be non zero for PIE image.\n"); @@ -257,13 +257,13 @@ int __init kernel_uimage_probe(struct kernel_info *in= fo, if ( rc ) return rc; =20 - info->zimage.kernel_addr =3D mod->start; - info->zimage.len =3D mod->size; + info->image.kernel_addr =3D mod->start; + info->image.len =3D mod->size; } else { - info->zimage.kernel_addr =3D addr + sizeof(uimage); - info->zimage.len =3D len; + info->image.kernel_addr =3D addr + sizeof(uimage); + info->image.len =3D len; } =20 info->load =3D kernel_zimage_load; @@ -289,7 +289,7 @@ int __init kernel_uimage_probe(struct kernel_info *info, * Thus, Xen uses uimage.load attribute to determine the load address = and * zimage.text_offset is ignored. */ - info->zimage.text_offset =3D 0; + info->image.text_offset =3D 0; #endif =20 return 0; @@ -338,10 +338,10 @@ static int __init kernel_zimage64_probe(struct kernel= _info *info, if ( (end - start) > size ) return -EINVAL; =20 - info->zimage.kernel_addr =3D addr; - info->zimage.len =3D end - start; - info->zimage.text_offset =3D zimage.text_offset; - info->zimage.start =3D 0; + info->image.kernel_addr =3D addr; + info->image.len =3D end - start; + info->image.text_offset =3D zimage.text_offset; + info->image.start =3D 0; =20 info->load =3D kernel_zimage_load; =20 @@ -389,10 +389,10 @@ static int __init kernel_zimage32_probe(struct kernel= _info *info, } } =20 - info->zimage.kernel_addr =3D addr; + info->image.kernel_addr =3D addr; =20 - info->zimage.start =3D start; - info->zimage.len =3D end - start; + info->image.start =3D start; + info->image.len =3D end - start; =20 info->load =3D kernel_zimage_load; =20 @@ -403,7 +403,7 @@ static int __init kernel_zimage32_probe(struct kernel_i= nfo *info, return 0; } =20 -int __init kernel_zimage_probe(struct kernel_info *info, paddr_t addr, +int __init kernel_image_probe(struct kernel_info *info, paddr_t addr, paddr_t size) { int rc; diff --git a/xen/common/device-tree/kernel.c b/xen/common/device-tree/kerne= l.c index 28096121a52d..cfa27464f0fc 100644 --- a/xen/common/device-tree/kernel.c +++ b/xen/common/device-tree/kernel.c @@ -235,7 +235,7 @@ int __init kernel_probe(struct kernel_info *info, if ( rc && rc !=3D -EINVAL ) return rc; =20 - rc =3D kernel_zimage_probe(info, mod->start, mod->size); + rc =3D kernel_image_probe(info, mod->start, mod->size); =20 return rc; } diff --git a/xen/include/xen/fdt-kernel.h b/xen/include/xen/fdt-kernel.h index 33a60597bb4d..2af3bd5f0722 100644 --- a/xen/include/xen/fdt-kernel.h +++ b/xen/include/xen/fdt-kernel.h @@ -56,7 +56,7 @@ struct kernel_info { paddr_t text_offset; /* 64-bit Image only */ #endif paddr_t start; /* Must be 0 for 64-bit Image */ - } zimage; + } image; }; =20 #if __has_include() @@ -122,7 +122,7 @@ void kernel_load(struct kernel_info *info); =20 int kernel_decompress(struct boot_module *mod, uint32_t offset); =20 -int kernel_zimage_probe(struct kernel_info *info, paddr_t addr, paddr_t si= ze); +int kernel_image_probe(struct kernel_info *info, paddr_t addr, paddr_t siz= e); =20 /* * uImage isn't really used nowadays thereby leave kernel_uimage_probe() --=20 2.53.0 From nobody Sun Apr 12 22:37:39 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=1775836545; cv=none; d=zohomail.com; s=zohoarc; b=id88Ev8YWiMNSE1nzWmKMOCm/UOiy7b+nieLy6Y2dkaP7CPL4sB0ADojpU0YZ4xPDg9xKBUy9Gt9/e6aouTaNwuNiLBtGj85eQJhPycSjWhL71Su9hGjVHnhX58PQb5h0Aj7Mkhi+EekOKY+qZIgi1LzqK+oki79sraNlufYFEM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836545; 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=B5ZH7rQJo78iVZbYMuHhA9Tl/XiBD/nIpAdpGmDqucg=; b=biDBngvTkgLuxtd20brm+V3EJnbrsQNSwfhC6m8UKE9Ea4Nm2MKEYJEtMwX0Xj19FBcTVuuFF5pBT+WX/+nrbD43K3yWTcPZqTOM7k45cyo+s4X6H0CR5UMKntcTiqPf0RHd2wo6Jqq2DcGIYQ/1m8NGbJNGpbA0AWXOuldPDVc= 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 1775836545460646.4572305703094; Fri, 10 Apr 2026 08:55:45 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279419.1563878 (Exim 4.92) (envelope-from ) id 1wBECU-0007xK-V0; Fri, 10 Apr 2026 15:55:18 +0000 Received: by outflank-mailman (output) from mailman id 1279419.1563878; Fri, 10 Apr 2026 15:55:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECU-0007wr-R8; Fri, 10 Apr 2026 15:55:18 +0000 Received: by outflank-mailman (input) for mailman id 1279419; Fri, 10 Apr 2026 15:55:17 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECS-0007Yn-SI for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:16 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECS-00Cgsb-89 for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:16 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d62-e002-0a2a0a5209dd-0a2a4509a384-2 for ; Fri, 10 Apr 2026 17:55:16 +0200 Received: from [209.85.128.45] (helo=mail-wm1-f45.google.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d64-bf79-0a2a45090019-d155802daca4-3 for ; Fri, 10 Apr 2026 17:55:16 +0200 Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-488a14c31eeso17203645e9.0 for ; Fri, 10 Apr 2026 08:55:16 -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.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:14 -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=1775836515; x=1776441315; 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=B5ZH7rQJo78iVZbYMuHhA9Tl/XiBD/nIpAdpGmDqucg=; b=nnd6pLLacLLQxFXoQZTBTas/aAPaGs+zWXRWBMHvtIZSL6uMkaKs5KbxepNfEUsyfC hRhvttFifqzWzm5r5j7jxvUSZcdP7peadLcWDo0IZQqDXgEKM/axwiP83RMgp/zIMwU+ ie0yGW/9EMqjRl7TZN/QRCnSkXWIoSp90Fz7vx74zYnHXoJeS+MttWM3DB6h6J6hozOR /WBC6E+LNSJ9W68bApkhejh7yJg+wh4XMCudZVcncs5f2whu2iI4yfv+MNaCfEy6tT7P bPcvbBbmtfAQjI/UcHoFSUQuwBo2Rupt7VW+J5DtGSOHWicv8Vb5uN5R3yXBb2X75OTr xF8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836515; x=1776441315; 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=B5ZH7rQJo78iVZbYMuHhA9Tl/XiBD/nIpAdpGmDqucg=; b=i7kl1To89uhG5UBm4jwSBUiYut+pfozoNz3KD4ZgFj+4pKulVlpJ8ySworzf4dEQlt qze5pvPmLn7pqyFsFaReRFPWc8IzpLupKkkEjIBQIkAzhLdGwEyKM7RVvo+vExoxm6L2 N53I3x+gtA0HFtKXR3Hm94h75ZaExpJsj+cbWp9fUmhoWjTRsNYQoaNc4czDGSfA3C5O SIl0VHXp2R5qnuuXWhNz+wZDThHt5RpW7zMlgYACYtzC4VF1BYyWHi1som8p2+C9RUec 0WxFenxQ6bp6JyH34aI5ZHuaRfCZZy1zFH93RDTA0voyVgJ9DziZ9x4I5OBflvLRFMHd Ha/Q== X-Gm-Message-State: AOJu0YxCKrA6JE0CM88VHzANRTKaKiXWVXIvrjrnmf2yVAyiFCZ27kpp T5vucy1y8tmOQIvWOOTKlnRT0aA4ELeUweBo//omoZSzQCFxLAhP4cCip52jBA== X-Gm-Gg: AeBDievn0SMBEvyr7fOYEjCl8mdigIgU1DiHd3xcJ0PnunD+bZxKPOYZ1NgvVoxRfm0 iopLCDcsG6kskPA4nUxCml4fQU/rz8Q7Ur1zmv8nBt82t1U091QwMvurnizgJU6cjg8seOWqmGY mdk68wQrzbimANBYawyPxjZlxSpPpfQvkiNveQmJFc7D+gfakRxXhzAZIBy84tUCP9HD5z85RK4 gjzMQcD4XWQmoxa2UK8/9IqErE3L93NO25eQjL8rEDntlMAtzZ9ql7/FQq3f6Jo/l5Jh3H8m4G5 xbMl+eghclq0PJQcLJyZBGYagUWjaA79oJs2ZFW7ODQnztYDFjVUCFGKWHXraHQxSfYoyt3gkCj K39JXDX6tbzbx2Zp9J4EiqnBVdsdEiGDla9lgdK2j+JRp8QxaGbFBjoTls9lI3WFdV9GDruFKrT hce1+Tl2+wf28bSCMoJM/t+B9bX1GiZZfzs0sJ8ExcHVV0FXMRmABm4sqDQGcyln/TGQ== X-Received: by 2002:a05:600c:8284:b0:488:d228:a133 with SMTP id 5b1f17b1804b1-488d683d280mr45886265e9.14.1775836515301; Fri, 10 Apr 2026 08:55:15 -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 05/12] xen/riscv: add kernel loading support Date: Fri, 10 Apr 2026 17:54:51 +0200 Message-ID: <29ec8e444792caa925ba92cdc406ef8c0b3bd678.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-bad1c0/1775836516-57941152-7002F875/10/73395122804 X-purgate-type: spam X-purgate-size: 11722 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836547068158500 Content-Type: text/plain; charset="utf-8" Introduce support for loading a Linux kernel Image which is got by uncompressing of Image.gz on RISC-V. kernel_image_load() and place_modules() currently call panic() on failure rather than returning an error. This is because the common kernel_load() in common/device-tree/kernel.c does not expect a return code. Handling errors gracefully would require a separate refactor. The implementation is based on the Xen Arm kernel loading code. text_offset is available for both 32-bit and 64-bit Image, so fix that. Signed-off-by: Oleksii Kurochko --- Changes in v3: - s/kernel.o/kernel.init.o. - s/struct kernel_info *info/const struct kernel_info *info for kernel_ima= ge_place - s/ioremap_wc/ioremap_cache() inside kernel_image_load(). - s/u/uint. - Drop hard tabs. - Add le{32,64}_to_cpu() when correpondent le endian fields are read. - Update the comment in kernel_image64_probe() about initialization of end= of image64. - Introduce image_size to pass to kernel load function total size of kernel it will have at runtime. - Update kernel_image_place() to not put Image always to bank 0. - Update place_modules() function to deal with different banks. - Propage error up the call chain in kernel_image_probe().=20 --- Changes in v2: - s/zimage/image as RISC-V doesn't support zImages, only Image and Image.{gz,...}. - Update the commit message. --- xen/arch/riscv/Makefile | 1 + xen/arch/riscv/include/asm/config.h | 13 ++ xen/arch/riscv/kernel.c | 230 ++++++++++++++++++++++++++++ xen/include/xen/fdt-kernel.h | 11 +- 4 files changed, 253 insertions(+), 2 deletions(-) create mode 100644 xen/arch/riscv/kernel.c diff --git a/xen/arch/riscv/Makefile b/xen/arch/riscv/Makefile index cfc3fdf7d208..eecdcbc76867 100644 --- a/xen/arch/riscv/Makefile +++ b/xen/arch/riscv/Makefile @@ -8,6 +8,7 @@ obj-y +=3D guestcopy.o obj-y +=3D imsic.o obj-y +=3D intc.o obj-y +=3D irq.o +obj-y +=3D kernel.init.o obj-y +=3D mm.o obj-y +=3D p2m.o obj-y +=3D paging.o diff --git a/xen/arch/riscv/include/asm/config.h b/xen/arch/riscv/include/a= sm/config.h index 0613de008b13..fd69057826e1 100644 --- a/xen/arch/riscv/include/asm/config.h +++ b/xen/arch/riscv/include/asm/config.h @@ -151,6 +151,19 @@ extern unsigned long phys_offset; /* =3D load_start - XEN_VIRT_START */ #endif =20 +/* + * KERNEL_LOAD_ADDR_ALIGNMENT is defined based on paragraph of + * "Kernel location" of boot.rst: + * https://docs.kernel.org/arch/riscv/boot.html#kernel-location + */ +#if defined(CONFIG_RISCV_32) +#define KERNEL_LOAD_ADDR_ALIGNMENT MB(4) +#elif defined(CONFIG_RISCV_64) +#define KERNEL_LOAD_ADDR_ALIGNMENT MB(2) +#else +#error "Define KERNEL_LOAD_ADDR_ALIGNMENT" +#endif + #endif /* ASM__RISCV__CONFIG_H */ /* * Local variables: diff --git a/xen/arch/riscv/kernel.c b/xen/arch/riscv/kernel.c new file mode 100644 index 000000000000..6d58f3372358 --- /dev/null +++ b/xen/arch/riscv/kernel.c @@ -0,0 +1,230 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define IMAGE64_MAGIC_V2 0x05435352 /* Magic number 2, le, "RSC\x05" */ + +static void __init place_modules(struct kernel_info *info, paddr_t kernbas= e, + paddr_t kernend) +{ + const struct boot_module *mod =3D info->bd.initrd; + const struct membanks *banks =3D kernel_info_get_mem_const(info); + const paddr_t initrd_len =3D ROUNDUP(mod ? mod->size : 0, + KERNEL_LOAD_ADDR_ALIGNMENT); + const paddr_t dtb_len =3D ROUNDUP(fdt_totalsize(info->fdt), + KERNEL_LOAD_ADDR_ALIGNMENT); + const paddr_t modsize =3D initrd_len + dtb_len; + int bi; + + BUG_ON(modsize < initrd_len); + + /* + * Place modules as high in RAM as possible, scanning banks from + * last to first so that the end of the last bank is preferred. + */ + for ( bi =3D banks->nr_banks - 1; bi >=3D 0; bi-- ) + { + const struct membank *bank =3D &banks->bank[bi]; + const paddr_t bank_end =3D bank->start + bank->size; + paddr_t modbase; + + if ( modsize > bank->size ) + continue; + + modbase =3D ROUNDDOWN(bank_end - modsize, KERNEL_LOAD_ADDR_ALIGNME= NT); + + if ( modbase < bank->start ) + continue; + + /* + * If the kernel resides in this bank, ensure modules do not + * overlap with it. + */ + if ( (kernbase >=3D bank->start) && (kernbase < bank_end) && + (modbase < ROUNDUP(kernend, KERNEL_LOAD_ADDR_ALIGNMENT)) && + (modbase + modsize > kernbase) ) + continue; + + info->dtb_paddr =3D modbase; + info->initrd_paddr =3D modbase + dtb_len; + + return; + } + + panic("Unable to find suitable location for dtb+initrd\n"); +} + +static paddr_t __init kernel_image_place(struct kernel_info *info) +{ + paddr_t load_addr =3D INVALID_PADDR; + uint64_t image_size =3D info->image.image_size ?: info->image.len; + const struct membanks *banks =3D kernel_info_get_mem_const(info); + unsigned int nr_banks =3D banks->nr_banks; + unsigned int bi; + + dprintk(XENLOG_DEBUG, "nr_banks(%u)\n", nr_banks); + + /* + * At the moment, RISC-V's Linux kernel should be always position + * independent based on "Per-MMU execution" of boot.rst: + * https://docs.kernel.org/arch/riscv/boot.html#pre-mmu-execution + * + * But just for the case when RISC-V's Linux kernel isn't position + * independent it is needed to take load address from + * info->image.start. + * + * If `start` is zero, the Image is position independent. + */ + if ( likely(!info->image.start) ) + { + for ( bi =3D 0; bi !=3D nr_banks; bi++ ) + { + const struct membank *bank =3D &banks->bank[bi]; + paddr_t bank_start =3D bank->start; + /* + * According to boot.rst kernel load address should be properly + * aligned: + * https://docs.kernel.org/arch/riscv/boot.html#kernel-locat= ion + * + * As Image in this case is PIC we can ignore + * info->image.text_offset. + */ + paddr_t aligned_start =3D ROUNDUP(bank_start, KERNEL_LOAD_ADDR= _ALIGNMENT); + paddr_t bank_end =3D bank_start + bank->size; + paddr_t bank_size; + + if ( aligned_start > bank_end ) + continue; + + bank_size =3D bank_end - aligned_start; + + dprintk(XENLOG_DEBUG, "bank[%u].start=3D%"PRIpaddr"\n", bi, ba= nk->start); + + if ( image_size <=3D bank_size ) + { + load_addr =3D aligned_start; + break; + } + } + } + else + { + load_addr =3D info->image.start + info->image.text_offset; + + WARN_ON(!IS_ALIGNED(load_addr, KERNEL_LOAD_ADDR_ALIGNMENT)); + + for ( bi =3D 0; bi !=3D nr_banks; bi++ ) + { + const struct membank *bank =3D &banks->bank[bi]; + paddr_t bank_start =3D bank->start; + paddr_t bank_end =3D bank_start + bank->size; + + if ( (load_addr >=3D bank_start) && (load_addr < bank_end) && + (bank_end - load_addr) >=3D image_size ) + break; + } + } + + if ( bi =3D=3D nr_banks ) + panic("Failed to place kernel image in any memory bank\n"); + + info->entry =3D load_addr; + + return load_addr; +} + +static void __init kernel_image_load(struct kernel_info *info) +{ + int rc; + paddr_t load_addr =3D kernel_image_place(info); + paddr_t paddr =3D info->image.kernel_addr; + paddr_t len =3D info->image.len; + paddr_t effective_size =3D info->image.image_size ?: len; + void *kernel; + + place_modules(info, load_addr, load_addr + effective_size); + + printk("Loading Image from %"PRIpaddr" to %"PRIpaddr"-%"PRIpaddr"\n", + paddr, load_addr, load_addr + effective_size); + + kernel =3D ioremap_cache(paddr, len); + + if ( !kernel ) + panic("Unable to map kernel\n"); + + /* Move kernel to proper location in guest phys map */ + rc =3D copy_to_guest_phys(info->bd.d, load_addr, kernel, len); + + if ( rc ) + panic("Unable to copy kernel to proper guest location\n"); + + iounmap(kernel); +} + +/* Check if the image is a 64-bit Image */ +static int __init kernel_image64_probe(struct kernel_info *info, + paddr_t addr, paddr_t size) +{ + /* riscv/boot-image-header.rst */ + struct { + uint32_t code0; /* Executable code */ + uint32_t code1; /* Executable code */ + uint64_t text_offset; /* Image load offset, little endian */ + uint64_t image_size; /* Effective Image size, little endian */ + uint64_t flags; /* kernel flags, little endian */ + uint32_t version; /* Version of this header */ + uint32_t res1; /* Reserved */ + uint64_t res2; /* Reserved */ + uint64_t magic; /* Deprecated: Magic number, little endian= , "RISCV" */ + uint32_t magic2; /* Magic number 2, little endian, "RSC\x05= " */ + uint32_t res3; /* Reserved for PE COFF offset */ + } image; + uint64_t effective_size; + + if ( size < sizeof(image) ) + return -EINVAL; + + copy_from_paddr(&image, addr, sizeof(image)); + + /* Magic v1 is deprecated and may be removed. Only use v2 */ + if ( le32_to_cpu(image.magic2) !=3D IMAGE64_MAGIC_V2 ) + return -EINVAL; + + effective_size =3D le64_to_cpu(image.image_size); + + if ( effective_size && size > effective_size ) + return -EINVAL; + + info->image.kernel_addr =3D addr; + /* Actual size in the binary file */ + info->image.len =3D size; + /* Total memory the kernel occupies at runtime */ + info->image.image_size =3D effective_size; + info->image.text_offset =3D le64_to_cpu(image.text_offset); + info->image.start =3D 0; + + info->load =3D kernel_image_load; + + return 0; +} + +int __init kernel_image_probe(struct kernel_info *info, paddr_t addr, + paddr_t size) +{ +#ifdef CONFIG_RISCV_64 + return kernel_image64_probe(info, addr, size); +#else + return -EOPNOTSUPP; +#endif +} diff --git a/xen/include/xen/fdt-kernel.h b/xen/include/xen/fdt-kernel.h index 2af3bd5f0722..aa977a50f4fc 100644 --- a/xen/include/xen/fdt-kernel.h +++ b/xen/include/xen/fdt-kernel.h @@ -52,8 +52,15 @@ struct kernel_info { struct { paddr_t kernel_addr; paddr_t len; -#if defined(CONFIG_ARM_64) || defined(CONFIG_RISCV_64) - paddr_t text_offset; /* 64-bit Image only */ +#if defined(CONFIG_ARM_64) || defined(CONFIG_RISCV) + /* + * ARM: 64-bit Image only. + * RISC-V: both 32-bit and 64-bit Images. + */ + paddr_t text_offset; +#endif +#if defined(CONFIG_RISCV) + uint64_t image_size; /* Effective size of Image */ #endif paddr_t start; /* Must be 0 for 64-bit Image */ } image; --=20 2.53.0 From nobody Sun Apr 12 22:37:39 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=1775836538; cv=none; d=zohomail.com; s=zohoarc; b=LVQPaslb5gDHPv9fVmFqNtY0W1DVyjZpmEq2lDnoX7IydXL6mgps7/uiPmf8eplCYj5QQQX5TOXAI3fRnq19Re8cq3zHxCeCOvAoGQN4jmQsIaKV7H1LW1MIY0OQCEq99vs4+CtPlGHp/GKyJIjteKfyuSOqXi+vZEG1fXfBL1Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836538; 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=jesQc90kE0KVLHrdzzOKKDZHPJckxKYzRoNevvlkGgU=; b=hP1UVnfqvdk7C9Fe9E+RYpa3jiLxabmRzOHLZxpCvOT+BcieAy7rrlc2EnvAp6TlkeKabumyLft15SetETRlMVcIurAL5CheHN9fTVu2p/0w3vq6aoLR8tRQ9pDCEhiCAI9NVz9h0bE/qgwTQ3cG37lN5dzUU0jN95ux/jeS5BQ= 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 1775836538852662.7063183499606; Fri, 10 Apr 2026 08:55:38 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279420.1563884 (Exim 4.92) (envelope-from ) id 1wBECV-000819-E6; Fri, 10 Apr 2026 15:55:19 +0000 Received: by outflank-mailman (output) from mailman id 1279420.1563884; Fri, 10 Apr 2026 15:55:19 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECV-00080C-4q; Fri, 10 Apr 2026 15:55:19 +0000 Received: by outflank-mailman (input) for mailman id 1279420; Fri, 10 Apr 2026 15:55:18 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECU-0007kD-06 for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:18 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECT-00DRfX-CL for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:17 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d5e-5cb7-0a2a0a5109dd-0a2a450183fa-12 for ; Fri, 10 Apr 2026 17:55:17 +0200 Received: from [209.85.128.41] (helo=mail-wm1-f41.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d65-6fc9-0a2a45010019-d1558029c9ce-3 for ; Fri, 10 Apr 2026 17:55:17 +0200 Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-488b8bc6bc9so15800415e9.3 for ; Fri, 10 Apr 2026 08:55:17 -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.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:16 -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=1775836517; x=1776441317; 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=jesQc90kE0KVLHrdzzOKKDZHPJckxKYzRoNevvlkGgU=; b=mayyM5qlzM//SwrYlQ1Kzb40LKMWwYnfzPJERr22dj6S5bwEdYdASQ6LDwfoZURrW2 vTqI395p6uEMTwrhf9Ix31V1H/c5BtWFxU48lyekTQJvHJPBY3Skae2T1NQ0fnE0EtvH lMR/tRUWAnvc6KKRgneOH4XsDdEwFJCjzXnElsqeMdj6+wzX0PR+3DtpGkyI04HXrBNN 76c00vtHn2AEzY8Vr8ucr5Sm8h797Zzwl9sPKpiloan38CfyQaIDnsDzK7FB6F+CPdDn JlzaatcHSOLFLScbCzkQf++elg2pvocNxPGoS1PDKCKo8138h3zVOziL49ArD9HDhczY hVZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836517; x=1776441317; 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=jesQc90kE0KVLHrdzzOKKDZHPJckxKYzRoNevvlkGgU=; b=A0GbsWhKoPYabwdRP2Ii25zn8TCaiC/Wf/teB7phvYfCQ4OUOTm6KDsLHrIWMDOuqO QkX7SmWDCJ6DmMWn6yYm1r5mXhhF95F8abJOwb8VavanljNqKE/fLZNDvrbMRslLzLm1 2tYOGBRMJJCTOcOalD3B1Xpe8PWIUWLs5csSbVMk6lGUtFLBpY6TUo8HaZSq6mLmUlqq Y7HSlZPE2t3GPyuKXXgyUpY50C63tWL9N4VomaT3cwFl6dlrEIqp3Qm59h67cdOxwhab iTmepCg92hRbg8h1C9ELySuJWdmRXejIxikRR0jiBFkvpwGw+ZRMmuwstjOBQc5YoIcF 7pyQ== X-Gm-Message-State: AOJu0YyCuACEDO/dyFxuQJSE1c+9nHV4qyWdoGrsJ/Fo/IVxl0vhQKmq 3MuDa8KSFmbjGYrpyRutK/0ID4yL4ko+qA1DydCyFsWcvWIY9G1ymGG4Wxezbg== X-Gm-Gg: AeBDieu7HkCf+U9rebNZMpt1/OD0ZWhvMUIieFw9TVPJOxauV2Fd89lKAB5P7wscZ4p 6vPFsQF40NIHkSZt8GD6GczvB6bICLldlMAUq1vVbrHu0m4mf8ly/5ydgC1y3KCuZvSN4kWqJIQ lxx5g/LhN1cv7utAhd5toABEX0dJ0Ggf47ubkTBmR8qQNp61HIaBrTWbVN4OXUqBMGLNrDqTbnv DdKgitEopNIXEiy1MMi0iBVLTPjZu53YDbMwVx+TlNOnOYwyKefbZ1qXqHvjZppSZmzleEVcGQC riyIRZfF+L4B+uakCGgBgWQVnX0FWiw9DnnOjDWqXlRjwYnhIvc5J9GEOy6TiY3uKdZaxEPaYaz Y6YkTbPMOY3OdqpX9PbxKFhg5umnA3OTjOcZYceUMsOkRNLYokE7SJFSf3BKCkHwWflC6jDHPHF XRApIv9ohoIOxv4jUb4Ejorq4H50gr0hAc0lTDkGZ2oWf38qxBlxMgfUiitOZY2mxSKw== X-Received: by 2002:a05:600c:a105:b0:486:af22:4a2a with SMTP id 5b1f17b1804b1-488d681f281mr33975715e9.7.1775836516480; Fri, 10 Apr 2026 08:55:16 -0700 (PDT) From: Oleksii Kurochko To: xen-devel@lists.xenproject.org Cc: Romain Caritey , Oleksii Kurochko , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Andrew Cooper , Anthony PERARD , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v3 06/12] xen: move declaration of fw_unreserved_regions() to common header Date: Fri, 10 Apr 2026 17:54:52 +0200 Message-ID: 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/1775836517-B4967185-119067A8/10/73395122804 X-purgate-type: spam X-purgate-size: 1452 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836540974154100 Content-Type: text/plain; charset="utf-8" Since the implementation of fw_unreserved_regions() is in common code, move its declaration to xen/bootinfo.h. Signed-off-by: Oleksii Kurochko --- Changes in v2-v3: - Nothing changed. Only rebase. --- xen/arch/arm/include/asm/setup.h | 3 --- xen/include/xen/bootinfo.h | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/xen/arch/arm/include/asm/setup.h b/xen/arch/arm/include/asm/se= tup.h index 899e33925ca4..0d29b46ea52b 100644 --- a/xen/arch/arm/include/asm/setup.h +++ b/xen/arch/arm/include/asm/setup.h @@ -43,9 +43,6 @@ int acpi_make_efi_nodes(void *fdt, struct membank tbl_add= []); void create_dom0(void); =20 void discard_initial_modules(void); -void fw_unreserved_regions(paddr_t s, paddr_t e, - void (*cb)(paddr_t ps, paddr_t pe), - unsigned int first); =20 void init_pdx(void); void setup_mm(void); diff --git a/xen/include/xen/bootinfo.h b/xen/include/xen/bootinfo.h index f834f1957155..dbf492c2e36e 100644 --- a/xen/include/xen/bootinfo.h +++ b/xen/include/xen/bootinfo.h @@ -210,4 +210,8 @@ static inline struct membanks *membanks_xzalloc(unsigne= d int nr, return banks; } =20 +void fw_unreserved_regions(paddr_t s, paddr_t e, + void (*cb)(paddr_t ps, paddr_t pe), + unsigned int first); + #endif /* XEN_BOOTINFO_H */ --=20 2.53.0 From nobody Sun Apr 12 22:37:39 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=1775836545; cv=none; d=zohomail.com; s=zohoarc; b=Pg3LEpwicHo+0gehK52MYQDH2mPkkUaWMS59H6UOOLdm5XKbbvbYjYLOibacdqR+i+9afsM9h4fZ5kQoVyKYTPrsaR0Lrcm0szcdK9F3niJMvho4m1zMcITiAdXvE1se52oxvWgUACET1XsukkrW1RJL+lSE1U6IryZFwdG2gic= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836545; 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=/4qhZ+8GYYcp7jmfiAyFTdQWpQtMp/eabTrs/ZmAwow=; b=gJtYWyudvf/Ci8oVpaKpPIq/adaIrPGRZ+k1F/Kvyn7OalOZHI05nNw818NDSgUPaaymX3Xwh+JjYMZvtHWoDgg6HFBFLob1YIecUGsm/M6bZ7Agx4n7ZNNHyVZLsxlrE1/sSerokOQ07jJNnYx0vuRGRDcpu06xLfyojDvOtI8= 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 1775836545164206.19289330489357; Fri, 10 Apr 2026 08:55:45 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279422.1563896 (Exim 4.92) (envelope-from ) id 1wBECX-0008Sj-1Z; Fri, 10 Apr 2026 15:55:21 +0000 Received: by outflank-mailman (output) from mailman id 1279422.1563896; Fri, 10 Apr 2026 15:55:21 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECW-0008SG-Qh; Fri, 10 Apr 2026 15:55:20 +0000 Received: by outflank-mailman (input) for mailman id 1279422; Fri, 10 Apr 2026 15:55:19 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECV-0007xm-6l for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:19 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECU-00DRfX-Io for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:18 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d5e-5cb7-0a2a0a5109dd-0a2a450183fa-18 for ; Fri, 10 Apr 2026 17:55:18 +0200 Received: from [209.85.128.48] (helo=mail-wm1-f48.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d66-6fc9-0a2a45010019-d1558030c4d2-3 for ; Fri, 10 Apr 2026 17:55:18 +0200 Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-488c2690057so21734005e9.0 for ; Fri, 10 Apr 2026 08:55:18 -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.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:17 -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=1775836518; x=1776441318; 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=/4qhZ+8GYYcp7jmfiAyFTdQWpQtMp/eabTrs/ZmAwow=; b=pjSsxaFKtWTHxQ/sRV6fUzOTfKcWByj49lHDgoRo7NJx7KJHtcSDnUX5SOdTjhK5Uj UpMOgELMNUBUjiELa09Mc625OeqglUYEJJoTo0nzSKtrbzvv/KLeqU78PtJ80Cxl6U4q y4uMDM7JEhl45B/sMrHt+nPUtJop1Vf9D9idOP4zeeLLTWSbJiwzOxvCM5MvelGKGohr Jek5RQNDjgzkHDy4zZDJ8z15DdrKhkVOV2zf38PupwO2Q92cvlf0vJ74daNqMVwilEXT 4rjE58cwlpwi/rw8n1eqAcnnwm+19AbFRx3qxDBwQXZK+NOukSulCYqrN5syGakQADLD FD3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836518; x=1776441318; 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=/4qhZ+8GYYcp7jmfiAyFTdQWpQtMp/eabTrs/ZmAwow=; b=Qhe+/wDInL3gDiYnSPOQ360OoRAxT8rwdGf0KJVE4E+5He1v09pOnzJTQ48HHFqCHl ljagoaJ+ggnelIT7ItbDiJT6EKqdq8TIoHygCeA3Lq+53UGQ2qLO87FlgUhjxPxYFJRg vEQn/LoFHUBl7huQTE23AKwT6f6c5/zH6REQWFqvaiyyoqIuDsaktNUnPkR4ZPpAITMR jEwRBYkaCYwc6oH+Wukgy460p3ykKy2Dzs7fA7sI9fZ6PE+Kshc/tVTYHwr8f2iPDs29 MQ7ECrUJ/DSXY0tr8EQSU1vE4mt7NMYkNLehsEOQ4+utGVSjPecAf1HAGASbqV0yRC77 Qm/Q== X-Gm-Message-State: AOJu0YzQMeEqe+q2h6ft032AIj0a8TUfViJ5uDmV090kOszlxp0xpVwT euPXpA/ivRoYpS4ybkYk0vZCVxnvHBeV3U2uyasNnFyyNgXq6CWZRdh7c/9m0g== X-Gm-Gg: AeBDievIVYZHwTP2Xv3NqZgs92eaN9wYNODsa2+L2V86LiKjwjudOJP1MIUeeFxDg35 pHViMzp8PjwCdCJiRI41OiGLagehV2AAbEvkDr/QjoqL+A9LKrx2e6u0PFSwHRAq0fJ2b2JW02X CMnuo19Bx1EOyyqCiLUPHV1FlDt+iq7Ubr0NVoG75S/audCFdStYMrRbmzS/avTrvSpRTeCYbfe JPME+JmdNqEiryIQAslKapPYN8CQ8+3j6e4trOJgsiB+RDlyiUgaFgJQdhxWqBQ4T3kQZf4nMbY 0qdCpcXHyFDoNA1y1ri0ZLi1F1kDlHjqWdGB7H20qLvKDG3kH3G+/b8ZP4sXXOM0GzHkJ27bEoF XVbD4NseqXWdFOj+7/9C7mBGAz3c9kXISU2T1yfMjAAEaPYEM2bDLAbhFEJd716plZnnANFTGCd JR5uGe+o3MQtw3l9LgeZGtfFqnVYIidGAhge957/RdpFR8wl0J7NpWaonvdiJhFkPBAQ== X-Received: by 2002:a05:600c:4e4d:b0:485:3193:6ddb with SMTP id 5b1f17b1804b1-488d6808507mr49943295e9.3.1775836517625; Fri, 10 Apr 2026 08:55:17 -0700 (PDT) From: Oleksii Kurochko To: xen-devel@lists.xenproject.org Cc: Romain Caritey , Oleksii Kurochko , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Andrew Cooper , Anthony PERARD , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v3 07/12] xen: introduce domain-layout.h with common domain_use_host_layout() Date: Fri, 10 Apr 2026 17:54:53 +0200 Message-ID: <2057380b431df202adedf852ad492dd0f156f863.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-d62444/1775836518-154EE185-F1932820/10/73395122804 X-purgate-type: spam X-purgate-size: 5440 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836546990154100 Content-Type: text/plain; charset="utf-8" domain_use_host_layout() is not architecture-specific and may be needed on x86 [1]. Replace the ARM-specific macro in asm/domain.h with a common static inline in a new dedicated header, xen/domain-layout.h. xen/domain.h would be the natural home, but placing it there would require including xen/paging.h (for paging_mode_translate()) and xen/sched.h (for is_hardware_domain()), which would introduce circular dependencies. A separate header that callers opt into avoids this. Adjust the implementation to take paging_mode_translate() into account so it works correctly for all architectures, including x86. Some extra details about implementation [2] and [3]. [1] https://lore.kernel.org/xen-devel/alpine.DEB.2.22.394.2602161038120.359= 097@ubuntu-linux-20-04-desktop/ [2] https://lore.kernel.org/xen-devel/alpine.DEB.2.22.394.2602271742400.314= 8344@ubuntu-linux-20-04-desktop/ [3] https://lore.kernel.org/xen-devel/alpine.DEB.2.22.394.2602271750190.314= 8344@ubuntu-linux-20-04-desktop/ Suggested-by: Stefano Stabellini Signed-off-by: Oleksii Kurochko --- Changes in v3: - Make argument of domain_use_host_layout() const. - Create a separate header to avoid circular heder dependecy and making domain_use_host_layour() as static inline. - Rework domain_use_host_layout() to be protected by paging_mode_translate= (). - Update the commit message. --- Changes in v2: - Drop ifdef around defintion of domain_use_host_layout() as it was suggested generic version. It could be returned back when the real use case for it will appear. - Add Suggested-by: and update the commit message. - Make domain_use_host_layout() function instead of macros to avoid ciclular header dependecies. Look at more details in the commit message. --- xen/arch/arm/domain_build.c | 1 + xen/arch/arm/include/asm/domain.h | 14 -------------- xen/arch/arm/vgic-v3.c | 1 + xen/common/device-tree/domain-build.c | 1 + xen/include/xen/domain-layout.h | 28 +++++++++++++++++++++++++++ 5 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 xen/include/xen/domain-layout.h diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 6c17a84b2633..60a7cbf915a5 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include diff --git a/xen/arch/arm/include/asm/domain.h b/xen/arch/arm/include/asm/d= omain.h index ffe5d0d9f0a6..f95ad1285e6e 100644 --- a/xen/arch/arm/include/asm/domain.h +++ b/xen/arch/arm/include/asm/domain.h @@ -30,20 +30,6 @@ enum domain_type { #define is_64bit_domain(d) (0) #endif =20 -/* - * Is the domain using the host memory layout? - * - * Direct-mapped domain will always have the RAM mapped with GFN =3D=3D MF= N. - * To avoid any trouble finding space, it is easier to force using the - * host memory layout. - * - * The hardware domain will use the host layout regardless of - * direct-mapped because some OS may rely on a specific address ranges - * for the devices. - */ -#define domain_use_host_layout(d) (is_domain_direct_mapped(d) || \ - is_hardware_domain(d)) - struct vtimer { struct vcpu *v; int irq; diff --git a/xen/arch/arm/vgic-v3.c b/xen/arch/arm/vgic-v3.c index 77aab5c3c293..77517c303061 100644 --- a/xen/arch/arm/vgic-v3.c +++ b/xen/arch/arm/vgic-v3.c @@ -10,6 +10,7 @@ */ =20 #include +#include #include #include #include diff --git a/xen/common/device-tree/domain-build.c b/xen/common/device-tree= /domain-build.c index 540627b74e96..e706a6173ba6 100644 --- a/xen/common/device-tree/domain-build.c +++ b/xen/common/device-tree/domain-build.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only */ =20 #include +#include #include #include #include diff --git a/xen/include/xen/domain-layout.h b/xen/include/xen/domain-layou= t.h new file mode 100644 index 000000000000..15cbb1813c8a --- /dev/null +++ b/xen/include/xen/domain-layout.h @@ -0,0 +1,28 @@ +#ifndef __XEN_DOMAIN_LAYOUT_H__ +#define __XEN_DOMAIN_LAYOUT_H__ + +#include +#include +#include + +/* + * Is a domain using the host memory layout? + * + * domain_use_host_layout() is always False for PV guests. + * + * Direct-mapped domains (autotranslated domains with memory allocated + * contiguously and mapped 1:1 so that GFN =3D=3D MFN) are always using the + * host memory layout to avoid address clashes. + * + * The hardware domain will use the host layout (regardless of + * direct-mapped) because some OS may rely on specific address ranges + * for the devices. PV Dom0, like any other PV guests, has + * domain_use_host_layout() returning False. + */ +static inline bool domain_use_host_layout(const struct domain *d) +{ + return paging_mode_translate(d) && + (is_domain_direct_mapped(d) || is_hardware_domain(d)); +} + +#endif /* __XEN_DOMAIN_LAYOUT_H__ */ --=20 2.53.0 From nobody Sun Apr 12 22:37:39 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=1775836538; cv=none; d=zohomail.com; s=zohoarc; b=AGvP2Qi0jQG+UTO2DsHlpOkR4ZSsZPCzUCruNJTb75XLW6nsP/WXBnuUVBz1Gwu9BZ+Ls+IKlcKIk7BSeBNJrPEhgOkLLygwhA17LxAhkD10ow4c+c3YTu9DJgHdh0OqS9svm4M/8eHR9kJPc3ZKIfTfQG7ua3zBZY401VwBeVw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836538; 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=djlyIF5R+CWEfFCif4JaIJrt1D+sAomgl/JLYjj3hDI=; b=NGR+e6IAC6Kt9c4IWLjtsaIlLqZKst4V6AaL28ZREcwNX6MtL7LJuMK8H/QKxm5p1wOslhuPMVkxVec/Py4CQ1wqE13ePxDUmhZsG5TmL7BLAiH1fK2jYfzB2Vm9LjfWjm0e8PXliStJywJwmZ0sRofSs5DynJ2JLDw8LXEPbMg= 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 1775836538832369.91051181524983; Fri, 10 Apr 2026 08:55:38 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279424.1563901 (Exim 4.92) (envelope-from ) id 1wBECX-0008WF-HM; Fri, 10 Apr 2026 15:55:21 +0000 Received: by outflank-mailman (output) from mailman id 1279424.1563901; Fri, 10 Apr 2026 15:55:21 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECX-0008VC-8Q; Fri, 10 Apr 2026 15:55:21 +0000 Received: by outflank-mailman (input) for mailman id 1279424; Fri, 10 Apr 2026 15:55:20 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECW-0008KK-Hl for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:20 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECV-00DRfX-Tj for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:19 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d67-5cb7-0a2a0a5109dd-0a2a450a9f28-6 for ; Fri, 10 Apr 2026 17:55:19 +0200 Received: from [209.85.128.44] (helo=mail-wm1-f44.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d67-ee98-0a2a450a0019-d155802cbde7-3 for ; Fri, 10 Apr 2026 17:55:19 +0200 Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-488b0046078so22060005e9.1 for ; Fri, 10 Apr 2026 08:55:19 -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.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:18 -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=1775836519; x=1776441319; 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=djlyIF5R+CWEfFCif4JaIJrt1D+sAomgl/JLYjj3hDI=; b=MzwOTpZyxdQMxkyKRB+s4Eahz7Bn4RaUQupeQYnbX6nkmnGD89O6OU6vRGiHhXH15D bBGhMmkqZK/egAssnZQG77rOcT3ZiwQIrQewqVFH+XLQ5wVJlRPdXfB/tI07oc6pLv4r e9qzu4ZIUnVOvpHZ4unDMnjk0S5u9/NUrRLjkCsH638t8ZCqHs06iGdQO8CHKFmr2jXb 93Uf6PFfCsia9/QG4WDpn9z/8GdwbUO01u6+x1+7Sl0SkiEpoiSBmpjzpXRlr/OyL5r3 jCmDda2Df1AX81ODXZrilfuotLX5JYp4knFRTgcGOPL4AofM3ouGAS98sBVvATt6Ihz7 5J9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836519; x=1776441319; 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=djlyIF5R+CWEfFCif4JaIJrt1D+sAomgl/JLYjj3hDI=; b=C+EXeYRisuZWf3T52xP2gYUFBX3VQH69SHLNTx0plWhaeJravBeJhH/+DabnQKPzjR TC/Rf2C5o7QXZoZu0fI8zpfC5pCaUFx1CrMND34n9tCvWJHQFHoDOlFiXmsuBaj6c565 B6dbVuE0gZNjEYbi79k/HTR9yPL2JG9JItdK6DCXPvISUISYWKjRrFZ3AhFr0lPMHjoo bVnazuMZXpceHA7rJOaCIgQTRdlGtkUm3ul1ewcQZgcsarOrQ89BdOjbxPIzvWEdesia QKPZGHkA26VWcRnh+iiGArQQBFiTjfSiWXSik0bSwjllq7ER9JRYaEv5LNtT6fIypbRI BnUA== X-Gm-Message-State: AOJu0YxA6QyatpT6dtLLgnoWXS+YK9nbSVa7RKgwg+5UcueEpzXBzrt4 LxwQZK9dJEe6ICzix31f/noijo2SMVAavFNZAMNxKsshbqCaLKT/I7JyPg+YfQ== X-Gm-Gg: AeBDies4hv6mAJLJSqsPXwr3srBWKP3aShax0XiwO4F+mbSEAZ0sYjm3S6vO0yZ8SjS Zj/uLDKl8BBDMRBMR83/48Qt9RKcf0LrSIXHlIZxOVs0NAftpMGzqjIx5V2Z8VZUyZ2AsPKbcHg JZ9LCq3q9RmIDBJ93k3QjfhyOSA7lMxRRebAfQWlkTB3P+hak7Xk5QeVRMS9ATbMOlZSiLMEwJw fbNQrOSau9Fks7UxYjE8h7tIe3rIWJAVYfXsZnBEIE5WEhL9FmyM9b1JxoBTDXWEIx9F+tG3s1/ cjFfmECfFVMbIxPCx9rSL4dwr18CeeGcxlMgZjFeosJgNg5zbyAOyASfjZUAv0QROeZWzecckZz YwMnPrFnL9BHyzanIqZ4e3Oo8lS/Qy8JXWI29Gl2UxbalL2fVlgFUIGaEN0/uiFKbbPdI0eGUGz w3Hx6qAQzMEieUHHxqU4qJkLXqmf6L17VR+1u6ekGb+Fn0MrXZ0WYXC89jffFZ46IQVw== X-Received: by 2002:a05:600c:46cb:b0:488:c51f:e04e with SMTP id 5b1f17b1804b1-488d67f3a0fmr50197155e9.13.1775836518875; Fri, 10 Apr 2026 08:55:18 -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 08/12] xen/riscv: rework G-stage mode handling Date: Fri, 10 Apr 2026 17:54:54 +0200 Message-ID: <94c914766171b732524d2d64c283e566595a4d22.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-4011c0/1775836519-BD3590B1-ACB91251/10/73395122804 X-purgate-type: spam X-purgate-size: 12904 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836541094154100 Content-Type: text/plain; charset="utf-8" Rework G-stage mode handling to make the selected mode descriptor reusable outside of p2m initialization, both for filling CPU nodes in the device tree passed to dom0less guests and for per-domain G-stage mode selection at domain creation time. Promote modes[] from a local __initconst variable inside gstage_mode_detect() to a file-scope static const array, and convert max_gstage_mode from an embedded struct (assigned by value) to a global const pointer into modes[]. This allows referencing both the mode identifier and the mode name after init without copying the descriptor. Remove get_max_supported_mode(); its callers now dereference max_gstage_mode->mode directly. Change struct p2m_domain::mode from an embedded gstage_mode_desc to a const pointer into modes[], so each domain shares the descriptor rather than carrying its own copy. Adjust the modes[] entries in three ways: - Use lowercase names without the "x4" suffix (e.g. "sv39" instead of "Sv39x4"). The DT mmu-type binding [1] does not include the suffix, so the name can now be passed directly to the guest without transformation. The suffix is appended only in the diagnostic printk, where it remains informative. - Use "none" for Bare mode (HGATP_MODE_OFF) to match the DT binding. - Change paging_levels to represent the root page-table level index (i.e. total paging levels minus one) rather than the total count. P2M_ROOT_LEVEL() now returns the correct VPN index directly, without requiring callers to subtract one or use hardcoded offsets. Add gstage_mode[8] to xen_arch_domainconfig so the toolstack can request a specific G-stage mode at domain creation time. Introduce find_gstage_mode() to resolve a mode descriptor by name (case-insensitive), capping the result at max_gstage_mode to prevent requesting a mode the hardware does not support. Update p2m_init() to accept a xen_domctl_createdomain pointer and call find_gstage_mode() instead of hardcoding Sv39x4. Add arch_parse_dom0less_node() in a new dom0less-build.c to read the "mmu-type" DT property from a guest domain node and store it in boot_domain::create_cfg.arch.gstage_mode, falling back to maximum supported mode when the property is absent. [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree= /Documentation/devicetree/bindings/riscv/cpus.yaml?h=3Dv6.19-rc3#n82 Signed-off-by: Oleksii Kurochko --- Changes in v3: - New patch. Was taken from another patch series: https://lore.kernel.org/xen-devel/cover.1773157782.git.oleksii.kurochko@= gmail.com/T/#m6eb886bdf718b06b967d1688314b80e7374a8de5 --- xen/arch/riscv/Makefile | 1 + xen/arch/riscv/dom0less-build.c | 30 ++++++++ xen/arch/riscv/include/asm/p2m.h | 11 +-- xen/arch/riscv/p2m.c | 113 +++++++++++++++++++++---------- xen/arch/riscv/vmid.c | 2 +- xen/include/public/arch-riscv.h | 5 ++ 6 files changed, 121 insertions(+), 41 deletions(-) create mode 100644 xen/arch/riscv/dom0less-build.c diff --git a/xen/arch/riscv/Makefile b/xen/arch/riscv/Makefile index eecdcbc76867..8f7fd625dddd 100644 --- a/xen/arch/riscv/Makefile +++ b/xen/arch/riscv/Makefile @@ -1,6 +1,7 @@ obj-y +=3D aplic.o obj-y +=3D cpufeature.o obj-y +=3D domain.o +obj-$(CONFIG_DOM0LESS_BOOT) +=3D dom0less-build.init.o obj-$(CONFIG_EARLY_PRINTK) +=3D early_printk.o obj-y +=3D entry.o obj-y +=3D extable.o diff --git a/xen/arch/riscv/dom0less-build.c b/xen/arch/riscv/dom0less-buil= d.c new file mode 100644 index 000000000000..11fa184d54be --- /dev/null +++ b/xen/arch/riscv/dom0less-build.c @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include + +#include + +int __init arch_parse_dom0less_node(struct dt_device_node *node, + struct boot_domain *bd) +{ + const char *mmu_type; + + if ( dt_property_read_string(node, "mmu-type", &mmu_type) ) + { + dprintk(XENLOG_WARNING, "mmu-type property is missing in guest dom= ain " + "node. %s will be used as fallback\n", max_gstage_mode->na= me); + + mmu_type =3D max_gstage_mode->name; + } + + if ( safe_strcpy(bd->create_cfg.arch.gstage_mode, mmu_type) ) + { + dprintk(XENLOG_ERR, "mmu-type value \"%s\" is too long\n", mmu_typ= e); + + return -EINVAL; + } + + return 0; +} diff --git a/xen/arch/riscv/include/asm/p2m.h b/xen/arch/riscv/include/asm/= p2m.h index 54ea67990f06..b5b6a996baeb 100644 --- a/xen/arch/riscv/include/asm/p2m.h +++ b/xen/arch/riscv/include/asm/p2m.h @@ -13,7 +13,7 @@ =20 #define P2M_ROOT_ORDER (ilog2(GSTAGE_ROOT_PAGE_TABLE_SIZE) - PAGE_SHIFT) #define P2M_ROOT_PAGES BIT(P2M_ROOT_ORDER, U) -#define P2M_ROOT_LEVEL(p2m) ((p2m)->mode.paging_levels) +#define P2M_ROOT_LEVEL(p2m) ((p2m)->mode->paging_levels) =20 /* * According to the RISC-V spec: @@ -55,6 +55,8 @@ struct gstage_mode_desc { char name[8]; }; =20 +extern const struct gstage_mode_desc *max_gstage_mode; + /* Per-p2m-table state */ struct p2m_domain { /* @@ -68,7 +70,7 @@ struct p2m_domain { /* The root of the p2m tree. May be concatenated */ struct page_info *root; =20 - struct gstage_mode_desc mode; + const struct gstage_mode_desc *mode; =20 /* Back pointer to domain */ struct domain *domain; @@ -215,9 +217,10 @@ static inline bool arch_acquire_resource_check(struct = domain *d) } =20 void guest_mm_init(void); -unsigned char get_max_supported_mode(void); =20 -int p2m_init(struct domain *d); +struct xen_domctl_createdomain; + +int p2m_init(struct domain *d, const struct xen_domctl_createdomain *confi= g); =20 static inline void p2m_write_lock(struct p2m_domain *p2m) { diff --git a/xen/arch/riscv/p2m.c b/xen/arch/riscv/p2m.c index d63697c89a1a..b0773083ff53 100644 --- a/xen/arch/riscv/p2m.c +++ b/xen/arch/riscv/p2m.c @@ -45,12 +45,27 @@ struct p2m_pte_ctx { unsigned int level; /* Paging level at which the PTE resides.= */ }; =20 -static struct gstage_mode_desc __ro_after_init max_gstage_mode =3D { - .mode =3D HGATP_MODE_OFF, - .paging_levels =3D 0, - .name =3D "Bare", +/* Values should be sorted by ->mode in this array */ +static const struct gstage_mode_desc modes[] =3D { + /* + * Based on the RISC-V spec: + * Bare mode is always supported, regardless of SXLEN. + * When SXLEN=3D32, the only other valid setting for MODE is Sv32. + * When SXLEN=3D64, three paged virtual-memory schemes are defined: + * Sv39, Sv48, and Sv57. + */ + { HGATP_MODE_OFF, 0, "none" }, +#ifdef CONFIG_RISCV_32 + { HGATP_MODE_SV32X4, 1, "sv32" }, +#else + { HGATP_MODE_SV39X4, 2, "sv39" }, + { HGATP_MODE_SV48X4, 3, "sv48" }, + { HGATP_MODE_SV57X4, 4, "sv57" }, +#endif }; =20 +const struct gstage_mode_desc * __ro_after_init max_gstage_mode =3D &modes= [0]; + 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, @@ -63,11 +78,6 @@ static inline void p2m_free_metadata_page(struct p2m_dom= ain *p2m, } } =20 -unsigned char get_max_supported_mode(void) -{ - return max_gstage_mode.mode; -} - /* * If anything is changed here, it may also require updates to * p2m_{get,set}_type(). @@ -148,23 +158,6 @@ static pte_t *p2m_get_root_pointer(struct p2m_domain *= p2m, gfn_t gfn) =20 static void __init gstage_mode_detect(void) { - static const struct gstage_mode_desc modes[] __initconst =3D { - /* - * Based on the RISC-V spec: - * Bare mode is always supported, regardless of SXLEN. - * When SXLEN=3D32, the only other valid setting for MODE is Sv3= 2. - * When SXLEN=3D64, three paged virtual-memory schemes are defin= ed: - * Sv39, Sv48, and Sv57. - */ -#ifdef CONFIG_RISCV_32 - { HGATP_MODE_SV32X4, 2, "Sv32x4" } -#else - { HGATP_MODE_SV39X4, 3, "Sv39x4" }, - { HGATP_MODE_SV48X4, 4, "Sv48x4" }, - { HGATP_MODE_SV57X4, 5, "Sv57x4" }, -#endif - }; - for ( unsigned int mode_idx =3D ARRAY_SIZE(modes); mode_idx-- > 0; ) { unsigned long mode =3D modes[mode_idx].mode; @@ -173,16 +166,16 @@ static void __init gstage_mode_detect(void) =20 if ( MASK_EXTR(csr_read(CSR_HGATP), HGATP_MODE_MASK) =3D=3D mode ) { - max_gstage_mode =3D modes[mode_idx]; + max_gstage_mode =3D &modes[mode_idx]; =20 break; } } =20 - if ( max_gstage_mode.mode =3D=3D HGATP_MODE_OFF ) + if ( max_gstage_mode->mode =3D=3D HGATP_MODE_OFF ) panic("Xen expects that G-stage won't be Bare mode\n"); =20 - printk("Max supported G-stage mode is %s\n", max_gstage_mode.name); + printk("Max supported G-stage mode is %sx4\n", max_gstage_mode->name); =20 csr_write(CSR_HGATP, 0); =20 @@ -283,7 +276,7 @@ static void clear_and_clean_page(struct page_info *page= , bool clean_dcache) unsigned long construct_hgatp(const struct p2m_domain *p2m, uint16_t vmid) { return MASK_INSR(mfn_x(page_to_mfn(p2m->root)), HGATP_PPN_MASK) | - MASK_INSR(p2m->mode.mode, HGATP_MODE_MASK) | + MASK_INSR(p2m->mode->mode, HGATP_MODE_MASK) | MASK_INSR(vmid, HGATP_VMID_MASK); } =20 @@ -331,8 +324,40 @@ static int p2m_alloc_root_table(struct p2m_domain *p2m) return 0; } =20 -int p2m_init(struct domain *d) +static const struct gstage_mode_desc * find_gstage_mode(const char *mmu_ty= pe) { + for ( unsigned int mode_idx =3D 0; mode_idx < ARRAY_SIZE(modes); mode_= idx++ ) + { + if ( !strcasecmp(mmu_type, modes[mode_idx].name) ) + { + if ( modes[mode_idx].mode =3D=3D HGATP_MODE_OFF || + modes[mode_idx].mode > max_gstage_mode->mode ) + break; + + return &modes[mode_idx]; + } + } + + ASSERT(modes[0].mode =3D=3D HGATP_MODE_OFF); + + dprintk(XENLOG_ERR, "Requested G-stage mode (%s) isn't supported\n", + mmu_type); + + /* + * Return the Bare-mode sentinel. p2m_init() will reject it with + * -EINVAL, producing the appropriate domain-creation failure. + */ + return &modes[0]; +} + +int p2m_init(struct domain *d, const struct xen_domctl_createdomain *confi= g) +{ + /* + * TODO: This static is a temporary constraint: all guests must use the + * same MMU mode because p2m_gpa_bits is not yet per-domain. + * Drop this once per-domain p2m_gpa_bits is introduced. + */ + static const struct gstage_mode_desc *m =3D &modes[0]; struct p2m_domain *p2m =3D p2m_get_hostp2m(d); =20 /* @@ -341,6 +366,27 @@ int p2m_init(struct domain *d) */ p2m->domain =3D d; =20 + if ( !config ) + { + dprintk(XENLOG_ERR, "NULL config is passed\n"); + return -EINVAL; + } + + p2m->mode =3D find_gstage_mode(config->arch.gstage_mode); + + if ( p2m->mode->mode =3D=3D HGATP_MODE_OFF ) + return -EINVAL; + + if ( m->mode =3D=3D HGATP_MODE_OFF ) + m =3D p2m->mode; + + if ( m->mode !=3D p2m->mode->mode ) + { + dprintk(XENLOG_ERR, + "Mode should be the same for all guests at the moment\n"); + return -EINVAL; + } + paging_domain_init(d); =20 rwlock_init(&p2m->lock); @@ -362,11 +408,6 @@ int p2m_init(struct domain *d) # error "Add init of p2m->clean_dcache" #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"); - return 0; } =20 diff --git a/xen/arch/riscv/vmid.c b/xen/arch/riscv/vmid.c index 8fbcd500f24d..11c7e9d6d6c8 100644 --- a/xen/arch/riscv/vmid.c +++ b/xen/arch/riscv/vmid.c @@ -52,7 +52,7 @@ static DEFINE_PER_CPU(struct vmid_data, vmid_data); static unsigned int vmidlen_detect(void) { unsigned int vmid_bits; - unsigned char gstage_mode =3D get_max_supported_mode(); + unsigned char gstage_mode =3D max_gstage_mode->mode; =20 /* * According to the RISC-V Privileged Architecture Spec: diff --git a/xen/include/public/arch-riscv.h b/xen/include/public/arch-risc= v.h index 360d8e6871ba..5faf8924d926 100644 --- a/xen/include/public/arch-riscv.h +++ b/xen/include/public/arch-riscv.h @@ -56,6 +56,11 @@ typedef struct vcpu_guest_context vcpu_guest_context_t; DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t); =20 struct xen_arch_domainconfig { + /* + * G-stage MMU mode for the guest (e.g. "sv39", "sv48", "sv57"). + * Must be set; an empty string is invalid. + */ + char gstage_mode[8]; }; =20 #endif --=20 2.53.0 From nobody Sun Apr 12 22:37:39 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=1775836544; cv=none; d=zohomail.com; s=zohoarc; b=W9ouvB6j+rBOgCKd6+YYDlDkDUZBmnX0Btdv6ebQPXN8BiNvN8613H063AE3TEkXeMBRwP4nB6NFShz5sKfx3ONyhCc/1nbz8ZQrbYWzGn3LxM24jhQqjrunAOyV+VCPvXc8KKViIxcUD5vfGBJxYlGc9ohzAFnxYtI1+vupcQg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836544; 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=p2w7cswF8WNoXf2rJsjt6cpxdm36ufdLhJBaAPtDOQc=; b=OtDPtvVAOs9LgdqR5K6ZL7r0TAVQSYMFXeehKLlDWp/4NAYSi+J9UdvlOC44HNV2ev/aXrtkaPlYbYwyqo2Nj5o422v0mvtTfP7cFEUOXrCrzdAkNm00h2T+ZkqgHv491p3PME53jdpzOTAlRJPBkyZ9vjOpELiGROhEl9x5xaQ= 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 1775836544540940.6959269150923; Fri, 10 Apr 2026 08:55:44 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279427.1563911 (Exim 4.92) (envelope-from ) id 1wBECY-0000Ps-Tb; Fri, 10 Apr 2026 15:55:22 +0000 Received: by outflank-mailman (output) from mailman id 1279427.1563911; Fri, 10 Apr 2026 15:55:22 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECY-0000Pc-M9; Fri, 10 Apr 2026 15:55:22 +0000 Received: by outflank-mailman (input) for mailman id 1279427; Fri, 10 Apr 2026 15:55:21 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECX-0008WP-Ia for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:21 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECW-00Cgsb-UD for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:20 +0200 Received: from [10.42.69.7] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d56-e002-0a2a0a5209dd-0a2a4507d84e-46 for ; Fri, 10 Apr 2026 17:55:20 +0200 Received: from [209.85.128.47] (helo=mail-wm1-f47.google.com) by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d68-ba2d-0a2a45070019-d155802fb157-3 for ; Fri, 10 Apr 2026 17:55:20 +0200 Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4888375f735so21725865e9.3 for ; Fri, 10 Apr 2026 08:55:20 -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.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:19 -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=1775836520; x=1776441320; 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=p2w7cswF8WNoXf2rJsjt6cpxdm36ufdLhJBaAPtDOQc=; b=jaHo8NAkm7wMWRH5gBep5jkdIplGx0IrKAEQTIiwzsiu2VTyHAbSz6LKYYC+6MzwSD kI/kYuyhV9qUtpF6w1RfkAWLXNU0FZq5JXADK/j9FcBxfJk0eQ/whibVNPjjpXMd9C5A UEP2KqWAOyuidiT6xWfkbZIGbTyOv35FTXpdpNqOpioTPB2+j6ZxAZuyzWKtfLpDdbyF K6uAKP0ZvGs2HONoLkuMlfnHPTqzxjgdNGEoaTnItiYPT1GKT6UvyUBqgUba0MWBHxyN ZoMU218BpP/xj6h/u/IlpvoEEmhOKTXRtcHCQzNy8Ul+o9sm3sPKXk+QLom+or9Ufl2A 96oQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836520; x=1776441320; 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=p2w7cswF8WNoXf2rJsjt6cpxdm36ufdLhJBaAPtDOQc=; b=eTuGk47jVzVPnrNdSp3q5qJw2zs4UbUbV/vM5TMXnvBA38v8CNrkTSxMJMNN2XGlRX 17oHsWjdHCavSo7pQiRQFlXQAkkakYYYRsXd1bwdv5gavIfeVghAgrh232Jc/HRB/IZo wHh7UbCJxQi4RCyQRVP+2bC2qqYSupewfbt0VRZWWSFYpv1ffche198jtELLK/MHbv1H 3uu5hwvrtMAJdwzbg1s12+ei7km1LG3Kw1o6yzd/ycz7TV1eiSUoAjkFY80Q0xoY1Mz7 GzjgoqU+cISKed5WhWVnwkBs42Db9yKK/Lzia2DZokwFtn8XRvmW1Ck3sxTdm8Cf/Vye xhIA== X-Gm-Message-State: AOJu0YzlsYbEW63VSXl/2ezUeMR3UgR2x0uBK0jWcOcmzaJhNO9lOsAx E3rK+eOa1J6u06Jdbd2YV+ASF4mAltSP0m9ypZ0VySZbCd3Uk7DwOvnmRcZ36w== X-Gm-Gg: AeBDiesxPNykQ3F+L0Rz7/Ec0+nNBbgCnZv/zmQgFNZF7gQieFPb1L8wyF4df+tgm9g /FpEm0ym4McLuiuX+YEerbNJgsB1psjwTZmtL4pByDX8If/CC5ODts00F5W7a5NVgv83pvbeX5Y OSddRRw/Q5N3VTGeFSG4nDuf3/QwDQHFwEa9tvZY+3EeD10/rYRtbYZ7sUK7xGIFAkA8sOcl7Of OK5dIKIqbeQH+fdPtW+PLVZQJfCUtVN6nsR9cOV2ZAfUKzEfml4a0//FMI4pZCN7w7vOJEpb6HX HR++bSJi3/UnUH5vAcloWxcC7MPMULYznugGhlCs65bBo0lm9PHfUFFi4HhQqSMyZRdM35o95R+ opmqHWD+o0oXBibTLHDMtVQqYyLSLdMXwXrdF5Ww/e3KrIhXdBnJ4dAq/srh4y7us46/RdrxAMd b7OI8sNnqe83DcXXlGfrxt/se+UvCx6S+oedESRgfnAYoXXAvuNjSCG86KtsLs41Q6aA== X-Received: by 2002:a05:600c:45cf:b0:483:8062:b2f with SMTP id 5b1f17b1804b1-488d67b8dddmr46635465e9.6.1775836519900; Fri, 10 Apr 2026 08:55:19 -0700 (PDT) From: Oleksii Kurochko To: xen-devel@lists.xenproject.org Cc: Romain Caritey , Oleksii Kurochko , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Jan Beulich Subject: [PATCH v3 09/12] xen: rename p2m_ipa_bits to p2m_gpa_bits Date: Fri, 10 Apr 2026 17:54:55 +0200 Message-ID: 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-ef75cf/1775836520-8B74241E-4D9E4FF8/10/73395122804 X-purgate-type: spam X-purgate-size: 1710 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836546938154100 Content-Type: text/plain; charset="utf-8" The IPA terminology is Arm-specific, so rename p2m_ipa_bits to p2m_gpa_bits to use architecture-neutral naming in xen/common/device-tree/ code. No functional changes. Reported-by: Jan Beulich Signed-off-by: Oleksii Kurochko --- Changes in v3: - Introduce #define p2m_gpa_bits p2m_ipa_bits for Arm instead of renaming of p2m_ipa_bits to p2m_gpa_bits to keep Arm part of changes clearer and keep using Arm-specific terminolgy inside Arm code. --- Changes in v2: - New patch. --- xen/arch/arm/include/asm/p2m.h | 2 ++ xen/common/device-tree/domain-build.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/include/asm/p2m.h b/xen/arch/arm/include/asm/p2m.h index 010ce8c9ebbd..7957dbd96e57 100644 --- a/xen/arch/arm/include/asm/p2m.h +++ b/xen/arch/arm/include/asm/p2m.h @@ -14,6 +14,8 @@ /* Holds the bit size of IPAs in p2m tables. */ extern unsigned int p2m_ipa_bits; =20 +#define p2m_gpa_bits p2m_ipa_bits + #define MAX_VMID_8_BIT (1UL << 8) #define MAX_VMID_16_BIT (1UL << 16) =20 diff --git a/xen/common/device-tree/domain-build.c b/xen/common/device-tree= /domain-build.c index e706a6173ba6..30625a33ef08 100644 --- a/xen/common/device-tree/domain-build.c +++ b/xen/common/device-tree/domain-build.c @@ -221,7 +221,7 @@ int __init find_unallocated_memory(const struct kernel_= info *kinfo, } =20 start =3D 0; - end =3D (1ULL << p2m_ipa_bits) - 1; + end =3D (1ULL << p2m_gpa_bits) - 1; res =3D rangeset_report_ranges(unalloc_mem, PFN_DOWN(start), PFN_DOWN(= end), cb, free_regions); if ( res ) --=20 2.53.0 From nobody Sun Apr 12 22:37:39 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 From nobody Sun Apr 12 22:37:39 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=1775836544; cv=none; d=zohomail.com; s=zohoarc; b=cTUDsSJE5gY6wP7h3t55sJn4pFPstojeXT2FLlAXCIi6nv6Raei3JiuqaO2+Xpjqbt+EUoFBcOngsRf0DVl4TDYbLcziVQIarhMSqcMwwkPUzVdHwGYc+/E+Wnfm5XB92qiKOFfghS7vZSkfrMOi2t18jdgJIjFNF7ggrgs2bPI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836544; h=Content-Type: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=j/LD+Q0Pk+2kpOMYSoWm4Kl0NPbf+mdTSKTiw89GJZY=; b=FLsmrY78aLIga8XoKfijcV9hiRai5VsQ1ECHWRbPgq6bNyLv+GFjlrrJqVGbjgBYuV2SUL7i76Tp8rsEsNtl7vfrgERNXka6lDiZlKtaFy2R59Q0Y8fbduXId4tpPA3olY27WLGWRJJKSxLqniU2mWpBNitiI8s7lS5klGoKamU= 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 1775836544649126.42829586264497; Fri, 10 Apr 2026 08:55:44 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279434.1563928 (Exim 4.92) (envelope-from ) id 1wBECc-00011S-1g; Fri, 10 Apr 2026 15:55:26 +0000 Received: by outflank-mailman (output) from mailman id 1279434.1563928; 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-00010H-No; Fri, 10 Apr 2026 15:55:25 +0000 Received: by outflank-mailman (input) for mailman id 1279434; Fri, 10 Apr 2026 15:55:24 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECZ-0000go-Vt for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:23 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECZ-00Cgsb-BJ for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:23 +0200 Received: from [10.42.69.7] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d91d6a-e002-0a2a0a5209dd-0a2a4507c022-4 for ; Fri, 10 Apr 2026 17:55:23 +0200 Received: from [209.85.128.42] (helo=mail-wm1-f42.google.com) by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d6b-ba2d-0a2a45070019-d155802ac91f-3 for ; Fri, 10 Apr 2026 17:55:23 +0200 Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-488b8bc6bc9so15801995e9.3 for ; Fri, 10 Apr 2026 08:55:23 -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.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:22 -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=1775836522; x=1776441322; 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=j/LD+Q0Pk+2kpOMYSoWm4Kl0NPbf+mdTSKTiw89GJZY=; b=NS3KKP6d9Lf0fLcTNYe9rrRWHhAl/mMHQNBT30DY00SlZK9DezZLP4xT+2fzpjjxLi sAhWQZYF046B74ioVBvGtEiET7fBNm80/IYzswi5EWhBxtz8VG5n6jTLFrU82xhdGVSc yFu4fmEAPSGM5yxLJBth/1NYXq0tK9Ty/SPBLJVPV5M5EclwEPfniJ4qcp2SPLHWGy1v uZ9Y7bcGIzoT1vmPLP9IZ2KHV/2ppkIKc9+Uo6lj03G1QFoZJ2O0BwB8diRHAdWiomsk Beq58GP7deZd9O1QmMXZRKmemYCEgn6vFeq75bf1bm8cvGjMsWfAxuWPzQiEeUknxU9q hviQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836522; x=1776441322; 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=j/LD+Q0Pk+2kpOMYSoWm4Kl0NPbf+mdTSKTiw89GJZY=; b=mwyL6u975ZoORfknTgQKadglSUE0RjfMh+6osljlQU8/pq6D17QFI7XqCGA1gWKMO8 NFN/BJq/Cyu8Pr2bEHyfOYzrsw3D3QFL9xlUEJ/2qEiN0zB5KwGOIkHMQS7wWoZWTx60 MfgK1eNmjcylc7Ja4vtdOqtfsaYaHnYu6fzgLprAOxqU9Lq2AuJPg9N/bEgg8fJ8gcTx 7HVzqVVJvXIs4k8C1V4jM7uLSfa1w4lqNE+Lr5RQvUzSroWB5YoxNA0Zybu5DcyZoTzc VLOmdQVo5spqv7OuyoJIUiA3hnHtdsHHXxyPhCfvyjuCr5YVL6aDN6p/y+9NhQme1gzc B60A== X-Gm-Message-State: AOJu0YxvBFAhG9137LLKdRy0iV8ScdXOcwWAlVEABEejqxQ1NJ1jCbB5 ziMxkRpTKvDfDsxTDJybK8gO+OEEgxqlB0fXJac9kHL8gI6+5yCfmJ/PbShLeA== X-Gm-Gg: AeBDiet7w8Bp3XDzJYLynH8UB8BwSDyDDEVd/JW4ozupOA8nx3UafKDgzheJnQ4+sY9 kEUomgl/n0/Yph/kRKpq3jsQjKPlbbOsYlCvNBYJs/IHwgdQNqkzni42Y24P1hlgLwYmnNkQBAw z/GAeEtIkK5lh289XCsTvh6YOyktnnn2mSIGAwcF7kcLaVHOpsCO7KOWXO3FPRoBD39KcfBlIeu rMonk0thhf25ifK7/3rUDbdhL88IkXysr5P+tSCqGnvnBvk/mvbT0bek36XJz8by20nEFNGXj+F 1XUA8y75jKkyrWKk2ZDCoqTbkXD89J0C0DlAPkY4vwGXaSxEZ4RNVnkDX/qbybloPthCAmV9tF5 KBXwNGhPIeQR53CT2LoQTiD1/tGykFWZdxQDgtFIZf/vd5wHXec7lhkhyRrirAMbbMpONOBw3g7 sL0ieorlPsx4tS0xUZVP2UKSQx0EPTvonwSzvEaSpeRJaeb2Dd18NnNhr9usqhXqiqPw== X-Received: by 2002:a05:600c:8907:b0:488:ab1d:dcc5 with SMTP id 5b1f17b1804b1-488d6ac1bafmr31367345e9.27.1775836522434; Fri, 10 Apr 2026 08:55:22 -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 11/12] xen/riscv: add definition of guest RAM banks Date: Fri, 10 Apr 2026 17:54:57 +0200 Message-ID: <8280fe1a5effacd595d3dd69b2b11e06226411b2.1775836193.git.oleksii.kurochko@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-purgate-ID: tlsNG-ef75cf/1775836523-8955341E-457CF58A/10/73395122804 X-purgate-type: spam X-purgate-size: 3066 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836546960154100 The dom0less solution uses defined RAM banks as compile-time constants, so introduce macros to describe guest RAM banks. The reason for 2 banks is that there is typically always a use case for low memory under 4 GB, but the bank under 4 GB ends up being small because there are other things under 4 GB it can conflict with (interrupt controller, PCI BARs, etc.). So a second bank is added above that MMIO region (starting at 8 GiB) to provide the remaining RAM; the gap between the two banks also exercises code paths handling discontiguous memory. For Sv32 guests (34-bit GPA, 16 GiB addressable), bank0 provides 2 GB (2=E2=80=934 GB) and the first 8 GB of bank1 (8=E2=80=9316 GB) is accessibl= e. Extended regions are useful for RISC-V: they could be used to provide a "space" for Linux to map grant mappings. Despite the fact that for every guest MMU mode the GPA could be up to 56 bits wide (except Sv32 whose GPA is 34 bits), the combined size of both banks is limited to 1018 GB as it is more than enough for most use cases. Add inclusion of asm/guest-layout.h to asm/domain.h to make dom0less common code build happy. Signed-off-by: Oleksii Kurochko --- Changes in v3: - Move GUEST_RAM*-related defines to asm/p2m.h instead of public header. --- Changes in v2: - New patch. --- xen/arch/riscv/include/asm/domain.h | 1 + xen/arch/riscv/include/asm/guest-layout.h | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 xen/arch/riscv/include/asm/guest-layout.h diff --git a/xen/arch/riscv/include/asm/domain.h b/xen/arch/riscv/include/a= sm/domain.h index 6c48bf13111d..6044ce0feee0 100644 --- a/xen/arch/riscv/include/asm/domain.h +++ b/xen/arch/riscv/include/asm/domain.h @@ -7,6 +7,7 @@ #include #include =20 +#include #include #include =20 diff --git a/xen/arch/riscv/include/asm/guest-layout.h b/xen/arch/riscv/inc= lude/asm/guest-layout.h new file mode 100644 index 000000000000..68d95a09394c --- /dev/null +++ b/xen/arch/riscv/include/asm/guest-layout.h @@ -0,0 +1,23 @@ +#ifndef ASM_RISCV_GUEST_LAYOUT_H +#define ASM_RISCV_GUEST_LAYOUT_H + +#include + +#define GUEST_RAM_BANKS 2 + +/* + * The way to find the extended regions (to be exposed to the guest as unu= sed + * address space) relies on the fact that the regions reserved for the RAM + * below are big enough to also accommodate such regions. + */ +#define GUEST_RAM0_BASE xen_mk_ullong(0x80000000) /* 2GB of low RAM @ 2G= B */ +#define GUEST_RAM0_SIZE xen_mk_ullong(0x80000000) + +#define GUEST_RAM1_BASE xen_mk_ullong(0x0200000000) /* 1016 GB of RAM @ = 8GB */ +#define GUEST_RAM1_SIZE xen_mk_ullong(0xFE00000000) + +/* TODO: allocate these all dynamically */ +#define GUEST_RAM_BANK_BASES { GUEST_RAM0_BASE, GUEST_RAM1_BASE } +#define GUEST_RAM_BANK_SIZES { GUEST_RAM0_SIZE, GUEST_RAM1_SIZE } + +#endif /* ASM_RISCV_GUEST_LAYOUT_H */ --=20 2.53.0 From nobody Sun Apr 12 22:37:39 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=1775836541; cv=none; d=zohomail.com; s=zohoarc; b=EtFrC3UT05nkG3jrCFcNPGkAgUz7l0idTfl9ZqPLUnkrWXBBXwfMSQzj8LiDGSWyh+FVbw7XC4lYHYxz8ms9NYshHUtxpKGlfr9nfPdNRipo4qIir07mEXiyUnsdxJZw4AFmWYbHJq3hhVIVt3pOQpC1H7emUu2CkPIxhwD+88A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775836541; 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=harNJKN/3/ApQ6euFfpXmy5P6ZKtKwJXsuo2nm4shJQ=; b=EKYg0U9T3cmznVlknh0o+RD0gH2Fuk1tRDLIA+3DOnZ/qAlzDpI9YTR02zqjsmgtPkGLaH1oMOtCoUjtiU1tGXUhfT83nv4ngdPaMpaPObuHFrANyONcOvEvEKMlq6IYU4QuFLxKjQLZ6hXLlgwgfNjdm2vFzpeFe8FF+s98abs= 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 1775836540994652.8703556522013; Fri, 10 Apr 2026 08:55:40 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1279438.1563932 (Exim 4.92) (envelope-from ) id 1wBECc-000179-P8; Fri, 10 Apr 2026 15:55:26 +0000 Received: by outflank-mailman (output) from mailman id 1279438.1563932; Fri, 10 Apr 2026 15:55:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wBECc-000159-Be; Fri, 10 Apr 2026 15:55:26 +0000 Received: by outflank-mailman (input) for mailman id 1279438; Fri, 10 Apr 2026 15:55:25 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wBECb-0000sc-2l for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 15:55:25 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wBECa-00Cgsb-Eg for xen-devel@lists.xenproject.org; Fri, 10 Apr 2026 17:55:24 +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-36 for ; Fri, 10 Apr 2026 17:55:24 +0200 Received: from [209.85.128.54] (helo=mail-wm1-f54.google.com) by tlsNG-c1860d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d91d6c-fab6-0a2a45080019-d1558036acec-3 for ; Fri, 10 Apr 2026 17:55:24 +0200 Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-488a14c31eeso17205725e9.0 for ; Fri, 10 Apr 2026 08:55:24 -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.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 08:55:23 -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=1775836524; x=1776441324; 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=harNJKN/3/ApQ6euFfpXmy5P6ZKtKwJXsuo2nm4shJQ=; b=g1sD7/Uo4PcCSc/3eYqqGLtCoyRxAiXEETYpTJ2cis30caJWidGoI69X0eSJJfWo3j jPVHS0qwFhhO6dG9skh7rfH9tr+tFbBdAtw5dOEFyjpB0TsPP7qykgA7zYPUkOPAM8Jd YUMnPWcAOCa3y1BUywz7PB6QD04jMsDwLHW9mnwSOyDFBQBXl4sKw7F8SbAlmEbI9CrI su4P8czBieEaGXYVdZEIaRers5sxmUb5ExekY8zPSpVIWCKntGEOdsj/BarL5yBZWIMF qn6Bt/PiqUu2crkb86czStbKHHSftzN7YGbZbNqyjxQVROpxLvO2jyfUKeFIror97ZvR 1b8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775836524; x=1776441324; 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=harNJKN/3/ApQ6euFfpXmy5P6ZKtKwJXsuo2nm4shJQ=; b=Zon3tPA35X/Oc8++38i2Bvo1+Hq6KH2109vHSqEhlw3Vdd0IoRpuksNqmttHz2rSWt 0sVR7USlghABEcEmpnOwu+PKafeCSnh/G349tgjiUFKGQQU+IgMrz+uE7MO58s1m9XVP BGS839c+MMRxX9XlJr5Q5KBHvCfsCWqc3Z/tdGwIBH5bMmaDF3qae1oTX7o6i7PU/gZe qwh5yCI1hh5T2TNi5P9TEMHRy32/Ccad/Le+ZP/qgYv2QzKukKT58Po+YkICBMxKLfnS tKRn1PkGML9Q8xnCNo8eTjNB4rmna0AylTZLs079u7htNHypMHp/yZaKRzcX3r02Ts5A tscw== X-Gm-Message-State: AOJu0YxWpM8XzRuoqiRV1MnWLvpH4G8HkVx2TBOfhDO8TyJrC+h3TRC2 dCYv25CkvuGX0YVBPKhTNnvdzUg4uta0b26kNmBnjvcTSgjMjtnTofioh7XTxg== X-Gm-Gg: AeBDievad738q1r/4nwGez8WdW1/NICeZ9SGTU83nSEUPxeIigrKOObP/2+NHBjvlyK 7XncSEvxsj/0+Xha+GXOIaiBuymb/6gi1nfdubr/pXlET4vJQ8CfHJ1eWXHw20unnLdnLSwWAii MwLyx3KHZh1e4/MubphsEX+cdEEcarhXG88Yxhj7X/v0nCGUPWfH7moATH89zVTbKARaxXaJuTA cRB6QrLIlqtSedCEudmwBe37Nz67lI+HwELb574ueZXM32BN/YUUnGUgk5Bn+/BAiqvZ8SnGUVa Ti0g4K0sY2uPG+xhm8adc88RU2Ov5mcbdb7Mj3bu0jMtxXll5TlmF5Hl/mzTy16poma6w9n1DuD XKcgxoXjpntyg85QKGGwqQ96CDu2MEBIjFWbj5HTiVSax9kwBtJ4OH31x1ZfRcejTn7EW6fY+ho 3yO8sTgoeXV9ilEEF5EubBjOw4QQ7dYHuwWPGXDbLD4nEqyMMzezQyPJAetBLNgwYrmw== X-Received: by 2002:a05:600c:3b96:b0:488:b098:b653 with SMTP id 5b1f17b1804b1-488d67f0a8amr49856885e9.13.1775836523657; Fri, 10 Apr 2026 08:55:23 -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 12/12] xen/riscv: enable DOMAIN_BUILD_HELPERS Date: Fri, 10 Apr 2026 17:54:58 +0200 Message-ID: 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/1775836524-F5F52497-48010394/10/73395122804 X-purgate-type: spam X-purgate-size: 851 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1775836542930158500 Content-Type: text/plain; charset="utf-8" Everything is ready to enable DOMAIN_BUILD_HELPER which are necessary for dom0less common code. So enable it. Signed-off-by: Oleksii Kurochko Acked-by: Jan Beulich --- Changes in v3: - Add Acked-by: Jan Beulich . --- Changes in v2: - Move introduction of p2m_ipa_bits to separate patch. - Move to separate patch introduction of guest banks constansts. --- xen/arch/riscv/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/xen/arch/riscv/Kconfig b/xen/arch/riscv/Kconfig index a5e87c1757f7..41426c205292 100644 --- a/xen/arch/riscv/Kconfig +++ b/xen/arch/riscv/Kconfig @@ -1,5 +1,6 @@ config RISCV def_bool y + select DOMAIN_BUILD_HELPERS select FUNCTION_ALIGNMENT_16B select GENERIC_BUG_FRAME select GENERIC_UART_INIT --=20 2.53.0