From nobody Sun May 3 14:20:01 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=1777386873; cv=none; d=zohomail.com; s=zohoarc; b=h+RrZm0GoJFWTlFpn5YhDrUnfZNMqTtga6e90ASRvF5fP4WhxTrXfcaBTgtosr43Nowsp8TnGxs94Y64757m9Vcpagqzjr1reg8CAWSnPRa2awAi4ZQMfphIN8gtIzNLPRtSmRmrTnKovdS6kprHBimeuwwn9OVnWzmpASaSvvw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386873; 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=W36qV0SA1npKJlsQHzH0mfE/cYCMTL3Qqk5/oPvpTxk=; b=NgIrvnT+iHFeR2K8WkRqlcUU2ykKSg+ulK6t+5JbNnYwcP1QJe0GN4UG3f5XNGIM1cHPGP5XEmRTVK7NUrMmylvMoSUZBdY2YANFjcL0yBFD9OrqEZ71N/7Vb1FxtATBf7qvoIlmAhnXzOLhRWQuaxE72Z04K5pcxyd7CM9jlOI= 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 1777386873723604.7208615446164; Tue, 28 Apr 2026 07:34:33 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296328.1572751 (Exim 4.92) (envelope-from ) id 1wHjVY-0005Rd-E6; Tue, 28 Apr 2026 14:33:52 +0000 Received: by outflank-mailman (output) from mailman id 1296328.1572751; Tue, 28 Apr 2026 14:33:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVY-0005RW-Ax; Tue, 28 Apr 2026 14:33:52 +0000 Received: by outflank-mailman (input) for mailman id 1296328; Tue, 28 Apr 2026 14:33:51 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVX-0005Hz-Hc for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:33:51 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVV-00H4ZK-Bv for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:33:50 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c541-5cb7-0a2a0a5109dd-0a2a45029a8e-46 for ; Tue, 28 Apr 2026 16:33:50 +0200 Received: from [209.85.128.51] (helo=mail-wm1-f51.google.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c54e-af86-0a2a45020019-d1558033ed58-3 for ; Tue, 28 Apr 2026 16:33:50 +0200 Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4891e86fabeso127801705e9.1 for ; Tue, 28 Apr 2026 07:33:50 -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-48a774b6300sm19302145e9.16.2026.04.28.07.33.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:33:49 -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=1777386830; x=1777991630; 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=W36qV0SA1npKJlsQHzH0mfE/cYCMTL3Qqk5/oPvpTxk=; b=VNh849KylgCiDivitlJHGeNTbHsB/Bjw2xCWB1kn86dqIjjLj+EjxwAwlUaoKbk2eI Lv+UiMIBi3K4DbTbX5b9Bc7vUw7XAX1JvCd8cgMjg1byX8q0NvIuE4GtkcjM7R01elnI d38SLZL4IZHYoXCVV1TrH3XsCFtRuu+aglO16iEN0RsFfPKG35vlbl9h1sHkzslv1onl OUPiJ4Lrn+OZMhvNFKL+sRlWmISSyIv0n3KxaiMmpF3PHd3DPNRl9Fl8lW2GCKJ/XxGo q+ATbDPg2n7L7IiFz+dMsCEyj127DlR3cJ9GLewtY8L/RuX06xcz2/mUBezI2h7MyXWq LTqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386830; x=1777991630; 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=W36qV0SA1npKJlsQHzH0mfE/cYCMTL3Qqk5/oPvpTxk=; b=f+Q++6e7rE1p8OeiVkRVlVrNo5JAMhd01znanWGZPNErOjstAzS5aSWWqNWXpe7wfB 98IVpPjV9rNjb+i8qlWtYezjLhbC6O6y4uFRtntgmf4dZenERfOC1W8e5WBog45AqQ6I 5Q1YSbEcSHzXBFox89eCAq79pau+RNhj7GpC0cC2KTMwRAm73a4fySiBVsK6AAExuhaE eP8bOv8u2GN2NUx4ChzfmrtGqKQ7Kh1N1aa68b0XoVDNPTzzl1TxO40tkiq5B9ciq1TJ 1NnfqtWRaIFBgvg0poG0/3MfkUp0CF4OYbSjE5pqlLAi0EHO9i6Cz46F0JDJlLDAEYD/ uWhQ== X-Gm-Message-State: AOJu0Yw8ynlV/tJ8IMvYaQLH3sG9OM6y21zdfzDalZVilExJdFQQX0uV nYsvPyT/LLeHsAZoEATwvaKem14vgRHxPHKffqYR711ACSrDIEWY4rFVAunOVg== X-Gm-Gg: AeBDieuO5k107UZqWdKgOdRUzIi0KR6O3tfuaVeCL4J8jWhGx15qT301y+HbAycL5vQ 9+CWRZokhC/jf0W/9qYgwfu2OS7Zxkf3qKR1S1WBo84/pq82UPpAyluOiPkustLRJsi1eyenYcL vgdt+BXToJ3tO9G9R7WhHCeezDfD+DXgTNXk1LaI7SWpuKZMeGwbOEZ1jO0rBiQwjD3jE0kSsE9 9KaH2uDL6qNHlZAOuDAqOKkcTwYTqVdXUEm6MpWoUfjxM+7nk1p7eapshy0JxcLg7GKmDYKITes 8eq3RlcY+7bRTO/gxi+23kXibNP5DqNYwavMGVjcDsW+PmPJqYka1Zl9trcP5Ax8YCIN+WQwyvI 9bsWy2e09GvauwXF224OkieovIXXrr14W9rL7Dl4sdBqotbI37htauwvo18a0OpMkTtA/1rcK3j rRLV9ZFAlAV00QTXelPxEOh/j7LG/hPFRS/0boaE/ve0Nnj4TLwJXlBPjDudQebgv511oGCyW4X RIw X-Received: by 2002:a05:600c:840f:b0:483:7903:c3b1 with SMTP id 5b1f17b1804b1-48a77b21749mr52038275e9.20.1777386829946; Tue, 28 Apr 2026 07:33:49 -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 v4 01/11] xen: arm: fix len type for guest copy functions Date: Tue, 28 Apr 2026 16:33:30 +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-720697/1777386830-82D6F161-7B11A211/10/73395122804 X-purgate-type: spam X-purgate-size: 5388 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386875120154100 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'. Fixes: 2986481b3d9e6 ("xen/arm: guest_copy: Extend the prototype to pass th= e vCPU") Fixes: 5302bd490bea7 ("xen/arm: Introduce copy_to_guest_phys_flush_dcache") Fixes: d07b7369aa65b ("xen/common: dom0less: introduce common domain-build.= c") Reported-by: Jan Beulich Signed-off-by: Oleksii Kurochko Reviewed-by: Jan Beulich --- Changes in v4: - Add Fixes: tags. - Add "arm:" prefix to commit subject. - Add Reviewed-by: Jan Beulich . - Avoid using of min_t. --- 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..86f1c9d0e318 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(len, PAGE_SIZE + 0UL - offset); 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 bc7744270c8f..6ad9e8fd1642 100644 --- a/xen/include/xen/fdt-domain-build.h +++ b/xen/include/xen/fdt-domain-build.h @@ -48,7 +48,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 May 3 14:20:01 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=1777386884; cv=none; d=zohomail.com; s=zohoarc; b=dp4saaGifm8/2XF8f/bGzCI5+QjjMLfqx1QQv6HjnGNKp7+ftse39bHLJ/GkF+nuWYTHeywpZ28fMcCm1YtdLQ0V5FuzRPUQYET4RM372e7iRGakQteybQR2gXTSKqN+nyCUHQl3rRoa6MrqDSj+qYOfEUnsF0tRLxpjKonWWmk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386884; 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=Ct8Vr7tZTUAd+DiLlXb8sJtqUfUbJzJOW+ZP26uy5x0=; b=LClcwhjPQ0z9vV0pVWHKeUmovld7eolNSUBGkFcfIGXi7Se4XztQ5n2L7Q89tEILSdV1R7Yq3sBTl9cSZ9XBQIi8+E0rQbVcJ7WDKpAFaRyMf48/vq6XhqZe7LRIkTxhloyAYVZuyL2pIH1+VZQ6AWI64nJH567d3AqhUjB8ttY= 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 1777386884742188.6391586487947; Tue, 28 Apr 2026 07:34:44 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296329.1572760 (Exim 4.92) (envelope-from ) id 1wHjVa-0005fk-Mm; Tue, 28 Apr 2026 14:33:54 +0000 Received: by outflank-mailman (output) from mailman id 1296329.1572760; Tue, 28 Apr 2026 14:33:54 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVa-0005fc-IH; Tue, 28 Apr 2026 14:33:54 +0000 Received: by outflank-mailman (input) for mailman id 1296329; Tue, 28 Apr 2026 14:33:53 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVZ-0005Yo-0t for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:33:53 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVY-002Kdm-D9 for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:33:52 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c54a-bab6-0a2a0a5309dd-0a2a450cd3a8-18 for ; Tue, 28 Apr 2026 16:33:52 +0200 Received: from [209.85.128.50] (helo=mail-wm1-f50.google.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c550-62f1-0a2a450c0019-d1558032e53e-3 for ; Tue, 28 Apr 2026 16:33:52 +0200 Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-48334ee0aeaso120333005e9.1 for ; Tue, 28 Apr 2026 07:33:52 -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-48a774b6300sm19302145e9.16.2026.04.28.07.33.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:33:50 -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=1777386831; x=1777991631; 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=Ct8Vr7tZTUAd+DiLlXb8sJtqUfUbJzJOW+ZP26uy5x0=; b=giWN2XcMhnQksCOt+DLn7Lx0aMlT84S0Ff13f1m3vj7IV17uzMvy6ElhgGBzleMWgt z41zuZs4gBgKe2T4YRZrQSjTLOO4lFHoIq6txluLzE69DBDC/gXxVpXaEO9srYqE7jGv WV+XjmYc67mTXjyhlXf/l9juDx4jM83IMOzV93vzQLF57+YjsrybUYbaHZ8hMAwa+cVR QhRxMq3cT9Exjf0ROkxqZXPggx2R5d63fougEu2xy0notL3deF9mi2V4zudb9gfXBpS8 mynDIY8Gkr+kQ/wR6tZV0qicjD1XRMlEpuJO9+aTpFmjhCdQeV9gVMv/Rv0XUW6NGjXI NApA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386831; x=1777991631; 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=Ct8Vr7tZTUAd+DiLlXb8sJtqUfUbJzJOW+ZP26uy5x0=; b=BjRIuM8JjOhquu+YLbDdoaVuivSI7m7Lf8dzusdXljvQZCVBvmczNjDM/+KoaT+2yR DPAO5oBak0URKXoRbEAfQnjE/SZ1IIA+czlnEfZzVijZsXoRVIBwUvZYx64yo8T0Cz7J MYDE7FlQTsTGxX20gud/Ey7kJBnYdYVKfkLilzfmE00zI2knJ8RIpSzf1yunLM+o0EXq /bD5/DojnH3XAbFW761pObM4n3CIFotFyS4RE7y8mkTAt6HQAkRNK47u6YW+JYRRSHst p6xi3LwRg9TPPZ4JDndazcWD2tqLfHyqOFQMX3pXjPQ88ABPUn+nnDmYukTDFPpvoGhF 8owg== X-Gm-Message-State: AOJu0Yxla/+oZOPdJ3Y3VKm0FHmvd2XUoVFhreYm+nH6CL3N7I8bmune b0R6HMddiRdybZhqfBC5mXwczl8OlPLlZLfVQwP8bM+HLZ6yftlMUU+c8RI7fQ== X-Gm-Gg: AeBDiet3Lb/fNxBMOwkZzGaNi021sDBRBjFpW25ROdD2FohMNlxkRAD+OAeqb029aDL P0IlX++bPzfCIJ5iBV6PkNwRD20FlwzMc1Tn6AYBwZUSNAuzR6HK96FYZL8+lxa+nt8Y/W2UzDI BYt+4Q1OveJpa+r9Pwjd+znzmJj2ccZUk9w3Bj7+dwkDPfLd8vJipaoEk2xeAYmx1yoA7A1mz8n tYmMT/NnpLyr3OKbOyk3Fh7JUFD9y20e0rQqc1qOYDB/hI4JuUkfKCLbSR9LMWtVgVfseAkg7Pv Z9KirIOPYE0M/S6WNyFCD9IDmibA+XYVAHt1k376OZQMDw6EAUa4gY8KosStEyB4mEjAXvFnXgg p3/3q8QZDuPjOuHdYI/3OaVAYEwUwCFadM/vMFj0jYcjrL2lctGQagL54yvGnxU8zeSNfiypxQY eSC8Jff6sD6MqMkK2CIdH0IeEv63l60xgzlQOTPfvEul8O2Gc3R/PgYLHDyVeNcThgSgMZmYwig 9B7ng2038zYQPs= X-Received: by 2002:a05:600c:81ca:b0:487:59c:2bb8 with SMTP id 5b1f17b1804b1-48a77b24e5emr53261145e9.27.1777386831127; Tue, 28 Apr 2026 07:33:51 -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 v4 02/11] xen/dom0less: rename kernel_zimage_probe() to kernel_image_probe() Date: Tue, 28 Apr 2026 16:33:31 +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/1777386832-6E577CF5-E38FC2B4/10/73395122804 X-purgate-type: spam X-purgate-size: 7700 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386887340154100 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-4: - 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 9395b5af8745..a5554714cd7b 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_HAS_DOMAIN_TYPE - if ( (info->type =3D=3D DOMAIN_64BIT) && (info->zimage.start =3D=3D 0)= ) - return mem->bank[0].start + info->zimage.text_offset; + if ( (info->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 86a37a13048b..54be77aa191e 100644 --- a/xen/include/xen/fdt-kernel.h +++ b/xen/include/xen/fdt-kernel.h @@ -63,7 +63,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 #ifdef CONFIG_HAS_DOMAIN_TYPE @@ -133,7 +133,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 May 3 14:20:01 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=1777386869; cv=none; d=zohomail.com; s=zohoarc; b=IfXXSUsAJfbC3cx7wlb0weIopNFiVPxojNeRd8cK7AOFDn2J7IRDJvVTMLnJdlDUiUhxaeYv7Dfo2dpFdR6wVn7NzllD/AllhyhikpqS64U8NBZNq0GBXus1Sgh7hoKkLeRz5QCDfQIT/shA85VIzyOQHCRPOkxeHK4/yMs5aaM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386869; 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=rklfHL8DGEAm9CydTFB48ZDQQ+epyIb/xn7d2p7FG4A=; b=cs2OExor88VH3MEFcFKSomcLTgWuulEYIEusUJnnN3RgbmpYXtaM2bOtSgOYcfefeWR42p8UsFLQFvF+EjOkwpQmM9431TydMC29/aQMO7eUyhoA/bSS9XTsWPNoIrc/JlDeqbefKV1HI5YDuDEHrpoRQWlNnTe6gU71UUSXX0c= 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 1777386869768443.68323678549814; Tue, 28 Apr 2026 07:34:29 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296331.1572769 (Exim 4.92) (envelope-from ) id 1wHjVb-0005th-TE; Tue, 28 Apr 2026 14:33:55 +0000 Received: by outflank-mailman (output) from mailman id 1296331.1572769; Tue, 28 Apr 2026 14:33:55 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVb-0005ta-PJ; Tue, 28 Apr 2026 14:33:55 +0000 Received: by outflank-mailman (input) for mailman id 1296331; Tue, 28 Apr 2026 14:33:54 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVa-0005fQ-Ie for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:33:54 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVZ-008e9B-Ur for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:33:53 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c540-e002-0a2a0a5209dd-0a2a4503cd3a-28 for ; Tue, 28 Apr 2026 16:33:53 +0200 Received: from [209.85.128.52] (helo=mail-wm1-f52.google.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c551-672d-0a2a45030019-d1558034d159-3 for ; Tue, 28 Apr 2026 16:33:53 +0200 Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-4891cd41959so98298555e9.3 for ; Tue, 28 Apr 2026 07:33:53 -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-48a774b6300sm19302145e9.16.2026.04.28.07.33.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:33:52 -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=1777386833; x=1777991633; 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=rklfHL8DGEAm9CydTFB48ZDQQ+epyIb/xn7d2p7FG4A=; b=HRZoCAygyKY9vYHGPkCpG3e9x7i5aHzZZRHNiyzwCkfK2ESow60vmXFhv8w7Y3ENgO MGz3Q+d9MA9X6gErJw1h+Lt9QTP/WyBVppTM1QCDc4I90DsqPZTCmYFW/l1OAHoA4KvC Q8yrPvT7+x4zQE2JrOCO8koYWZEaqIhvq7hhlgE0b57+ogTj9f8kjvYuzf5CbgdHEU+2 fYP4RDrmLn0y2o8qDBeUmuPLx4qBrfXyf7dZj+IHoyo6AwfE0A6cYsorONgWG2dtDvvI PWR+rL5ZUsN2SpLbCzoBqzIwjg5OGbnzx9E9FRg5TP9Ba2QXj/61txARgCn/lsGjbFh0 xCXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386833; x=1777991633; 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=rklfHL8DGEAm9CydTFB48ZDQQ+epyIb/xn7d2p7FG4A=; b=Gc2eqSVtJXltaDxKSBCewArmP4uBTB3h7pAN1/2Eb7nIOYEWvGFSwL1HmPAryNLQ6z 9HmK0leQGAzHSl6wFzFS8cgE3SGPFFAwSpN65ZRIZJLNC5UKmaiuQDYUgEgGrpig0jrG TQaSU+8bkwfpkuCulWPb0JWNx/N8lQZxzF9frojsMz1JYfdFacAvNUGcne/PaKFO3/kf pACIiyp+FfSLEFqBZH8I3FktLavl+BFFIIascQNMOaDxB6bRqnh/D0jAy7x0hVHvbn/W /MHWrp847/Lte5vsiU7MQDplgCZ6MqF3FjiIC2FQ86vt66aNYmpIEPbCMJw+B6D24gRs QWyA== X-Gm-Message-State: AOJu0YxCbxQei+KfFEKIm99Sj1SFhkQTqglA28kW7rgJwunSudiQNQ8p fWSS6GT1hSTO4RBM9ChDguqWDj6wKfUfLX16iWP40AVPKA0E/gAGuZ9jWlXTfQ== X-Gm-Gg: AeBDiesKDb40bC5TFMXQ/g0Nf3qNSuSVrkXYiMsjz8aTM5P5XRMvuN4wCEF0mFXxBvd 5yhrH+fPxu/AZxwkcDagrYQmrd9BzEYdF0lyMDoR+mzz0z6C57uA/YUW93OhvGX6ndWrKkDzLI+ v4NXIOa4hD5L35YXxVrymIT7wgR9Cvsq3zorGiMrvP5GjhCU+BFTifSIDyscLkPoyoxpqlOUc3z TAMboFjQftk+wZ8PnvdC0JmVy9HKiB6Bkuo4eaGmc0pcF965HbvmXsfL83lagdEgHUMuRg6ywG4 oziKXHYBxg/PAPk/Pg4fwLBPhGWylxzTS+DCcwT7vz5LpQRa71Sot4GcQfvNTD3gUupyZfkset1 XxnkQ1+p1jHgc9gfsq2PsdWR1NX+8Ongj5AhJ+OQRmdakX4Zyi/OTV5ihEFUFn6FBCOpJnS3vDp IIJLbv1dDyLpTneb0m2jGELZwyvBo3bMd9tOGKS0JdK1LjoKV+QeIpi3dUvIQBJEnBst0on/p5p m4J X-Received: by 2002:a05:600c:1e8b:b0:48a:f18:ece4 with SMTP id 5b1f17b1804b1-48a77b176b3mr49380825e9.24.1777386832704; Tue, 28 Apr 2026 07:33:52 -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 v4 03/11] xen: move declaration of fw_unreserved_regions() to common header Date: Tue, 28 Apr 2026 16:33:32 +0200 Message-ID: <2c26370460f0380bed128cbb59de4eacd77a8456.1777303844.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-33051d/1777386833-A376E938-8B277FDF/10/73395122804 X-purgate-type: spam X-purgate-size: 1457 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386870566158500 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 Reviewed-by: Luca Fancellu --- Changes in v2-v4: - 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 May 3 14:20:01 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=1777386878; cv=none; d=zohomail.com; s=zohoarc; b=IpqDCncctxhg1J77iwzgYBb23IM92OXlrRB2Fpl4EmN4Sm2eF1KY/HQ8dON/XzkYFAuDSa4blNwswLv1BkZl6wZynC/5CVvY0+ppeUQF69DDp/QxhpHnpi+J5dQYZMDS+FdmVDsrbm4orF6PFIc1QkOnL+IH85pPEfl74K2+z5g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386878; 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=HJckSt8P9RqMXs+Zl/HaWVhTtv7+MRR8ow5oSeYh3yY=; b=khCQz8ezb5M5zTijdwtXOhdxDhJU2RzpydDGrNvFGm/Z/JknHDobFznqiUXrs8HR8CFZIOD0q4eYI6iOxh4i+xkYxPYwiC319GWU1/GBMG0igFKMv+N8Cu69NQdJDbr5B1RlGjPB1NHtw4q6fGCVVbJtoSESiXcUk0jKm3sxNvI= 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 1777386878981718.5836428189549; Tue, 28 Apr 2026 07:34:38 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296332.1572777 (Exim 4.92) (envelope-from ) id 1wHjVd-00068u-94; Tue, 28 Apr 2026 14:33:57 +0000 Received: by outflank-mailman (output) from mailman id 1296332.1572777; Tue, 28 Apr 2026 14:33:57 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVd-00068g-52; Tue, 28 Apr 2026 14:33:57 +0000 Received: by outflank-mailman (input) for mailman id 1296332; Tue, 28 Apr 2026 14:33:55 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVb-0005q2-KS for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:33:55 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVb-000RTW-06 for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:33:55 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c548-2eae-0a2a0a5409dd-0a2a4501d626-32 for ; Tue, 28 Apr 2026 16:33:54 +0200 Received: from [209.85.128.48] (helo=mail-wm1-f48.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c552-c1f2-0a2a45010019-d1558030e130-3 for ; Tue, 28 Apr 2026 16:33:54 +0200 Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-488a8ca4aadso159479825e9.3 for ; Tue, 28 Apr 2026 07:33:54 -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-48a774b6300sm19302145e9.16.2026.04.28.07.33.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:33:53 -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=1777386834; x=1777991634; 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=HJckSt8P9RqMXs+Zl/HaWVhTtv7+MRR8ow5oSeYh3yY=; b=aJC1bUhZBM9AD45Wb3MiNlGtFtG7eDZCQM2oAj2ssWcEV7FEjGug8IPJsNKFKf73CZ 0rvc9jIDmDQMmruswVfd0sZ7ueWKE8bQVwK2y4lA0Y9faeRgVDGZAqZmyEySayLck4dX oWp+wB+IMLGN3WCrJwXbyGWRK9vdbCgon3Hh2n76fk6FlJ+UH4GO5+6q5JXLUMGzFffl XyFkwLm6N9nSI04U7oVBtzKuv4mvKt2205KD1Yzu0P2B44XT/J9D1gW9UWszsJzVWuKP ncriXmvR/E9xN2kKrDE+My20XvM7uvThOqO3N31Og7RY0n6AybjeIcdKYzs6I1YmO7+i UEjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386834; x=1777991634; 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=HJckSt8P9RqMXs+Zl/HaWVhTtv7+MRR8ow5oSeYh3yY=; b=RA67P6BElqwmNTG69n/r7QXsgAPYv0KtCf8IgnQr4yyvuA7C0KNuxI3aYvfBIDj2E6 4o5XIn5loUghxa9RLiMAYIYBTTLDO36Wubax6tfjeURJHiFAYRdrsiZEDMf7DUQiWrmG 1tRPaij6byl4BAT8P+zVJZwg5eOUKy0JurzWWb+moPtlWbKtBUwZ7BduY8zgYJK5shu9 cM59jUKny9IMD9ZflOxxP0UMui7NKT6VPlgtOOIDIlVo2FusS9e+QMcz3gm2HchFseaM XgzuUUaTuB75qjHHaGa8EtPYXtbo1Pyj1B+o++NXDBYKQ3KFDaWIR9LYdlK8oYnBli/0 nUeA== X-Gm-Message-State: AOJu0YxDTPtSSovlmWF6ItfOMXEfhWXT/qjS7Nvd6TJqD59HocWmXUUm i/bdN+hGjIlFnyemY+6P7fOlOFlsulmWQeqkDE5tH0S40foVyjx8z2WEeNYTdw== X-Gm-Gg: AeBDievu8oOpC2LX+h55udKrwlbZppy0Vhg5Z3gDOE8dwOttHsh+xIUiJeJh4275hRJ ijA9dgULWk97bJzt6gUa3Ppwm+/nKtb3YtDzQnaYrk6kWGwQek4OVxdrIWLdyndHFft3UNu9vVr pnNP1Pj3lgnI5Fku7f18sWrAZe/KYvlONqwwijNZss0Ad/x8ckgIwrgj/aJMc9sxYb7iX8yhbi2 DlE3Vd0SDbUtpbV4H06VOoa5U54aoiQR8eI8GnPOGqXQ+CV8tB6D7Ssm3orLj5vc0oEC1p/YMDh GYNVBj9B/ZTLTZJkdOfHGsHVXHErWV3SjZZtiz1+2nYoYl+xiKg+rVeF80H5X+aBOfG8zCWe8Bk RTOhA1alY+kmt0zwLsqglZckOjh7ocaXhGj4ZZlu0FS/v8/jUa9u9xl6NQdtuVdrnsE/7N6yqPZ 9KZwDN5XZC+8kIAHURd/1oRI3Q0mRUJAWmOwcoBzzUdO34POZBG2c8kab7BjMojkyAHJuKbGfWC HHVNuvHdvnVWZM= X-Received: by 2002:a05:600c:3b15:b0:488:9439:881a with SMTP id 5b1f17b1804b1-48a77ae5448mr61360215e9.2.1777386833911; Tue, 28 Apr 2026 07:33:53 -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 v4 04/11] xen: introduce domain-layout.h with common domain_use_host_layout() Date: Tue, 28 Apr 2026 16:33:33 +0200 Message-ID: <2577e757d32f85fb8b3308863e6d7a53d70636dc.1777303844.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/1777386834-BC410FF4-DCFBBF00/10/73395122804 X-purgate-type: spam X-purgate-size: 5464 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386880707158500 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 v4: - Update the comment above domain_use_host_layout(). --- 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 | 27 +++++++++++++++++++++++++++ 5 files changed, 30 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 ad665cd3c045..1efddc60ef0a 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 b24f02d269be..46a5cdc0c800 100644 --- a/xen/arch/arm/include/asm/domain.h +++ b/xen/arch/arm/include/asm/domain.h @@ -18,20 +18,6 @@ struct hvm_domain uint64_t params[HVM_NR_PARAMS]; }; =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 c51520ebadf9..6949203dacdc 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..0532a27b44ce --- /dev/null +++ b/xen/include/xen/domain-layout.h @@ -0,0 +1,27 @@ +#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 domains (including Dom0= ). + * + * Direct-mapped domains (autotranslated domains with memory allocated + * contiguously and mapped 1:1 so that GFN =3D=3D MFN) must use the host + * memory layout since GFN =3D=3D MFN by definition. + * + * The hardware domain will use the host layout (regardless of + * direct-mapped) because some OS may rely on specific address ranges + * for the devices. + */ +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 May 3 14:20:01 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=1777386871; cv=none; d=zohomail.com; s=zohoarc; b=Msrp15ZMXiY35/utXowPQ50IPG8KGLy8r5hJifBVqZoWA76UAg7syeulDGZzmYGfvh0oGyJTKidhyqhNkMkW2rP9pA4e4lmqK7JXP6o8GXHX1aTwfTFxjeITfLgMKHlr6ZUxDea26GmkuQiCfdrN4AY/GfZHoOmDjrDJ8OTTzbg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386871; 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=iWmwHX2hyXMUT5t3JOczqjWzu0Tj+8NV1iDRnEin18E=; b=PGjeqY87o1WWQ10OYNf5/bC1aZsSiBwM16cF00R84kDXLnFWn9n1/uZOArMWJ1Q5eygOj/hS5mvvMNpasJsAb7CJof/mK4FV7PyIeab75WBMiXUa2u7HI3rNwNjlM6SlzbPY1i3yCKruYc7dHNQUYiyAhYTie8GK0ADBCK3KOv8= 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 1777386871339132.71046164797303; Tue, 28 Apr 2026 07:34:31 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296333.1572782 (Exim 4.92) (envelope-from ) id 1wHjVd-0006CN-KB; Tue, 28 Apr 2026 14:33:57 +0000 Received: by outflank-mailman (output) from mailman id 1296333.1572782; Tue, 28 Apr 2026 14:33:57 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVd-0006Bs-EA; Tue, 28 Apr 2026 14:33:57 +0000 Received: by outflank-mailman (input) for mailman id 1296333; Tue, 28 Apr 2026 14:33:56 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVc-00062i-NF for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:33:56 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVc-008e9B-3B for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:33:56 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c540-e002-0a2a0a5209dd-0a2a4503cd3a-32 for ; Tue, 28 Apr 2026 16:33:56 +0200 Received: from [209.85.128.47] (helo=mail-wm1-f47.google.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c553-672d-0a2a45030019-d155802fe05a-3 for ; Tue, 28 Apr 2026 16:33:56 +0200 Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-488b0e1b870so196654425e9.2 for ; Tue, 28 Apr 2026 07:33:56 -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-48a774b6300sm19302145e9.16.2026.04.28.07.33.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:33:54 -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=1777386835; x=1777991635; 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=iWmwHX2hyXMUT5t3JOczqjWzu0Tj+8NV1iDRnEin18E=; b=GAvp8BV4rpJIMW8uFSCIcbBHCkIP181mmOj1vfpaCNUETOTjab9daycXe232LaQ+2X vYNfuKDx0ksQjqzWrnNXle5qiV1+BYPxsrj1UA95arrQPITZfABEZqpwRJ0CFoBUH1Zx QLV2kg3wjRN99rLzMsXQbugeOwoOjn4c4s772jW+U4wGt/rLcrwTtF8XB7QqCAfxX1S/ 5V4t39/aDRkvZPtvjhdqsWKTubl9LpQLrUUV6hv77PoVF/jvv8p0OfqxiawP1KNUNF59 UpUiAik63lt+T3N/DANobRcxcm5rk64NqaurYHs0ZClls6GvQKfL11E+TLPlAKmAavkp c3qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386835; x=1777991635; 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=iWmwHX2hyXMUT5t3JOczqjWzu0Tj+8NV1iDRnEin18E=; b=Fl+hTJO2r/N0lIk235iqwUdGLLjuxQ6vU2jdqPTqBut7Siod3L5f0Ekx8CrZF1QqhV 3nhKft9MroBJJpMxLq2hZLzBWU2KD61+GDvojBT6INmamC0rqeD0/l0m2w7FpznMaXpK FhiBZ2uC6QbiaINoSSOF1YNICRKipZHq2GReFmdFhPR7Dn7JRu6TBe2ScUQPQFBFgiIV k6HnnJOarjSAUC2zhmKjYOVK40YPQdHFNToOs15VGA02af35zeGTJkyrjUPEGt27JBzi vgeHCMT7QzCvTalP6eMs7w2s+THhLNE15O6r0w2cic13gEbbpX4FdPO51etT6575lKgB Jqxg== X-Gm-Message-State: AOJu0YwetycEwz0qpUHtkAyP/5G5i8JQ4aB9dt1KSAS5eTUMtQ1uKtT4 iWejCPEyZyb0xEV6ERe2IrZVCyZZ76qyFu2oaw3AwK5a/wr7cr6qvu4g9sIkow== X-Gm-Gg: AeBDieuZrhpPrmyM5mdEBiy5MqZIUsosM5jbgxIfMQebP4/0BO1TtrBS/2NEcIczOwA LJW8YVLGoL6efRWjNGWwKFL2RXIgIhPzohQkPBpUgbkiMl/4rsESbTfn9fiLTU32VAx7ppx5biI 0lYGTLvCnboudG/cMT4KwH6UeJa1K2Ouqxycu8/mDegVDtvuv5jcAvMvit9sgHaE22r+Oady15K BG9NIWFL29dBImJrXt9TLe03PDjePlofhswyx/8l1AtMkUpN5Jf5yF40wghkbIlZ/c9VJFaegKI tDVTuUj95YiKG48mNHZ0eD1UsUJt5PhqHUFi9ZeS3PNrOgRE5y+jRucL/1K3FJzxreOstmA9pdo RMyoX08x54L81VeHIkK3qzS7p3h6t/vIlKa6BdjIFvuDd3ZK0XYhJxlZPiiBWx/Xt2OAN3/Fhfb IkxYAi3lRR++FICw9wmKcoQTcMwlIyeNbDdqBvS+Jhs6V/vh5gc7dEgVmbRu6dRSjvpWHIWUJS8 geA X-Received: by 2002:a05:600c:1d0a:b0:488:f453:b976 with SMTP id 5b1f17b1804b1-48a77b2051fmr57589655e9.27.1777386835182; Tue, 28 Apr 2026 07:33:55 -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 v4 05/11] xen: rename p2m_ipa_bits to p2m_gpa_bits Date: Tue, 28 Apr 2026 16:33:34 +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-33051d/1777386836-2957F938-F463B9D7/10/73395122804 X-purgate-type: spam X-purgate-size: 1769 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386873041154100 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 Reviewed-by: Luca Fancellu --- Changes in v4: - Nothing changed only rebase. --- 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 6949203dacdc..2a760b007b57 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 May 3 14:20:01 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=1777386868; cv=none; d=zohomail.com; s=zohoarc; b=JJXI3/lc0YIt66wZXqmxZJxNyNNuRP++lnwBuKCNT3SnFZj48WJc7zAkMkp+AVPr+5cM/UFuGXT6nW9IZPFE4wz8Fdu7eSTy3ho3IsdA+z8hdq0cCKkrPB+pjK+AFi8kW5v3p+I+QoKJBCq0XNiB6m4axpDOH55cKPTivmCtNp8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386868; 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=0p2rPrjn5OibxQ2M64WVzW16uHfFGsN8U9iQfuox9F0=; b=D/RzNe9dw/ZL//f+WBzOdXuG4k6LzbL/95c05SiizyTFEkNdRmsz97qnViBhDPUxQky++sWKdS5mfKoBJQBmpGKOeGRBofbUFoj0JnIOOrg2M7UmEvxvkCRXQxJ0YB+lzSc6ssN5cau7NXNDJeWOCJ6pucTKYqm/r0CEVYV2rCc= 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 1777386868988996.3810955553521; Tue, 28 Apr 2026 07:34:28 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296336.1572796 (Exim 4.92) (envelope-from ) id 1wHjVf-0006du-Re; Tue, 28 Apr 2026 14:33:59 +0000 Received: by outflank-mailman (output) from mailman id 1296336.1572796; Tue, 28 Apr 2026 14:33:59 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVf-0006dm-OC; Tue, 28 Apr 2026 14:33:59 +0000 Received: by outflank-mailman (input) for mailman id 1296336; Tue, 28 Apr 2026 14:33:58 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVe-0006KX-3x for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:33:58 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVd-008e9B-Fy for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:33:57 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c549-e002-0a2a0a5209dd-0a2a450ab9ca-34 for ; Tue, 28 Apr 2026 16:33:57 +0200 Received: from [209.85.128.46] (helo=mail-wm1-f46.google.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c555-56b3-0a2a450a0019-d155802ed89e-3 for ; Tue, 28 Apr 2026 16:33:57 +0200 Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-4891c00e7aeso88343765e9.2 for ; Tue, 28 Apr 2026 07:33:57 -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-48a774b6300sm19302145e9.16.2026.04.28.07.33.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:33:56 -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=1777386837; x=1777991637; 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=0p2rPrjn5OibxQ2M64WVzW16uHfFGsN8U9iQfuox9F0=; b=q6v3sotR/hyBodh/pDMvS1DuMVm/Yd1KxIgFhrgnKNAUp6sbkHGym9vcp/6uQxtwqm /eBPFrmyVJdrxFedaxIEQMdWr8lKOyCtkGrhyYehP/eZnxO3HPg6tjEJ4JgmmRck5U6E hK7pd660ayqk+nBfC0OCL6WvitbBlRWC/2pgr5qB9Z160LjDSIFpGrKjFoSV3mFGZkY3 5xn2+77UrS29iBW0zs+4ag/JwY8aSrPs6skzJwrAnwVlreyNAWkU4PrxAGlfEFS8dVlh xddDTE4SN3n4xxRj1M5Typ70MlNPlQbvzupZvABhDKZKp+k1SN6RgTy4sQzv3IP0vYlK noxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386837; x=1777991637; 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=0p2rPrjn5OibxQ2M64WVzW16uHfFGsN8U9iQfuox9F0=; b=HzjMas+ZwCR7enQcfC4acpo1yjxUFCkaJ35uca6yzWuw3gMDSKAGNAdUn7PpqBrP9X OVXGC+EnYY7TGEK89CU/oofMcoG3HOUp+9OpkNoR8T5r1/cbEnYkAfe2z9iaC0L66q5s kzsSkTpmVwoV0FnRB8qyumLItaw085F0CwWk90uA3QBi0mOPIV/yxHgI8Ipno7qjLXU7 DMaOk2/jLKD8ZvzkoLBFfefnj237dQyBNalwITlyUaECAUQXyL9BW2uTWXbFgMdB77N2 Gpp+tQF5CJIV7dEl6eWfQLmLbpQW8+YlRIe+1b+jO1K6wv6NqvFoYq1WCOcK6euFJbA8 TwMA== X-Gm-Message-State: AOJu0Yza4gdwr/Vy9SfBF7JjaeeNvu+bYvercHhPCJ2KkIUVK8Zfd8Ph qdyOGqttnjL8MOeJzP7AJbRJ0OoUr0JA5Kij0pQpGtN9cqECBlG8f3GTxYAPPg== X-Gm-Gg: AeBDieu2kHbF6Y+3HwMGqNuz16+z4F5238/FsaKIUXKscf45bj+I6clpMQLNlHud3uk xzXwp62/Pww/iP65vvK9hcHHo08oX/r1ZvGaYLdkJIeGgH/IpmGHdIHAKWCSq0W03HTkL9g2hZ4 AqG4Ocw7MQU2ntbI3Eaic7R0QsS4Us2gx/pDX3qMoDDh4EpqmHlnJItRpRCx3/NJR/3HBH+bV51 /PGNYuaUZw4XH73M6987kLRhxw9Rwn74G6j7D3fXnq32y1pFysFdJw6yHBOC7J9iBET6P/NNvJ5 gvdvVBhecS9mIenBN/pJZe1HUV2INzcN1lQZP6tLfLm6H+AYqrsnqzUvDb1xwn2DpQzwJH7Bgl9 e+tM/EleJV68U8Qd/cKjeVJSgVF0374gml4BFyg2D0pJRsNY4MM2nwhvnWYe/PB/2NVNDAvtWUN I3zn1aiO4AmnBxXQh7+QYAOh/BBm9+Axk3ysR49mY44LwvTQCoyqU79CYcPT/xPXLtYOh7rXxe3 389 X-Received: by 2002:a05:600c:1c20:b0:489:1aed:1658 with SMTP id 5b1f17b1804b1-48a77b241admr55613805e9.23.1777386836472; Tue, 28 Apr 2026 07:33:56 -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 v4 06/11] xen/riscv: implement copy_to_guest_phys() Date: Tue, 28 Apr 2026 16:33:35 +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/1777386837-467758B7-47A8CE3E/10/73395122804 X-purgate-type: spam X-purgate-size: 6519 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386871100154100 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 Acked-by: Jan Beulich --- Changes in v4: - Avoid using of min_t. (sync with Arm) - Add Acked-by: Jan Beulich . --- 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..8a89212e0bea --- /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(len, PAGE_SIZE + 0UL - offset); + 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 May 3 14:20:01 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=1777386871; cv=none; d=zohomail.com; s=zohoarc; b=MWHB3lRz7JPrqojMqy0rdQ5S4kleOJgOopogyFSJ2bknGkvURbF+cer5y0Hw7TqwjGOz/6cBuc85ayF0p7be100cOonOPlqpWj1auBDjMsP6NtdPd92YWEiDTCbOc5OUT+jr/MhGCRUvQrH1qDFx8pEZhGblHf5q1/lZMkI91SU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386871; 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=bJSZfDZmsT3CIOe+qmGhvl/hB/yKGv3ZJ6HZqE/FbGU=; b=VgkxMsmMuPeqHo8ZgE6pQ0HOT7OjhVyU0zaJPKK/ZJUuY9BLF5ucffJPI+DPwuwpDKg9j2Q3ZkZCPm7KGNMGos40zIqd4lMsFgXl3LEJYXPRcoVtJqec7/wm9r5/aUUFTPmdFFvn2ByrxpSRQR3rClsrlFfVFEInQN9EUwSQT34= 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 1777386871834937.525265451619; Tue, 28 Apr 2026 07:34:31 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296337.1572806 (Exim 4.92) (envelope-from ) id 1wHjVh-0006tW-Ad; Tue, 28 Apr 2026 14:34:01 +0000 Received: by outflank-mailman (output) from mailman id 1296337.1572806; Tue, 28 Apr 2026 14:34:01 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVh-0006sd-1W; Tue, 28 Apr 2026 14:34:01 +0000 Received: by outflank-mailman (input) for mailman id 1296337; Tue, 28 Apr 2026 14:33:59 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVf-0006cZ-Bm for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:33:59 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVe-000RTW-Nk for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:33:58 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c548-2eae-0a2a0a5409dd-0a2a4501d626-48 for ; Tue, 28 Apr 2026 16:33:58 +0200 Received: from [209.85.128.46] (helo=mail-wm1-f46.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c556-c1f2-0a2a45010019-d155802ee026-3 for ; Tue, 28 Apr 2026 16:33:58 +0200 Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-488b0e1b870so196655385e9.2 for ; Tue, 28 Apr 2026 07:33:58 -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-48a774b6300sm19302145e9.16.2026.04.28.07.33.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:33:57 -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=1777386838; x=1777991638; 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=bJSZfDZmsT3CIOe+qmGhvl/hB/yKGv3ZJ6HZqE/FbGU=; b=FPRkagivTRTkvPrr9DgTrmPJ6A5qzrmzZNs2fIZsLQ8ZPmxEPetYngzYCW0q2XyJ7z NUJ50SXTThw/w2DeUDz4rgRhLghew6Pl8X1DjZ2ejH6sJZG9l4h67h+amrKi1nzIUDlm cwHzpWA4Qq+DPQTe6Lxm9Uk1jLF1M5lvkcAUs77bfbOrCgWMaZEoG5XA5vH3ByfRjtZf d6fChtIOnjeISsNRZLrXz8uE/cK4hxv55dqA+4qYe5se10PD9Q2f8XtvU4nAAPTYq9dY ZyvPoPoSJABf7Mnh8VqYs2W9WZmjKlfIEMYBsKQt/Juu/RNHzLBLgnuG4OGTbYS0lYCy rQqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386838; x=1777991638; 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=bJSZfDZmsT3CIOe+qmGhvl/hB/yKGv3ZJ6HZqE/FbGU=; b=PReBikdlPq6Yei4Ymis4ZBQ31q1qRImHjRDjc3+vk2lYEurIluSS+mnfcbAdhpXQa2 +jSyMTEVqANq9RkCImBLpYDq3BiRBInUbEFOudZBIIrGoEPowxp4HJy4VkwvrLPhaP6+ OdIgzAQqWd/7WNqycIH4JaQPb+iEtes9+89rSehTSkPSF2L6UMsTZcCR2s3jPKdh/5lz E69eyp9F6EpVAZ8Lw5KhpVFPmu6GhfNdhqFowNGC0ARP8QQ8waiwazWaE5KNKYHSUAsb 7AcrnMZMEmj4BogITD3uwOftxUMkcfGip58B3GOeedRvKAkLTXqZlvT02WeC37x9gkzg +m2Q== X-Gm-Message-State: AOJu0YyiMmXrqVt4dGs2niYM3I29CDM+lCTX82WHn1cRdxRG9Zjucwpe fjVJiuhJiz2AWKiW/xJcL7tEu1eYX6Z+ZAogQLmkgckWukbQDVo5aR41AcaiNg== X-Gm-Gg: AeBDieu3g/A6h1TG0H5/O5M/jDbJJgZ8aGFkcUqts8582EC6Ei5i3r/dUtz5wirWQAu GGxwPsfBcref1u97vsjInCf9jFqbWS2OylQ96zMvyFzjcNGzaLxkZE6xon63bPfuN9fsqhQ+P3s efiwrwWNllp0z/0+nwYxxQCELTwodCzM59GBQYZmg/Ah6Bugg5Dbi409ldX5EKJmcannK01YAEI gl8qJtNWF0dUBiD8QQpIqdA7xiXoSzF6evCrWebtkW8zkSAbPlBob8noE6TqTPXh37We5ISoqGr CNbPEkI6YPXLfq7FfLPuQMDAnQp0DK2w7W1C4yFxBW+mnzFW6nARX63iLsgDgU7pEzvfbfsFe2a Vd/z/VD1R2QL6t/oVoF/C4QK+l7SzsxL5nqO20jw1RI34XcuierutEoFmXrFAehyCQ8QBDmLUa7 sq8gdEnZOcnfQccCqByZQfYPqk7IhVOil7Gtc2UUqCwa04D0iTr5IsNY8TCwtt/YPav58V4zE54 lEG X-Received: by 2002:a05:600c:4f92:b0:489:19e9:b139 with SMTP id 5b1f17b1804b1-48a77ae54f4mr52698725e9.1.1777386837671; Tue, 28 Apr 2026 07:33:57 -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 v4 07/11] xen/riscv: add Linux kernel loading support Date: Tue, 28 Apr 2026 16:33:36 +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/1777386838-B727DFF4-D3108EBD/10/73395122804 X-purgate-type: spam X-purgate-size: 11996 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386873231154100 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 v4: - Update the patch subject: add "... Linux kernel ...". - Make bi variable unsigned. And use while() instead of for(). - Update the condition which calculates overlapping of kernel with modules. - Reject a malformed image before the loop to avoid wrapping load_addr + image_size in the per-bankcheck below. - Use mathematical representation to print ranges. - Use #error instead of just returning unsupported. - Update the comment above stuct image in kernel_image64_probe(). --- --- xen/arch/riscv/Makefile | 1 + xen/arch/riscv/include/asm/config.h | 13 ++ xen/arch/riscv/kernel.c | 242 ++++++++++++++++++++++++++++ xen/include/xen/fdt-kernel.h | 11 +- 4 files changed, 265 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..dd79f457732d --- /dev/null +++ b/xen/arch/riscv/kernel.c @@ -0,0 +1,242 @@ +/* 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; + unsigned int bi =3D banks->nr_banks; + + 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. + */ + while ( bi-- > 0 ) + { + 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 modules would overlap the kernel, try placing them below it. + */ + if ( (modbase < ROUNDUP(kernend, KERNEL_LOAD_ADDR_ALIGNMENT)) && + (modbase + modsize > kernbase) ) + { + modbase =3D ROUNDDOWN(kernbase - modsize, KERNEL_LOAD_ADDR_ALI= GNMENT); + if ( modbase < bank->start ) + 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)); + + /* + * Reject a malformed image before the loop to avoid wrapping + * load_addr + image_size in the per-bank check below by setting + * bi =3D nr_banks. + * + * image_size covers the kernel from _start (placed at load_addr = =3D + * start + text_offset) through _end. The alignment gap + * [start, load_addr) is padding and need not lie within a bank. + */ + bi =3D image_size <=3D (paddr_t)-1 - load_addr ? 0 : nr_banks; + for ( ; 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 + image_size <=3D bank_end) ) + 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) +{ + /* https://www.kernel.org/doc/Documentation/riscv/boot-image-header.rs= t */ + 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 +# error "Only 64-bit RISC-V is supported" +#endif +} diff --git a/xen/include/xen/fdt-kernel.h b/xen/include/xen/fdt-kernel.h index 54be77aa191e..c69da642eba8 100644 --- a/xen/include/xen/fdt-kernel.h +++ b/xen/include/xen/fdt-kernel.h @@ -59,8 +59,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 May 3 14:20:01 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=1777386886; cv=none; d=zohomail.com; s=zohoarc; b=iBgORs5y60T3dWdkY3sSA34ICZpcwhun5GDGsL1GjaDu6FIFMCXBofl0EI14+jMU78WEBcyEgZNRoZN8IVIfXZbxP9CuE4jwMHB946AWsk/QzzmwzLxWOpkoaiJ+ykkznvY8uSV6GqcB7V79dmwe2PoObMTfDi91GbhEKju5a5g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386886; 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=flD7ZmhwssMnyYfAVHC55aOI9OknAA3VNVf0Nz/lr7I=; b=gUi82YmD5y73YlPdwyoHhsRac/xf5x4goYFXs4czkK4US2h9xT00FepNjbVdzF3XU20GewPyu7/kdAxKUJLNumj/DxonwsbXAYEYPrdud1azbeO12Z93KFHLlS9bZF1DcJnYLnWchaBpwPsjPTq/rUuc6d4UKLiSsVwuVz93t2U= 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 1777386886059328.4052072500666; Tue, 28 Apr 2026 07:34:46 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296342.1572814 (Exim 4.92) (envelope-from ) id 1wHjVi-0007B1-ON; Tue, 28 Apr 2026 14:34:02 +0000 Received: by outflank-mailman (output) from mailman id 1296342.1572814; Tue, 28 Apr 2026 14:34:02 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVi-0007AP-J5; Tue, 28 Apr 2026 14:34:02 +0000 Received: by outflank-mailman (input) for mailman id 1296342; Tue, 28 Apr 2026 14:34:01 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVh-0006r9-1d for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:34:01 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVg-008e9B-D6 for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:34:00 +0200 Received: from [10.42.69.1] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c556-e002-0a2a0a5209dd-0a2a4501afa6-6 for ; Tue, 28 Apr 2026 16:34:00 +0200 Received: from [209.85.128.49] (helo=mail-wm1-f49.google.com) by tlsNG-d62444.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c558-c1f2-0a2a45010019-d1558031a9e5-3 for ; Tue, 28 Apr 2026 16:34:00 +0200 Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-488b3f8fa2bso117452585e9.1 for ; Tue, 28 Apr 2026 07:34:00 -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-48a774b6300sm19302145e9.16.2026.04.28.07.33.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:33:58 -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=1777386839; x=1777991639; 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=flD7ZmhwssMnyYfAVHC55aOI9OknAA3VNVf0Nz/lr7I=; b=W9EP6m8Pb7I1AcLFBTDh2ygI0BxNL42SgPZNExoXcfbzBKSUHks4KqeudDPC0leUqb bT9TEg+gdloHJftHqTYZcxvi13JR+b4t97wXtlCJh9rL6pEIz0cjzhRANzF1W9k+p3qc zsTnJXNiD+fALNOTh1P2CGhU8AitwxbiU3zeWEg70nS+jGgmt7w2rpUsQRF30Q87ihaE XWeqKrURym6a34DDvt7vddR/08w7Vj/j2jkUJewCIf3mB+2dM8WIC6hAJ6qeJiSm3D5U V88mfHQdV1AJg1GdL9qOYAtHfEC6B1oEdc/9e+RyhTknxeBlMsH1aIHyvSzDsTg5zUUx FlAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386839; x=1777991639; 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=flD7ZmhwssMnyYfAVHC55aOI9OknAA3VNVf0Nz/lr7I=; b=Qe3mAS5hhDYoG8PDgjj97bGU07PIsbYMi8IpuD9ZYFQW6VhMCBZ76kbqVO9zqTODAv 5MVGdEXP5YfBZteQ3URleRe9sXmSJ6hcPBwIa9KgQR4u1n3iq66acw18HeRrE8K+Rgn0 Jd/6FiMlt69UoMXcXRF5IeaScFbQpICNcKiRON62vxh/iSmTuPlcS4BpiZvmCKCrXEkW iLVuF/k/lajmumHD7Qh9GLdy3ui9APDVS/w8Z1giGBby7v03rmrIuavigVpnNfGwwkTh tyrsjS13BabSYt5tCpDSpvaGuQuEw0pZUw6fyGIXE9fpdxKyrFI0voFXVtforH5/GoWF +W6w== X-Gm-Message-State: AOJu0YwbQLd+iLYoQaQxTW8vZXHjow7UZY7s53yIqdd6/RoZN8Al3D4U tWqsQslPRmtT1G6OafNaN3CtMzcYGxOPpc1TMOAzJGYYRkR7/9CsVK4H16Rtbw== X-Gm-Gg: AeBDiev4X78MOldZMyTInHUkTt/U7mnTn1Ct+yYjKbxcLhGNbtC/KPzJyx4TlrM4CYy U9/HoJJPKwJaR+4c1ZS8MYbilPveuf4aZ5qpPLXEgvU4S8J8KQQ6xu41gFUqvkJ/gQIXlpcVxYc QEs0nkcCeqnRRVAfuPJi1a0l5XtmwoWMFXOgUYlyl9Y2wqpSQR9fy0Vqba7xhDFaYKYeXfGmWmX d5ggl5v3F3fk+vRV60NRefa4da54a3YSjzJ9hcJryriLipuQisgpVzcFdJyP2C0cbfEk5yIIXkt O3yakCeZeum8kPiZMTdUDOtvbxNfJByI85TRKfMCivi9kGOGwDYZeyPtvqAZzYG56oVKJ/1P+zP ana4wKJWcuJ2lVjD8RGzupGKn6tRDGhIaRyXgw4xr9ZFODXHOP8G8Sy8bIVtsU/X9YJLIyvrFn8 /QFW82zFXdTOF9eYw9yiCTHvF7uGRSs8u/8TIdxmUcBlrMvVol2G6tAgW+qIiuPNH0kmDMmnK1z rno X-Received: by 2002:a05:600c:a403:b0:486:f893:56c6 with SMTP id 5b1f17b1804b1-48a78a391b9mr33404535e9.10.1777386839191; Tue, 28 Apr 2026 07:33:59 -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 v4 08/11] xen/riscv: rework G-stage mode handling Date: Tue, 28 Apr 2026 16:33:37 +0200 Message-ID: <865ed71ece75e850cdcb47ce9157a668a46a4c4d.1777303844.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/1777386840-BCC6CFF4-59E3781B/10/73395122804 X-purgate-type: spam X-purgate-size: 15471 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386886766158500 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 gstage_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 gstage_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 gstage_modes[], so each domain shares the descriptor rather than carrying its own copy. Adjust the gstage_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 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 HGATP_MODE_*, 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 v4: - Stray blank after * in declaration of find_gstage_mode(). - Refactor find_gstage_mode(). Now it is find_gstage_mode_by_bits(). - Add __ro_after_init for static local variable m in p2m_init. - s/ char gstage_mode[8];/unsigned char gstage_mode; in struct vcpu_guest_= context. - s/modes/gstage_modes in p2m.c. - Introduce P2M_EXTRA_BITS_AT_LEVEL and re-use P2M_ROOT_EXTRA_BITS to enco= de magic constant 2. --- Changes in v3: - New patch. --- --- xen/arch/riscv/Makefile | 1 + xen/arch/riscv/dom0less-build.c | 70 ++++++++++++++++++ xen/arch/riscv/include/asm/p2m.h | 18 +++-- xen/arch/riscv/p2m.c | 120 +++++++++++++++++++++---------- xen/arch/riscv/vmid.c | 2 +- xen/include/public/arch-riscv.h | 5 ++ 6 files changed, 170 insertions(+), 46 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..02782d0f9998 --- /dev/null +++ b/xen/arch/riscv/dom0less-build.c @@ -0,0 +1,70 @@ +/* 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; + unsigned long bits; + const char *end; + + 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); + + bits =3D P2M_GFN_LEVEL_SHIFT(max_gstage_mode->paging_levels + 1); + + goto out; + } + + if ( !strcasecmp(mmu_type, "riscv,none") ) + { + dprintk(XENLOG_ERR, "Bare mode isn't supported by Xen\n"); + + return -EOPNOTSUPP; + } + + if ( strncasecmp(mmu_type, "riscv,sv", 8) ) + { + dprintk(XENLOG_ERR, "mmu-type value \"%s\" is incorrect\n", mmu_ty= pe); + + return -EINVAL; + } + + bits =3D simple_strtoul(mmu_type + 8, &end, 10); + if ( (*end !=3D '\0') || (end =3D=3D mmu_type + 8) ) + { + dprintk(XENLOG_ERR, "mmu-type value \"%s\" is incorrect\n", mmu_ty= pe); + + return -EINVAL; + } + + out: + if ( bits > (UINT8_MAX - P2M_ROOT_EXTRA_BITS) ) + { + dprintk(XENLOG_ERR, "gstage addr bits value overflows uint8\n"); + + return -EINVAL; + } + /* + * The correct value of bits will be checked in p2m_init() by call of + * find_gstage_mode_by_bits(). + * + * As mmu-type property contains one of string: + * - riscv,sv32 + * - riscv,sv39 + * - riscv,sv48 + * - riscv,sv57 + * it is needed to add '+P2M_ROOT_EXTRA_BITS' as for G-stage mode GPAs + * are extended by P2M_ROOT_EXTRA_BITS. + */ + bd->create_cfg.arch.gstage_addr_bits =3D bits + P2M_ROOT_EXTRA_BITS; + + return 0; +} diff --git a/xen/arch/riscv/include/asm/p2m.h b/xen/arch/riscv/include/asm/= p2m.h index 54ea67990f06..638c60ddc2f7 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: @@ -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 @@ -55,6 +58,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 +73,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 +220,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 adcf292a7092..13846bee6a4f 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 gstage_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 &gstag= e_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,41 +158,24 @@ 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; ) + for ( unsigned int mode_idx =3D ARRAY_SIZE(gstage_modes); mode_idx-- >= 0; ) { - unsigned long mode =3D modes[mode_idx].mode; + unsigned long mode =3D gstage_modes[mode_idx].mode; =20 csr_write(CSR_HGATP, MASK_INSR(mode, HGATP_MODE_MASK)); =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 &gstage_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,35 @@ 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_by_bits( + unsigned char gpa_bits) +{ + ASSERT(gstage_modes[0].mode =3D=3D HGATP_MODE_OFF); + + for ( unsigned int i =3D 1; i < ARRAY_SIZE(gstage_modes); i++ ) + { + unsigned int lvl =3D gstage_modes[i].paging_levels + 1; + unsigned int bits =3D P2M_GFN_LEVEL_SHIFT(lvl) + P2M_ROOT_EXTRA_BI= TS; + + if ( gpa_bits =3D=3D bits ) + { + if ( gstage_modes[i].mode > max_gstage_mode->mode ) + return NULL; + return &gstage_modes[i]; + } + } + + return NULL; +} + +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 __ro_after_init *m =3D &gstage_mo= des[0]; struct p2m_domain *p2m =3D p2m_get_hostp2m(d); =20 /* @@ -341,6 +361,33 @@ 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_by_bits(config->arch.gstage_addr_bits); + + if ( !p2m->mode ) + { + dprintk(XENLOG_ERR, + "Unsupported or unavailable gstage addr bits: %u\n", + config->arch.gstage_addr_bits); + + 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 +409,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 @@ -1304,7 +1346,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; 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..da4cc0cbfcfb 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 GPA address width in bits. + * Valid values: 34 (sv32x4), 41 (sv39x4), 50 (sv48x4), 59 (sv57x4). + */ + unsigned char gstage_addr_bits; }; =20 #endif --=20 2.53.0 From nobody Sun May 3 14:20:01 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=1777386879; cv=none; d=zohomail.com; s=zohoarc; b=ILrYRj4Vp8FY3b7NC+gJM5RNQi8HIjMmGLJL+YQl+w6QdEGWSkY/BZqJVu8KfW2mschP+9z8TUygqS0T85L5rZ0VuhwrGto3lI4aRY6PYy/N7tGXdktXqSF+OMAjhwIA45aHTwr+hBzJX2lMHRi5KgKsS5mgyYI1YiwP57Wj8mo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386879; 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=2mD4jaSubu8Cvwa+Y6GVJ5L94GrQA3oWYu3F81YJEug=; b=mUV/uC/eUlRhEUcRb9iQJk4JHVSCEr3ee3W5E7h7ooNwH7ulhOjioy3jxr5r44H7+P6ZVQ4nl8ifhFzPzEHjH+0bdBbhqZqC/iX67YtnDqIeJ0FOPkpDoQAw4u+r8E8PwTJuTOstP47r0EKuNcgK215SR5OKuAuTrYEs1TOSPWU= 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 17773868796268.874516552601335; Tue, 28 Apr 2026 07:34:39 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296343.1572819 (Exim 4.92) (envelope-from ) id 1wHjVj-0007F0-5M; Tue, 28 Apr 2026 14:34:03 +0000 Received: by outflank-mailman (output) from mailman id 1296343.1572819; Tue, 28 Apr 2026 14:34:03 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVi-0007DO-TT; Tue, 28 Apr 2026 14:34:02 +0000 Received: by outflank-mailman (input) for mailman id 1296343; Tue, 28 Apr 2026 14:34:02 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVi-00072P-1g for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:34:02 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVh-002KhF-E5 for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:34:01 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c542-bab6-0a2a0a5309dd-0a2a450bd8ea-26 for ; Tue, 28 Apr 2026 16:34:01 +0200 Received: from [209.85.128.42] (helo=mail-wm1-f42.google.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c559-212f-0a2a450b0019-d155802ae803-3 for ; Tue, 28 Apr 2026 16:34:01 +0200 Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-488ff90d6c7so98959005e9.2 for ; Tue, 28 Apr 2026 07:34:01 -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-48a774b6300sm19302145e9.16.2026.04.28.07.33.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:34:00 -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=1777386841; x=1777991641; 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=2mD4jaSubu8Cvwa+Y6GVJ5L94GrQA3oWYu3F81YJEug=; b=bFwhUnXX54hSZEmkNB9oWPxgLN60qyozC+A0p/p0hVU3a8xNZTPwzpXyGVmNyEIn5c 5srCegq0EDZcVIvJZRaFcf06oOHfqykGUr+OMob0c1KZgYvmCnptadoLZhlhQ6OT+T2E v+mLpvue12sAbWn4C3JG3TkKqbYd4dhWv0hhvfeNtUbRBzm1S3FddXpM9c8/zFGlToIa 8FLQFlFCFmscUrK7POql8yIPI1bkeZN/8foRvo+xH4nRWzwE052uSqgOkFT2E2ATRNFU I5ElotivXjLhbAcMuglSRW21I6wPHCei0vUiuHKStPibupVKLQdG45eBb+F/kxjVHJCO nC+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386841; x=1777991641; 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=2mD4jaSubu8Cvwa+Y6GVJ5L94GrQA3oWYu3F81YJEug=; b=ke0hZX/xm7ytodQ7z/fhekJRok4iqf7l1c9SNaRpUUjlIWl3JjagqqHeoV5MZV/tY3 2mUhntLXhEfZNKs8U2RMh3WS3n0/A6xtqYgcLoHnohKCEAEwuvO8bg7DGrvAlAIulbiI CgBko/0ndEwu9pH1DFcXaYPezcVLP2KnUb2nf/7ScaIkUcCQV+qo+aLnpbb6limwZlHb 2yndErbfWqDK489x1zK/vw/KrPHHfZLKXOPPp2GgYccxGz3gt+XmiczDX3gvmM1lYCvX 7SPZvR6d+AW/+JV55+W7dQT3VfFNHfd5HQpmRAaR5Yh8TXcIyhWhC41s3kqiqzKom6Y1 rOTQ== X-Gm-Message-State: AOJu0Yy7SRhoK+C7cH5DUvK/7VIy+DTwzIv3SVOP7VFaKzayNyZjO6dj LUTwTkEMQojhuTUuAbud9GjTB8DXzw8QI2oUWYqRL5gD/0Iuyh3kav3dGXjRQA== X-Gm-Gg: AeBDies8DaU1H2b9ivr6/pE/zZD+eVZ80nW59nGbcR7kXp2E8u5LtomRXin+9W4uiEs F+V2ls7AAVhB5RSdfb0tJUruWHZCkvyfq3S5SX7OCY2uWT5BrLEjrYA/1veFXu2BX3QzuO+et47 eIN+B5FIbxLjiXMJw5fpcSguVNJapGUqWNVB9+ZiyVVw9e685KrR3etXkg864UFX2Drcy0kQvFl wAkxrxzKoCCnu2+YWn1f/6zNpGjVDzF8PxiSwNq+ZR9LFzbJTGw9bWpFDjeHtNOzRtywE/77LyQ 2hL4L6PoGbwqmQVxMPFNRmY+beHGzy1YNWJ40z143Y+MRBRt8UjoYliBE0xFj0oWcOVFh4x8akE +cNB7kepPTvhrQefgQ2R3qG+YOf8SOzxhAjQYYKufShDIRn4c7csokyf/8q9Cbd6Gd0uoi+RfqB hc+bcoaEn7mHvpkN6Pv4y0AOonPd6546dRAZh+1eDwqSLuJgjp7xSYtRpOTVRDkcRynac9WJumW f6T X-Received: by 2002:a05:600c:1393:b0:488:fd7e:1063 with SMTP id 5b1f17b1804b1-48a77b270efmr54164075e9.29.1777386840489; Tue, 28 Apr 2026 07:34:00 -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 v4 09/11] xen/riscv: introduce p2m_gpa_bits Date: Tue, 28 Apr 2026 16:33:38 +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-42698a/1777386841-7F175F3B-89F095DD/10/73395122804 X-purgate-type: spam X-purgate-size: 3213 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386880613158500 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 Acked-by: Jan Beulich --- Changes in v4: - Add Acked-by: Jan Beulich . --- 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 | 3 +++ xen/arch/riscv/p2m.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/xen/arch/riscv/include/asm/p2m.h b/xen/arch/riscv/include/asm/= p2m.h index 638c60ddc2f7..0d1dace1a0d8 100644 --- a/xen/arch/riscv/include/asm/p2m.h +++ b/xen/arch/riscv/include/asm/p2m.h @@ -47,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 13846bee6a4f..b7c36a75f175 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 gstage_modes[] =3D { =20 const struct gstage_mode_desc * __ro_after_init max_gstage_mode =3D &gstag= e_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, @@ -354,6 +362,7 @@ int p2m_init(struct domain *d, const struct xen_domctl_= createdomain *config) */ static const struct gstage_mode_desc __ro_after_init *m =3D &gstage_mo= des[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 @@ -409,6 +418,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 --=20 2.53.0 From nobody Sun May 3 14:20:01 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=1777386881; cv=none; d=zohomail.com; s=zohoarc; b=dBywecgnt0uc7r5rtTfygljjIpI8sYJH14j0Gkltsndg814kFAP4kxSQfH4a5OYwzPWciIqhIJ4Sdd8/TsPi/kiBItRdlNt9flWd75rxlufwgJcCUpfpBgTMIa64wKdZKpv6gW2v8Wlpi6hgRl6XCJVgMDe2uVRRjofltN0AO2M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386881; 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=qE2dw8csXVresMQtos7iCpzGyvAdlUSDFRumCHhApSA=; b=M7thJJN2NujBl2DuhaNv/GUF+VQhJzsca8UbRmiVdbcKPnribWc25i5gdU6nQpAR1W7hJVHBUrq2vutNnfNI3+2YpZFq047JP+l66T5c/nT+Tuwujv7ih5OYMT8M29yCCcQE8VlCyJtm1bptvjUfbtmRikb0RoZ+/ueFtcRe7/g= 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 1777386881537687.7068082003719; Tue, 28 Apr 2026 07:34:41 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296346.1572831 (Exim 4.92) (envelope-from ) id 1wHjVl-0007kE-Gq; Tue, 28 Apr 2026 14:34:05 +0000 Received: by outflank-mailman (output) from mailman id 1296346.1572831; Tue, 28 Apr 2026 14:34:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVl-0007k0-D8; Tue, 28 Apr 2026 14:34:05 +0000 Received: by outflank-mailman (input) for mailman id 1296346; Tue, 28 Apr 2026 14:34:03 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVj-0007G6-Bo for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:34:03 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVi-008eCF-N5 for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:34:02 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c54f-e002-0a2a0a5209dd-0a2a45029ad4-34 for ; Tue, 28 Apr 2026 16:34:02 +0200 Received: from [209.85.128.53] (helo=mail-wm1-f53.google.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c55a-af86-0a2a45020019-d1558035cc99-3 for ; Tue, 28 Apr 2026 16:34:02 +0200 Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-48984d29fe3so139792575e9.0 for ; Tue, 28 Apr 2026 07:34:02 -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-48a774b6300sm19302145e9.16.2026.04.28.07.34.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:34:01 -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=1777386842; x=1777991642; 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=qE2dw8csXVresMQtos7iCpzGyvAdlUSDFRumCHhApSA=; b=HvTHYapeLwtKYIpfbs4BvHqpGe3CXF+GbDS7+Q7ykeQz2Suz1Nj1swHAegyyA9WMkc 0pPafgzYzl0Vcm7DcmBNNm1YmOuNpQKzmiweQPpmRLkilpV99SETNZc50eH61F9ZXhqk 1jUaqn1iOIhZI7B50JPtRZW32iRPf3cGTK6HDqqwTAU5/5/Lt6fod3uZIznCfoBhM3yB u5H8WiUAM7VZ5DWmSDA1iW8m88Ajzad8y8ND6HipCaiB88ZuJ7M0t2Zb8+dxanIX4BjZ Jo6gK75Zg469TNH2tJ/S3zXspEEL6di+NQ6b8y/hyjbgkVte5SASa7YQFy1qYngb62u7 C0iA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386842; x=1777991642; 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=qE2dw8csXVresMQtos7iCpzGyvAdlUSDFRumCHhApSA=; b=p59EDe7S+tNtlEwuWv8a6XQFTUlvSYAI83ZB8FG/KUAUQULqdKFKkMIP4bkmO+yfnN GAwBp4RnRJwn0qxGV4VW84ZIavUCQfvj8hD+f2PuPLn4CLFFsxOiOkvOobhV87dGrfvE xWYImEjevMCcMsQ1i1I1pyJlhTSpfmXtZUrBrxGhCThJLMnIUl/QzP1f4mHAik6s9yKZ rlZIebdu3MSTvrQbwElQkw3cDjBV+E3OhKx43JrwyJvNFYxq7GPPVlX2O4qLvgUtH9IJ OhQu3CTNdU7gQDBm9meSh40MS9eHIYJfjBPnV8x4a2oruQaR8Pq5kBdwO69x+kMYZBz6 deaw== X-Gm-Message-State: AOJu0Yxnig9nuM1e3M2jaW0b0twOe40ZP5vRrMP4csZ1zEG/0y5fqGUa Z3oOjLUwej6SgK05jKpnaeqTcWZq6ytZ+zk8YJ9E7F1V7mb0jaJEMBJm3Mteow== X-Gm-Gg: AeBDieum++NpFILOwcqEoTvo958UBtcvWHePt4Viz2BB68rz70qe96LBdB6KpO69eqH /Gixz5iFrfhzx/VxWgPxvst5UKK6b34WI+2+PLg1ewDAIGZN7Q7Q55YZIyrEeDq+6OrCKhuaeSf e9N3Z0BEhycmnHGgJQ4ZjVJbZjevCV6sfFI0Q/7qcklIT9mpG6DGTUm4OPfX06w7ONXSk60t6eT L6EGGkyZEQSGzzDYFIwGjRcjYyxj45IW3/wjwimtY/IgXjajmlnQLHpo4F2vv52+iiSGncenEu1 kPXMsiudLQYY25ophUNIyaH0hm5MGZPCWl6A25wCmsTYzsPd46Je9D6kOQ3llD/LVJ2XeYKxiKL ys/UxNgSSlJwJlcI9FRiXYCb7sGgCmhyHhJqEnrTOjx8yDWlajAhxHAy482xxc3v51K0ceCGFEx cJ9m9+t7TiQN5AAHvFlWl5l3F9rd8s2Fs4361fdwQNC/Bs8gL8b6Jm+yOcn+wrIoR+N8FlS+y2u 0+6OBpLZCx1MYs= X-Received: by 2002:a05:600c:4745:b0:488:9bf8:7f17 with SMTP id 5b1f17b1804b1-48a77b054d8mr48581005e9.14.1777386841814; Tue, 28 Apr 2026 07:34:01 -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 v4 10/11] xen/riscv: add definition of guest RAM banks Date: Tue, 28 Apr 2026 16:33:39 +0200 Message-ID: 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-720697/1777386842-83F66161-9CF0018E/10/73395122804 X-purgate-type: spam X-purgate-size: 3186 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386882614158500 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 Acked-by: Jan Beulich --- Changes in v4: - Add Acked-by: Jan Beulich . --- 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 May 3 14:20:01 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=1777386874; cv=none; d=zohomail.com; s=zohoarc; b=il6R1ITjFSKyZP85HZoI2SHDvcW5BZlcwqoixs+HLiu1ajF12tk6PRJrWgE8XDwCwTQHYgPP8X6B8RUQwBCKEyZ78752t/dzZTqxykjSabTzS3V4TJouxk1n269agli586I0NJHIl2J02zdrrZudnGT42D5pEY02S/6p6kAxPoE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1777386874; 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=rqFpc480FdxV8KfuWU6Tba6XEMUhYTqnR2Ow7MIb3es=; b=kF/vQd2X+bceXrkBR0rZzNojFi8v7G0UWrIVfl9lhjJQn6GzxTO3zh9zBL8/gQwrusSo7vYPPJkbLE6lxEsqFk4DMYqJYsvsJy5/u9SdAcurUn1B7Tavo8zxszuH8IdLP6Ofl6rnHA8q4navaV9sjgcHfggXGYBhZ1oWNti2ADk= 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 1777386874653200.53137615605533; Tue, 28 Apr 2026 07:34:34 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1296350.1572841 (Exim 4.92) (envelope-from ) id 1wHjVn-00082X-D4; Tue, 28 Apr 2026 14:34:07 +0000 Received: by outflank-mailman (output) from mailman id 1296350.1572841; Tue, 28 Apr 2026 14:34:07 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wHjVn-00082A-3n; Tue, 28 Apr 2026 14:34:07 +0000 Received: by outflank-mailman (input) for mailman id 1296350; Tue, 28 Apr 2026 14:34:05 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) id 1wHjVl-0007k2-Jh for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 14:34:05 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wHjVk-008eCF-VT for xen-devel@lists.xenproject.org; Tue, 28 Apr 2026 16:34:04 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69f0c54f-e002-0a2a0a5209dd-0a2a45029ad4-42 for ; Tue, 28 Apr 2026 16:34:04 +0200 Received: from [209.85.128.46] (helo=mail-wm1-f46.google.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 69f0c55c-af86-0a2a45020019-d155802ec4ff-3 for ; Tue, 28 Apr 2026 16:34:04 +0200 Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-48a563e4ef7so80811895e9.0 for ; Tue, 28 Apr 2026 07:34:04 -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-48a774b6300sm19302145e9.16.2026.04.28.07.34.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2026 07:34:03 -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=1777386844; x=1777991644; 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=rqFpc480FdxV8KfuWU6Tba6XEMUhYTqnR2Ow7MIb3es=; b=Zpx32NRjOOzZURec42VPOY2f1eFIkJyCZcAi0hlApKXkeOwt/+th3KuNaEGhfcO7hQ GtmyC4ZaVTEU7toT6fkx+0iR36k9tcJxlucSUujcRw67Q4WiVMpnG2tTCqtGBjFbKsPw rqUVN2MHuUcsxMqjhN8EhfUuglvPMMtVeC12sS2lsQeaKdQsjoQzNKjBwnHR3XU2gX0c 57sJRbexKaaiUjiRY7xqAXCUVivcbtVGMjOijHQvt1EbqwqO/PDY/xjtoAOY7q8HgukB Fgmrn28CPb/S8+IJs/c0LgCiwBFHXq3Y2eM2pKaZ9YFpPOB6Z8ifvdScqkOKHCKAYPWJ RPIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777386844; x=1777991644; 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=rqFpc480FdxV8KfuWU6Tba6XEMUhYTqnR2Ow7MIb3es=; b=h6OOFe10MO8sv8DuIhabf6xYj81O7ci41e14nVJo6jZlhjtgFPo8Va6VojaPwQ11lK xTywrAB3HWSYTuXHkp7M8gbZHtaYM3a3+IdSOqBOWTwYkhUFO7F4MCYuH80tBgvNUx/e 5l31P7JPW7cKx/nfBiEqbKxDjyNirmhyJ2EMd/AHBz54fS19m3gA0o5iobPmFgEJELn/ YYKSU5AMPqBaI9m+LaxN03iRXQtgZqH/HArw89tlI8pfhzQ1u5J5d3FfkiS26VSRoIau X5kiZ2BnA+ICPiPTaSDUaT87i9BByFULPsFXUO7h7fGtLwWy/5DSZ8q/r+Qre8HC+RyA ON3A== X-Gm-Message-State: AOJu0YwcrRLt08DhEzeDeO+Btm+ofShEQx17wa1FDNP+K2PrTAkvoyL2 W2XoV576CYNF729BoJyS4Z5iegKt4tnGmIoYACDdgM0tzweLvsph7NP8574vEw== X-Gm-Gg: AeBDietklzQOD9ofmnzH4e8J7NaVGuuMzxpUaln4MmR+/60hLGi9r9+JOSokuAeq0bm Ey8uAcSmqHYLGx9cOos/bEEtMLMoLPyLBM399PruxKY9R5gXRiU1b2NEFctAkVBPI0kLUjmm+fL NSOXSZPpyKH1lMMeE9dgcHh8lbBzTT6OR5knUYuR/+IPOVqr4bebvE4Cw/MWadU5EUTGdQEkUFN rkwprrxXE0O9U2WK2GVoTBSJgHV2B8VO9fnEodwZJSi+GzdfjRKqUjCqpdVezJx2JM/VP27pyBl ng7hAMC+doW4imY3J2EkNMVPkqZodHGZ7ic0YGIQNILJV/gx5jfk7fOGUlRpzxNnjJdzA4NU8Oi cWR+aAK7p0XLC+VIwZY2AfgtIsYcmjsSvL2E5uzDg0C/7kmvYfmYs6RFya0JxCItfVe7Ffs1plE KszyKRRU675WbAYNlj70mkwKgmJNk4RNFoIu/7wC6RawFC2sNXS0Gz1dmNRyrqsvZOYu+yZwzb/ 5aO X-Received: by 2002:a05:600c:6304:b0:488:c40b:c8bf with SMTP id 5b1f17b1804b1-48a77addb16mr54486345e9.2.1777386844013; Tue, 28 Apr 2026 07:34:04 -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 v4 11/11] xen/riscv: enable DOMAIN_BUILD_HELPERS Date: Tue, 28 Apr 2026 16:33:40 +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-720697/1777386844-88EC8161-68C3A0B5/10/73395122804 X-purgate-type: spam X-purgate-size: 911 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1777386876797158500 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 v4: - Nothing changed. Only rebase. --- 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