From nobody Mon Jun 8 05:26:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1780328663; cv=pass; d=zohomail.com; s=zohoarc; b=E//6dsqvIwOAePRphHXHHyc/WdzmQkcocsKTY1deKiydbxyl06sxufGKsWqoIL7CaMM5oSSn4wzw9prbDKI0KhrhLkPLzGZWl4NIraaY2SlrxzOT9Gc2+kM09PchMGtPr/Wj2zBk+shWYvC/7007H5IL95ZkfixDmNkrfc+Aeok= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780328663; 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=KJiuXMMscL2qAt2KmefTcdcHnstFqJ03M2qXGArT7Uk=; b=FaGZHvjAknccJTwVjgfsulYjRrUc66FQyz5tdZk2W2Of4H+FyLQgz6LbVbUeL7KKllQ526/rJ0M0F4nopMkN1O0/c2WU4yGbvjnP1imuVWJTRiQgff3iz1ZjUZmjbcwPxMnmCAZ+9zRUqgtLNc242tCjTSxG1QIqfRBjMeqqmA0= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1780328662974867.3266596964352; Mon, 1 Jun 2026 08:44:22 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1323938.1589608 (Exim 4.92) (envelope-from ) id 1wU4oB-00069n-IZ; Mon, 01 Jun 2026 15:44:07 +0000 Received: by outflank-mailman (output) from mailman id 1323938.1589608; Mon, 01 Jun 2026 15:44:07 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wU4oB-00069g-Fq; Mon, 01 Jun 2026 15:44:07 +0000 Received: by outflank-mailman (input) for mailman id 1323938; Mon, 01 Jun 2026 15:44:06 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wU4oA-0005wG-D4 for xen-devel@lists.xenproject.org; Mon, 01 Jun 2026 15:44:06 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wU4o9-00BHZZ-Pw for xen-devel@lists.xenproject.org; Mon, 01 Jun 2026 17:44:05 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a1da8b4-e002-0a2a0a5209dd-0a2a45039e8a-26 for ; Mon, 01 Jun 2026 17:44:05 +0200 Received: from [52.101.48.33] (helo=MW6PR02CU001.outbound.protection.outlook.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a1da8c2-672d-0a2a45030019-34653021f83b-4 for ; Mon, 01 Jun 2026 17:44:05 +0200 Received: from CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) by BN8PR03MB5027.namprd03.prod.outlook.com (2603:10b6:408:db::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.16; Mon, 1 Jun 2026 15:44:02 +0000 Received: from CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343]) by CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343%4]) with mapi id 15.21.0071.014; Mon, 1 Jun 2026 15:44:02 +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" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UJRxiocj+TlC4CWOBdW165TItmQQJW8tEtYXelCOkdmayfubfXIR9pjw6srSfYhXZY+Ucpa0mAFblVkn1/gWR7z9odXEZX6MxSoEi1KBMVFAVSvpZABlgaXmmBz2y/Ty5EYSPAutmuE39514T4/qiIuhukAVUe0M0c55wKpcLkpYooOcmvwpK9uJA/BEOgS9NVYvgPPtqmXYPOxZwxlvEMJgez4Gp0FAdsiCveqUlVOGXyuhE3eQgcwgsjwFyL7K75xswzr5PMokQZAZ2yjlYtcYpMRXoor5oTaraKRdModAM1YO09yDcikLOcMixQd+0nhwWaX8MNQjiK9KpGMIWA== 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=KJiuXMMscL2qAt2KmefTcdcHnstFqJ03M2qXGArT7Uk=; b=xz91eQa7gOiTJYzOGJFijv/ql9dpNwbx8x/m3+yjvqCgodiR7RXSdCucr5VvRFjYgfsPlbyIxavsJg5iqFC+XYOWMPPjIhtykL9FBIt5N8ODXF4KJCvlkcGma9MWcGTp9kP1W+iCMnuhMbGnnnCJ/ZRTxv/TgZsvZG2MxqMJjJIBfUodQtixN5WQHhEYhrCvT2n5bCC62O0/QVTfBNdYMKRyuLonuoIO1xcgVLpIwUrj0cnzWGo4jZMUW0j7CTDzy8KmelVqhxtBq3YVAUsGvYTjwGqH8789Ro+pJePlkkfXguimn9y4Ugb1GqsIbjgN6uA5asN22c9ytmIvVbcpyg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KJiuXMMscL2qAt2KmefTcdcHnstFqJ03M2qXGArT7Uk=; b=cCu47ZrGQUzGxAG1/3IGWffmwyezpA2oeyN0z8NH8fuXRjs1FGDY6AvfilOUrSAhk883fPU3yq4n/AhVG1rPo+RLj0aO2Pt3HUTorFtCx4OEMevyaQm4r0l1q6pH8QVjBk6J8rlF6pm5h2lJygLpdZYJ8K72X4S+rdVeqOmXVP4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Roger Pau Monne To: xen-devel@lists.xenproject.org Cc: Oleksii Kurochko , Roger Pau Monne , Anthony PERARD , Juergen Gross Subject: [PATCH for-4.22 1/5] tools/bitops: adjust bitmap_or() interface to match hypervisor Date: Mon, 1 Jun 2026 17:43:28 +0200 Message-ID: <20260601154332.30797-2-roger.pau@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260601154332.30797-1-roger.pau@citrix.com> References: <20260601154332.30797-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN0PR03CA0010.namprd03.prod.outlook.com (2603:10b6:408:e6::15) To CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH7PR03MB7860:EE_|BN8PR03MB5027:EE_ X-MS-Office365-Filtering-Correlation-Id: c3bfa199-a53a-466c-2a32-08debff49a85 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024|56012099006|11063799006|6133799003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: ToBt4iOHUwmb0ZgkGkSwD792SmSbfhjzVa93/4CeqOIJ60nJikebeC5QA5MBhT9ydM3ouNvn9HYY3h8h15VcSEUnqloPfCBq8bMg3iDZvXOr60lh1OOSQHXWnqUsaQb5ZY4vXDX2/eBvB5L1/lKF4r9b4rdr/4ulGjiY+L7WA9kYGQlODmwqF++sVE4waF/bRDP+zanPT2IcV4GAEhYKmpDqRZvuiMgjhVz0Fxid6g3W+kBEfQ6AZ4P6a4Pl9LNbTi5cK8h2wF7y0rR3X2kGP0AyIe1ew7/GjRIHQH2xVYxPb4CIpme21I0OFhCAy6bUROWN2M37iDMi1bwbdQYCTL992RNa8vOL/ETg2PTyWuntovtzTznnL+rj9BGWq4R2DIpXyRh8xJ99um6qX/HAfZodKjJjfy7gFIRi6U3tTj4oSP3lbNuAovmcvGNAOkbJUs5orchm67q3K30Ya5YxLq/QSHHJ53aLFdr4gS9g5rGa/2jHxFXQCFAdfAffbXOpq+lvQzrR7pX+10Pu8FBS3kYXXm40vg3udi698HF1ucx+Dm3mwEzHorWXbwm9X0CP9F95EP2Ivi63dkBiqpGffozA3I/2Wy6imIZslv8wqORAq7zdBYKbSP2B0cesRiQhSLorHqyFPUbp3/p+AsEGvA9NNvZyjXRn/WX/GCbx+yyfq/Z5zfe6Qbt/73QByPF0 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH7PR03MB7860.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(56012099006)(11063799006)(6133799003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cmpTK3NkVkdVY3NxWG12ZG01Qlp4M0tIZFl3TXliOW00M3VaV20xUW10eE1a?= =?utf-8?B?ZUhqdGhsWWlYbU80aHM3Tk1rOWJBSWRZREtaVzhtZWpSd2hjYUN1RFNDN1R6?= =?utf-8?B?SFJoSXJVZTBpZEhIYlZ0WW9aSUxkdkhVcjJHOThDSXMwUnhWVU1HZUIvN1JU?= =?utf-8?B?UU1HTmhaS05McC9kTHFSOWN3YjIwK3RQcTNvR3dxWFJjYi8ydU9FWEptQ2xB?= =?utf-8?B?YmkrUWN0alduNW5ILzZ1aDJaMUVVU0NGZXlaYUx1eEIyTmVJTGJoZGlDaXNy?= =?utf-8?B?V3dMb3U0VzhDc1N6YXdYQlpUVVpjOXpGQUNGeFdFVnlpcDVoRm1vOHUrRWVY?= =?utf-8?B?WmRRZjB4RXFZTE4yNkJPcE82SUxuQ0tsWjBqSFZHOXM4QlNDVUxuZGlMb1ZV?= =?utf-8?B?RHZ4ZDVUcDAvRC9xL2gyTEFocDRKUTg3eGo1Y2VDQW52RUZEZmJGQlliWjVS?= =?utf-8?B?R2ZXdG4wcHRRZHJBeVhtUUErTTlISkdiK1RGaDRHRi9MYU9YT0N2L3YxWlNO?= =?utf-8?B?T2pwL1RBT2lTRC8vaHlSQnpZWlFuNWh4U1FPSHBpRG96RHhaVHluMWVVejNP?= =?utf-8?B?L3lUbU9PYXhRRU8weTRFUGR5L0xwUndrd2pHYVJXNWNRK0d2TzFOYU92elJ1?= =?utf-8?B?NmFibmkyajRvY05SeXBtQ01nems5OHdoT2VDR05HNDhINzhnRFU2eGU2dkow?= =?utf-8?B?NkhhNStaYUk3OEdJQXZEa20zVWJDR1RjNzJSdzdnWW1FcmdIL0Y4Q09odHVP?= =?utf-8?B?bzhaRlBVd2xsblU2bHVwYU53aVR0bHI1R2Q2ZGRhR0Fpc2g4aXU3eE5oeG01?= =?utf-8?B?ZkRacWRLYi9hRFI2UCt1RWxpLzh1RHAzRTlRZjBtbEhpcTFycEZzdy9LQnEv?= =?utf-8?B?MTZyQStRbE9RZ1VkQVRDbEJEUVp2WHYxS25qTzh0ejdqVXU2RDZWWHlRWTBM?= =?utf-8?B?aHBEcDFOSW5xODMvQ0ZyeSs1L0YxUjBQUXZYLzdXcmdUQXptTWhCZVBLNThn?= =?utf-8?B?WG9ZMHdDZjRLUXIwZWVJdncrNlU3VGVOdklNdDJ1WmJqcnQvYkdGNDN6TGZY?= =?utf-8?B?L1BpdWdMcTkyNzJ0QlVVUjBua2M4Y3lKbjB3QnFZbkZrbjhCRC8ra0ZkUlNF?= =?utf-8?B?L0EvcHc2N2xvUkRyLy90eDNQbDBsVEpRbk12YUM5MjF0S3p6VVdLN1ZlWnQv?= =?utf-8?B?WFRxRXBBbjYyZGtjMUdGTHpzbmREaHhHZ3ppRG5qL0dvRzJtNTVmc1FxVkNH?= =?utf-8?B?YWdaek1qUlhqdDM1Smh6WWkwMTJRbytBOGQ2TkdhdzlqSEY3SGswZkV2K016?= =?utf-8?B?RFoxb0hZb2JVL08ycWV6Nk5HQUdSQTM0QkZzV1lRNkg5NE0wcFVZelhhSDBm?= =?utf-8?B?cERudEE5bkU3c0RTb09ZaTdwbFVsWnZuQlhCQ0RWQ2xPR1R1RHZ3SjZJOEgy?= =?utf-8?B?Zll4cytiTnRybU5uT3l3bkFJSTJOZlpKaHFsVmhmMUFqdlNOSEF0bXlzNU5X?= =?utf-8?B?QTJMeFBpeVBDYW12bkFpZ3BMZE00b1JZUXRMUmRkbVVHSlJONEt1bHNYQUZq?= =?utf-8?B?YVZQcHJweGRtVVdOVzZEVkltaGdNdjJqUHJNMm1UWjdzOUZwVWtBbVhZcXVK?= =?utf-8?B?RW85a2NZdldyRzZKbVE2S1p6bDBHdFlhVXBVckc4Y1JxUENqYUpsMG5rOGRD?= =?utf-8?B?MUFRUzZOb2hCVXhaaFo4bGs3c1BDdGh5WnhDbCtlKzZTWUloeW12U2xUeWFj?= =?utf-8?B?amFXU1VKd0duanNEbjIrZk9VTDU2dUdoMGpHSUMrbE5VRUZnN0ppdndEdm1q?= =?utf-8?B?cUp1WTNVT2Q0M0Z2VHZWVXppNGxmRUhZdDBuV0FpMUV0UElsbGJPOWVVOU4r?= =?utf-8?B?MUxHN0dwKzJqUjVIZkpNQ2JiZVQ4Tkl2V2tLb2dtbDFRQ3B3Unh5ZWJwN0Zy?= =?utf-8?B?Q0pMYnpmSGttY2V6eXo5WS9MYXJ6SkFvMy9pRTRmRGY4QTlEQUEyb0pFRGpH?= =?utf-8?B?dGk2K1cxQ0RKR1JhTmhjZVppN0ZEeUNuWmdnbkdpb1ArSk9aN2RRVFQ2K3JZ?= =?utf-8?B?RUF5Q3ZqVzFiYnFEVWtQdmZkQlUvcEZKV09rS3U2aTF3SllWbzNoYm1sTGtQ?= =?utf-8?B?ZmM3bkV3L0dTSXo2SGt5dGdXNUI1N1RaVGNqVDFHUlRiYmpBbWlVM3daRWtN?= =?utf-8?B?OXEwZjNweUd5UTNvWUZuOU0xQUNZZW16TWV6US9LMXREWUFCNlJXd1p5REpr?= =?utf-8?B?MllCOHRFZTB1cXZZZENYaVB6Z2NqYTJ5WmxBQ1lWYk8zcXN6eGNySlpiNjlk?= =?utf-8?B?RHFnbWlqeWZ5SHoxZXNZeHZiYWhnWXUxcSt4VmZ1dWFWOFV4UWtFQT09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: c3bfa199-a53a-466c-2a32-08debff49a85 X-MS-Exchange-CrossTenant-AuthSource: CH7PR03MB7860.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jun 2026 15:44:02.0329 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mdyW8Ez4iA2WvKxjudPDZUFmhwyJ86JEJEnSevBbUhxfuYQwEjZq9T6XITaT3u0Kp5RImQjJh+oM0xhAeo5zGA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR03MB5027 X-purgate-ID: tlsNG-33051d/1780328645-39171938-979D7DAF/0/0 X-purgate-type: clean X-purgate-size: 1879 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1780328663338158500 Adjust the only toolstack caller to use the new interface. No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 Acked-by: Anthony PERARD --- I'm tempted to rewrite bitmap_or() to use unsigned long (just like the hypervisor side), but that's outside the scope of this change. --- tools/include/xen-tools/bitops.h | 7 ++++--- tools/libs/guest/xg_sr_save.c | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/include/xen-tools/bitops.h b/tools/include/xen-tools/bit= ops.h index 3b98fba6d74c..29587e89fa6d 100644 --- a/tools/include/xen-tools/bitops.h +++ b/tools/include/xen-tools/bitops.h @@ -81,14 +81,15 @@ static inline int test_and_set_bit(unsigned long nr, vo= id *addr) return oldbit; } =20 -static inline void bitmap_or(void *_dst, const void *_other, +static inline void bitmap_or(void *_dst, const void *_src1, const void *_s= rc2, unsigned long nr_bits) { char *dst =3D _dst; - const char *other =3D _other; + const char *src1 =3D _src1, *src2 =3D _src2; unsigned long i; + for ( i =3D 0; i < bitmap_size(nr_bits); ++i ) - dst[i] |=3D other[i]; + dst[i] =3D src1[i] | src2[i]; } =20 #endif /* __XEN_TOOLS_BITOPS_H__ */ diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c index 3b2c5222e429..fdbceab52e46 100644 --- a/tools/libs/guest/xg_sr_save.c +++ b/tools/libs/guest/xg_sr_save.c @@ -668,7 +668,8 @@ static int suspend_and_send_dirty(struct xc_sr_context = *ctx) else xc_set_progress_prefix(xch, "Checkpointed save"); =20 - bitmap_or(dirty_bitmap, ctx->save.deferred_pages, ctx->save.p2m_size); + bitmap_or(dirty_bitmap, dirty_bitmap, ctx->save.deferred_pages, + ctx->save.p2m_size); =20 if ( !ctx->save.live && ctx->stream_type =3D=3D XC_STREAM_COLO ) { --=20 2.53.0 From nobody Mon Jun 8 05:26:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1780328671; cv=pass; d=zohomail.com; s=zohoarc; b=avRV1B/8g0o5ejlRDNXVd2b+SXqVlHbtyfTAgZOm5Yk7dgms3RdgR4XFpuqoEmSz383euBmkVTTuoPjpb84rvY4Ffl4EfXQxYQKSzKores0PwjrED2JqMPbqw0tRvul5QCYeS0Ks0IPnSSNr85Y2QK0bd2mZ4QAxDL6CkfssLko= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780328671; 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=Rz97qywwJLfTsLwGTN3c/x5dL1I1CWkX0dn7p+InnZs=; b=Z9mMsE7889IVTnQHcEi/C7osfOAI5VyMTI+ZqlB3oYn8iZUR6zXm066Qp+5lbHt91gx9r5isIzjn6L7KOpfxojm1EaRwLDV6wLXgK/L6rs+pe09WOdHYv7EFbalsufUltzw06wYXOJd9sailA5aEaJe6ndb/4Ch/2U4B3tIDf+U= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 178032867156220.355992309946828; Mon, 1 Jun 2026 08:44:31 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1323939.1589617 (Exim 4.92) (envelope-from ) id 1wU4oF-0006Q6-3P; Mon, 01 Jun 2026 15:44:11 +0000 Received: by outflank-mailman (output) from mailman id 1323939.1589617; Mon, 01 Jun 2026 15:44:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wU4oE-0006Pu-Vl; Mon, 01 Jun 2026 15:44:10 +0000 Received: by outflank-mailman (input) for mailman id 1323939; Mon, 01 Jun 2026 15:44:10 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wU4oE-0006P3-Aj for xen-devel@lists.xenproject.org; Mon, 01 Jun 2026 15:44:10 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wU4oD-00BHey-Nr for xen-devel@lists.xenproject.org; Mon, 01 Jun 2026 17:44:09 +0200 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a1da8c8-e002-0a2a0a5209dd-0a2a4505dc48-4 for ; Mon, 01 Jun 2026 17:44:09 +0200 Received: from [40.93.198.34] (helo=CY7PR03CU001.outbound.protection.outlook.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a1da8c7-aaa8-0a2a45050019-285dc622e7f9-3 for ; Mon, 01 Jun 2026 17:44:09 +0200 Received: from CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) by BN8PR03MB5027.namprd03.prod.outlook.com (2603:10b6:408:db::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.16; Mon, 1 Jun 2026 15:44:05 +0000 Received: from CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343]) by CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343%4]) with mapi id 15.21.0071.014; Mon, 1 Jun 2026 15:44:05 +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" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pEp7C70pj+Jz+Hcs9cXrk9OuxDKbk117A4/OaTRt2vTDQmeQ250y/Xf5iZA5ZkgPbwb2j+BlJ4CFGS/l9YH75CGL4Co/tONN4QLXH7x38Pg2tKTHYkS2DVhYCZKZvmmkb99y3NtE52fJEIQj5PXcQKppaaSJa/MZb6AnpwDwIx7qXZZZpFVe1WNdG08fHtSmaFgIn1H3xvuUNvT/dOZ6n0DyIaR6Bte1mMZQ0g2QksKmDYJthkBTpZllSOaBF8XWxiMXzYiorEarCY6Y0IQCuQv3MzXvMfe0zwR55O+qfY+DkdYrGRKSMqsqkqYP5QimJmvv4YdAgDBFtepfGsAxAA== 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=Rz97qywwJLfTsLwGTN3c/x5dL1I1CWkX0dn7p+InnZs=; b=Y4n6j1P96/M/7S6Q7YbyPj1Q2DbG6wh0kazIXYPIIvxOH+cDOLhuI+Q9QCTRBRVbq5qnkNRXzfezhl4jdCwjdLVjrfMb24993bORt+QQulTBFnn1mDlZqf7LTrukwnARNbXAVe8YnBNat7AjZGOs6gIopzuyEaOqbrbgwiJwjc065r1d92pbetCBwjSXf25FDL+WWFZ80sEMgExEz5kFwp8JYm4B188Z27sRvtg1VfllTwQTqJyzPcT5Xfq9cTQ7X0bB307/+yCjCbP0Q/v2Ar5mZWwEmN6tppccHaXyX0/Ogutpl5MbgadLNvzFr33/nICFaQRZ7nfjWBQKWqemxg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Rz97qywwJLfTsLwGTN3c/x5dL1I1CWkX0dn7p+InnZs=; b=AMBzBG0NKXBe0azjNHV7tpab+03DCrRik5PJK1h+0BSc1znw2jlTvFFrOu04lKvFs/LULawqLSJM9O381bHqp7H5O50bd6fiAKMrSp09UiUf0fp7/j3Dgz3WR2ctQIyHb0YgCnQREeZjf7dtZcledVsmUoCwxVoRZDQ6FuPpkXY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Roger Pau Monne To: xen-devel@lists.xenproject.org Cc: Oleksii Kurochko , Roger Pau Monne , Anthony PERARD , Juergen Gross , Christian Lindig , David Scott , Julien Grall Subject: [PATCH for-4.22 2/5] tools/macros: adjust ROUNDUP() interface to match hypervisor Date: Mon, 1 Jun 2026 17:43:29 +0200 Message-ID: <20260601154332.30797-3-roger.pau@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260601154332.30797-1-roger.pau@citrix.com> References: <20260601154332.30797-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0098.namprd03.prod.outlook.com (2603:10b6:408:fd::13) To CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH7PR03MB7860:EE_|BN8PR03MB5027:EE_ X-MS-Office365-Filtering-Correlation-Id: b0dee85a-29ac-41c2-8d85-08debff49c8d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024|56012099006|11063799006|6133799003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: CenyeQSKmY6qwazr0Nx5POgYu28gTHmSEznHbqU8yvlA6qfppvqTHdywbzBgZLVSirwx8whRIImvoUh7ngbuh4Fb7+t7hubYtZZJDShjGcDOhHsx583eS7MceudMgvipIhiCBP3hGTzNekJji5uvDP5Rd8N00EzBaLthDYdU9b+4JSccXRMGhlr8Uh/YqWRgo3ePIsmiymRBmTTER8syHWj/1W35HobIGCUanPbfPAjPeWvAfEs1FdggvWyEYQh9jeQbEh+7NbI0AG7xF1vkizmHGw0pY7Dh67QV0QOx0BJzlkaYZa0Q4s9u0F6rqd4WbEqYtGf3lb30X+rRyQ+EEeVroYWilcjMglIDgpoVakcKXg2t9gneKhz3+OQbwVAOEp/X9lw2kvtzNYrEjuXD8OulrtLsCcRI/HiNcFn6RD2IdUHAPVhqTDCqMrIufRZH4uUS1vHsSACdZgArEsYtjXFYc9Gz32W/W0cNxyiJTpGhXBOzqdGGenkh1eflAOzml0qLjGbf2Az8nA44mZ0C6J+wTHXRhtyYm93DGOEHkf8RuqqGtAV/ON//aY4pg0+sg56QP7rojSd4rUDKRZLN/6jtnXHaUrMoxYFEMjF49L+7K8VuWFfXL/o1ExDMi/u7TFYe5zqkOMZcELQcoAYso7uLPSXRL5SstiVbAAGiW2611lKapzaRL/tL1WE4GKX6 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH7PR03MB7860.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(56012099006)(11063799006)(6133799003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cWQ4dXozckJvVEJCUjl1cGdxbUZ4T1FsSmtGVlVlbmNOSU1zTmVRWmFpZXVN?= =?utf-8?B?RjdrZmdNeXVrK05veVpaS3J4TVcyU3B1QXBlNlI3bGtVMUZJd20zVjFobGV1?= =?utf-8?B?WFJOL200V2tUNjgzUSt5eWhWcDJjT2o0OHJJSVVXRTc4TWplR0JrUkxEb0lL?= =?utf-8?B?Y0ZYa1Fta2R0WUd5dWJOTGhjK1gvTTBha3AyTjQwYnJFdUtITTErRUR1UjdE?= =?utf-8?B?c2JzRWhzQVVoeExpb1dQaStuUnJHa0FZTWVkQTZIa0ZHSnFoeUNmQ1d1bnVp?= =?utf-8?B?b29aWUM1cThlMDNjWGxXeWFCdlVRbVZyN3M0TTQ0bmFCd0NzYWRxOXZRSEJk?= =?utf-8?B?ZW12UnYydzRUUmkxME12ZkZQZ29MKzFXU2hURnVMRkFCOW1hZUhiSUlGTXV3?= =?utf-8?B?TXVuOTZYRVYvVmZXT0YzMzFCWjYyakZBSk1KcisxdnBOdVBSVkVoaEg1OUZD?= =?utf-8?B?RUloZGY5NVZIZjAzdXc0M1dVS3NOQWVIRDFibEtrUmdPcWdNM1BiVTBjUFYr?= =?utf-8?B?ZnN1UjlXaUk3Mk1HUDVmZTk3VmFOV0hUNHNyUjBUT3hEYXBKZzZYS1VFUWpq?= =?utf-8?B?YmtzQWc3OEpES0NtRGw0dnErbE9UN1NHQnZpblc2K0Zaa0Zwb1I5Z2dDTWow?= =?utf-8?B?bDhkRWl4RUp4SlkwTjNqbkFZSXBPWDNoa2phRWhmYklDNUNSYXdPanZENDg4?= =?utf-8?B?cjFCRThhMFBXbVQrb3l2K2pWK1VrVGFFS1N4cXU1czVtSzJMVHBETTBncll0?= =?utf-8?B?ZlJ4ZU5XWmF3L0lqODFNZU95dnJyRjF1aVV1Tkdlb2dqVkpXTlNlaCtGR3M2?= =?utf-8?B?RWozVitacjJKU01IcmZ5RHcxVDhMUjhZQWtuNm8xVlA5SkhpQVpSMmFzWFhW?= =?utf-8?B?eU1EcU1ZVmRhRGYvM240WHpydnNabzkxNU1ZUVFmazdGTkNFQzlwVmlMVjVG?= =?utf-8?B?d095bjFRSDFpNXJ3K3QzOXlUWW5GUkNGeWphZjNpZ1JGSG56R0pvM0xIcXVy?= =?utf-8?B?VEdib3BZdGZjZVhtVUtLWGYvZHgrdkZZSkF2VzZ0SEZUMnhwcHYvQWgxNmZr?= =?utf-8?B?eTF6TWExeXZqOWNkblFMeVQ0YUt2TlVUK0Q0cUNwYUZQbjZUVXJwb2p5NnJ0?= =?utf-8?B?WjhRaEVvYlkxREpqQ2gzcFhINXZmeGZWSWV4M0lUemNjVHYwRGlGaTRZQit6?= =?utf-8?B?ZmozWHNYUitBT0JkZFJZNW16Y0hKNmtIL0FUaVJZQlNVUmNUUHRibU9DYm56?= =?utf-8?B?Q0hINTdpZXlyQkFlMnArRTZPYWJobmtOOVhqRzBCeEN6Wm50cEt5R093K3o0?= =?utf-8?B?RERZdnNDeVlHK1ZLRmN4d3Bwb1MvNE1USytpS25kZnJQbTI5OFBBei9ZeHE4?= =?utf-8?B?UFlQZ0N4K2J1eFdWc1AvWSsxYmg3TWRMUHFrbUdZU3FjNjBxaEF2YnRvdUhv?= =?utf-8?B?SHB2VDFYOUdISmhKT1lodWtvNUIwa0Rka29scTlOcDQwRlpWbzB2amc4c1NU?= =?utf-8?B?SFQrUmdEWVNndXpOMHpHTHRqYlBuMWlNVHVFcVpKK1d1ZG1CdTlYVHV1YmJp?= =?utf-8?B?UXFDSFg0SkFYOFNyaThiSHd4NTk0Z3RaK2VLL2hZZ3YvMi9hYTE4M29ldlg2?= =?utf-8?B?bnVhdCt2cnk5Qk01Z0xFMlhUNXp0SnhPMUdHWkZ4MGNsY0RUM25FaVo5Z2c4?= =?utf-8?B?NHlzc2lld1FLTENBd0V2SlRZaGNGcVBuelN0bzJJdDJ2ZXpiR3AyNlhmT0xw?= =?utf-8?B?SnFLbjdBMTJFMFdxNmlnNVlMdWRpWWNmdTlUQkFBayt6dWdaZGNTYXNTTExN?= =?utf-8?B?bGprQWRQbmg2QVVzRlZFOWNObXkyUEpxcHY3dHUvckpPNlRONjRpRlF1QVY2?= =?utf-8?B?NjlGSDhWQmhnUXZERG5GMGxmV3lHQk1xODB1d1FSR0l2LzlSNEJWSVRDeG54?= =?utf-8?B?ektUNDJtdjA3THphdFEvVEhmZ0dqNGR2NVFIclpOUCttK2w4UDMrTFhIVjU2?= =?utf-8?B?MG1HSjhpYkY0ZGxMVlJHbC9aRzlNMzMvb2ZtV2pyQ3YxemF4T3hTVnVDWXFo?= =?utf-8?B?bHR3S25ucTZ0TE13NzJIZzZ3SG1tL0dUNnF0RlNhZzNVUDZ1VXVPZ1ZMU0E0?= =?utf-8?B?T3BDVzNoc2JSYzhsL0labU1VMVZLcS9ITER3UU1hc2xta2xWV3pGQjZMQTFB?= =?utf-8?B?cTJsZVlnWVZ3amlzcmRHMDNVNUV3NGVqeHo3SW5aR1FmTlZqbElVSEVtbnEr?= =?utf-8?B?RG1vYlVpSTVESmtYajBVei9mb0ZrbnFWdjFGc1J6MVNzd1lDZml6SldJSUI2?= =?utf-8?B?Q2F2U0hTc2NFSEh1ZjZodUlqYk84RGkzNWVWUzFVb1AwZ2VGQ3JiZz09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: b0dee85a-29ac-41c2-8d85-08debff49c8d X-MS-Exchange-CrossTenant-AuthSource: CH7PR03MB7860.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jun 2026 15:44:05.4547 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yopaAGplkIF4jPcmvsvl0gN+IvTEjlEb8mwSwrn7N11WmKa+4eS1vd0as2S9eSeYLedHpIdOR0JAVv7UlEisGg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR03MB5027 X-purgate-ID: tlsNG-c201ff/1780328649-E119B443-F488259D/0/0 X-purgate-type: clean X-purgate-size: 19673 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1780328672499154100 Adjust user-space callers to use the new interface. No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Anthony PERARD --- tools/console/daemon/io.c | 2 +- tools/include/xen-tools/common-macros.h | 4 +--- tools/libs/call/buffer.c | 3 ++- tools/libs/foreignmemory/linux.c | 2 +- tools/libs/gnttab/freebsd.c | 2 +- tools/libs/gnttab/linux.c | 2 +- tools/libs/guest/xg_core.c | 2 +- tools/libs/guest/xg_dom_arm.c | 6 +++--- tools/libs/guest/xg_dom_x86.c | 2 +- tools/libs/guest/xg_private.h | 4 ++-- tools/libs/guest/xg_sr_common.c | 6 +++--- tools/libs/guest/xg_sr_stream_format.h | 2 +- tools/libs/light/libxl_arm_acpi.c | 24 +++++++++++------------ tools/libs/light/libxl_create.c | 2 +- tools/libs/light/libxl_sr_stream_format.h | 2 +- tools/libs/light/libxl_stream_read.c | 2 +- tools/libs/light/libxl_stream_write.c | 4 ++-- tools/misc/xen-mfndump.c | 2 +- tools/ocaml/libs/xc/xenctrl_stubs.c | 2 +- tools/xenstored/core.c | 4 ++-- tools/xenstored/domain.c | 9 +++++---- tools/xenstored/watch.c | 2 +- 22 files changed, 45 insertions(+), 45 deletions(-) diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c index 43d4973c247c..b6c46d11dea7 100644 --- a/tools/console/daemon/io.c +++ b/tools/console/daemon/io.c @@ -1233,7 +1233,7 @@ static int set_fds(int fd, short events) /* Round up to 2^8 boundary, in practice this just * make newsize larger than current_array_size. */ - newsize =3D ROUNDUP(nr_fds + 1, 8); + newsize =3D ROUNDUP(nr_fds + 1, 1U << 8); =20 new_fds =3D realloc(fds, sizeof(struct pollfd)*newsize); if (!new_fds) diff --git a/tools/include/xen-tools/common-macros.h b/tools/include/xen-to= ols/common-macros.h index 9838a108aaea..9e2799178235 100644 --- a/tools/include/xen-tools/common-macros.h +++ b/tools/include/xen-tools/common-macros.h @@ -68,9 +68,7 @@ }) #endif =20 -#ifndef ROUNDUP -#define ROUNDUP(_x,_w) (((unsigned long)(_x)+(1UL<<(_w))-1) & ~((1UL<<(_w)= )-1)) -#endif +#define ROUNDUP(x, a) (((x) + (a) - 1) & ~((a) - 1)) =20 #define MASK_EXTR(v, m) (((v) & (m)) / ((m) & -(m))) #define MASK_INSR(v, m) (((v) * ((m) & -(m))) & (m)) diff --git a/tools/libs/call/buffer.c b/tools/libs/call/buffer.c index 2579b8c71986..155e4f9d43eb 100644 --- a/tools/libs/call/buffer.c +++ b/tools/libs/call/buffer.c @@ -155,7 +155,8 @@ struct allocation_header { =20 void *xencall_alloc_buffer(xencall_handle *xcall, size_t size) { - size_t actual_size =3D ROUNDUP(size + sizeof(struct allocation_header)= , PAGE_SHIFT); + size_t actual_size =3D ROUNDUP(size + sizeof(struct allocation_header), + PAGE_SIZE); int nr_pages =3D actual_size >> PAGE_SHIFT; struct allocation_header *hdr; =20 diff --git a/tools/libs/foreignmemory/linux.c b/tools/libs/foreignmemory/li= nux.c index 12f959765abd..6d2f30cdf1b6 100644 --- a/tools/libs/foreignmemory/linux.c +++ b/tools/libs/foreignmemory/linux.c @@ -198,7 +198,7 @@ void *osdep_xenforeignmemory_map(xenforeignmemory_handl= e *fmem, */ privcmd_mmapbatch_t ioctlx; xen_pfn_t *pfn; - unsigned int pfn_arr_size =3D ROUNDUP((num * sizeof(*pfn)), XC_PAG= E_SHIFT); + unsigned int pfn_arr_size =3D ROUNDUP(num * sizeof(*pfn), XC_PAGE_= SIZE); int os_page_size =3D sysconf(_SC_PAGESIZE); =20 if ( pfn_arr_size <=3D os_page_size ) diff --git a/tools/libs/gnttab/freebsd.c b/tools/libs/gnttab/freebsd.c index d69d928a165e..801274478217 100644 --- a/tools/libs/gnttab/freebsd.c +++ b/tools/libs/gnttab/freebsd.c @@ -74,7 +74,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt, int domids_stride; unsigned int refs_size =3D ROUNDUP(count * sizeof(struct ioctl_gntdev_grant_ref), - XC_PAGE_SHIFT); + XC_PAGE_SIZE); int os_page_size =3D getpagesize(); =20 domids_stride =3D (flags & XENGNTTAB_GRANT_MAP_SINGLE_DOMAIN) ? 0 : 1; diff --git a/tools/libs/gnttab/linux.c b/tools/libs/gnttab/linux.c index 7286c1d4fe83..829877e64baa 100644 --- a/tools/libs/gnttab/linux.c +++ b/tools/libs/gnttab/linux.c @@ -101,7 +101,7 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt, map =3D alloca(map_size); else { - map_size =3D ROUNDUP(map_size, XC_PAGE_SHIFT); + map_size =3D ROUNDUP(map_size, XC_PAGE_SIZE); map =3D mmap(NULL, map_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_POPULATE, -1, 0); if ( map =3D=3D MAP_FAILED ) diff --git a/tools/libs/guest/xg_core.c b/tools/libs/guest/xg_core.c index f83436d6cbf8..d3640f0ef891 100644 --- a/tools/libs/guest/xg_core.c +++ b/tools/libs/guest/xg_core.c @@ -696,7 +696,7 @@ xc_domain_dumpcore_via_callback(xc_interface *xch, for ( i =3D 1; i < sheaders->num; i++ ) sheaders->shdrs[i].sh_offset +=3D fixup; offset +=3D fixup; - dummy_len =3D ROUNDUP(offset, PAGE_SHIFT) - offset; /* padding length = */ + dummy_len =3D ROUNDUP(offset, PAGE_SIZE) - offset; /* padding length */ offset +=3D dummy_len; =20 /* pages */ diff --git a/tools/libs/guest/xg_dom_arm.c b/tools/libs/guest/xg_dom_arm.c index c8d091850622..739ec1c33837 100644 --- a/tools/libs/guest/xg_dom_arm.c +++ b/tools/libs/guest/xg_dom_arm.c @@ -364,12 +364,12 @@ static int meminit(struct xc_dom_image *dom) =20 /* Convenient */ const uint64_t kernbase =3D dom->kernel_seg.vstart; - const uint64_t kernend =3D ROUNDUP(dom->kernel_seg.vend, 21/*2MB*/); + const uint64_t kernend =3D ROUNDUP(dom->kernel_seg.vend, MB(2)); const uint64_t kernsize =3D kernend - kernbase; const uint64_t dtb_size =3D dom->devicetree_blob ? - ROUNDUP(dom->devicetree_size, XC_PAGE_SHIFT) : 0; + ROUNDUP(dom->devicetree_size, XC_PAGE_SIZE) : 0; const uint64_t ramdisk_size =3D dom->modules[0].blob ? - ROUNDUP(dom->modules[0].size, XC_PAGE_SHIFT) : 0; + ROUNDUP(dom->modules[0].size, XC_PAGE_SIZE) : 0; const uint64_t modsize =3D dtb_size + ramdisk_size; const uint64_t ram128mb =3D bankbase[0] + (128<<20); =20 diff --git a/tools/libs/guest/xg_dom_x86.c b/tools/libs/guest/xg_dom_x86.c index 268936efe25b..9af83535944a 100644 --- a/tools/libs/guest/xg_dom_x86.c +++ b/tools/libs/guest/xg_dom_x86.c @@ -678,7 +678,7 @@ static int alloc_magic_pages_hvm(struct xc_dom_image *d= om) { if ( dom->cmdline ) { - dom->cmdline_size =3D ROUNDUP(strlen(dom->cmdline) + 1, 3); + dom->cmdline_size =3D ROUNDUP(strlen(dom->cmdline) + 1, 1U << = 3); start_info_size +=3D dom->cmdline_size; } } diff --git a/tools/libs/guest/xg_private.h b/tools/libs/guest/xg_private.h index 285229cf82a3..31a79bccf75e 100644 --- a/tools/libs/guest/xg_private.h +++ b/tools/libs/guest/xg_private.h @@ -135,7 +135,7 @@ typedef uint64_t x86_pgentry_t; #define PAGE_SIZE_X86 (1UL << PAGE_SHIFT_X86) #define PAGE_MASK_X86 (~(PAGE_SIZE_X86-1)) =20 -#define NRPAGES(x) (ROUNDUP(x, PAGE_SHIFT) >> PAGE_SHIFT) +#define NRPAGES(x) (ROUNDUP(x, PAGE_SIZE) >> PAGE_SHIFT) =20 static inline xen_pfn_t xc_pfn_to_mfn(xen_pfn_t pfn, xen_pfn_t *p2m, unsigned gwidth) @@ -167,7 +167,7 @@ int pin_table(xc_interface *xch, unsigned int type, uns= igned long mfn, */ #define M2P_SHIFT L2_PAGETABLE_SHIFT_PAE #define M2P_CHUNK_SIZE (1 << M2P_SHIFT) -#define M2P_SIZE(_m) ROUNDUP(((_m) * sizeof(xen_pfn_t)), M2P_SHIFT) +#define M2P_SIZE(_m) ROUNDUP(((_m) * sizeof(xen_pfn_t)), M2P_CHUNK_SIZE) #define M2P_CHUNKS(_m) (M2P_SIZE((_m)) >> M2P_SHIFT) =20 #if defined(__x86_64__) || defined(__i386__) diff --git a/tools/libs/guest/xg_sr_common.c b/tools/libs/guest/xg_sr_commo= n.c index 7ccdc3b1f6aa..54dde924a7c0 100644 --- a/tools/libs/guest/xg_sr_common.c +++ b/tools/libs/guest/xg_sr_common.c @@ -56,11 +56,11 @@ const char *rec_type_to_str(uint32_t type) int write_split_record(struct xc_sr_context *ctx, struct xc_sr_record *rec, void *buf, size_t sz) { - static const char zeroes[(1u << REC_ALIGN_ORDER) - 1] =3D { 0 }; + static const char zeroes[REC_ALIGN - 1] =3D { 0 }; =20 xc_interface *xch =3D ctx->xch; typeof(rec->length) combined_length =3D rec->length + sz; - size_t record_length =3D ROUNDUP(combined_length, REC_ALIGN_ORDER); + size_t record_length =3D ROUNDUP(combined_length, REC_ALIGN); struct iovec parts[] =3D { { &rec->type, sizeof(rec->type) }, { &combined_length, sizeof(combined_length) }, @@ -110,7 +110,7 @@ int read_record(struct xc_sr_context *ctx, int fd, stru= ct xc_sr_record *rec) return -1; } =20 - datasz =3D ROUNDUP(rhdr.length, REC_ALIGN_ORDER); + datasz =3D ROUNDUP(rhdr.length, REC_ALIGN); =20 if ( datasz ) { diff --git a/tools/libs/guest/xg_sr_stream_format.h b/tools/libs/guest/xg_s= r_stream_format.h index 8a0da26f7543..4310f4311e65 100644 --- a/tools/libs/guest/xg_sr_stream_format.h +++ b/tools/libs/guest/xg_sr_stream_format.h @@ -53,7 +53,7 @@ struct xc_sr_rhdr }; =20 /* All records must be aligned up to an 8 octet boundary */ -#define REC_ALIGN_ORDER (3U) +#define REC_ALIGN (1U << 3) /* Somewhat arbitrary - 128MB */ #define REC_LENGTH_MAX (128U << 20) =20 diff --git a/tools/libs/light/libxl_arm_acpi.c b/tools/libs/light/libxl_arm= _acpi.c index ba874c3d3224..ac8165de15b6 100644 --- a/tools/libs/light/libxl_arm_acpi.c +++ b/tools/libs/light/libxl_arm_acpi.c @@ -107,12 +107,12 @@ int libxl__get_acpi_size(libxl__gc *gc, if (rc < 0) goto out; =20 - *out =3D ROUNDUP(size, 3) + - ROUNDUP(sizeof(struct acpi_table_rsdp), 3) + - ROUNDUP(sizeof(struct acpi_table_xsdt), 3) + - ROUNDUP(sizeof(struct acpi_table_gtdt), 3) + - ROUNDUP(sizeof(struct acpi_table_fadt), 3) + - ROUNDUP(sizeof(dsdt_anycpu_arm_len), 3); + *out =3D ROUNDUP(size, 1U << 3) + + ROUNDUP(sizeof(struct acpi_table_rsdp), 1U << 3) + + ROUNDUP(sizeof(struct acpi_table_xsdt), 1U << 3) + + ROUNDUP(sizeof(struct acpi_table_gtdt), 1U << 3) + + ROUNDUP(sizeof(struct acpi_table_fadt), 1U << 3) + + ROUNDUP(sizeof(dsdt_anycpu_arm_len), 1U << 3); =20 out: return rc; @@ -128,7 +128,7 @@ static int libxl__allocate_acpi_tables(libxl__gc *gc, =20 acpitables[RSDP].addr =3D GUEST_ACPI_BASE; acpitables[RSDP].size =3D sizeof(struct acpi_table_rsdp); - dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[RSDP].size, 3); + dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[RSDP].size, 1U << = 3); =20 acpitables[XSDT].addr =3D GUEST_ACPI_BASE + dom->acpi_modules[0].lengt= h; /* @@ -137,11 +137,11 @@ static int libxl__allocate_acpi_tables(libxl__gc *gc, */ acpitables[XSDT].size =3D sizeof(struct acpi_table_xsdt) + sizeof(uint64_t) * 2; - dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[XSDT].size, 3); + dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[XSDT].size, 1U << = 3); =20 acpitables[GTDT].addr =3D GUEST_ACPI_BASE + dom->acpi_modules[0].lengt= h; acpitables[GTDT].size =3D sizeof(struct acpi_table_gtdt); - dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[GTDT].size, 3); + dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[GTDT].size, 1U << = 3); =20 acpitables[MADT].addr =3D GUEST_ACPI_BASE + dom->acpi_modules[0].lengt= h; =20 @@ -150,15 +150,15 @@ static int libxl__allocate_acpi_tables(libxl__gc *gc, goto out; =20 acpitables[MADT].size =3D size; - dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[MADT].size, 3); + dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[MADT].size, 1U << = 3); =20 acpitables[FADT].addr =3D GUEST_ACPI_BASE + dom->acpi_modules[0].lengt= h; acpitables[FADT].size =3D sizeof(struct acpi_table_fadt); - dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[FADT].size, 3); + dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[FADT].size, 1U << = 3); =20 acpitables[DSDT].addr =3D GUEST_ACPI_BASE + dom->acpi_modules[0].lengt= h; acpitables[DSDT].size =3D dsdt_anycpu_arm_len; - dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[DSDT].size, 3); + dom->acpi_modules[0].length +=3D ROUNDUP(acpitables[DSDT].size, 1U << = 3); =20 assert(dom->acpi_modules[0].length <=3D GUEST_ACPI_SIZE); dom->acpi_modules[0].data =3D libxl__zalloc(gc, dom->acpi_modules[0].l= ength); diff --git a/tools/libs/light/libxl_create.c b/tools/libs/light/libxl_creat= e.c index 6fd62d140389..a8b0c8c50070 100644 --- a/tools/libs/light/libxl_create.c +++ b/tools/libs/light/libxl_create.c @@ -600,7 +600,7 @@ int libxl__domain_make(libxl__gc *gc, libxl_domain_conf= ig *d_config, .opts =3D 0, /* .opts will be set below */ .nr =3D b_info->altp2m_count, }, - .vmtrace_size =3D ROUNDUP(b_info->vmtrace_buf_kb << 10, XC_PAG= E_SHIFT), + .vmtrace_size =3D ROUNDUP(b_info->vmtrace_buf_kb << 10, XC_PAG= E_SIZE), .cpupool_id =3D info->poolid, }; =20 diff --git a/tools/libs/light/libxl_sr_stream_format.h b/tools/libs/light/l= ibxl_sr_stream_format.h index f8f4723c2e91..b02c954a388e 100644 --- a/tools/libs/light/libxl_sr_stream_format.h +++ b/tools/libs/light/libxl_sr_stream_format.h @@ -29,7 +29,7 @@ typedef struct libxl__sr_rec_hdr } libxl__sr_rec_hdr; =20 /* All records must be aligned up to an 8 octet boundary */ -#define REC_ALIGN_ORDER 3U +#define REC_ALIGN (1U << 3) =20 #define REC_TYPE_END 0x00000000U #define REC_TYPE_LIBXC_CONTEXT 0x00000001U diff --git a/tools/libs/light/libxl_stream_read.c b/tools/libs/light/libxl_= stream_read.c index e64e8f0eadec..99c7607b6c54 100644 --- a/tools/libs/light/libxl_stream_read.c +++ b/tools/libs/light/libxl_stream_read.c @@ -511,7 +511,7 @@ static void record_header_done(libxl__egc *egc, return; } =20 - size_t bytes_to_read =3D ROUNDUP(rec->hdr.length, REC_ALIGN_ORDER); + size_t bytes_to_read =3D ROUNDUP(rec->hdr.length, REC_ALIGN); rec->body =3D libxl__malloc(NOGC, bytes_to_read); =20 rc =3D setup_read(stream, "record body", diff --git a/tools/libs/light/libxl_stream_write.c b/tools/libs/light/libxl= _stream_write.c index 98d44597a732..9ea64369352f 100644 --- a/tools/libs/light/libxl_stream_write.c +++ b/tools/libs/light/libxl_stream_write.c @@ -119,7 +119,7 @@ static void setup_generic_write(libxl__egc *egc, void *body, sws_record_done_cb cb) { - static const uint8_t zero_padding[1U << REC_ALIGN_ORDER] =3D { 0 }; + static const uint8_t zero_padding[REC_ALIGN] =3D { 0 }; =20 libxl__datacopier_state *dc =3D &stream->dc; int rc; @@ -136,7 +136,7 @@ static void setup_generic_write(libxl__egc *egc, return; } =20 - size_t padsz =3D ROUNDUP(hdr->length, REC_ALIGN_ORDER) - hdr->length; + size_t padsz =3D ROUNDUP(hdr->length, REC_ALIGN) - hdr->length; uint32_t length =3D hdr->length; =20 /* Insert header */ diff --git a/tools/misc/xen-mfndump.c b/tools/misc/xen-mfndump.c index 28687afbf01a..99a0b1d3b5c0 100644 --- a/tools/misc/xen-mfndump.c +++ b/tools/misc/xen-mfndump.c @@ -10,7 +10,7 @@ =20 #include =20 -#define M2P_SIZE(_m) ROUNDUP(((_m) * sizeof(xen_pfn_t)), 21) +#define M2P_SIZE(_m) ROUNDUP(((_m) * sizeof(xen_pfn_t)), MB(2)) #define is_mapped(pfn_type) (!((pfn_type) & 0x80000000UL)) =20 #define ERROR(msg, args...) fprintf(stderr, msg, ## args) diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenc= trl_stubs.c index c55f73b265b2..7f6381cdd2fe 100644 --- a/tools/ocaml/libs/xc/xenctrl_stubs.c +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c @@ -221,7 +221,7 @@ CAMLprim value stub_xc_domain_create(value xch_val, val= ue wanted_domid, value co if ( altp2m_nr !=3D (uint16_t)altp2m_nr ) caml_invalid_argument("altp2m_count"); =20 - vmtrace_size =3D ROUNDUP(vmtrace_size << 10, XC_PAGE_SHIFT); + vmtrace_size =3D ROUNDUP(vmtrace_size << 10, XC_PAGE_SIZE); if ( vmtrace_size !=3D (uint32_t)vmtrace_size ) caml_invalid_argument("vmtrace_buf_kb"); =20 diff --git a/tools/xenstored/core.c b/tools/xenstored/core.c index d6d462b7bc82..86c86b3e9a77 100644 --- a/tools/xenstored/core.c +++ b/tools/xenstored/core.c @@ -466,7 +466,7 @@ int set_fd(int fd, short events) /* Round up to 2^8 boundary, in practice this just * make newsize larger than current_array_size. */ - newsize =3D ROUNDUP(nr_fds + 1, 8); + newsize =3D ROUNDUP(nr_fds + 1, 1U << 8); =20 new_fds =3D realloc(poll_fds, sizeof(struct pollfd)*newsize); if (!new_fds) @@ -3067,7 +3067,7 @@ static int dump_state_node(const void *ctx, struct co= nnection *conn, head.length +=3D node->hdr.num_perms * sizeof(*sn.perms); head.length +=3D pathlen; head.length +=3D node->hdr.datalen; - head.length =3D ROUNDUP(head.length, 3); + head.length =3D ROUNDUP(head.length, 1U << 3); =20 if (fwrite(&head, sizeof(head), 1, fp) !=3D 1) return dump_state_node_err(data, "Dump node head error"); diff --git a/tools/xenstored/domain.c b/tools/xenstored/domain.c index 2db452144dd4..a880ff678ef9 100644 --- a/tools/xenstored/domain.c +++ b/tools/xenstored/domain.c @@ -2159,7 +2159,7 @@ const char *dump_state_connections(FILE *fp) if (ret) return ret; head.length +=3D sc.data_in_len + sc.data_out_len; - head.length =3D ROUNDUP(head.length, 3); + head.length =3D ROUNDUP(head.length, 1U << 3); if (c->domain) { sc.fields |=3D XS_STATE_CONN_FIELDS_UNIQ_ID; head.length +=3D sizeof(uint64_t); @@ -2232,7 +2232,8 @@ void read_state_connection(const void *ctx, const voi= d *state) unsigned long off; =20 off =3D sizeof(*sc) + sc->data_in_len + sc->data_out_len; - domain->unique_id =3D *(uint64_t *)(state + ROUNDUP(off, 3)); + domain->unique_id =3D + *(uint64_t *)(state + ROUNDUP(off, 1U << 3)); } } =20 @@ -2308,7 +2309,7 @@ static int dump_state_domain(const void *k, void *v, = void *arg) n_quota =3D get_quota_size(domain->acc, &rec_len); rec_len +=3D n_quota * sizeof(sd->quota_val[0]); rec_len +=3D sizeof(*sd); - rec_len =3D ROUNDUP(rec_len, 3); + rec_len =3D ROUNDUP(rec_len, 1U << 3); =20 record =3D talloc_size(NULL, rec_len + sizeof(*head)); if (!record) @@ -2372,7 +2373,7 @@ const char *dump_state_glb_quota(FILE *fp) n_quota =3D get_quota_size(quotas, &rec_len); rec_len +=3D n_quota * sizeof(glb->quota_val[0]); rec_len +=3D sizeof(*glb); - rec_len =3D ROUNDUP(rec_len, 3); + rec_len =3D ROUNDUP(rec_len, 1U << 3); =20 record =3D talloc_size(NULL, rec_len + sizeof(*head)); if (!record) diff --git a/tools/xenstored/watch.c b/tools/xenstored/watch.c index a9a06e9e4816..309c5bb66bef 100644 --- a/tools/xenstored/watch.c +++ b/tools/xenstored/watch.c @@ -349,7 +349,7 @@ const char *dump_state_watches(FILE *fp, struct connect= ion *conn, } =20 head.length +=3D path_len + token_len; - head.length =3D ROUNDUP(head.length, 3); + head.length =3D ROUNDUP(head.length, 1U << 3); if (fwrite(&head, sizeof(head), 1, fp) !=3D 1) return "Dump watch state error"; =20 --=20 2.53.0 From nobody Mon Jun 8 05:26:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1780328679; cv=pass; d=zohomail.com; s=zohoarc; b=FIFlvLrhk6AbqpHZHo+5FXMwN+w/N4mUy6uZLzx8tVolE3Noldknd9Q3PfFvTzARShelkVQNb+8kvgwn8x2qNnfJ1Ox0A96Prcr76oIyri6UG2yCQVAlh3126Jz1X2265UcCV1rkjVS2aNc0ZQGRouNubFaGY8qHiUrXBVQwFSg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780328679; 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=yu9/xQAD77EIoxmFDVZnSIjHYBTCvLPxtQ2HQsAYi8c=; b=eGTnoV5dl39IRL6iAjycSv2J+Kx0vPNHf3Ac+SzO0BzFoCjGb1fvqQZQgQgQUk02tspdTdIRTzcUabTZl1YSy5aUS5tS6i5eSdwid10ud3cLtILNOBdF1kDbFfI/coIOSmtRSQX8WEAAWMblTMBfSBGg/43gUef8O7DD0Y8uro8= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1780328679701272.5342346908783; Mon, 1 Jun 2026 08:44:39 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1323942.1589634 (Exim 4.92) (envelope-from ) id 1wU4oK-0006yR-Me; Mon, 01 Jun 2026 15:44:16 +0000 Received: by outflank-mailman (output) from mailman id 1323942.1589634; Mon, 01 Jun 2026 15:44:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wU4oK-0006yD-IJ; Mon, 01 Jun 2026 15:44:16 +0000 Received: by outflank-mailman (input) for mailman id 1323942; Mon, 01 Jun 2026 15:44:15 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wU4oJ-0006tf-Ct for xen-devel@lists.xenproject.org; Mon, 01 Jun 2026 15:44:15 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wU4oI-0007hv-Ps for xen-devel@lists.xenproject.org; Mon, 01 Jun 2026 17:44:14 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a1da8cc-2eae-0a2a0a5409dd-0a2a450ba75c-6 for ; Mon, 01 Jun 2026 17:44:14 +0200 Received: from [52.101.85.22] (helo=BYAPR05CU005.outbound.protection.outlook.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a1da8cc-212f-0a2a450b0019-346555167c7f-3 for ; Mon, 01 Jun 2026 17:44:14 +0200 Received: from CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) by LV3PR03MB7453.namprd03.prod.outlook.com (2603:10b6:408:1a6::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.15; Mon, 1 Jun 2026 15:44:09 +0000 Received: from CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343]) by CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343%4]) with mapi id 15.21.0071.014; Mon, 1 Jun 2026 15:44:09 +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" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kBLI8zIhf9+iXwKkTCw6s49TVitfkr/MLDdtwhbbUWSW8ZPTzRqwD03aU6SN5/ijX4mT+hC8Ei4rxa9vHBlzIqRnvU2vNvnFOMxFpgo+c5WimYz56JYD+A3/0+Sc88cCU30M6m67tVpwAY6AsNH4YmvhPYffzdSEyoanYv7ukrOga5xKNmtHjlSN94+odmAxthCassuHDeJ5jF0S+MVQ+V8b3hHh24uvT5OO+JA46s8ckK6gM9kgdj5KQXHiNif/8D2w6PkSCjCU0KMfSOLk1COMhGt57HzNpAwxMRn2V9Ba5rQC2fN+pReoau9Y0GasrZvGljfpmEAk8VyN0LmSJA== 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=yu9/xQAD77EIoxmFDVZnSIjHYBTCvLPxtQ2HQsAYi8c=; b=xH4UL8HtY14AUs4v72k8pY1FN24xTQQp43MvAyh0uypBg63ZrEGv0ZT7xgsEwfreKzpuP/4iR2JNoW7GGPuRc43YMMDJfzjHEpoDhk53Oj5ZJ0gt59IeWYQaG0TEUUACphqOCpOIVs6DhnIHQ76fesYGtyIBCpdGsB2fUtrLIMkkBMURCjzk75asadoz5VV4C4RHndoZAKhMaSXo6QPqKBEhHe7+RGjcwN8EiqoRpZSqDinyR/+KpkCsgJlMGbjF02OZDVINzBX3WWEML0c+aYT3dXL4U1eOpyqS/Qy/NLcCVnmX+WPf9eZFWawBQg3x1k5LbJNX3NLrq/uDsji1gg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yu9/xQAD77EIoxmFDVZnSIjHYBTCvLPxtQ2HQsAYi8c=; b=ahL+/u4/bvjusYOIa/JnzJVKwRy9Ku+Fe7SlyF4D8s64NTt1e8cqbqfvgZ+5FrgBPZiwMXUsowNdMKPuxol4EVMabA249zTOy4eOicZ1FyQf/r50Y8Ih+W1iphZcyxnIH6xOgHwT0AZEWPJTGj/n9jQJHRWsH3oSRRXp1lJAwb4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Roger Pau Monne To: xen-devel@lists.xenproject.org Cc: Oleksii Kurochko , Roger Pau Monne , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , Stefano Stabellini Subject: [PATCH for-4.22 3/5] xen/numa: prepare NUMA setup code for unit testing Date: Mon, 1 Jun 2026 17:43:30 +0200 Message-ID: <20260601154332.30797-4-roger.pau@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260601154332.30797-1-roger.pau@citrix.com> References: <20260601154332.30797-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0867.namprd03.prod.outlook.com (2603:10b6:408:13d::32) To CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH7PR03MB7860:EE_|LV3PR03MB7453:EE_ X-MS-Office365-Filtering-Correlation-Id: f760b89a-c32e-4b71-174d-08debff49ea5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|18002099003|6133799003|22082099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: A6DSZPIJIGyMhd/1Ewz875Vn7XeV5pQguAMQZ2CUUhUBqPCSK1Z3uTG5sFTX7FY8hZ/s8eg4Vra1VuHG/asa73Z6aTfxV00ll6IgOherxcO1xylv2AgHwaOytR6WCrxDyCrme3W3OJT0oJt5jD9UkOUeQHQBDxVtboGdId8Qg5E2mx4U+hRPUSuPipbw8p0lcDOaWgLYJKfSW2p1QLgZnFDKkR4cHSfBpJ/QXVikiqiJfNd08GwTUBrcG7oll81R8PJW99Qy6POO9GCPWgevM6RM0NAFvGeBtppccm/pjQHOCtDKmFsqHEjnjLhdZlYMSET6zTpNPec/kgrk9Z4bo0LZ1tsM3LRGtT2La1EgENkdqYDRv9nBZgOWojLJMcOQ7QQvWY/49xE02WE8TmnWmNFAsXDiqP9Acdd1Lq3aruSEznhxjDZzb2HoJHZLuwBGdKVyJkZ6mscS2ZfeG/nLVgyGb5GWUG6cMpoXLV3km5jRunKQaFHYftNzBQjGU5I9DrufnAj4+aFW+Dy/p7a6FzdqaHfeGebiy3xA4VXsdqZYrdraUUOT9QabowPvJ0F0d79B6yKL3ySW7qXUWHlacDTiuban4i8nm9kmMIFlMoMCSS3WCJcFonZYDPQhYLf5QVjaqPuNRdYJo1s4z6RLrjPuJ8Rycr9z28bL2MuWKY4TypOhUeT805nFvGzMKL4l X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH7PR03MB7860.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(18002099003)(6133799003)(22082099003)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RmRlbjhiSnFuRzQrdmIydHIxKzgyQTBXYmF3dkxVRzRzMk5yaVpiZzA4eWVN?= =?utf-8?B?REc2TTFvSGpzUzJvcGM0QTFxSmxYUVpJY0ZCMytrcTdybnp0WE9OZ1lpQ0pF?= =?utf-8?B?OFFleTUzdWRIL2pRa2FqaFR5UVBtVE5YUFdkeHNaRW1ZSzlJV0xwWHhIMnJy?= =?utf-8?B?OWoydUo5UWpiWVNEejNqU1NmVkRxZ3VFWVpKQ0FwU04vOEYrSFgwRDRUWDBt?= =?utf-8?B?VEZsc01uWmxteEorNHErNlRDSHFtUGV3Z1ZBbWRNaEdRRVNqMGQzQjl6NWta?= =?utf-8?B?bFBFNXA1NmhzQm1GVWczcWd5eW91NWV0Wlo2czh1cHo4cEprYTJCcjA1MjhD?= =?utf-8?B?a2s1R0JRQVp1QmVWdjVFUThWS1owbkxoMEgxRG54ZWJzRHg5QWZtcFNEeWVi?= =?utf-8?B?V05PWkQxK1U5bHJLY3lBUkQwb2RwTmNUR1FrRlZqR1p2Y0J2UEtmTkt1OGpE?= =?utf-8?B?TlI4ZmhGUkY2K0VLYTJDQ2dxQnB0SUVLVTR1a0xFRzI2Nnh6RjhCNkVHS0FJ?= =?utf-8?B?ZXhmaFZ5MmREaExVeGtYWnF3OWl6dGlQOGxKMmw1aXQxRXh2RE51NWYzY200?= =?utf-8?B?RUNLQ2VDYm9qVXNNM2NybTFWaXZJd3QxRktHcVZXK1VidThTTzAwQjVwckRC?= =?utf-8?B?U0pQcDdmNTRFVXIzd2k3eG8yYVR5MnBGTHkyUXcrYWZ3VlVUMTh2OEJpV0lv?= =?utf-8?B?RnhSTFRjNk1seXNPNE5pTGdUYlNrc0tYK0V0VjE4SnVxRXlHN09KTWErVXJP?= =?utf-8?B?ZGZ0ZHg1Z0ZkRHNiSnNPdDAvWENtVUVEaGxrTFhTbkJWdmNReXExaVNDUFNB?= =?utf-8?B?NnJMWE5xTTBrNGFzRU12NG04STBBMjk1NVR1Um90ZSsrczlPRDRwREtZa1V1?= =?utf-8?B?YWFQRjRYb3AraFF5aTRqR3NYQzhzMGU1LzUwM2hnWVdSZWF5QTUwakZLcUFH?= =?utf-8?B?TEMxNms0R1oyNFUvVW1OSUFHMjYwRlZCWFR2dXpVT1RjVE1GWTU5REtkSTRE?= =?utf-8?B?NUNnUk42TlM0eDB0TzNIVkZXQi9BVW90RC9EcmdjZE9Mb1dmblBJSU55T3dC?= =?utf-8?B?WHk0aGZHZEFmNEdHRUY1Nm8wSzY5QVBlNWJPYUNlWEl1aVg1T2lXdTlXMlNZ?= =?utf-8?B?QzFkVml1RkcyV2c5eGgxWk1sN1NYOWVsNExlcmM2UWFTdmRsOGNvNHo0R0Jx?= =?utf-8?B?a1VKMDZTeFd5U3JWaU9ZWjZKTFc0YkVCai9QMEEzc1ZBeXo4S3loYjRRVHJy?= =?utf-8?B?YXl6dVFCRldRcGdlNkp4M2Q2a1lrVEw1aFlScHBTelBubXBqenA1NVlObDNW?= =?utf-8?B?UWs3RzRrczRVQTUwVFo5UzBaZmcvcnhISUl1SjNIRGRnT1pQb3pMcFNNWWEy?= =?utf-8?B?dTZlOGxwcXk3aXRTTEIxa3pXV1VyYlhmaSt2NHVtam9LVy9QTk9HS1lwQjh1?= =?utf-8?B?OEhaMTkzZm02eEVQSHlMb0RVcDEzSVhCMVFLZjd1TURpQzNmOEVCc1JiNnZG?= =?utf-8?B?eG5PL2ovTTUreXdsN2hwWk56bGhmNGRoYXVzQlAzelAwTjc2MUpHNzlMa01w?= =?utf-8?B?c29iV2t0RC9KNzI2OXcxRWcxTHZhVXM5M3I1V1N1Y0R4WlhIUG1pUFZ1bFM3?= =?utf-8?B?VE5ZMTh5dThjUzdOaHVQM292dDlhUDFjV252aTFNd2FsRis4K3FCYzB6M3h0?= =?utf-8?B?TmFyeGxnYW5RYmw2RXcvd01SOWx4SFp2aVM0aEN3YjhRb3pOcU8wSlhuYS92?= =?utf-8?B?TWJWK1lwVlg0NjZReFFGU1l0amZQK0hxd0RVQUVkc3RsNWE3Szkwc1Y1VDlE?= =?utf-8?B?eXVCQ3JBQ1dTMlgxSWVWMlZROXRTNkFNVkhYV1ZpcE1aWXJoUnpvL0tZeEMy?= =?utf-8?B?N2FCMVJwQ0tRempNRElwak5PMHpLU0RybFRwZWVaK1VFTGRLVGx6dHREbEE5?= =?utf-8?B?TFBvby94aUZOWk5OM2FVaGpKeGVDVjhvTS9RUU9Dd2JHTmpjVjhIQUN0SElz?= =?utf-8?B?dktiYUZheEpQM2pXb1F3cnl4VnIwQnBObEhQVVFCMnNTWEhobEIzWEl3M29s?= =?utf-8?B?YjNRb1NDOHB6UTRZYUg5RkZsbUxXVGlQY0hVNUczT056ajNQMHlLdE9jaEda?= =?utf-8?B?MUU2K1cvRDlRcnpWYjVlVkk4Z25BVjIvcEdSQnpINWhpRm12Z09HRSs2QlV0?= =?utf-8?B?TXlKTGRKaFc3dUpUY0hMR2xLcnUwY1IwYjBvTUJzWStoWXJURUxSdGhIMDk5?= =?utf-8?B?Sjl5ejhFKzMvZzcwUThkWTdJUmp2UG9QOVg5OEpkS0dhSTZDRm0xTXdiQSt5?= =?utf-8?B?NnU1U3dnOWhLaFUwYS9aRlZWN0MwMGlQYlp6WTNsMkRzbksyZkMvQT09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: f760b89a-c32e-4b71-174d-08debff49ea5 X-MS-Exchange-CrossTenant-AuthSource: CH7PR03MB7860.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jun 2026 15:44:08.9369 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1iOGQpry8bBaWqNCPYfl1p84ioKUoDlnakTaFR1I+qcbLYW8nk6ZC5FKQM6dvCekkeTglGbzveufmoBqaqWejw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR03MB7453 X-purgate-ID: tlsNG-42698a/1780328654-1B77AF3B-CFD48377/0/0 X-purgate-type: clean X-purgate-size: 1609 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1780328681464158500 Introduce __XEN__ guards to differentiate between hypervisor vs unit test builds. Also move numa_set_node() so it's outside the __XEN__ guards. No functional change intended. Signed-off-by: Roger Pau Monn=C3=A9 Acked-by: Jan Beulich --- xen/common/numa.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/xen/common/numa.c b/xen/common/numa.c index ad75955a1622..8544a1598218 100644 --- a/xen/common/numa.c +++ b/xen/common/numa.c @@ -4,6 +4,7 @@ * Adapted for Xen: Ryan Harper */ =20 +#ifdef __XEN__ #include #include #include @@ -13,6 +14,7 @@ #include #include #include +#endif /* __XEN__ */ =20 static nodemask_t __initdata processor_nodes_parsed; static nodemask_t __initdata memory_nodes_parsed; @@ -561,6 +563,12 @@ void __init numa_init_array(void) } } =20 +void numa_set_node(unsigned int cpu, nodeid_t node) +{ + cpu_to_node[cpu] =3D node; +} + +#ifdef __XEN__ #ifdef CONFIG_NUMA_EMU static unsigned int __initdata numa_fake; =20 @@ -661,11 +669,6 @@ void numa_add_cpu(unsigned int cpu) cpumask_set_cpu(cpu, &node_to_cpumask[cpu_to_node(cpu)]); } =20 -void numa_set_node(unsigned int cpu, nodeid_t node) -{ - cpu_to_node[cpu] =3D node; -} - /* [numa=3Doff] */ static int __init cf_check numa_setup(const char *opt) { @@ -830,3 +833,4 @@ static int __init cf_check register_numa_trigger(void) return 0; } __initcall(register_numa_trigger); +#endif /* __XEN__ */ --=20 2.53.0 From nobody Mon Jun 8 05:26:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1780328673; cv=pass; d=zohomail.com; s=zohoarc; b=mugqPgd5PjfUo5Sjgf7MFreLz9hdZnxABV9zf5rLsRnl5qLV3on2GqLeiGr2bmLTJo+LCd0pixflCgzMjA9LdD9Mr9iogAE/qPLsmQhAcb2bWz6Jz/nA+7XamO/SGZTKD+juTm1MT6vElAJJJGplkCVEtUTPCaYPWHC4sXnhqV8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780328673; 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=baK8cjPkKPNArYKcbk9tpmKQdKKjM8clHoyqodwv1j4=; b=LQRHDvX/IgvM0i2kM6qyB0c2bjZBxJIoX7BLkLH6pHCGfUJrYe+6FwGwpbfdmUHGtG6AZlXiGqJm0bKcqkersG141wd6uiaNjhuYwV4SnlQpg9uEHvnUDJdGiVg+Lk9gEDPJYSmP+Md2KOAp27RqUSd7qITHwY0ulLsIl96WfXg= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 17803286731311009.0307138240831; Mon, 1 Jun 2026 08:44:33 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1323944.1589644 (Exim 4.92) (envelope-from ) id 1wU4oM-0007FQ-17; Mon, 01 Jun 2026 15:44:18 +0000 Received: by outflank-mailman (output) from mailman id 1323944.1589644; Mon, 01 Jun 2026 15:44:17 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wU4oL-0007EW-RZ; Mon, 01 Jun 2026 15:44:17 +0000 Received: by outflank-mailman (input) for mailman id 1323944; Mon, 01 Jun 2026 15:44:16 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wU4oK-0006xe-Eg for xen-devel@lists.xenproject.org; Mon, 01 Jun 2026 15:44:16 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wU4oJ-0007hv-RN for xen-devel@lists.xenproject.org; Mon, 01 Jun 2026 17:44:15 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a1da8cc-2eae-0a2a0a5409dd-0a2a450ba75c-12 for ; Mon, 01 Jun 2026 17:44:15 +0200 Received: from [52.101.85.22] (helo=BYAPR05CU005.outbound.protection.outlook.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a1da8cc-212f-0a2a450b0019-346555167c7f-4 for ; Mon, 01 Jun 2026 17:44:15 +0200 Received: from CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) by LV3PR03MB7453.namprd03.prod.outlook.com (2603:10b6:408:1a6::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.15; Mon, 1 Jun 2026 15:44:11 +0000 Received: from CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343]) by CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343%4]) with mapi id 15.21.0071.014; Mon, 1 Jun 2026 15:44:11 +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" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uQx0a8Rr5iutAkcp2r6oOMB/S/zHyey9ohjai1lCRRpMdX6UcBn9VIrUaOJOdpqExaRHAIm7/9zv+aPLv3lDPbo74OGT7Lm6hArFCoRCrChlW5qpD7/SEfhNAzo4Dz7GfTwphH+Uszjz3ROHuttRv8UV8DTnietW0Uec3v7SnXF7QQ2FWbHp9gEn+RWkI74G4IfIdSC6bYAhluaocOiq5OqRG3hXgeYgbtvI6x5jYAOmleQmfpbXgBdBiP3oKPm79ebfrihDdNEaTqIrFFBVplIr9JtXWpYkTIxCgpAiOFB1IPu0QAo/Y+vSNfSCeArG7lXtd+t0wXvztNHNLXtPhg== 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=baK8cjPkKPNArYKcbk9tpmKQdKKjM8clHoyqodwv1j4=; b=PbEP1Z58ExsHi25tScLMeLt0XCtVpJIuW/mWyyL41fLBvd9cuujiQM2kE7W+N88dCJSHEjnE8R4pe1vyCKrW0M8rPmnoB/TOgQe7rBWBAf1aQ4H1+2OG2wnXn6KMB67aoFFpyFAcvb2si7hLX82k8PlRLThklvusDF3I43SAUsU42lfxfHOIGPj2FgJQlmfmXRAuO2dp2hCJx8MSaXi8dbbo+m+vv+KJdnwzsHTBL/C4nnmaYpTcnPqzN0d963a6niXCZix1E+7Lga0He3gQwjzVU+Tn6Ul2r94Ut2I+TeqCn6p5JfJV4qHY1sudgCZG1kGwPO11ZV6tNY8NGbS+bA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=baK8cjPkKPNArYKcbk9tpmKQdKKjM8clHoyqodwv1j4=; b=xE3Aqk2LdihK8ojuKKM+9LKwAPMnt9TCrQwV3MHRIwHeDi0n3rJkHeQZ80pMYZroLk0/ZyyUzJgpUa65lHgH7kdhgrWfYeEueUoaXqrvfVkuJR2/9B5nZQ9ah6TQZCIY+lVqT+p/zDy62q1wXSTRjHn5R1M7VigMU0ywA0mwm4A= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Roger Pau Monne To: xen-devel@lists.xenproject.org Cc: Oleksii Kurochko , Roger Pau Monne , Anthony PERARD Subject: [PATCH for-4.22 4/5] tests/numa: add unit tests for NUMA setup logic Date: Mon, 1 Jun 2026 17:43:31 +0200 Message-ID: <20260601154332.30797-5-roger.pau@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260601154332.30797-1-roger.pau@citrix.com> References: <20260601154332.30797-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LV3P220CA0013.NAMP220.PROD.OUTLOOK.COM (2603:10b6:408:234::34) To CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH7PR03MB7860:EE_|LV3PR03MB7453:EE_ X-MS-Office365-Filtering-Correlation-Id: e29966c8-4112-46aa-6fce-08debff4a055 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|18002099003|6133799003|22082099003|56012099006|3023799007|11063799006; X-Microsoft-Antispam-Message-Info: o1PVk/IwI/1Vnh8fSMuOPDRYZsuGNC4Bv77B8xNKkkURdcw9LzxYbrRYkFGE+BPBu78Kv54MVxgHvpgvnJk3Kb9UZEUYSq7zuZXxeK1EvoYzy+dEBYVDTgdkc8ZE/5b0m0spZ2vqTtAKYQ0rRFr9pJ5bsjq0ksIYgyVjzIn3hWWDcodYY9cP5BHO+Mo2G/ZU6qVwH8QYR3NxcjCXENqfRtKQb3/4Cw+DNTYvJnXrpFmYYxceioxqZ+6aG5eMTHHXzoR8EmE3nvWs2QKFdn9xcmXRLv/Kw6joNlGxBR7XiWqSC/QDfGXYSRZwoUnlfcUmUn7bZt3vlxVm0BGYLx/QFQN3qEzvBB3wNDyGTS6drtolONuBY33wb8kryJGFruJ16gwz1qU36qr+DwE6Jh4IAV8d56icfpRJsZoQVihC3c+WVjIC+IGAHwXxaS2X3VKLlVJfo1JHcAz8KisVIeQkjgtT0byyoaMQlDY0UNoB/7FoaQiHbVFv35Y6MvzK6TasexfzOz/tL8IxOVslildpjMIqp6qywg3IG0Jp1upd/p8cvscMaQAffu/LZOJrb0sTkdBaS7l6fF7tq/tn0B+z4sm3PBDB7deOwbvxeUpjhVgXdnhnToKwF05GZnrwRTHq9lSAvmKScwfUK7vICO6PvM05eMNBOKc/cHK5Cr0DYBlyktnij+du9/Srvsy+czBA X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH7PR03MB7860.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(18002099003)(6133799003)(22082099003)(56012099006)(3023799007)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?U3RTaTl4SmtGN3V3MjJubTRwWHFQZ3JrZEJLL3RmaXNYTUE2ZGM4UFpLS2VG?= =?utf-8?B?SlI3SVN0cnJVKzZrRzV1clZ0L2VFdG5WWGJGVk1lZytsL1BxTDRlT3pDeEtu?= =?utf-8?B?MEx5VzYzQ2dOcXZ5MUg3RWZwbTc1YXhlN2picHN6cmtlREc0U2EvUUlDbjlV?= =?utf-8?B?aVdFaVhTMjRVVGJJSHZUdUdObkZKSG0vQUNQNDhTd1JjaENWSW1sUTY4aWJn?= =?utf-8?B?a21CbHYwYjh5NHRzVkJOZnY5NHJCQjJDOUZpdUtZc3hTdGpob3VsWjlRRGwr?= =?utf-8?B?T3A0V0ZCdmIzNEZmUmo2VHF0K1VzbnJGQ2hKWjV5VnJERTVJWHJLNUpacHBa?= =?utf-8?B?YVV4U05CN1g3Q3ZHSlhvelRCWU51R1FQVDVNL0RSMW53L0swc3BQRGtyMjZE?= =?utf-8?B?NHM2ekwvOTE3ZzFISGNWendMOVZuQmpCWXBhUHcrYW8waG9sK1NoaVFMSitu?= =?utf-8?B?dEFkKzZLZ2paSEdLWXdLL0J5UXd2b0E0d0JUNngwc0xySnAxbUxTMnlINXJz?= =?utf-8?B?Wm5LeWVWc0g5c0J5RlRoRmRSazRyQ05ZTnZ5TE03WWhTcUFWQTBTRnhpK1Jl?= =?utf-8?B?Ykd3Z2UzZlNSamVLUFNEcHBHY1A0Y0N5YTRqTmtDUWQ4cDFjZGRtWnBwbWhM?= =?utf-8?B?d2l6RE05eHYxdUQxbGNpanZvZ3pmKzZZeUN4WHJ3M0tvYkVlbFRmT3kyMEhL?= =?utf-8?B?SlAzTENGcHY3aVg1U3d1N3hrN2I2ajR6ZkZOdFdxUXlQek85eGlyS0VqZ0J1?= =?utf-8?B?aVcxZ21EalduekluWE1obEhwYzgvSjl5N2JUYVAxQUZxcUxqSExMUXp6UTAy?= =?utf-8?B?dC9rZ1RVTnVKSGliUjVseENHRlpnWkJsa3A1QmU1WTI2eFNyMC9BOTJIK0RW?= =?utf-8?B?andXSDdvdWp3L0JaYmdELzZLZzhpV2J2R1pCbE91cXdDYmVmeVFGOElOaFRq?= =?utf-8?B?NExwMjlZYVdCSmlVRDY0VmZlNUhva3lwdlBlOVVpUFQ1SVN4NWtTY3NBakh1?= =?utf-8?B?aDhuSitHKzNxTlBjNHVxVU4yNzN2bUpPRUQzeHcvbENMZDgyVmt4OWFtWnhH?= =?utf-8?B?TGpKck8ycDRGWGpCZ0lVWmh6bWpMT2hYN1lUN1V4NzdzRUpPOEVGVDloSXBM?= =?utf-8?B?SlFOeWxSQkU1VkxJLzNBQWZsVmYxdkMrdUdHNHB3MjR4a2tmdG0wamtYUWhK?= =?utf-8?B?MWJCTWMzR254S1Y4NlFtMzZWYVNoMGZWT2w2SStlWC9kN01MdkthV0s4dlVl?= =?utf-8?B?QjRkN2FHTzBxcU5Ubk1zSEdhRW5NMlcyc0sxbDNIdmVsUit5NXQybER1OFAv?= =?utf-8?B?UGlOY3pUUGlVZGRndGRjKzN4c3VyRnMreThNMWkvMGNZQWs4cUM3UDJLNnVa?= =?utf-8?B?bWFxc0VORU5xVnVwdnZXZTE1RzVQZHorTFB4YVpoRmtiaE10RXZYdVpzSCtl?= =?utf-8?B?Y2JCaHVoZ2plZHNDYXRxVnliSVgvWnA4TVF2KzU1b1UyKzJnZ0xzRnVNRTZT?= =?utf-8?B?RkVtZVVJMkV5UHlCWDg2MVd5YnNDYXJxRmtzZFV4RWp3c2txUVVTbCsvVW81?= =?utf-8?B?RU1ROVFXck1WbVBwWGJ6ODhZd1hNRUZxa1B2Y285TklmRGNpUER5RHh2Z3VP?= =?utf-8?B?em1QM0NjNnpGQm05dG41Y0N2U2NmQ2VEUHJrZHdNUDN0eFphTU4ybUtEeEd6?= =?utf-8?B?NnUxZlVFMklUV1g5Mm0rUjM2SSs3SG5tcG12azkySXNSajNyc2xvM2JBLy8z?= =?utf-8?B?cG11UHhHbjlwMEFQbFFsN0dwUXZqMzFYT3Qvc2gyb2xpV0tRb2x5MDBoN1g1?= =?utf-8?B?VTM0WUhvTGJrK3ZCK1ZzZEhqZFN6UkZVYTFMRTFNVXlDSEFaaWpsTVZmR3Ax?= =?utf-8?B?TGtNK0JEclZmMitlK3B3c2lKSjBwU3dqanY2citsM2o2SHdRZGdzSytGUGU0?= =?utf-8?B?OUhaaWNMdjIyRW84aCtNRG14dWlONTBFZlNYY1k4MDQrU2VjbHJ5WmQxMTNI?= =?utf-8?B?OWRxQU1tclIxaFZxa21QZHgvbWRQKzRIMmJnSUc1WC9ScWtxQk9FSlpSU0ZI?= =?utf-8?B?KzRiMjZZQTN4Z2NUQXhCdlpHZlU1UU43Z3ZVZi8xcWVONi91UW8xWGpkb3BT?= =?utf-8?B?c3V1c2lmOE9raDdISWlUMlBCOHZxZUt4ZFp5S25pYmtySTU3V3ZEZUNRK1JM?= =?utf-8?B?SFE3d1F1dEpLSWM4cnM5YmM3VGgxa3ArZEkyYnFKVmxUUytuaWtNSjR2bFlv?= =?utf-8?B?RHcvVzE3b09GTGRlcUhnUTdYejRlTlU0R1FZdDdMZCtZK0g2RktzUmFYS3Qv?= =?utf-8?B?Tzd0VzZlY081UmFnQk92VGExTWtKYUwxYzVMWGpiUEhyWXNCYVpadz09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: e29966c8-4112-46aa-6fce-08debff4a055 X-MS-Exchange-CrossTenant-AuthSource: CH7PR03MB7860.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jun 2026 15:44:11.7686 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fKyOdufeE4GPjuixbZrC1rmJQd3zA2IqDgjFow/DsHzmbwFvezwkDGxDKZ9EqaCeoOkjso16zUFvmuWbfjtaRg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR03MB7453 X-purgate-ID: tlsNG-42698a/1780328655-1BD7FF3B-97355DDE/0/0 X-purgate-type: clean X-purgate-size: 14975 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1780328673558158500 NUMA setup, like PDX, requires certain amount of logic to configure the internal structures and parameters for NUMA operation. Introduce some very basic testing that allows building and testing NUMA setup logic in as a user-space unit test. This allows feeding synthetic memory affinity and map to the logic, allowing to reproduce bugs that would otherwise need access to real systems with such a configuration. For the time being introduce a single test case, based on a known working NUMA setup for an AMD Turin system. Also the testing after setup is currently limited to ensuring the start and end RAM region addresses fall into a correctly setup memory block. Signed-off-by: Roger Pau Monn=C3=A9 --- tools/tests/Makefile | 1 + tools/tests/numa/.gitignore | 2 + tools/tests/numa/Makefile | 47 ++++++++ tools/tests/numa/harness.h | 184 +++++++++++++++++++++++++++++ tools/tests/numa/test-numa.c | 222 +++++++++++++++++++++++++++++++++++ 5 files changed, 456 insertions(+) create mode 100644 tools/tests/numa/.gitignore create mode 100644 tools/tests/numa/Makefile create mode 100644 tools/tests/numa/harness.h create mode 100644 tools/tests/numa/test-numa.c diff --git a/tools/tests/Makefile b/tools/tests/Makefile index 6477a4386dda..fc0ed8091510 100644 --- a/tools/tests/Makefile +++ b/tools/tests/Makefile @@ -4,6 +4,7 @@ include $(XEN_ROOT)/tools/Rules.mk SUBDIRS-y :=3D SUBDIRS-y +=3D domid SUBDIRS-y +=3D mem-claim +SUBDIRS-y +=3D numa SUBDIRS-y +=3D paging-mempool SUBDIRS-y +=3D pdx SUBDIRS-y +=3D rangeset diff --git a/tools/tests/numa/.gitignore b/tools/tests/numa/.gitignore new file mode 100644 index 000000000000..0710a767f400 --- /dev/null +++ b/tools/tests/numa/.gitignore @@ -0,0 +1,2 @@ +/numa.h +/test-numa diff --git a/tools/tests/numa/Makefile b/tools/tests/numa/Makefile new file mode 100644 index 000000000000..5235f9d6297f --- /dev/null +++ b/tools/tests/numa/Makefile @@ -0,0 +1,47 @@ +XEN_ROOT=3D$(CURDIR)/../../.. +include $(XEN_ROOT)/tools/Rules.mk + +TARGETS :=3D test-numa + +.PHONY: all +all: $(TARGETS) + +.PHONY: run +run: $(TARGETS) +ifeq ($(CC),$(HOSTCC)) + set -e; \ + for test in $? ; do \ + ./$$test ; \ + done +else + $(warning HOSTCC !=3D CC, will not run test) +endif + +.PHONY: clean +clean: + $(RM) -- *.o $(TARGETS) $(DEPS_RM) numa.h + +.PHONY: distclean +distclean: clean + $(RM) -- *~ + +.PHONY: install +install: all + $(INSTALL_DIR) $(DESTDIR)$(LIBEXEC)/tests + $(INSTALL_PROG) $(TARGETS) $(DESTDIR)$(LIBEXEC)/tests + +.PHONY: uninstall +uninstall: + $(RM) -- $(patsubst %,$(DESTDIR)$(LIBEXEC)/tests/%,$(TARGETS)) + +numa.h: $(XEN_ROOT)/xen/include/xen/numa.h + sed -e '/^#[[:space:]]*include/d' <$< >$@ + +CFLAGS +=3D -D__XEN_TOOLS__ +CFLAGS +=3D $(APPEND_CFLAGS) +CFLAGS +=3D $(CFLAGS_xeninclude) + +test-numa: test-numa.c numa.h + $(CC) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_$*.o) -o $@ $< $(APPEND_CFLAGS) + +-include $(DEPS_INCLUDE) diff --git a/tools/tests/numa/harness.h b/tools/tests/numa/harness.h new file mode 100644 index 000000000000..71ff9c792191 --- /dev/null +++ b/tools/tests/numa/harness.h @@ -0,0 +1,184 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Unit tests for NUMA setup. + * + * Copyright (C) 2026 Cloud Software Group + */ + +#ifndef _TEST_HARNESS_ +#define _TEST_HARNESS_ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define CONFIG_DEBUG +#define CONFIG_NUMA +#define CONFIG_NR_NUMA_NODES 64 +#define NR_CPUS 256 +#define MAX_RANGES 128 +#define PADDR_BITS 52 + +#define __init +#define __initdata +#define __ro_after_init +#define __read_mostly + +#define printk printf +#define XENLOG_INFO "" +#define XENLOG_DEBUG "" +#define XENLOG_WARNING "" +#define KERN_INFO "" +#define KERN_ERR "" +#define KERN_WARNING "" +#define KERN_DEBUG "" + +#define PAGE_SHIFT 12 +/* Some libcs define PAGE_SIZE in limits.h. */ +#undef PAGE_SIZE +#define PAGE_SIZE (1L << PAGE_SHIFT) +#define MAX_ORDER 18 /* 2 * PAGETABLE_ORDER (9) */ + +#define PFN_DOWN(x) ((x) >> PAGE_SHIFT) +#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT) + +#define paddr_to_pfn(pa) ((unsigned long)((pa) >> PAGE_SHIFT)) +#define mfn_to_pdx(mfn) (mfn) +#define paddr_to_pdx(pa) ((pa) >> PAGE_SHIFT) +#define mfn_to_maddr(mfn) ((mfn) << PAGE_SHIFT) + +#define ASSERT assert +#define ASSERT_UNREACHABLE() assert(0) + +/* For the purposes of the testing assume arch NID =3D=3D Xen NID. */ +#define numa_node_to_arch_nid(n) (n) + +typedef uint64_t paddr_t; +#define PRIpaddr "016" PRIx64 + +typedef unsigned long mfn_t; +typedef uint8_t nodeid_t; + +#define __set_bit set_bit +#define __clear_bit clear_bit + +static inline unsigned int find_next_bit( + const unsigned long *addr, unsigned int size, unsigned int off) +{ + unsigned int i; + + ASSERT(size <=3D BITS_PER_LONG); + + for ( i =3D off; i < size; i++ ) + if ( !!(*addr & (1UL << i)) ) + return i; + + return size; +} + +#define find_first_bit(b, s) find_next_bit(b, s, 0) + +/* Minimal cpumask support. */ +typedef struct cpumask{ DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; + +#define cpumask_clear_cpu(c, m) clear_bit((c), (m)->bits) + +/* Define the nodemask helpers used. */ +typedef struct nodemask{ DECLARE_BITMAP(bits, CONFIG_NR_NUMA_NODES); } nod= emask_t; + +#define node_set(node, dst) set_bit((node), (dst).bits) + +#define first_node(n) __first_node(&(n), CONFIG_NR_NUMA_NODES) +static inline int __first_node(const nodemask_t *srcp, unsigned int s) +{ + return min(s, find_next_bit(srcp->bits, s, 0)); +} + +#define next_node(n, m) __next_node((n), &(m), CONFIG_NR_NUMA_NODES) +static inline int __next_node(unsigned int n, const nodemask_t *srcp, + unsigned int s) +{ + return min(s, find_next_bit(srcp->bits, s, n + 1)); +} + +#define nodes_or(dst, src1, src2) \ + bitmap_or((dst).bits, (src1).bits, (src2).bits, CONFIG_NR_NUMA_NODES) + +static inline bool nodemask_test(unsigned int node, const nodemask_t *dst) +{ + return test_bit(node, dst->bits); +} + +#define node_set_online(node) set_bit((node), node_online_map.bits) + +#define cycle_node(n, src) __cycle_node((n), &(src), MAX_NUMNODES) +static inline int __cycle_node(int n, const nodemask_t *maskp, + unsigned int nbits) +{ + unsigned int nxt =3D __next_node(n, maskp, nbits); + + if ( nxt =3D=3D nbits ) + nxt =3D __first_node(maskp, nbits); + + return nxt; +} + +#define for_each_node_mask(node, mask) \ + for ( (node) =3D first_node(mask); \ + (node) < MAX_NUMNODES; \ + (node) =3D next_node((node), (mask)) ) + +/* + * Dummy helper to satisfy allocate_cachealigned_memnodemap(), the memory + * allocation is instead done in vmap_contig(). + */ +static inline mfn_t alloc_boot_pages(unsigned long nr, unsigned long align) +{ + return 0; +} + +static inline void *vmap_contig(mfn_t mfn, unsigned int nr) +{ + assert(!mfn); + return calloc(PAGE_SIZE, nr); +} + +static inline void panic(const char *msg) +{ + printf("%s\n", msg); + abort(); +} + +/* Dummy implementations to satisfy the build. */ +static inline bool arch_numa_disabled(void) +{ + return false; +} + +static inline void numa_fw_bad(void) { } + +static inline bool arch_numa_unavailable(void) +{ + return false; +} + +#include "numa.h" + +#endif + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/tools/tests/numa/test-numa.c b/tools/tests/numa/test-numa.c new file mode 100644 index 000000000000..bced68d4d7f1 --- /dev/null +++ b/tools/tests/numa/test-numa.c @@ -0,0 +1,222 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Unit tests for NUMA setup. + * + * Copyright (C) 2026 Cloud Software Group + */ + +#include "harness.h" + +static paddr_t mem_hotplug; +unsigned int __read_mostly nr_cpu_ids =3D NR_CPUS; + +#include "../../xen/common/numa.c" + +static void numa_reset_state(void) +{ + bitmap_clear(processor_nodes_parsed.bits, CONFIG_NR_NUMA_NODES); + bitmap_clear(memory_nodes_parsed.bits, CONFIG_NR_NUMA_NODES); + bitmap_clear(memblk_hotplug, NR_NODE_MEMBLKS); + memset(numa_nodes, 0, sizeof(numa_nodes)); + memset(node_memblk_range, 0, sizeof(node_memblk_range)); + memset(memblk_nodeid, 0, sizeof(memblk_nodeid)); + memset(node_data, 0, sizeof(node_data)); + memset(node_to_cpumask, 0, sizeof(node_to_cpumask)); + memset(cpu_to_node, NUMA_NO_NODE, sizeof(cpu_to_node)); + num_node_memblks =3D 0; + memnode_shift =3D 0; + memnodemapsize =3D 0; + if ( memnodemap !=3D _memnodemap ) + free(memnodemap); + memnodemap =3D NULL; + bitmap_clear(node_online_map.bits, CONFIG_NR_NUMA_NODES); + node_set(1, node_online_map); +} + +struct mem_affinity { + /* Ranges are defined as [start, end]. */ + paddr_t start, end; + unsigned int nid; +}; + +struct mem_range { + /* Ranges are defined as [start, end]. */ + paddr_t start, end; +}; + +const static struct mem_range *ram; + +int arch_get_ram_range(unsigned int idx, paddr_t *start, paddr_t *end) +{ + if ( idx >=3D MAX_RANGES || !ram[idx].end ) + return -ENOENT; + + *start =3D ram[idx].start; + *end =3D ram[idx].end + 1; + + return 0; +} + +static void print_ranges(const struct mem_affinity *r) +{ + unsigned int i; + + printf("Affinity ranges:\n"); + for ( i =3D 0; i < MAX_RANGES; i++ ) + { + if ( !r[i].end ) + break; + + printf(" NID %u [%" PRIpaddr ", %" PRIpaddr "]\n", + r[i].nid, r[i].start, r[i].end); + } + + printf("RAM ranges:\n"); + for ( i =3D 0; i < MAX_RANGES; i++ ) + { + if ( !ram[i].end ) + break; + + printf(" [%" PRIpaddr ", %" PRIpaddr "]\n", + ram[i].start, ram[i].end); + } +} + +static bool test_paddr(paddr_t addr) +{ + mfn_t mfn =3D PFN_DOWN(addr); + unsigned int idx =3D mfn >> memnode_shift; + unsigned int nid; + + if ( idx >=3D memnodemapsize ) + { + printf("Fail: MFN %lx -> IDX %u outside of memnodemap range\n", + mfn, idx); + return false; + } + + nid =3D memnodemap[idx]; + if ( nid >=3D MAX_NUMNODES ) + { + printf("Fail: MFN %lx -> NID %u >=3D MAX_NUMNODES (%u)\n", + mfn, nid, MAX_NUMNODES); + return false; + } + + if ( !node_data[nid].node_spanned_pages ) + { + printf("Fail: MFN %lx -> NID %u without spanned pages\n", + mfn, nid); + return false; + + } + + if ( !node_data[nid].node_spanned_pages ) + { + printf("Fail: MFN %lx -> NID %u without spanned pages\n", + mfn, nid); + return false; + + } + + if ( !node_data[nid].node_spanned_pages ) + { + printf("Fail: MFN %lx outside NID range [%013lx, %013lx]\n", + mfn, node_data[nid].node_start_pfn, + node_data[nid].node_start_pfn + + node_data[nid].node_spanned_pages - 1); + return false; + } + + return true; +} + +int main(int argc, char **argv) +{ + static const struct { + struct mem_affinity affinity[MAX_RANGES]; + struct mem_range ram[MAX_RANGES]; + } tests[] =3D { + /* AMD Turin system. */ + { + .affinity =3D { + { .nid =3D 0, .start =3D 0x00000000000ULL, .end =3D 0x0000= 009ffffULL }, + { .nid =3D 0, .start =3D 0x000000c0000ULL, .end =3D 0x000a= fffffffULL }, + { .nid =3D 0, .start =3D 0x00100000000ULL, .end =3D 0x0c04= fffffffULL }, + { .nid =3D 1, .start =3D 0x0c050000000ULL, .end =3D 0x0fc4= fffffffULL }, + { .nid =3D 1, .start =3D 0x10000000000ULL, .end =3D 0x183f= fffffffULL }, + }, + .ram =3D { + { .start =3D 0x00000000000ULL, .end =3D 0x0000009ffffULL }, + { .start =3D 0x00000100000ULL, .end =3D 0x0007590ffffULL }, + { .start =3D 0x000759d1000ULL, .end =3D 0x00075a0ffffULL }, + { .start =3D 0x00076000000ULL, .end =3D 0x00094c73fffULL }, + { .start =3D 0x0009b5ff000ULL, .end =3D 0x0009fff9fffULL }, + { .start =3D 0x0009ffff000ULL, .end =3D 0x0009fffffffULL }, + { .start =3D 0x00100010000ULL, .end =3D 0x0fc4fffffffULL }, + { .start =3D 0x10000000000ULL, .end =3D 0x183f7ffffffULL }, + { .start =3D 0x183f8800000ULL, .end =3D 0x183faabffffULL }, + }, + }, + }; + int ret_code =3D EXIT_SUCCESS; + + /* Dummy firmware interface provider name, use TST for TEST. */ + numa_fw_nid_name =3D "TST"; + + for ( unsigned int i =3D 0 ; i < ARRAY_SIZE(tests); i++ ) + { + paddr_t min =3D ~(paddr_t)0, max =3D 0; + unsigned int j; + + numa_reset_state(); + + ram =3D tests[i].ram; + + for ( j =3D 0; + j < ARRAY_SIZE(tests[i].affinity) && tests[i].affinity[j].en= d; + j++ ) + { + const struct mem_affinity *affinity =3D &tests[i].affinity[j]; + paddr_t length =3D affinity->end - affinity->start + 1; + + if ( !numa_update_node_memblks(affinity->nid, affinity->nid, + affinity->start, length, false)= ) + { + printf("Fail to add NID %u [%" PRIpaddr ", %" PRIpaddr "]\= n", + affinity->nid, affinity->start, affinity->end); + ret_code =3D EXIT_FAILURE; + continue; + } + + min =3D min(min, affinity->start); + max =3D max(max, affinity->end); + } + + if ( !numa_process_nodes(min, max + 1) ) + { + printf("Unable to process nodes\n"); + print_ranges(tests[i].affinity); + ret_code =3D EXIT_FAILURE; + continue; + } + + for ( j =3D 0; + j < ARRAY_SIZE(tests[i].ram) && tests[i].ram[j].end; + j++ ) + if ( !test_paddr(tests[i].ram[j].start) || + !test_paddr(tests[i].ram[j].end) ) + ret_code =3D EXIT_FAILURE; + } + + return ret_code; +} + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ --=20 2.53.0 From nobody Mon Jun 8 05:26:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1780328685; cv=pass; d=zohomail.com; s=zohoarc; b=PkXKNb14fR/BcK+nDnQT3J412yuSQkRCPuWV/PtINdShl6p9N/TUdJcOIApEom1ZIi2IUOa0uCe2hjDpSrf4+9hbB53KrMbGFa0E2147u9TZ0VaeBPCJYQoaZH4sTvJwUox/WMc/GljN8WwNk4IZASrYY+ni4sY+sbR8UP4PIXo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780328685; 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=gLxPZPhUumrMhLXcS8jOcQqLOD7g9VReX2rfeaQLJt8=; b=RAx0enW5q/bz99/K0faZWbEyrea3/b4yWiSCV3Vv06iEP+HUHQElxxMfcSjnN4MIius14qajxO59MqnNmyu/h/cXExVNi5ma0mgjFGqBQdlVgD/T8Sl4MReaG2c8Fi4+Y99AE30W46fq6xZ4cu4VzQsEDceIfx9YhKwjxnZf9Tw= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1780328685222649.6299085279444; Mon, 1 Jun 2026 08:44:45 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1323945.1589649 (Exim 4.92) (envelope-from ) id 1wU4oM-0007My-JZ; Mon, 01 Jun 2026 15:44:18 +0000 Received: by outflank-mailman (output) from mailman id 1323945.1589649; Mon, 01 Jun 2026 15:44:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wU4oM-0007MW-Du; Mon, 01 Jun 2026 15:44:18 +0000 Received: by outflank-mailman (input) for mailman id 1323945; Mon, 01 Jun 2026 15:44:17 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wU4oL-00078o-FD for xen-devel@lists.xenproject.org; Mon, 01 Jun 2026 15:44:17 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wU4oK-0007hv-Rg for xen-devel@lists.xenproject.org; Mon, 01 Jun 2026 17:44:16 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a1da8cc-2eae-0a2a0a5409dd-0a2a450ba75c-16 for ; Mon, 01 Jun 2026 17:44:16 +0200 Received: from [52.101.85.22] (helo=BYAPR05CU005.outbound.protection.outlook.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a1da8cc-212f-0a2a450b0019-346555167c7f-5 for ; Mon, 01 Jun 2026 17:44:16 +0200 Received: from CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) by LV3PR03MB7453.namprd03.prod.outlook.com (2603:10b6:408:1a6::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.71.15; Mon, 1 Jun 2026 15:44:14 +0000 Received: from CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343]) by CH7PR03MB7860.namprd03.prod.outlook.com ([fe80::f5ba:35df:1c9f:b343%4]) with mapi id 15.21.0071.014; Mon, 1 Jun 2026 15:44:14 +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" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=M75WuklhbttYkAJGfpsimMWxVvqQX/NmkLqtQ74Mu2/HbO/oBGvADoTTZ0cBv2TbZpUqRs9wFGMEMdvp1jV/l0atECxSbP+C18fSVdhHE8EilxNFdxZmj169B5VjBlmq6+OHk8wmfyQ4KDGX401qonfPsXHveMYC5yp4ziEv+Yk8sl7Dxj520O/aX0SsU3V/DFyFG6gd/mi50GBpBWZlryzbUv0HA2T2lBqCz2cwV5i9rD7e7+Mn4yqbvyjD+20630nNIb3zGlsInjbLGJfE1DwskFntphw4flWY5zQq3TJTPwBYOEfRdCBvJx2PZs8kDL0J1z1MLUW+6zrDINtEvw== 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=gLxPZPhUumrMhLXcS8jOcQqLOD7g9VReX2rfeaQLJt8=; b=jYPnB8VUUQaKuL8NjDZ6LS1ANds8LIs+JjUHIWT9rqql9au2MjTQ3F7H6yHgdixCfDV5lrSdfde6i4MhIG3xk8GPQMX4CL/GStbrAnP/J4XRmQGHA/l9gKGDsbLgrnDSblERXBdO3w+0GyXySGNtmsMBWvejc/+4VelwhiHgsBAcYp7dkEDnRyuoscdIGIk5Vk3+0KiJ/fm5F7HuhJjKN0RGxILcSaCokKGAfQsOX+UsE81c+GvI3lpTAxHZaFnUsLvbjvKt7tX/7UZBvioaEEQPcDXaHFjRdp5Jx9Md9WWdgEirKY2mr4BJwrJrmhK3uYrfLki70O74Fzhf829wXg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gLxPZPhUumrMhLXcS8jOcQqLOD7g9VReX2rfeaQLJt8=; b=B2UrWOgZyvkZo8PXYrvn3bbDvH2H/M3IfPQ3Q4+nf0CKNmpt3dA/wt4Ek8vH3AfxyLz4aoOfxU78CATFTmTlpgStbKps6lQ+40dVLWVkeCWYdkC09zJp9AejMqvF5Eev8vWGZVQK7opFFa7rY1Jo6zwKGR1vpQTt2aTtnORoVz8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Roger Pau Monne To: xen-devel@lists.xenproject.org Cc: Oleksii Kurochko , Roger Pau Monne , Anthony PERARD , Andrew Cooper , Michal Orzel , Jan Beulich , Julien Grall , Stefano Stabellini Subject: [PATCH for-4.22 5/5] xen/numa: fix setup of non-aligned memory affinity ranges Date: Mon, 1 Jun 2026 17:43:32 +0200 Message-ID: <20260601154332.30797-6-roger.pau@citrix.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260601154332.30797-1-roger.pau@citrix.com> References: <20260601154332.30797-1-roger.pau@citrix.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN0PR04CA0109.namprd04.prod.outlook.com (2603:10b6:408:ec::24) To CH7PR03MB7860.namprd03.prod.outlook.com (2603:10b6:610:24e::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH7PR03MB7860:EE_|LV3PR03MB7453:EE_ X-MS-Office365-Filtering-Correlation-Id: 1575ac56-c659-450b-6c91-08debff4a1dc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|18002099003|6133799003|22082099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: UJ0bJe0sYLFZRiVoQJme9C8PJtit1ef14PABpI8jZ+NNdpRGvV+npHgAws3JAx5ggQErgrS2OauMb3kGo2Cc25FLs5lG3mGF83X7F15gtBre1cra4cUq4kuyPIajSnqq2LNjOBZIPq7ckooB75EOJyNKNFEd5lP6likFaeI8fsBclCnA8OH2eLL0/24WeKFafUBSes8FVfDn4MPiVGI672bim8Q8qHNDeuJ1tdyRkRaDZ73XdkwkFFZoTVx2IjQbrqZwudFFCyUR0Ll4Z9jw+77VkXuXXYWJmGIe5MqkiG8rsDTRqJsu6+dO7ugtASUSUgSiRtXAjcblToeCeK3/Fg+wTy+8YSPnv0OuDAI7qgQUVucneqgdegkqmhhs/NtwhxzPl5H8ZKEcr+1WvOQwTpizxQ2vOqyzQAFzeWFFDq5iUbID4z4VnvyldGjWZiSsainHbc6smcWKdcTSB3AMGDv5mw7ctWmucbRuLBsieVM9ei+nVrK37un6E3S3hEdV6iwdCzt3MvNfCdILow8YInRny+J4PrEU20SE4PLFcAS+5s2vn8f1SDIwY2obN0x5FqUxpwAxqNE2YZpY8iF3fHUwE4LcG2YkMsV2K+gmVbJHPbVk74PyQtkkjkIn/uw8xWZqpCLcjBetCL8HkEBrBFAGWvOnifGGK1MNFeQllVUYwoHX1m7XBJaT1+PuI7rU X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH7PR03MB7860.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(18002099003)(6133799003)(22082099003)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SUR6cWQ0bnBrYXJpKytZTHVZOW5sU0ZrcmpMMDNsMFZTSXZkK243YmhBaTZs?= =?utf-8?B?ZXdxbllJU3ZmY2hod2VlK01FeElNVGhXRXpYVDU2RGFmOWcrNGFFdmZucjJU?= =?utf-8?B?T1owY3NwWkpNL0JEREF0cWFYWktzMk9FT0RYWDVFZ1krSWlQQmdaeWJRb0th?= =?utf-8?B?dDNpL3JIWTFjRGJZa0VOei9zVnBNOHduVHFodHBZSHJmMm1nUmQvQXl3dHZ6?= =?utf-8?B?VFZhdUN1Mk8zYlhmOEJqZGNDMm5CeDRZLys0UTh6VEJWdkN1cXp1S0NjVmp1?= =?utf-8?B?NUV3a0FRbVM5T3lJbnpDdCtIM1JBZ3JqOFpwUGZsUnVHL25kLzJQekhtV3pB?= =?utf-8?B?U2cvckRXTmltRXprb1JKWFAyRkxQQU1KN1ltcHBTcEZYMHJWb2hUQTRPSC9G?= =?utf-8?B?T1VTc0JKSXgvSkQya3BNUFBsMlg3R0YvaysrclFNOFZmc3EvYUxDMGEyUTlC?= =?utf-8?B?NGo2Q3Bkd3ZmYWp5TU13bG04WGxYeU5hTnVOSzd4Z0JYdEFjZEhMOUFOWWd4?= =?utf-8?B?MWc3RmtnMDZ5NXFlTFk4UGVLNnlSa2xsdFZFc3c0TWJ4a0lORndBYktVWTRx?= =?utf-8?B?NkMzbE83eHFyWTVRRHUzUXRlWlI4cmlPcjBaYkxGYWpvbEhzakszUjFZaGpP?= =?utf-8?B?aDFJVWdLTmVrWHN1V0xNUm5RSCtiT1paU0NSb0FINXhwSm1PR1h0aWR0eDlK?= =?utf-8?B?Nk9oM1lHQ2E0aExJek44dnRrMFYxQWpKNDU2S09mdEE0clpxVFh6dmszb01X?= =?utf-8?B?T2lPTDZ3eW9YbTRoVGJ3VTJrY053VWhxK1ZvYUNLWkpNUXQyckRKd3cxMGRF?= =?utf-8?B?VDgzdWxIbTlHcFdGWjFFMldENUJMcEtjNEtyY29uNEVFUEtPUGlEUE8vM3RM?= =?utf-8?B?S0V5TDRnSnhHMzVTSEZVTWd5RTZBbC9uOERrWjNtT3lwNmV6SldOQko5UHlj?= =?utf-8?B?NmlCRG12R2lUQ0hjRTZodnd2QUFmZzUvcmtrMWdmd1JkR2RRSzJlbzQ0UGxY?= =?utf-8?B?WE5MUU1zdmxUc3F5NjZKZm91d1I4K0M5bjBlSzhyekJCRXlsQStCUDRMMmF0?= =?utf-8?B?ZW50M2xGR0NzR05mQjE3MXRLbUdEbHVoVTkraXY1aEVTTWpMcEt4UHpFaWNQ?= =?utf-8?B?M2ZZbHBZL0MwNnJwaHVxUkFINU5mRHE3bmlJN3daS3ZMMU5TOUtYNU1TQURL?= =?utf-8?B?U0lEUjcyYTZLSVNRTnZtbUUwQWdBMlV1a3R5WlczNDdyOWR4WFpxM0ZmaG55?= =?utf-8?B?UHAxMENVZ3ZEckdVV2crSmFZai80VEZXazBjbmxodHIweDlRTnhFejZwV3hh?= =?utf-8?B?S3hVVE5qaURRdmhFV2psTUlSaDk3RmxZeXBmZFI3UkJqUGFBcEFES08wemRK?= =?utf-8?B?MERGVzVxVGgxOVBHcDgrRzQxZ3l5ZzBBdktpVVYyVGZVN3NxLzk0UHUraC82?= =?utf-8?B?MW9pQWI2R1pUTmhYVzVwc1dKK3F1WkswanQvOHB0NmpNUHpyL1J0WG9kWWs0?= =?utf-8?B?ckc5VWR6cllmTFlhbmpJVkRyaVExUEk1V0ZkM0UyYThwZVFRbDRIWFErK25n?= =?utf-8?B?dkY4RWtZZXN0MmpadnI3bUMwQUN0Q3pKWi9qbWJhOC9sY3FDMDFyQytJa0Qv?= =?utf-8?B?cm1QWU5yMXdnWCtacVJpY0ZZM1VGNUJoeWtLM1Rya2tJWVhueGxtTC9CdTlu?= =?utf-8?B?dFFRU2dEWVZnanJ1bjlRbEFDT0dvc0s1R1ZUNXA1ekJEbGtQYWh1S3lzWnBa?= =?utf-8?B?MjkyNW5ERXpLa2tKWUJtbWZZTlZVNWdTWFRPUXdUVUVzTkNMQTRGdE5xMTdk?= =?utf-8?B?MVZLdVFydGpKTEVDby9JQ2k2ZjZEMnplMDdRQStpdFFmVEJpWXRPOTB1U1VR?= =?utf-8?B?ZlE2SDB5V2JjOUdtT2RQMGxxZUxFeFJHWXplZHB1Qk02MlVkNDNSNlBpb0ZY?= =?utf-8?B?ZlFlMXJBV0NhU1RLblcvL01hME9IYjhoS1dqNnFNRWIwcE5sQjEyVkN4RElZ?= =?utf-8?B?cU9xa2Z5bWlsUVNmZkw5YWNkaFUzVzltY1RWTnlhcHpFaFFxTzBhbnQzTDR4?= =?utf-8?B?SGVhZVk3dWI4aHhmNlE1aDIzdUhaQUo0Rnl1VXBqMWZvUkN6NGJnMUkyRFdP?= =?utf-8?B?cE4rZ1BHVXQreW1mNHlNVTFsZVR1eDRpVURGQi8rdFMvWXhhK0hMOEEzK0lH?= =?utf-8?B?NUdlZnpLdnpOTy9Zb1hDa0dEQS85YjM4ckM5Z2J4SFJlSGl0NG5LdEcrTWFo?= =?utf-8?B?U3o5UXR4L0p4KzNhZ2pwMkhLYW1pZzBpUmdWM2l2emsranhCV0dpNEd1Z0Uv?= =?utf-8?B?MWRVdW9HbzhFcklZWTRIL0JSWTJIT3M3b3hQTlVqcDcxMUF5MGU1UT09?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1575ac56-c659-450b-6c91-08debff4a1dc X-MS-Exchange-CrossTenant-AuthSource: CH7PR03MB7860.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jun 2026 15:44:14.3372 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3YsYoe4fTTdBvC25oSKWqBxcH74TYvnrKYs7mCojV8Chj4EilVY17ZgTa3d8WQoDZx9I2ddvD4rN5RpyQwcJuQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR03MB7453 X-purgate-ID: tlsNG-42698a/1780328656-23374F3B-1A02A1E0/0/0 X-purgate-type: clean X-purgate-size: 5449 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1780328686645154101 The logic to populate memnodemap in populate_memnodemap() assumes that all ranges are aligned to the hash shift, this however is only true for the first address in a memory affinity node. Any subsequent ranges belonging to the same node might not be aligned to the hash shift value. Such lack of alignment causes issues to the logic in populate_memnodemap(), as then the tail of the range might not be properly accounted for and setup in memnodemap. Fix this by forcing the start address of all regions to be aligned to the hash shift; if such alignment causes a region overlap it would always be between regions on the same node, and hence will never cause setup issues of the memnodemap array. Introduce two additional test cases to the user-space NUMA setup unit testing, first test case is the native memory affinity and memory map of the system where this issue was found, second test case is a simplification to demonstrate the original problem more clearly. Fixes: 1666086b0044 ("x86/NUMA: improve memnode_shift calculation for multi= node system") Signed-off-by: Roger Pau Monn=C3=A9 Reviewed-by: Jan Beulich --- tools/include/xen-tools/common-macros.h | 1 + tools/tests/numa/test-numa.c | 45 +++++++++++++++++++++++++ xen/common/numa.c | 8 ++++- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/tools/include/xen-tools/common-macros.h b/tools/include/xen-to= ols/common-macros.h index 9e2799178235..88b4a0e5a693 100644 --- a/tools/include/xen-tools/common-macros.h +++ b/tools/include/xen-tools/common-macros.h @@ -69,6 +69,7 @@ #endif =20 #define ROUNDUP(x, a) (((x) + (a) - 1) & ~((a) - 1)) +#define ROUNDDOWN(x, a) ((x) & ~((a) - 1)) =20 #define MASK_EXTR(v, m) (((v) & (m)) / ((m) & -(m))) #define MASK_INSR(v, m) (((v) * ((m) & -(m))) & (m)) diff --git a/tools/tests/numa/test-numa.c b/tools/tests/numa/test-numa.c index bced68d4d7f1..8122e63a88ed 100644 --- a/tools/tests/numa/test-numa.c +++ b/tools/tests/numa/test-numa.c @@ -158,6 +158,51 @@ int main(int argc, char **argv) { .start =3D 0x183f8800000ULL, .end =3D 0x183faabffffULL }, }, }, + /* System with unaligned affinity memblock. */ + { + .affinity =3D { + { .nid =3D 0, .start =3D 0x00000000000ULL, .end =3D 0x000a= fffffffULL }, + { .nid =3D 0, .start =3D 0x00100000000ULL, .end =3D 0x0fc4= fffffffULL }, + { .nid =3D 0, .start =3D 0x10000000000ULL, .end =3D 0x103f= fffffffULL }, + { .nid =3D 1, .start =3D 0x10400000000ULL, .end =3D 0x203f= fffffffULL }, + }, + .ram =3D { + { .start =3D 0x00000000000ULL, .end =3D 0x0000009ffffULL }, + { .start =3D 0x00000100000ULL, .end =3D 0x000165bffffULL }, + { .start =3D 0x00016600000ULL, .end =3D 0x0001aa1dfffULL }, + { .start =3D 0x0001aa1f000ULL, .end =3D 0x0001aa53fffULL }, + { .start =3D 0x0001aab8000ULL, .end =3D 0x0001aac6fffULL }, + { .start =3D 0x0001aacc000ULL, .end =3D 0x0006f3fefffULL }, + { .start =3D 0x00075dff000ULL, .end =3D 0x00075dfffffULL }, + { .start =3D 0x00076000000ULL, .end =3D 0x000a7ffffffULL }, + { .start =3D 0x00100010000ULL, .end =3D 0x0fc43ffffffULL }, + { .start =3D 0x0fc45000000ULL, .end =3D 0x0fc47ffffffULL }, + { .start =3D 0x0fc49000000ULL, .end =3D 0x0fc4bffffffULL }, + { .start =3D 0x0fc4d000000ULL, .end =3D 0x0fc4d3bffffULL }, + { .start =3D 0x0fc4f000000ULL, .end =3D 0x0fc4f0fffffULL }, + { .start =3D 0x10000000000ULL, .end =3D 0x203fd7fffffULL }, + }, + }, + /* + * Reduction of the issue above: introduce an unaligned middle reg= ion + * with regards to the hash shift. + */ + { + .affinity =3D { + { .nid =3D 0, .start =3D 0x00000ULL, .end =3D 0x00fffULL }, + /* + * The offset of the region below is not aligned with the = hash + * shift: the shift calculation only takes into account the + * start of node address. + */ + { .nid =3D 0, .start =3D 0x01000ULL, .end =3D 0x04fffULL }, + { .nid =3D 1, .start =3D 0x14000ULL, .end =3D 0x14fffULL }, + }, + .ram =3D { + { .start =3D 0x00000ULL, .end =3D 0x04fffULL }, + { .start =3D 0x14000ULL, .end =3D 0x14fffULL }, + }, + }, }; int ret_code =3D EXIT_SUCCESS; =20 diff --git a/xen/common/numa.c b/xen/common/numa.c index 8544a1598218..8b2f29597f30 100644 --- a/xen/common/numa.c +++ b/xen/common/numa.c @@ -396,7 +396,13 @@ static int __init populate_memnodemap(const struct nod= e *nodes, =20 for ( i =3D 0; i < numnodes; i++ ) { - unsigned long spdx =3D paddr_to_pdx(nodes[i].start); + /* + * Round down start address: if start is not aligned to the memnod= emap + * chunk size the tail remainder might not be added. Overlaps cre= ated + * by rounding will fall into the same NUMA region. + */ + unsigned long spdx =3D ROUNDDOWN(paddr_to_pdx(nodes[i].start), + 1UL << shift); unsigned long epdx =3D paddr_to_pdx(nodes[i].end - 1); =20 if ( spdx > epdx ) --=20 2.53.0