From nobody Thu Apr 9 17:03:59 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1775743332; cv=pass; d=zohomail.com; s=zohoarc; b=VeQZ27xYOmSx4R5Ht+sudu9vIvJIpWSPy+EEL/b5ewkKg9cMHOLPhqDJ2dIAnKZgwAOGVhEgrANtI4AzP7xRuILN+Kt5cPiTFsFWiSHa1LbwsIkKmqYLO++Ztl0Cflulw77mmCq1MnH64HHBEIjZ/G5Dh9ZifJ8yK/wivvHc4FE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775743332; 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=CjlKN+hVcv4fDStYjwfvo9IU/5C6OQvkDnHA+mRGcfQ=; b=mu1SDam3mehHJpT+GbIwmaKQjXWRvP1tNLdMIbPMbgGAaV9QWwV6/cGvcwSTQ+utGjFz0aAjiiHbgaa/wAwrNSzzvhX7liyfnPLNZbQvuSh87TlrLPd7Tw7e9FdeKdduCiyrMjA6nTcB2fGi1NSNlXWUERhLVaBR8FE5sv1VgnI= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1775743332151960.8684398476121; Thu, 9 Apr 2026 07:02:12 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1277471.1562654 (Exim 4.92) (envelope-from ) id 1wApwv-0004Kq-K4; Thu, 09 Apr 2026 14:01:37 +0000 Received: by outflank-mailman (output) from mailman id 1277471.1562654; Thu, 09 Apr 2026 14:01:37 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwv-0004Kg-HU; Thu, 09 Apr 2026 14:01:37 +0000 Received: by outflank-mailman (input) for mailman id 1277471; Thu, 09 Apr 2026 14:01:36 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwu-0004KE-00 for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 14:01:36 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wApwt-005jok-67 for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 16:01:35 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d7b12b-e002-0a2a0a5209dd-0a2a450ab160-46 for ; Thu, 09 Apr 2026 16:01:35 +0200 Received: from [52.101.66.132] (helo=DUZPR83CU001.outbound.protection.outlook.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d7b13e-ee98-0a2a450a0019-34654284bb10-3 for ; Thu, 09 Apr 2026 16:01:35 +0200 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by PA3PR03MB10964.eurprd03.prod.outlook.com (2603:10a6:102:4b2::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Thu, 9 Apr 2026 14:01:32 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9769.016; Thu, 9 Apr 2026 14:01:32 +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=epam.com header.i="@epam.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=u0Gw3SG0rG+rXP57aIcJs3FSDlAyKTjN3tdfPjprLSCm8zrgPKnXXC6++meAUHL9MiEebo0+340debtDOaQiE/N44/AmJZXwjHldOASTlerpnYDWWj/6Da6HsSaPd2xS9hxEk26F79EqBRbLRxLDfL/p+QzXB0td3FkKaUNxZqVMyoEbqlOlB1wivYi6FnrhKXf/oE+PVNpomT6imBnAXV7nu9S3sjDhC3/0B8gMa3d8zpqt0ixnK3t/XCRP/jz7SYyK7hrAlkr7yLABq1+qx1cGbS8VCJjnOzrQ+vs7lhEGIH017cUXwM0XOuK2GY2bJhOibyRWIddepvBGMqezWg== 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=CjlKN+hVcv4fDStYjwfvo9IU/5C6OQvkDnHA+mRGcfQ=; b=qCJ3AG8WyTUCF2ZECa0OxRN33HXfRDKgbfOJ5mYocoa+ZUYakF09SSRgUqJg96OcEYS3wU7vCh4ROdXjT1mXCPqwF9UmsQs0gs8D5+3T3JYzvCooll05carOKcnSJdvMC6lAns1xq1AGpziwuwx1pwxe7YhHoT/5y2DCLAc9vFQkt9/6QJaycwGSbg0GaC5h66fWCPsLyh15bHFfomgcsctS1v/TLgkfcx0K0y6XLnE8hDV44oesCPJHbiEUPiHpKTD+4cvfUuQ57SzWUDhyeUX8V/VkhIweEWBBTIIIHku+DdjDV5Mp2eMoqjIK1OcO1GjX48R1CeYM96FiL3LDxg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CjlKN+hVcv4fDStYjwfvo9IU/5C6OQvkDnHA+mRGcfQ=; b=m5ywkjmTMVQJQnLgtY96eGgqWJUQl73IcCUNs03AJz1zC8bpWnmRXyogBXg4oZjAB4fhnA3TYyfhetDNNhexP5uJsdO+tE1buAL0WmaqHmWd0CqHw/dsaJrzsPeUrkSp0Ira7SaMNJ0APh9B47+ME8CfckBy6yQUxocpo+MYhV4GQSn8FCg5dGo6Evo73ajbw+BH/Rw/xuPyu5yVtXx+DrEPSyW8LkuiwzqpBdO4mlZr4FsdfWLkc8DOx8ATHiLduZzcoLFVplmdaOU9+2eWlujqylSjXYFvEH7GUeUzXe3trP659oPG75JmR1Cs/KKon3WDNapD1BRrI+M0o9tkaw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Stewart Hildebrand , =?iso-8859-1?Q?Roger_Pau_Monn=E9?= , Mykyta Poturai , Teddy Astie Subject: [PATCH v3 1/7] vpci: rename and export vpci_modify_bars Thread-Topic: [PATCH v3 1/7] vpci: rename and export vpci_modify_bars Thread-Index: AQHcyCle4fajjYJKo0m49i60rboCMg== Date: Thu, 9 Apr 2026 14:01:32 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|PA3PR03MB10964:EE_ x-ms-office365-filtering-correlation-id: 938b6f27-9ff3-4b7f-7e16-08de96408180 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|38070700021|22082099003|56012099003|18002099003; x-microsoft-antispam-message-info: tFrts46u86fOoVp/bZdws/HCAbhkAP6gV83dx7bXJO9dYbGSowu7lvv0cDn6y4Hrly/3BXgAFmcPp5SLx6m8rdm7Kt0eiU241U2JPRdRSErwxU/AxkURoa9ZEz7CufFQ1qtXIDdrOjEUuKdM44CPFMBDlr03ED/1ie3Z/oeErjQGadIpmc1IcfItCPhum9CdkomsPgCsgzUNz0DKoIvlN9yu/hJ7ohcX3lRvusoWGRh12k+LRH6uKWScgpyGjV+zTaiZuh3ozLSK9nc3ZPoM0ApPw6kO06zwsA4RuYamLLI1/eg+Pa0qrxzFflQsrgRgfaVaoGtnqVEEKDl4msq/op4X0AHPXfgUnJ7V7pINnLItNUPPJLWJ+LgBpKHhUD7JMDjq0I/h0ubHlaVyBX4Mc9hj/SA+5bypIK+db4KVLi4QnmCKkphRc4d9rjjz83fCdJr0BWuuUQO4XYZ7xiQtkwqr0u8NZKDCtKhXsY9qkjRKKlEdnHLYpE0Zssmn2r9+EZPkCDTI++VvCVJbVnXSrwRWEOxoB29uWaN9Bsw5j42S0bYvSCUtDbhLyzmCLck3tR6f4HML8fZLFZ9+FtU2e2W2xhow34SJ1QEl/EDKR6sFagaf1XgDAQNmH4ZhbPsw9U0t3w5g6GwU1erpjJSZ5Trx3ABOp7UCPEMczKyG/9DUr5JvdhiWzJjShHriAuDrVbg3eQcC27QSn9aj64lbVgk85oNZuu+mz3+TqaIUqXjTIt9o6Y9wr+YoRnCy60kw95bUgt6Mb3IrAHPhPKXtyVAp55EVSP/ypszIcJLLkGE= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(38070700021)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?ttVsidU+SWgFJIAjA3FaBuobvfVGnTL2D1JpNwpDNMKs5NgLy5aDIm1K7H?= =?iso-8859-1?Q?3aSc0mND6p3YZJF/fKrvWRLL1SbbVZi8j5ekovsCAWVDg0QDfaDk7g4u4f?= =?iso-8859-1?Q?5hoGCaIe0sXArrLHXcGTgun2vtHorsHVGP0VxeRoGOxLBZCN2st/C6GQCg?= =?iso-8859-1?Q?0I9BpleskydoW8vAkgcJeUqZuEgjMZhVvJoEm3WkXMKRyCuk+D4n2IW1yw?= =?iso-8859-1?Q?gTlJOzxpgUOQo3ad9rJ8KOVSUwAA+WAsDF946jGjP6Z/Xm/6LyrsBclLSd?= =?iso-8859-1?Q?JzO8QcUlHFgefZ9IrxK68IhLrYVlOOCblU7666tZHvStk+cfSwQEXr79yc?= =?iso-8859-1?Q?+cguIDbhFXKqTdfrKwzpZmqaDZIlBOvvAq50bsccj4DaFL2Iy+mrB6PP5G?= =?iso-8859-1?Q?Rm0DwMuBB+OcpSRbUsC1P919XWBBx+GVUiOiBSKcpC3+bFN91i5mEUVfJh?= =?iso-8859-1?Q?IYt/4UbMWu+6eVUv+nTsZC2i5U4b/rshJvePAzGLt3uHpLy4lzF4mRUCJQ?= =?iso-8859-1?Q?sAmuxAoykbY5pWiIEGCahIhMm4M0tAmlLLp3FUwimfEIClMHb38TIVE1NA?= =?iso-8859-1?Q?xnWYyqA/lawelw8AjpCV+b7TmIbfpcH/bkOETmWP2RdcWAJZlLcQyZZ6hV?= =?iso-8859-1?Q?osCfGQsIXBL9d0zVc1IP6I5IAAay4gWyXXO7GExuXKZKoq8DNH+MLcQnO6?= =?iso-8859-1?Q?NMYA0nNG4XrTr+f2XgLTKUxEBcIite0zyOmt4HwojXlkdoKwsE/AOeeiPR?= =?iso-8859-1?Q?G+xpUSMZE64OGYHRhKG0e4K7v1PGM0GF6NeMpLJDLlwNJdOM97Tel7Edik?= =?iso-8859-1?Q?NgbC2ar+OYjRZP69NWPVUP0xpiNgeq3tNKkRMX0wlDEKLqOTq3mRgwo8XI?= =?iso-8859-1?Q?JjwBRqXmBHFKPaYb2BymOAOm3FzpVhpzBswn0osl3CJc9fXwd0lEC159R0?= =?iso-8859-1?Q?mwEgzrqdEYxy7ejtEeNz698IG3Rs/x5BcfyRiO1CbBfjTFLW774WyKRVi6?= =?iso-8859-1?Q?M9MeyzTxuNHUgNLmVsGhRwjrOigO4J2VpVPCv9uDVgf/AwghUbq+kzllRO?= =?iso-8859-1?Q?tb536O1teAAaf6GQjVzcVGmIeHW8JUhx/mv8WHdmygXEhC002yIdgy3tBu?= =?iso-8859-1?Q?NwvhCSp5MmQJfI2BKJFXhTl2cOILirgOwfwtHnUSstuX3xaDfu8+nvx7JA?= =?iso-8859-1?Q?SWE4XFZyJ8C14j3IZtPfV+aJIGbxab5MzMHv4RgDxSe8b8DhRkdJuJJecc?= =?iso-8859-1?Q?zW0hAnhb36EczzQKZMTTEzlzR7iRARw0Htc29msgcZnVLuizOj2icPWy21?= =?iso-8859-1?Q?sDJNx4Oe0Hi9nn8/S8s32wp8PVOTzjbY08zlL15RWUx4S1I9hqDsHLPEMc?= =?iso-8859-1?Q?lppqYLBYL2F1kjA0GAi4dOwget78bVDPGutiO6dd+ST4avore3eTGHFy74?= =?iso-8859-1?Q?kBYXPS5P4MSjWYMWjrXlmPrb+oTPuhiUyDX9pGYhnCaPQJY4FaV6U+VHFJ?= =?iso-8859-1?Q?YyNqvDl43w5k1vr8ArtV7gcbgXmADIaVpLZJDdA6qBxa2CFP3x1AYavoRf?= =?iso-8859-1?Q?gUkmKCdcZZxuwoPX9KLq00taB95l03HweXpuMxKIjXouZVu8S5ASGe7ATT?= =?iso-8859-1?Q?i8b09+Av3IxwtNgOLWLxmqPRt6TGfKpl0I0sAFitehgMmewnWUuB/rOMks?= =?iso-8859-1?Q?nGLvteGKWOGTAFHUirJVYvA0Uy+2QInE/+zEwDLiY+/Vq/7cFwShGm4S0L?= =?iso-8859-1?Q?MIOHhwm7VMoklopvFqsYOkn0TvLG1e4QmxlHhuGvsc7pxckk2sUKhl1R27?= =?iso-8859-1?Q?/V3ziYn1LfKSE78PX+nvxBA1c1oyk4c=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 938b6f27-9ff3-4b7f-7e16-08de96408180 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2026 14:01:32.5739 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Ia4w88aADiQ0w7lukqEt9lYZ7t0WeJF6yq21Z0LKg2N7fSdTkPVP5/Cbs8XBdhvLGWKbb8LAHV8Hy2wyVipKtw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR03MB10964 X-purgate-ID: tlsNG-4011c0/1775743295-BFB450B1-5FA90408/0/0 X-purgate-type: clean X-purgate-size: 3963 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1775743333513154100 Content-Type: text/plain; charset="utf-8" From: Stewart Hildebrand Export functions required for SR-IOV support. Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai Reviewed-by: Teddy Astie --- v2->v3: * move declaration to private.h v1->v2 * Collect RBs --- xen/drivers/vpci/header.c | 16 +++++++++------- xen/drivers/vpci/private.h | 3 +++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index a760d8c32f..96995e098b 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -305,7 +305,7 @@ static void defer_map(const struct pci_dev *pdev, uint1= 6_t cmd, bool rom_only) raise_softirq(SCHEDULE_SOFTIRQ); } =20 -static int modify_bars(const struct pci_dev *pdev, uint16_t cmd, bool rom_= only) +int vpci_modify_bars(const struct pci_dev *pdev, uint16_t cmd, bool rom_on= ly) { struct vpci_header *header =3D &pdev->vpci->header; struct pci_dev *tmp; @@ -546,7 +546,7 @@ static void cf_check cmd_write( * memory decoding bit has not been changed, so leave everything a= s-is, * hoping the guest will realize and try again. */ - modify_bars(pdev, cmd, false); + vpci_modify_bars(pdev, cmd, false); else pci_conf_write16(pdev->sbdf, reg, cmd); } @@ -714,13 +714,15 @@ static void cf_check rom_write( * Pass PCI_COMMAND_MEMORY or 0 to signal a map/unmap request, note th= at * this fabricated command is never going to be written to the registe= r. */ - else if ( modify_bars(pdev, new_enabled ? PCI_COMMAND_MEMORY : 0, true= ) ) + else if ( vpci_modify_bars(pdev, + new_enabled ? PCI_COMMAND_MEMORY : 0, + true) ) /* * No memory has been added or removed from the p2m (because the a= ctual * p2m changes are deferred in defer_map) and the ROM enable bit h= as * not been changed, so leave everything as-is, hoping the guest w= ill * realize and try again. It's important to not update rom->addr i= n the - * unmap case if modify_bars has failed, or future attempts would + * unmap case if vpci_modify_bars has failed, or future attempts w= ould * attempt to unmap the wrong address. */ return; @@ -800,8 +802,8 @@ int vpci_init_header(struct pci_dev *pdev) /* * For DomUs, clear PCI_COMMAND_{MASTER,MEMORY,IO} and other * DomU-controllable bits in PCI_COMMAND. Devices assigned to DomUs wi= ll - * start with memory decoding disabled, and modify_bars() will not be = called - * at the end of this function. + * start with memory decoding disabled, and vpci_modify_bars() will no= t be + * called at the end of this function. */ if ( !is_hwdom ) cmd &=3D ~(PCI_COMMAND_VGA_PALETTE | PCI_COMMAND_INVALIDATE | @@ -926,7 +928,7 @@ int vpci_init_header(struct pci_dev *pdev) goto fail; } =20 - return (cmd & PCI_COMMAND_MEMORY) ? modify_bars(pdev, cmd, false) : 0; + return (cmd & PCI_COMMAND_MEMORY) ? vpci_modify_bars(pdev, cmd, false)= : 0; =20 fail: pci_conf_write16(pdev->sbdf, PCI_COMMAND, cmd); diff --git a/xen/drivers/vpci/private.h b/xen/drivers/vpci/private.h index 2907f6b40f..6fdf8a20d9 100644 --- a/xen/drivers/vpci/private.h +++ b/xen/drivers/vpci/private.h @@ -138,6 +138,9 @@ static inline size_t vmsix_table_size(const struct vpci= *vpci, unsigned int nr) 8), 8); } =20 +/* Map/unmap the BARs of a vPCI device. */ +int vpci_modify_bars(const struct pci_dev *pdev, uint16_t cmd, bool rom_on= ly); + #endif /* __XEN__ */ =20 #endif /* VPCI_PRIVATE_H */ --=20 2.51.2 From nobody Thu Apr 9 17:03:59 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1775743328; cv=pass; d=zohomail.com; s=zohoarc; b=Mzr5z5fXuiGG/FBZjqj0/ZYau0XrNhSDXU68HusKoUKxaDmxB6KmdjytYLyhFlxZl3+tzi2lmGoNxe+FHUery1M0Fp0Mb/knLPAW1/as+5RGPZ66CLxZ5nb7N4bEcVikH+zSqWorZI75JFp8GOGdm5M5rtOpRj1lq4B8hozxPgs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775743328; 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=a3SAb+kYfSsy1lFT5wonZU9aNWITJ9HEs9KeGn0w/fc=; b=RC0Uo2Os4mX0kO+16e6TdOBah1Z7unXsbednSx7HtPlTLFngrNj9sziZ9hqtK8G6uh54l0711WQ+oKLwOzQvxP4FUXgGzpNH7OXSGNzQFkLnykLaCU3mIy9IQU7gPr7r5khd6+SHTBPrG3S2SDOsWdeGsex0pZp07qmWFgEhR0Q= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1775743328898407.61339912438086; Thu, 9 Apr 2026 07:02:08 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1277472.1562659 (Exim 4.92) (envelope-from ) id 1wApwv-0004Nu-Vt; Thu, 09 Apr 2026 14:01:37 +0000 Received: by outflank-mailman (output) from mailman id 1277472.1562659; Thu, 09 Apr 2026 14:01:37 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwv-0004N3-PB; Thu, 09 Apr 2026 14:01:37 +0000 Received: by outflank-mailman (input) for mailman id 1277472; Thu, 09 Apr 2026 14:01:36 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwu-0004KF-5G for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 14:01:36 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wApwt-005jok-Gb for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 16:01:35 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d7b12b-e002-0a2a0a5209dd-0a2a450ab160-48 for ; Thu, 09 Apr 2026 16:01:35 +0200 Received: from [52.101.66.132] (helo=DUZPR83CU001.outbound.protection.outlook.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d7b13e-ee98-0a2a450a0019-34654284bb10-4 for ; Thu, 09 Apr 2026 16:01:35 +0200 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by PA3PR03MB10964.eurprd03.prod.outlook.com (2603:10a6:102:4b2::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Thu, 9 Apr 2026 14:01:33 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9769.016; Thu, 9 Apr 2026 14:01:33 +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=epam.com header.i="@epam.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=t6ZuL5lWSKjJXPrhTkdjSsJxOlGTtcu2zp5aLeBbuQRgHlLmTQU9ODON78y0ift/ClfkFw5jlMgWxpJXApdS3BBWI8+1JXSlyMe0/9QxoONp5FLvMftB3ttWKuj1U4RRS4lBC4MJyK5HcrbZpOVd/UYf+HVHuI/v1fGaXf6Bwgyd4AiO6ABqjbPybJ07zkVMl/XSvuDWbwJUVHHb0kpbLlBq5yRRJ5QpX24azV3oinsQwKHPFT1KXkDtu/g1+s5+j9PEsXsu1DAqEAPaHk1G31gscxb9rg4z0v2k2enp/oBVYrjWT4uN0Z0kxmqlv0vgSBNSIr0xm22kw08MR7L4lg== 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=a3SAb+kYfSsy1lFT5wonZU9aNWITJ9HEs9KeGn0w/fc=; b=ggQRi8mNGlk636FfIDZJcc9heJdjGbbuY2ZypC99ACFocIQUQgdg0HO/w4wo+2A+q0VBmdUZSkNthyXGHPlbiMVUTMGQXS49Hl5Gdc4hFyhLOt9tUwArTURd/H7vygTij47yimWM2tpHgsoTEbPQKRxOLfRIQk6+zln2ZkB9EQJ0mg6cmGCMUGwC6kr1D3vJwMUsj3amyF8KFGxQ1DtJYNteHcpTZfQbpAYklsUMO1j10zAHoru96Ql91JtqUVkdJBob1oGgwzXHgr3hhbZLqAMta953mwcKmtFJj6+bSeJdKAjETNlaaDFDzwYMUGpNJxYn6zcFQi1xifZOrZJy5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=a3SAb+kYfSsy1lFT5wonZU9aNWITJ9HEs9KeGn0w/fc=; b=ZhZCDs/Igstpa06XmNRBxKB15x7fox0bzCmx9a+KhwnI9MBU7BLTPtxHMp4xwb5hWVNiXqQX+/LwPdawVeI5KLqpOi5h0U8o6/yYkI4bxyOvOBQazkuCVheqBMiorjxC7NQJjm3ps7HZ9eI0rM9Q/5umqwW+PLbu5NOKOMOx6LMqcykRsm/q833yAoe4fM07BqUJ8dKkZ0SVirWv/zyzpBms/cmOswBOgrIf7duPi3Rlf8isy8pm+csCAFbA7ROn7uz63OOqFv6pxhuVlpifxQFeGwMsOwTEPsthzei9ETd++CN2IvGF7r0xIYG8JnxX2ZaGjwSDhtRD9fSq9wrKEw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Stewart Hildebrand , =?iso-8859-1?Q?Roger_Pau_Monn=E9?= , Mykyta Poturai , Teddy Astie Subject: [PATCH v3 2/7] vpci: rename and export vpci_guest_mem_bar_{read,write} Thread-Topic: [PATCH v3 2/7] vpci: rename and export vpci_guest_mem_bar_{read,write} Thread-Index: AQHcyClf7FuYJla3xES25istczeK4w== Date: Thu, 9 Apr 2026 14:01:32 +0000 Message-ID: <904786c642136845234f94fb522a0a0d0fc8a1d5.1775742115.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|PA3PR03MB10964:EE_ x-ms-office365-filtering-correlation-id: 7a9190c5-fb42-4786-14a5-08de964081b6 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|38070700021|22082099003|56012099003|18002099003; x-microsoft-antispam-message-info: Oz+vbxW19ExR25hUJXDzJkojb5xg7+54niddpISXmBS2J09F3kHIqiODXyBJeVnZxXSyjeW6tzRDI5YO9Q0RBlVFksHpn58QTsYXYmmCOJsssiJ6ek2j6JF/nWpcl74+7bdnXYrJHGhbWD6uYfTxNEiy7fOa9OBKOGDF4K2IJQHVrkrasjFjjRRBMrtWbRsAxhW6eMTWD6OXwIYHM2iGsJsezsTp1GZAG9lk41OpxoUwL8HNamYMAB1AbaqzDZKfiokSqGtMtXw9HwDcLUUCy4jDNjexXEsJpKWqbJIpkTusikwhdh0WvpctMtZV3K1CTV9rKmS75U2hG6wN1D7nrUq11R4u8Eyv2APbpQ8ACi+Y1cfs0NN2IWLRYhUffYfQPxmgRM2/zwrE/Y5wrLO4rhctcd23O90DDFk/rvTQ8m44RmoyjZrIbpeU0DGffopNlpXP0w8WjeZywbuJ9U3dT9opvXojr09M0KI5iwWDlMYqR/TC2Ob4xPmtD4wcd+ykvu/SEULfOHZHzE4nter+dexJxz5BB8G+551hzNgWVCf2YI9emMfyvPCP9sdant4N7JPdBBYG9sIYIqYy7rUXba84yoRj36qZf3Ppc15HIsKYUsFwrpvTJeBHf29QRorOziJo8QZd58hsQjZhqnRNd4pO4NQqRR+Csxrxc31eRJSGjgREe0VS23nx9HX2m29z2tIebwWRcXNtV7yXlsrkT3G2W2amQyn3afK3wjtn6JcYwGItMAMeqxzNmbD5+/L9fnFblHDIwRsyDmPKbK3BCjl7jUw2cvj+3ofvpvdGL4g= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(38070700021)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?IgYWygkOyGjqUH/Z9pz4AKIUm6VLdG2bUOdHTvZPJhthy4nLLjgf0HAEuB?= =?iso-8859-1?Q?6t9Y/zAihPniasAIqeNWzOaqnM+6q9q1ae4V8joN6oEZhCuq5Y8KxFczFg?= =?iso-8859-1?Q?HNHbYmZfeb9KxF8y/qCjvBwaTWwEvSOIiSvPZDUrDgCQxukNtuZPTCjfgM?= =?iso-8859-1?Q?tBq/emNxr/88jLDArAgxTS44b1wAepSxtMC6FyiQf/7OEObFoZLiyHfz0N?= =?iso-8859-1?Q?OS8jQGlUpV39E4ocX1Y0UM2mpDJehX3ERozgps1cBj/P0EXkEF1MQ461Gv?= =?iso-8859-1?Q?QPTS5JDc6XKcoz+xTl88rxH/CsgxHmChjqU4NLUY7CEk4NJqxEQlHpl4gK?= =?iso-8859-1?Q?t2S233nChixGKRxwOlQoh8PhWvHK3wwz4guDOoUspxmvPSyr2vHP2zr865?= =?iso-8859-1?Q?1VXz6WJFIIHh5ngcZo1Vn8jqXW4/fi7c1OnWnyJCN2sMhvlwzmsR4n5VUw?= =?iso-8859-1?Q?+7Jtin8nFID2oDEci9qvHmehjl5ZSBxq1DTVgVsYtSuS6bUuwBRtmd7ZP7?= =?iso-8859-1?Q?xRUXIS7Bz4t+J8yRABgjHjrpv6sQFi4oICrFNsTujoiECO3PBJ/42UirAB?= =?iso-8859-1?Q?Nwjmgy5O78HxWe5xbla8bD6Y0XcpsUaI6qJjCXDgtPGha+TyTQ9RXxX3ON?= =?iso-8859-1?Q?fylnqJOVDK89VcKW6PprAl/uc7kdkDLEsGdTotRdX33Kisew1uqJPL3cqv?= =?iso-8859-1?Q?Fhz/15lUhVV3NUZUWpJC7qId1ziogO3qqQdpO6PC/SzX0TlLZjAS6kJ62B?= =?iso-8859-1?Q?VHFdYq6Wok/1CSoVbIyohgIAYNhfbEUttjwHHE4XwzyXbpfgLnmWT9VXgH?= =?iso-8859-1?Q?I38A6aJaRP6cnoTkZ0ouJ1grRlAVFqdc9XA5ZqBdUBBiFBpqB8GJRV+fqb?= =?iso-8859-1?Q?VqMX9DZWEzgo4jyBe2IJ+AT2mFqJx9DmR7H7UaI09o3Ri7H5hYaLK3DnWB?= =?iso-8859-1?Q?OuRqcso5r6WsNgnBkm/VoaH5BDAHpqcWqgsq4CpGF2kvkLVyfHwDf2uHXd?= =?iso-8859-1?Q?UB+YjMTKCkDeAJK3THag6ZGdqR7Pg+rwBJ5Wzn5gVJocfduetAtxu9clK2?= =?iso-8859-1?Q?pp7We+rQsrdXcrsZfu3LRPj6Dr4m7QXe9q/12nF65hha1nRoeiVbOpsC6d?= =?iso-8859-1?Q?K9DOMQOMbQMYbgJvX3RrU1jzhIiHH1e4ABZbyL3qTSanEJXfOF3PsTvsbJ?= =?iso-8859-1?Q?0I/682M/GhtK2IKabjq1sgT/M2lFZ8P6ZDnUM692Zx/ypR/V017U7KM6VX?= =?iso-8859-1?Q?EeI0WFT3d52nSDW+vOcXRS6my+OKv0Npmc9+w535R6D2ZeMjkiQkcrnb6J?= =?iso-8859-1?Q?HjkvTqNUI4pQYSQ+Evj7oJ0LH6lnhthKQ0Nf1rzo6vc0NtCG5CJXCX/8Pn?= =?iso-8859-1?Q?aCKXMl/Y+LjNbCDG6FGkZuMBbbmHcGhmLFhfBCSK2K6VhvgaLGSvr6X92B?= =?iso-8859-1?Q?kSoFwCNtV/o1DGyMO8JzITywT4BysgkGu53NHEJj5PnQLX/FYSXrqCasX4?= =?iso-8859-1?Q?xbaLqBmirrJ9VUhjMOlmlMBHnK6fycGZ34wzIvOLJtOa+abbjp9PS9zBtt?= =?iso-8859-1?Q?pLVxUAcAtblC/NFMzDa+xcsQ+sLwVX5y2XBaOOvPPJNhFSds/mwPVsSRS0?= =?iso-8859-1?Q?Gky5PzOmY8M3do1RayvpDr0xd2H8HaVbDnW01pMRWSOe4vX0KnMsBXqSAe?= =?iso-8859-1?Q?ISp2up6ICbmSj1hhirt9SN1Z62kjLKSh+yLIdWT3lM/gdJuNvTWp6dX5+v?= =?iso-8859-1?Q?nDvEOq6dT7xr1066haz3LURvU0C5WhIoE0ixSYCnaFcq0faR7pTfHhMDB7?= =?iso-8859-1?Q?8qWEarBpjhVXP1X0qQ7RD0KQanS7Eu8=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a9190c5-fb42-4786-14a5-08de964081b6 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2026 14:01:32.9857 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: GQSTdgcsnpCTFuBrISQgYJunRGnSzhjr49oHoa2BfOc67D68uv55RIUjs/ULILU2BlsZlm94ce2EQ+X6brIYgQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR03MB10964 X-purgate-ID: tlsNG-4011c0/1775743295-BC75F0B1-F72DEF5F/0/0 X-purgate-type: clean X-purgate-size: 3941 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1775743329642154100 Content-Type: text/plain; charset="utf-8" From: Stewart Hildebrand Export functions required for SR-IOV support. Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai Reviewed-by: Teddy Astie --- v2->v3: * move declarations to private.h v1->v2: * collect RBs --- xen/drivers/vpci/header.c | 20 +++++++++++--------- xen/drivers/vpci/private.h | 6 ++++++ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 96995e098b..5d5ba5c016 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -611,9 +611,9 @@ static void cf_check bar_write( pci_conf_write32(pdev->sbdf, reg, val); } =20 -static void cf_check guest_mem_bar_write(const struct pci_dev *pdev, - unsigned int reg, uint32_t val, - void *data) +void cf_check vpci_guest_mem_bar_write(const struct pci_dev *pdev, + unsigned int reg, uint32_t val, + void *data) { struct vpci_bar *bar =3D data; bool hi =3D false; @@ -653,8 +653,8 @@ static void cf_check guest_mem_bar_write(const struct p= ci_dev *pdev, bar->guest_addr =3D guest_addr; } =20 -static uint32_t cf_check guest_mem_bar_read(const struct pci_dev *pdev, - unsigned int reg, void *data) +uint32_t cf_check vpci_guest_mem_bar_read(const struct pci_dev *pdev, + unsigned int reg, void *data) { const struct vpci_bar *bar =3D data; uint32_t reg_val; @@ -826,8 +826,9 @@ int vpci_init_header(struct pci_dev *pdev) bars[i].type =3D VPCI_BAR_MEM64_HI; rc =3D vpci_add_register(pdev->vpci, is_hwdom ? vpci_hw_read32 - : guest_mem_bar_read, - is_hwdom ? bar_write : guest_mem_bar_wr= ite, + : vpci_guest_mem_bar_read, + is_hwdom ? bar_write + : vpci_guest_mem_bar_write, reg, 4, &bars[i]); if ( rc ) goto fail; @@ -885,8 +886,9 @@ int vpci_init_header(struct pci_dev *pdev) bars[i].prefetchable =3D val & PCI_BASE_ADDRESS_MEM_PREFETCH; =20 rc =3D vpci_add_register(pdev->vpci, - is_hwdom ? vpci_hw_read32 : guest_mem_bar_r= ead, - is_hwdom ? bar_write : guest_mem_bar_write, + is_hwdom ? vpci_hw_read32 + : vpci_guest_mem_bar_read, + is_hwdom ? bar_write : vpci_guest_mem_bar_w= rite, reg, 4, &bars[i]); if ( rc ) goto fail; diff --git a/xen/drivers/vpci/private.h b/xen/drivers/vpci/private.h index 6fdf8a20d9..f012fd160d 100644 --- a/xen/drivers/vpci/private.h +++ b/xen/drivers/vpci/private.h @@ -141,6 +141,12 @@ static inline size_t vmsix_table_size(const struct vpc= i *vpci, unsigned int nr) /* Map/unmap the BARs of a vPCI device. */ int vpci_modify_bars(const struct pci_dev *pdev, uint16_t cmd, bool rom_on= ly); =20 +void cf_check vpci_guest_mem_bar_write(const struct pci_dev *pdev, + unsigned int reg, uint32_t val, + void *data); + +uint32_t cf_check vpci_guest_mem_bar_read(const struct pci_dev *pdev, + unsigned int reg, void *data); #endif /* __XEN__ */ =20 #endif /* VPCI_PRIVATE_H */ --=20 2.51.2 From nobody Thu Apr 9 17:03:59 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1775743331; cv=pass; d=zohomail.com; s=zohoarc; b=AHAWZbAnt0stx0ZHwi5aZId0zCktGL0sHDLDAMUhzPIZLOEjCgZdQDaE8QV0kd6xTsgyVx9PsSnk0lbmALPHhl+YZ3gp/0J48cNMKE39xO7vGYE2WJ/JEjILHTPwpxYeuDcCeq0NApwLx9zkp9vffMMyukjp7FUl7i9nKgsFl1s= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775743331; 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=hPQVTLxWRQ60hfmvN0+wWwI02S8IMGs3j9kDRZXC1Zk=; b=S/ZO6jQ9pvreJaEBYPfsZC8swEhdKP/zlWJ22bc2acgkmLtZlfzrEhHEooaQwycPQnwjiXD7tX+TH3jPMPMGO2gnakUorOc1Kxn32tgyOTGQxnsTuJh6RgVrInG0inLQrToCLgE55JNhuMeiygUkoep/TFXXOqu7+9LOPoFJOW0= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1775743331015917.5767117509289; Thu, 9 Apr 2026 07:02:11 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1277473.1562664 (Exim 4.92) (envelope-from ) id 1wApww-0004QZ-74; Thu, 09 Apr 2026 14:01:38 +0000 Received: by outflank-mailman (output) from mailman id 1277473.1562664; Thu, 09 Apr 2026 14:01:38 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApww-0004P1-0W; Thu, 09 Apr 2026 14:01:38 +0000 Received: by outflank-mailman (input) for mailman id 1277473; Thu, 09 Apr 2026 14:01:36 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwu-0004KK-Ee for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 14:01:36 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wApwt-009p7l-Qj for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 16:01:35 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d7b13f-2eae-0a2a0a5409dd-0a2a450ad274-0 for ; Thu, 09 Apr 2026 16:01:35 +0200 Received: from [52.101.66.132] (helo=DUZPR83CU001.outbound.protection.outlook.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d7b13e-ee98-0a2a450a0019-34654284bb10-5 for ; Thu, 09 Apr 2026 16:01:35 +0200 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by PA3PR03MB10964.eurprd03.prod.outlook.com (2603:10a6:102:4b2::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Thu, 9 Apr 2026 14:01:33 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9769.016; Thu, 9 Apr 2026 14:01:33 +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=epam.com header.i="@epam.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=j4mzQz/OxV9ZzK4qNByiRxA7LFCnSRHxgN/I0V6cV5EkXJ9uBQKvxDXPw9eXBXeAEJmwTahhhjU/aPJVasuafEaY8YEj+QlDQ22pShFFByw36DoP8q8tTcbvJP4ylWgfairMu90qdp+LN0syuay/1wsdkwneVgYifjt8LEdF7O6FcVdWk13mrtZqpLVKN3NTc6M6tW7uaj2+7tzP41o3VqO54s4EDqw1PYF2REQhub5fCYUtAzBffw0itQN/F/OHK4lnaeIhWEitir9rBxrlJnt2cIyjMw9iA5qXPTKbJQJBb7ZMeIGcymHcXayjuQXT6cG6HelQ97956lmppsoEIQ== 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=hPQVTLxWRQ60hfmvN0+wWwI02S8IMGs3j9kDRZXC1Zk=; b=FtEIonZBZ+TO/K8h+BPegSrNorlxnkiMO7RVpTLUctEWL5RsxqEGB01hFYLqw0G21maoN0Jxmnj5KKPxgp2W9b9SQnhkQwo2Y/C3vQGPwEsX5vE4/JubfSS88b0U7IakCSP1C84JmJRia2+OLIb6EvhhBkjXUJQ6x2zvmjf3gRVW5WJ4Lo/f8rIxL1tz0gbkbytNZbnosT5CGM68qlgscOmdtBeI22/hxNCgxHfCxdRxwFfGl+okKcNntcEagqrS1vPrumg6ekqxISc9pL4P+Kk7Tgy6YeHDdXdpIWT/ImJG3U/S8k4WImzKKlBAuOz+eQo2snzD6bopCHdMN8AlYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hPQVTLxWRQ60hfmvN0+wWwI02S8IMGs3j9kDRZXC1Zk=; b=V6n0mairp1qgBp982owTpF8ibdcIRKTUhc6TJNjE2mAb9m6tcOkzIpaft3p3OQOcEKQRBXj/ajHnLZnxSNjmeu8YC1rvoqCEJ8QgcIjgytRLeFWgkicc23M+55zoVCUo5q5yqsJyF8xEHNxm/qplcd7ued0ysNY3hX1Zw/CSaQshhCR5aeAlO3sE60EZbLZtlvbHrV3G0OzEA57g4UzrGNz8vsagjZqO/qGSE/b8FS5cJXu0lyTAaN00fgYy/4arCRvzm+5082xxjFH4okFTUesJz7zLKX4z8g1w9GuJeQKE+4UOIiOR39zoWsQMWHCxdhPUIHPl+SxjKdKWu5H+Iw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , =?iso-8859-1?Q?Roger_Pau_Monn=E9?= , Stefano Stabellini , Stewart Hildebrand , Mykyta Poturai Subject: [PATCH v3 3/7] vpci: Use pervcpu ranges for BAR mapping Thread-Topic: [PATCH v3 3/7] vpci: Use pervcpu ranges for BAR mapping Thread-Index: AQHcyClfMSASW2EWZE+braifNCmgUg== Date: Thu, 9 Apr 2026 14:01:33 +0000 Message-ID: <51223761a1f2b8f1e901062d1e59dad934300f0e.1775742115.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|PA3PR03MB10964:EE_ x-ms-office365-filtering-correlation-id: 611f577e-c472-4751-c8e5-08de964081f1 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|38070700021|22082099003|56012099003|18002099003; x-microsoft-antispam-message-info: jLMR4m5QTdjyZ7A5jFX7KutZ3xNHlx7KSFZwRfSuOdgsAye266cVXDZ2vyd6YNGg0wM9uUrQM9drY43/o6kKK/4IgdWXO4f7NdgfYLmRjtOCA3PZe7TjkqIj/6PjTj7DUFZbl28KpqA+RkeCWhYdB+hGnU79/iddN8jQfsiM/CHc3Qe7msJ0s0S9OvSUmi+3biQHtlMt6Zwz+XnmJrjomFTYgmO+oFfEggq/zAEeaafLasMWwgTbqO77x9miE5G92ThQ+tdIC5j1bMW64bwRwCfpPE6Upce5mRON/UzOYe632gg8l8NTNzPsPi8uLz3wHueoTyGg2xClkyCxynaZba+d6WmXH7EVerE9A3+D91RIYHV/CV27ydi8cwBatEMrnzILrc9WIFsLkWiQxLDPrsj/GurZYjQjzeSuhVRD8kvvEp6WMmSv2A8QS1cIz+hjvGesQnWO7iTzsFTof7BfODwBm901WM10i26gLZmACGPbyxMHP9yeYBwW0G0Df7rVuIxXcEvTjgLOHb2XDjiodjfw0cP2r9x4UT9iXGMtGwbKODZfS8Uz+lGGv9j2Le7gn9pr4dX+e9PUcVLbukECaSjtiPdqZ+98mADbz7tmKXeZhU/JWMKT17gI38V0Uopdv260U3YhT9Yz90sQ9sl6q2ouErphI/E2XD5fp2vI8cr0f7FnfHFtyFgHMdjoJZiE2r1Lf/PrCX9hJCJ782NhzrEdgWjEsAFbHHOsqzyKcY3HV9ul67oYVdo6uPSMZBz4 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(38070700021)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?3BEZxaFIdID4k2Ca3BTRhz53SQPnMzUqYgM0ZuTvJiitm0/Y0V7RiJlY+S?= =?iso-8859-1?Q?DEbe9FCcR1gcliRNlLmvVPO91sKaAByNn65mT5O9t3/CkRMSouixSKGmuQ?= =?iso-8859-1?Q?G0uahcmO3RO5585+JWokCgjnAzglWMabSUCLq2DdbXYF3HDG79u4jC1oXt?= =?iso-8859-1?Q?XEN00igOvp+G/nSYRJLTogOHxr2WO3pSVBMJVP6VTEz4lblTO2AhnvG+YA?= =?iso-8859-1?Q?makkGtEe4d1TNNlrlKh2Bl9tZwZzRZpMFM4i3YEdufulv/1/d1FiEKaz10?= =?iso-8859-1?Q?tWAXAB52Fuh5dqKCalrcks2Bk+pApiblYVCEWT5U6MGDXutbRqkkkazZXu?= =?iso-8859-1?Q?Rp00JYlhgUEfIYdKF7K6WBDcGFx6FrDo1bagW4ErAz1d4f63hG43FrzjDO?= =?iso-8859-1?Q?NvLE3rWfxMqQlFdDyPIunVzWoStl9fHip7pkQMDeN556jNGOlsMETcLOwK?= =?iso-8859-1?Q?Soj/NPk4UMLxdK4XcqHUpdYUsFiB2WMH3xHjVlWKZBxKwJ3DUqJ9MVs2+k?= =?iso-8859-1?Q?WbrhE3nVGJAkc4fxVFXDq7vY+3dr2NfLMkDPrA9bSi3VkB3genIQu9OYtx?= =?iso-8859-1?Q?2UgWQy+B5ttsmI/cZ+8ctN3qL8gf2ZPdvzp8NZ2H9DBn792Hli9KlXk771?= =?iso-8859-1?Q?f/w1pIq0JMljdokrP7esyBb7RxLwEDqt2KRWq9Kq0gkJMyp0ParI1r1TPd?= =?iso-8859-1?Q?bpIjDMKj+kZzifP1/QF+v+vFL7QvhvZh5PqxxauZWHudj2pphFiCtIV/Uq?= =?iso-8859-1?Q?QHNIqWQT0hWsEG+Nh/8KJZKRK/VYVGxh86quyIG61mkZ0h/9qOacxe+2Hs?= =?iso-8859-1?Q?FRlJfMnxGU+S6TDUZVkm3gMrkBMHYQ4h8Nd3B3kyrDvvi8iAj+LeXWui5E?= =?iso-8859-1?Q?ajO0mRz/KhMHuWRyPNBIaOQyGcno2zXoZVGU0XRA1+GvnO28my3BtNx9PV?= =?iso-8859-1?Q?+AwqyFNwiGJc3tSxcsO6zPhzJI3Ysm6CjoR9qLqETTBOq0Ik7dnq3V1cba?= =?iso-8859-1?Q?7HmC9yIQSumH0Ar+MuxWwBIOFScTlWrAw4ht4w/hHAqBGsdCvqlEKd2I7a?= =?iso-8859-1?Q?vuektW+qBs/nh2Ww93Q/ASnXJueMq1Ofszg0UZAghxLXzDgD59fSfOvfAZ?= =?iso-8859-1?Q?aAJdE6+/RUlfOiyS+w0b6VDhdE+n29XsoKTC8xi8RscwHECEIRy2tu10NT?= =?iso-8859-1?Q?1g6vva6leKciAWM0TgBvfabzG9OV9bQvLdV/gUHQMNZ4SzDXATHxGC2XiQ?= =?iso-8859-1?Q?bmez3a7gnkxHuEvTyRNdk5GCh5ezuUDtNACUKNBSR72+4N4eYIK9afU/hi?= =?iso-8859-1?Q?p4SxlbC8jjOjPvdn/9fRRKYLKp1FXW+dgSx7fgB5WHwc68JIPG1MT6Lhxb?= =?iso-8859-1?Q?/ibqwOYW1O0uWzX7a7h3ZK3ZNBD9nMgy2DEROtTbv7TyAznr1vw3oooiRu?= =?iso-8859-1?Q?7LC+P/o3mJK1I/RTCMmWuoPTv7dmRLXcs6O8FXwdbSX/xZr5iCqVbxUpKK?= =?iso-8859-1?Q?PraCJ1t1z2RwENtzwcEJBuPT/yR5DnZ1mbDPGS8t0fwdFKT+tLGZ11wR7v?= =?iso-8859-1?Q?rf6rpVThtQ2sWqqshOf3dQUPxzOgiGcSLod1J5o8C5IpJMYe0CzhxnKjVj?= =?iso-8859-1?Q?twic3u7YWS1j0k5cUM25ca6GIQZA/JjNOj/Zzna+aMISLfh2ny7S/51P4D?= =?iso-8859-1?Q?SDY0UccjBZ5yZYK1PIo7ft9IiaF+3eeMweOs6hK9BvH47mwbNtfQF672QH?= =?iso-8859-1?Q?qgFwVZG1Zg0brHYf/jkIzyc/nBWGk5vk1kyiX6IYcsteBOTCOt+sHakhVt?= =?iso-8859-1?Q?hXBJimYoPCttYxonejt88GfbPaJoJV8=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 611f577e-c472-4751-c8e5-08de964081f1 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2026 14:01:33.4406 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: rGfq3kFHgn8zDDulq8LZ5FpblFsvcYG9XHoaSxoc62tW+8PCNJZ8uzTwLig00532d2XDOKt6hyeWPCGuHzLCOA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR03MB10964 X-purgate-ID: tlsNG-4011c0/1775743295-BDB550B1-0B871F89/0/0 X-purgate-type: clean X-purgate-size: 13892 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1775743332965158500 Content-Type: text/plain; charset="utf-8" From: Mykyta Poturai There is no need to store ranges for each PCI device, as they are only used during the mapping/unmapping process and can be reused for each device. This also allows to avoid the need to allocate and destroy rangesets for each device. Move the rangesets from struct vpci_bar to struct vpci_vcpu and perform (de-)allocation with vcpu (de-)allocation. Introduce RANGESET_DESTROY() macro to free a rangeset and set the pointer to NULL. Amends: 622bdd962822 ("vpci/header: handle p2m range sets per BAR") Signed-off-by: Mykyta Poturai Signed-off-by: Stewart Hildebrand --- v2->v3: * synced with BAR write with memory decoding enabled series[1] * add Amends tag * remove unused variable i due to rebasing over 998060dd9101 ("vPCI: move vpci_init_capabilities() to a separate file") * enclose entire struct vpci_vcpu inside #ifdef __XEN__ * s/bar_mem/mem/ * use ARRAY_SIZE * put init/destroy in functions * only allocate for domains with vPCI and idle domain * replace 'if ( !mem ) continue;' with ASSERT v1->v2 * new patch [1]: https://patchew.org/Xen/20260406191203.97662-1-stewart.hildebrand@amd.= com/ --- xen/common/domain.c | 5 +++ xen/drivers/vpci/header.c | 67 ++++++++++++++------------------------ xen/drivers/vpci/vpci.c | 34 ++++++++++++++++--- xen/include/xen/rangeset.h | 7 ++++ xen/include/xen/vpci.h | 10 ++++-- 5 files changed, 73 insertions(+), 50 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index bb9e210c28..5ef7db8f09 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -455,6 +455,8 @@ static int vcpu_teardown(struct vcpu *v) */ static void vcpu_destroy(struct vcpu *v) { + vpci_vcpu_destroy(v); + free_vcpu_struct(v); } =20 @@ -512,6 +514,9 @@ struct vcpu *vcpu_create(struct domain *d, unsigned int= vcpu_id) if ( arch_vcpu_create(v) !=3D 0 ) goto fail_sched; =20 + if ( vpci_vcpu_init(v) ) + goto fail_sched; + d->vcpu[vcpu_id] =3D v; if ( vcpu_id !=3D 0 ) { diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 5d5ba5c016..5bfb541b6a 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -196,6 +196,7 @@ bool vpci_process_pending(struct vcpu *v) for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) { struct vpci_bar *bar =3D &header->bars[i]; + struct rangeset *mem =3D v->vpci.mem[i]; struct map_data data =3D { .d =3D v->domain, .map =3D v->vpci.cmd & PCI_COMMAND_MEMORY, @@ -203,10 +204,10 @@ bool vpci_process_pending(struct vcpu *v) }; int rc; =20 - if ( rangeset_is_empty(bar->mem) ) + if ( rangeset_is_empty(mem) ) continue; =20 - rc =3D rangeset_consume_ranges(bar->mem, map_range, &data); + rc =3D rangeset_consume_ranges(mem, map_range, &data); =20 if ( rc =3D=3D -ERESTART ) { @@ -224,8 +225,8 @@ bool vpci_process_pending(struct vcpu *v) =20 /* Clean all the rangesets */ for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) - if ( !rangeset_is_empty(header->bars[i].mem) ) - rangeset_purge(header->bars[i].mem); + if ( !rangeset_is_empty(v->vpci.mem[i]) ) + rangeset_purge(v->vpci.mem[i]); =20 v->vpci.pdev =3D NULL; =20 @@ -260,13 +261,14 @@ static int __init apply_map(struct domain *d, const s= truct pci_dev *pdev, for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) { struct vpci_bar *bar =3D &header->bars[i]; + struct rangeset *mem =3D current->vpci.mem[i]; struct map_data data =3D { .d =3D d, .map =3D true, .bar =3D bar }; =20 - if ( rangeset_is_empty(bar->mem) ) + if ( rangeset_is_empty(mem) ) continue; =20 - while ( (rc =3D rangeset_consume_ranges(bar->mem, map_range, - &data)) =3D=3D -ERESTART ) + while ( (rc =3D rangeset_consume_ranges(mem, map_range, &data)) = =3D=3D + -ERESTART ) { /* * It's safe to drop and reacquire the lock in this context @@ -331,13 +333,13 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) { struct vpci_bar *bar =3D &header->bars[i]; + struct rangeset *mem =3D current->vpci.mem[i]; unsigned long start =3D PFN_DOWN(bar->addr); unsigned long end =3D PFN_DOWN(bar->addr + bar->size - 1); unsigned long start_guest =3D PFN_DOWN(bar->guest_addr); unsigned long end_guest =3D PFN_DOWN(bar->guest_addr + bar->size -= 1); =20 - if ( !bar->mem ) - continue; + ASSERT(mem); =20 if ( !MAPPABLE_BAR(bar) || (rom_only ? bar->type !=3D VPCI_BAR_ROM @@ -354,7 +356,7 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) continue; } =20 - ASSERT(rangeset_is_empty(bar->mem)); + ASSERT(rangeset_is_empty(mem)); =20 /* * Make sure that the guest set address has the same page offset @@ -369,7 +371,7 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) return -EINVAL; } =20 - rc =3D rangeset_add_range(bar->mem, start_guest, end_guest); + rc =3D rangeset_add_range(mem, start_guest, end_guest); if ( rc ) { printk(XENLOG_G_WARNING "Failed to add [%lx, %lx]: %d\n", @@ -380,12 +382,12 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) /* Check for overlap with the already setup BAR ranges. */ for ( j =3D 0; j < i; j++ ) { - struct vpci_bar *prev_bar =3D &header->bars[j]; + struct rangeset *prev_mem =3D current->vpci.mem[j]; =20 - if ( rangeset_is_empty(prev_bar->mem) ) + if ( rangeset_is_empty(prev_mem) ) continue; =20 - rc =3D rangeset_remove_range(prev_bar->mem, start_guest, end_g= uest); + rc =3D rangeset_remove_range(prev_mem, start_guest, end_guest); if ( rc ) { gprintk(XENLOG_WARNING, @@ -395,7 +397,7 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) } } =20 - rc =3D pci_sanitize_bar_memory(bar->mem); + rc =3D pci_sanitize_bar_memory(mem); if ( rc ) { gprintk(XENLOG_WARNING, @@ -412,14 +414,14 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) unsigned long end =3D PFN_DOWN(vmsix_table_addr(pdev->vpci, i) + vmsix_table_size(pdev->vpci, i) - 1); =20 - for ( j =3D 0; j < ARRAY_SIZE(header->bars); j++ ) + for ( j =3D 0; j < ARRAY_SIZE(current->vpci.mem); j++ ) { - const struct vpci_bar *bar =3D &header->bars[j]; + struct rangeset *mem =3D current->vpci.mem[j]; =20 - if ( rangeset_is_empty(bar->mem) ) + if ( rangeset_is_empty(mem) ) continue; =20 - rc =3D rangeset_remove_range(bar->mem, start, end); + rc =3D rangeset_remove_range(mem, start, end); if ( rc ) { gprintk(XENLOG_WARNING, @@ -469,8 +471,9 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) for ( j =3D 0; j < ARRAY_SIZE(header->bars); j++) { const struct vpci_bar *bar =3D &header->bars[j]; + struct rangeset *mem =3D current->vpci.mem[j]; =20 - if ( !rangeset_overlaps_range(bar->mem, start, end) || + if ( !rangeset_overlaps_range(mem, start, end) || /* * If only the ROM enable bit is toggled check ag= ainst * other BARs in the same device for overlaps, bu= t not @@ -481,7 +484,7 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) bar->type =3D=3D VPCI_BAR_ROM) ) continue; =20 - rc =3D rangeset_remove_range(bar->mem, start, end); + rc =3D rangeset_remove_range(mem, start, end); if ( rc ) { gprintk(XENLOG_WARNING, @@ -734,18 +737,6 @@ static void cf_check rom_write( } } =20 -static int bar_add_rangeset(const struct pci_dev *pdev, struct vpci_bar *b= ar, - unsigned int i) -{ - char str[32]; - - snprintf(str, sizeof(str), "%pp:BAR%u", &pdev->sbdf, i); - - bar->mem =3D rangeset_new(pdev->domain, str, RANGESETF_no_print); - - return !bar->mem ? -ENOMEM : 0; -} - int vpci_init_header(struct pci_dev *pdev) { uint16_t cmd; @@ -856,10 +847,6 @@ int vpci_init_header(struct pci_dev *pdev) else bars[i].type =3D VPCI_BAR_MEM32; =20 - rc =3D bar_add_rangeset(pdev, &bars[i], i); - if ( rc ) - goto fail; - rc =3D pci_size_mem_bar(pdev->sbdf, reg, &addr, &size, (i =3D=3D num_bars - 1) ? PCI_BAR_LAST : 0); if ( rc < 0 ) @@ -913,12 +900,6 @@ int vpci_init_header(struct pci_dev *pdev) 4, rom); if ( rc ) rom->type =3D VPCI_BAR_EMPTY; - else - { - rc =3D bar_add_rangeset(pdev, rom, num_bars); - if ( rc ) - goto fail; - } } else if ( !is_hwdom ) { diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 0ac9ec8b04..d069ca6d9c 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -24,6 +24,35 @@ =20 #ifdef __XEN__ =20 +void vpci_vcpu_destroy(struct vcpu *v) +{ + if ( !has_vpci(v->domain) && !is_idle_domain(v->domain) ) + return; + + for ( unsigned int i =3D 0; i < ARRAY_SIZE(v->vpci.mem); i++ ) + RANGESET_DESTROY(v->vpci.mem[i]); +} + +int vpci_vcpu_init(struct vcpu *v) +{ + unsigned int i; + + if ( !has_vpci(v->domain) && !is_idle_domain(v->domain) ) + return 0; + + for ( i =3D 0; i < ARRAY_SIZE(v->vpci.mem); i++ ) + { + char str[32]; + + snprintf(str, sizeof(str), "%pv:BAR%u", v, i); + v->vpci.mem[i] =3D rangeset_new(v->domain, str, RANGESETF_no_print= ); + if ( !v->vpci.mem[i] ) + return -ENOMEM; + } + + return 0; +} + #ifdef CONFIG_HAS_VPCI_GUEST_SUPPORT static int assign_virtual_sbdf(struct pci_dev *pdev) { @@ -89,8 +118,6 @@ struct vpci_register *vpci_get_register(const struct vpc= i *vpci, =20 void vpci_deassign_device(struct pci_dev *pdev) { - unsigned int i; - ASSERT(rw_is_write_locked(&pdev->domain->pci_lock)); =20 if ( !has_vpci(pdev->domain) || !pdev->vpci ) @@ -116,9 +143,6 @@ void vpci_deassign_device(struct pci_dev *pdev) } spin_unlock(&pdev->vpci->lock); =20 - for ( i =3D 0; i < ARRAY_SIZE(pdev->vpci->header.bars); i++ ) - rangeset_destroy(pdev->vpci->header.bars[i].mem); - xfree(pdev->vpci); pdev->vpci =3D NULL; } diff --git a/xen/include/xen/rangeset.h b/xen/include/xen/rangeset.h index 817505badf..f01e00ec92 100644 --- a/xen/include/xen/rangeset.h +++ b/xen/include/xen/rangeset.h @@ -40,6 +40,13 @@ struct rangeset *rangeset_new( void rangeset_destroy( struct rangeset *r); =20 +/* Destroy a rangeset, and zero the pointer to it. */ +#define RANGESET_DESTROY(r) \ + ({ \ + rangeset_destroy(r); \ + (r) =3D NULL; \ + }) + /* * Set a limit on the number of ranges that may exist in set @r. * NOTE: This must be called while @r is empty. diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index 877aa391d1..b55bacbe6e 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -19,6 +19,9 @@ */ #define VPCI_MAX_VIRT_DEV (PCI_SLOT(~0) + 1) =20 +void vpci_vcpu_destroy(struct vcpu *v); +int vpci_vcpu_init(struct vcpu *v); + /* Assign vPCI to device by adding handlers. */ int __must_check vpci_assign_device(struct pci_dev *pdev); =20 @@ -54,7 +57,6 @@ struct vpci { uint64_t guest_addr; uint64_t size; uint64_t resizable_sizes; - struct rangeset *mem; enum { VPCI_BAR_EMPTY, VPCI_BAR_IO, @@ -152,14 +154,15 @@ struct vpci { #endif }; =20 +#ifdef __XEN__ struct vpci_vcpu { /* Per-vcpu structure to store state while {un}mapping of PCI BARs. */ const struct pci_dev *pdev; + struct rangeset *mem[ARRAY_SIZE(((struct vpci_header *)NULL)->bars)]; uint16_t cmd; bool rom_only : 1; }; =20 -#ifdef __XEN__ void vpci_dump_msi(void); =20 /* Arch-specific vPCI MSI helpers. */ @@ -204,6 +207,9 @@ bool vpci_ecam_read(pci_sbdf_t sbdf, unsigned int reg, = unsigned int len, #else /* !CONFIG_HAS_VPCI */ struct vpci_vcpu {}; =20 +static inline void vpci_vcpu_destroy(struct vcpu *v) { } +static inline int vpci_vcpu_init(struct vcpu *v) { return 0; } + static inline int vpci_reinit_ext_capabilities(struct pci_dev *pdev) { return 0; --=20 2.51.2 From nobody Thu Apr 9 17:03:59 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1775743351; cv=pass; d=zohomail.com; s=zohoarc; b=ldiIgNTtP8MvmBRGH6X7P0iFUEOtpRW11k3/W0Dx4wbjrOFmuHoMkO+VDaD6TQRLabmC+/e3vdhCtu4LTqLhtPlyc+Svrq/zEX3of7YoR1XnsN44lBkcdVNetWJtEM3RRn44SIpfa09WEPaMbhPEIdKBjxAZ6UPi7Hc9723O1kA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775743351; 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=UQwkJTTGndgcvnqVacB6LNy0pUr21sbFJFr9TW4FdOQ=; b=bqyULtaZDMYaLM8N+81SSyOO7MHAQe/WeByPUQZ+31hbKsSzLws6DgHMjsScW9YDnpkcR0GRDEb7j8z1rlNkgsybc5quu23jhr0+y9cgkTZ3ERov+7AKcX/VqZsy8ojXiYy6J1/wvuj1vg3S/OPk+95725OmDUN8/foEUGCELiE= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1775743351711558.3782026920355; Thu, 9 Apr 2026 07:02:31 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1277474.1562673 (Exim 4.92) (envelope-from ) id 1wApww-0004h4-TF; Thu, 09 Apr 2026 14:01:38 +0000 Received: by outflank-mailman (output) from mailman id 1277474.1562673; Thu, 09 Apr 2026 14:01:38 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApww-0004gj-NW; Thu, 09 Apr 2026 14:01:38 +0000 Received: by outflank-mailman (input) for mailman id 1277474; Thu, 09 Apr 2026 14:01:37 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwu-0004KR-O9 for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 14:01:36 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wApwu-009p7l-3q for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 16:01:36 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d7b13f-2eae-0a2a0a5409dd-0a2a450ad274-4 for ; Thu, 09 Apr 2026 16:01:36 +0200 Received: from [52.101.66.132] (helo=DUZPR83CU001.outbound.protection.outlook.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d7b13e-ee98-0a2a450a0019-34654284bb10-6 for ; Thu, 09 Apr 2026 16:01:36 +0200 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by PA3PR03MB10964.eurprd03.prod.outlook.com (2603:10a6:102:4b2::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Thu, 9 Apr 2026 14:01:34 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9769.016; Thu, 9 Apr 2026 14:01:34 +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=epam.com header.i="@epam.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=YQBSlquJ6sLIH1AEM91IajT/fKlV2joG6xtONqoofW7hfR9beDMMyGK784np027mSb94greTncRDPWeg3gtjymF3HVRCMkbUej2y19y66JXfN6qYsgVxNLu3df37Utmx5HIG0SzAFAD5JuH7dYOg0noY2AmUI6IdRL+Aka7vPkV2UkZE8LqYv7oh3rVwNxLNd0qLeGHI3p68gvafqineG/aGyJJ7EKjGoLtAl2dsSgMLO7x2DxvwNtxVpjFsChHnGanhFpFPSSQuBDw801G4pJz60Jdd4xLqQI4NiLxtMZnRP17AyevfRcEZbtvvTkvUKsQZNgj5EQo/K7tzE9ZbnQ== 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=UQwkJTTGndgcvnqVacB6LNy0pUr21sbFJFr9TW4FdOQ=; b=TyYh4qTGh277DuIJBcyWUCEnjeBdb/wr/w6MVeV/vDOezL39av4RW871IorNnd1yMv6ahzl0a0WWenTVQWw2I6cZN9RNvOYX2OyHk102OQAJlqQPSWCSYwYokFeB2wzE+zRztdeklAlWCDoJzeb5SHlchkMJCjp+PykdT7pcsaNt2t4MY4TIk5TYwakB+A0kuQMY4AdQZ2443cZ1uomjGtXNiGnOc+ntZxm16HZxrdxgPLnp9uv+dM1eessT+WKRQIozpQOV6BbjaX1Bd46QmVHEcItA29DIVGtUd3a6ETHCOAC8ZYHtxBkAfhm8pA+umpfx+U998OVx2I7hksSUdw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UQwkJTTGndgcvnqVacB6LNy0pUr21sbFJFr9TW4FdOQ=; b=ctNEyAYDDI7BRjMx7wY67oi4Gdxs/5MpU6Nqf6nJfa4T7isstI1GV4picuuEqM/PcqXyY12IIXPLd9AM0UnPRHrWX7FEvz+pNdeXdvM1n7HhaeKk/QqwBKiLXA4TVEyY8zlrTo/qG8raaBkNRAW8LBwvWlLNynVw8lNmPpPj3Q1vC1lOHmo7zt9ZdzGZZrbrTeW2Nq+ow1Lw3rPm3mrW8rlX9wA5hShcukfNt0ws4vWVZddGgqBhhpTNxZdO9vd6m3EL/8W0EKZByRrme2Y7sSMAQX5Wz+j81uH7bBdkZszLsgq4BfX7tlTfubJqn4XGlZ6s0rDKUPRORoFlh0icNQ== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Stewart Hildebrand , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , =?iso-8859-1?Q?Roger_Pau_Monn=E9?= , Stefano Stabellini Subject: [PATCH v3 4/7] vpci: allow queueing of mapping operations Thread-Topic: [PATCH v3 4/7] vpci: allow queueing of mapping operations Thread-Index: AQHcyClfiKiYHZL9uEi4zPN+JRCyeQ== Date: Thu, 9 Apr 2026 14:01:33 +0000 Message-ID: <97e3323363ab442ccb21a00d5ed0488b6672870a.1775742115.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|PA3PR03MB10964:EE_ x-ms-office365-filtering-correlation-id: f79b1c04-2a35-405e-ba38-08de96408235 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|38070700021|22082099003|56012099003|18002099003; x-microsoft-antispam-message-info: iQvUuNBanfGZTTbVzRyDDw7WoMfEoNUtRKK5mZCE6dvSmYLgMNLJNmOPeuDwvAEKTtxXCcxVpA7yngP4csDp6DFqV4roBce7k7OPEpb+VNV7QliHv2tmUrpp3YG73sWKXBgKt2UQsV8wYTKf/rknX1JVgTq2r8jPuj4Lqt4LbPEwoMq6NgNHYsa3mR7PmdBcw7mtRprpXw7iPyWBBIclImOn8yre1n+EC1zy/bKxaGPoAu7nW1lUOeJoG9NYAyGn5dtVQVeZ0XXuwFXk3RXzUdRc3ntV/Briutl4XdHjdQSJMG3hMszLOwgQJRiWA5QWKWTcu+d4Q51OT/ZjwluHEE/HI2tJo9ffdxowxkZ+Ey+G9ZIPqjwWIMHMFGt7OOhl49aRTsmC/+kMmrkKwRi8IoTpamkT4rFX9FFf36D+0KU7pt27/VFzTGMnHdd7DUMucDbOMp3DNS613F2DCUknBkyq2j1u2U+tVEBBzrQ4sjn4+pJwLysdU2tDvjOkwf5AHnr5dOin6adjN4JdVsSBlRcGyP+2v8Rq0nctTba6oOH5sICB+widaIakEFSQJZtu2RHgfcyDW7Cjeetil890NEymSNG8EgYnkv5S9chzmzzRKG6NKZ7od8COR5YXydSYypDyP+0VPiPkZuU6+gzny8aubdsB+R0+TPJ4vCWU48PGaBhmPNgYxC/vdDu6rn6KoaPTFNOeNCoNRT7YlnH0y2hBRrHFcJ1yrzzQyuolW3P/pIz2WGvMXANwQqWs1X/7 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(38070700021)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?hh5FNQkgfqw0j7HEStPyn11p2OHckYJuOZ6/LVra2fnF7JQLycHwX1/v1n?= =?iso-8859-1?Q?pxCyJdeNsr2o31xsO6LJ5jx+9QHmb7a80Xoy5hxzjrS5nkOvedT0mebB4p?= =?iso-8859-1?Q?nVkWBP36pIHjAafo1Z8o65Rp02gO1UAcyy7p4LwWviMJw+999vcIM9qUzc?= =?iso-8859-1?Q?OU0DoPOlVtMV2FTw+7NjZylJFZzIMn2QaJwQ49Lqjqcr9svp2KktLGO4Bp?= =?iso-8859-1?Q?Kbeu55+29yvqirA4xk1bKaFi4RWLPU0idwEjbYJ8EhJSdbc8EmhN6Z1dKX?= =?iso-8859-1?Q?5Ky0e0CVmGzJGuBThP6/8E9fB0HZNYJ/vdqHOtMuy0o/YGH1edSf7sp5UX?= =?iso-8859-1?Q?q5SJNQKpvEnLkrKqVyrU1aU/usC7LNttmReIH314mMebViBZxUZ8/lgzEt?= =?iso-8859-1?Q?12N2Z4rONBvcK5Ra5f982KEF/NEtKPMy2YvcGG0x5+sSow95GO9kNadq5P?= =?iso-8859-1?Q?0jVKmlg6W7fv4S3lt+SPsxwklbDVzA/VIp5zUH9IP0fReu5oNxJQkValK6?= =?iso-8859-1?Q?Ge635FOjjn8jyFtLe5aTWiDbB5WFi46QbzZIeJZHMwI+BkwXotAlX4XOuh?= =?iso-8859-1?Q?Guei6dczzpdzBv/VI7fRT46/CJhtEnMqWbafq0oRkd5EB+PuCS0PUQjtmv?= =?iso-8859-1?Q?g1KhuuymGrRK8buZ9wrU0Dx2zCAhTNvWblHE/Sq5O0EzYo0HsFNU7K/olg?= =?iso-8859-1?Q?ETVlFBQmAdostPhgeJpyddzc74m4WbFXcJpJgX9WJ8ffHO3pWYWPdQEGrE?= =?iso-8859-1?Q?3LOSNVrH+k/D0vYXX2BVkp3RpOhfRtPukOIvWiAz8lnE4b6DHIGeeq2uQ9?= =?iso-8859-1?Q?5pORdGQor4BphCwrRY3zW3oZr/cNH9PMNhZ28GH+LrxdbDWhV9YQfdXtsx?= =?iso-8859-1?Q?dhmKlM0L/Sg8AXsXEvCTMT5F4f3tWQurM7pZPzXDzMCxD9FHue/Kf8Odhy?= =?iso-8859-1?Q?vjrJxOl4Uk9oOj155M0pIvNprX5zlLgwS6OnfR7CZPVeohrUArs5HFxbTg?= =?iso-8859-1?Q?qfQZn6V9wSF4N69GHVKFcyxxlB5h2NBOrICmTgk9Au3msllAilZhgU+XXP?= =?iso-8859-1?Q?pvRbbOy6zBUNW2uZoGO163tawsHIynmRGFeOxI7IupU9iaK6ObJ4AV9NU5?= =?iso-8859-1?Q?q1uYBAMo3CxzyeL1bVOhz1x0U8rcouWculPspxT0rY2M1KaEdbqZrUn8Wb?= =?iso-8859-1?Q?q+0tvaO9TXhc8/SGn44W439cp/acfVrvMWOqYi+uQmY5rkNU70JA68e9yx?= =?iso-8859-1?Q?h5rfTQp0Gg6XNr5BRqYu4hkWZjuCGC+oVSyoMVsMg1vNQZ8yH/wQ3pw7He?= =?iso-8859-1?Q?IkMpo5qF23GjafQtzAS1SASfmL04vJxb7pHaf6WHvEkCYwpnAaUDHZTgie?= =?iso-8859-1?Q?RfORFrJGT+4lWmW0UqVJ0i0MArZsfUb+r2wJTErqbLdh5d3/7gIJIhs7sf?= =?iso-8859-1?Q?AjIo/TSPjJhPIZXhWQNdfXvsz1+PU2B4+m02Q3tL2sjdw6STgErvPOryYS?= =?iso-8859-1?Q?bxMY7yMU42+RuYFSXHjUPxQcouZSRfy1X8z3uZiI2fJVzwIFBmbWrvotTw?= =?iso-8859-1?Q?vPvTtwZ1DWDMkDe0/yEquMVO81/YMfZf4wPx6mDnqTtM3aHEZ9xfYx3Fpi?= =?iso-8859-1?Q?sDXS6cHVH61AYOMcS+l9tYnr7hsL6PTc4A5k/UVbdU7dFk3cx278tN3zeN?= =?iso-8859-1?Q?zVhl3IC5OSDh6pP7C79UPoAbEaYFTB6V27C15DnS6/0epZ0byFLzORGyP6?= =?iso-8859-1?Q?WdUSCeJVWRAwPTck72cilaDtMQNXZrbh6LClsBWnm0ybesu6EEa1KRGm8N?= =?iso-8859-1?Q?1e4xZkrJLcaZv9H9MKhTx0RjLOqXwPU=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f79b1c04-2a35-405e-ba38-08de96408235 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2026 14:01:33.9435 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: m8FagHfZBkVLGjLgkd2H5Gcl/wqByHWonaQBgqqvHo7Z4tFjCcUSLgou8oy1FS1IVQTONipQp7xr102DnTpHVg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR03MB10964 X-purgate-ID: tlsNG-4011c0/1775743296-0E74F0B1-B148B212/0/0 X-purgate-type: clean X-purgate-size: 19628 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1775743353770154100 Content-Type: text/plain; charset="utf-8" From: Stewart Hildebrand Introduce vPCI BAR mapping task queue. Store information needed to map/unmap BARs in struct vpci_map_task. Allow queueing of BAR map/unmap operations in a list, thus making it possible to perform multiple p2m operations associated with single PCI device. This is preparatory work for further changes that need to perform multiple unmap/map operations before returning to guest. At the moment, only a single operation will be queued. However, when multiple operations are queued, there is a check in modify_bars() to skip BARs already in the requested state that will no longer be accurate. Remove this check in preparation of upcoming changes. Signed-off-by: Stewart Hildebrand Message-ID: <20260406191203.97662-3-stewart.hildebrand@amd.com> --- v2->v3: * new patch in this series, borrowed from [1] [1]: https://patchew.org/Xen/20260406191203.97662-1-stewart.hildebrand@amd.= com/20260406191203.97662-3-stewart.hildebrand@amd.com/ --- xen/common/domain.c | 5 +- xen/drivers/vpci/header.c | 227 ++++++++++++++++++++++++++----------- xen/drivers/vpci/vpci.c | 28 +---- xen/include/xen/rangeset.h | 7 -- xen/include/xen/vpci.h | 21 ++-- 5 files changed, 179 insertions(+), 109 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index 5ef7db8f09..b1931be987 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -455,8 +455,6 @@ static int vcpu_teardown(struct vcpu *v) */ static void vcpu_destroy(struct vcpu *v) { - vpci_vcpu_destroy(v); - free_vcpu_struct(v); } =20 @@ -514,8 +512,7 @@ struct vcpu *vcpu_create(struct domain *d, unsigned int= vcpu_id) if ( arch_vcpu_create(v) !=3D 0 ) goto fail_sched; =20 - if ( vpci_vcpu_init(v) ) - goto fail_sched; + vpci_vcpu_init(v); =20 d->vcpu[vcpu_id] =3D v; if ( vcpu_id !=3D 0 ) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 5bfb541b6a..451cdd3a6f 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -23,6 +23,7 @@ #include #include #include +#include =20 #include =20 @@ -35,7 +36,7 @@ =20 struct map_data { struct domain *d; - const struct vpci_bar *bar; + const struct vpci_bar_map *bar; bool map; }; =20 @@ -174,32 +175,20 @@ static void modify_decoding(const struct pci_dev *pde= v, uint16_t cmd, ASSERT_UNREACHABLE(); } =20 -bool vpci_process_pending(struct vcpu *v) +static int vpci_process_map_task(const struct pci_dev *pdev, + struct vpci_map_task *task) { - const struct pci_dev *pdev =3D v->vpci.pdev; - struct vpci_header *header =3D NULL; unsigned int i; =20 - if ( !pdev ) - return false; - - read_lock(&v->domain->pci_lock); - - if ( !pdev->vpci || (v->domain !=3D pdev->domain) ) - { - v->vpci.pdev =3D NULL; - read_unlock(&v->domain->pci_lock); - return false; - } + ASSERT(rw_is_locked(&pdev->domain->pci_lock)); =20 - header =3D &pdev->vpci->header; - for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) + for ( i =3D 0; i < ARRAY_SIZE(task->bars); i++ ) { - struct vpci_bar *bar =3D &header->bars[i]; - struct rangeset *mem =3D v->vpci.mem[i]; + struct vpci_bar_map *bar =3D &task->bars[i]; + struct rangeset *mem =3D bar->mem; struct map_data data =3D { - .d =3D v->domain, - .map =3D v->vpci.cmd & PCI_COMMAND_MEMORY, + .d =3D pdev->domain, + .map =3D task->cmd & PCI_COMMAND_MEMORY, .bar =3D bar, }; int rc; @@ -210,58 +199,116 @@ bool vpci_process_pending(struct vcpu *v) rc =3D rangeset_consume_ranges(mem, map_range, &data); =20 if ( rc =3D=3D -ERESTART ) - { - read_unlock(&v->domain->pci_lock); - return true; - } + return rc; =20 if ( rc ) { spin_lock(&pdev->vpci->lock); /* Disable memory decoding unconditionally on failure. */ - modify_decoding(pdev, v->vpci.cmd & ~PCI_COMMAND_MEMORY, - false); + modify_decoding(pdev, task->cmd & ~PCI_COMMAND_MEMORY, false); spin_unlock(&pdev->vpci->lock); =20 - /* Clean all the rangesets */ - for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) - if ( !rangeset_is_empty(v->vpci.mem[i]) ) - rangeset_purge(v->vpci.mem[i]); + if ( !is_hardware_domain(pdev->domain) ) + domain_crash(pdev->domain); + + return rc; + } + } + + spin_lock(&pdev->vpci->lock); + modify_decoding(pdev, task->cmd, task->rom_only); + spin_unlock(&pdev->vpci->lock); + + return 0; +} + +static void destroy_map_task(struct vpci_map_task *task) +{ + unsigned int i; + + if ( !task ) + { + ASSERT_UNREACHABLE(); + return; + } + + for ( i =3D 0; i < ARRAY_SIZE(task->bars); i++ ) + rangeset_destroy(task->bars[i].mem); + + xvfree(task); +} + +static void clear_map_queue(struct vcpu *v) +{ + struct vpci_map_task *task; + + while ( (task =3D list_first_entry_or_null(&v->vpci.task_queue, + struct vpci_map_task, + next)) !=3D NULL ) + { + list_del(&task->next); + destroy_map_task(task); + } +} + +bool vpci_process_pending(struct vcpu *v) +{ + const struct pci_dev *pdev =3D v->vpci.pdev; + struct vpci_map_task *task; =20 - v->vpci.pdev =3D NULL; + if ( !pdev ) + return false; =20 + read_lock(&v->domain->pci_lock); + + if ( !pdev->vpci || (v->domain !=3D pdev->domain) ) + { + clear_map_queue(v); + v->vpci.pdev =3D NULL; + read_unlock(&v->domain->pci_lock); + return false; + } + + while ( (task =3D list_first_entry_or_null(&v->vpci.task_queue, + struct vpci_map_task, + next)) !=3D NULL ) + { + int rc =3D vpci_process_map_task(pdev, task); + + if ( rc =3D=3D -ERESTART ) + { read_unlock(&v->domain->pci_lock); + return true; + } =20 - if ( !is_hardware_domain(v->domain) ) - domain_crash(v->domain); + list_del(&task->next); + destroy_map_task(task); =20 - return false; + if ( rc ) + { + clear_map_queue(v); + break; } } v->vpci.pdev =3D NULL; =20 - spin_lock(&pdev->vpci->lock); - modify_decoding(pdev, v->vpci.cmd, v->vpci.rom_only); - spin_unlock(&pdev->vpci->lock); - read_unlock(&v->domain->pci_lock); =20 return false; } =20 static int __init apply_map(struct domain *d, const struct pci_dev *pdev, - uint16_t cmd) + struct vpci_map_task *task) { - struct vpci_header *header =3D &pdev->vpci->header; int rc =3D 0; unsigned int i; =20 ASSERT(rw_is_write_locked(&d->pci_lock)); =20 - for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) + for ( i =3D 0; i < ARRAY_SIZE(task->bars); i++ ) { - struct vpci_bar *bar =3D &header->bars[i]; - struct rangeset *mem =3D current->vpci.mem[i]; + struct vpci_bar_map *bar =3D &task->bars[i]; + struct rangeset *mem =3D bar->mem; struct map_data data =3D { .d =3D d, .map =3D true, .bar =3D bar }; =20 if ( rangeset_is_empty(mem) ) @@ -281,15 +328,52 @@ static int __init apply_map(struct domain *d, const s= truct pci_dev *pdev, } } if ( !rc ) - modify_decoding(pdev, cmd, false); + modify_decoding(pdev, task->cmd, false); =20 return rc; } =20 -static void defer_map(const struct pci_dev *pdev, uint16_t cmd, bool rom_o= nly) +static struct vpci_map_task *alloc_map_task(const struct pci_dev *pdev, + uint16_t cmd, bool rom_only) +{ + struct vpci_map_task *task; + unsigned int i; + + task =3D xvzalloc(struct vpci_map_task); + + if ( !task ) + return NULL; + + for ( i =3D 0; i < ARRAY_SIZE(task->bars); i++ ) + { + if ( !MAPPABLE_BAR(&pdev->vpci->header.bars[i]) ) + continue; + + task->bars[i].mem =3D rangeset_new(pdev->domain, NULL, + RANGESETF_no_print); + + if ( !task->bars[i].mem ) + { + destroy_map_task(task); + return NULL; + } + + task->bars[i].addr =3D pdev->vpci->header.bars[i].addr; + task->bars[i].guest_addr =3D pdev->vpci->header.bars[i].guest_addr; + } + + task->cmd =3D cmd; + task->rom_only =3D rom_only; + + return task; +} + +static void defer_map(const struct pci_dev *pdev, struct vpci_map_task *ta= sk) { struct vcpu *curr =3D current; =20 + ASSERT(!curr->vpci.pdev || curr->vpci.pdev =3D=3D pdev); + /* * FIXME: when deferring the {un}map the state of the device should not * be trusted. For example the enable bit is toggled after the device @@ -297,8 +381,8 @@ static void defer_map(const struct pci_dev *pdev, uint1= 6_t cmd, bool rom_only) * started for the same device if the domain is not well-behaved. */ curr->vpci.pdev =3D pdev; - curr->vpci.cmd =3D cmd; - curr->vpci.rom_only =3D rom_only; + list_add_tail(&task->next, &curr->vpci.task_queue); + /* * Raise a scheduler softirq in order to prevent the guest from resumi= ng * execution with pending mapping operations, to trigger the invocation @@ -313,11 +397,17 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) struct pci_dev *tmp; const struct domain *d; const struct vpci_msix *msix =3D pdev->vpci->msix; + struct vpci_map_task *task; unsigned int i, j; int rc; =20 ASSERT(rw_is_write_locked(&pdev->domain->pci_lock)); =20 + task =3D alloc_map_task(pdev, cmd, rom_only); + + if ( !task ) + return -ENOMEM; + /* * Create a rangeset per BAR that represents the current device memory * region and compare it against all the currently active BAR memory @@ -333,19 +423,18 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) { struct vpci_bar *bar =3D &header->bars[i]; - struct rangeset *mem =3D current->vpci.mem[i]; + struct rangeset *mem =3D task->bars[i].mem; unsigned long start =3D PFN_DOWN(bar->addr); unsigned long end =3D PFN_DOWN(bar->addr + bar->size - 1); unsigned long start_guest =3D PFN_DOWN(bar->guest_addr); unsigned long end_guest =3D PFN_DOWN(bar->guest_addr + bar->size -= 1); =20 - ASSERT(mem); + if ( !mem ) + continue; =20 if ( !MAPPABLE_BAR(bar) || (rom_only ? bar->type !=3D VPCI_BAR_ROM - : (bar->type =3D=3D VPCI_BAR_ROM && !header->rom_en= abled)) || - /* Skip BARs already in the requested state. */ - bar->enabled =3D=3D !!(cmd & PCI_COMMAND_MEMORY) ) + : (bar->type =3D=3D VPCI_BAR_ROM && !header->rom_en= abled)) ) continue; =20 if ( !pci_check_bar(pdev, _mfn(start), _mfn(end)) ) @@ -368,7 +457,8 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) gprintk(XENLOG_G_WARNING, "%pp: can't map BAR%u - offset mismatch: %#lx vs %#lx\= n", &pdev->sbdf, i, bar->guest_addr, bar->addr); - return -EINVAL; + rc =3D -EINVAL; + goto fail; } =20 rc =3D rangeset_add_range(mem, start_guest, end_guest); @@ -376,13 +466,13 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) { printk(XENLOG_G_WARNING "Failed to add [%lx, %lx]: %d\n", start_guest, end_guest, rc); - return rc; + goto fail; } =20 /* Check for overlap with the already setup BAR ranges. */ for ( j =3D 0; j < i; j++ ) { - struct rangeset *prev_mem =3D current->vpci.mem[j]; + struct rangeset *prev_mem =3D task->bars[j].mem; =20 if ( rangeset_is_empty(prev_mem) ) continue; @@ -393,7 +483,7 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) gprintk(XENLOG_WARNING, "%pp: failed to remove overlapping range [%lx, %lx]= : %d\n", &pdev->sbdf, start_guest, end_guest, rc); - return rc; + goto fail; } } =20 @@ -403,7 +493,7 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) gprintk(XENLOG_WARNING, "%pp: failed to sanitize BAR#%u memory: %d\n", &pdev->sbdf, i, rc); - return rc; + goto fail; } } =20 @@ -414,9 +504,9 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) unsigned long end =3D PFN_DOWN(vmsix_table_addr(pdev->vpci, i) + vmsix_table_size(pdev->vpci, i) - 1); =20 - for ( j =3D 0; j < ARRAY_SIZE(current->vpci.mem); j++ ) + for ( j =3D 0; j < ARRAY_SIZE(task->bars); j++ ) { - struct rangeset *mem =3D current->vpci.mem[j]; + struct rangeset *mem =3D task->bars[j].mem; =20 if ( rangeset_is_empty(mem) ) continue; @@ -427,7 +517,7 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) gprintk(XENLOG_WARNING, "%pp: failed to remove MSIX table [%lx, %lx]: %d\n", &pdev->sbdf, start, end, rc); - return rc; + goto fail; } } } @@ -471,7 +561,7 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) for ( j =3D 0; j < ARRAY_SIZE(header->bars); j++) { const struct vpci_bar *bar =3D &header->bars[j]; - struct rangeset *mem =3D current->vpci.mem[j]; + struct rangeset *mem =3D task->bars[j].mem; =20 if ( !rangeset_overlaps_range(mem, start, end) || /* @@ -490,7 +580,7 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint16= _t cmd, bool rom_only) gprintk(XENLOG_WARNING, "%pp: failed to remove [%lx, %lx]: %d\n", &pdev->sbdf, start, end, rc); - return rc; + goto fail; } } } @@ -513,12 +603,19 @@ int vpci_modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) * will always be to establish mappings and process all the BARs. */ ASSERT((cmd & PCI_COMMAND_MEMORY) && !rom_only); - return apply_map(pdev->domain, pdev, cmd); + rc =3D apply_map(pdev->domain, pdev, task); + destroy_map_task(task); + return rc; } =20 - defer_map(pdev, cmd, rom_only); + defer_map(pdev, task); =20 return 0; + + fail: + destroy_map_task(task); + + return rc; } =20 static void cf_check cmd_write( diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index d069ca6d9c..ce9fb5b357 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -24,33 +24,9 @@ =20 #ifdef __XEN__ =20 -void vpci_vcpu_destroy(struct vcpu *v) +void vpci_vcpu_init(struct vcpu *v) { - if ( !has_vpci(v->domain) && !is_idle_domain(v->domain) ) - return; - - for ( unsigned int i =3D 0; i < ARRAY_SIZE(v->vpci.mem); i++ ) - RANGESET_DESTROY(v->vpci.mem[i]); -} - -int vpci_vcpu_init(struct vcpu *v) -{ - unsigned int i; - - if ( !has_vpci(v->domain) && !is_idle_domain(v->domain) ) - return 0; - - for ( i =3D 0; i < ARRAY_SIZE(v->vpci.mem); i++ ) - { - char str[32]; - - snprintf(str, sizeof(str), "%pv:BAR%u", v, i); - v->vpci.mem[i] =3D rangeset_new(v->domain, str, RANGESETF_no_print= ); - if ( !v->vpci.mem[i] ) - return -ENOMEM; - } - - return 0; + INIT_LIST_HEAD(&v->vpci.task_queue); } =20 #ifdef CONFIG_HAS_VPCI_GUEST_SUPPORT diff --git a/xen/include/xen/rangeset.h b/xen/include/xen/rangeset.h index f01e00ec92..817505badf 100644 --- a/xen/include/xen/rangeset.h +++ b/xen/include/xen/rangeset.h @@ -40,13 +40,6 @@ struct rangeset *rangeset_new( void rangeset_destroy( struct rangeset *r); =20 -/* Destroy a rangeset, and zero the pointer to it. */ -#define RANGESET_DESTROY(r) \ - ({ \ - rangeset_destroy(r); \ - (r) =3D NULL; \ - }) - /* * Set a limit on the number of ranges that may exist in set @r. * NOTE: This must be called while @r is empty. diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index b55bacbe6e..e34f7abe6d 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -19,8 +19,7 @@ */ #define VPCI_MAX_VIRT_DEV (PCI_SLOT(~0) + 1) =20 -void vpci_vcpu_destroy(struct vcpu *v); -int vpci_vcpu_init(struct vcpu *v); +void vpci_vcpu_init(struct vcpu *v); =20 /* Assign vPCI to device by adding handlers. */ int __must_check vpci_assign_device(struct pci_dev *pdev); @@ -155,14 +154,23 @@ struct vpci { }; =20 #ifdef __XEN__ -struct vpci_vcpu { +struct vpci_map_task { /* Per-vcpu structure to store state while {un}mapping of PCI BARs. */ - const struct pci_dev *pdev; - struct rangeset *mem[ARRAY_SIZE(((struct vpci_header *)NULL)->bars)]; + struct list_head next; + struct vpci_bar_map { + uint64_t addr; + uint64_t guest_addr; + struct rangeset *mem; + } bars[ARRAY_SIZE(((struct vpci_header *)NULL)->bars)]; uint16_t cmd; bool rom_only : 1; }; =20 +struct vpci_vcpu { + const struct pci_dev *pdev; + struct list_head task_queue; +}; + void vpci_dump_msi(void); =20 /* Arch-specific vPCI MSI helpers. */ @@ -207,8 +215,7 @@ bool vpci_ecam_read(pci_sbdf_t sbdf, unsigned int reg, = unsigned int len, #else /* !CONFIG_HAS_VPCI */ struct vpci_vcpu {}; =20 -static inline void vpci_vcpu_destroy(struct vcpu *v) { } -static inline int vpci_vcpu_init(struct vcpu *v) { return 0; } +static inline void vpci_vcpu_init(struct vcpu *v) { } =20 static inline int vpci_reinit_ext_capabilities(struct pci_dev *pdev) { --=20 2.51.2 From nobody Thu Apr 9 17:03:59 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1775743328; cv=pass; d=zohomail.com; s=zohoarc; b=VYi4F4wA9VTMUkLufgodxM2yEKcnoh49B9nhSQUL+y149BGpTCV2lj4A9DTH3H3I7ysTZ+4/Q7pcWQOJtsX47smjfpjxT/k1QY76J0NR6/u5CMMewiVYLuKwXOd1ttv7eg5pKG+H6+zaHpqehkXbfQ48ahu04q84rodxDqLMZfM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775743328; h=Content-ID: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=QmeeysoLMrlqQddvQrdQFzA3r+gJYcNbbmdk3M+1ksc=; b=OZ+/MkTDcT7+27mfy/yYAo//PoLGmJi9zQNr1YN5rObsD6T/jtZxyoPvvEZN2tuE7QfoKPXQSofv0lAq6+JhK1lztAxGztUWdSEdpIR2bDofn+UspJaoNR4bmKYRjCNT+a2FT85Rk15eni5FkyEBOjJmyiVHDRbgsriJMoP3B3Y= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1775743328375626.3391569475285; Thu, 9 Apr 2026 07:02:08 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1277476.1562687 (Exim 4.92) (envelope-from ) id 1wApwx-0004xi-NG; Thu, 09 Apr 2026 14:01:39 +0000 Received: by outflank-mailman (output) from mailman id 1277476.1562687; Thu, 09 Apr 2026 14:01:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwx-0004vJ-Fs; Thu, 09 Apr 2026 14:01:39 +0000 Received: by outflank-mailman (input) for mailman id 1277476; Thu, 09 Apr 2026 14:01:37 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwv-0004Kc-CD for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 14:01:37 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wApwt-009WCF-6K for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 16:01:36 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d7b13b-5cb7-0a2a0a5109dd-0a2a4506a7c2-16 for ; Thu, 09 Apr 2026 16:01:36 +0200 Received: from [52.101.72.96] (helo=AM0PR02CU008.outbound.protection.outlook.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d7b140-0df0-0a2a45060019-34654860c82b-3 for ; Thu, 09 Apr 2026 16:01:36 +0200 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by PA1PR03MB10891.eurprd03.prod.outlook.com (2603:10a6:102:485::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Thu, 9 Apr 2026 14:01:34 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9769.016; Thu, 9 Apr 2026 14:01:34 +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=epam.com header.i="@epam.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=qvvQM1ljAODjqMe9aO2vS7qElbEu2RBqyVURteyr+NdvnwIkcMCgydISPR3C6HtCJVFx1VJwN0Gz4ZTXgYEzGgtftjneeDSiIUOFhGRH6z2NfQ3L3xnWzqYlBEve0qlxPlrvBNQktDAndUmZB2vISJfU9vdSdT++Jq7Kbv/jENeu2ZuG6zxxdQ69dHwQaMcWr6D4nNGjlhtn5FajTMH70NLOi3m9I117Bpk5sK1swo9qeDPACvbgGI4wQL4Fxt1b1AivkGxAE2EXYARrLAAJrybrNu2ALBUWbO/xbmSb/9oicbgr62oZGmZSlEkJ33rXr2IcYVIOYThpolVPTHIVxw== 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=QmeeysoLMrlqQddvQrdQFzA3r+gJYcNbbmdk3M+1ksc=; b=EcAUIRMI9D9b8nPS2H5ayMFQ6PbQkUhRnyFPDttAvv13Gp0VhW6LCcZpKG8Uuj/gq0H/fwZdWk8PlDMZAqXhazF/U8E+/yAfY1gJ9Wal5i0+Dyg0plgLRzIe6HyhyXVSXybPKpTiig38pjNymz4UP/SMfeNO5X8UJgmfYOPjudjl89tQZML8XMgCvbukJmpSCEX9eGjLRMLjch5tlH3evEDurIaYhSoaRNUZCeMHQmQMoO5TWRGFoG1fMt9MeTElRPy0HYA/kozYrUOm/pgSsfakaj/n6MUPAmq4IpM1RECQoHgJ1W3BDOzaDqeIr9H6uw/TrqBToKlKRj2BNJtseQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QmeeysoLMrlqQddvQrdQFzA3r+gJYcNbbmdk3M+1ksc=; b=faqTmKnO1qtJvYF5BBkUf8cQTaKi/rcG5md53O2Tyqc6c9fT6Rtw4qG7pv+9z2ugx230bqS+Ihi5eWpdcHzZNG4FBvGz1u+m+eP5mhqb27zHe4fNdb5BNtjiEZrDISsA8eNwdGQcMFeYXXu+PRCnHEEVQBfWf9FOBfpgR6wibT1XNFVHxwis0s4hyI89GFa4+ZzgAd+a3t9koevZ74kO90VFyYIhlhPN2X+gUVmsn6anWd0qVWAVDBljL8m1DXnfIBNuWCjADBC18+vWJS4RgylUetGSNDlONrgoNwu4+g81n/zFAOr20NzkPZ1hFzEyEIzeludNpTSZaTUwblhIMg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Stewart Hildebrand , =?utf-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?= , "Daniel P. Smith" , Mykyta Poturai Subject: [PATCH v3 5/7] vpci: add SR-IOV support for PVH Dom0 Thread-Topic: [PATCH v3 5/7] vpci: add SR-IOV support for PVH Dom0 Thread-Index: AQHcyClfuk/Yqk/9/E2oGahG1JP+sg== Date: Thu, 9 Apr 2026 14:01:34 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|PA1PR03MB10891:EE_ x-ms-office365-filtering-correlation-id: c81d0706-7d49-4031-055f-08de96408275 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|38070700021|56012099003|18002099003|22082099003; x-microsoft-antispam-message-info: Wxvn8yje6+sQZJQVlkHj9TaQj9Md0xmJWpx+ihSZISqQiSnU0sKJNSa9z+fbpr8ReekDUjKJ+soDYG658m3wxaDEYhfOqLVHhGaw1DuZxAR+duh8Bthzd/V8rTjXxOV3C8XgqeqbKmDmWgI+ttm/Icvpsx2p+Ut44a2N2UyLq7TxiDkZerlNNdNFYa9/ViEd+wvNWy2jzPtQxLI8yIeBbMRhR20u3A4wcmqB+v3/TZo0LCCWNzFIuSwIYC0Qh6GiwERRjWUJeqTJ8q8esmNCi3K6kvv80yGocbRR5U8wjqpKMV9tW9ZEzM/oUzQN6sWq8BonrLRIMV/U5mYpCzhVS1vsh1/tFuji6xPrCXfR94jr36t2wvwF7xGe2RFnydnOEl+N9VGkp10SVE92Zo4jxDiFMAorBcM+WEdZfya6V4JPuv/siFCuVvHl2vQRUcba6CA0KuAHbhBU04AAFgMd5U2brwNzMQfK9vyvsgi5d5kmidnPLTXv2uQqLVIFM4RlomMP8v12oaQzD9DW0T7BXvZotOHM9oSyS8o7oh89DVqEHvPTnsYiqJsTTQ9+zJvewScLxBz5b1MS1SS2CbyOkxHexqDhnRj/0AyGDWiyunSDv2Ah5I4lHB+vRgQfs/X+MlwiWjbYSoZ96+0CKKaRqLVKHS1MnGrWe+2zHF/bVLuEbmTVyLAlD1mNcKa1Z7ndWYrQj8oiD1pjqSPT7gnC5y8gh4eEGKSeZz5O36neYUWNjyPpcEGlNB2gGTFZ1vCDERrNHXGeyQ2Q+k7NheGGhCkcpwV8Ep1b4/WPD/xHvd0= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(38070700021)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Z2FENDUvcVoyK1g5MW1weldMUXZJcFdhTEx1dmJZMGFUaHRyZGJCdzFZdVJY?= =?utf-8?B?a29Gcy9GMUk5RHNGOGlaRjNBSy9zMWdzV1FNOHNRakJOUkwvUEl2bGxVREtD?= =?utf-8?B?a0dLUm40ckFLL3pzOEZNK2hVRjBJZ2pCR3c3RHY1WVV4RXNtNjFKMjlDM3cz?= =?utf-8?B?RmJNMDIxa202dlovTFhSNGRlWXRqSDNwbWpDUlJEOXBSclpkVERBS3ZGNVE4?= =?utf-8?B?NDEzRHRaTWxJUFZYSkt2Sy9QcEZtVUhnbUFuNkF2dnF5NktrWUlCRlpIbmky?= =?utf-8?B?eWQ1RkhNUjl4WmlXOUVuOWpwQ0FPd1Y2emlkbEp0enJyazdvVnV2NTBWMHcy?= =?utf-8?B?MTIxSWFoeU82L3dQc0trV253OUc4YWcxbUxlMUZiR09POU41NElKTDdWTWZH?= =?utf-8?B?QnZDUG51OWlCU0ZxNXZEVjNLVWlGOWV0a1dZV2Zhd2JJVGJYdmYxblhDdHRp?= =?utf-8?B?Tlk5RVl3Y21rZXhWSzhTeUUyNldFUW85MGQwUlZqMzFtdWlzV1diVHQyMnhD?= =?utf-8?B?MlQxc2tYSWlaVklXdlNZNHhlTGwrSG1EQWRXL0QvbnhSQmcwYzk5SHBISHRF?= =?utf-8?B?bGtDY29mRW5QZERDZmV6OUtJUFhiWXBTQnN3L21tREhwd3VRc2VaWUNGdlEw?= =?utf-8?B?UnNGTktlRkU0N2JzWGRIM1hZanlQWkwzcEFQL2o2c0tGVU5rRHY5THhEM01a?= =?utf-8?B?ZTBLa200ZVZNT1RxWDg0WVBKeUxvUFQwVVBobmVzeUlxMFhsbVJGWUJoYXh6?= =?utf-8?B?dWJlNUJqYWZXSGhERWFKQTR4ZmZhVnBJRXNnNC9NN2lUT3l2NFh1SjFiaFU5?= =?utf-8?B?bnFaMyszWHlwZHcrWU5CQTZkWktXY0E2SUVPTUd3V29FaFpYRlcrTUxMeHVr?= =?utf-8?B?NDlxOStLTlEzY3JuWXhPK1NGN3FpamZFRHpUUGxZZGtaNFVvaVc3VEd6aysz?= =?utf-8?B?bjcrMm56aXE2aGRZUXd0MmsxY2IyM0VIRnBycG1lM0VmMTQyaXRGTmtJcnFm?= =?utf-8?B?ZVdJQWNPU2NmMTJmYVYzT1N6b3RMcHFtRTcvR3dkMXREZmpTSzc2WlhZZU9Y?= =?utf-8?B?TGJLc3BsS1J3bisvOXJpZkE1MVBPUXFhSjhUYTJvcElpMlo4SFdSNFEzZVFJ?= =?utf-8?B?eGVONC9tWEZQVFRaTHpseVRIRTdodjNKNzdaTHpoQVNjSUhmYVRQZS85aWJv?= =?utf-8?B?MUE3Rm1pc3dlWjlYbHk2RHNiQ01zcjZ5a1dwVlVZRzY1ajZ6M1NCMFVlUFFZ?= =?utf-8?B?SWNMdEZYdkZ1TElnZlR0WHVFeWxRQVdPL2I3L3V5VjBNcmpwYkhhWGlKUU04?= =?utf-8?B?RzlLcUJGVjIrd0lzdWtGUUN3VEF5dktNOGNmUmE1aHpxbkNmTmpSanBlMmhL?= =?utf-8?B?bTYvN2ZrNkxyNzQ3ZWxuV3BRMVEyRDYyKzRZQy9UR0JZbDJOZ1BVVGJNM3F4?= =?utf-8?B?d01RSVZKdWRHQVhueVdGSDdETjh2bDlyUldRK2sxL0x4eWxpdGsvTTFIUStp?= =?utf-8?B?MVJ1dTVvSHIwVk9BQjFlcWg5azd4T3FuSnZQbit1OG8rUDJKMFJYU1B4ZGhZ?= =?utf-8?B?TlhDY0s3WjRZMnp5NjR2UFExQ0Z1TWY4eFNlYVp2d2wydXN4K1NEdEVqeTJQ?= =?utf-8?B?ekZXTWMwNlYyckluNWVNZ0s1cTkrQW92ZDI2WUhDTXoxSElaU0ErdGh1Qldx?= =?utf-8?B?YUhaMDlSV2pwL2lFd2JtRk05eTFUS3pHT2d4Z2N6Q1dUVE5vbHEzYnA1bXA5?= =?utf-8?B?YS9KVmc1VTRydFFBa3RwdWxDQXNzMnRwaS9lV2JoWThlOUQ3SUdrRTVZQ3dW?= =?utf-8?B?K1FtTjVlQ2diVFVLVjFQV1E5RklKRVBaMisya3h2aHFJaTQydnZocXVtLzdx?= =?utf-8?B?U0RqUVNTN2FVV2l1OTZzMEJ1bFdOQjhNN1JuN3pCNmhSRWxDUDlVY0FwRDNU?= =?utf-8?B?dURwcllEMUswTTdtVVFmZGhoQ0w2NjgzVzVrZ0IyVXlrS1RGdTFWcDBVUmhr?= =?utf-8?B?cWZoQXNGWnowbmdHQzVPU2Z4aFB6UlN4eEhEYnJQaDdIVHZIY1JuQzFoN1FP?= =?utf-8?B?SGZjMVpHVW1aWVVKOTZ1bkNtUjBZWWxnOVNuNkNsaklSTVZxdmsvenpobXl2?= =?utf-8?B?b1Q5ZHIvazZsK1ZUT2ZHM1pXemlMZ1ZaSkZIYzhnenQyZ3V5a2UrUkxObXZr?= =?utf-8?B?dkp3RHdyMGZWY29WSFFHMUUrbExRcUxFZ1EzRUtUNTVxdENxNGo2d0lXbmhX?= =?utf-8?B?YzBvdERVWHcxSHlOc0xQSHpCZzdVdG9hVk4zVTJjbnc5a1NlcWdZZmViSWVZ?= =?utf-8?B?MUxhT0s5aGp0WllSVWY1ZUhQY2ZBSmlMbDRMbHR1VWt1eWFVZWVmMkJpZGR3?= =?utf-8?Q?YdQVf4pmdVwcExdQ=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c81d0706-7d49-4031-055f-08de96408275 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2026 14:01:34.3371 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 4cXrbrxWbIxS8fFLnyiJ10C0mlCFtkgMSIdgrvDfCHp0K8VdTCRUCBT4qnzwyAixEaU38YnGzdr+nKAvEM80TQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR03MB10891 X-purgate-ID: tlsNG-16d1c6/1775743296-ADF2D3D8-CBD4BB90/0/0 X-purgate-type: clean X-purgate-size: 18856 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1775743329136158500 From: Stewart Hildebrand This code is expected to only be used by privileged domains, unprivileged domains should not get access to the SR-IOV capability. Implement RW handlers for PCI_SRIOV_CTRL register to dynamically map/unmap VF BARS. Recalculate BAR sizes before mapping VFs to account for possible changes in the system page size register. Also force VFs to always use emulated reads for command register, this is needed to prevent some drivers accidentally unmapping BARs. Discovery of VFs is done by Dom0, which must register them with Xen. Signed-off-by: Roger Pau Monn=C3=A9 Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai --- v2->v3: * rework adding VFs with multiple mapping operations support * use private.h * style fixes * fixup cleanup_sriov * emulate command register read for VFs v1->v2: * switch to VF discovery by Xen * fix sequential vpci_modify_bars calls * move documentation changes to a separate commit --- xen/drivers/vpci/Makefile | 1 + xen/drivers/vpci/header.c | 6 +- xen/drivers/vpci/private.h | 1 + xen/drivers/vpci/sriov.c | 314 +++++++++++++++++++++++++++++++++++++ xen/include/xen/vpci.h | 7 +- 5 files changed, 327 insertions(+), 2 deletions(-) create mode 100644 xen/drivers/vpci/sriov.c diff --git a/xen/drivers/vpci/Makefile b/xen/drivers/vpci/Makefile index 9793a4f9b0..8b0e3c03a7 100644 --- a/xen/drivers/vpci/Makefile +++ b/xen/drivers/vpci/Makefile @@ -1,3 +1,4 @@ obj-y +=3D cap.o obj-y +=3D vpci.o header.o rebar.o +obj-y +=3D sriov.o obj-$(CONFIG_HAS_PCI_MSI) +=3D msi.o msix.o diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 451cdd3a6f..a36285672e 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -869,7 +869,8 @@ int vpci_init_header(struct pci_dev *pdev) * PCI_COMMAND_PARITY, PCI_COMMAND_SERR, and PCI_COMMAND_FAST_BACK. */ rc =3D vpci_add_register_mask(pdev->vpci, - is_hwdom ? vpci_hw_read16 : guest_cmd_read, + is_hwdom && !pdev->info.is_virtfn + ? vpci_hw_read16 : guest_cmd_read, cmd_write, PCI_COMMAND, 2, header, 0, 0, is_hwdom ? 0 : PCI_COMMAND_RSVDP_MASK | @@ -900,6 +901,9 @@ int vpci_init_header(struct pci_dev *pdev) =20 header->guest_cmd =3D cmd; =20 + if ( pdev->info.is_virtfn ) + return vpci_vf_init_header(pdev); + /* Disable memory decoding before sizing. */ if ( !is_hwdom || (cmd & PCI_COMMAND_MEMORY) ) pci_conf_write16(pdev->sbdf, PCI_COMMAND, cmd & ~PCI_COMMAND_MEMOR= Y); diff --git a/xen/drivers/vpci/private.h b/xen/drivers/vpci/private.h index f012fd160d..8e0043ddbe 100644 --- a/xen/drivers/vpci/private.h +++ b/xen/drivers/vpci/private.h @@ -45,6 +45,7 @@ typedef struct { REGISTER_VPCI_CAPABILITY(PCI_EXT_CAP_ID_##name, name, finit, fclean, t= rue) =20 int __must_check vpci_init_header(struct pci_dev *pdev); +int __must_check vpci_vf_init_header(struct pci_dev *pdev); =20 int vpci_init_capabilities(struct pci_dev *pdev, bool ext_only); void vpci_cleanup_capabilities(struct pci_dev *pdev, bool ext_only); diff --git a/xen/drivers/vpci/sriov.c b/xen/drivers/vpci/sriov.c new file mode 100644 index 0000000000..ec6a7b84d5 --- /dev/null +++ b/xen/drivers/vpci/sriov.c @@ -0,0 +1,314 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Handlers for accesses to the SR-IOV capability structure. + * + * Copyright (C) 2026 Citrix Systems R&D + */ + +#include +#include +#include +#include "private.h" + +static int vf_init_bars(const struct pci_dev *vf_pdev) +{ + int vf_idx; + unsigned int i; + const struct pci_dev *pf_pdev =3D vf_pdev->pf_pdev; + struct vpci_bar *bars =3D vf_pdev->vpci->header.bars; + struct vpci_bar *physfn_vf_bars =3D pf_pdev->vpci->sriov->vf_bars; + unsigned int sriov_pos =3D pci_find_ext_capability(pf_pdev, + PCI_EXT_CAP_ID_SRIOV); + uint16_t offset =3D pci_conf_read16(pf_pdev->sbdf, + sriov_pos + PCI_SRIOV_VF_OFFSET); + uint16_t stride =3D pci_conf_read16(pf_pdev->sbdf, + sriov_pos + PCI_SRIOV_VF_STRIDE); + + vf_idx =3D vf_pdev->sbdf.sbdf - (pf_pdev->sbdf.sbdf + offset); + if ( vf_idx < 0 ) + return -EINVAL; + + if ( stride ) + { + if ( vf_idx % stride ) + return -EINVAL; + vf_idx /=3D stride; + } + + /* + * Set up BARs for this VF out of PF's VF BARs taking into account + * the index of the VF. + */ + for ( i =3D 0; i < PCI_SRIOV_NUM_BARS; i++ ) + { + bars[i].addr =3D physfn_vf_bars[i].addr + vf_idx * physfn_vf_bars[= i].size; + bars[i].guest_addr =3D bars[i].addr; + bars[i].size =3D physfn_vf_bars[i].size; + bars[i].type =3D physfn_vf_bars[i].type; + bars[i].prefetchable =3D physfn_vf_bars[i].prefetchable; + } + + return 0; +} + +static int map_vfs(const struct pci_dev *pf_pdev, uint16_t cmd) +{ + struct pci_dev *vf_pdev; + int rc; + + ASSERT(rw_is_write_locked(&pf_pdev->domain->pci_lock)); + + list_for_each_entry(vf_pdev, &pf_pdev->vf_list, vf_list) + { + rc =3D vpci_modify_bars(vf_pdev, cmd, false); + if ( rc ) + { + gprintk(XENLOG_ERR, "failed to %s VF %pp: %d\n", + (cmd & PCI_COMMAND_MEMORY) ? "map" : "unmap", + &vf_pdev->sbdf, rc); + return rc; + } + + vf_pdev->vpci->header.guest_cmd &=3D ~PCI_COMMAND_MEMORY; + vf_pdev->vpci->header.guest_cmd |=3D (cmd & PCI_COMMAND_MEMORY); + } + + return 0; +} + +static int size_vf_bars(const struct pci_dev *pf_pdev, unsigned int sriov_= pos, + uint64_t *vf_rlen) +{ + struct vpci_bar *bars; + unsigned int i; + int rc =3D 0; + + ASSERT(rw_is_write_locked(&pf_pdev->domain->pci_lock)); + ASSERT(!pf_pdev->info.is_virtfn); + ASSERT(pf_pdev->vpci->sriov); + + /* Read BARs for VFs out of PF's SR-IOV extended capability. */ + bars =3D pf_pdev->vpci->sriov->vf_bars; + /* Set the BARs addresses and size. */ + for ( i =3D 0; i < PCI_SRIOV_NUM_BARS; i +=3D rc ) + { + unsigned int idx =3D sriov_pos + PCI_SRIOV_BAR + i * 4; + uint32_t bar; + uint64_t addr, size; + + bar =3D pci_conf_read32(pf_pdev->sbdf, idx); + + rc =3D pci_size_mem_bar(pf_pdev->sbdf, idx, &addr, &size, + PCI_BAR_VF | + ((i =3D=3D PCI_SRIOV_NUM_BARS - 1) ? PCI_BAR= _LAST + : 0)); + + /* + * Update vf_rlen on the PF. According to the spec the size of + * the BARs can change if the system page size register is + * modified, so always update rlen when enabling VFs. + */ + vf_rlen[i] =3D size; + + if ( !size ) + { + bars[i].type =3D VPCI_BAR_EMPTY; + continue; + } + + bars[i].addr =3D addr; + bars[i].guest_addr =3D addr; + bars[i].size =3D size; + bars[i].prefetchable =3D bar & PCI_BASE_ADDRESS_MEM_PREFETCH; + + switch ( rc ) + { + case 1: + bars[i].type =3D VPCI_BAR_MEM32; + break; + + case 2: + bars[i].type =3D VPCI_BAR_MEM64_LO; + bars[i + 1].type =3D VPCI_BAR_MEM64_HI; + break; + + default: + ASSERT_UNREACHABLE(); + } + } + + rc =3D rc > 0 ? 0 : rc; + + return rc; +} + +static void cf_check control_write(const struct pci_dev *pdev, unsigned in= t reg, + uint32_t val, void *data) +{ + unsigned int sriov_pos =3D reg - PCI_SRIOV_CTRL; + struct vpci_sriov *sriov =3D pdev->vpci->sriov; + uint16_t control =3D pci_conf_read16(pdev->sbdf, reg); + bool mem_enabled =3D control & PCI_SRIOV_CTRL_MSE; + bool new_mem_enabled =3D val & PCI_SRIOV_CTRL_MSE; + bool enabled =3D control & PCI_SRIOV_CTRL_VFE; + bool new_enabled =3D val & PCI_SRIOV_CTRL_VFE; + int rc; + + ASSERT(!pdev->info.is_virtfn); + + if ( new_enabled =3D=3D enabled && new_mem_enabled =3D=3D mem_enabled ) + { + pci_conf_write16(pdev->sbdf, reg, val); + return; + } + + if ( mem_enabled && !new_mem_enabled ) + map_vfs(pdev, 0); + + if ( !enabled && new_enabled ) + { + size_vf_bars(pdev, sriov_pos, (uint64_t *)data); + + /* + * Only update the number of active VFs when enabling, when + * disabling use the cached value in order to always remove the sa= me + * number of VFs that were active. + */ + sriov->num_vfs =3D pci_conf_read16(pdev->sbdf, + sriov_pos + PCI_SRIOV_NUM_VF); + } + + if ( !mem_enabled && new_mem_enabled ) + { + rc =3D map_vfs(pdev, PCI_COMMAND_MEMORY); + + if ( rc ) + map_vfs(pdev, 0); + } + + pci_conf_write16(pdev->sbdf, reg, val); +} + +int vpci_vf_init_header(struct pci_dev *vf_pdev) +{ + const struct pci_dev *pf_pdev; + unsigned int sriov_pos; + int rc =3D 0; + uint16_t ctrl; + + ASSERT(rw_is_write_locked(&vf_pdev->domain->pci_lock)); + + if ( !vf_pdev->info.is_virtfn ) + return 0; + + pf_pdev =3D vf_pdev->pf_pdev; + ASSERT(pf_pdev); + + rc =3D vf_init_bars(vf_pdev); + if ( rc ) + return rc; + + sriov_pos =3D pci_find_ext_capability(pf_pdev, PCI_EXT_CAP_ID_SRIOV); + ctrl =3D pci_conf_read16(pf_pdev->sbdf, sriov_pos + PCI_SRIOV_CTRL); + + if ( (pf_pdev->domain =3D=3D vf_pdev->domain) && (ctrl & PCI_SRIOV_CTR= L_MSE) ) + { + rc =3D vpci_modify_bars(vf_pdev, PCI_COMMAND_MEMORY, false); + if ( rc ) + return rc; + + vf_pdev->vpci->header.guest_cmd |=3D PCI_COMMAND_MEMORY; + } + + return rc; +} + +static int cf_check init_sriov(struct pci_dev *pdev) +{ + unsigned int pos; + + ASSERT(!pdev->info.is_virtfn); + + pos =3D pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_SRIOV); + + if ( !pos ) + return 0; + + if ( xsm_resource_setup_pci(XSM_PRIV, pdev->sbdf.bdf) ) + { + printk(XENLOG_ERR + "%pp: SR-IOV configuration unsupported for unpriv %pd\n", + &pdev->sbdf, pdev->domain); + return -EACCES; + } + + pdev->vpci->sriov =3D xzalloc(struct vpci_sriov); + if ( !pdev->vpci->sriov ) + return -ENOMEM; + + /* + * We need to modify vf_rlen in control_write but we can't do it clean= ly + * from pdev because write callback only accepts const pdev. Moving vf= _rlen + * inside of struct vpci_sriov is also not possible because it is used + * before vpci init. So pass it here as additional data to not require + * dropping const in control_write. + */ + return vpci_add_register(pdev->vpci, vpci_hw_read16, control_write, + pos + PCI_SRIOV_CTRL, 2, &pdev->physfn.vf_rle= n); +} + +static int cf_check cleanup_sriov(const struct pci_dev *pdev, bool hide) +{ + unsigned int pos; + int rc; + + if ( !pdev->vpci->sriov ) + return 0; + + ASSERT(!pdev->info.is_virtfn); + ASSERT(list_empty(&pdev->vf_list)); + + if ( !hide ) + { + XFREE(pdev->vpci->sriov); + return 0; + } + + pos =3D pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_SRIOV); + rc =3D vpci_remove_registers(pdev->vpci, pos + PCI_SRIOV_CTRL, 2); + if ( rc ) + { + printk(XENLOG_ERR "%pd %pp: fail to remove SRIOV handlers rc=3D%d\= n", + pdev->domain, &pdev->sbdf, rc); + ASSERT_UNREACHABLE(); + return rc; + } + XFREE(pdev->vpci->sriov); + + /* + * Unprivileged domains have a deny by default register access policy,= no + * need to add any further handlers for them. + */ + if ( !is_hardware_domain(pdev->domain) ) + return 0; + + rc =3D vpci_add_register(pdev->vpci, vpci_hw_read16, NULL, + pos + PCI_SRIOV_CTRL, 2, NULL); + if ( rc ) + printk(XENLOG_ERR "%pd %pp: fail to add SRIOV ctrl handler rc=3D%d= \n", + pdev->domain, &pdev->sbdf, rc); + + return rc; +} + +REGISTER_VPCI_EXTCAP(SRIOV, init_sriov, cleanup_sriov); + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index e34f7abe6d..fc8a943abe 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -84,7 +84,6 @@ struct vpci { * upon to know whether BARs are mapped into the guest p2m. */ bool bars_mapped : 1; - /* FIXME: currently there's no support for SR-IOV. */ } header; =20 /* MSI data. */ @@ -145,6 +144,12 @@ struct vpci { unsigned int nbars:3; } rebar; =20 + struct vpci_sriov { + /* PF only */ + struct vpci_bar vf_bars[PCI_SRIOV_NUM_BARS]; + uint16_t num_vfs; + } *sriov; + #ifdef CONFIG_HAS_VPCI_GUEST_SUPPORT /* Guest SBDF of the device. */ #define INVALID_GUEST_SBDF ((pci_sbdf_t){ .sbdf =3D ~0U }) --=20 2.51.2 From nobody Thu Apr 9 17:03:59 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1775743331; cv=pass; d=zohomail.com; s=zohoarc; b=UTCKu9/V7HJUo5WuWq7KC/9U7qaQm3xIomC3+6S1rA3dDZ9met38q7Gjavluu/2iS2ya7NYDpuQIf9/Pn5sY5/HC4LamA7PbFHDQ2y4xvOzS+MzolHkmwITW6qEo7rVYv+ia0/eUVCyeH8DdtTuVvwv9C4b7bS/SZoH/5Eul2Ao= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775743331; 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=98O9tjNO0ZyAg+iIvonlDRg03kkEWulLxNl1NsKdKko=; b=Zj00UsbW+AedQ+cC2Ey/DsRQd3zEqXQqR8lEVEKkC9YVHx5rLF1szAbso4pAxySxQT5KkcHNAMKrRr45rBRuBJI8GfXnbdHTHzLL2vEgcHnbKNe9WimvDVWtSIxKA8jyYPwZpikLxmz7sz/jWX19tmH2UVxz6Iy+YVUJ+2X/lGc= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1775743331713397.1231808765982; Thu, 9 Apr 2026 07:02:11 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1277475.1562678 (Exim 4.92) (envelope-from ) id 1wApwx-0004o7-84; Thu, 09 Apr 2026 14:01:39 +0000 Received: by outflank-mailman (output) from mailman id 1277475.1562678; Thu, 09 Apr 2026 14:01:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwx-0004lY-2x; Thu, 09 Apr 2026 14:01:39 +0000 Received: by outflank-mailman (input) for mailman id 1277475; Thu, 09 Apr 2026 14:01:37 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwv-0004Kd-D9 for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 14:01:37 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wApwu-001xw2-Nn for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 16:01:36 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d7b13e-bab6-0a2a0a5309dd-0a2a4503d692-8 for ; Thu, 09 Apr 2026 16:01:36 +0200 Received: from [52.101.66.135] (helo=DUZPR83CU001.outbound.protection.outlook.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d7b140-02b3-0a2a45030019-346542872ee8-3 for ; Thu, 09 Apr 2026 16:01:36 +0200 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by PA3PR03MB10964.eurprd03.prod.outlook.com (2603:10a6:102:4b2::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Thu, 9 Apr 2026 14:01:34 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9769.016; Thu, 9 Apr 2026 14:01:34 +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=epam.com header.i="@epam.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=CFIsQP8lMB7NjP4Wa4osJkF/SMG6LpglWMnEA+Tn8hfTTsPrZwKC0jszTdW0a6C8QDjqXRwTTVjrgZ2fyyqbnfDILa//ychWpD+AmFaR6F2GvA5yYvP4LgGK8l+r0NWAyGeEa79a+F057NZezV4VZHtKbz6euNyJP0IAp/RKv8sGsDElTmALh9C3iUNUGgfP0xvsuFuvocwXvBDgk4OrhFHowfdFuunofcn0eWLd0+/hj/yBnwaNWeLbAVUNoF1hedBGaRHBAV5j+oHlaP8880vRHcSOJ5ecCgLlodnaF6s1qOZIrRP7UaoHRwVxj0AbRUUkdhdUilHL4aa5CcoICw== 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=98O9tjNO0ZyAg+iIvonlDRg03kkEWulLxNl1NsKdKko=; b=lbCS+74MRPC0j8U/BPCn2UqTjuOcHQfbyPRtiDkw7HFyld7ml9OnQo6mlT5KwlTGPlSEKqKVODHn6HJM7iJ9bdV0h6mnvEaNUvNfBxg4tDcxFNOqtQLiKjOagN60MvI4LfUhRs798sbRgYHE6Fq+jdLuWtJy6WGrvD6gV6MesmXV8u4OLbCQIkDH27M+wacC0DEY3Je+SKSMabJ72XlkbSy027ab+98vRunHSyqFrNkdEOW9fNoVqx/iyPX5ptyw1Pv1F7+TLUhNBI/anmWBk+unGHqEE3ilg1iQiPXei/EPWa9x0YorabPYoEg4Y1dosmFFeFqKJfNy5n0/UMv88Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=98O9tjNO0ZyAg+iIvonlDRg03kkEWulLxNl1NsKdKko=; b=pw1tQiWlj74LD3Dt2PH3dQ8qjSt97RfqAZezhSUGi5AbbMu+hGMSZOmFBtJ2u0Z3jiujlQzdOTPHP0gQ9gCYLU6/Ad8RHTgXorPXv7/X3/Q2jxgq4ELEEvde3IpZe2MOqVlwqYfnGTpsk+VSbEJPYvZf4LvR0jNJa519N9EodYK5CrFFbBnHz9K10L4kk6s3GOSPh+VFuKWclESfzN9PdOwUxHH9/efkyc59YdziVLLQwbh/uIumirT5mBh57w9AodwNV3llbMbm5V4i+nd3ncVoXL8W+2IJPHJz117m9EhGE8hbDf7xUD0YOhQmXrLxLEMzHIwEqzsNrGMlsulvSw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Stewart Hildebrand , =?iso-8859-1?Q?Roger_Pau_Monn=E9?= , Mykyta Poturai Subject: [PATCH v3 6/7] vpci: add SR-IOV support for DomUs Thread-Topic: [PATCH v3 6/7] vpci: add SR-IOV support for DomUs Thread-Index: AQHcyClgJVtVkM11YECyJKBoUo8yuw== Date: Thu, 9 Apr 2026 14:01:34 +0000 Message-ID: <1aaf1a087ca0003d943d43c55500b3ab84195cf5.1775742115.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|PA3PR03MB10964:EE_ x-ms-office365-filtering-correlation-id: a5dadb01-ed72-404c-024e-08de964082b3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|38070700021|22082099003|56012099003|18002099003; x-microsoft-antispam-message-info: ZmX5U1e3mmsxRV7SYz2jHD4E8k6hTOp8RI5QaJmjvzT2/MMYmh7JH7caE/n7KK6nyklY9w2afcr4WDBdMhklurB1gyy0M55fZIhNV+6ii0vgoy5BZBGjFxrpXjQnXqexK17OPlKbJY7JQ11McU3FCGCwcwgseo+rPku5sHuNzKlaSveEnULUnVjBmWNceFJqTmOag1tTnyFLZzJJySFzJvXsVN6de+R2/rCQcLkBRC5SFROZJdo+pq70D+8ZUIXGDLM1p+zr0iX92nb1tbfrc6wiSQ7XLWdX6+agG7BTvvGWu31E9vrS+MEkFVzHINhzefu02acLH1Dwn0PcmZjROV47pm3PShuepQFSMVUy8ZaErlakXCIQaVVT1i9R4kLc9kcUta+uXlnpoftXHE1yuEmuJ7ZJxKfQ4e6ctOTdUfJ5j2vKCTcODQfdjVoUtdrVW3yTESefgQyDW7l850d9/mZFOVeyKYkc08lq1s2+8h1GQ/YQ7Pj2C9079QvuPJbuLP68WqaJggPNiPtQW1cOjUqcs5u5PJKb5D+ivsvcyZoI3H++6ByxRPayGOMv4vAQbCPgv8rSYA1UITMuRzHiw7dMiv24l2KCJlQXNkeHhfuOZ2sNCULvkGlW/0jiIrISFx7WiQ7Ue6UlhHsnEpzCxFPrP95R1wRHD5QVE56YcY7MEUOZuCVt7KjwG9W9yTwY+FpAmNK70+G6EGMdRCm5mvvzucuaAFVSR4LoMQIRaO9feoS3w7X6Cf9WA4tMCkNqbZaJYq2K48JVETOJebTFwgT75IZ8b7GYw0KIFny6lUw= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(38070700021)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?mkMra2oLNjgy2U4shXxzBATFWQx3sxC5fV9WtsMp2+kJ8Zy0GVIXwlVvpi?= =?iso-8859-1?Q?BHYjb7OOJBpLhVaayKctX+CTtN2B0GezMWMxcGKaw+PRodfwE3TkY0AE0l?= =?iso-8859-1?Q?C8Ud59uEVg7f30Uzwiwuk0y/cP7nZUY8DhDXq5azpdIEGpKGR4s/9WDaes?= =?iso-8859-1?Q?Mkmxjb3qKXhou+p2XSrqJnaywHZC905201SkjIeVC12CykHo5YOc8gTCq9?= =?iso-8859-1?Q?ARO/K3VDbU1f2h3mYMZRNfgWn+qzXE3wCbbz7I0nroLYt4OXg/sMK56xAS?= =?iso-8859-1?Q?CLaMBrQuUDjp4UClfjZ9WvKRe6t1jR4supPga0xrs0Ijy+AH2N0RkT9L33?= =?iso-8859-1?Q?mjMvfCP5Cfh1opPrQ87jpxCaN0UzOCR0j9px0+rg0ABR8aWmeAotD331u5?= =?iso-8859-1?Q?GgG3HzMZcQ1EeB0nMUDAZt/6LD/LVgJtY+AUNYvabEOY9KtNHQRAK2EKfG?= =?iso-8859-1?Q?0icn1m9Ji22vcbAjzHZ0Wgyd6yzKJ8jtl8/55HUNAQ0K6BOxNEJs055sJC?= =?iso-8859-1?Q?rKd/U58PND9/YobL2iA5N/tPexxa0qYyXkoz2BFZ/rbGSDeMYFjK0KaL03?= =?iso-8859-1?Q?XdANqo8YnkxFQaBcJ7/kDOgsOVsykABPeQ0CjgJ2aAWDg0mfRpF3LkJ34c?= =?iso-8859-1?Q?ONIWrMHvKFh9tFlPk9oU3sVDdCjP6hy50hd0RRo2WucGQh6tQAiqrxRxT3?= =?iso-8859-1?Q?5SKaWAhyQRry9UQNM/zCNEWre6T84oyBfnfVfsZA64B+ifTdP+pPLqsOTP?= =?iso-8859-1?Q?kBqHHdGYYPspUXERRHd4ubGbrCY3L4hE0CYR0q9G7DoMPqd+q64Fn+JHd3?= =?iso-8859-1?Q?BKbvx6O0lLUjGNfn+AGq6Syr/n8fyHFqTCJWT1Drpxbvpk2u/qxiB6Ju4Y?= =?iso-8859-1?Q?/9jAGI/Nh7eTLVAwCJjuDdpe/hWCtwMuss8rAYLl3aegk258r2PxDRzVr+?= =?iso-8859-1?Q?wZZarxhuagyefPzk2SJftXy8D8RrNzUaC+g9FoMiqeAchga0d0zt9Do9XQ?= =?iso-8859-1?Q?UmA2z7TJ0sqR+TbFIDtAIsixwq2+xYOKPGbhnqMQ1mWxCFH1wkaxbYV323?= =?iso-8859-1?Q?vpFpcrsB5o9Dt8z1KFCwABXEu8Dc5Q88ruINLqBKIgtj4E0EGFwmKadls2?= =?iso-8859-1?Q?d5ebo5Fv6aZObAnmzCS9UuOhIrcZTKTXyyGBEZTqCRs1fr7+roEPSDJFWQ?= =?iso-8859-1?Q?5a3rgUlgmeIh0U46B1TBsDjYlyRLLXroAZnYEDRkWmYPqhrLIgxhGzG3Gb?= =?iso-8859-1?Q?K0IEyn2+RcxGgwjnQymrSY/oaSlwnIkCBAL5k619SJ13Aj4t40dErhUaXE?= =?iso-8859-1?Q?beOWXgDYsSA4mnB58gl/9Yq8bgKXpOpil9A3/E2SZxkIDBapQO4d4wPan9?= =?iso-8859-1?Q?gc6cLkwKbq/r5o4L9XF9mN5Lc56Jv7apsd/CeNxbmFNi23Q0V3k6h2/OI5?= =?iso-8859-1?Q?CeNnHCO7v3z7dKn7v3O49jwdTTptiTaDL4ShikUUiRk/fO7KQF0JDbSY7P?= =?iso-8859-1?Q?gItIpKoh7TOFJU9960HSOCXu0mWUSnPi8XnNOR9yA/DKRs3v52SGt3/AzL?= =?iso-8859-1?Q?F7N39qWW8NlmT/KYQ5y61RdvaVZKyml0ARqVEXYlIeuxCG1QphiaftYuoA?= =?iso-8859-1?Q?x+tO8LgZqbaQlIDBPIVPpl6Feyz7UHtYo06UgdWoYTDa2fw2bUEFrnYdg4?= =?iso-8859-1?Q?PRbSSYOXyXeaIMjoCEmyYDfcIumTGX6xLwZUZcMA+4PM8UnpV5+uyk+9Iz?= =?iso-8859-1?Q?ltgtdZyTwgzFPd4funjN5Cr162/tI5Q41QV/SRH1qqOokIwpKqpGWgaBke?= =?iso-8859-1?Q?ZIg5b96RzQ8TNukSI6oIMlSO0esMvdk=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a5dadb01-ed72-404c-024e-08de964082b3 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2026 14:01:34.6597 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xc4XkSyo2nbA77++RX3g6Gfgxb1TsxTYBD5Y1tuk7/8+ygXYkkd23AxMny3v0/aJPfPhXQAzg7kbNakZQH6xeg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR03MB10964 X-purgate-ID: tlsNG-33051d/1775743296-C9D3CC9A-6EB0357B/0/0 X-purgate-type: clean X-purgate-size: 3434 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1775743332896158500 Content-Type: text/plain; charset="utf-8" From: Stewart Hildebrand Emulate guest BAR register values based on PF BAR values for VFs. This allows creating a guest view of the normal BAR registers and emulates the size and properties as it is done during PCI device enumeration by the guest. Expose VID/DID and class/revision to the guest. Note, that VFs ROM BAR is read-only and is all zeros, but VF may provide access to the PFs ROM via emulation and is not implemented. Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai --- v2->v3: * don't emulate VID/DID registers * replace ifdef with IS_ENABLED v1->v2: * remove VF register handlers covered by init_header * set guest addr unconditionally --- xen/drivers/vpci/sriov.c | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/xen/drivers/vpci/sriov.c b/xen/drivers/vpci/sriov.c index ec6a7b84d5..b43a2b26d3 100644 --- a/xen/drivers/vpci/sriov.c +++ b/xen/drivers/vpci/sriov.c @@ -211,6 +211,58 @@ int vpci_vf_init_header(struct pci_dev *vf_pdev) sriov_pos =3D pci_find_ext_capability(pf_pdev, PCI_EXT_CAP_ID_SRIOV); ctrl =3D pci_conf_read16(pf_pdev->sbdf, sriov_pos + PCI_SRIOV_CTRL); =20 + if ( IS_ENABLED(CONFIG_HAS_VPCI_GUEST_SUPPORT) && + pf_pdev->domain !=3D vf_pdev->domain ) + { + struct vpci_bar *bars =3D vf_pdev->vpci->header.bars; + + rc =3D vpci_add_register(vf_pdev->vpci, vpci_hw_read16, NULL, + PCI_VENDOR_ID, 2, NULL); + if ( rc ) + return rc; + + rc =3D vpci_add_register(vf_pdev->vpci, vpci_hw_read16, NULL, + PCI_DEVICE_ID, 2, NULL); + if ( rc ) + return rc; + + /* Hardcode multi-function device bit to 0 */ + rc =3D vpci_add_register(vf_pdev->vpci, vpci_read_val, NULL, + PCI_HEADER_TYPE, 1, + (void *)PCI_HEADER_TYPE_NORMAL); + if ( rc ) + return rc; + + rc =3D vpci_add_register(vf_pdev->vpci, vpci_hw_read32, NULL, + PCI_CLASS_REVISION, 4, NULL); + if ( rc ) + return rc; + + for ( unsigned int i =3D 0; i < PCI_SRIOV_NUM_BARS; i++ ) + { + switch ( pf_pdev->vpci->sriov->vf_bars[i].type ) + { + case VPCI_BAR_MEM32: + case VPCI_BAR_MEM64_LO: + case VPCI_BAR_MEM64_HI: + rc =3D vpci_add_register(vf_pdev->vpci, vpci_guest_mem_bar= _read, + vpci_guest_mem_bar_write, + PCI_BASE_ADDRESS_0 + i * 4, 4, &bar= s[i]); + if ( rc ) + return rc; + break; + + default: + rc =3D vpci_add_register(vf_pdev->vpci, vpci_read_val, NUL= L, + PCI_BASE_ADDRESS_0 + i * 4, 4, + (void *)0); + if ( rc ) + return rc; + break; + } + } + } + if ( (pf_pdev->domain =3D=3D vf_pdev->domain) && (ctrl & PCI_SRIOV_CTR= L_MSE) ) { rc =3D vpci_modify_bars(vf_pdev, PCI_COMMAND_MEMORY, false); --=20 2.51.2 From nobody Thu Apr 9 17:03:59 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=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1775743329; cv=pass; d=zohomail.com; s=zohoarc; b=PQTqvcwwobrXxqJQ+lLy1RSnL0I9kB+YjeDQ+wjtdJB3+t18jUtMsvdYQNLol+qolxQNkF/KklR3E403QaNV+oa9VvxmxK8GJrlwqgXgEOsjJJL0UF4JsCeTutCpgn8wm0Hgr/NNlWbSCE/EHc8sFhHUjN0n4pzkx3BayskBDNM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1775743329; 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=f70IjTJoiAVqBQXBTEXDcxwBCzPT88lJf79t7jB0WvY=; b=EFD6VfSWQ42blUtRUpkJ9D8gZ8UgFvtSn3SDQJimHsqKK0wUjsN2NR5qSpcN/6RXzfVafIcIgdVeJNXsSQX7bsuWpntjuKx/eDmsmNQwXXRxYe1emC6d5OCU+LBVAZrjQCfaC+tHpYzhMp1LocqUp0h5iOlNUu/aB5O9tRH/oZs= 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=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1775743329700276.4412434206097; Thu, 9 Apr 2026 07:02:09 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1277477.1562693 (Exim 4.92) (envelope-from ) id 1wApwy-00055U-2k; Thu, 09 Apr 2026 14:01:40 +0000 Received: by outflank-mailman (output) from mailman id 1277477.1562693; Thu, 09 Apr 2026 14:01:40 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwx-00052q-Su; Thu, 09 Apr 2026 14:01:39 +0000 Received: by outflank-mailman (input) for mailman id 1277477; Thu, 09 Apr 2026 14:01:37 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wApwv-0004Ke-Ig for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 14:01:37 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wApwt-009WCF-D3 for xen-devel@lists.xenproject.org; Thu, 09 Apr 2026 16:01:36 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 69d7b13b-5cb7-0a2a0a5109dd-0a2a4506a7c2-20 for ; Thu, 09 Apr 2026 16:01:36 +0200 Received: from [52.101.72.96] (helo=AM0PR02CU008.outbound.protection.outlook.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.0) (envelope-from ) id 69d7b140-0df0-0a2a45060019-34654860c82b-4 for ; Thu, 09 Apr 2026 16:01:36 +0200 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com (2603:10a6:102:30d::12) by PA1PR03MB10891.eurprd03.prod.outlook.com (2603:10a6:102:485::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Thu, 9 Apr 2026 14:01:35 +0000 Received: from PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb]) by PAVPR03MB10102.eurprd03.prod.outlook.com ([fe80::b8c6:f37a:987a:beb%5]) with mapi id 15.20.9769.016; Thu, 9 Apr 2026 14:01:35 +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=epam.com header.i="@epam.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=zDcspnHtD0t6rcRazJsEqn96hgJYwZgh+3ublOeRHQCWKi1ZuHi4wPMRk7VHQrjky1IhE+lCEiBIedNGDRTRM/YbRvCI0yJalyeL80ZeHO/HhRPCFVjnn6coaDuMSSXQmGdpBip4F+Kkg+kPqDSiapKkMLh26gNkie1525/qjDxcmmcPF9ue6zw7z1k7oZlD1tUvJIxRGXamzcobMy80WHU1+cGyb6R4SMMnoqgmGHdF89zZgF2+Yb5LXTJx8+i2YF34ChozhhBdW5KyDhdcWhBIrTtjLJ+IfW6WKFzhC4bjjTjVfJwTIe8ABXtaIWZqQcKkIu3d6K2jLBUZCKfMgg== 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=f70IjTJoiAVqBQXBTEXDcxwBCzPT88lJf79t7jB0WvY=; b=vI/quOwnWQovnX0iyHQR+29YBGdzpu/ZHqH3xA9Rdu/WenXFoaeampnax/ai50h4dgjgNceGtWLQjehDHTxREeA1WVUvkdwtOjkLqfoXsN8f1eqcl8Gcp4m9GxdKtL0Nep28N6ls9v4Jh0QCttawFBo5u1MkdgCinHDpvW4DKeiD6gy4cqL4TIU9RANpzJzvEVi/YwiJal4As5Ptx+O8M2KjHNs7WltvVXghXEHB4wk0Z0g2OzQwTxTQ/Z0DKa26IwjURVuyoS5lOm+fwBi563TpUlBkS7OVytVzbTEEdJx5nEDnYZEetrT8Hofzub8GO60HFiV/Z11sVMfLrqJr3Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=f70IjTJoiAVqBQXBTEXDcxwBCzPT88lJf79t7jB0WvY=; b=FGEC1OqSEpDl8CY1GgZz6xQ8SDzKPTg8PtRT2UBFYKPg7qkxAZ1ygw8gU7h4AJ6KK/ioeKCHTC1W1HlmX1YnD95gm5IAUaQtVIaZjJiZIHCaI8/bZh8LKVvG3hej2yJqa3t53jyQuNbdmfzkckv56TcLAlb0lsHUVUXEZ4EH7G0lF15ZUy+xYMU844PH012SSxXB67/jwiHfifXlvcHC/VhFWulIWfFgQwXehsIFCjqZdGZoO5RjWWNjTMpa9bZJbEdJyC3tSmBVWPoSbedTkVSaeyzfNBOG3uR6K2HxjcPyG8Bdo3Ul7BArn6nvh0E65ngExQ2NrO8nPgeulQIVow== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Mykyta Poturai , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , =?iso-8859-1?Q?Roger_Pau_Monn=E9?= , Stefano Stabellini Subject: [PATCH v3 7/7] docs: Update SR-IOV support status Thread-Topic: [PATCH v3 7/7] docs: Update SR-IOV support status Thread-Index: AQHcyClg09tySmMX7kuYzB1RJC8nOg== Date: Thu, 9 Apr 2026 14:01:35 +0000 Message-ID: <65100dbbd16c10a76d2b1847f8fd77850f134559.1775742115.git.mykyta_poturai@epam.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAVPR03MB10102:EE_|PA1PR03MB10891:EE_ x-ms-office365-filtering-correlation-id: e19cb274-e032-43e2-2710-08de964082e5 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|1800799024|38070700021|56012099003|18002099003|22082099003; x-microsoft-antispam-message-info: zofA668mf5mzZYJKhTEEet4fl1NrKWk96cFfyG8vQrJ02Bd7KqLNiBpfda4OBW3MJXareLNwsw1YkI2ce5Q5x8Zm5ITCyFBZqf8SLl6etwCEBon7H2X0Y1XBmDPeQ2Wxm6TJ2XL/DXoHxPAoC2E56vryfldzvemXYGknFwRFBv7pAlZTTNje2cal3g2OBQguf85Boioy7Atcp+0RXl5rwYGjL8Y08AH+MjHlHZ4/ZpZ+AgkzDVzUGqFntbEOaR+cZujyhXK3Fz902sLPGzUkMpvBlggCfO4fNu6BbDCncADJasGh8rcav09oDriS9hdbWu/GGJ4N72r5Ke5hWcoPdR9r5DfKHXp2QuXC56iPwPvg42p2n3Cxm9dj5XGRcJHZ+Of1cM8jtsZOPrzJunDnv7HirivogENTtNY/SgURIWV4gud42H9YSR8r34KmDKqsTKBlulnDug9wNTexi6f83lfYY/c0x7y73DY66U7Hvv1PbFHiwjaUx8TehLk1wtzxEUEQpDYTP+/+fm/AlUQv8HFYb58I2ZRM7Qs7VLzwK0dxCiQ2OJlA3J/ZHJyb9593A2eINZMJCJyGWcvuQzEwaVnvn//Xmcn0xdZ+xHmVm1DZnIH+Ybh4d8+VaM/MyENMD5EoUhhRwe7Kb4vstaH33q95oZQ46zJsv76Z7pdIUoFBVNu9gOiGago0fNUL/qZTb+2v2In0MLILUR+IwOGIrRpvBT8zQJkMppdaJYzMIA5CRlmVTLA0U67BTy2meTC9GzFhc+k/3pKOEliPYXHVgCotB8qEzBO9q80kIZMnFEQ= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAVPR03MB10102.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(38070700021)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?OCFWbFILKgi/W863FPP64Sp9A18FphvqxIeOZS5xGfvfKDmHtC0RL5k5T6?= =?iso-8859-1?Q?GRO+gxeeCod7C7Uacb+clc7y9cuqOoEKWEUEdUgkXwQUesSJJlp1A44YsT?= =?iso-8859-1?Q?4WrIRtFKWisYkFmzv8ebmYro8BlcQBTq4PMlsCPBHNMmMtHEYQSpKaaf74?= =?iso-8859-1?Q?2gMv8f+4aQV6POMImPf9AHHVO55PbQXZuqgz03jWLNA9aPsN71MSQxkIEb?= =?iso-8859-1?Q?wbyx3P8jaD40LI3A6vKVK+wdfbaRwCkL0tPnyn+Vp8CDncLo0zk90P23f4?= =?iso-8859-1?Q?lMRv6eoXGpAyB2uZ3D8NI4ayKzpNeAOeVRSQ7qsr63Pk2EHRjuxqZM3hBB?= =?iso-8859-1?Q?LZMQ6zvFCO0Y1tjF2M+ypa+EPdzwrrPputF0nommej6xMHpijSeBjNYjbb?= =?iso-8859-1?Q?JUDqbE9wgGi2h7gVF+oH5QSMfhbTGdNDcooOjbAxA9mtDZbSmQMFXKTDrr?= =?iso-8859-1?Q?b62ylrjD7gJEFLFdMrRlMoZmj3HmqihSXejzxgu4BhQTbH3K0cDISe4Fpx?= =?iso-8859-1?Q?iYI5xpRwc2ZK1iQ1IJyGaWmod0lBee+KzSdx9dCUkE6lvLtlx92P+Oofuf?= =?iso-8859-1?Q?2UGnLYGNpByAyxwcHWzfkVXd2D4lkCmJUVoaVCxQf8z4YHcy4McKSXWJA1?= =?iso-8859-1?Q?rlM9FTX8kOW27hZ1kyRP4t8hghLawkmi8JV8qfgbSMYzJp1Onrfutzm21m?= =?iso-8859-1?Q?4fxjFlnYjTelMOQ5EkkdYVBxdBaB/n7Mcpa22k3KDfK9HktzVbEruAKlDR?= =?iso-8859-1?Q?hSynAP39G/aaj2f2LcvAFRtz2OSo3BFQeYLsx+DsxYPVNwi34URfizdFiu?= =?iso-8859-1?Q?rwQNbkzKkgz0FqaRRL6hXa1/aPWLrKH5/RjL8fYXNhEkINToSTOkn3fc3u?= =?iso-8859-1?Q?gIgyiJnW58ALGzck1rJtQiCaRVUGxbPC8spofiMb+0zEDXPJKaVm3vILUl?= =?iso-8859-1?Q?XzmEKI1okWMCo8A9BPENtfshiyKgWJIaJ2cOVvHhMpP8MWW/fZIjFwSdxm?= =?iso-8859-1?Q?pHSeiVkLiQ1slvhkMJE9zUmsI+k97OIooFtHf80gsPXy1fAWO8n/M3mOLZ?= =?iso-8859-1?Q?AVfcgPFGs342ofyQtKuuyjt2U6nO9wwjAFZbEIJ3nc4xRKO4/hdGXcN8b0?= =?iso-8859-1?Q?AvvDLfSurYTNJG4WuqqFb3/KrZC2eL0FV7HSNkz8HNetBOQfa7oBTo5sfE?= =?iso-8859-1?Q?iHnekTCEDQ2/vlnV3ZYTAEm9tby7UL8+p/VmTrG1l0F9X/0FXzs1yr9X9p?= =?iso-8859-1?Q?bdFLMAVkeNiOwPWWPTK+EV5u1fseMskQI8u7UHYxHLIAXxjU+8lmJ0Rdsc?= =?iso-8859-1?Q?XAVwbnhew3FJNF0i5sK5Io1EZOW9Abwx3J6Nu9sOMAhZEPdd/WZfHLIxHs?= =?iso-8859-1?Q?uzHQ4w1vWE/CuCdNr+4Ow5LVU2yMZv+t3ViNETKSMfsBwikc+9XYPwp/+4?= =?iso-8859-1?Q?4kX/hG767QfuiDXr+QQM08mrML0aNmdVfLac+/hmgHmZUfOp1z2JQnjtsS?= =?iso-8859-1?Q?Y/H+hKtKLMz1Ln3RSMgDJyit/1wP7N4MMYPJoiZvGd6nkq8NqqKZy6ob3i?= =?iso-8859-1?Q?FIz818GiD8KFN6DjmSsB2NQRZTXpAvABPzj2Hm59zQsSP4smAWZObNJ/A8?= =?iso-8859-1?Q?QtufH31VlxxGe0JF+xido4sT0TgYDK0GkpfW/r2R/Xeqx+s1XBMNC4KSG3?= =?iso-8859-1?Q?wJXO1ACCP8kg6wM/N/gnVTDKVfRedTpY60NT+20aRRoTCoLKwoS2DybzNu?= =?iso-8859-1?Q?3axsbg34s1RW1SQzuiKth08bOfZ+Ulsm6VAVEFz/RfUhpWmXpy1uMy1S2r?= =?iso-8859-1?Q?jLSqOP6PmHD1gZpFAu3AMjeh0g1t52U=3D?= Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAVPR03MB10102.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e19cb274-e032-43e2-2710-08de964082e5 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Apr 2026 14:01:35.0400 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: gVSbm8SQc4MsAT7Akf1xfX/sc/mTAAq+Rm/MnSEU5LnpMTfFzp3Qmnrmjc99Gfg8MyICw16nF87N+greGIDr+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR03MB10891 X-purgate-ID: tlsNG-16d1c6/1775743296-64E4E3D8-0D41CD8F/0/0 X-purgate-type: clean X-purgate-size: 518 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1775743331384154100 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mykyta Poturai --- v1->v2: * new patch --- SUPPORT.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/SUPPORT.md b/SUPPORT.md index 8e7ab7cb3e..f4f1458bbb 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -170,8 +170,6 @@ unexpected behavior or issues on some hardware. =20 At least the following features are missing on a PVH dom0: =20 - * PCI SR-IOV. - * Native NMI forwarding (nmi=3Ddom0 command line option). =20 * MCE handling. --=20 2.51.2