From nobody Thu Oct 30 23:24:26 2025 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; arc=pass (i=1 dmarc=pass fromdomain=valinux.co.jp); dmarc=pass(p=none dis=none) header.from=valinux.co.jp ARC-Seal: i=2; a=rsa-sha256; t=1751725681; cv=pass; d=zohomail.com; s=zohoarc; b=gtwLeLrfDyhoPNtfPLQSQ3aG7aUavYlHZ9XqtubHh5N4m7sTapq/PD6+Tpz7fiMuZ5u7hCRifGTfh2repNu7uuZsC3NfQVv/DjH/zwzNZItHTwIw1HRk8mY9BHbxtM/kfslvEWsJ3OpVTcX+LxKHUU+F2kLDP+2UgmQfb9qtuFg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751725681; 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=s1PiVzkg44nLFpp1ep5SdZL9TIGP7LHw7KR9TS/PFkA=; b=nJlULn2xkPTB7tIDlzDyBO7X6tpBmpusIRTdb3OMng20UggfG+LSgdd/iEXL+JQngHtEnAjODGy8Ba58+Sp5Q4xf9v9w5gPO4hop83NsUBrnKz0cUjNYqD28nIpcek3QMYdXoqV84vsF2kgB6XTj8fJVVhTRHen2ZMk9c3XXavc= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=valinux.co.jp); 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 1751725681655894.3188835560526; Sat, 5 Jul 2025 07:28:01 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1034237.1407116 (Exim 4.92) (envelope-from ) id 1uY3rS-00056p-K5; Sat, 05 Jul 2025 14:27:26 +0000 Received: by outflank-mailman (output) from mailman id 1034237.1407116; Sat, 05 Jul 2025 14:27:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uY3rS-00056A-FR; Sat, 05 Jul 2025 14:27:26 +0000 Received: by outflank-mailman (input) for mailman id 1034237; Sat, 05 Jul 2025 14:27:25 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uY3rR-00055Q-00 for xen-devel@lists.xenproject.org; Sat, 05 Jul 2025 14:27:25 +0000 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazlp170110002.outbound.protection.outlook.com [2a01:111:f403:c405::2]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 2a7e9b42-59ac-11f0-a315-13f23c93f187; Sat, 05 Jul 2025 16:27:23 +0200 (CEST) Received: from OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10d::7) by TYWP286MB1974.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:165::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.24; Sat, 5 Jul 2025 14:27:16 +0000 Received: from OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM ([fe80::80f1:db56:4a11:3f7a]) by OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM ([fe80::80f1:db56:4a11:3f7a%5]) with mapi id 15.20.8901.023; Sat, 5 Jul 2025 14:27:16 +0000 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" X-Inumbo-ID: 2a7e9b42-59ac-11f0-a315-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ShJFu1gmZKFXRQt3r32vln26i09dWxNqd5H4wZEJfeRIqu9YEQhQ5DMgDPD5lAzNIIZ3ZUalur9oqVRkgkFpQV0SBGOfZV24rZveaOWFA1uSdj9gc4GpUqdjcT479gfFcE51X7vv0f6HL0nCg57SE/CD00r2xx3d4IsWObWMnHDKYMaJPrQJH5cf8Uhp4rBP+VBVseckTfgdBr8DMf/f8BuGeq9qaNkYoW8sy6OAvAVhKJxcQLNaMm1+TWoZZ4InehgKTbUGOk1SX28uVjOtKHMdjyN0EGTHkuYzaAtBAJZTCKfBJsQd5NK9Xh/ITi2qMQyGN2ZCKyujZ3OVsNgzsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=s1PiVzkg44nLFpp1ep5SdZL9TIGP7LHw7KR9TS/PFkA=; b=rSud1m9t/vFDSmg8aVBWILKUmD7oS19rJvFuqpoCyXPGjmRLaAIqXRomGCvxXXXtCw3bPWVNYfr0fqNfc/yqvkv3KXV0uFmvY6SRi7zTdcYrJk6Y1PyeYpQDZvcwCKcyvCEnzwlLakXqR4hhBGjqTukiWBuyFtTvcvNLzU1xAVCVTN4wpYt9PcDgst8tlbebSJWFdTfgeEVhx3Ild6K2ZcmISQGtwICqyllMAO7OIK9qgSihszUysA0uNV/7g46J9kvTZSHdEeh3FhoJaK78z9RdCFB7EYL1Y0h0NKRom7NPY/OWJttha+uAYNOGY66x1F/kvu8zsXMRAS2FYkzUyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=s1PiVzkg44nLFpp1ep5SdZL9TIGP7LHw7KR9TS/PFkA=; b=L8kyaEPrk54BgS0eLAdFCOUhWUjzT1td5mSqNoCaXfMLmDJdck54iih1pxbGuuS+Psz++lbRjiXMeFJVfg9MRkHJfVEsORZ9HabiCfcv5/YUSCz7InWU2TD1sZ3r63dySkfpJ2le8EWWGUuD5Y8b3fLLfLu9J1ZHnxBGh+dxuv4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; From: Koichiro Den To: xen-devel@lists.xenproject.org Cc: Koichiro Den , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH v2 1/5] xen/arm: Generalize memory hole finding at the final stage Date: Sat, 5 Jul 2025 23:26:59 +0900 Message-ID: <20250705142703.2769819-2-den@valinux.co.jp> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250705142703.2769819-1-den@valinux.co.jp> References: <20250705142703.2769819-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0117.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29c::15) To OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10d::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OS3P286MB0979:EE_|TYWP286MB1974:EE_ X-MS-Office365-Filtering-Correlation-Id: df704434-afdd-4bcb-c906-08ddbbd00a4d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?gufdlzoXulLrDBlNZRKKloWjn/oXu2EQQ0eqb0gQSrUwTHkQAvtEbrR7oMbu?= =?us-ascii?Q?qYkuaAa6PmlKSbc20pIaBuLL4E7dHUyaa3KWXk0Goby+gHbEysD8z7tQDWsC?= =?us-ascii?Q?96RWSb6iqs/AVklHyeSLSEFZIdhbrK+L5WXFkGDW3DPjcnrP5dsqG7/p0zay?= =?us-ascii?Q?ZTGqAtD3gAbwAzzvyit0KpbtHWXF/zi+Cdfb8L6kUOyMyjU6oJxBMAVpAEed?= =?us-ascii?Q?K421u1aKHYuSE3ApDCiwWVScLwOSuLfPRH1jpJDPW7p0tbsDWMf0EieMOpJE?= =?us-ascii?Q?smPUHpN1zeX4hy4RGz+wzUKj+RrCQeiLG2QrRJhG42MXqvoNpZtEeyrI3mAg?= =?us-ascii?Q?Q8zqsoenLQQ4LzCPpor0PlvIiwOM5Vjgsw8A7ft8JrdzZQ/CQa73KpRan0to?= =?us-ascii?Q?43J5b0Gz6hEv3KgR6yVQHKHoQPduOrVZ563suWS7dmy999SCu54sp8NO68mh?= =?us-ascii?Q?SqcE9ItdleVypfcDP9uSv0Ku8ADoJ0iH/6eKjCJ/3+Lo7l4KtEQpcbGv1Fzw?= =?us-ascii?Q?L7c4C/ZsgOoCUfZHHk49BAeKXl0XsdXNkBiD0KRiE3pdQLpqUZHnR0NntgRS?= =?us-ascii?Q?6PRUBTIjUbQp7NxloVjfntNJ99L9h4HQSc9YHuKLnQhOfwpV/keXK4wksPbx?= =?us-ascii?Q?mYsP9iinIQmN0NBzpDCpi+R4gnp3hJ62m5BAV1GwO4K8cdEYkxq/cJAnbsui?= =?us-ascii?Q?j/+Pyzo/Igo4gSoiZieSmN24Gj55KthCenubPUTakyKafa5KbrPJqM6eIAYE?= =?us-ascii?Q?ic9IiOI/rhAplIN9TmEaNjalkh3KzQt0No+oYnupjG3c1NUyGZ+qCgJsAAHB?= =?us-ascii?Q?Nb0rYgRiYJS1DqlHzb4RY0/+wpNffU1A1++pbz77QV+VeAuy04eePYO9tegW?= =?us-ascii?Q?kJT6vOHy0rWBKuldZfXIs6Dlj62ssnNlo2QYfx6+M73tzfeq9XhRo13Pnzzv?= =?us-ascii?Q?bcfEx65DKGBb5RdnJJbgg3lV+qd8h5sTGve/lCZP/Cdor/8HIAAVMg27yzG1?= =?us-ascii?Q?oWMCUTOMS1DHU+++fQydGC+u2re28UHO8AouziZIB/1BUdxWH/t08GJkFNV+?= =?us-ascii?Q?c1UTvbopQEoF5mwXRoj13P1FmqAxvmrT8dIjRVAqbIVlHnehw9CUMkGTlMs2?= =?us-ascii?Q?2bQ/jctnlzuMl3hOSVMVVPBhpY/TVc4l8vJWJoorZh1CFFrYZWeF+kFxFk2v?= =?us-ascii?Q?PJVQ9fBnm3K/XK5ojnIxwALeDAuG+Mtr3XbI6uKK9R4OnsvKrCtnRci/Vjyv?= =?us-ascii?Q?rD02O1mh1Y6ADFbtIByKWMNFbFLzEEBJt+GrB4HTQZdfU93roCK7N2RpfKHQ?= =?us-ascii?Q?hjMGtpa6geu4whiIllgEDkAckTG6ZxoMXUz48gU951tmzMr92xbxCBq+oTGf?= =?us-ascii?Q?mUWdetpIk/LO97ap5QOj/+oTd7FIlqX8I1V4vkASv21njDKNMR9QTOqQ3+nC?= =?us-ascii?Q?VFFCFO1aAzU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?WcNyyV882kBMxY19JkSNrw3QmY/id9xyUOIyaXI305bFMc3fJqlxwJ64qK6W?= =?us-ascii?Q?7zgPHZXrEo9PIBcrWS+ta90ORbBdcKJxp+hp3EzyDNE1Ee2qCt1t1VIIIWb2?= =?us-ascii?Q?NaSqQU9DA2wL+CjW7lDnCxFeJfrEUsCc3c9PSuC2/sr+gYfgHbP3aR4SG6if?= =?us-ascii?Q?gbJVCfrhwtI4BZFEhk9ozn/yZTG95FM3G8fmAOqYpd05oqajS6mZHeHaow8I?= =?us-ascii?Q?ELFTkxrZpwY7Kz5bOEHFHaRcf/tOoHEdXqM33HirMlLORaQB7Ik4q9A1wgVg?= =?us-ascii?Q?dD9bpq1fa49DctCE6NZ0s7V/1kXF9glGeJRfh7Rti5HP735Oqvzm0ebaGchj?= =?us-ascii?Q?v8BmvljuPTxElsvXVqAJNzgvdeb2/JkAk0lYwoLDboJB+0per/x0go/KusT0?= =?us-ascii?Q?RueFEbmCxd3TAlGaX/glYbn0ZcXEtgtpJGcUE/hwWKKj1UcvKWppCJwQU+aL?= =?us-ascii?Q?R4OIpOCU1wzhaAfczhADyqsXpRdFMEZ5E+/DH2oAdP7BRv6oTwkWKhmtPE/n?= =?us-ascii?Q?ngyL0EMDLh0CwQP07IUiwjDcx7bGZFWSZQKgwW24wqy+9GcAY8RT77AgJ8ha?= =?us-ascii?Q?KQ+T01wg8n8E8EcN+gtY+VQzZPKbzQsIIweWelx0SihxDvukEGAU/ykX5zdq?= =?us-ascii?Q?cSuOHGuuWowNPPQZL4ZpyvCoyepGZWslBqEc6QtlimHcRoMn1t0iyexmEFRT?= =?us-ascii?Q?NZSxWdgT0fS+o+O4GpTocUdkm2E34eVoTFPK1gtmg2KRslWvyj0FngFeOBKK?= =?us-ascii?Q?CB8NJ9K31F3X8jw2m/MRtGoTz3MTRVrJKjV1BqYnwJiqxAsIOQ79xs2Axm5Q?= =?us-ascii?Q?AL6SmsGX88C0CAShCJ/KYxP/VNqzLlwPu7FDGXLA2FbvpogApgIVqju2VOda?= =?us-ascii?Q?DXEn2WJo8mhhGHuuir0pkFmxP+T/WKwambw8WW4jJUPZUnD9/18JORqqbGVH?= =?us-ascii?Q?/jD/wecHPU5v/ZXx2vmrLSdoWnkbUhP0+KJzBSRBpAi2vrM1kTFoUxpK/KEl?= =?us-ascii?Q?6SmPw4tKxVkJM95O5Yh6iuD47A0T95AQ/nRg4UgDqRwqLQWsps7m3575L+nL?= =?us-ascii?Q?cGUovQpRxssiIDDKJXWjTaSHQuzw7+vhK34pRqydLuXznGkNV8b08nZyO6rN?= =?us-ascii?Q?UtlOS9KmnQ36DZwIR0flCrRDIqu7Gk9z8IeyrKJUZorz9EpIVn3f+3Q1fWHH?= =?us-ascii?Q?lMcdBlYeAxxz2ZIYXbprpmtAgmDi3op8+LelnVdFHm0UshoXZRW19B/ePNL0?= =?us-ascii?Q?4lAFHJ8NWT8v1MIkCBTgbEnBFe147ZvfS8pCJyhJYP6pa7mD+DTVYx66aPAS?= =?us-ascii?Q?A4mIev0EzAmcfN2fowFMHNiI/rJspbyGlH71mMQSjDnf3q1ZUVx0p9Offj1o?= =?us-ascii?Q?GGlYOitmhXPPemLg2Ugtw/OPReurnfqHPCDum6zO1YnChp1IXU9N3/47ZaD/?= =?us-ascii?Q?7CgBKKHBZJ3eidmcpYHHaWSt2RYbnXIbcJxgCAQGlfP3mr0w23GKCJ7/9ePJ?= =?us-ascii?Q?fXGT9HP9Em6JNMll/49B69kSCejmzqUaIcHGONpIPZfZC88j/CBlyasrK+4p?= =?us-ascii?Q?LnnoYGICXkC8uh2n2eWs9YbLG6H2Ckx7PWcp99XaHGz6XoGxiaKRCoprm+1P?= =?us-ascii?Q?if2Q7FJFXffw3fMq1A6Qnuo=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: df704434-afdd-4bcb-c906-08ddbbd00a4d X-MS-Exchange-CrossTenant-AuthSource: OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2025 14:27:16.4309 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4G9UyBj/W+2V8iKgKylnMbio79pjlH0Xs7V9VkvbxM88bXxzfampAu3bDL6Paaw9hdwTCrP2gv/tozXVt0nhbQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWP286MB1974 X-ZohoMail-DKIM: pass (identity @valinux.co.jp) X-ZM-MESSAGEID: 1751725683494116600 Content-Type: text/plain; charset="utf-8" Make the three kinds of logic reusable beyond just extended regions by introducing add_regions_cb parameter and factoring out the extended region-specific names and logics outside of the three functions. Specifically in find_domU_holes(), 64MB size checking for an extended region is deferred to the existing add_ext_region(). Also, introduce a wrapper function 'find_unused_regions', that can be used to find memory holes at the final stage of domain creation. No functional change. Signed-off-by: Koichiro Den --- xen/arch/arm/domain_build.c | 62 +++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 4ff161887ec3..42210c702ab8 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -40,6 +40,9 @@ #include #include =20 +typedef int (*add_regions_cb)(unsigned long s_gfn, unsigned long e_gfn, + void *data); + static unsigned int __initdata opt_dom0_max_vcpus; integer_param("dom0_max_vcpus", opt_dom0_max_vcpus); =20 @@ -805,7 +808,8 @@ static int __init handle_pci_range(const struct dt_devi= ce_node *dev, * - xen,reg mappings */ static int __init find_memory_holes(const struct kernel_info *kinfo, - struct membanks *ext_regions) + struct membanks *unused_regions, + add_regions_cb cb) { struct dt_device_node *np; struct rangeset *mem_holes; @@ -813,7 +817,7 @@ static int __init find_memory_holes(const struct kernel= _info *kinfo, unsigned int i; int res; =20 - dt_dprintk("Find memory holes for extended regions\n"); + dt_dprintk("Find memory holes\n"); =20 mem_holes =3D rangeset_new(NULL, NULL, 0); if ( !mem_holes ) @@ -894,10 +898,10 @@ static int __init find_memory_holes(const struct kern= el_info *kinfo, start =3D 0; end =3D (1ULL << p2m_ipa_bits) - 1; res =3D rangeset_report_ranges(mem_holes, PFN_DOWN(start), PFN_DOWN(en= d), - add_ext_regions, ext_regions); + cb, unused_regions); if ( res ) - ext_regions->nr_banks =3D 0; - else if ( !ext_regions->nr_banks ) + unused_regions->nr_banks =3D 0; + else if ( !unused_regions->nr_banks ) res =3D -ENOENT; =20 out: @@ -907,7 +911,8 @@ out: } =20 static int __init find_domU_holes(const struct kernel_info *kinfo, - struct membanks *ext_regions) + struct membanks *unused_regions, + add_regions_cb cb) { unsigned int i; const uint64_t bankbase[] =3D GUEST_RAM_BANK_BASES; @@ -932,8 +937,7 @@ static int __init find_domU_holes(const struct kernel_i= nfo *kinfo, if ( bankend > start ) size =3D bankend - start + 1; =20 - /* 64MB is the minimum size of an extended region */ - if ( size < MB(64) ) + if ( size < SZ_4K ) continue; =20 res =3D rangeset_add_range(mem_holes, PFN_DOWN(start), PFN_DOWN(ba= nkend)); @@ -959,10 +963,10 @@ static int __init find_domU_holes(const struct kernel= _info *kinfo, =20 res =3D rangeset_report_ranges(mem_holes, 0, PFN_DOWN((1ULL << p2m_ipa_bits) - 1), - add_ext_regions, ext_regions); + cb, unused_regions); if ( res ) - ext_regions->nr_banks =3D 0; - else if ( !ext_regions->nr_banks ) + unused_regions->nr_banks =3D 0; + else if ( !unused_regions->nr_banks ) res =3D -ENOENT; =20 out: @@ -1007,8 +1011,9 @@ static int __init rangeset_to_membank(unsigned long s= _gfn, unsigned long e_gfn, return 0; } =20 -static int __init find_host_extended_regions(const struct kernel_info *kin= fo, - struct membanks *ext_regions) +static int __init find_memory_holes_noiommu(const struct kernel_info *kinf= o, + struct membanks *unused_region= s, + add_regions_cb cb) { int res; struct membanks *gnttab =3D membanks_xzalloc(1, MEMORY); @@ -1035,7 +1040,7 @@ static int __init find_host_extended_regions(const st= ruct kernel_info *kinfo, xen_reg, }; =20 - dt_dprintk("Find unallocated memory for extended regions\n"); + dt_dprintk("Find memory holes (noiommu)\n"); =20 if ( !gnttab ) { @@ -1061,7 +1066,7 @@ static int __init find_host_extended_regions(const st= ruct kernel_info *kinfo, gnttab->bank[0].size =3D kinfo->gnttab_size; =20 res =3D find_unallocated_memory(kinfo, mem_banks, ARRAY_SIZE(mem_banks= ), - ext_regions, add_ext_regions); + unused_regions, cb); =20 out: xfree(xen_reg); @@ -1070,6 +1075,21 @@ static int __init find_host_extended_regions(const s= truct kernel_info *kinfo, return res; } =20 +static int __init find_unused_regions(const struct kernel_info *kinfo, + struct membanks *unused_regions, + add_regions_cb cb) +{ + if ( domain_use_host_layout(kinfo->d) ) + { + if ( !is_iommu_enabled(kinfo->d) ) + return find_memory_holes_noiommu(kinfo, unused_regions, cb); + else + return find_memory_holes(kinfo, unused_regions, cb); + } + else + return find_domU_holes(kinfo, unused_regions, cb); +} + int __init make_hypervisor_node(struct domain *d, const struct kernel_info *kinfo, int addrcells, int sizecells) @@ -1121,17 +1141,7 @@ int __init make_hypervisor_node(struct domain *d, if ( !ext_regions ) return -ENOMEM; =20 - if ( domain_use_host_layout(d) ) - { - if ( !is_iommu_enabled(d) ) - res =3D find_host_extended_regions(kinfo, ext_regions); - else - res =3D find_memory_holes(kinfo, ext_regions); - } - else - { - res =3D find_domU_holes(kinfo, ext_regions); - } + res =3D find_unused_regions(kinfo, ext_regions, add_ext_regions); =20 if ( res ) printk(XENLOG_WARNING "%pd: failed to allocate extended region= s\n", --=20 2.48.1 From nobody Thu Oct 30 23:24:26 2025 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; arc=pass (i=1 dmarc=pass fromdomain=valinux.co.jp); dmarc=pass(p=none dis=none) header.from=valinux.co.jp ARC-Seal: i=2; a=rsa-sha256; t=1751725687; cv=pass; d=zohomail.com; s=zohoarc; b=Vij9GChmrhMM41neuXlQr8vpZVLC4D4L96GSJePyrneAO12Iu/Tspejd5Y2/xC2/9hV7W622RgVoSRC5LJ4xQJlxxW99IPwzxCTTR/4d93m5GXDxmTgd2wf1BbqZdzE1fljm6dr1b/A9MO3q1fH0xy2thnYlSYbpLIn9x9N2Fng= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751725687; 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=adYHyU0Z4LO58iQg+65jtVe1dhfX3gBG7osPUnd80vM=; b=QInEURC0ZUrDMITNz+cJNX51oKPGWtoYVKn8Pn2x7f58S5d9MZ26xyo7VC4rh3Ai9hxti4Z3kD3QmwzRedu3dnxcoOS1xHQKOC6JOqWt9r2eAeIakkrE+7Ffzl2fw17uMe5uFhgKqofVH124tAuNE5lWYfMQ8KkGued08zh+dLk= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=valinux.co.jp); 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 1751725687396947.9485249489999; Sat, 5 Jul 2025 07:28:07 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1034238.1407123 (Exim 4.92) (envelope-from ) id 1uY3rS-0005DJ-VD; Sat, 05 Jul 2025 14:27:26 +0000 Received: by outflank-mailman (output) from mailman id 1034238.1407123; Sat, 05 Jul 2025 14:27:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uY3rS-0005CW-PN; Sat, 05 Jul 2025 14:27:26 +0000 Received: by outflank-mailman (input) for mailman id 1034238; Sat, 05 Jul 2025 14:27:25 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uY3rR-00055Q-Ai for xen-devel@lists.xenproject.org; Sat, 05 Jul 2025 14:27:25 +0000 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazlp170110002.outbound.protection.outlook.com [2a01:111:f403:c405::2]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 2af19dbb-59ac-11f0-a315-13f23c93f187; Sat, 05 Jul 2025 16:27:24 +0200 (CEST) Received: from OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10d::7) by TYWP286MB1974.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:165::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.24; Sat, 5 Jul 2025 14:27:18 +0000 Received: from OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM ([fe80::80f1:db56:4a11:3f7a]) by OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM ([fe80::80f1:db56:4a11:3f7a%5]) with mapi id 15.20.8901.023; Sat, 5 Jul 2025 14:27:18 +0000 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" X-Inumbo-ID: 2af19dbb-59ac-11f0-a315-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NVSRTQN1dhlhI6VPhkz8ppm/pKzhRs0NOKi8lMuAkmIT2v5hpEYkdJMeLf4GR7oYaCCnsnYcZLhMZ7cdFoLPyUSiUef2ycFOkPFF1n0crQ96mp39ucEufd9EEqTM/ExrKx8C7j61t0EtJJ5bzIxLTCfWzafgctLQXftlro+SI/WmLu1dJEsBa6elO1kk3lYUNzhBR8IGTFkQVaWczQvNNxEicAgvdLRvX+v47sSvOqkAkiOqAi1iWkO8+wvLZyctvCjZ/OxkuKBrIdoJa9ykDXFS88zka5M0ihLtbfKO0S617mcZneDYiPvVmrkPO87ihAIJVS66+xSqUS0gdlAncg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=adYHyU0Z4LO58iQg+65jtVe1dhfX3gBG7osPUnd80vM=; b=yF97IUKZ5cAVjANQ8i74A6UHfqgmU+0uTVwWa9OCGz/TL4FsQ4qcMzgCRM905uUHch66kn2mCnFdBCsdUJPm1HBvFPktXDDqX7qFLpbSf/SG2QdNTGaEGTpQXAI4QN55MW80mrdloncoOyIr0YS57cSXA87AGPPqopBqhdE4v/dGWqUcic17KapORkZVku+ZTGab9Guu4EU8PDbiCzk7FmZ/RHYgLQzmvVcwlnUMqDe7MMTEhPHMdzWhThgMmVH9qAKt+e/GcBYHk44H22MPYyF5Yj8kjOWc1CfQ2TZXiRyUua24MHtE3Abbtwh40dkIBB/MMsXrklp5NKp8JBFbHA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=adYHyU0Z4LO58iQg+65jtVe1dhfX3gBG7osPUnd80vM=; b=vSO3llKLcVYUoGf/6QTWaza7PTFsH2gi2Dvh2oo8gdBRZmV6y5vzFn5FY0Pgch/ToyuTcfiFYKG66/eDXLkwJP7+Ahml8vusu4jeIvcX2hEttIOEU2e11mTUU1h8UjCFlm6OCmWjn4L0Y5diHBKrf7UHw6iBNKF7KbmU9RDdwHQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; From: Koichiro Den To: xen-devel@lists.xenproject.org Cc: Koichiro Den , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH v2 2/5] xen/arm: Reorder hypervisor node creation Date: Sat, 5 Jul 2025 23:27:00 +0900 Message-ID: <20250705142703.2769819-3-den@valinux.co.jp> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250705142703.2769819-1-den@valinux.co.jp> References: <20250705142703.2769819-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0020.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:381::13) To OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10d::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OS3P286MB0979:EE_|TYWP286MB1974:EE_ X-MS-Office365-Filtering-Correlation-Id: d78ca364-0bdc-466b-314a-08ddbbd00bc1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?sfiQ0OEPlVZFv94ZeFz4CrpvfYUc7Z5AQPpa+SLqzQ4B6zGJM6MD+rXHyYqo?= =?us-ascii?Q?aHXhKN+g/MCPaBjWq7s+e1NSHGABLqFDHgbl9bGQETW2qfQoT2v4s3rykMtU?= =?us-ascii?Q?wls4fZFE6s0b71P2B3/Knofqr2NvJB3CR7w+uxF4BOLOKSWtqUY446niVFOY?= =?us-ascii?Q?LnfOjVlgZv8SNQ7vrP7rYg06NWXkN/gcXfb7jT31fJAkzR2Had9EnEZdKxBd?= =?us-ascii?Q?AYP2AkAWl95LnlEChkpyDP0rOgQUDWvtF/xhan7XsH2fqWbuuo6GSOpL16M6?= =?us-ascii?Q?ZsisZWCGq5TwLMVSeJe3uBqNStX3G/w6sRlDDIR/QvVIpQYqmwVY5tMGVgSp?= =?us-ascii?Q?/If+L4lXkRWACf2RG27ghb/tfOGOdhxSRlfWWSR9QViDItukL1KrjXF8Eine?= =?us-ascii?Q?ryN5aZ96cHbqWGXaikDtC5pPgY9FaAjfvneG5vqPQf2Wd6tR8P1zamj1IzPl?= =?us-ascii?Q?ISWSIUMUMmJAl54ybqz5mcDVjJ6M5aBA5HPd4Xe8oh8ZIu48qMzeTVlp121m?= =?us-ascii?Q?QnPDl7rAPGpaxb4QOHOwoUad0fHERX6Da7rk/I3UlzVODu3R3UGwHsILvupg?= =?us-ascii?Q?5N4/IcOmDjLq3G4bKtgIj91+VW7inNpgPHbgIITDVUK+PymQAu3xPcD5XMRU?= =?us-ascii?Q?jsHE2YKKP9YvUjHnCo3MZ0zVotkP1uKYIhsyKGRcKUGZrfN0iEokxR6TZsV1?= =?us-ascii?Q?YtT3m7CvPMMQV8SBQ5CMP2RjRvL8XTXN7aPGlV8LDr7eYolvPcdMNRVGR6IZ?= =?us-ascii?Q?IWYN95paVB8TOHTs4GypMgo/TskPuAOupqRJI39ipcTqBSrA0O0WZR8rfVL+?= =?us-ascii?Q?jOLSIVfIGRljf9pVK4YrVSA8HsFlpNayzpD6qmrpI5K3W15nnQt1VyFLJVBS?= =?us-ascii?Q?msQgj8oDTUkoqeKzGDVSMYWIIgKMuCb8EgPfDPlvoUaAL/sTIAsVndxcHWCJ?= =?us-ascii?Q?5aeiM+zxvM5PAeMc9OURq1ozcZQRp/EQhE4hO+KZlsh5jDr8nOrNcNpX57sm?= =?us-ascii?Q?OzOWzlOdPQUxfEz4/uvfWOYhKU/xlI2JCpCBxReA0jFRk1cJyIueG1Iff5MH?= =?us-ascii?Q?v1xg8kvl0FBKVcXHKiy8KQgcBC6zDaXvwxmF6y7sDK/pH6W/WXdzRiFxX3sW?= =?us-ascii?Q?bXOvzMgf29YIIIxKpyvlKdJCls4H8rr674U2bRg/3x8mm4Os9jInzsK2j/2q?= =?us-ascii?Q?msgtBEPZL1k0C4PdlfPFWgAbUFtK3+YmZU1fd9nCgBWm4v9xLWGYeb298H0n?= =?us-ascii?Q?JNYBXbTcT2EeIlfEr7ryE0fTlwB237g+Ww3sxnZi69GVkQtKPWy+df+rKqBl?= =?us-ascii?Q?gOE1qcOe21qxbcWGh09XJQ4hc+pT8RD3hNo6mkZG12V75CEYLDUyH9Ry8cDv?= =?us-ascii?Q?CsSj4aznuYXBHukY8pEyXP6R9EjuUlO0rkU7XY/zuzigTjFLi1M27tkGNF6+?= =?us-ascii?Q?cNHlrv0NEiI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?eIuo22FJJtQZPyyhUDIHlpQ1rQE9rAyUwOlyb6D+oSBofJHU7gsABBRDrsH/?= =?us-ascii?Q?3gDv7ucTqi+NDFfyQNQruNlYdU8iNLmYNuzzMrRZqMmOgyRE9gDYKXcCLhYe?= =?us-ascii?Q?x/Hrt2pxMhzd1RN4/hI/LrWXqs7Ky423XrjNP9Lq9xmhaoj2fPHzLjD/GE5r?= =?us-ascii?Q?Odm5pT8JU/n7L4lR/aV514cKZw8pwHDgVQ0d0/6eXFcEIPMWca0OLBNN1aFX?= =?us-ascii?Q?ryZeLYlGkKTVNvT6I+kdX2ulTF96CHYuRcyiPWz/pvkfctabMhyWngxUbKiP?= =?us-ascii?Q?d9KIG8v/nnTsaCNEN+LjDOsuM5HApwU63jUEmvdgeG2wSkjzVec8vej/pv7J?= =?us-ascii?Q?7QdC3rN7mMif9a8ovTU0f4CKeAbbDA67KbTQvN9Epln/zM1/sfanWNciOtZO?= =?us-ascii?Q?LTvHq1nIBj2wacumBR1QBxAdJpUC6Kh9ejdJQ+4UTF1fXPYWrznjQXLmjetw?= =?us-ascii?Q?OmSqQrAakr3r8g909ASbMxxdbVh4Bl7UVAiBKa7AnisCUoDgdZ+TA0KIYOFW?= =?us-ascii?Q?yOp8I5fKBYaivX8g4sbDUsjw2XTCMf7quMpL20kCgZMsc3/j7yJnV7ek00vd?= =?us-ascii?Q?bFQjMzHgu01LlvkMEffyAmHMy3a1DF79NXZlRz4ThnW0QiujRjQ2iVEiBp/g?= =?us-ascii?Q?YomOupX96UCfFQjKyzUV8+oFo64OdwkWiJXSKZXJuU/CrGxgKrcd3CkS+VX9?= =?us-ascii?Q?oApMZlzCQHMmsL30yEl0rC56onBc6Xe+aJNoitYG/labl5r6k4m582WDcG5Y?= =?us-ascii?Q?jNMx4uqyA4VVyfJMqMj+a7LpckL89Bx6IEwdX67mmjzHpKrU9p6oJ2IChipy?= =?us-ascii?Q?OWN0/Ooth84fj37Cu7KUAhUxCAaPZlmNJCP0wSsr6Wl4Cg9ezjfEVxDTDZbU?= =?us-ascii?Q?DPAo30+L/jZAkNWd0QnD+wj3zz8SW9AywIXed5zwmel2DnkM/o02sFE164U9?= =?us-ascii?Q?7bBG5cnsnSqbzBCh1UgHYAu1Voe/wNcbbojHcUGJOXcJRMmRBY+MEJxbDifX?= =?us-ascii?Q?BBJVAzzCjUHpI5c0BVC/Gymn/T2pnvhOiA1A65xLXDu7IJEnQCB8gmSaHFNJ?= =?us-ascii?Q?70xvOCPlHRN3/zlc99JXUTGslPm/2ZUlBagZU5zh1ZBncyzefTSh9e/YJye6?= =?us-ascii?Q?9eR9t5OZSx4UxVCGbg52eg/FP83gnnFwFDXuI2dgT3dbLztHaHnPRRMEMnlk?= =?us-ascii?Q?upbryzsGNU75SPa9yR0C4bx53/mJpYUCRG44hBt+tMx4bUl4kPKo5B/4SzEU?= =?us-ascii?Q?t6iaz2wSL48vEwppz3AmBY/coxyQA9G5MR8DWW4qrDRemMvg1aBG2jVZt5A5?= =?us-ascii?Q?lVKzP/g7rneraiR0Go6lwQUk5IU665PZ1K5J1GBFcFRFmGZyhzUxTLjVWFyD?= =?us-ascii?Q?xa4IKVXiFpD7pvpl8MrdPgrX93W+ccBQqQniwPbOCp/J7nQjgWG4UsSJdTot?= =?us-ascii?Q?ZF9Wl0pnwhvKnV+E231IiFBlxVrn66VDW4E4ERQfQ7zP7ymobG2vZi7cWnOt?= =?us-ascii?Q?bQ2fwDnQnL8HH0CBzjyO0dhuPaySQSXvX9HS5yqMwusRU0ffezvAonv7dEPn?= =?us-ascii?Q?gdVCZt/BxmoIzhv1Xj5OGMiGVfEFsGFFFN8yOqTqz2qDmP8jo0z0d3FfykXH?= =?us-ascii?Q?z/bwQJol2tkn6DKeXBp8y5k=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: d78ca364-0bdc-466b-314a-08ddbbd00bc1 X-MS-Exchange-CrossTenant-AuthSource: OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2025 14:27:18.1921 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: aHg37GAESFeweVBkKvXgnp4eOg1eKzp5FIfzjQ0AMaSMpSl1st+qUf2wuD3k7RlkhiPHuo6qgT+KqRJ67PzowQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWP286MB1974 X-ZohoMail-DKIM: pass (identity @valinux.co.jp) X-ZM-MESSAGEID: 1751725689367116600 Content-Type: text/plain; charset="utf-8" Move the creation of the hypervisor node to a later stage to avoid potential dependency issues. No functional change. Signed-off-by: Koichiro Den --- xen/arch/arm/domain_build.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 42210c702ab8..5fbc26f70988 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -1728,14 +1728,6 @@ static int __init handle_node(struct domain *d, stru= ct kernel_info *kinfo, */ evtchn_allocate(d); =20 - /* - * The hypervisor node should always be created after all nodes - * from the host DT have been parsed. - */ - res =3D make_hypervisor_node(d, kinfo, addrcells, sizecells); - if ( res ) - return res; - res =3D make_psci_node(kinfo->fdt); if ( res ) return res; @@ -1766,6 +1758,14 @@ static int __init handle_node(struct domain *d, stru= ct kernel_info *kinfo, if ( res ) return res; } + + /* + * The hypervisor node should always be created after all nodes + * from the host DT have been parsed. + */ + res =3D make_hypervisor_node(d, kinfo, addrcells, sizecells); + if ( res ) + return res; } =20 res =3D fdt_end_node(kinfo->fdt); --=20 2.48.1 From nobody Thu Oct 30 23:24:26 2025 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; arc=pass (i=1 dmarc=pass fromdomain=valinux.co.jp); dmarc=pass(p=none dis=none) header.from=valinux.co.jp ARC-Seal: i=2; a=rsa-sha256; t=1751725678; cv=pass; d=zohomail.com; s=zohoarc; b=Vy5dnGhtrmhgep7a88/nkWrw3xFCUx6hS7jgmzNi10LqoZrU7D6YBUX4BTF8+hwSp3xHYRy6tloRyTpZ91tq8PO9nSlZIAoZnquX++J2T4uQfzfWAYL8+F3c34T3T7k7+gpgZzNIWpFLmKoJVqIJ+tPwyLBYhJbhmf6QRqcxa5w= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751725678; 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=hfc+H3nJRyfmmBSNsiPB3+yojQAp4BzUKW664k7xZCk=; b=UufAmS1P7BSC1B6AAyeIbdpR8x5ytOsCSlLOuuae1OSBUpnQhpYurlVXptJesYYus4iMB1XXhOTsCSSF4dar6aHfgfPEYBi4VKQdJ8zSd9tyfvqAnQ3ffWI1Xk+2BQVmzImAOGMWTGPIWoOv2u1Zhk9WHzh0uLxCyXJPqganEeQ= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=valinux.co.jp); 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 1751725678106378.4894238325942; Sat, 5 Jul 2025 07:27:58 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1034239.1407133 (Exim 4.92) (envelope-from ) id 1uY3rT-0005N3-Gf; Sat, 05 Jul 2025 14:27:27 +0000 Received: by outflank-mailman (output) from mailman id 1034239.1407133; Sat, 05 Jul 2025 14:27:27 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uY3rT-0005MH-7p; Sat, 05 Jul 2025 14:27:27 +0000 Received: by outflank-mailman (input) for mailman id 1034239; Sat, 05 Jul 2025 14:27:26 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uY3rS-00055Q-2P for xen-devel@lists.xenproject.org; Sat, 05 Jul 2025 14:27:26 +0000 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazlp170110002.outbound.protection.outlook.com [2a01:111:f403:c405::2]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 2b5a7199-59ac-11f0-a315-13f23c93f187; Sat, 05 Jul 2025 16:27:24 +0200 (CEST) Received: from OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10d::7) by TYWP286MB1974.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:165::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.24; Sat, 5 Jul 2025 14:27:19 +0000 Received: from OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM ([fe80::80f1:db56:4a11:3f7a]) by OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM ([fe80::80f1:db56:4a11:3f7a%5]) with mapi id 15.20.8901.023; Sat, 5 Jul 2025 14:27:19 +0000 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" X-Inumbo-ID: 2b5a7199-59ac-11f0-a315-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=D1Ci8QXkeNpueR4sH/BC7nPkxhB41muMULi+jIlRf+DJxw2cZebvScqgqTQ/5NM8t6k+8+uj9Sc0EwO8UdtGwUD0XknKnNXShdLLIVL4ow0fUXqkY6Qbnacg/n75F7MeN/Wutg/SD0InhblgDPMv85Bk9Ax+mkUgmg37tJsMVO1uksLPPq4b1yGqIBT2jYtZ/Fe7igk4bQXqtJGrMe0EeB6jEkeyJMmWA8khA4Ajb8J8rhYDoZ+/P9z5ZrOURYgms1OZaOtwlDv5a3IN6Sg/PT62Ok3xP8J//+4LkB2tCWvKcY0U+ArfWiBt6eRZ122RAzO77Z/1LcQfa3p5MkPipQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hfc+H3nJRyfmmBSNsiPB3+yojQAp4BzUKW664k7xZCk=; b=C4u3RGM/14feG1Ir0XBLjcE7ZM4aT7v3wQPt8qgafnjQLAenkZuVasgVnElBHfmKnhfIWIRcVnqRqjUe+ON0teGamhk6zecIwK19gsd6R0Y0chr/GTTXuBm9PJZcb24gWL9u2N8MbCnIco46fDD2LBWCMmtr578XQzFd/4pyLbLglZ+rFxMtXRnDQaHr7fLQPRzOOuwieApmHvGmdQYKeSQHmNOIl66p6ZVZmnEcxe4xrILHQK3t1MMewdknMRUbTl7LJCKpi02EOgcso+ExR24TFuoGcwdFEpxEzqpBJkbiLJak91N5+xnh35oh5HsUjuClLgTbDW4QNpPnHDZVJw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hfc+H3nJRyfmmBSNsiPB3+yojQAp4BzUKW664k7xZCk=; b=SIVZGumsBu9pL2vhTA8u+X7TJeBF+RM49uEnBHczM3K4g37/KXokDnWjTtpad76PjbGXmCPPnqs2wuV405TRuAqUP8Zon8/zkav0w0FA2TTUSLWGmT/OfmmTkcGUjmZoRnUD2RD60e1QxYljYHKqHmyZLYq83bYr4QhPEm+P7as= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; From: Koichiro Den To: xen-devel@lists.xenproject.org Cc: Koichiro Den , 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 v2 3/5] xen/arm: Move make_resv_memory_node() Date: Sat, 5 Jul 2025 23:27:01 +0900 Message-ID: <20250705142703.2769819-4-den@valinux.co.jp> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250705142703.2769819-1-den@valinux.co.jp> References: <20250705142703.2769819-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0179.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c6::7) To OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10d::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OS3P286MB0979:EE_|TYWP286MB1974:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a3efd81-fac1-4952-e66c-08ddbbd00c9f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|10070799003|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?grYn9Ld02gsSoZJ8wjEzNz2B7ApHyOWBKJGFzdQwtjL/ugGyxmfK9q4RHqx0?= =?us-ascii?Q?fJF1dkmgCighyUT8cjGILJlOOu5i5dXGdiVnIOp4995mGIGqo1qcbYuy6X6W?= =?us-ascii?Q?VzzqwyswUSi0riC8KgBBUQE2zt6FTNwhXaB98pGofTnPDR+s1LuxODI6clqi?= =?us-ascii?Q?laH6MejHoOA/OQU4wQ/YHUfDonyE1+vlYFrKo/kh8X/E5SnjaDzIhAGibVKA?= =?us-ascii?Q?QKWdz26NzoZASkghkXmoYpOSbF4uJHZ/vTNizSs1JXa8GXT71i2XMbZu8qvu?= =?us-ascii?Q?hophRUstPrIo4DFeT09xWrYI7ytD64WZA0CLCcuDUEVZTpnGuQbgp9PiqJn6?= =?us-ascii?Q?UyBwg4HI3y2HJlE5e/S8EcJmAa+Sx1kyHU0MFy+nivfuxX1h/I9wnEakpZAi?= =?us-ascii?Q?LOBtKV/ZZgFuTuw03IB9oe8GIvZMo3j0MvoP6bLQ64Y+2uaQXS9tUCooDqVt?= =?us-ascii?Q?K6YfHjn5lfHdj4Tp8CWpmxeN1gy0ZTA4Q1IQ3zvO5dAqv16Z9KGcBhkAoNkC?= =?us-ascii?Q?eGYCuYw/ICs4DAEtVsJ+ytmv31tfvs+knZMv0pN3RH2qB7VxMr8NOgl2dFgN?= =?us-ascii?Q?TRTNworB6UinkTUV+3vOFUPE5T3fBssOJn8WbaUr7xxjZ2Mse5h8Xa0bEbm8?= =?us-ascii?Q?59+jdPDP4pYi8ITjFrN9aeesU3fnPcrsYJfx0wys0WB26KhmVxze1XrVv9/G?= =?us-ascii?Q?jOXwE/VXZth6YWeCanLFFOXmxufZxuBLzwtG3b2jqeHQjp1zdQ0BH1tcGaUL?= =?us-ascii?Q?wKJJbUULyWSCXIMzEbc49+MI/Sgkxhh6Wc/9B3frI723Jch9ZOUWD+E0leqv?= =?us-ascii?Q?eD1yvzhovb6H1KU7KPzBr4zg/ETntBiD9M0n9IMwm1RpWWp6/6RVzzhgAg0e?= =?us-ascii?Q?2n79V18NlDNCWPBUGb/hzps3lb1LHSvCpp+EP71D7rjplmnC+305QydKtkuA?= =?us-ascii?Q?spq7tr9kz2lampPU2nTapJ3PGBR17L3PPyDVHZfkMizYR2Q9AG3vE4boIji4?= =?us-ascii?Q?h576zvqFL8B74OGcHPG3+ir30xdjrbWrXUFgMdp3BCdfjyA1jf/n3/jxU393?= =?us-ascii?Q?IdY59n0fDVJ0kQihaKtLHo+vuecIKX2wQvZLGItS9HYVYwqikRO2f3udwsgY?= =?us-ascii?Q?owF9WHSzW80sDUpNIh9NbMRF1aBQ6yDGJ8gnCH+I4cNSr5/jrQqUL1IwYrUC?= =?us-ascii?Q?3eZKJW5P+CPq3kOcsB+6dGK+bcnN8a92Dh+qnjp7D2Kli5W/iKi88V8bdpve?= =?us-ascii?Q?t01DEqsjb9N2PaAZiDKblQHtqq629yADU3REay21KHahKf2NjEkNrLD/1cvP?= =?us-ascii?Q?qGS7d/XAdQLlX3cpbwFxZXgMNHwJCMK142kXjJ0FKd/gFT1rDdIXUibn+753?= =?us-ascii?Q?yKQMVl92F+bnKpIki+EC2vJy8Nk6S09zMkBk5JBk8o6EAy0MIMUH/CMmzxFR?= =?us-ascii?Q?qv8H1NtK1/I=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(10070799003)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wYED+OhKlre3tnBMO0vQrEZQRQ6s61OsDXDQT8za6eVye3Acicws0IBhW5uy?= =?us-ascii?Q?3uNCSXbGaBKVy9DkDqwvyK0T+lIk+S84SHOAP25adcGDK3nXZE/aTJCZtTYJ?= =?us-ascii?Q?CgZjTgL14XoKOqfUv9oOKRZq/Fh+XDztfXPyR+q30F28O12b9i2BaS6hdyuj?= =?us-ascii?Q?XHz66yXO9Wn89DF0PK81hVSY1Jku+FkrT9wVfiHDeQJa+5l2l5ikmrjaNmlS?= =?us-ascii?Q?XrsV8Zfyb0n/bXUU57Y1icKJcW9qs15hOe/sbtREaHC0wBB1cgeGGjahhsPt?= =?us-ascii?Q?wPiw86nSc8I8gmsxuQfP6I8DKhwJwTSgY82yliVN1O4VwdWnQny7mxTg/4St?= =?us-ascii?Q?pspOpKDr1rWqaHlYYC3OouQ4Wk0M4lFbyGlRncCiZ4GC32MtrHMjf5EDk3fZ?= =?us-ascii?Q?DD1uARuM5jfyHdL4Dt0Eik03my9MRg5G3ZaGu1zTUx9TnsrVdcQqqzZG56qf?= =?us-ascii?Q?va9fsrIYxkIGxdgTxOpdJJ3ihjuQmuwj1lA5eG6+E3EGO8v9EjBQ3UTrxG1R?= =?us-ascii?Q?ElVjAnNcRej1eXPWttZ30Rr2UGLbhsYoCNusdPxyPFeDbtfjmwCQZ2Kn36hF?= =?us-ascii?Q?1baH/a9QFJivpX1RPV8JmkK/call/e/RtGUXxGr30k86AFaPtA3bO02RPPyH?= =?us-ascii?Q?5BD1XZrb1BZAMBJ08MBSTmr0pC1oCsNpMnck8iqHYDp0szExRkB3zT1KWWrH?= =?us-ascii?Q?NUTEgyBgODAItZZBJd9KbPZnhlmFpvNyjng1cTZ8HeONH1o/HNjXVnUtmWCS?= =?us-ascii?Q?qQTLelf9mTqFfSV4HgqIbUzFG/uVooGjGOe+Yug3JPZ40zFEe9Pv4O6GaG4s?= =?us-ascii?Q?1Q+VWI0K8NP8azXN+sVyx3P1KBJOF0/jLayXeb8pWfR9zBgOdzmXaFZJy1CV?= =?us-ascii?Q?kDoPDgJ8JlI/HocLVqO+h2RE0R0iuafgQeG+GVqfQLlTwKgZAqcntAO6LYZ9?= =?us-ascii?Q?9bOp/jzhiZUbhWNwCmaW0ngy+CdVePXxYo0xDje5qBIv3zwe6ciXs/MHl47j?= =?us-ascii?Q?ICZqhN84O8IgC5ziUuKBDsb/VSGYOMGYgAUqaFYD7U1JwQiRpo1zvcECmauz?= =?us-ascii?Q?CV4xsh1qtjYlp/xwljwXFMDd4Wc6rvf5mBDOhDPzKyAej0lFKMBJs/8N0COY?= =?us-ascii?Q?xRoK5yMtnNDSi5QMn66YqRkPWRplaxWDioCo8mhoDWFMu9MY/SxNXQEHkKYm?= =?us-ascii?Q?VAjp2cD3eNZzL9uCY/d86IO6vJWQx48hf7VxgClQXlnkGmF2wbFyeMC7XVhc?= =?us-ascii?Q?22pTty8qZjIQ5NuX76uBlDu5a1dDTC74e0UDrad52ZtPN6nO9lAgKaBWhrYA?= =?us-ascii?Q?KLz0eXZEpSsWvT+oRCTbIzkWVFFr0kdjp16D0YkhcJ4OqRsgFLDQw1n0Nnlr?= =?us-ascii?Q?aRn29M9W1b/2frkS7N+deaacCb+grOD+UCPhmZIfRK/I+zjDjfiXIMz2pb1+?= =?us-ascii?Q?KnoQOWAzupRehUH0Gh2XUhj6/km2a4hJrjhP0vZ+kX5FdfkvOOyWDyRdf/8m?= =?us-ascii?Q?iKZl7U/HfWnS56jVQfNTIwrme37y895eVuIKu+oqFuO4keXMuIFYWBkOmW8O?= =?us-ascii?Q?2vecu3aHo4WeuyG0xtJ8lzXQ5a90bcDrqDq2BXu6EkeYIqD4mrrGuc2KKXC+?= =?us-ascii?Q?iosYXqZRu7VcgJHAS3dRCsE=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 6a3efd81-fac1-4952-e66c-08ddbbd00c9f X-MS-Exchange-CrossTenant-AuthSource: OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2025 14:27:19.6587 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: eL3s+l0xF5aEJUSXYKJdIVgjD/amfN5epgaKZN2PEMvN55xM++ua0GvfQQlYBcHCe4uP8Ms+aG0oHmKdFdy0Dg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWP286MB1974 X-ZohoMail-DKIM: pass (identity @valinux.co.jp) X-ZM-MESSAGEID: 1751725679567116600 Content-Type: text/plain; charset="utf-8" The /reserved-memory node is inherently not specific to static-shmem. Move it to a more generic domain build context. While at it, add an empty kernel_info_get_shm_mem_const() for the CONFIG_STATIC_SHM=3Dn case, as it can now be invoked in such case. No functional change. Signed-off-by: Koichiro Den --- xen/arch/arm/domain_build.c | 40 +++++++++++++++++++++++++++ xen/common/device-tree/static-shmem.c | 40 --------------------------- xen/include/xen/fdt-domain-build.h | 2 ++ xen/include/xen/static-shmem.h | 15 ++++------ 4 files changed, 48 insertions(+), 49 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 5fbc26f70988..e063d0d4076e 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -1564,6 +1564,46 @@ int __init make_chosen_node(const struct kernel_info= *kinfo) return res; } =20 +int __init make_resv_memory_node(const struct kernel_info *kinfo, int addr= cells, + int sizecells) +{ + const struct membanks *mem =3D kernel_info_get_shm_mem_const(kinfo); + void *fdt =3D kinfo->fdt; + int res =3D 0; + /* Placeholder for reserved-memory\0 */ + const char resvbuf[16] =3D "reserved-memory"; + + if ( !mem || mem->nr_banks =3D=3D 0 ) + /* No shared memory provided. */ + return 0; + + dt_dprintk("Create reserved-memory node\n"); + + res =3D fdt_begin_node(fdt, resvbuf); + if ( res ) + return res; + + res =3D fdt_property(fdt, "ranges", NULL, 0); + if ( res ) + return res; + + res =3D fdt_property_cell(fdt, "#address-cells", addrcells); + if ( res ) + return res; + + res =3D fdt_property_cell(fdt, "#size-cells", sizecells); + if ( res ) + return res; + + res =3D make_shm_resv_memory_node(kinfo, addrcells, sizecells); + if ( res ) + return res; + + res =3D fdt_end_node(fdt); + + return res; +} + static int __init handle_node(struct domain *d, struct kernel_info *kinfo, struct dt_device_node *node, p2m_type_t p2mt) diff --git a/xen/common/device-tree/static-shmem.c b/xen/common/device-tree= /static-shmem.c index 8023c0a484c1..7eede97fa25d 100644 --- a/xen/common/device-tree/static-shmem.c +++ b/xen/common/device-tree/static-shmem.c @@ -730,46 +730,6 @@ int __init process_shm_node(const void *fdt, int node,= uint32_t address_cells, return 0; } =20 -int __init make_resv_memory_node(const struct kernel_info *kinfo, int addr= cells, - int sizecells) -{ - const struct membanks *mem =3D kernel_info_get_shm_mem_const(kinfo); - void *fdt =3D kinfo->fdt; - int res =3D 0; - /* Placeholder for reserved-memory\0 */ - const char resvbuf[16] =3D "reserved-memory"; - - if ( mem->nr_banks =3D=3D 0 ) - /* No shared memory provided. */ - return 0; - - dt_dprintk("Create reserved-memory node\n"); - - res =3D fdt_begin_node(fdt, resvbuf); - if ( res ) - return res; - - res =3D fdt_property(fdt, "ranges", NULL, 0); - if ( res ) - return res; - - res =3D fdt_property_cell(fdt, "#address-cells", addrcells); - if ( res ) - return res; - - res =3D fdt_property_cell(fdt, "#size-cells", sizecells); - if ( res ) - return res; - - res =3D make_shm_resv_memory_node(kinfo, addrcells, sizecells); - if ( res ) - return res; - - res =3D fdt_end_node(fdt); - - return res; -} - void __init early_print_info_shmem(void) { const struct membanks *shmem =3D bootinfo_get_shmem(); diff --git a/xen/include/xen/fdt-domain-build.h b/xen/include/xen/fdt-domai= n-build.h index 45981dbec0b8..e9418857e386 100644 --- a/xen/include/xen/fdt-domain-build.h +++ b/xen/include/xen/fdt-domain-build.h @@ -25,6 +25,8 @@ int construct_domain(struct domain *d, struct kernel_info= *kinfo); int construct_hwdom(struct kernel_info *kinfo, const struct dt_device_node *node); int make_chosen_node(const struct kernel_info *kinfo); +int make_resv_memory_node(const struct kernel_info *kinfo, + int addrcells, int sizecells); int make_cpus_node(const struct domain *d, void *fdt); int make_hypervisor_node(struct domain *d, const struct kernel_info *kinfo, int addrcells, int sizecells); diff --git a/xen/include/xen/static-shmem.h b/xen/include/xen/static-shmem.h index 76a49869126c..9e7500ed2721 100644 --- a/xen/include/xen/static-shmem.h +++ b/xen/include/xen/static-shmem.h @@ -11,9 +11,6 @@ /* Worst case /memory node reg element: (addrcells + sizecells) */ #define DT_MEM_NODE_REG_RANGE_SIZE ((NR_MEM_BANKS + NR_SHMEM_BANKS) * 4) =20 -int make_resv_memory_node(const struct kernel_info *kinfo, int addrcells, - int sizecells); - int process_shm(struct domain *d, struct kernel_info *kinfo, const struct dt_device_node *node); =20 @@ -50,12 +47,6 @@ kernel_info_get_shm_mem_const(const struct kernel_info *= kinfo) /* Worst case /memory node reg element: (addrcells + sizecells) */ #define DT_MEM_NODE_REG_RANGE_SIZE (NR_MEM_BANKS * 4) =20 -static inline int make_resv_memory_node(const struct kernel_info *kinfo, - int addrcells, int sizecells) -{ - return 0; -} - static inline int process_shm(struct domain *d, struct kernel_info *kinfo, const struct dt_device_node *node) { @@ -80,6 +71,12 @@ static inline void shm_mem_node_fill_reg_range(const str= uct kernel_info *kinfo, __be32 *reg, int *nr_cells, int addrcells, int sizecell= s) {}; =20 +static inline const struct membanks * +kernel_info_get_shm_mem_const(const struct kernel_info *kinfo) +{ + return NULL; +} + #endif /* CONFIG_STATIC_SHM */ =20 #endif /* XEN_STATIC_SHMEM_H */ --=20 2.48.1 From nobody Thu Oct 30 23:24:26 2025 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; arc=pass (i=1 dmarc=pass fromdomain=valinux.co.jp); dmarc=pass(p=none dis=none) header.from=valinux.co.jp ARC-Seal: i=2; a=rsa-sha256; t=1751725685; cv=pass; d=zohomail.com; s=zohoarc; b=NIAOGUXywryz9cl6zc2esYKs3pv/WE8JQLD662uttXhSfkBtly3SEKtB92knEbK4KhwFsfiXzDlRubiiW7MWV5WJJg/lyGnafaH4e6/i2qeSZjyqEHVZdWDl3wywpoh+JTcFjLpOCoRkiNU6XJ8zVMcNJM6zEdgX8Jee5ou95Ao= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751725685; 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=Zzp0DLydgtLKZcO+n5mVQVLDViTTCqdlKXROzLvkpJI=; b=aoR4tslUGgbfoTg+ho/jlf4/ceC4F6GM6RbUcLZOjrJTWO1ad3hhzsgLr/Qu8tQ+wYBC0pkteZmSP+jHNsANTdktlVm08K2jEUHfGKfDOxBfSmekj6aqHwhTKoX1q6274r5fk9/wwPjDeC7WXXDK4iUTfatIvCaJsmubQtSjcv4= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=valinux.co.jp); 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 1751725685434681.4489933920836; Sat, 5 Jul 2025 07:28:05 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1034240.1407154 (Exim 4.92) (envelope-from ) id 1uY3rU-0005xK-PO; Sat, 05 Jul 2025 14:27:28 +0000 Received: by outflank-mailman (output) from mailman id 1034240.1407154; Sat, 05 Jul 2025 14:27:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uY3rU-0005wY-JI; Sat, 05 Jul 2025 14:27:28 +0000 Received: by outflank-mailman (input) for mailman id 1034240; Sat, 05 Jul 2025 14:27:27 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uY3rT-00055Q-2Q for xen-devel@lists.xenproject.org; Sat, 05 Jul 2025 14:27:27 +0000 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazlp170110002.outbound.protection.outlook.com [2a01:111:f403:c405::2]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 2bcc5930-59ac-11f0-a315-13f23c93f187; Sat, 05 Jul 2025 16:27:25 +0200 (CEST) Received: from OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10d::7) by TYWP286MB1974.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:165::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.24; Sat, 5 Jul 2025 14:27:20 +0000 Received: from OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM ([fe80::80f1:db56:4a11:3f7a]) by OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM ([fe80::80f1:db56:4a11:3f7a%5]) with mapi id 15.20.8901.023; Sat, 5 Jul 2025 14:27:20 +0000 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" X-Inumbo-ID: 2bcc5930-59ac-11f0-a315-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L9pEPOhSrFDEbn/lxqgdU64vqsbWfr3mB5tPLDnDNMSLcZ1eDp92syeD7bWNWzLZ/u+dIKW6brwCH/UjifJxsjjZSb09MTn83DJrBYeBmn/FEXLJu0yvvXaJ1Tcd+aKUR4HpuCV+GYYv+5GqxIYexU3zg6oDWjN79pq/ubjl+v/ZGhHSO+elTK3pADdv61Jv6gN/KzG4ngulyV4XXf1rlYpbwlRuu1VyWifaadSNKnr5bDX+47KH7sjWO2oSINoSs23Ef0SFK6+XO/l6+Tvve/UU0aOAZgMSqS7kyYLQjnx4dkZ0vO22FZgMniAGFYruW28B3+8uAAKjsNts0lP8CA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Zzp0DLydgtLKZcO+n5mVQVLDViTTCqdlKXROzLvkpJI=; b=absjRYoWkmQuQ/UbfMeQA1m+1a9b2Eb2JcJprypFJ/tZi1kgOHmJhg+tuf8K5VArjdyiHGJckMQBjCOM32DyC2SC4jPnKrbIbvQfBFKutaSg4F3JPVMhN5xCLkdUlvgjPm5AcQFEWbyA2E8AMrszQ7XwOqytJ/aqRkq7oP049EorT6RODen8FK0NCNBJetLE96dlDeHbMvrsPnonGS0JVVAqngQpPaLDoIR2VvA9Tbb+HWsopMlY7SQYLzjj8WYOvrCWE1jSTd7QhBpiktRBepPh+sNaeaSEnrFrAPN+dzcMPsPYeDbKh+FmCqDxnXw7R5oIu/PIhB5Q5RR6Vt2/PA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Zzp0DLydgtLKZcO+n5mVQVLDViTTCqdlKXROzLvkpJI=; b=VFPz9lhH+GsbeQMIFoh8ynHYdcNSZMeEPazaTQxoFg2nGQA5e0I7a91ycp32gflyY/asyao81AzqQ3Lk60MYKBYRINeYPJX1qR7c6RGL3DyUF7w8bIvhfTwko5JUrSocAZH3cowLynsnG1+ywf2jKM0zoBBUG9oNOlnQGMbNYAY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; From: Koichiro Den To: xen-devel@lists.xenproject.org Cc: Koichiro Den , 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 v2 4/5] xen/arm: Implement standard PV time interface as per ARM DEN 0057A Date: Sat, 5 Jul 2025 23:27:02 +0900 Message-ID: <20250705142703.2769819-5-den@valinux.co.jp> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250705142703.2769819-1-den@valinux.co.jp> References: <20250705142703.2769819-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0029.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:381::15) To OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10d::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OS3P286MB0979:EE_|TYWP286MB1974:EE_ X-MS-Office365-Filtering-Correlation-Id: f3497fed-2386-4765-2173-08ddbbd00d53 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|10070799003|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Uf4GDlrJGNUNh9lPxm6R16gXVorHS6DLbixBuqSpNarA3QtvnbZIrWOJRbeh?= =?us-ascii?Q?R3m5jtK10cIbhuIbmknhWdKdgew8114nr8za65XcaBxBLYhKfUxT/iBQQMDO?= =?us-ascii?Q?I6wusQ1ZJTAgJS8kdLFLar7J0AwoLC4Gzj58pLUZl6XSysJBwdm1mF/yipPX?= =?us-ascii?Q?sJAp4cRk1NPwsR1im7ev8gZCCht73sOC2RH9uXg3I7GUMKv1FT7zSyHOJxJg?= =?us-ascii?Q?lJeu6mpbtE7WjO2Z8We38RM5Yuw5QHS6VkhL3m6P+ZycSMPMhZeKu2xgKPhv?= =?us-ascii?Q?+3QkqaT8Htp7/y/R2WPQRTFcGQC2vXdi7GWhyMP1He8Oev+nsyFWLYMgthWu?= =?us-ascii?Q?9t0e6JWdftoHpW/HgAMJnKHcOzJ9RnfreIEFzPM9IfCqr4iUKs9hxAR2bduV?= =?us-ascii?Q?JvIuRk875c9rrvsfKlS3/w1Qy7hSniInAXqXJ7RlYzOKXem/aG6pgzzw2djr?= =?us-ascii?Q?m4UFFt3cDrcwHpRjW8r+4P0Iso9AUhVUZhL5JUBygwV8771bJvrqDue+lXKD?= =?us-ascii?Q?Gd0GhAWc/HzI6eiysn303BsSoK9YaWhQXdZFwMAPSztoQwlPturUxS4OXE1m?= =?us-ascii?Q?EeVL8dtJEK+Tjt+xP9IJ9h6fCqSw3dJHQG+1ztVSvkKft62uc3XfVT7WsvAS?= =?us-ascii?Q?FY2azdWMw+1VDeYsEblQZpaqJXSv9C+LyWJHiIGpLOZ2wAOtbLXKBB2l9dwj?= =?us-ascii?Q?fTtvTfwrSgK+SxLv5U32R/WD9MRapao2RWDucM+IUNYZfZrIBjnlNEdvNgMt?= =?us-ascii?Q?We4MBOvW9dGQ9eWA/VhCKqQJNmWqDa28TPcomhVofeVHkVWyt8brIsv8SK5w?= =?us-ascii?Q?kdmk4igf2r5X4AqKCaZC7ZUbXpUkiSPwuojQ+zqlqrNo53a8uhsmqfc5xHpS?= =?us-ascii?Q?MdmgDhLuDe/ZezA7iqZd2dYmrMVjuF7Sq2q3IdhHk+qUdapjI3G3fRgLn5zs?= =?us-ascii?Q?mbmvzIfx8tXt101SAQLx2hPbkyp6XqnDARWA1kIoII6KHLFpL9IfmMblTKNB?= =?us-ascii?Q?0NWDaNRVDVcjhT0FwUg+5f0mI0qnN7mfCLc+7ghIuR1Faga0So0vuaRAjnDG?= =?us-ascii?Q?chFyOGszJedVt1pxc99rszvV08enyAj3ytOKFe+iaFn0348tG0nKJHaE8wQs?= =?us-ascii?Q?3/br3PRVHWJUJim+mxbMbBxa3DSDK783Ao4WR/Zu/HUd3brWY9pUS1wCn/K+?= =?us-ascii?Q?NlMlC4Ni0XhuMVP11lVZge00WvoL0r1ksxvCb3p9TNcFKX/yHczGnkXDVcZa?= =?us-ascii?Q?SUCUN88Sca3ZKLj4SoYgfxgIb2qoV8Zs51Abmmm4B79NHvH5jIzXruiHkVZy?= =?us-ascii?Q?pdpyTatgleQI54FpyDe8/0N1IZWADPd1PqHVNT3eIPG+ujF2vP9Hy2YrPamV?= =?us-ascii?Q?/pcMKobAHHPHTXsYlx4yLYcIwBg3f7c5PDPeUoT+DAJarDJtPw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(10070799003)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?eq+yDsKfwn92OKMhWeWKeq4qDWHoaY1Ly5OZUJ0339InHAF1p0zCI9ju5Kdg?= =?us-ascii?Q?0yg37q1ESwZbkR/EOK0a5EaOTVG6nlCDl80KK8/51GLXObzRxzz2dr20K6FO?= =?us-ascii?Q?yzCqXzHnSYAm+vTVI5iuiucybeCyUbDPFcU1fwAPWzTf0mED2M4qxgKWcux/?= =?us-ascii?Q?kCwDpzNJrzVwJ8OapmxPEoCQndKJ4r0Q2ZiZ1b0YonFt+KHOnEmnxW01ETtM?= =?us-ascii?Q?oxE1D6v+kVYmSxeRU0j5fWzkVPOE1oZm1IVFqwiVmv0xzrIoQE2H01bpzX67?= =?us-ascii?Q?hJQeOoMbFO7hYmzGiYznfHyIPxwASTDaz/d6qeevc3uO28sGmMiXc1nDfbcZ?= =?us-ascii?Q?R82UL0dpSxMJTCfqndXVdoyBXHDf0/pVa8FIOTMBSVu3PSdIMPZtLKFjrIVS?= =?us-ascii?Q?L665SvERXg1D0kUV4snuUkcHyw7qphdoG2Fhzn4k5V2UNloEZFAS2k2/ad3W?= =?us-ascii?Q?duvLjUQoMVBkHvqzLGugSiMA7hEoQe/D+68GHr9ASG0RA/uLgr0jD72tJfrW?= =?us-ascii?Q?E8eDMlE2nIhYVQ25hW1nu60SnxJo7uJiZHXpKY28oL8GK+9wtXPfEipBLkH0?= =?us-ascii?Q?6lGrzQACTKZkuERYDnvhsAQZfrB+IQePg9WEKlRoF87Ju4/8R1cLaTcFbZw8?= =?us-ascii?Q?SCLasP8lL9NPQ5TwVGbphswJvQzk38ao/EpSie8UrLOc6obTHyn2vR0QX/Vq?= =?us-ascii?Q?2esToQrR0hFqfOI96W9/1bHeKeBdeGjVMFHsGJv4Y6T14DXaMY2ySDTrgKQc?= =?us-ascii?Q?sh1UPDu8FD446QGfwxLSlSqB9FAoTmTyPJ0kOtvoIu5BzV1I4leHrSsR3YlP?= =?us-ascii?Q?NC5IjgfvDtlvUNbZbt9DVijMlXCxcFsy1pnkyX4E84jDb4UI/gaSOw8xqefx?= =?us-ascii?Q?4cI85JmlXS9UwC9huXmc2SdhjxkR5XLUEvq1oGSq13SXsLYWZMQ9unrf0foj?= =?us-ascii?Q?NNbBvSySujTCOrFGGSBj0wRmkgzitJDcfGe07TdimelCEMc5JEFEp4VoC+6i?= =?us-ascii?Q?ZihEwH479X2YjlY9S+a4Qyx4E/O/KDdhwRbugL+dw7hUp2HhbXhj0rh4T4nm?= =?us-ascii?Q?Ced5Yqlrskw+nDXIF5mqhCgiQFi5QCAACxGBc8FBBRMha6yOv8Gqcf10UKlw?= =?us-ascii?Q?jh25biwn9xEV0NnNaGlZejafVJiaK1rAfc8iEHfIMDsvkiCMRE/LSsa0DL2F?= =?us-ascii?Q?0Z2UWwwjs1tTDB5wpga9kaXzonRWC2uU0lkP/99PhhUPzOkwbnOwDZZ8MlQy?= =?us-ascii?Q?BBJWKAgZ2UmRYxp4iAiF5T+wIZxsq8D7m5PbRoB9Cd+uzptlIYb+VqxQJ7wi?= =?us-ascii?Q?jscgnDcJ/OpJKZ+Z2bWpDd+3aFg0Bc7B5GGhPyhpad71oa/HAJ/oFqX9YqV7?= =?us-ascii?Q?vfbJQtGzNcwUEXLAPPrphQ2oYgNUADJ+uNdLwjs+mHV6IUjfnPWTd6pcU6io?= =?us-ascii?Q?lLIBUCu8VWgZSirhPIGfYjI+AWQeCz78Q8B0hYmyQsHRrfLFAzi8JFEBAylA?= =?us-ascii?Q?ow/Ntr8mWR1+sP7xd3SxcG8vn6gvvRkNdmTRiNUT4gKK7YhhDKfcM7LCfuZQ?= =?us-ascii?Q?UJgdAO3z4XXJkJRerp52sD3RUTKEpiZJbraUW6BmJDX9+9n3Uxfz9xpPZNf1?= =?us-ascii?Q?fPX+eomUa2OsPDB46aCQYek=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: f3497fed-2386-4765-2173-08ddbbd00d53 X-MS-Exchange-CrossTenant-AuthSource: OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2025 14:27:20.8696 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +fRWjlsuyLOEkUd7xWLPyzukLCJTvYD9q+rzwcp/mJ1/Powjq6RUelO8WNDALT3sXRZo0+6TuiUJ2Eye5I3Mpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWP286MB1974 X-ZohoMail-DKIM: pass (identity @valinux.co.jp) X-ZM-MESSAGEID: 1751725687582116600 Content-Type: text/plain; charset="utf-8" The VCPUOP_register_runstate_memory_area hypercall is still actively used, e.g., in the Linux arm64 codebase. When KPTI is enabled, the area was not registered from the beginning due to the VA not always being valid. In such cases, Linux falls back to using the standard PV time interface (ARM DEN 0057A), but this interface has not been implemented in Xen for ARM64 (until this commit). The VCPUOP_register_runstate_phys_area was introduced, though it's unclear whether this would be used in Linux arm64 and when it will be prevalent amongst every possible downstream domain Linux variant. And of course Linux is not an only option for the Xen arm64 domains. Therefore, implementing the standard way of sharing PV time is generically beneficial, avoiding reliance on specially crafted hypercalls, the usage of which by guest VMs is not always guaranteed. Note that the PV_TIME_ST interface communicates with IPA (GPA), not GVA. Add the PV time interface according to ARM DEN 0057A. This supports dom0less cases only. Signed-off-by: Koichiro Den --- xen/arch/arm/domain.c | 68 +++++++++ xen/arch/arm/domain_build.c | 228 ++++++++++++++++++++++++++++- xen/arch/arm/include/asm/domain.h | 23 +++ xen/arch/arm/include/asm/kernel.h | 2 + xen/arch/arm/include/asm/p2m.h | 3 + xen/arch/arm/include/asm/smccc.h | 12 ++ xen/arch/arm/p2m.c | 6 +- xen/arch/arm/vsmc.c | 35 +++++ xen/include/xen/fdt-domain-build.h | 2 +- xen/include/xen/macros.h | 1 + 10 files changed, 367 insertions(+), 13 deletions(-) diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index be58a23dd725..e3b893e93685 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -277,6 +277,20 @@ static void ctxt_switch_to(struct vcpu *n) WRITE_SYSREG(n->arch.mdcr_el2, MDCR_EL2); } =20 +#ifdef CONFIG_ARM_64 +static void update_stolen_time(struct vcpu *n) +{ + uint64_t tot_stolen; + + if ( is_idle_vcpu(n) || is_32bit_domain(n->domain) ) + return; + + tot_stolen =3D n->runstate.time[RUNSTATE_runnable] + + n->runstate.time[RUNSTATE_offline]; + write_atomic(&n->arch.pv_time_region->stolen_time, tot_stolen); +} +#endif + static void schedule_tail(struct vcpu *prev) { ASSERT(prev !=3D current); @@ -291,6 +305,10 @@ static void schedule_tail(struct vcpu *prev) =20 update_runstate_area(current); =20 +#ifdef CONFIG_ARM_64 + update_stolen_time(current); +#endif + /* Ensure that the vcpu has an up-to-date time base. */ update_vcpu_system_time(current); } @@ -536,6 +554,9 @@ void free_vcpu_struct(struct vcpu *v) int arch_vcpu_create(struct vcpu *v) { int rc =3D 0; +#ifdef CONFIG_ARM_64 + size_t regions_per_page; +#endif =20 BUILD_BUG_ON( sizeof(struct cpu_info) > STACK_SIZE ); =20 @@ -586,6 +607,15 @@ int arch_vcpu_create(struct vcpu *v) if ( get_ssbd_state() =3D=3D ARM_SSBD_RUNTIME ) v->arch.cpu_info->flags |=3D CPUINFO_WORKAROUND_2_FLAG; =20 +#ifdef CONFIG_ARM_64 + if ( v->domain->arch.pv_time_regions ) + { + regions_per_page =3D PAGE_SIZE / sizeof(struct pv_time_region); + v->arch.pv_time_region =3D &v->domain->arch.pv_time_regions[ + v->vcpu_id / regions_per_page][v->vcpu_id % regions_per_page]; + } +#endif + return rc; =20 fail: @@ -708,6 +738,10 @@ int arch_domain_create(struct domain *d, { unsigned int count =3D 0; int rc; +#ifdef CONFIG_ARM_64 + unsigned int npages; + unsigned int i =3D 0; +#endif =20 BUILD_BUG_ON(GUEST_MAX_VCPUS < MAX_VIRT_CPUS); =20 @@ -791,9 +825,43 @@ int arch_domain_create(struct domain *d, d->arch.sve_vl =3D config->arch.sve_vl; #endif =20 +#ifdef CONFIG_ARM_64 + /* + * Preallocate the stolen time shared memory regions (ARM DEN 0057A) + * for all the possible vCPUs. Note that at this point, neither + * kernel_probe() nor XEN_DOMCTL_set_address_size has been called, + * so the domain arch type (32-bit or 64-bit) is still unknown. + * We may allocate the region for 32-bit domain unnecessarily. + */ + ASSERT(IS_POWER_OF_TWO(sizeof(struct pv_time_region))); + npages =3D DIV_ROUND_UP(d->max_vcpus * sizeof(struct pv_time_region), = PAGE_SIZE); + d->arch.pv_time_regions =3D (struct pv_time_region **)xmalloc_array(vo= id *, npages); + if ( !d->arch.pv_time_regions ) + { + rc =3D -ENOMEM; + goto fail; + } + for ( i =3D 0; i < npages; i++ ) + { + d->arch.pv_time_regions[i] =3D alloc_xenheap_pages(0, 0); + if ( !d->arch.pv_time_regions[i] ) + { + rc =3D -ENOMEM; + goto fail; + } + clear_page(d->arch.pv_time_regions[i]); + } +#endif return 0; =20 fail: +#ifdef CONFIG_ARM_64 + for ( ; i > 0; --i ) + free_xenheap_pages( d->arch.pv_time_regions[i - 1], 0 ); + if ( d->arch.pv_time_regions ) + xfree( d->arch.pv_time_regions ); +#endif + d->is_dying =3D DOMDYING_dead; arch_domain_destroy(d); =20 diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index e063d0d4076e..bfee77268056 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -767,6 +767,34 @@ int __init add_ext_regions(unsigned long s_gfn, unsign= ed long e_gfn, return 0; } =20 +#ifdef CONFIG_ARM_64 +int __init add_pv_regions(unsigned long s_gfn, unsigned long e_gfn, + void *data) +{ + struct membanks *pv_regions =3D data; + unsigned int npages; + paddr_t s =3D pfn_to_paddr(s_gfn); + + /* + * The overall required size for the regions should be at most 2 x 4KB, + * assuming a maximum of 128 vCPUs per domain. Therefore, always + * attempt to find a contiguous area for simplicity. + */ + if ( pv_regions->nr_banks =3D=3D 1 ) + return 0; + + npages =3D pv_regions->max_banks; + if ( e_gfn - s_gfn < npages - 1 ) + return 0; + + pv_regions->bank[0].start =3D s; + pv_regions->bank[0].size =3D npages; + pv_regions->nr_banks++; + + return 0; +} +#endif + static int __init handle_pci_range(const struct dt_device_node *dev, uint64_t addr, uint64_t len, void *data) { @@ -796,7 +824,7 @@ static int __init handle_pci_range(const struct dt_devi= ce_node *dev, =20 /* * Find the holes in the Host DT which can be exposed to hwdom or a direct= -map - * domU as extended regions for the special memory mappings. In order to + * domU e.g. as extended regions for the special memory mappings. In order= to * calculate regions we exclude every addressable memory region described = by * "reg" and "ranges" properties from the maximum possible addressable phy= sical * memory range: @@ -895,6 +923,15 @@ static int __init find_memory_holes(const struct kerne= l_info *kinfo, goto out; } =20 +#ifdef CONFIG_ARM_64 + if ( kinfo->arch.pv_time_range ) + { + res =3D rangeset_subtract(mem_holes, kinfo->arch.pv_time_range); + if ( res ) + goto out; + } +#endif + start =3D 0; end =3D (1ULL << p2m_ipa_bits) - 1; res =3D rangeset_report_ranges(mem_holes, PFN_DOWN(start), PFN_DOWN(en= d), @@ -929,7 +966,7 @@ static int __init find_domU_holes(const struct kernel_i= nfo *kinfo, { uint64_t bankend, start, size =3D 0; =20 - start =3D ROUNDUP(bankbase[i] + kinfo_mem->bank[i].size, SZ_2M); + start =3D bankbase[i] + kinfo_mem->bank[i].size; =20 bankend =3D ~0ULL >> (64 - p2m_ipa_bits); bankend =3D min(bankend, bankbase[i] + banksize[i] - 1); @@ -961,6 +998,15 @@ static int __init find_domU_holes(const struct kernel_= info *kinfo, goto out; } =20 +#ifdef CONFIG_ARM_64 + if ( kinfo->arch.pv_time_range ) + { + res =3D rangeset_subtract(mem_holes, kinfo->arch.pv_time_range); + if ( res ) + goto out; + } +#endif + res =3D rangeset_report_ranges(mem_holes, 0, PFN_DOWN((1ULL << p2m_ipa_bits) - 1), cb, unused_regions); @@ -1021,6 +1067,10 @@ static int __init find_memory_holes_noiommu(const st= ruct kernel_info *kinfo, kinfo->xen_reg_assigned ? membanks_xzalloc(count_ranges(kinfo->xen_reg_assigned), MEMORY) : NULL; +#ifdef CONFIG_ARM_64 + struct membanks *pv_time =3D + kinfo->arch.pv_time_range ? membanks_xzalloc(1, MEMORY) : NULL; +#endif =20 /* * Exclude the following regions: @@ -1029,6 +1079,7 @@ static int __init find_memory_holes_noiommu(const str= uct kernel_info *kinfo, * 3) Grant table assigned to domain * 4) Remove static shared memory (when the feature is enabled) * 5) Remove xen,reg + * 6) Remove PV time shared region */ const struct membanks *mem_banks[] =3D { kernel_info_get_mem_const(kinfo), @@ -1038,6 +1089,9 @@ static int __init find_memory_holes_noiommu(const str= uct kernel_info *kinfo, bootinfo_get_shmem(), #endif xen_reg, +#ifdef CONFIG_ARM_64 + pv_time, +#endif }; =20 dt_dprintk("Find memory holes (noiommu)\n"); @@ -1065,6 +1119,21 @@ static int __init find_memory_holes_noiommu(const st= ruct kernel_info *kinfo, gnttab->bank[0].start =3D kinfo->gnttab_start; gnttab->bank[0].size =3D kinfo->gnttab_size; =20 +#ifdef CONFIG_ARM_64 + if ( kinfo->arch.pv_time_range ) + { + if ( !pv_time ) + { + res =3D -ENOMEM; + goto out; + } + + rangeset_report_ranges(kinfo->arch.pv_time_range, 0, + PFN_DOWN((1ULL << p2m_ipa_bits) - 1), + rangeset_to_membank, pv_time); + } +#endif + res =3D find_unallocated_memory(kinfo, mem_banks, ARRAY_SIZE(mem_banks= ), unused_regions, cb); =20 @@ -1564,19 +1633,82 @@ int __init make_chosen_node(const struct kernel_inf= o *kinfo) return res; } =20 -int __init make_resv_memory_node(const struct kernel_info *kinfo, int addr= cells, +#ifdef CONFIG_ARM_64 +int __init make_pv_time_resv_memory_node(struct kernel_info *kinfo, + int addrcells, int sizecells) +{ + __be32 reg[GUEST_ROOT_ADDRESS_CELLS + GUEST_ROOT_SIZE_CELLS]; + unsigned int len =3D (addrcells + sizecells) * sizeof(__be32); + struct domain *d =3D kinfo->d; + struct membanks *unused_banks; + void *fdt =3D kinfo->fdt; + unsigned regions_len; + gfn_t pv_time_gfn; + paddr_t start; + paddr_t size; + unsigned int npages; + __be32 *cells; + int res; + + /* Find a memory hole */ + ASSERT(IS_POWER_OF_TWO(sizeof(struct pv_time_region))); + npages =3D DIV_ROUND_UP(d->max_vcpus * sizeof(struct pv_time_region), = PAGE_SIZE); + regions_len =3D PAGE_SIZE * npages; + unused_banks =3D membanks_xzalloc(npages, MEMORY); + if ( !unused_banks ) + return -ENOMEM; + + res =3D find_unused_regions(kinfo, unused_banks, add_pv_regions); + if ( res || unused_banks->nr_banks !=3D 1 ) + { + printk(XENLOG_WARNING "%pd: failed to find unused regions\n", d); + goto fail; + } + start =3D unused_banks->bank[0].start; + size =3D unused_banks->bank[0].size; + + kinfo->arch.pv_time_range =3D rangeset_new(NULL, NULL, 0); + if ( !kinfo->arch.pv_time_range ) + { + res =3D -ENOMEM; + goto fail; + } + res =3D rangeset_add_range(kinfo->arch.pv_time_range, + PFN_DOWN(start), PFN_DOWN(start + size - 1)); + if ( res ) + goto fail; + + pv_time_gfn =3D gaddr_to_gfn(start); + + /* Reserve the selected GFN */ + res =3D domain_fdt_begin_node(fdt, "pv-time", gfn_x(pv_time_gfn)); + if ( res ) + goto fail; + + cells =3D reg; + dt_child_set_range(&cells, addrcells, sizecells, gfn_x(pv_time_gfn), r= egions_len); + res =3D fdt_property(fdt, "reg", reg, len); + if ( res ) + goto fail; + + res =3D fdt_end_node(fdt); + + fail: + if ( kinfo->arch.pv_time_range ) + rangeset_destroy(kinfo->arch.pv_time_range); + xfree(unused_banks); + return res; +} +#endif + +int __init make_resv_memory_node(struct kernel_info *kinfo, int addrcells, int sizecells) { - const struct membanks *mem =3D kernel_info_get_shm_mem_const(kinfo); void *fdt =3D kinfo->fdt; int res =3D 0; /* Placeholder for reserved-memory\0 */ const char resvbuf[16] =3D "reserved-memory"; =20 - if ( !mem || mem->nr_banks =3D=3D 0 ) - /* No shared memory provided. */ - return 0; - dt_dprintk("Create reserved-memory node\n"); =20 res =3D fdt_begin_node(fdt, resvbuf); @@ -1599,6 +1731,12 @@ int __init make_resv_memory_node(const struct kernel= _info *kinfo, int addrcells, if ( res ) return res; =20 +#ifdef CONFIG_ARM_64 + res =3D make_pv_time_resv_memory_node(kinfo, addrcells, sizecells); + if ( res ) + return res; +#endif + res =3D fdt_end_node(fdt); =20 return res; @@ -1747,6 +1885,13 @@ static int __init handle_node(struct domain *d, stru= ct kernel_info *kinfo, dt_n_size_cells(node)); if ( res ) return res; + +#ifdef CONFIG_ARM_64 + res =3D make_pv_time_resv_memory_node(kinfo, dt_n_addr_cells(node), + dt_n_size_cells(node)); + if ( res ) + return res; +#endif } =20 for ( child =3D node->child; child !=3D NULL; child =3D child->sibling= ) @@ -1912,11 +2057,72 @@ static void __init find_gnttab_region(struct domain= *d, kinfo->gnttab_start, kinfo->gnttab_start + kinfo->gnttab_size); } =20 +#ifdef CONFIG_ARM_64 +static int __init alloc_pv_time_region(unsigned long s_gfn, unsigned long = e_gfn, + void *data) +{ + struct domain *d =3D data; + unsigned int npages =3D DIV_ROUND_UP( + d->max_vcpus * sizeof(struct pv_time_region), PAGE_SIZE); + gfn_t pv_time_gfn; + mfn_t pv_time_mfn; + unsigned int i; + int res; + + ASSERT(npages =3D=3D e_gfn - s_gfn + 1); + ASSERT(gfn_eq(d->arch.pv_time_regions_gfn, _gfn(0))); + + for ( i =3D 0; i < npages; i++ ) + { + pv_time_mfn =3D virt_to_mfn(d->arch.pv_time_regions[i]); + pv_time_gfn =3D gaddr_to_gfn((s_gfn + i) * PAGE_SIZE); + res =3D p2m_insert_mapping(d, pv_time_gfn, 1, pv_time_mfn, p2m_ram= _ro); + if ( res ) { + printk(XENLOG_WARNING "%pd: failed to insert P2M entry for PV = time\n", d); + goto fail; + } + } + d->arch.pv_time_regions_gfn =3D _gfn(s_gfn); + + return 0; + + fail: + for ( ; i > 0; i-- ) + { + pv_time_mfn =3D virt_to_mfn(d->arch.pv_time_regions[i - 1]); + pv_time_gfn =3D gaddr_to_gfn((s_gfn + i - 1) * PAGE_SIZE); + res =3D p2m_remove_mapping(d, pv_time_gfn, 1, pv_time_mfn); + if ( res ) + printk(XENLOG_WARNING "%pd: failed to remove P2M entry for PV = time\n", d); + } + + return res; +} + +static int __init construct_pv_time(struct kernel_info *kinfo) +{ + struct domain *d =3D kinfo->d; + + ASSERT(IS_POWER_OF_TWO(sizeof(struct pv_time_region))); + ASSERT(d->arch.pv_time_regions); + + if ( is_32bit_domain(d) ) + return 0; + + return rangeset_report_ranges(kinfo->arch.pv_time_range, 0, + PFN_DOWN((1ULL << p2m_ipa_bits) - 1), + alloc_pv_time_region, d); +} +#endif + int __init construct_domain(struct domain *d, struct kernel_info *kinfo) { unsigned int i; struct vcpu *v =3D d->vcpu[0]; struct cpu_user_regs *regs =3D &v->arch.cpu_info->guest_cpu_user_regs; +#ifdef CONFIG_ARM_64 + int res; +#endif =20 BUG_ON(d->vcpu[0] =3D=3D NULL); BUG_ON(v->is_initialised); @@ -1938,6 +2144,12 @@ int __init construct_domain(struct domain *d, struct= kernel_info *kinfo) if ( is_64bit_domain(d) ) vcpu_switch_to_aarch64_mode(v); =20 + res =3D construct_pv_time(kinfo); + if ( res ) + { + printk("Failed to allocate PV time region\n"); + return res; + } #endif =20 /* diff --git a/xen/arch/arm/include/asm/domain.h b/xen/arch/arm/include/asm/d= omain.h index a3487ca71303..5a724f9f22d9 100644 --- a/xen/arch/arm/include/asm/domain.h +++ b/xen/arch/arm/include/asm/domain.h @@ -59,6 +59,20 @@ struct paging_domain { unsigned long p2m_total_pages; }; =20 +#ifdef CONFIG_ARM_64 +/* Stolen time shared memory region (ARM DEN 0057A.b) */ +struct pv_time_region { + /* This field must be 0 as per ARM DEN 0057A.b */ + uint32_t revision; + + /* This field must be 0 as per ARM DEN 0057A.b */ + uint32_t attribute; + + /* Total stolen time in nanoseconds */ + uint64_t stolen_time; +} __aligned(64); +#endif + struct arch_domain { #ifdef CONFIG_ARM_64 @@ -121,6 +135,11 @@ struct arch_domain void *tee; #endif =20 +#ifdef CONFIG_ARM_64 + struct pv_time_region **pv_time_regions; + gfn_t pv_time_regions_gfn; +#endif + } __cacheline_aligned; =20 struct arch_vcpu @@ -243,6 +262,10 @@ struct arch_vcpu */ bool need_flush_to_ram; =20 +#ifdef CONFIG_ARM_64 + struct pv_time_region *pv_time_region; +#endif + } __cacheline_aligned; =20 void vcpu_show_registers(struct vcpu *v); diff --git a/xen/arch/arm/include/asm/kernel.h b/xen/arch/arm/include/asm/k= ernel.h index 7c3b7fde5b64..9b33526d2384 100644 --- a/xen/arch/arm/include/asm/kernel.h +++ b/xen/arch/arm/include/asm/kernel.h @@ -12,6 +12,8 @@ struct arch_kernel_info { #ifdef CONFIG_ARM_64 enum domain_type type; + + struct rangeset *pv_time_range; #endif =20 /* Enable pl011 emulation */ diff --git a/xen/arch/arm/include/asm/p2m.h b/xen/arch/arm/include/asm/p2m.h index 2d53bf9b6177..fb754da3db17 100644 --- a/xen/arch/arm/include/asm/p2m.h +++ b/xen/arch/arm/include/asm/p2m.h @@ -324,6 +324,9 @@ int map_dev_mmio_page(struct domain *d, gfn_t gfn, mfn_= t mfn); int p2m_insert_mapping(struct domain *d, gfn_t start_gfn, unsigned long nr, mfn_t mfn, p2m_type_t t); =20 +int p2m_remove_mapping(struct domain *d, gfn_t start_gfn, unsigned long nr, + mfn_t mfn); + int guest_physmap_add_entry(struct domain *d, gfn_t gfn, mfn_t mfn, diff --git a/xen/arch/arm/include/asm/smccc.h b/xen/arch/arm/include/asm/sm= ccc.h index a289c48b7ffd..6207ac74b715 100644 --- a/xen/arch/arm/include/asm/smccc.h +++ b/xen/arch/arm/include/asm/smccc.h @@ -380,6 +380,18 @@ void arm_smccc_1_2_smc(const struct arm_smccc_1_2_regs= *args, ARM_SMCCC_OWNER_ARCH, \ 0x3FFF) =20 +#define ARM_SMCCC_HYP_PV_TIME_FEATURES \ + ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ + ARM_SMCCC_CONV_64, \ + ARM_SMCCC_OWNER_HYPERVISOR, \ + 0x20) + +#define ARM_SMCCC_HYP_PV_TIME_ST \ + ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ + ARM_SMCCC_CONV_64, \ + ARM_SMCCC_OWNER_HYPERVISOR, \ + 0x21) + /* SMCCC error codes */ #define ARM_SMCCC_NOT_REQUIRED (-2) #define ARM_SMCCC_ERR_UNKNOWN_FUNCTION (-1) diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c index ef8bd4b6ab33..51d1fb3067b7 100644 --- a/xen/arch/arm/p2m.c +++ b/xen/arch/arm/p2m.c @@ -109,10 +109,8 @@ int p2m_insert_mapping(struct domain *d, gfn_t start_g= fn, unsigned long nr, return rc; } =20 -static inline int p2m_remove_mapping(struct domain *d, - gfn_t start_gfn, - unsigned long nr, - mfn_t mfn) +int p2m_remove_mapping(struct domain *d, gfn_t start_gfn, unsigned long nr, + mfn_t mfn) { struct p2m_domain *p2m =3D p2m_get_hostp2m(d); unsigned long i; diff --git a/xen/arch/arm/vsmc.c b/xen/arch/arm/vsmc.c index 6081f14ed0c1..31d643b5a6d5 100644 --- a/xen/arch/arm/vsmc.c +++ b/xen/arch/arm/vsmc.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -127,6 +128,11 @@ static bool handle_arch(struct cpu_user_regs *regs) if ( cpus_have_cap(ARM_WORKAROUND_BHB_SMCC_3) ) ret =3D ARM_SMCCC_SUCCESS; break; +#ifdef CONFIG_ARM_64 + case ARM_SMCCC_HYP_PV_TIME_FEATURES: + ret =3D ARM_SMCCC_SUCCESS; + break; +#endif } =20 set_user_reg(regs, 0, ret); @@ -162,6 +168,29 @@ static bool handle_arch(struct cpu_user_regs *regs) return false; } =20 +#ifdef CONFIG_ARM_64 +static bool fill_pv_time_features(struct cpu_user_regs *regs) +{ + uint32_t arch_func_id =3D get_user_reg(regs, 1); + int ret =3D ARM_SMCCC_NOT_SUPPORTED; + + if ( arch_func_id =3D=3D ARM_SMCCC_HYP_PV_TIME_ST ) + ret =3D ARM_SMCCC_SUCCESS; + + set_user_reg(regs, 0, ret); + + return true; +} + +static bool fill_pv_time_st(struct cpu_user_regs *regs) +{ + paddr_t gaddr =3D gfn_to_gaddr(current->domain->arch.pv_time_regions_g= fn); + register_t ret =3D gaddr + current->vcpu_id * sizeof(struct pv_time_re= gion); + set_user_reg(regs, 0, ret); + return true; +} +#endif + /* SMCCC interface for hypervisor. Tell about itself. */ static bool handle_hypervisor(struct cpu_user_regs *regs) { @@ -176,6 +205,12 @@ static bool handle_hypervisor(struct cpu_user_regs *re= gs) case ARM_SMCCC_REVISION_FID(HYPERVISOR): return fill_revision(regs, XEN_SMCCC_MAJOR_REVISION, XEN_SMCCC_MINOR_REVISION); +#ifdef CONFIG_ARM_64 + case ARM_SMCCC_HYP_PV_TIME_FEATURES: + return fill_pv_time_features(regs); + case ARM_SMCCC_HYP_PV_TIME_ST: + return fill_pv_time_st(regs); +#endif default: return false; } diff --git a/xen/include/xen/fdt-domain-build.h b/xen/include/xen/fdt-domai= n-build.h index e9418857e386..57f2d9cf8da1 100644 --- a/xen/include/xen/fdt-domain-build.h +++ b/xen/include/xen/fdt-domain-build.h @@ -25,7 +25,7 @@ int construct_domain(struct domain *d, struct kernel_info= *kinfo); int construct_hwdom(struct kernel_info *kinfo, const struct dt_device_node *node); int make_chosen_node(const struct kernel_info *kinfo); -int make_resv_memory_node(const struct kernel_info *kinfo, +int make_resv_memory_node(struct kernel_info *kinfo, int addrcells, int sizecells); int make_cpus_node(const struct domain *d, void *fdt); int make_hypervisor_node(struct domain *d, const struct kernel_info *kinfo, diff --git a/xen/include/xen/macros.h b/xen/include/xen/macros.h index cd528fbdb127..4d184947a4b0 100644 --- a/xen/include/xen/macros.h +++ b/xen/include/xen/macros.h @@ -5,6 +5,7 @@ #define ROUNDDOWN(x, a) ((x) & ~((a) - 1)) =20 #define IS_ALIGNED(val, align) (!((val) & ((align) - 1))) +#define IS_POWER_OF_TWO(val) ((val) && !((val) & ((val) - 1))) =20 #define DIV_ROUND(n, d) (((n) + (d) / 2) / (d)) #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) --=20 2.48.1 From nobody Thu Oct 30 23:24:26 2025 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; arc=pass (i=1 dmarc=pass fromdomain=valinux.co.jp); dmarc=pass(p=none dis=none) header.from=valinux.co.jp ARC-Seal: i=2; a=rsa-sha256; t=1751725680; cv=pass; d=zohomail.com; s=zohoarc; b=QNVF4+yJiyMGSRicfAqedLCKHGOjpx5qN66CKs6J+LD3605wDoCbK5r+SXvmURCvlO78Xj7xp2h7lZ1QNZT9QflKDjmOcFFNmBVUfO72NwzHSI4KYl3PHCsDP9E83RuAOT3Lcu3ZJxYOPFGvFHmX2OmMjn23piTaqQoc3ji4gZo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751725680; 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=Nnrprq8cKz+z61aN0ctsSnuccFtU6U8bKDUu7U3f/8M=; b=A8PXzmIWBNgX66+mCK1YxSZ3RII95fLDGiCB/CFApxZjwFimJ5eETWgrnik64FPGRYnSMzis3IPRZNk+jRRlz5mvJVoyxVy6tSbBuj0jOUH4y/B3MDlsBTMLqpl42hOnHLR6lswkwI8JWkLV+1/UnxU9PePewj8HbXB4bb7S3zM= ARC-Authentication-Results: i=2; 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; arc=pass (i=1 dmarc=pass fromdomain=valinux.co.jp); 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 17517256805193.9494217797199553; Sat, 5 Jul 2025 07:28:00 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1034241.1407163 (Exim 4.92) (envelope-from ) id 1uY3rW-0006Dv-3x; Sat, 05 Jul 2025 14:27:30 +0000 Received: by outflank-mailman (output) from mailman id 1034241.1407163; Sat, 05 Jul 2025 14:27:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uY3rV-0006Dl-VJ; Sat, 05 Jul 2025 14:27:29 +0000 Received: by outflank-mailman (input) for mailman id 1034241; Sat, 05 Jul 2025 14:27:28 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uY3rU-00055Q-2R for xen-devel@lists.xenproject.org; Sat, 05 Jul 2025 14:27:28 +0000 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazlp170110002.outbound.protection.outlook.com [2a01:111:f403:c405::2]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 2c603b62-59ac-11f0-a315-13f23c93f187; Sat, 05 Jul 2025 16:27:26 +0200 (CEST) Received: from OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10d::7) by TYWP286MB1974.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:165::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.24; Sat, 5 Jul 2025 14:27:22 +0000 Received: from OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM ([fe80::80f1:db56:4a11:3f7a]) by OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM ([fe80::80f1:db56:4a11:3f7a%5]) with mapi id 15.20.8901.023; Sat, 5 Jul 2025 14:27:22 +0000 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" X-Inumbo-ID: 2c603b62-59ac-11f0-a315-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ys7ouQXjJukv5QFgSsrYD8Rh9azgdrgel6H+KjBChBdstfXDahAUKhthz3az5kTaS8ZfvGJvnX6AR1zhybreIiytN/YAx1yW/UbQwaacDwThjHb0wSjaqYx5LdeeDf8bl/Wq5PPi+PlLM1LnuZ+Zh33/o5y75vPA16kfuc42hnSbuH0H+zYCbzW8YgjA3dO/5FI347MgvKSSJzBmo3DBReJpEx0+okfUGwzHxbpIrVDtduZfzRK1HC1KG9XqhvrVgQtC79ctriVyGL6n/0DKZMkPyr2CabfHu9kcBooO2hUh6RhxO55LQ30ySHxpgSzdnnIon8VNgGxtltkHCP8MMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Nnrprq8cKz+z61aN0ctsSnuccFtU6U8bKDUu7U3f/8M=; b=Z8xwkc6rTSD2/xS5HwJCL7jjZNG6zR980hFIdCclrCk4nZ9YNppg5fZAVW03Q0lxxQiNbad5Th7+tXFUSy4nX+iuks5iPyIvGJw/HwaN1qnNZv52NRLrNhbNxcCDGnHIOONuQQ6nQz/xbp21cahi7hmKTf6dqZW9kSw3FWSpQzBkgwUDe8gnhegmY0+rNrRm2k/2oj+sWse6BQzrqIHQP9gQAM17c5pvrMcyn+W8OyYMPG9gg+l7b0XTM+FICfSJcJQuyE6IdPcq8HVHahNgjzqoUKuW2uyvhp6tjtQYFC3W0LhKU50nX99EX/QM0pLEW201/AekVF4M9WRnXFM/+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Nnrprq8cKz+z61aN0ctsSnuccFtU6U8bKDUu7U3f/8M=; b=ZtUSqfZyS316wF45bG7OmzgtLLiqvZ4ByYUZof+A72gfE7yryuLGSoyBJgaC2kBwKmGcA1sOm7SGTnaJfDh6HWyMGbocy+alhhcARhTao6zK9GRFrtcBeC/8jZZ/ysiDKor4pukusU2QbKXoq+xvWe+18udxhvZv2i+ugMDmO0k= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; From: Koichiro Den To: xen-devel@lists.xenproject.org Cc: Koichiro Den , Anthony PERARD , Juergen Gross , Andrew Cooper , Michal Orzel , Jan Beulich , Julien Grall , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini , Bertrand Marquis , Volodymyr Babchuk Subject: [PATCH v2 5/5] xen/arm: Support ARM standard PV time for domains created via toolstack Date: Sat, 5 Jul 2025 23:27:03 +0900 Message-ID: <20250705142703.2769819-6-den@valinux.co.jp> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250705142703.2769819-1-den@valinux.co.jp> References: <20250705142703.2769819-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0077.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:2b3::9) To OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:10d::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OS3P286MB0979:EE_|TYWP286MB1974:EE_ X-MS-Office365-Filtering-Correlation-Id: 4e0c3ca5-72a8-4c0d-2ec1-08ddbbd00e12 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|10070799003|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?d2kAyN3UUiVqQngOtNUdEtfvxACZeEVJDX8MUwuhX9oBnbPTXF3oxIpXtaOn?= =?us-ascii?Q?SNZF6wLXoX46FiGPxALymdmDszxqKpysi+YbSz1vU4j7L5caFRdx8YIDH4cS?= =?us-ascii?Q?CfomUXtswu5IkUwLalCf+AEyGMu7GbrZW38uVyDs02+FJqzbAGwPMzoFFicj?= =?us-ascii?Q?Q1zeiOgEBnx8OwzLp9i+at9hEsMeOyQ9npCtI6u+IOzfwaNfUCWBMDWNaTEC?= =?us-ascii?Q?u9DKRFFtkRPKc462gFNNifUxJFn+UTzUYCZkZGJo+WrOr+YLM8UVu2QpZMjs?= =?us-ascii?Q?24GwG7kXNdj6lgNT/r1bLQMaejOIHvUzcm/E0MKRSNTjeLyRxsJlXt15EDHj?= =?us-ascii?Q?enMfXQnKEIRrghgSyjYXdCsJuyzjhD9sRRfnMZrl0c9U+zMsH2Yani9sQBrF?= =?us-ascii?Q?87BMBhLzK/31aIX1OLdk6JdzqiF3oUQfyUG2+evoZ/xEzloY8VMl8EvppT+z?= =?us-ascii?Q?703GAi91iqQd/bc6wYNXPUN1wFoJRIPdSQBssIZNCfXJ3r3MVCdWsFjoBi7n?= =?us-ascii?Q?tXiLjGLcIcD4nykm+xDajy3BjEmIRwnhGRvyQ1kcBo97xkU6tZdrRKkM2c7/?= =?us-ascii?Q?5yFC3htN9ercCFCzdTF676b8jSLrh+m4Iycj7XLtheykloSZXxMyhAx2oq3+?= =?us-ascii?Q?ix9ousvLVY+HTrL9UKPfyAbub+7TQNPkxv1+T6HcWZzHeP/JYDHsPQstw9Au?= =?us-ascii?Q?KVZO5/kmvqtqTcxkaY7Wv3fmtd64Mpqi+7nxvRrmIRKrvGJiWwdRplxfwdEg?= =?us-ascii?Q?UZyqeXq2N9RTeO4CnHXrnN24UtTt2y08RAXP84YnZisI/N9WN/vAbcrLQBbb?= =?us-ascii?Q?ZDGdsG4RsWoiHhL6qDbfuriesXb5bqFxKkp7Z6jie0YDy/e/7QSn886N5G+Y?= =?us-ascii?Q?0yKg6ZEj//WvIgHGd52Nyd8SJInhxKkmShYbB4OXn9ZRxipnC8qEbwuH2bj9?= =?us-ascii?Q?4TS5fWDseI4H848TuDNRE5NPpG6wAF4PeGtwi3XOX6exYXIzN1o8II9HLIUh?= =?us-ascii?Q?GXUprhKxbWSKKRWbbJw/7UeGcl2p2he7KRXLheEcTj0R5ZSv4tL6JREg6xdn?= =?us-ascii?Q?hJQ1pT0NVGERv2mIwqbqqntFr4/Nx6NmZswEvycrIAQcZYE5itb618StDcuy?= =?us-ascii?Q?s4Jo3l5PEXSdXH9uLoHwD8nHkDF+9m87Y/qshwGlVtVMB0C9Y1s8UIjI0tP4?= =?us-ascii?Q?21z9BYZ6nTpJpNQKlb/WqowjZ7DN87Vn8moDdXPqbR+qZ9Fugfmy88EJSEZC?= =?us-ascii?Q?GTII6fMfGIsb7pY1ry86kJBhDjf129oOIfC1MMOumrXAgMBsMPFHqGzpwmIY?= =?us-ascii?Q?Mx26bsmprcIGs8MU0tq0kDpNRPNmYEQw7E+pWZ6TyLXxiN4CL/OSY/rjkCZS?= =?us-ascii?Q?G1I05Ee5RlX2TnafSH55wOs8b5FQR36z4bjfqZPJeG6TGGNfiQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(10070799003)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VInN9cuWmqw/hGEJmcHBTZURivVpx3b+12ANScVUCG8i3Z1zvymcAs4WrNB9?= =?us-ascii?Q?2SmAjfuS/CMTcXsE4s6V2Iji3e/tv9lpTusFtCF9fKS0c4YcojempYoP+2d8?= =?us-ascii?Q?1bFpjGASszEJ0Z5qEjfbw1TQvhKWKSONTb+CxaPZ8BWYN7fZl71Xjw3fXNuc?= =?us-ascii?Q?Y6mNHAcNxHBSvmjLuHSfkaD0fTCW4cdmgv931Uy9zYFTOlBO4C7QSC2yRSW/?= =?us-ascii?Q?4u+gcJIcKufL8/3mJc9sJDUirzDnmSqcw/QYsRYhIIXNbI0e9KlaP7d2djCQ?= =?us-ascii?Q?gbx1/O1ko0bX7q/u4rlsUmpYuK0fuKQuMlUjCflrNwoTxS3429xIFRjpxWyj?= =?us-ascii?Q?E0URvcxTIgHDmSdSZQPAEDMo/+qkHkshnAfVUyntl64KIxPXh+gYw3wuRJ4B?= =?us-ascii?Q?IuLhdGiBZY/CQ776n7gCq/UWxgw+maO4Vihd4BiSAGm6bV2KRd9ZXVD31lMS?= =?us-ascii?Q?So3OyBEC0FqxmNTT6ZDDe8948d8TRNL2LE8BD7iDRCETMTu3/vxsNoTdEA0E?= =?us-ascii?Q?T7ftwZoRm+QOSOXtiRUFkF/AcKW8833NzCJmz704PRaEHEksZdtEhU+AYF8x?= =?us-ascii?Q?OIk6b5+eA8/A3itZkEfuFbwobBggSCJivXrqGLNC2P5HpJ5VUFmhFeO/F500?= =?us-ascii?Q?TY9y4+mwEb90xtNQszzz/9X0L+FlZgoipMFw+KNx6LOvnA8Z0T+eS1vFpxaP?= =?us-ascii?Q?4hVWq/lwBn7MjKVTJMmu1uAEEvZJibHJfI1atIDI8EnB1HOPkEFLH2vfwEXF?= =?us-ascii?Q?/qEIJc4D13ibiQBHGNgvYj1zTJ323iNC17fEXId9VRTEkZmxxSfuKmNUHPst?= =?us-ascii?Q?/b2Dk0xhr27rZ5eRZqlf4Ejpw3yK0RFRpS/l4K5vVHB7i41qWOo9fhqRMsdE?= =?us-ascii?Q?ekWIsK8nVMIeDiD/E7onm7wBt+7AV/eL70LCwO7mTnO+n4OSmZySPomvQ7lA?= =?us-ascii?Q?EWMhJUS4JMk9O6A1Rv9XVv3kAKFrIXRhUOLE+cv29F0ebXH4pb4WD1uPy3VL?= =?us-ascii?Q?JzfVnWDUQG0VGMkXt+f5WiV5+JKnuxlNhDk3o4UHb9+le3fzDY5iOm7+Kqpp?= =?us-ascii?Q?OMpkfdFeZCi1Gr/guspcrb2PkQSGt7e8bI1vpIJJ+efDxWTqfkKwSOzkgJHg?= =?us-ascii?Q?C1omkEFutWASUW4vsTSvOp29j0O0Ecl9XAec+xk2Y2kHY1vSGkxC+8W18NNU?= =?us-ascii?Q?IGnNtZGh+yiRCTbF/vcVJf/DOyNJwc/Ndz9bTh5F25kHnIxSNmjVVibUXsIJ?= =?us-ascii?Q?dP2/YVqSqN/WeBlhQ5us3TB9TG/MSYbWDzzKjkMLHv0Ifcj0bGiBlAZPXf4M?= =?us-ascii?Q?Wqz5Iuc0D6vtiV6gjC0TGm/XvZT8dSWzGGq7Lw4cA8BCqgE3k3V9CCOHLIu9?= =?us-ascii?Q?6KcQxNgwtl1Leax/7Iqb1dYLs1dA8inzFYTu2gpiJzlwjDYzTIP08aXnf1o7?= =?us-ascii?Q?HWyx/hr8vJLkRl/Su3A4+Ogv/79a3vCSI7JufWQKrZjTmKlToiZk8/Lzp5bC?= =?us-ascii?Q?QjSk4ACPu+YlqjXpnDsrrTTNZjIesbBsu0P/tHjDwmxhvZ/qS1RXz7eFLwJ8?= =?us-ascii?Q?FD16uwmmfx8KzcFoUJVZMNg3Ht2epAQmsvLWMaZlg3coUYQmvce9yDnBhe4O?= =?us-ascii?Q?ADdWQkJ0NSTLC24C41LvYkk=3D?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 4e0c3ca5-72a8-4c0d-2ec1-08ddbbd00e12 X-MS-Exchange-CrossTenant-AuthSource: OS3P286MB0979.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2025 14:27:22.1140 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OHNhY70+QhFJfRmtUesGYkVPllbh3LVagZW+u3pCZsarITwG+f8cCkMduGGReFH8h0FP0KKhTu+FX3QgxxJhvA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWP286MB1974 X-ZohoMail-DKIM: pass (identity @valinux.co.jp) X-ZM-MESSAGEID: 1751725681560116600 Content-Type: text/plain; charset="utf-8" Implement ARM DEN 0057A PV time support for domains created via the toolstack, utilizing the newly introduced XENMAPSPACE_pv_time. Signed-off-by: Koichiro Den --- tools/libs/light/libxl_arm.c | 185 ++++++++++++++++++++++++++++------- xen/arch/arm/mm.c | 14 +++ xen/include/public/memory.h | 1 + 3 files changed, 167 insertions(+), 33 deletions(-) diff --git a/tools/libs/light/libxl_arm.c b/tools/libs/light/libxl_arm.c index 4a19a8d22bdf..33251520c07a 100644 --- a/tools/libs/light/libxl_arm.c +++ b/tools/libs/light/libxl_arm.c @@ -684,6 +684,40 @@ static int make_memory_nodes(libxl__gc *gc, void *fdt, return 0; } =20 +static int make_resv_memory_node(libxl__gc *gc, void *fdt, + const struct xc_dom_image *dom) +{ + int res; + + if (strcmp(dom->guest_type, "xen-3.0-aarch64")) + /* + * The stolen time shared memory region for ARM DEN 0057A is curre= ntly + * the only user of /reserved-memory node when a domain is created= via + * the toolstack, and it requires both the hypervisor and the doma= in to + * be AArch64. + */ + return 0; + + res =3D fdt_begin_node(fdt, "reserved-memory"); + if (res) return res; + + res =3D fdt_property_cell(fdt, "#address-cells", GUEST_ROOT_ADDRESS_CE= LLS); + if (res) return res; + + res =3D fdt_property_cell(fdt, "#size-cells", GUEST_ROOT_SIZE_CELLS); + if (res) return res; + + /* reg 0 is a placeholder for PV time region */ + res =3D fdt_property_reg_placeholder(gc, fdt, GUEST_ROOT_ADDRESS_CELLS, + GUEST_ROOT_SIZE_CELLS, 1); + if (res) return res; + + res =3D fdt_end_node(fdt); + if (res) return res; + + return 0; +} + static int make_gicv2_node(libxl__gc *gc, void *fdt, uint64_t gicd_base, uint64_t gicd_size, uint64_t gicc_base, uint64_t gicc_size) @@ -1352,6 +1386,7 @@ next_resize: FDT( make_psci_node(gc, fdt) ); =20 FDT( make_memory_nodes(gc, fdt, dom) ); + FDT( make_resv_memory_node(gc, fdt, dom) ); =20 switch (info->arch_arm.gic_version) { case LIBXL_GIC_VERSION_V2: @@ -1519,6 +1554,9 @@ static void finalise_one_node(libxl__gc *gc, void *fd= t, const char *uname, =20 #define EXT_REGION_MIN_SIZE xen_mk_ullong(0x0004000000) /* 64MB */ =20 +/* As per ARM DEN 0057A, stolen time memory regions are 64-byte aligned */ +#define PV_REGIONS_PER_PAGE (XC_PAGE_SIZE / 64) + static int compare_iomem(const void *a, const void *b) { const libxl_iomem_range *x =3D a, *y =3D b; @@ -1530,24 +1568,92 @@ static int compare_iomem(const void *a, const void = *b) return 0; } =20 -static int finalize_hypervisor_node(libxl__gc *gc, - libxl_domain_build_info *b_info, - struct xc_dom_image *dom) +static int get_pv_region(libxl_domain_build_info *b_info, + struct xc_dom_image *dom, + uint64_t *start, uint64_t end, + uint64_t *region_base, uint64_t *region_size) +{ + unsigned int npages =3D DIV_ROUNDUP(b_info->max_vcpus, PV_REGIONS_PER_= PAGE); + unsigned int len =3D npages * XC_PAGE_SIZE; + uint32_t domid =3D dom->guest_domid; + xc_interface *xch =3D dom->xch; + unsigned long idx =3D 0; + uint64_t size; + int rc; + + if (*start >=3D end) + return -1; + size =3D end - *start; + if (size < len) + return -1; + + for (; npages; npages--, idx++) { + rc =3D xc_domain_add_to_physmap(xch, domid, XENMAPSPACE_pv_time, i= dx, + (*start >> XC_PAGE_SHIFT) + idx); + if (rc) + return rc; + } + + region_base[0] =3D *start; + region_size[0] =3D len; + *start +=3D len; + return 0; +} + +static void get_ext_region(uint64_t start, uint64_t end, uint64_t *region_= base, + uint64_t *region_size, unsigned int *nr_regions) +{ + uint64_t size; + + start =3D ALIGN_UP_TO_2MB(start); + if (start >=3D end) + return; + + size =3D end - start; + if (size < EXT_REGION_MIN_SIZE) + return; + + region_base[*nr_regions] =3D start; + region_size[*nr_regions] =3D size; + (*nr_regions)++; +} + +static int finalize_extra_regions(libxl__gc *gc, + libxl_domain_build_info *b_info, + struct xc_dom_image *dom) { void *fdt =3D dom->devicetree_blob; - uint64_t region_base[MAX_NR_EXT_REGIONS], region_size[MAX_NR_EXT_REGIO= NS]; - uint32_t regs[(GUEST_ROOT_ADDRESS_CELLS + GUEST_ROOT_SIZE_CELLS) * + + /* For extended regions */ + uint64_t ext_region_base[MAX_NR_EXT_REGIONS], ext_region_size[MAX_NR_E= XT_REGIONS]; + uint32_t ext_regs[(GUEST_ROOT_ADDRESS_CELLS + GUEST_ROOT_SIZE_CELLS) * (MAX_NR_EXT_REGIONS + 1)]; - be32 *cells =3D ®s[0]; + be32 *ext_cells =3D &ext_regs[0]; + int hyp_offset; + + /* For pv regions */ + uint64_t pv_region_base[1], pv_region_size[1]; + uint32_t pv_regs[GUEST_ROOT_ADDRESS_CELLS + GUEST_ROOT_SIZE_CELLS]; + be32 *pv_cells =3D &pv_regs[0]; + int resv_offset; + const uint64_t bankbase[] =3D GUEST_RAM_BANK_BASES; const uint64_t banksize[] =3D GUEST_RAM_BANK_SIZES; unsigned int i, j, len, nr_regions =3D 0; + bool pv_region_pending =3D true; libxl_dominfo info; - int offset, rc; + int rc; =20 - offset =3D fdt_path_offset(fdt, "/hypervisor"); - if (offset < 0) - return offset; + resv_offset =3D fdt_path_offset(fdt, "/reserved-memory"); + if (!strcmp(dom->guest_type, "xen-3.0-aarch64")) { + if (resv_offset < 0) + return resv_offset; + } else + pv_region_pending =3D false; + + hyp_offset =3D fdt_path_offset(fdt, "/hypervisor"); + if (hyp_offset < 0) + return hyp_offset; =20 rc =3D libxl_domain_info(CTX, &info, dom->guest_domid); if (rc) @@ -1572,8 +1678,7 @@ static int finalize_hypervisor_node(libxl__gc *gc, } unallocated; uint64_t unallocated_size =3D 0; =20 - unallocated.start =3D bankbase[i] + - ALIGN_UP_TO_2MB((uint64_t)dom->rambank_size[i] << XC_PAGE_SHIF= T); + unallocated.start =3D bankbase[i] + ((uint64_t)dom->rambank_size[i= ] << XC_PAGE_SHIFT); =20 unallocated.end =3D ~0ULL >> (64 - info.gpaddr_bits); unallocated.end =3D min(unallocated.end, bankbase[i] + banksize[i]= - 1); @@ -1581,7 +1686,7 @@ static int finalize_hypervisor_node(libxl__gc *gc, if (unallocated.end >=3D unallocated.start) unallocated_size =3D unallocated.end - unallocated.start + 1; =20 - if (unallocated_size < EXT_REGION_MIN_SIZE) + if (unallocated_size <=3D 0) continue; =20 /* Exclude iomem */ @@ -1605,14 +1710,14 @@ static int finalize_hypervisor_node(libxl__gc *gc, if (unallocated.start > unallocated.end) break; } else { - uint64_t size =3D iomem.start - unallocated.start; - - if (size >=3D EXT_REGION_MIN_SIZE) { - region_base[nr_regions] =3D unallocated.start; - region_size[nr_regions] =3D size; - nr_regions++; + if (pv_region_pending) { + rc =3D get_pv_region(b_info, dom, &unallocated.sta= rt, iomem.start, + pv_region_base, pv_region_size); + if (!rc) + pv_region_pending =3D false; } - + get_ext_region(unallocated.start, iomem.start, ext_reg= ion_base, + ext_region_size, &nr_regions); unallocated.start =3D iomem.end + 1; =20 if (unallocated.start > unallocated.end) @@ -1624,38 +1729,52 @@ static int finalize_hypervisor_node(libxl__gc *gc, if (unallocated.end >=3D unallocated.start && nr_regions < MAX_NR_EXT_REGIONS) { - uint64_t size =3D unallocated.end - unallocated.start + 1; - - if (size >=3D EXT_REGION_MIN_SIZE) { - region_base[nr_regions] =3D unallocated.start; - region_size[nr_regions] =3D size; - nr_regions++; + if (pv_region_pending) { + rc =3D get_pv_region(b_info, dom, &unallocated.start, unal= located.end, + pv_region_base, pv_region_size); + if (!rc) + pv_region_pending =3D false; } + get_ext_region(unallocated.start, unallocated.end, ext_region_= base, + ext_region_size, &nr_regions); } } =20 + if (!strcmp(dom->guest_type, "xen-3.0-aarch64")) { + if (pv_region_pending) { + LOG(ERROR, "The PV time region cannot be allocated, not enough= space"); + return ERROR_FAIL; + } + set_range(&pv_cells, GUEST_ROOT_ADDRESS_CELLS, GUEST_ROOT_SIZE_CEL= LS, + pv_region_base[0], pv_region_size[0]); + len =3D sizeof(pv_regs[0]) * (GUEST_ROOT_ADDRESS_CELLS + GUEST_ROO= T_SIZE_CELLS); + rc =3D fdt_setprop(fdt, resv_offset, "reg", pv_regs, len); + if (rc) + return rc; + } + /* * The region 0 for grant table space must be always present. If we ma= naged * to allocate the extended regions then insert them as regions 1...N. */ - set_range(&cells, GUEST_ROOT_ADDRESS_CELLS, GUEST_ROOT_SIZE_CELLS, + set_range(&ext_cells, GUEST_ROOT_ADDRESS_CELLS, GUEST_ROOT_SIZE_CELLS, GUEST_GNTTAB_BASE, GUEST_GNTTAB_SIZE); =20 for (i =3D 0; i < nr_regions; i++) { LOG(DEBUG, "Extended region %u: %#"PRIx64"->%#"PRIx64"", - i, region_base[i], region_base[i] + region_size[i] - 1); + i, ext_region_base[i], ext_region_base[i] + ext_region_size[i]= - 1); =20 - set_range(&cells, GUEST_ROOT_ADDRESS_CELLS, GUEST_ROOT_SIZE_CELLS, - region_base[i], region_size[i]); + set_range(&ext_cells, GUEST_ROOT_ADDRESS_CELLS, GUEST_ROOT_SIZE_CE= LLS, + ext_region_base[i], ext_region_size[i]); } =20 if (!nr_regions) LOG(WARN, "The extended regions cannot be allocated, not enough sp= ace"); =20 - len =3D sizeof(regs[0]) * (GUEST_ROOT_ADDRESS_CELLS + GUEST_ROOT_SIZE_= CELLS) * + len =3D sizeof(ext_regs[0]) * (GUEST_ROOT_ADDRESS_CELLS + GUEST_ROOT_S= IZE_CELLS) * (nr_regions + 1); =20 - return fdt_setprop(fdt, offset, "reg", regs, len); + return fdt_setprop(fdt, hyp_offset, "reg", ext_regs, len); } =20 int libxl__arch_domain_finalise_hw_description(libxl__gc *gc, @@ -1698,7 +1817,7 @@ int libxl__arch_domain_finalise_hw_description(libxl_= _gc *gc, =20 } =20 - res =3D finalize_hypervisor_node(gc, &d_config->b_info, dom); + res =3D finalize_extra_regions(gc, &d_config->b_info, dom); if (res) return res; =20 diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c index 0613c1916936..4741472ea1a0 100644 --- a/xen/arch/arm/mm.c +++ b/xen/arch/arm/mm.c @@ -180,7 +180,21 @@ int xenmem_add_to_physmap_one( case XENMAPSPACE_dev_mmio: rc =3D map_dev_mmio_page(d, gfn, _mfn(idx)); return rc; + case XENMAPSPACE_pv_time: +#ifdef CONFIG_ARM_64 + ASSERT(IS_POWER_OF_TWO(sizeof(struct pv_time_region))); + if ( idx >=3D DIV_ROUND_UP(d->max_vcpus * sizeof(struct pv_time_re= gion), + PAGE_SIZE) ) + return -EINVAL; + + if ( idx =3D=3D 0 ) + d->arch.pv_time_regions_gfn =3D gfn; =20 + mfn =3D virt_to_mfn(d->arch.pv_time_regions[idx]); + t =3D p2m_ram_ro; + + break; +#endif default: return -ENOSYS; } diff --git a/xen/include/public/memory.h b/xen/include/public/memory.h index bd9fc37b5297..4daa703e882e 100644 --- a/xen/include/public/memory.h +++ b/xen/include/public/memory.h @@ -217,6 +217,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_machphys_mapping_t); Stage-2 using the Normal Memory Inner/Outer Write-Back Cacheable memory attribute. */ +#define XENMAPSPACE_pv_time 6 /* PV time shared region (ARM64 only) */ /* ` } */ =20 /* --=20 2.48.1