From nobody Fri Oct 31 03:41:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1751440239; cv=pass; d=zohomail.com; s=zohoarc; b=S8kAtPJ2K9P8ajUh4XLLVW2IVHIHW7cFP7JfE3MNiiUuCSRDKD1ZXZ0Mk5eiKdUGskvMr5vtNRnNn7HXLoUM4vrckO1RdbD+7kwxtXNzvSgPqfApveyd18Euw+bzeih57TbOPD59PM7QHhdUQ7f8M/Xirum1rBLXjdb58JsAJho= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751440239; 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=6qQ+PMBtT+HioLLwK5GcfC0vHeU0mGowNeZgk/OtTQ0=; b=D+IxED1SMvkjyht24bmUWRJAQ5d80MVxBy+qIIYodSyZZe+TW3mfPq3rKEnVoalnw4/8v5o1iTbNve2w+xBE5bzEaqWQkjzXNLDpi8oQtOHC1ZNkHm8tqljDLje+PaIIureD7bU512go8YPd5xqkv0IOVTGK7HA1KCjF0zZg6ts= 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 1751440239101521.2144537113429; Wed, 2 Jul 2025 00:10:39 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1030266.1403948 (Exim 4.92) (envelope-from ) id 1uWrbn-00025r-Qo; Wed, 02 Jul 2025 07:10:19 +0000 Received: by outflank-mailman (output) from mailman id 1030266.1403948; Wed, 02 Jul 2025 07:10:19 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbn-00025b-MU; Wed, 02 Jul 2025 07:10:19 +0000 Received: by outflank-mailman (input) for mailman id 1030266; Wed, 02 Jul 2025 07:10:18 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbl-0000Dm-Tg for xen-devel@lists.xenproject.org; Wed, 02 Jul 2025 07:10:18 +0000 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazlp170130007.outbound.protection.outlook.com [2a01:111:f403:c20f::7]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 937bf8f3-5713-11f0-a313-13f23c93f187; Wed, 02 Jul 2025 09:10:04 +0200 (CEST) Received: from AS2PR03MB10110.eurprd03.prod.outlook.com (2603:10a6:20b:57a::22) by PR3PR03MB6651.eurprd03.prod.outlook.com (2603:10a6:102:78::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.20; Wed, 2 Jul 2025 07:10:00 +0000 Received: from AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873]) by AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873%5]) with mapi id 15.20.8901.018; Wed, 2 Jul 2025 07:10:00 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 937bf8f3-5713-11f0-a313-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uXxufQSBiBZUHMhAiVnmSvMQd0S/NrhW4fVfIObxC0pnj3NSm9pAawuz0V0fqq56VF4oQdYntx3rNU+Ij7gY+82iztskf2ahhGclanORCAU9a2wus+MI0pXgMPr3BNwy6nHdr641HmytVxFiPGEJ/QnHDvt704GODQf5r1x0gUnr9Mh5f79XbDX9xYfMi028M1hgzBGFUy8zCpGbc3cHYHGVztxCIFhIROOww9OEg0B1h4m1J1X3SwVRPW9dGi9IXpjz09mNEnmK49arNJ6VOmGlGGjO0Osq6cclqgashb9LxQZUCS6/GqFvzDTTEzYMB2BiV2Z5PWQ9qBDw0C4uHA== 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=6qQ+PMBtT+HioLLwK5GcfC0vHeU0mGowNeZgk/OtTQ0=; b=xNB23SMAs7DAOMzjz1u+gTbWgwIQHXPNi2IluBkvqGovpEvI5yIHzHRtBEXrhTDrCZuMa4b8hNlobi4S1MaqWewBM06ENNfavkVTpY7BK2m14sADh1EWVJ/cZEh1doqxUH9e+/00ujNTBcMQoWVDeRYVlk/He++cCg2lYHdvqUPzHiz1Ay4pJEIY/p9KmWzuEa/dHo1VlaBplcJfhQemWaM2YJIiPlvNiqSNmlnEjcf5xMaX2dhgfV4DU8WeSkPfSXEETgO7FkchtWct0gUbEt/1ex/KXfXjUrAkwRzWZvOYShCjn/Q9TsiHNi8O08UREilluf5b8Ygc9nNzr7b2yA== 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=6qQ+PMBtT+HioLLwK5GcfC0vHeU0mGowNeZgk/OtTQ0=; b=qJspAwibOqYy78t9S0C3rOwZSdS7Cgvturd8vzFdzAMMkF4kLhJX7caKxIiMRISYudm98qaTZPRX8TaL/NsLZ5XdVOHyDAt8sI4bvoyjjfqtjshPnnPTwrWIr4lDyQOKMJg8GbKcespqStPIZN+H5eDyKDEndboJSo4+240+CuLbGqLJPekFQudFLwX2dk6XELz54fW5nmzky0ZhSHJ+Flj8GTtzHw9K9jxAVMizbpbsiTljhGdjORYPFeTIVJ2dg6whJNQCMMEYRghJ8sTdyHoisUBiIW1sKKj/qyu3JtIAuigPaB46xnWngDFtBLL0lrtm1s98BRrIGhdM5fN6BA== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Oleksandr Tyshchenko , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Jan Beulich , =?iso-8859-1?Q?Roger_Pau_Monn=E9?= , Stewart Hildebrand , Mykyta Poturai Subject: [PATCH v12 1/7] iommu/arm: Introduce iommu_add_dt_pci_sideband_ids API Thread-Topic: [PATCH v12 1/7] iommu/arm: Introduce iommu_add_dt_pci_sideband_ids API Thread-Index: AQHb6yBTW0gZTRlk2UWgkqBvCOigwQ== Date: Wed, 2 Jul 2025 07:10:00 +0000 Message-ID: <38532fd07a50c461c6e076dce326310368441b50.1751439885.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: AS2PR03MB10110:EE_|PR3PR03MB6651:EE_ x-ms-office365-filtering-correlation-id: 4c87619c-9127-4f13-7e08-08ddb93775e0 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?RT8hiGWpIdbTzj8nGEQmJYzVjMA8+LbilRg/Xhh6PbdqWBb+3R5MOb7cNC?= =?iso-8859-1?Q?OdNbsqRXkGaQ9xW96KcwMGJhr13PlGH9n0K+5nSmiOZCI7i+rTWGeZYQf6?= =?iso-8859-1?Q?L+KRK64w1zBlOM8JmVNS/bqZGawEAZxc83nwFH5fmCpHEVqsyp893kXYUl?= =?iso-8859-1?Q?/AtRhLpgfPL2gMWX9vjthniLFR+8sDFgyMxWoLXNYSO9pIgIeycjLVC4eM?= =?iso-8859-1?Q?nCj1p2eSXn6bRgtn1RzQ6MGDxc3d5PjpVmQg0/gNsTip+rBA1FCgO+oYz5?= =?iso-8859-1?Q?UY0hI+KvdGOMvmlK7uKl5UrqoXXpe6N6VDcdNOOY8OqSF8soGkDKyYjCcu?= =?iso-8859-1?Q?ypeQGMAuTZuL8jjWem6cRDoMHAIMDK+mtSO1tEQDgskfoa30DVsTJxNsB/?= =?iso-8859-1?Q?g1Zz1fqX2DYSJUL40DurG8FMzrMIbpewFVSDr3GP2k/jzV1OdTnKFOzTdt?= =?iso-8859-1?Q?pVUtlBS89g1dyFSEcqqqP06ig9p9jfwFGW3omUmvyN+dyLvRiu4Xp4GTxX?= =?iso-8859-1?Q?5pidy+7FSztVIoPGst3nLXenDCIzsGMX7pwFxsZw+rn5kZC3y82PlBiAtR?= =?iso-8859-1?Q?au7OWx3tKYgnbTs4Wjs0UNioXuIi3e+UwPTRoz7O4HJIIVeJ3llhckU506?= =?iso-8859-1?Q?m8bvDqoDRmV0BaQhAj1PHC7wiUnU+9fEpVPUfSQqS3oXQ/CqOcEMcsCHcp?= =?iso-8859-1?Q?zmQwpkCuGCDeRyIrLysqEGgmNTbxsUFnha19j6L6lYIKFMMSQ7dSwjeLm9?= =?iso-8859-1?Q?FWIItMO8cja72bowYit2T4J5P5zi16ni7web+uST3CRY8+ZOM8x+gkVxXT?= =?iso-8859-1?Q?jMW1NGNhEs9dLSYMpNdhQNJ/ibp1g8//T0BI/Dkm/PENG995XZ+F5F3sFX?= =?iso-8859-1?Q?A3JfJ9G0FbbpDKmB3AViidXMifKL2Rw9xTEodgqsB+yVVJ58RFW5KeGdqI?= =?iso-8859-1?Q?ekpoV0heokRgxnL7Sv+McVk9UqFOFUS4DjuPadHqgFE53G96n3w94NIGg+?= =?iso-8859-1?Q?5LlwcXlSg4V0X5CzqY/wyHQiCEr4if/kwWHGhcg8zOFPO1zHPnagf4UVX9?= =?iso-8859-1?Q?9vwq7kyT4jCJr72qSjSQRm1uQUgujO8tA4KafTqrw2Svizvx4idkOaRsoR?= =?iso-8859-1?Q?9vgKfMnfJVd8fH+QZ+tPAfT0qj+P5KY5Ugnh9P5lRb4KMOFljKeelwnkUx?= =?iso-8859-1?Q?uY2SRKrQxF2OrvH6Oz8B7ooTwhsCXUigEuE3XeXqoy+y1KUZklC/KP0TDk?= =?iso-8859-1?Q?jDCJecHS50oGYBsn60YriTuUR9eesULTw9mOgj5Co7DzALkcN0Vi5ZEbbL?= =?iso-8859-1?Q?+6sDpeFK/2vveYn50WuBhHW4H2JGpzb1k2HQp2/1NAR2jmWf8Hf6UiXXYk?= =?iso-8859-1?Q?m+1z5s7ritBfFVp4kSThaym3Aa3IqgpDTWfiWJCG1eSIx8KcW0tXX3YiTl?= =?iso-8859-1?Q?dxMcEj/RnrC0UnaqZKU+LE1rVaK39rr1mXJj/MFpSePITN/EOCjhxFZCke?= =?iso-8859-1?Q?2eKih7hdJkMAAmJYcWGMLsnsbh3VyRP5L9wkRPmt9g9umHG22hONB0WhfI?= =?iso-8859-1?Q?b/fldzw=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS2PR03MB10110.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?xGl1ZZLd2aD2mQv8X6TbmYFzDrtqYKNsTtYjC/j3HgYi4eQuSOgtX2xeUa?= =?iso-8859-1?Q?n9BisxD78aK5nYdgVJPsV8UUXs4d1c0SEvKOEqOdWyp/4d7Gggh0IkC/DB?= =?iso-8859-1?Q?qROxhVKC9S/pRtJ0BD9z83pbvt1lPWhaOLkmcT8Jqrp8ft9aJai1MRVjeE?= =?iso-8859-1?Q?ybLArz83GKQp/ODDPC5Mu/3t+Xk1yCPCnv7kjMqWS1bMMW7aHTnxnOl4g7?= =?iso-8859-1?Q?CiHlJK9VmXGOUv1B2/U2fUq3DVVAimitDsAum1KHKlBeo+1xTv51yFSFkq?= =?iso-8859-1?Q?h45r6v8ibq9C2Xgc1mDM7mVtkl3KjSHHmVdxLx/Jlj2R1cIozivYrpeytr?= =?iso-8859-1?Q?ykHcX3j/j/kw4Fx0uvm4QBbF6kMj+f8Fdh8UVfREzhyzX+D6fdAI0eF3DG?= =?iso-8859-1?Q?DMbS1rTilO3uRQKXtiz9VatuhGV6m/GpG7Nu8/iNkSTedjeSiohKhiC6Jg?= =?iso-8859-1?Q?OU7fFoX25XH6GlIf5vu4ocRScGR5mZ2CoEQVRifO2WQGK0F7i1CPOILtR/?= =?iso-8859-1?Q?pwPaX7IZ2GPh6B0yw/QiqcxlXr84QDF6K+4J1lQkVBxu/yPTpaXb8TYjXf?= =?iso-8859-1?Q?LCVSziEP2/hqn9AZJkmWpvwQfkzS0AVHPXwEQDsDDaoPX+xnFkWayOP0ro?= =?iso-8859-1?Q?6dp9+uwB8E5MUh5zyqPxRu3Ov7fX76+iX5lxTga0h70ZeaO/QWTSvFYOrn?= =?iso-8859-1?Q?l7E8xg+V3JaIS17niql/dq3kvm1lZzhUGbXxSrnA34rf77wQk4MU2LH1Yc?= =?iso-8859-1?Q?iXVR1cWFVRrS4XII3W237Ueaa32MoAO5lgrhi0I897SJv5S1Ge1nU6tsyc?= =?iso-8859-1?Q?b+Z6UG1E/l0PXJP0tEoIwgi6Kvcva5QwCNEVEIHUqdkpiAHIarK7ZmmFYQ?= =?iso-8859-1?Q?VgFLVNgkKh6XfcFj6RRCyMHRn94xykl8NUPM5onrTiQGOw52JwUFzsxXBy?= =?iso-8859-1?Q?551RpKVTx/brU7YadKodgQPekLR4VVoh2xYdyFXCk1dVjkJkxoe2H7Pwn0?= =?iso-8859-1?Q?TQuXLLxeDPiy/WAADqxAZYOKFo2F0NWLP2rfHJTfXSRNrrM6Zt079S1hK/?= =?iso-8859-1?Q?jUb1jluxfRiogR9wqQHyOWNY24y8FdKoSOGkkmLqHnK+ddRI/J7Xj7OV6U?= =?iso-8859-1?Q?Tm2HcQCti2LtaLi/BRnVywLoaB4yzbAcevJ8dSLhg6Zd84NinUDnLSjdbe?= =?iso-8859-1?Q?bikzQcwz38XlLdHc1aZ4d/i4mwHBbODWGdWvfY/4LN/E23YRzVCKSrO9TA?= =?iso-8859-1?Q?DbZVIqnG3j2vLpk/6OK7sD5UTJ8leGoEpj9jbq0uwGIIHsDV8jxqpZ4IZO?= =?iso-8859-1?Q?CI8kQmpmIR01pzuXsSl1bxGj7a3yQoajoUYJk7FjikwTkkHhS5BJiOuiH9?= =?iso-8859-1?Q?42HY6kQePM+tZYgpOKd6IK6teIrkynlYJ43hvIC9xzAlIfGKnchuc8DgB+?= =?iso-8859-1?Q?czs3IFJFLS+zrxgkfkkrZFmfL6IjbUGKDqECMuREZ60FwqHC31vaMq1lx6?= =?iso-8859-1?Q?wKOLQsulPV8Mi4N7EdPJV1Z/up4nEklzQ+SRE0DaGpMbdSTpKncosavJQF?= =?iso-8859-1?Q?ciD8OQnSYHMOTGOnOYjhhx9bLVstoOeZEY/UnLlj/fb7MVoiOqTrfQ8tSw?= =?iso-8859-1?Q?J58EQttKcHRnvm3gztFoHqAc1nMVlM4fvc0m+buIok4+Dufjb+GCtmow?= =?iso-8859-1?Q?=3D=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: AS2PR03MB10110.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4c87619c-9127-4f13-7e08-08ddb93775e0 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jul 2025 07:10:00.7204 (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: DvNXdIgcpXQwQuSvVKminNawkfOUp8DGaOMKc6XTWdGbIvBxmFxKh528bQD9SEgCPeaTBpkVfhJfFS9PBbaHGA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR03MB6651 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1751440240155116600 Content-Type: text/plain; charset="utf-8" From: Oleksandr Tyshchenko The main purpose of this patch is to add a way to register PCI device (which is behind the IOMMU) using the generic PCI-IOMMU DT bindings [1] before assigning that device to a domain. This behaves similarly to the existing iommu_add_dt_device API, except it handles PCI devices, and it is to be invoked from the add_device hook in the SMMU driver. The function dt_map_id to translate an ID through a downstream mapping (which is also suitable for mapping Requester ID) was borrowed from Linux (v5.10-rc6) and updated according to the Xen code base. [1] https://www.kernel.org/doc/Documentation/devicetree/bindings/pci/pci-io= mmu.txt Signed-off-by: Oleksandr Tyshchenko Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai Reviewed-by: Stefano Stabellini Acked-by: Jan Beulich --- Regarding pci_for_each_dma_alias question: getting host bridge node directly seems like a simpler solution with the same result. AFAIU with pci_for_each_dma_alias in linux we would arrive to the host brige node anyway, but also try to call dt_map_id for each device along the way. I am not sure why exactly it is done this way in linux, as according to the pci-iommu.txt, iommu-map node can only be present in the PCI root. v11->v12: * add Jan's AB v10->v11: * add Stefano's RB v9->v10: * move iommu_add_pci_sidebands_ids to arm/iommu.c * replace be32_to_cpup with be32_to_cpu v8->v9: * replace DT_NO_IOMMU with 1 * guard iommu_add_pci_sideband_ids with CONFIG_ARM v7->v8: * ENOSYS->EOPNOTSUPP * move iommu_add_pci_sideband_ids to iommu.c to fix x86 build * simplify iommu_add_pci_sideband_ids * add docstrings to iommu_add_{dt_}pci_sideband_ids v6->v7: * put iommu_add_pci_sideband_ids under ifdef * remove ifdef CONFIG_APCI * style: add newline for symmetry v5->v6: * pass ops to iommu_dt_xlate() v4->v5: * style: add newlines after variable declarations and before return in iomm= u.h * drop device_is_protected() check in iommu_add_dt_pci_sideband_ids() * rebase on top of ("dynamic node programming using overlay dtbo") series * fix typo in commit message * remove #ifdef around dt_map_id() prototype * move dt_map_id() to xen/common/device_tree.c * add function name in error prints * use dprintk for debug prints * use GENMASK and #include * fix typo in comment * remove unnecessary (int) cast in loop condition * assign *id_out and return success in case of no translation in dt_map_id() * don't initialize local variable unnecessarily * return error in case of ACPI/no DT in iommu_add_{dt_}pci_sideband_ids() v3->v4: * wrap #include and if ( acpi_disabled ) in #ifdef CONFIG_ACPI * fix Michal's remarks about style, parenthesis, and print formats * remove !ops->dt_xlate check since it is already in iommu_dt_xlate helper * rename s/iommu_dt_pci_map_id/dt_map_id/ because it is generic, not specif= ic to iommu * update commit description v2->v3: * new patch title (was: iommu/arm: Introduce iommu_add_dt_pci_device API) * renamed function from: iommu_add_dt_pci_device to: iommu_add_dt_pci_sideband_ids * removed stale ops->add_device check * iommu.h: add empty stub iommu_add_dt_pci_sideband_ids for !HAS_DEVICE_TREE * iommu.h: add iommu_add_pci_sideband_ids helper * iommu.h: don't wrap prototype in #ifdef CONFIG_HAS_PCI * s/iommu_fwspec_free(pci_to_dev(pdev))/iommu_fwspec_free(dev)/ v1->v2: * remove extra devfn parameter since pdev fully describes the device * remove ops->add_device() call from iommu_add_dt_pci_device(). Instead, re= ly on the existing iommu call in iommu_add_device(). * move the ops->add_device and ops->dt_xlate checks earlier downstream->v1: * rebase * add const qualifier to struct dt_device_node *np arg in dt_map_id() * add const qualifier to struct dt_device_node *np declaration in iommu_add= _pci_device() * use stdint.h types instead of u8/u32/etc... * rename functions: s/dt_iommu_xlate/iommu_dt_xlate/ s/dt_map_id/iommu_dt_pci_map_id/ s/iommu_add_pci_device/iommu_add_dt_pci_device/ * add device_is_protected check in iommu_add_dt_pci_device * wrap prototypes in CONFIG_HAS_PCI (cherry picked from commit 734e3bf6ee77e7947667ab8fa96c25b349c2e1da from the downstream branch poc/pci-passthrough from https://gitlab.com/xen-project/people/bmarquis/xen-arm-poc.git) --- xen/arch/arm/include/asm/iommu.h | 15 +++++ xen/common/device-tree/device-tree.c | 91 +++++++++++++++++++++++++++ xen/drivers/passthrough/arm/iommu.c | 13 ++++ xen/drivers/passthrough/device_tree.c | 42 +++++++++++++ xen/include/xen/device_tree.h | 23 +++++++ xen/include/xen/iommu.h | 21 ++++++- 6 files changed, 204 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/include/asm/iommu.h b/xen/arch/arm/include/asm/io= mmu.h index d57bd8a38c..ad15477e24 100644 --- a/xen/arch/arm/include/asm/iommu.h +++ b/xen/arch/arm/include/asm/iommu.h @@ -34,6 +34,21 @@ int __must_check arm_iommu_unmap_page(struct domain *d, = dfn_t dfn, unsigned int order, unsigned int *flush_flags); =20 +/* + * This function is not strictly ARM-specific, but it is only used by ARM + * as of now. So put it here to avoid creating dead code on other + * architectures. When usage is extended to other architectures, it should + * be moved to the generic header. + * + * + * Fills out the device's IOMMU fwspec with IOMMU ids. + * + * Return values: + * 0 : iommu_fwspec is filled out successfully. + * <0 : error while filling out the iommu_fwspec. + * >0 : IOMMU is not enabled/present or device is not connected to it. + */ +int iommu_add_pci_sideband_ids(struct pci_dev *pdev); #endif /* __ARCH_ARM_IOMMU_H__ */ =20 /* diff --git a/xen/common/device-tree/device-tree.c b/xen/common/device-tree/= device-tree.c index 886e6c7712..7bede20fa6 100644 --- a/xen/common/device-tree/device-tree.c +++ b/xen/common/device-tree/device-tree.c @@ -7,6 +7,7 @@ * benh@kernel.crashing.org */ =20 +#include #include #include #include @@ -2221,6 +2222,96 @@ int dt_get_pci_domain_nr(struct dt_device_node *node) return (u16)domain; } =20 +int dt_map_id(const struct dt_device_node *np, uint32_t id, + const char *map_name, const char *map_mask_name, + struct dt_device_node **target, uint32_t *id_out) +{ + uint32_t map_mask, masked_id, map_len; + const __be32 *map =3D NULL; + + if ( !np || !map_name || (!target && !id_out) ) + return -EINVAL; + + map =3D dt_get_property(np, map_name, &map_len); + if ( !map ) + { + if ( target ) + return -ENODEV; + + /* Otherwise, no map implies no translation */ + *id_out =3D id; + return 0; + } + + if ( !map_len || (map_len % (4 * sizeof(*map))) ) + { + printk(XENLOG_ERR "%s(): %s: Error: Bad %s length: %u\n", __func__, + np->full_name, map_name, map_len); + return -EINVAL; + } + + /* The default is to select all bits. */ + map_mask =3D GENMASK(31, 0); + + /* + * Can be overridden by "{iommu,msi}-map-mask" property. + * If dt_property_read_u32() fails, the default is used. + */ + if ( map_mask_name ) + dt_property_read_u32(np, map_mask_name, &map_mask); + + masked_id =3D map_mask & id; + for ( ; map_len > 0; map_len -=3D 4 * sizeof(*map), map +=3D 4 ) + { + struct dt_device_node *phandle_node; + uint32_t id_base =3D be32_to_cpu(*(map + 0)); + uint32_t phandle =3D be32_to_cpu(*(map + 1)); + uint32_t out_base =3D be32_to_cpu(*(map + 2)); + uint32_t id_len =3D be32_to_cpu(*(map + 3)); + + if ( id_base & ~map_mask ) + { + printk(XENLOG_ERR "%s(): %s: Invalid %s translation - %s-mask = (0x%"PRIx32") ignores id-base (0x%"PRIx32")\n", + __func__, np->full_name, map_name, map_name, map_mask, + id_base); + return -EFAULT; + } + + if ( (masked_id < id_base) || (masked_id >=3D (id_base + id_len)) ) + continue; + + phandle_node =3D dt_find_node_by_phandle(phandle); + if ( !phandle_node ) + return -ENODEV; + + if ( target ) + { + if ( !*target ) + *target =3D phandle_node; + + if ( *target !=3D phandle_node ) + continue; + } + + if ( id_out ) + *id_out =3D masked_id - id_base + out_base; + + dprintk(XENLOG_DEBUG, "%s: %s, using mask %08"PRIx32", id-base: %0= 8"PRIx32", out-base: %08"PRIx32", length: %08"PRIx32", id: %08"PRIx32" -> %= 08"PRIx32"\n", + np->full_name, map_name, map_mask, id_base, out_base, id_le= n, id, + masked_id - id_base + out_base); + return 0; + } + + dprintk(XENLOG_DEBUG, "%s: no %s translation for id 0x%"PRIx32" on %s\= n", + np->full_name, map_name, id, + (target && *target) ? (*target)->full_name : NULL); + + if ( id_out ) + *id_out =3D id; + + return 0; +} + /* * Local variables: * mode: C diff --git a/xen/drivers/passthrough/arm/iommu.c b/xen/drivers/passthrough/= arm/iommu.c index fc453180f0..100545e23f 100644 --- a/xen/drivers/passthrough/arm/iommu.c +++ b/xen/drivers/passthrough/arm/iommu.c @@ -15,6 +15,7 @@ * GNU General Public License for more details. */ =20 +#include #include #include #include @@ -151,3 +152,15 @@ bool arch_iommu_use_permitted(const struct domain *d) { return true; } + +int iommu_add_pci_sideband_ids(struct pci_dev *pdev) +{ + int ret =3D -EOPNOTSUPP; + +#ifdef CONFIG_HAS_PCI + if ( acpi_disabled ) + ret =3D iommu_add_dt_pci_sideband_ids(pdev); +#endif + + return ret; +} diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthroug= h/device_tree.c index 4a1971c3fc..37e1437b65 100644 --- a/xen/drivers/passthrough/device_tree.c +++ b/xen/drivers/passthrough/device_tree.c @@ -161,6 +161,48 @@ static int iommu_dt_xlate(struct device *dev, return ops->dt_xlate(dev, iommu_spec); } =20 +#ifdef CONFIG_HAS_PCI +int iommu_add_dt_pci_sideband_ids(struct pci_dev *pdev) +{ + const struct iommu_ops *ops =3D iommu_get_ops(); + struct dt_phandle_args iommu_spec =3D { .args_count =3D 1 }; + struct device *dev =3D pci_to_dev(pdev); + const struct dt_device_node *np; + int rc; + + if ( !iommu_enabled ) + return 1; + + if ( !ops ) + return -EINVAL; + + if ( dev_iommu_fwspec_get(dev) ) + return -EEXIST; + + np =3D pci_find_host_bridge_node(pdev); + if ( !np ) + return -ENODEV; + + /* + * According to the Documentation/devicetree/bindings/pci/pci-iommu.txt + * from Linux. + */ + rc =3D dt_map_id(np, PCI_BDF(pdev->bus, pdev->devfn), "iommu-map", + "iommu-map-mask", &iommu_spec.np, iommu_spec.args); + if ( rc ) + return (rc =3D=3D -ENODEV) ? 1 : rc; + + rc =3D iommu_dt_xlate(dev, &iommu_spec, ops); + if ( rc < 0 ) + { + iommu_fwspec_free(dev); + return -EINVAL; + } + + return rc; +} +#endif /* CONFIG_HAS_PCI */ + int iommu_remove_dt_device(struct dt_device_node *np) { const struct iommu_ops *ops =3D iommu_get_ops(); diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h index d2de7c3a13..a7cc092d05 100644 --- a/xen/include/xen/device_tree.h +++ b/xen/include/xen/device_tree.h @@ -959,6 +959,29 @@ int dt_count_phandle_with_args(const struct dt_device_= node *np, */ int dt_get_pci_domain_nr(struct dt_device_node *node); =20 +/** + * dt_map_id - Translate an ID through a downstream mapping. + * @np: root complex device node. + * @id: device ID to map. + * @map_name: property name of the map to use. + * @map_mask_name: optional property name of the mask to use. + * @target: optional pointer to a target device node. + * @id_out: optional pointer to receive the translated ID. + * + * Given a device ID, look up the appropriate implementation-defined + * platform ID and/or the target device which receives transactions on that + * ID, as per the "iommu-map" and "msi-map" bindings. Either of @target or + * @id_out may be NULL if only the other is required. If @target points to + * a non-NULL device node pointer, only entries targeting that node will be + * matched; if it points to a NULL value, it will receive the device node = of + * the first matching target phandle, with a reference held. + * + * Return: 0 on success or a standard error code on failure. + */ +int dt_map_id(const struct dt_device_node *np, uint32_t id, + const char *map_name, const char *map_mask_name, + struct dt_device_node **target, uint32_t *id_out); + struct dt_device_node *dt_find_node_by_phandle(dt_phandle handle); =20 void device_tree_get_reg(const __be32 **cell, uint32_t address_cells, diff --git a/xen/include/xen/iommu.h b/xen/include/xen/iommu.h index 832775754b..ebfada1d88 100644 --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -241,7 +241,8 @@ int iommu_dt_domain_init(struct domain *d); int iommu_release_dt_devices(struct domain *d); =20 /* - * Helper to add master device to the IOMMU using generic IOMMU DT binding= s. + * Helpers to add master device to the IOMMU using generic (PCI-)IOMMU + * DT bindings. * * Return values: * 0 : device is protected by an IOMMU @@ -251,6 +252,19 @@ int iommu_release_dt_devices(struct domain *d); */ int iommu_add_dt_device(struct dt_device_node *np); =20 +/* + * Fills out the device's IOMMU fwspec with IOMMU ids from the DT. + * Ids are specified in the iommu-map property in the host bridge node. + * More information on the iommu-map property format can be found in + * Documentation/devicetree/bindings/pci/pci-iommu.txt from Linux. + * + * Return values: + * 0 : iommu_fwspec is filled out successfully. + * <0 : error while filling out the iommu_fwspec. + * >0 : IOMMU is not enabled/present or device is not connected to it. + */ +int iommu_add_dt_pci_sideband_ids(struct pci_dev *pdev); + int iommu_do_dt_domctl(struct xen_domctl *domctl, struct domain *d, XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl); =20 @@ -286,6 +300,11 @@ static inline int iommu_release_dt_devices(struct doma= in *d) return 0; } =20 +static inline int iommu_add_dt_pci_sideband_ids(struct pci_dev *pdev) +{ + return -EOPNOTSUPP; +} + #endif /* HAS_PASSTHROUGH */ =20 #endif /* HAS_DEVICE_TREE */ --=20 2.34.1 From nobody Fri Oct 31 03:41:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1751440228; cv=pass; d=zohomail.com; s=zohoarc; b=jrXkalOneXrsVLVWHCbi8EXbj+m2Z3Gcz4Q4rNXgCXJQn1YFkgFYv/bPv9OiHmnHVK9tLwRQyjgFlLkcxuhFoSAvtCVFDUspwci5caSLca3D0st+Dj6mPo+nevXoRi2mTre8LKL4uE5y1ZHpjSfG+wnmIkLvYhTtwGaGhZdN5gM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751440228; 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=tFMrwvdI90/S2XJkDYMV5NxiGLa7/5GzkUvafo1B5c4=; b=DKxkloevuFfNbEk9aJ2qzeEbKW9EBPbM6YF0BlYLbf+6XEX4191oWHsUwGLXSr+ESxk1Q5weEOA6xFg6p42J/Z4vq1TDsDdf3pw9mDKTlhcP3iL7AtE6rPs/L7vxQdcD/Gqp8yixmhQWVTbUFmAxtCZ23hypvrYi1O5Bji8zjWQ= 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 1751440228621585.4723063900506; Wed, 2 Jul 2025 00:10:28 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1030260.1403908 (Exim 4.92) (envelope-from ) id 1uWrbh-0000xT-Ab; Wed, 02 Jul 2025 07:10:13 +0000 Received: by outflank-mailman (output) from mailman id 1030260.1403908; Wed, 02 Jul 2025 07:10:13 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbh-0000xK-6g; Wed, 02 Jul 2025 07:10:13 +0000 Received: by outflank-mailman (input) for mailman id 1030260; Wed, 02 Jul 2025 07:10:11 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbf-0000Dm-S6 for xen-devel@lists.xenproject.org; Wed, 02 Jul 2025 07:10:11 +0000 Received: from AS8PR03CU001.outbound.protection.outlook.com (mail-westeuropeazlp170120005.outbound.protection.outlook.com [2a01:111:f403:c201::5]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 97929abc-5713-11f0-a313-13f23c93f187; Wed, 02 Jul 2025 09:10:10 +0200 (CEST) Received: from AS2PR03MB10110.eurprd03.prod.outlook.com (2603:10a6:20b:57a::22) by PR3PR03MB6651.eurprd03.prod.outlook.com (2603:10a6:102:78::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.20; Wed, 2 Jul 2025 07:10:01 +0000 Received: from AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873]) by AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873%5]) with mapi id 15.20.8901.018; Wed, 2 Jul 2025 07:10:01 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 97929abc-5713-11f0-a313-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PCLYZ5T//NQNavUWByYWzd4qFw3ldqlRjHkcvnNE+GBRdbxZZtedx0fI07ga2nljX3nDraP/azPalsNKv7VqUj9m1t9eCkSrDuxu98MpcuUSE6aWuWZpdM7FZ3r6/64yursIET328dKjnj4xjS9OoAnIFYIyUYssdivBAJPscyBBYdJ0IOyLJiGbIWcWVz2RZ+7NsKk3Pmn1UOMbGLwboQol8XVtwPHvNFAQYTxbHnxsLbXDHTqxTVMxpaVXEkln8aIyusmtlErH0YwLjOn2z5gvAJ9A5MyX5uCRG2TT/3Z3P6ZYIDbWmFieMsnqJ3jSyp/p0b0OWHNWfapJzh+a1g== 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=tFMrwvdI90/S2XJkDYMV5NxiGLa7/5GzkUvafo1B5c4=; b=k7wSL0oT5vFJbuR3A4a7mee4g+1N+HIgAMoSq0PphNw4ls4CcWfNSszAjxf0Ikn2I+UpIbtN8R1QCIEI3KSRMRTEKoOmdlPnHRKhZRnA54q5WOzrEl+jneMAv1BKQQaU+hf+VKlXauD1NewRBc7B3U7xUj0zdFGotYiUOo0R6LMQa1e/HVkEV9haprIFI9rRPYpbKoCno6yGvpM2YLB6Lx6KaCp2H4TX1gTWuiVzgDsZKX1/rjcYZypfgg7yVXi5WahcgaUUXheE8R2XdenTMu07D0mHF/9jZeNE2ltnITuqQRUjF39N5WtH1TgxNfJQlPWktv5+DX9Ny7dWpES6lQ== 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=tFMrwvdI90/S2XJkDYMV5NxiGLa7/5GzkUvafo1B5c4=; b=ce0VOR2Q969XOThPYbp6aWCf5ehfWgcPO09tFUS78iWQEO20i4pEgmHX6AKjibn1asxRqY/dGtUqqj+gXxKRZR+LN61Q6JXORVrnqqSfGE3LU6LIKusKyjqru7evv5C7u2QBiSW6P7pcJiVVkblAEzwBhfZSND5u6N+2shi3H8DoCJ0411wubYip2gLKcZDmUR/h9x/Xa/vLWKk8xpIokXl6CiEXsp6/zXwo9W522yA4UnWV2OIcs0fBogaw9sQs/mbI2Vorf1FJA4cWY+7UFAGXiMIhl0Z0Q/n+/pb2SZMFx1OENGGbE6wPQVog4iViJm0GdNKU4fFbkkG1fWHelw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Stewart Hildebrand , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel Subject: [PATCH v12 2/7] iommu/arm: iommu_add_dt_pci_sideband_ids phantom handling Thread-Topic: [PATCH v12 2/7] iommu/arm: iommu_add_dt_pci_sideband_ids phantom handling Thread-Index: AQHb6yBTwqyznQ97DkWM9WPRfJRL1g== Date: Wed, 2 Jul 2025 07:10:01 +0000 Message-ID: <1728f90377977cbc15e1e70d8946abc53dbdbe43.1751439885.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: AS2PR03MB10110:EE_|PR3PR03MB6651:EE_ x-ms-office365-filtering-correlation-id: 1d99bfbe-6231-4749-7070-08ddb9377617 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?cdj7nB5NIFhCNHybt8E+PvwPN0g9f8+HUQDFs11L9hN3714UwYds9xQ+e1?= =?iso-8859-1?Q?vJ7tlxrOEIgKR/F85PWiPVM47t3KclyXQvH/xN9EDwofQFQEcHe7YEc2ij?= =?iso-8859-1?Q?bzwWPi8kjGxyLlCM3OpAKQCJuzCXtLvwnSWJCCqIW8pfdXqWBFG/qYtwnw?= =?iso-8859-1?Q?vgYJl4I0fhAh2wVQD5qPY+hQqzK605OUrBznrIw7+PS6mmDFAzKICOzDs8?= =?iso-8859-1?Q?OVpWzr3J13bvFfqPUrXJ63XYeG3qkzXKTfgvYcZHZzOcUsMu5zn+gXKXNx?= =?iso-8859-1?Q?90PxBHfSgqxiK2Tba8v+vxJYejq629HIeeIADOS24Lm3ywlcd0uQk/nosO?= =?iso-8859-1?Q?IN1S/gruQPtBn+Jd2GWvAcAUGEK1QE4O1P271FbxTDvmdTt18TVnXr3KXR?= =?iso-8859-1?Q?rTPMPAD9chKgJgXNeSyUDzp1vfgSAf9I/htXQToyw84/SIKzK+BhyFDkmc?= =?iso-8859-1?Q?gLfvHA7Tj8hFRjysk6jODG2PyKc4QE9MX6t45NwuWNQ0gVBAayiY9UJL1H?= =?iso-8859-1?Q?dertpkY2NgL5qYEcNstf+VUxuMe5pBJSlGvBNRBPG6b1dEZmb1vvPQN7Ro?= =?iso-8859-1?Q?prQqPC97jQuGrU4PNE96Tccu5C1EePJZXV8QmGXKvQYZ7Z3KcS9bS1Jje7?= =?iso-8859-1?Q?kjioncg5KrSe9W4Q3RRVOrfS5riYZlvvNzFHpSaNjOzwskU7ARrTp2cxgG?= =?iso-8859-1?Q?V+U0EWcq4+bxgoCGGHuzNq6j/JA7UnsfnSpgTw3UJnmkNt6OQphkq8f/H9?= =?iso-8859-1?Q?npq4XYu2EiKy7uiUaVyd3bbtv6UlbYcbRrVTgsUE3sKGjfR1dIR4Cmdypy?= =?iso-8859-1?Q?Fy2ttzlQ6diij1u4B3DclLVm/TQ9KM/UkOQ8Q6VibrPyrP0tek3XPnIR30?= =?iso-8859-1?Q?Fs2QuzXKCdTWP2fGtO/bbH0KmFnMO8IYkimB6ONuC6cMFBUc2nUAYS7Xf4?= =?iso-8859-1?Q?jt+JylCYY2MJ0BkpSw7zqzxE2nQEl98I9rKq3JbIkT9pGw9XbAru2vKmbs?= =?iso-8859-1?Q?m1PrFR+pPUqxwpdP/ySfVFRE8gsjjLX7ILFX1BDgHSREFg76NGHK5W9m6J?= =?iso-8859-1?Q?D8jpE+pUi2GzxkV1RgkmFHNbTFQgR9a6oLYp//BLe69amJVyQDwQGdBNpO?= =?iso-8859-1?Q?9jvvl2KmTWlBvHxiP2yth1asDvYEUBcSnTkga4+lnWAAZNPxbtToKbtYu1?= =?iso-8859-1?Q?t4WKvU4gIup1T7cnp6iUeGAWFYmPfDZTJHNyjEZhqRNcnubdblpQk02/6s?= =?iso-8859-1?Q?Cxl7GImH+eWEwCaeMEsFkxNq0MVomHbz3BtWKonlaZNwNetVFg/Vo7YvxB?= =?iso-8859-1?Q?1czYEgUcW+oiYk8QU0DQp6ek41dq29rLLnX6QsopxJSTjY4Yjc0wXkXCKL?= =?iso-8859-1?Q?QKW/r+OC0C6HotGFFTD5kbeoNaOqDGlyIMROSLV3tAcn/soF2slh04aoQp?= =?iso-8859-1?Q?1pNd5Dit+wWsBrQCqtZ2/6dl9xL8XHmp00l91J0SvW43/r8wE9hbIEqdD0?= =?iso-8859-1?Q?/SkPhnj4uFE6Gx26LTMnDmPVXYtZMbKQUBoEGmVu/y6B1Fva7cJb9OArue?= =?iso-8859-1?Q?r1LtKgA=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS2PR03MB10110.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?UF1uB4kHKve0iA731HI+JcHGeQGrMRVD0feu2lyp9y3xL/C0ifie4BhI+S?= =?iso-8859-1?Q?fPleS7Ax2m5kpmPmnN2NGf/2q5AgjV16j7OrayR42FbZEXU7AkVAlEAvP9?= =?iso-8859-1?Q?xVsZ5+Wbwbh+2AbDQS9pOK2Kq2y8tdKhRQeiWN6aftxmrBqhMvFOUO+G7f?= =?iso-8859-1?Q?iA4w9tpWCRXFwsBjtChQcNjByos/FxC2DfhI6Oo26p9yr+8wcTdd8g4jyt?= =?iso-8859-1?Q?tgFIxX8VXHSrpLOC7nnBlV4f8bvrXuYj3wtg10L+wrxayJytSYVFF/oI8R?= =?iso-8859-1?Q?VUPtlWchi/jEliwgL3XV1ugZztVCQbjRkskeeIIGx3/wv0o/0jIeBfDpWx?= =?iso-8859-1?Q?FUTy04bwwE5I6MzamcF3UT5Wqjn4SPZq9gFXOJOSsbGHFHXsZtkafiGm0y?= =?iso-8859-1?Q?J9PLrGA34lguCYvtxKXSpzYEEiwndCKzurJk3Mj7ULTpWQ/WBv8aFgKeIz?= =?iso-8859-1?Q?yp/whplARvmR+fi5zHHp25s6ZBJ1BwMf+TcjgHR+bptgv6iHZGvdFvOU9Y?= =?iso-8859-1?Q?JVvY6aV81Ckeec6TNiEam9y7AHvo/iW3rtpJzZ0Es9ipBVbzXnDjdfPXzK?= =?iso-8859-1?Q?z67uuyAvTRh0JDSvA4LLMs5+MtFoCkC/1F7UGkRGVhNr3MIBZ6N5LuXd6i?= =?iso-8859-1?Q?r+s90I1jG6RMubkW7KyirCh/4mmUH70Lqd+WicNEhnjWhbPPcqk1TnQSsd?= =?iso-8859-1?Q?XJXJ6lf2zQjpmS02FyR2Hd4dZSVw22TR1n72nW0yxsEzf8oNzjgqDNdb5x?= =?iso-8859-1?Q?LE3RXXef31KJIHKTQqsMhpvhIQXqlL0lAvjzWfZF4KQbh371gbyO/Uek25?= =?iso-8859-1?Q?Lmv5f4ayF7W/M+cBkuPaxBOh0Kj3qfq4jrRFz/O9E4gm8OoBUEAPIcS9Dq?= =?iso-8859-1?Q?7ILjqBruW/+7oThZCXyNhVYSrx82hLZ5bIrfbb76/JSgSUrum1j1nFUn7c?= =?iso-8859-1?Q?gccKO7v7WFj8i4u3y8yd01EffelWWsHRDvFQddoiA+mCXVifXkWp09n/Q/?= =?iso-8859-1?Q?vlc/rKFSf5g8ESq3+vSkcJMVLOg4YAEj9g3hupfDXlN1U3Pxuzw+CTs3YB?= =?iso-8859-1?Q?DkVb+kPe78qoVxGNS5svPECiyLKEQG/gVYhFbYgHO3Fi7ouJQgANZdgjUB?= =?iso-8859-1?Q?WaUV/NCd+ZblBoSs/MjxwZ7qwJq/t3EQj5a9JF4dwsMfnp/35gatx0pXvI?= =?iso-8859-1?Q?8grotwVp6zQf1XBteYZZHEwRt8y3ZOT+NtxjFQjNnJED/KYIofh6/Nv9MX?= =?iso-8859-1?Q?wVGLyXBpW/nY6c71KQCjen1BFXFr669JfE/KulLfcyle27SRBvAbfaF3V4?= =?iso-8859-1?Q?p/tOQw46OwrNu/fK6BLjfHERo1gzquS9uGLmTUdg7y7ym+Gq6n/IoC5b5O?= =?iso-8859-1?Q?OVaiaibFropci5/gNmfrp7CLi68lOBz/ssLcrA4yJUvLIV+2+sswR3jaBY?= =?iso-8859-1?Q?Yu0dwySudZUIIEb7WG2PY8Hp3WsWAewUTSKodWccT2gpCQTvEspHk1kPS8?= =?iso-8859-1?Q?4BRYY9MRnyDmK9lwcizoNR83FJgra3ytbseGocUcPZB45bRn4wRi24RwQE?= =?iso-8859-1?Q?LcvKlgOwNAao9cTxbdaQkIaCjbRnUp7nAgevhD8KM51DyLBpbfI081VA3i?= =?iso-8859-1?Q?TIDjCLxgKhmZXFdIosIkulHge58MZZcbsbYA5sxFcsP+6rXfRVIx/XKA?= =?iso-8859-1?Q?=3D=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: AS2PR03MB10110.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d99bfbe-6231-4749-7070-08ddb9377617 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jul 2025 07:10:01.1883 (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: fSTXCT2cr3bT8EF8KwqapGItBCPgN+uiuLq9fpokaBW/aImmsdVaqeyQqoZgFLhq+3q9ylhOXkOuXst/CNOl5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR03MB6651 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1751440229858116600 Content-Type: text/plain; charset="utf-8" From: Stewart Hildebrand Handle phantom functions in iommu_add_dt_pci_sideband_ids(). Each phantom function will have a unique requestor ID (RID)/BDF. On ARM, we need to map/translate the RID/BDF to an AXI stream ID for each phantom function according to the pci-iommu device tree mapping [1]. The RID/BDF -> AXI stre= am ID mapping in DT could allow phantom devices (i.e. devices with phantom functi= ons) to use different AXI stream IDs based on the (phantom) function. [1] https://www.kernel.org/doc/Documentation/devicetree/bindings/pci/pci-io= mmu.txt Signed-off-by: Stewart Hildebrand Reviewed-by: Stefano Stabellini --- v11->v12: * no changes v10->v11: * no changes v9->v10: * Add Stefano's RB v8->v9: * replace DT_NO_IOMMU with 1 v7->v8: * no change v6->v7: * no change v5->v6: * no change v4->v5: * no change v3->v4: * s/iommu_dt_pci_map_id/dt_map_id/ v2->v3: * new patch title (was: iommu/arm: iommu_add_dt_pci_device phantom handling) * rework loop to reduce duplication * s/iommu_fwspec_free(pci_to_dev(pdev))/iommu_fwspec_free(dev)/ v1->v2: * new patch --- TODO: investigate Jan's comment [2] [2] https://lore.kernel.org/xen-devel/806a2978-19fb-4d31-ab6a-35ea7317c8de@= suse.com/ --- xen/drivers/passthrough/device_tree.c | 33 ++++++++++++++++----------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthroug= h/device_tree.c index 37e1437b65..f5850a2607 100644 --- a/xen/drivers/passthrough/device_tree.c +++ b/xen/drivers/passthrough/device_tree.c @@ -169,6 +169,7 @@ int iommu_add_dt_pci_sideband_ids(struct pci_dev *pdev) struct device *dev =3D pci_to_dev(pdev); const struct dt_device_node *np; int rc; + unsigned int devfn =3D pdev->devfn; =20 if ( !iommu_enabled ) return 1; @@ -183,21 +184,27 @@ int iommu_add_dt_pci_sideband_ids(struct pci_dev *pde= v) if ( !np ) return -ENODEV; =20 - /* - * According to the Documentation/devicetree/bindings/pci/pci-iommu.txt - * from Linux. - */ - rc =3D dt_map_id(np, PCI_BDF(pdev->bus, pdev->devfn), "iommu-map", - "iommu-map-mask", &iommu_spec.np, iommu_spec.args); - if ( rc ) - return (rc =3D=3D -ENODEV) ? 1 : rc; + do { + /* + * According to the Documentation/devicetree/bindings/pci/pci-iomm= u.txt + * from Linux. + */ + rc =3D dt_map_id(np, PCI_BDF(pdev->bus, devfn), "iommu-map", + "iommu-map-mask", &iommu_spec.np, iommu_spec.args); + if ( rc ) + return (rc =3D=3D -ENODEV) ? 1 : rc; =20 - rc =3D iommu_dt_xlate(dev, &iommu_spec, ops); - if ( rc < 0 ) - { - iommu_fwspec_free(dev); - return -EINVAL; + rc =3D iommu_dt_xlate(dev, &iommu_spec, ops); + if ( rc < 0 ) + { + iommu_fwspec_free(dev); + return -EINVAL; + } + + devfn +=3D pdev->phantom_stride; } + while ( (devfn !=3D pdev->devfn) && + (PCI_SLOT(devfn) =3D=3D PCI_SLOT(pdev->devfn)) ); =20 return rc; } --=20 2.34.1 From nobody Fri Oct 31 03:41:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1751440229; cv=pass; d=zohomail.com; s=zohoarc; b=IO+DeckwmVw68Avp+WYrfemyPmZFXs+S2wjnxLOd+q/JVztXPuD7/BxFsUa2FUk8Rln4dZnaF1IIsVZfLP7D26Tu/4LgTtOWDoCdiVIT8csQygQ1tIoyTuupldGbGtztstXea//BPq/I+sruwv4+SAkj7DPK6RsqEgG3KyW08sM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751440229; 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=DIIcGlVr/BO7F4+hxZXT4qb8KBlRTEjHiqBoLpfbN+M=; b=Rr2iUy3WUJHmIw5eUm29vATfnSFjcJMJKYcx73y9hsVrfIMapKXL859Y/cLNeVttCX/gBkOiq3q767vfkkv9sBwsd8rmTudGu2/8K7khc9fRB71d6jXz0Ak/NVh/FCt4AzKZxQKBtzVWeSzbIWBtSM/dsfX2FNqFh3kcMdnqaXg= 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 175144022924433.133117202498624; Wed, 2 Jul 2025 00:10:29 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1030259.1403897 (Exim 4.92) (envelope-from ) id 1uWrbf-0000hs-TG; Wed, 02 Jul 2025 07:10:11 +0000 Received: by outflank-mailman (output) from mailman id 1030259.1403897; Wed, 02 Jul 2025 07:10:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbf-0000hl-Q6; Wed, 02 Jul 2025 07:10:11 +0000 Received: by outflank-mailman (input) for mailman id 1030259; Wed, 02 Jul 2025 07:10:11 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbe-0000Dm-S1 for xen-devel@lists.xenproject.org; Wed, 02 Jul 2025 07:10:10 +0000 Received: from AS8PR03CU001.outbound.protection.outlook.com (mail-westeuropeazlp170120005.outbound.protection.outlook.com [2a01:111:f403:c201::5]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 970b893c-5713-11f0-a313-13f23c93f187; Wed, 02 Jul 2025 09:10:10 +0200 (CEST) Received: from AS2PR03MB10110.eurprd03.prod.outlook.com (2603:10a6:20b:57a::22) by PR3PR03MB6651.eurprd03.prod.outlook.com (2603:10a6:102:78::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.20; Wed, 2 Jul 2025 07:10:01 +0000 Received: from AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873]) by AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873%5]) with mapi id 15.20.8901.018; Wed, 2 Jul 2025 07:10:01 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 970b893c-5713-11f0-a313-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DZmrshv4m8lkfexXQn7NH8LuHxKVblgTgTpWRj2BNM8hyAlHpvHA6JEWJ26ISL8S1upGSxDo3FHcu7rgy1J9uZM7W1gqAbuodiyBRh1GHJnl22ZbEGB2ynOx5FMEnvcSoor+DrzpUy0gOMuqZkbRXhTlyvAKLbMUOva6eIbgiMnq/tlSr+mqIaYZF8bRC0Mz2TjQ69lLuo/G6noQfC7E2rL8OKLhbe3MOdKDMYn2Bez7F5xsmHbpOu7mRHz3oHEDK7Pt2NMaJjAroAUBGhHp4YssppvWAoC/Rinr9sAqzZXl9zAcs9uheKH89dymYbkNXYaNJPPNSvvAEQodv7QnTQ== 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=DIIcGlVr/BO7F4+hxZXT4qb8KBlRTEjHiqBoLpfbN+M=; b=LeSk1SI1zE3gwqHIciCNfDnnVkgxzFU765g7RJFcas6c58ELZYVBpSUA0p2oy5U70S/Mi5ZA8Fl0C0EIFqvMySRTDK5l/k98dC/VQR8UqS1kMNFR7/G3uj8nYXnGqfV0v3o6Kf5yI77OCj+eqQ07Kg+c6L9S6uO+2Ean4Xu6w9IEUZCWRoazqbOgsO08noHcAYmPgqB4c2R+yc0B/lN0B0fTJgZp137fiJA0KJ70/xSgeeFl+YlJxInnewqrTdyV/zlouQ/OFjplmv9vGdWSdRsMOLJ48EecK5p/tdOtkitp7gska6gL+fS4HsNzL/VGA3jEFyYMRz49qemWjdfkzQ== 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=DIIcGlVr/BO7F4+hxZXT4qb8KBlRTEjHiqBoLpfbN+M=; b=W50Nyy6ui1eRSwYY2rdoPMx/1r1+TiTlnuB50EIs0phhorY6kwVBWC3F6M6k6nUfFqSUHIcmSfpgfvGmhJuddTP+b8dYWKcOTBmMuIeOPrq6CrLnZa91h5pGkUdK3TVcjLZEez9ykDxeyxs/RsVLOGoz1+xMj3OIrYb6/Gbpe4gEO89y7p9HgrEkbA+C2zgb9DCjxIqOoeuKtrpytkC71JJ9lMI6Crr8upeXzVuAif7ps0n96cUMELjzLRa7eJ1UKsWcz93whMffd/0CB0fHbfDmT8X91CDU4bL/Z1fp5WzZZiyC51rkYv2XqP5xfU+giiqsgVSDJjKa81oIceOoVQ== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Oleksandr Andrushchenko , Julien Grall , Rahul Singh , Stefano Stabellini , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Oleksandr Tyshchenko , Stewart Hildebrand , Mykyta Poturai Subject: [PATCH v12 3/7] xen/arm: smmuv2: Add PCI devices support for SMMUv2 Thread-Topic: [PATCH v12 3/7] xen/arm: smmuv2: Add PCI devices support for SMMUv2 Thread-Index: AQHb6yBTcdAXyDYYaEel1IG+lLmFMg== Date: Wed, 2 Jul 2025 07:10:01 +0000 Message-ID: <68553b4def0e6d343fd02e0c03d5a11351e91582.1751439885.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: AS2PR03MB10110:EE_|PR3PR03MB6651:EE_ x-ms-office365-filtering-correlation-id: 9143ec4a-f0e0-4644-6ac8-08ddb9377664 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?MHDMxsucKhX22jlXAKL163gNP9TD5a/ozE5/c606j6dbRM73pevEqTnYKA?= =?iso-8859-1?Q?yd75+08e1g49i5BlhwEDJAEMHF47AqPdYaJ2j+NqybgWQlZ5OMiTiEIySN?= =?iso-8859-1?Q?28Jb/VoI1sYLU+jLUSU9A3VAS6j30NFq2CIkLLWRGhdkEqXcXEgUfi08f7?= =?iso-8859-1?Q?3f1yIdPjbfDfghCu3QMCLECvvtBlDXQH88gNC8RAbzdCXBBKgIIgmP/5Z9?= =?iso-8859-1?Q?TJm1NRU/g44r6FzeXOTTKHF3VPuju5p1r/zSfVMq48XsbnkxLiI9eQXf5b?= =?iso-8859-1?Q?j1V7kSssDTJ70pWusXFf8wcbcSQPqT68yWlUcLuNsqQFuGDmbbdQ6m6JeZ?= =?iso-8859-1?Q?O30W4bUwnrzEA6Z8if6OLjqmhJTsO9czt1e0tv88aYEZp+epilL9FwRwu6?= =?iso-8859-1?Q?WyScQO6XcoYy7JIC82Ev8y4/qlgFJ51uYv+OiJoF0PLOxiuCGsJA+502mO?= =?iso-8859-1?Q?YJcRi8tZSkKFprDOHCE0fFVyENJt68net89SARSQ5qmnRG+lfI76JouYz/?= =?iso-8859-1?Q?jfkd9pxZMM1V//HmkNDcKTRJ2PmA6N4agagMC6piQI1vn/TPwic/Ijqx8n?= =?iso-8859-1?Q?P0qWjGJS6/Czxi97cRwyf1jOu2sJEL481SQS2RxA+ynIhtwbzpXh9zLQnK?= =?iso-8859-1?Q?q8r2wOS06kFjODZrotkbICAvxZ8u6vmMiU5LNrkvcCy+JB55/VOSbVklwh?= =?iso-8859-1?Q?+Xg1hnuvweQBewrHjdqIPChaajYAdcZ65GyRB14Xy2TnhCrG7zM9fjgqv/?= =?iso-8859-1?Q?CfMBNZZxa/txa2GaJwTtymuxdbqTEIXbQBWXPPR5cME7TY9LRNjaofORcy?= =?iso-8859-1?Q?G8eOEF3DVaHSM81rglMoLK4eW7bw/FVKvvqYU92AdKQAgiyBiukVxu98e+?= =?iso-8859-1?Q?8TFj0bmu6EytJR7T/RMRDsvCf8TtBkH0Md3XHhG+qHP/+sQRHVrLJ5fg/a?= =?iso-8859-1?Q?g9QoRh1h862swHX4Vo6hpJQqWM8T0yvE6XKszd2/Al/7/gcgpjyClIF4ck?= =?iso-8859-1?Q?pLUZpQmrz2ieVz+rmabsFo2Hi+RaEmQm+eoL0bJbwUdD4bX58rhLY4DGE/?= =?iso-8859-1?Q?EXj33IZceBltArEe3+wTNXH+jSmmTnvWLC6sXFqeIdFxIMJUbRZXZmBSaa?= =?iso-8859-1?Q?fPDeWjtCpcgXy3bF3tH42gmQgisGaHBtBtJGIDp1paVJuT5AfCfv2DfM7K?= =?iso-8859-1?Q?sJpRFv6dJfB4nXSe2Bhbuo4S2BKLYuCkbW9KoBokck0+pMAxuG3BbFpLW4?= =?iso-8859-1?Q?aYg0Bcd2JpkEo8EOXa6GxYFCjft2XWBTjGYIpcMYKH5CRhC8fMaNjMN6ej?= =?iso-8859-1?Q?iCBrDAzMSch3c4E0K6NR4J9i1fRcyOiJEUVrLZVwLR5VbPuA3+B+wFws96?= =?iso-8859-1?Q?ruZohL1VXsWcHg997EPxh4Uj2kCl/I/1U+rnNcx2DqleuoWjSYclPjcJ6u?= =?iso-8859-1?Q?MwWslpCtY/PgTqzORzkRlpd0Zq1s3EP5Y2Xl0Vy23HbgKkyE/01QLMsgG4?= =?iso-8859-1?Q?8=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS2PR03MB10110.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?BNLgKhktfKVncCYs+CX1a+gDYbo2Zk9bWGoTKggNPvGfe1APENuID8HUSs?= =?iso-8859-1?Q?ajOGSdQUloAB8G4SFIcGWY7RXUF+PJh/YPZLSWVt2eN287RS6Dt0f7lfyL?= =?iso-8859-1?Q?HOXOASAVq/QFQnWq8axlhmvTXp9n8qkfstZqccYfbHhAv03yct2dyqpqyp?= =?iso-8859-1?Q?A2DB0ZKfDpUiBv7ApQD1QUURzuiEHe1Tt+7u3yAl1xUjVIZXXncJQYyjko?= =?iso-8859-1?Q?oYvWdp1zIGCeUTPBDZgxcmN4iJisdKYnRsZpRxsaNoHYfoXGxcKtZqYZZj?= =?iso-8859-1?Q?fZ3Drbp1jNU3h7iKGA1Y2oQf3jwc9KdDgQz/pbo+Y/JJ/azFEMhoyJkRcv?= =?iso-8859-1?Q?i2RE0GbwrjbGIlXhdchpp1YKsCdekWnUf/F5Uo98XTz1566NWt6nzfQrzf?= =?iso-8859-1?Q?rmmTfc1wDWoc15rXuFqc+ZVRgcRNb0+9MuDajcvJeg1tbAHyPoxpQ6J1Dg?= =?iso-8859-1?Q?U9/5tAqa6mMWX7QRBaLrZQRZdNBYfJ1sa2merSlwUzHIsFlnQprYhzvTKM?= =?iso-8859-1?Q?tVS9q/WaIxo68Zbx9qcHyteHerwcGsVJhKNzTGTi3TzN62DXVfqt3y2H4O?= =?iso-8859-1?Q?aV6tYyQ92/wFKqB6Catq6WEbp5g/HED19P6leFUC42qF4pwFDJPFNhkoHt?= =?iso-8859-1?Q?3XqmQBlwMNstveYAJj7UHv++8f2hma5k+Q9TRJCXtE2Lsm5dsB+LBBAaSS?= =?iso-8859-1?Q?5N9VqmakCXBAnRpy7Qi8YlOb7r4lVwulHo0Afs3LMmugDVMYtbmR4utIw9?= =?iso-8859-1?Q?AJdlwJLXScJ8RSvRmMGRj6xHvR81aaNon4zdjLfWNfmdR/JQxTojJXTb72?= =?iso-8859-1?Q?HuPFogUHh/92IRdbYyo+isxYWswf+rPh6J10fLwZXBMwCj+45PUzljlgm4?= =?iso-8859-1?Q?qMFFursowBY23sAwTwWNzNDirki8P/o//qwRdReOOxq668fsGZbOruoApR?= =?iso-8859-1?Q?n1FGezCYjznD5nAnCYgnVaHS6Wd4Wc4RXYPdUzdO8GfIaI/ixK2vejvb6R?= =?iso-8859-1?Q?zReDNnq/39qH/vQ1wZBYWqshbvxUMiM3g5Ir9NmUgSGRAoD5lxzZ2E6STq?= =?iso-8859-1?Q?yq6mEf4ngR2aXleY8usF5OpZ90oket+M5kamvhvQeisQUISx59w9165yZG?= =?iso-8859-1?Q?Xr5/g6bnpFgAR+oYhSmoTaOgrxpbnpgeVKhvzUkkWsQHbeggu347vVJ4nz?= =?iso-8859-1?Q?Sc7Kaxx3+JcMVk8Pz0SdGshXCh07GOSAFhNBlu02NV9cuKoOplwC9izilF?= =?iso-8859-1?Q?si5Xnog0UKkd83dH09kUfvk03cZaMfPIlIxo5RQRe+SHUlaW6vZcpTDRLg?= =?iso-8859-1?Q?ZBEhYbZSokGtfwCpTb6OeOSs8jwqER+K/nJ37xVBaxoAOLU+Eu5DDuRYRs?= =?iso-8859-1?Q?+RGAv9qrxzdZOgjjitKUWUMMU0OyWEj320WVLWSX0ttTH0ornspoqkehNq?= =?iso-8859-1?Q?862O+EmeytX3GRMK+wYzBulAVfg9SmQLk1GsFLBPhv/mn2PvJq4nhnPM1q?= =?iso-8859-1?Q?5KIqzO8P+yLwQnqwS0DH7pGD3lcZmedOqN0xP5AUmoiKvefpkTmLnvdzCc?= =?iso-8859-1?Q?Fo/gUVOiqGu22gIFoRpobr/zSLenG4+uNu3jIq2BGy7BneIREcRIOZARCN?= =?iso-8859-1?Q?Jfn7qfTNa7+N2VALJ54jw5tR7LFnEsFD6RYvB0cjB2RnSYsciSt5lQbg?= =?iso-8859-1?Q?=3D=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: AS2PR03MB10110.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9143ec4a-f0e0-4644-6ac8-08ddb9377664 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jul 2025 07:10:01.6566 (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: 7twZvBInoTztO1h6Ir2XRvzZeZ+K086eYuzFQ3dRtBMmnt/CG+KOod/+O3uZl3re80tJAy/aOGJ0Pg1PiD8/Pw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR03MB6651 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1751440229753116600 Content-Type: text/plain; charset="utf-8" From: Oleksandr Andrushchenko Implement support for PCI devices in the SMMU driver. Make arm_smmu_master structure to hold a pointer to the device to allow it to hold PCI devices. Trigger iommu-map parsing when new PCI device is added. Add checks to assign/deassign functions to ensure PCI devices are handled correctly. Implement basic quarantining. All pci devices are automatically assigned to hardware domain if it exists to ensure it can probe them. TODO: Implement scratch page quarantining support. Signed-off-by: Oleksandr Tyshchenko Signed-off-by: Oleksandr Andrushchenko Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai Reviewed-by: Stefano Stabellini Acked-by: Julien Grall --- v11->v12: * add Stefano's RB * check arm_smmu_deassign_dev return code v10->v11: * remove unused code * remove unnecessary blocks v9->v10: * remove unused code * return on error in arm_smmu_dt_add_device_generic v8->v9: * no change v7->v8: * no change v6->v7: * use d->pci_lock in arm_smmu_assign_dev() * remove !is_hardware_domain and pdev->domain =3D=3D d checks in assign to support future dom0less use case when dom0 is using vPCI * remove stale todo in dev_get_dev_node * don't print "" * remove redundant dt_device_is_protected check * remove assign/deassing prints * change assign logic to remove reassign reimplementation * check if pdev->domain exists before assigning to it * explain pdev->devfn check * make reassign check stricter and update comment v5->v6: * check for hardware_domain =3D=3D NULL (dom0less test case) * locking: assign pdev->domain before list_add() v4->v5: * assign device to pdev->domain (usually dom0) by default in add_device() h= ook * deassign from hwdom * rebase on top of ("dynamic node programming using overlay dtbo") series * remove TODO in comment about device prints * add TODO regarding locking * fixup after dropping ("xen/arm: Move is_protected flag to struct device") v3->v4: * add new device_is_protected check in add_device hook to match SMMUv3 and IPMMU-VMSA drivers v2->v3: * invoke iommu_add_pci_sideband_ids() from add_device hook v1->v2: * ignore add_device/assign_device/reassign_device calls for phantom functio= ns (i.e. devfn !=3D pdev->devfn) downstream->v1: * wrap unused function in #ifdef 0 * remove the remove_device() stub since it was submitted separately to the = list [XEN][PATCH v6 12/19] xen/smmu: Add remove_device callback for smmu_iommu= ops https://lists.xenproject.org/archives/html/xen-devel/2023-05/msg00204.html * arm_smmu_(de)assign_dev: return error instead of crashing system * update condition in arm_smmu_reassign_dev * style fixup * add && !is_hardware_domain(d) into condition in arm_smmu_assign_dev() (cherry picked from commit 0c11a7f65f044c26d87d1e27ac6283ef1f9cfb7a from the downstream branch spider-master from https://github.com/xen-troops/xen.git) --- xen/drivers/passthrough/arm/smmu.c | 246 +++++++++++++++++------------ 1 file changed, 146 insertions(+), 100 deletions(-) diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/a= rm/smmu.c index 0f8d47dc98..22d306d0cb 100644 --- a/xen/drivers/passthrough/arm/smmu.c +++ b/xen/drivers/passthrough/arm/smmu.c @@ -120,11 +120,21 @@ enum irqreturn { =20 typedef enum irqreturn irqreturn_t; =20 -/* Device logger functions - * TODO: Handle PCI - */ -#define dev_print(dev, lvl, fmt, ...) \ - printk(lvl "smmu: %s: " fmt, dt_node_full_name(dev_to_dt(dev)), ## __VA_= ARGS__) +/* Device logger functions */ +#ifndef CONFIG_HAS_PCI +#define dev_print(dev, lvl, fmt, ...) \ + printk(lvl "smmu: %s: " fmt, dev_name(dev), ## __VA_ARGS__) +#else +#define dev_print(dev, lvl, fmt, ...) ({ \ + if ( !dev_is_pci((dev)) ) \ + printk(lvl "smmu: %s: " fmt, dev_name((dev)), ## __VA_ARGS__); \ + else \ + { \ + struct pci_dev *pdev =3D dev_to_pci((dev)); \ + printk(lvl "smmu: %pp: " fmt, &pdev->sbdf, ## __VA_ARGS__); \ + } \ +}) +#endif =20 #define dev_dbg(dev, fmt, ...) dev_print(dev, XENLOG_DEBUG, fmt, ## __VA_A= RGS__) #define dev_notice(dev, fmt, ...) dev_print(dev, XENLOG_INFO, fmt, ## __VA= _ARGS__) @@ -172,20 +182,6 @@ static void __iomem *devm_ioremap_resource(struct devi= ce *dev, #define IOMMU_FAULT_READ 0 #define IOMMU_FAULT_WRITE 1 =20 -/* - * Xen: PCI functions - * TODO: It should be implemented when PCI will be supported - */ -#define to_pci_dev(dev) (NULL) -static inline int pci_for_each_dma_alias(struct pci_dev *pdev, - int (*fn) (struct pci_dev *pdev, - u16 alias, void *data), - void *data) -{ - BUG(); - return 0; -} - /* Xen: misc */ #define PHYS_MASK_SHIFT PADDR_BITS =20 @@ -619,7 +615,7 @@ struct arm_smmu_master_cfg { for (i =3D 0; idx =3D (cfg)->smendx[i], (i) < (num); ++(i)) =20 struct arm_smmu_master { - struct device_node *of_node; + struct device *dev; struct rb_node node; struct arm_smmu_master_cfg cfg; }; @@ -711,7 +707,7 @@ arm_smmu_get_fwspec(struct arm_smmu_master_cfg *cfg) { struct arm_smmu_master *master =3D container_of(cfg, struct arm_smmu_master, cfg); - return dev_iommu_fwspec_get(&master->of_node->dev); + return dev_iommu_fwspec_get(master->dev); } =20 static void parse_driver_options(struct arm_smmu_device *smmu) @@ -730,21 +726,11 @@ static void parse_driver_options(struct arm_smmu_devi= ce *smmu) =20 static struct device_node *dev_get_dev_node(struct device *dev) { -#if 0 /* Xen: TODO: Add support for PCI */ - if (dev_is_pci(dev)) { - struct pci_bus *bus =3D to_pci_dev(dev)->bus; - - while (!pci_is_root_bus(bus)) - bus =3D bus->parent; - return bus->bridge->parent->of_node; - } -#endif - return dev->of_node; } =20 static struct arm_smmu_master *find_smmu_master(struct arm_smmu_device *sm= mu, - struct device_node *dev_node) + struct device *dev) { struct rb_node *node =3D smmu->masters.rb_node; =20 @@ -753,9 +739,9 @@ static struct arm_smmu_master *find_smmu_master(struct = arm_smmu_device *smmu, =20 master =3D container_of(node, struct arm_smmu_master, node); =20 - if (dev_node < master->of_node) + if (dev < master->dev) node =3D node->rb_left; - else if (dev_node > master->of_node) + else if (dev > master->dev) node =3D node->rb_right; else return master; @@ -790,9 +776,9 @@ static int insert_smmu_master(struct arm_smmu_device *s= mmu, =3D container_of(*new, struct arm_smmu_master, node); =20 parent =3D *new; - if (master->of_node < this->of_node) + if (master->dev < this->dev) new =3D &((*new)->rb_left); - else if (master->of_node > this->of_node) + else if (master->dev > this->dev) new =3D &((*new)->rb_right); else return -EEXIST; @@ -824,28 +810,30 @@ static int arm_smmu_dt_add_device_legacy(struct arm_s= mmu_device *smmu, struct arm_smmu_master *master; struct device_node *dev_node =3D dev_get_dev_node(dev); =20 - master =3D find_smmu_master(smmu, dev_node); + master =3D find_smmu_master(smmu, dev); if (master) { dev_err(dev, - "rejecting multiple registrations for master device %s\n", - dev_node->name); + "rejecting multiple registrations for master device\n"); return -EBUSY; } =20 master =3D devm_kzalloc(dev, sizeof(*master), GFP_KERNEL); if (!master) return -ENOMEM; - master->of_node =3D dev_node; + master->dev =3D dev; =20 - /* Xen: Let Xen know that the device is protected by an SMMU */ - dt_device_set_protected(dev_node); + if ( !dev_is_pci(dev) ) + { + /* Xen: Let Xen know that the device is protected by an SMMU */ + dt_device_set_protected(dev_node); + } =20 for (i =3D 0; i < fwspec->num_ids; ++i) { if (!(smmu->features & ARM_SMMU_FEAT_STREAM_MATCH) && (fwspec->ids[i] >=3D smmu->num_mapping_groups)) { dev_err(dev, - "stream ID for master device %s greater than maximum allowed (%d)\n", - dev_node->name, smmu->num_mapping_groups); + "SMMU stream ID %d is greater than maximum allowed (%d)\n", + fwspec->ids[i], smmu->num_mapping_groups); return -ERANGE; } master->cfg.smendx[i] =3D INVALID_SMENDX; @@ -860,7 +848,7 @@ static int arm_smmu_dt_remove_device_legacy(struct arm_= smmu_device *smmu, struct device_node *dev_node =3D dev_get_dev_node(dev); int ret; =20 - master =3D find_smmu_master(smmu, dev_node); + master =3D find_smmu_master(smmu, dev); if (master =3D=3D NULL) { dev_err(dev, "No registrations found for master device %s\n", @@ -872,8 +860,9 @@ static int arm_smmu_dt_remove_device_legacy(struct arm_= smmu_device *smmu, if (ret) return ret; =20 - /* Protected by dt_host_lock and dtdevs_lock as caller holds these locks.= */ - dev_node->is_protected =3D false; + if ( !dev_is_pci(dev) ) + /* Protected by dt_host_lock and dtdevs_lock as caller holds these locks= . */ + dev_node->is_protected =3D false; =20 kfree(master); return 0; @@ -902,6 +891,12 @@ static int register_smmu_master(struct arm_smmu_device= *smmu, fwspec); } =20 +/* Forward declaration */ +static int arm_smmu_assign_dev(struct domain *d, u8 devfn, + struct device *dev, u32 flag); +static int arm_smmu_deassign_dev(struct domain *d, uint8_t devfn, + struct device *dev); + /* * The driver which supports generic IOMMU DT bindings must have this * callback implemented. @@ -926,6 +921,25 @@ static int arm_smmu_dt_add_device_generic(u8 devfn, st= ruct device *dev) { struct arm_smmu_device *smmu; struct iommu_fwspec *fwspec; + int ret; + +#ifdef CONFIG_HAS_PCI + if ( dev_is_pci(dev) ) + { + struct pci_dev *pdev =3D dev_to_pci(dev); + int ret; + + /* Ignore calls for phantom functions */ + if ( devfn !=3D pdev->devfn ) + return 0; + + ret =3D iommu_add_pci_sideband_ids(pdev); + if ( ret < 0 ) { + iommu_fwspec_free(dev); + return ret; + } + } +#endif =20 fwspec =3D dev_iommu_fwspec_get(dev); if (fwspec =3D=3D NULL) @@ -935,7 +949,25 @@ static int arm_smmu_dt_add_device_generic(u8 devfn, st= ruct device *dev) if (smmu =3D=3D NULL) return -ENXIO; =20 - return arm_smmu_dt_add_device_legacy(smmu, dev, fwspec); + ret =3D arm_smmu_dt_add_device_legacy(smmu, dev, fwspec); + if ( ret ) + return ret; + +#ifdef CONFIG_HAS_PCI + if ( dev_is_pci(dev) ) + { + struct pci_dev *pdev =3D dev_to_pci(dev); + + /* + * During PHYSDEVOP_pci_device_add, Xen does not assign the + * device, so we must do it here. + */ + if ( pdev->domain ) + ret =3D arm_smmu_assign_dev(pdev->domain, devfn, dev, 0); + } +#endif + + return ret; } =20 static int arm_smmu_dt_xlate_generic(struct device *dev, @@ -958,11 +990,10 @@ static struct arm_smmu_device *find_smmu_for_device(s= truct device *dev) { struct arm_smmu_device *smmu; struct arm_smmu_master *master =3D NULL; - struct device_node *dev_node =3D dev_get_dev_node(dev); =20 spin_lock(&arm_smmu_devices_lock); list_for_each_entry(smmu, &arm_smmu_devices, list) { - master =3D find_smmu_master(smmu, dev_node); + master =3D find_smmu_master(smmu, dev); if (master) break; } @@ -2054,65 +2085,26 @@ static bool arm_smmu_capable(enum iommu_cap cap) } #endif =20 -static int __arm_smmu_get_pci_sid(struct pci_dev *pdev, u16 alias, void *d= ata) -{ - *((u16 *)data) =3D alias; - return 0; /* Continue walking */ -} - -static void __arm_smmu_release_pci_iommudata(void *data) -{ - kfree(data); -} - static int arm_smmu_add_device(struct device *dev) { struct arm_smmu_device *smmu; + struct arm_smmu_master *master; struct arm_smmu_master_cfg *cfg; struct iommu_group *group; void (*releasefn)(void *data) =3D NULL; - int ret; =20 smmu =3D find_smmu_for_device(dev); if (!smmu) return -ENODEV; =20 - if (dev_is_pci(dev)) { - struct pci_dev *pdev =3D to_pci_dev(dev); - struct iommu_fwspec *fwspec; - - cfg =3D kzalloc(sizeof(*cfg), GFP_KERNEL); - if (!cfg) { - return -ENOMEM; - } - - ret =3D iommu_fwspec_init(dev, smmu->dev); - if (ret) { - kfree(cfg); - return ret; - } - fwspec =3D dev_iommu_fwspec_get(dev); - - /* - * Assume Stream ID =3D=3D Requester ID for now. - * We need a way to describe the ID mappings in FDT. - */ - pci_for_each_dma_alias(pdev, __arm_smmu_get_pci_sid, - &fwspec->ids[0]); - releasefn =3D __arm_smmu_release_pci_iommudata; - cfg->smmu =3D smmu; - } else { - struct arm_smmu_master *master; - - master =3D find_smmu_master(smmu, dev->of_node); - if (!master) { - return -ENODEV; - } - - cfg =3D &master->cfg; - cfg->smmu =3D smmu; + master =3D find_smmu_master(smmu, dev); + if (!master) { + return -ENODEV; } =20 + cfg =3D &master->cfg; + cfg->smmu =3D smmu; + group =3D iommu_group_alloc(); if (IS_ERR(group)) { dev_err(dev, "Failed to allocate IOMMU group\n"); @@ -2772,6 +2764,42 @@ static int arm_smmu_assign_dev(struct domain *d, u8 = devfn, return -ENOMEM; } =20 +#ifdef CONFIG_HAS_PCI + if ( dev_is_pci(dev) ) + { + struct pci_dev *pdev =3D dev_to_pci(dev); + + /* Ignore calls for phantom functions */ + if ( devfn !=3D pdev->devfn ) + return 0; + + ASSERT(pcidevs_locked()); + + write_lock(&pdev->domain->pci_lock); + list_del(&pdev->domain_list); + write_unlock(&pdev->domain->pci_lock); + + pdev->domain =3D d; + + write_lock(&d->pci_lock); + list_add(&pdev->domain_list, &d->pdev_list); + write_unlock(&d->pci_lock); + + /* dom_io is used as a sentinel for quarantined devices */ + if ( d =3D=3D dom_io ) + { + struct iommu_domain *domain =3D dev_iommu_domain(dev); + if ( !iommu_quarantine ) + return 0; + + if ( domain && domain->priv ) + ret =3D arm_smmu_deassign_dev(domain->priv->cfg.domain, devfn, dev); + + return ret; + } + } +#endif + if (!dev_iommu_group(dev)) { ret =3D arm_smmu_add_device(dev); if (ret) @@ -2821,11 +2849,27 @@ out: return ret; } =20 -static int arm_smmu_deassign_dev(struct domain *d, struct device *dev) +static int arm_smmu_deassign_dev(struct domain *d, uint8_t devfn, + struct device *dev) { struct iommu_domain *domain =3D dev_iommu_domain(dev); struct arm_smmu_xen_domain *xen_domain; =20 +#ifdef CONFIG_HAS_PCI + if ( dev_is_pci(dev) ) + { + struct pci_dev *pdev =3D dev_to_pci(dev); + + /* Ignore calls for phantom functions */ + if ( devfn !=3D pdev->devfn ) + return 0; + + /* dom_io is used as a sentinel for quarantined devices */ + if ( d =3D=3D dom_io ) + return 0; + } +#endif + xen_domain =3D dom_iommu(d)->arch.priv; =20 if (!domain || domain->priv->cfg.domain !=3D d) { @@ -2852,14 +2896,16 @@ static int arm_smmu_reassign_dev(struct domain *s, = struct domain *t, { int ret =3D 0; =20 - /* Don't allow remapping on other domain than hwdom */ - if ( t && !is_hardware_domain(t) ) + /* Don't allow remapping on other domain than hwdom + * or dom_io for PCI devices + */ + if ( t && !is_hardware_domain(t) && (t !=3D dom_io || !dev_is_pci(dev)) ) return -EPERM; =20 if (t =3D=3D s) return 0; =20 - ret =3D arm_smmu_deassign_dev(s, dev); + ret =3D arm_smmu_deassign_dev(s, devfn, dev); if (ret) return ret; =20 --=20 2.34.1 From nobody Fri Oct 31 03:41:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1751440226; cv=pass; d=zohomail.com; s=zohoarc; b=Lzkaunnj7yyub4b5NmBazPSUcirbu4ncr/1O5ppEVtBGci9dB5NMdkVGcOGm5nMXMhRcTSiIgHD8ODYbglfACUpIzvgV3H41hgz+foIuWdefz5MdYPgxIw2X+yjG66OWgOmaODE66dnGHIwVNhL3+9c3Q4iMd/q+1Lj8bluSHrc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751440226; 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=xKfUEcwuhAQT+SAyxwUDdS0frIctpZIzRMNa4FsgDw4=; b=SemOroUqb4YZY8HSbfbmYulRskzgWvCIRrfjzi8FNpmdVBwr8tSwMt16P77ipfPUu0KFFIINWsM4WcKlT6kl921/dIwDomZHuji239HSRDPEYp7uhV0s7wDEzW9NgIg38O9OoHX1rn1Jqku0wSDP+iSZ6pokCyM3S0rPXaCXbtA= 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 1751440226124706.5052472092241; Wed, 2 Jul 2025 00:10:26 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1030257.1403877 (Exim 4.92) (envelope-from ) id 1uWrbc-0000Ex-9M; Wed, 02 Jul 2025 07:10:08 +0000 Received: by outflank-mailman (output) from mailman id 1030257.1403877; Wed, 02 Jul 2025 07:10:08 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbc-0000Eq-6l; Wed, 02 Jul 2025 07:10:08 +0000 Received: by outflank-mailman (input) for mailman id 1030257; Wed, 02 Jul 2025 07:10:06 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrba-0000Dm-9t for xen-devel@lists.xenproject.org; Wed, 02 Jul 2025 07:10:06 +0000 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c200::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 940b0460-5713-11f0-a313-13f23c93f187; Wed, 02 Jul 2025 09:10:05 +0200 (CEST) Received: from AS2PR03MB10110.eurprd03.prod.outlook.com (2603:10a6:20b:57a::22) by PAWPR03MB9857.eurprd03.prod.outlook.com (2603:10a6:102:2e4::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8857.37; Wed, 2 Jul 2025 07:10:02 +0000 Received: from AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873]) by AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873%5]) with mapi id 15.20.8901.018; Wed, 2 Jul 2025 07:10:02 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 940b0460-5713-11f0-a313-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cq/W2UAo8MqCvyDQZPrA5/ufj0m3wGjtvMH9OM8B1p9aIqBxXDeFPYSsJ7knqZlntgo4K1VdYCQtd+dOGP8b9MayTkb9fuzBUW4Wkbbe/htCYkMCijCvzg+MUE9QeYh4TyOIvmZs+Jl9aLeeiIeCozVa7xXxXUBphJzIp1VrWwwkOozSLm6laAbUUiAFDPhg1TXYAm7v+/iKGW+ersdFb425KUB6o3Ll+t1FuG1Wpnz08a3tiyDe7qZnpidxVHh5xhZWn7id1IRC99kMTEyNQfCR0ujAge2UiMfrrDbMaumgAXPwhGiE2khyorn1joy8tQGF1dwVLRmHilXwE0TiGw== 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=xKfUEcwuhAQT+SAyxwUDdS0frIctpZIzRMNa4FsgDw4=; b=tUl9A7cvXAMOH0I99Ntk8FW9HdNm/0fwhzFzzancnLMaJ9FRuZfFzSski4CRxiAHm+UJYigmv3rDmpLzUN0BSzrFYwWU7gUVAl96W5pcxv0yliJTbv1P++TH2wVINIKeN0DP5WJqNu/43bAzaBKqlTsB3BfvtDlgTCqL1zHBZsXtlyA/OVzZLgiTIQhiz5B7AogZtI6wgFGcM2CY/DA+aNxc5I3WiGmv2ihGARwfF9ha4T1/iFdWv6XNOkviflGT1CkvZUad2F3U2TcvCidkJW+wLYEgEL+OC1cxa0J3Qm4qk1VXuKGFT9mqVzQ8NxlywQs+6j7+tUfJdAZHX5aKTQ== 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=xKfUEcwuhAQT+SAyxwUDdS0frIctpZIzRMNa4FsgDw4=; b=EiqCh5WCLKK4Rylg86eLGH8QITRFudJgXFwS5kOLig1pcS6svVMbM393QFvJqXVLgP1qdyXMETJRbjqwYrQGvFmlwwlslm791f25VZlFteOaqwByfCRtnThPQkixq4z6WaxeEOYBEUZMnt7eWNie/JBquVkHyd7KdY14Ae8KKOk+ruEEjulL4jakGacrtyqGOyboIfgJJA5Q/a1Hrupm0QeBQrcp+Q9ffxlUU97exzlSVa4njp8c4/whIFX6rrGnJqmQ09xbKc7XGlPWc1+/K1FJIcpMV5AM6DZnNq/GKHsQF0k5shl8byBjk027PEBdMEXCw+kXKpj7IDh5PfQJmw== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Rahul Singh , Bertrand Marquis , Stefano Stabellini , Julien Grall , Michal Orzel , Volodymyr Babchuk , Stewart Hildebrand , Mykyta Poturai Subject: [PATCH v12 4/7] xen/arm: smmuv3: Add PCI devices support for SMMUv3 Thread-Topic: [PATCH v12 4/7] xen/arm: smmuv3: Add PCI devices support for SMMUv3 Thread-Index: AQHb6yBUOBn8GtHVrkqYz5a1NMy5XA== Date: Wed, 2 Jul 2025 07:10:02 +0000 Message-ID: <49c9249d3714df03b8f172c297317d53159125d1.1751439885.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: AS2PR03MB10110:EE_|PAWPR03MB9857:EE_ x-ms-office365-filtering-correlation-id: 41c4e8e5-0616-4744-12eb-08ddb93776b3 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?5Ak5I2xTvqrymsHnA8xqeNphAg+281C+ZwPs21SxuupHr/Fvp47n4i9qIa?= =?iso-8859-1?Q?10LZbD5rPFmmktWEEzJ69MREyplXN2yXHmqzFUy/rmdHqxpup8p2B7MJrn?= =?iso-8859-1?Q?x9D5/nRHLzB2B0inF5trD7wPuK96uQDHUFWgYi/VkNWgKo/wsYlodn9x7E?= =?iso-8859-1?Q?qI/hBLJYYDfseiCBjbykvVS0cpXQ3gr9YUNsTx8SLWgVrtmiR5h+AprnZ0?= =?iso-8859-1?Q?uhELiYK+QxZ5VOSp1P6IG8nDhKCsWr0NkysgHHWKelfNdXxrXoYX4TyV1E?= =?iso-8859-1?Q?QOHdMEy3GHeRbfcu+H3aAT4LzoWqUqLggwb+Nj+SugIq25FiqpikvW/d9I?= =?iso-8859-1?Q?f7KFh2HeWQq5BZXVHkT9zW6E8xJCW8oeMkWDKhqtqs5CK3sq28EyXaYtNT?= =?iso-8859-1?Q?llM22nBX65FjL17v75oQVAD6PFDqWgbCRiFJ8/l4HPhXWnt+COIhGahSAl?= =?iso-8859-1?Q?rtovyKo0PCZIJDr7LP4Ffgzzxoeb8aKiT1zrn4UD9lr7mFD7pPkzRHIQ6K?= =?iso-8859-1?Q?FZ6CcNml6cpoPC0aSmUQ0g7lofc9e2T97MOH2b5j6gGU3/ujkXhk/aegD1?= =?iso-8859-1?Q?ncIBxzn/u/FW/xkDxFcKaR70ppWzTgoAujo+sbBjTOEqM3TfjK8RVsX+sH?= =?iso-8859-1?Q?i5C91NAx0QQZjKgoXK79A1GlrOfZ9M5AUr91aIttcdgHCkuEEArYhnhKeO?= =?iso-8859-1?Q?p5yNF71gnualzqFRPLTeUOgpEdb04nNPjNxd1x1a4gnEBVNgYzjwDFR/P3?= =?iso-8859-1?Q?nTcveEcSc5WuTn62v19e8+N1WqfVk1MS7y+U/GNIzYJskOAWvEoj9jz+F/?= =?iso-8859-1?Q?J0HnTtvyNSShN1XnB0eR6AmV1dNbhgK2xwY55d9SBI0Mku7ezVzFm5hpO2?= =?iso-8859-1?Q?afmIHMeEBign/ba3oHoVlhInT2ikM8mAVNX6ScOkAjGg2n/FSK5Q/BhVH2?= =?iso-8859-1?Q?GMS3d29H8juXBW9o6EsuSw3VUU8Wuk+v2nWY1ppFLR34DOIUPnJrISG4EX?= =?iso-8859-1?Q?/3vRrWWNXDBxwuMlrUtlQMpX45aL5qP48PrOWNMyVUd52UxFw44LhNtVSv?= =?iso-8859-1?Q?BkyQWnlvunwXURGEWbopCofpyQ9jMqjyy1VOt0zvjPcu1yCJHMTGk8Zju/?= =?iso-8859-1?Q?ypsoe5C9vUCIhdvV/tBF2eX4CuZ8YBEqKcaCwQh4tLkkOxyIsgCyYRbggM?= =?iso-8859-1?Q?HDwyl6OMhyoFFAoiMKoTIiHgRfRvb6Eddp88JDfYZnsPxMwZGr536/XUZX?= =?iso-8859-1?Q?whmtLz7A5RrdurDEpjeW4ZT1HptybvbwyU5iYnJYb1ud49ENPc3K7baN44?= =?iso-8859-1?Q?y3+mP6Lrjuy1n+O6S3xPNPZrE3dk7mpzPNM5kyA1j1+mlKTAvlA5fKZukw?= =?iso-8859-1?Q?KMP8QwqavUtzdRZyRF851CV6ljlNngs9f9//f9UbgE9AUGv4fiw0go7g7b?= =?iso-8859-1?Q?7Pkq+uqx3mp4xD2h06sblcYTy1mziK4fKZOekJ/5Gi6kax/3hxQeomx1Xd?= =?iso-8859-1?Q?gOu69VFX+Jh1gfndT1EqsbSxBaI9i8nBCeWhO0MbAt1xJ0dOAttjLDA6rI?= =?iso-8859-1?Q?ZQn+KYc=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS2PR03MB10110.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?BGkaRwCu4kmqmN7QRvOvXIOU5iG4zfMoBXU/mc1rWGqaZNnIyCEG5BBHGJ?= =?iso-8859-1?Q?wVBSFJ7v8dLAYL+0tgkSwOC9aJrnErbHGIvx368qJaarsog6+T84jhk146?= =?iso-8859-1?Q?wjY0LlsWZamhUxwxSoAl0OhwoTsPDKSMbVESKDb9x8ttnd6aGIp0aJrAlT?= =?iso-8859-1?Q?aRUtadW6GeKrfWbPGc/P9KgFXDqld1+NOwEwPUX9B2mSc5jqe5LUbUpDbt?= =?iso-8859-1?Q?OFGuI1i7ckUqnHudVaFF+cFgXHzhDxgaRcfmKQCGkUYvMi8Jc1WyaLphYC?= =?iso-8859-1?Q?kWuNQJBjRZic+tEw6oc39gbNqcpc9XsbTtpSsZFZwSXXCdITI1j3Z/Eszo?= =?iso-8859-1?Q?k1nlmCjnbe91vwdU0yqDwX7j4LXGesdlMPpQitS8/1kD2/9cnwVecbPWEq?= =?iso-8859-1?Q?zbMdRasKL3KxJ0MggbIqL7V1gOFtSlsJ4utnANoqrF0QAI+DxP8w3w/xP5?= =?iso-8859-1?Q?xYL3hIo3lCG7ozaHpPzlmVqn31ya1bbeOlUVeOyNUMMIfQfeDmJi8HB4G5?= =?iso-8859-1?Q?aKzdF+54lmuzfY59cPBmcJLbNmHCkm4vamRala412MNKcwbqioNz6KhxoL?= =?iso-8859-1?Q?IeCyEi/emsFqO27H60jFEIZWhJA0n/rz1VOddnh3ZOG8hBdMp+p9x6oUr3?= =?iso-8859-1?Q?LufoCVNhOllzGK9etYDSPBjmeDY01hDK65o8pcuc7TCJsVXo6jn0p3TZmi?= =?iso-8859-1?Q?SahIUsF12xL73b2uHIfI37ewPLolE+GM/XpPmnLlLyvMXZnE9z6a0dkykw?= =?iso-8859-1?Q?5lSuBqwyMQZ7K36pYL86sW4L7NuArYCf9FY7KN/4CyfTOfrYnvu+UPJE0O?= =?iso-8859-1?Q?orHfcL3XE8sK4+UwROp9CY1WMDFeIx/omk4HtDfUF5WIGeYwxtq+OGp2mP?= =?iso-8859-1?Q?tyU5vk09THFF71sNG6VJhQs2cl7qmQ14wcgqkpv+Ys3BxsX8PKZ2ykeQN3?= =?iso-8859-1?Q?RaO4w/2Rs6zqgR4VjygD+towJtgZFBOLVEuBxVf1fdQkxYAiAt5GvyLZv6?= =?iso-8859-1?Q?hZi+JuYZOoSSthh7hztHfT8/u/vy3/xkcezJft9G9Xwq5mzaALjXZ50s/H?= =?iso-8859-1?Q?dedgT9A6Ri0/OVqrZf9nYAW5T/HWCr1pD4Jcod279Pn4pba6w6F7Zpk11d?= =?iso-8859-1?Q?zGUFG23A1hJbIqmhs35xzpOtZTqLyOvOfN8rfJTf51owBAwLniv7o6t2a2?= =?iso-8859-1?Q?/NIq1vcCs6u35uFhTj0rX/FJ0SDbtQ8zosUHk9MRNmVE4z/hpaQHvyAABC?= =?iso-8859-1?Q?XcIs4UIvgLDGQwhGXLBv/Aolzk1afZJIUcmZ1N15mc2gI1QGDpWrY7f6G0?= =?iso-8859-1?Q?/SwyWil0XA5KAWNTiitJYyPHKmUNIJyqICqXmVXtmG0/KYuMxkEVJ1No8b?= =?iso-8859-1?Q?KyiuqKpcVCxk3r0kPfKdPyKqMMA6w76dGMGBqCki1iB7VvWhxLEdbGcNhY?= =?iso-8859-1?Q?n2+V6AjHbh6PY/vQ4IcZ58gJIi5cGmRZtZVNzRjz23Ro6bRjpEIj1uExa0?= =?iso-8859-1?Q?NL1scBwyKahUo29QvUNz4hhYiPhv9KNcxFtWFaum91gNVjyU9qnwjc83An?= =?iso-8859-1?Q?lJcX6Z+WrLv7xdD0jI8FuxEoyN+2ZIsjWr2Jnz9hgkPpAOMGZixBFG+9HC?= =?iso-8859-1?Q?SHqVms46/XQDzzwkJj7a6s2rOHNwMMt4AKDpn1yUNtHgAgftJBwc6tDg?= =?iso-8859-1?Q?=3D=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: AS2PR03MB10110.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 41c4e8e5-0616-4744-12eb-08ddb93776b3 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jul 2025 07:10:02.1815 (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: 0qbkrXV9JZgFX6Ee95+DhQdu0oPCZNTi4gobRs3yslv/SUR/heCBH6ta72hSlqBPwrTs0D4dOjelGzUSkEpGSw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR03MB9857 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1751440232861116600 Content-Type: text/plain; charset="utf-8" From: Rahul Singh Implement support for PCI devices in the SMMU driver. Trigger iommu-map parsing when new PCI device is added. Add checks to assign/deassign functions to ensure PCI devices are handled correctly. Implement basic quarantining. All pci devices are automatically assigned to hardware domain if it exists to ensure it can probe them. TODO: Implement scratch page quarantining support. Signed-off-by: Rahul Singh Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai Reviewed-by: Stefano Stabellini --- v11->v12: * add Stefano's RB * check arm_smmu_deassign_dev return code v10->v11: * no changes v9->v10: * return if iommu_add_pci_sidband_ids fails v8->v9: * no change v7->v8: * no change v6->v7: * address TODO: use d->pci_lock in arm_smmu_assign_dev() * remove !is_hardware_domain and pdev->domain =3D=3D d checks in assign to support future dom0less use case when dom0 is using vPCI * check if pdev->domain exists before assigning to it * don't print "" * change assign logic to remove reassign reimplementation * explain pdev->devfn check * make reassign check stricter and update comment v5->v6: * check for hardware_domain =3D=3D NULL (dom0less test case) * locking: assign pdev->domain before list_add() v4->v5: * deassign from hwdom * add TODO regarding locking * fixup after dropping ("xen/arm: Move is_protected flag to struct device") v3->v4: * no change v2->v3: * rebase * invoke iommu_add_pci_sideband_ids() from add_device hook v1->v2: * ignore add_device/assign_device/reassign_device calls for phantom functio= ns (i.e. devfn !=3D pdev->devfn) downstream->v1: * rebase * move 2 replacements of s/dt_device_set_protected(dev_to_dt(dev))/device_s= et_protected(dev)/ from this commit to ("xen/arm: Move is_protected flag to struct device") so as to not break ability to bisect * adjust patch title (remove stray space) * arm_smmu_(de)assign_dev: return error instead of crashing system * remove arm_smmu_remove_device() stub * update condition in arm_smmu_reassign_dev * style fixup (cherry picked from commit 7ed6c3ab250d899fe6e893a514278e406a2893e8 from the downstream branch poc/pci-passthrough from https://gitlab.com/xen-project/people/bmarquis/xen-arm-poc.git) --- xen/drivers/passthrough/arm/smmu-v3.c | 119 +++++++++++++++++++++++--- 1 file changed, 108 insertions(+), 11 deletions(-) diff --git a/xen/drivers/passthrough/arm/smmu-v3.c b/xen/drivers/passthroug= h/arm/smmu-v3.c index df16235057..9478fcd11c 100644 --- a/xen/drivers/passthrough/arm/smmu-v3.c +++ b/xen/drivers/passthrough/arm/smmu-v3.c @@ -1469,14 +1469,37 @@ static bool arm_smmu_sid_in_range(struct arm_smmu_d= evice *smmu, u32 sid) } /* Forward declaration */ static struct arm_smmu_device *arm_smmu_get_by_dev(const struct device *de= v); +static int arm_smmu_assign_dev(struct domain *d, u8 devfn, struct device *= dev, + u32 flag); +static int arm_smmu_deassign_dev(struct domain *d, uint8_t devfn, + struct device *dev); =20 static int arm_smmu_add_device(u8 devfn, struct device *dev) { int i, ret; struct arm_smmu_device *smmu; struct arm_smmu_master *master; - struct iommu_fwspec *fwspec =3D dev_iommu_fwspec_get(dev); + struct iommu_fwspec *fwspec; + +#ifdef CONFIG_HAS_PCI + if ( dev_is_pci(dev) ) + { + struct pci_dev *pdev =3D dev_to_pci(dev); + int ret; + =09 + /* Ignore calls for phantom functions */ + if ( devfn !=3D pdev->devfn ) + return 0; + + ret =3D iommu_add_pci_sideband_ids(pdev); + if ( ret < 0 ) { + iommu_fwspec_free(dev); + return ret; + } + } +#endif =20 + fwspec =3D dev_iommu_fwspec_get(dev); if (!fwspec) return -ENODEV; =20 @@ -1521,17 +1544,38 @@ static int arm_smmu_add_device(u8 devfn, struct dev= ice *dev) */ arm_smmu_enable_pasid(master); =20 - if (dt_device_is_protected(dev_to_dt(dev))) { - dev_err(dev, "Already added to SMMUv3\n"); - return -EEXIST; - } + if ( !dev_is_pci(dev) ) + { + if (dt_device_is_protected(dev_to_dt(dev))) { + dev_err(dev, "Already added to SMMUv3\n"); + return -EEXIST; + } =20 - /* Let Xen know that the master device is protected by an IOMMU. */ - dt_device_set_protected(dev_to_dt(dev)); + /* Let Xen know that the master device is protected by an IOMMU. */ + dt_device_set_protected(dev_to_dt(dev)); + } =20 dev_info(dev, "Added master device (SMMUv3 %s StreamIds %u)\n", dev_name(fwspec->iommu_dev), fwspec->num_ids); =20 +#ifdef CONFIG_HAS_PCI + if ( dev_is_pci(dev) ) + { + struct pci_dev *pdev =3D dev_to_pci(dev); + + /* + * During PHYSDEVOP_pci_device_add, Xen does not assign the + * device, so we must do it here. + */ + if ( pdev->domain ) + { + ret =3D arm_smmu_assign_dev(pdev->domain, devfn, dev, 0); + if (ret) + goto err_free_master; + } + } +#endif + return 0; =20 err_free_master: @@ -2624,6 +2668,42 @@ static int arm_smmu_assign_dev(struct domain *d, u8 = devfn, struct arm_smmu_domain *smmu_domain; struct arm_smmu_xen_domain *xen_domain =3D dom_iommu(d)->arch.priv; =20 +#ifdef CONFIG_HAS_PCI + if ( dev_is_pci(dev) ) + { + struct pci_dev *pdev =3D dev_to_pci(dev); + + /* Ignore calls for phantom functions */ + if ( devfn !=3D pdev->devfn ) + return 0; + + ASSERT(pcidevs_locked()); + + write_lock(&pdev->domain->pci_lock); + list_del(&pdev->domain_list); + write_unlock(&pdev->domain->pci_lock); + + pdev->domain =3D d; + + write_lock(&d->pci_lock); + list_add(&pdev->domain_list, &d->pdev_list); + write_unlock(&d->pci_lock); + + /* dom_io is used as a sentinel for quarantined devices */ + if ( d =3D=3D dom_io ) + { + struct arm_smmu_master *master =3D dev_iommu_priv_get(dev); + if ( !iommu_quarantine ) + return 0; + + if ( master && master->domain ) + ret =3D arm_smmu_deassign_dev(master->domain->d, devfn, dev); + =09 + return ret; + } + } +#endif + spin_lock(&xen_domain->lock); =20 /* @@ -2657,7 +2737,7 @@ out: return ret; } =20 -static int arm_smmu_deassign_dev(struct domain *d, struct device *dev) +static int arm_smmu_deassign_dev(struct domain *d, uint8_t devfn, struct d= evice *dev) { struct iommu_domain *io_domain =3D arm_smmu_get_domain(d, dev); struct arm_smmu_xen_domain *xen_domain =3D dom_iommu(d)->arch.priv; @@ -2669,6 +2749,21 @@ static int arm_smmu_deassign_dev(struct domain *d, s= truct device *dev) return -ESRCH; } =20 +#ifdef CONFIG_HAS_PCI + if ( dev_is_pci(dev) ) + { + struct pci_dev *pdev =3D dev_to_pci(dev); + + /* Ignore calls for phantom functions */ + if ( devfn !=3D pdev->devfn ) + return 0; + + /* dom_io is used as a sentinel for quarantined devices */ + if ( d =3D=3D dom_io ) + return 0; + } +#endif + spin_lock(&xen_domain->lock); =20 arm_smmu_detach_dev(master); @@ -2687,14 +2782,16 @@ static int arm_smmu_reassign_dev(struct domain *s, = struct domain *t, { int ret =3D 0; =20 - /* Don't allow remapping on other domain than hwdom */ - if ( t && !is_hardware_domain(t) ) + /* Don't allow remapping on other domain than hwdom + * or dom_io for PCI devices + */ + if ( t && !is_hardware_domain(t) && (t !=3D dom_io || !dev_is_pci(dev)) ) return -EPERM; =20 if (t =3D=3D s) return 0; =20 - ret =3D arm_smmu_deassign_dev(s, dev); + ret =3D arm_smmu_deassign_dev(s, devfn, dev); if (ret) return ret; =20 --=20 2.34.1 From nobody Fri Oct 31 03:41:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1751440229; cv=pass; d=zohomail.com; s=zohoarc; b=fSZUyCNefM/2mQTcXyKBXDcsWglqgJuyyGJpK4FWyCYIIf4d1XOd69DG8jRWU2easdsMIvRauGePkuYSr9uJnoL7XeSJgHvrumTQYCTHrg5HPmHB6mn+ZJfNwHIZvDvqIlKfO3U7bwKvVCJVD40eQ2Lc8CdAokS6nwnerneMGTE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751440229; 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=a0fIYyRtrGDYb2inwj/9c0Fm/wGYo8/Q2HKicoq4Zks=; b=C/mljamn3/cRFkbLuaTdbfCRQdyGg0RfO+EJJs9TIZwkx7VAAx/8t5REZhhTcdUjaFNQumb3pGB7ohG74pesmqy0L5F+WPRuMXUFCb9XtxLYgMGxJ9QVn3ncmcYAe40i78siuXCSFJdSMbGjOnXO1GeZIfj+H+1EGOBGM8mzQ18= 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 1751440229218781.8530558543299; Wed, 2 Jul 2025 00:10:29 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1030258.1403884 (Exim 4.92) (envelope-from ) id 1uWrbc-0000IN-Ji; Wed, 02 Jul 2025 07:10:08 +0000 Received: by outflank-mailman (output) from mailman id 1030258.1403884; Wed, 02 Jul 2025 07:10:08 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbc-0000Hr-Eh; Wed, 02 Jul 2025 07:10:08 +0000 Received: by outflank-mailman (input) for mailman id 1030258; Wed, 02 Jul 2025 07:10:07 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrba-0000Dm-VB for xen-devel@lists.xenproject.org; Wed, 02 Jul 2025 07:10:06 +0000 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazlp170100001.outbound.protection.outlook.com [2a01:111:f403:c200::1]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 94a81004-5713-11f0-a313-13f23c93f187; Wed, 02 Jul 2025 09:10:05 +0200 (CEST) Received: from AS2PR03MB10110.eurprd03.prod.outlook.com (2603:10a6:20b:57a::22) by PAWPR03MB9857.eurprd03.prod.outlook.com (2603:10a6:102:2e4::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8857.37; Wed, 2 Jul 2025 07:10:02 +0000 Received: from AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873]) by AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873%5]) with mapi id 15.20.8901.018; Wed, 2 Jul 2025 07:10:02 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 94a81004-5713-11f0-a313-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FiZ9JIqc5ZS6kmGJbiRFRmiUEDLDdtpqGTCo8iJZM3ddhiBIKVD+2RGu1R/lAt0ZOYk6OIyMDA6ovKu2Nzdc7Sdw3MTp9Ofh3VcK9Lm7gfRCml8NpDbdksVsxRxvdFk6iv+9PFhFxOMne0nWBN7tAe/1N8KlPvdNrCoRQbd4HKcwG45StG8ONP6L2LeFrZKrGgpRYLY0OZvzZPXolLjWW39Nb2dqFVCFZXvN1cyOqzS5M4VRozMYBQUdMwdRfpH0dWr4jCHFaUETTN9c2L6PS0pvfaPjw6Pqu14fW4rlFb0nrsUGRe7x3GJImkq5mLevpFi9b4ehk/bt3M0voAgQOg== 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=a0fIYyRtrGDYb2inwj/9c0Fm/wGYo8/Q2HKicoq4Zks=; b=WfcRrVFzS35TwdN1EGi4JbgbMLgaQ3+waO5/c+Mnxg0wgpRh4y5iTiptNZ+aE0HRpUAZyMFJAewoBUgpmkM0rtOg+0a+GpPHxDE2jrpVribJJVq6LFmtdRH8vgUMeC/6sra/A0RKMfovBC5xJYliGi9DkBL0tk01gvbvwisVZFYbvXdQPVr59gbtt/M874dfSAz8yhqb081iGwsZXiGXvDW8Zz/f+OFUvPe6kTlDC+RXImslf9ezpQgHGb7R1UF91Kq1tNXfj0uGWqVOzebLxnSGWjdf3B6aUAvZVr0di7VEksJ4sDuSxFLfLW3VnzQ1uXTtW5Z96pgILffc76rHSQ== 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=a0fIYyRtrGDYb2inwj/9c0Fm/wGYo8/Q2HKicoq4Zks=; b=X+b2ot4QQsewVD7mTyupxomrk3rqQfVBXIeiQLule99ZedlOl/haDWE/2aicI9O3hAJGprJtEmms28H6nwM8Sg2EDfwpx3mrY5et2pwPjH6RB3vb2aOc2OikuUiayikynRC46CQ0dQtwu0G9Yvkf9SouvO+snWWEh+lxjfYd7SYrNsexZMgxa1UMtOtnUjreXxY+L05A6F07REbAMJoaPM6zhBSvEdt8/07nfKUOU8G028mQ1eQYK8btVSVd80YJoUYeEBeWzU0Wg4YdpCyNV7A1PN9bNttqLRHU5HD+x2SZtC9kTQSxVZwqF4/hTeQAep/Oe7sbN4bY992t1AkMvQ== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Rahul Singh , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Stewart Hildebrand , Julien Grall Subject: [PATCH v12 5/7] xen/arm: Fix mapping for PCI bridge mmio region Thread-Topic: [PATCH v12 5/7] xen/arm: Fix mapping for PCI bridge mmio region Thread-Index: AQHb6yBUi/XpEQ96bkGJlOgGIbY7rg== Date: Wed, 2 Jul 2025 07:10:02 +0000 Message-ID: <38959c5bd9f8c3b9d63c8dfbd4be9341d326fe45.1751439885.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: AS2PR03MB10110:EE_|PAWPR03MB9857:EE_ x-ms-office365-filtering-correlation-id: 54954d49-477f-4077-1507-08ddb93776f2 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|1800799024|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?FTYPqNSfLxvJ4w0/nP9OAHGEUSUmXY9tuYPdvxXd8mGAnb3W1XF2E1axtr?= =?iso-8859-1?Q?4ReI1TgRyvkCPbu8mB6PiGkKxk62qZv1lydHHitEAJuBk+YDp1I+AN1uxU?= =?iso-8859-1?Q?+wK8kh3E5gmGeVbyR+MUNicGQ+rquv7PgSljzhsD5+dffk1FxdoPlBAAIh?= =?iso-8859-1?Q?0FkuPv5aYe1s3mY4GoWkqnxmc9zD6q0OPw9s+ek3fiOH/Pz3o0Vvczf/2r?= =?iso-8859-1?Q?BPUdWKEHAqQck/4dPdexMoLYxHXg5S87K9uR3HqD92OqDa5DM9TA5g+l9C?= =?iso-8859-1?Q?TsSdQNt06cvDUQ27eDrFfvphBpyNkU8F3BO/sHTMOW54+C0mmdzyr3qJh8?= =?iso-8859-1?Q?P2+P75WS7GWVS1UulT2I/yOI6ntx0hS98+w50eToBcasSyEuNE51QADFLV?= =?iso-8859-1?Q?ES9LcvgL9zoYCpKw4RQVEUOOu024kyvu00B+sk3UtAkFLxS5jbAY1bvkRx?= =?iso-8859-1?Q?syhvIj5lGQWpUOrPZFwkJ27MwdrOUHkUIRhMnoLcl6aZFmcjkcNypBqYWE?= =?iso-8859-1?Q?JOTUsRIEFqH/DtKfdTMDlRM1fCqY0kH5v3d3WvpzG/r804WVeJF0Wcxg67?= =?iso-8859-1?Q?kvnaWe8J8gSdfQOf850lQBI6nBEysIqJoXaOoUbS7VhQWZcQLr2OVhEFoY?= =?iso-8859-1?Q?9iqioihw/NYUMZHn0oZEUFyAtYSJ+jDnLcBU7doS9qrS7wlvoxboUTKjx6?= =?iso-8859-1?Q?vP88m3JmOS+924pBCGAa69KOYiL5FuG8vdVVAFpllImF0mLgkY9n8lHA0e?= =?iso-8859-1?Q?ZqnKGdS0CPbffFjTZ5SBflMrvSNIy39PYlMk/hM8QDmVVdUwiRv5JJmB9H?= =?iso-8859-1?Q?Wca6/tkiPMUQ8w+dF2TZl5TkN+3fH5nn/rAHWNAIiiV/xmIzDNLL+bPR8S?= =?iso-8859-1?Q?9X9h9Mko5tcAxYu/kVy4HYv+FGPF6GOBA2rzza3pftvxYo/008fIkJVnFX?= =?iso-8859-1?Q?t+kd+7ft1ze7uSpwcFCxD3TsaQ2ublEZWx2yci3yDm5eNmP77ZBJd3zG3r?= =?iso-8859-1?Q?lebWGcMGF7zrSmqKP2YgmGHneNZzCGQOtXo7l6pwrs6egNDaSVy5wMfTiB?= =?iso-8859-1?Q?qFy5aHOrujK0OwhUUDNWq0s27Mkx3/poF1NAuaumvc8j+NtOzjHjV4mPpr?= =?iso-8859-1?Q?Zd77LEC+uH7deVxDW44sbp47gwpEe882shftydz5eKVV7vE46rbBF1owdj?= =?iso-8859-1?Q?NM+sS2umMuSSDsqerszJZYi4B4re9IT1iXRj6cuy5xcczE2wzXLJl43hpa?= =?iso-8859-1?Q?2DgdbcOPhXxfd+8ianIJHU0fZhvWv/ox0qcrsN1ei0H2OuBwrT/rp2xnJL?= =?iso-8859-1?Q?U3/UAU90VfZ+JEtDBivHVIqq99Qbec/YqlrmxUsgLFDmXJoJaI6Z5M6wP9?= =?iso-8859-1?Q?B9AnZ6ZXMxv+elMv/XyaPxKpwaIbYIupf4FHglJ3CXG3zu7KeZdbtgSgVk?= =?iso-8859-1?Q?jyHO32MaTy9ZBUm1IEnpCLlpkaYvMiCd7IS2SemIfTiHVTrs4+oodxsJ4G?= =?iso-8859-1?Q?o=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS2PR03MB10110.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(1800799024)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?aF/uFuP3w5OszPwm/FjvXtizc0yVdsmtWhz6hpyi1EjlN+f8MLlSedrYGi?= =?iso-8859-1?Q?VY5leNMP8or+WeZgEhTqDmsbCYk/EQYr2T9t6t+GsEAwAg2ZIQUoJjfDCI?= =?iso-8859-1?Q?5LqtsXfNIL2SfmlGEjfepcCAUrIWtxo2wHNeTgUnbwl/Stn5Z10rCh+2tr?= =?iso-8859-1?Q?ttV/9ExtEPtc5W2dCAys9KKpGrkAehrk5j+1/iI5R9sRKOkoipg1ERjzER?= =?iso-8859-1?Q?yWlWx6idm6ek+37wxlWBPkSO9z37GiomDHvqIiCaN4vrw7ivU7f3PnSgPF?= =?iso-8859-1?Q?1QtgxZYUsh6bcApUIMRQ4b+UJTn/eOn3pHLWOsRy62Pf+3mUWlDFEH8VPH?= =?iso-8859-1?Q?/CFM05uGTVCPOCKMv+O7W+vn30PlfOGEneVH7eCcv0DgXGqZj+mA35hylf?= =?iso-8859-1?Q?0vlQSXTdsyRR4vcx47KgQ8MLQ8yP/LqP3j9N7HChNfz8FQNnWYfYlUKq8Z?= =?iso-8859-1?Q?vFNiJgGw521slaemZtmeB2aR8wK0igyX2BywZ3mgt+dFQjoJ927X9tuB+o?= =?iso-8859-1?Q?HJECLwa9P/++v0cxj0tkrIyrzzmN6U0sgTcu8k/ew1BGvjE+P2BMXcuQAj?= =?iso-8859-1?Q?5+lOVXd+SjJkEWk+8CfkNvHNpoX/2iYqpX8koQpLqG8vveKTusFsC3yem4?= =?iso-8859-1?Q?diq8Rz5brserApiwE7uK8f0sRAsXSvSvUSfe/9MlqUgPqq0246LNcGnSX0?= =?iso-8859-1?Q?g+k33SZhtILXF5oDQWAEAf8hIEuXF12gMQNYvI4GkEFZCaN45TH2yhryof?= =?iso-8859-1?Q?fz2gnYcmpHwDNjoJfG6X+AI/W15qQe+6R39luIiB2zeVjSnFyYNKPZqsa/?= =?iso-8859-1?Q?jsFKhxxa+r9DEk/8xyq/0OtESfGGBZiF1c+Dug9bSLk0zIMI2Xxvqweoau?= =?iso-8859-1?Q?pX3NgiLpHupDcAMQxb7TiPplKNBZunFmiwIH5fnd0cgXY6j/9fx8GYI/YR?= =?iso-8859-1?Q?4wqMOU1ocLWfMcVT4aD0rCgOnO326kqNCUuPo7b2HIbeby7KgG7GJ/HchU?= =?iso-8859-1?Q?3GnKCRnTq9xu8S0SbN9yCPYKd3pd9MuY7PF4x+PLrOLMUeUm9IDGiPbmvE?= =?iso-8859-1?Q?4eJnA9GdHhxj4S1G2g0jE3SuVC+q3fgDQdV+9UIJnp0LICIAbETYmt3IVY?= =?iso-8859-1?Q?Pm9NvNMmWCp6pyrvloWF31kMrS02muYT+CuvuVncJ0ERN7zTYzFdrwHNIK?= =?iso-8859-1?Q?fQht9YIGrwB3e9eZD+iKTgiCZU4luhmIn1Hko8kUalHpF2TmmUBoSX/P2R?= =?iso-8859-1?Q?4qnsuwS3set+n8CXs8W3B7lMY8dCzgiU04jgLbijMT7TKD9BR1rj/i0zq1?= =?iso-8859-1?Q?Pwh8Xz4BIVUZ1x/1R8cdCSzSpnoZ3+yIiwKCKgT2xQIuGh6nRL37s92Gvd?= =?iso-8859-1?Q?/9gX/Rl0YJimPU9K5mczJQ1pntyZ86a2/Vh+5pMSpsY2m4YkHGwBZjIrPL?= =?iso-8859-1?Q?O1t14rwDxKAjSO9h9qzvsZPhBwnhYRJ6DnqBOhBUn44a1FQ5XvPoCp0je9?= =?iso-8859-1?Q?k6oXtcuoI+K+jFkllPXGccm13F+L4lIVpSEBlxjr4set0lZASnAKZT/ptp?= =?iso-8859-1?Q?Md4n85TdsyNUh4jR0PJ8TCvMm8W4d8ELkHA1LrDJA7LCHV7aP2QQsuiz0u?= =?iso-8859-1?Q?Gqc04otkEv56XNQ6MvCpfZgPO7hbhWmjFXxVW7KzrFWIAtJTdp5EDHYw?= =?iso-8859-1?Q?=3D=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: AS2PR03MB10110.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54954d49-477f-4077-1507-08ddb93776f2 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jul 2025 07:10:02.6004 (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: Zbww1NHaJ0GbLrdRodi5sDDU6L9ER4ivwiDv4/Wk5S9XmlZwd+/6fexewf1auZ0+Y20DvZYeUtoGb5o2wMJCuw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR03MB9857 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1751440229799116600 Content-Type: text/plain; charset="utf-8" From: Rahul Singh Current code skip the mapping for PCI bridge MMIO region to dom0 when pci_passthrough_enabled flag is set. Mapping should be skip when has_vpci(d) is enabled for the domain, as we need to skip the mapping only when VPCI handler are registered for ECAM. Signed-off-by: Rahul Singh Signed-off-by: Stewart Hildebrand Acked-by: Julien Grall --- This patch was originally picked up from [1] v11->v12: * no change v10->v11: * no change v9->v10: * no change v8->v9: * no change v7->v8: * no change v6->v7: * add Julien's A-b v5->v6: * drop unrelated change in xen/arch/arm/domain_build.c:handle_linux_pci_dom= ain() v4->v5: * new patch changes since picking up from [1]: * rebase on top of "dynamic node programming using overlay dtbo" series * replace !is_pci_passthrough_enabled() check with !IS_ENABLED(CONFIG_HAS_P= CI) instead of removing [1] https://lists.xenproject.org/archives/html/xen-devel/2023-07/msg00483.h= tml --- xen/arch/arm/device.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/arch/arm/device.c b/xen/arch/arm/device.c index 5e1c1cc326..11523750ae 100644 --- a/xen/arch/arm/device.c +++ b/xen/arch/arm/device.c @@ -268,7 +268,7 @@ int handle_device(struct domain *d, struct dt_device_no= de *dev, p2m_type_t p2mt, .d =3D d, .p2mt =3D p2mt, .skip_mapping =3D !own_device || - (is_pci_passthrough_enabled() && + (has_vpci(d) && (device_get_class(dev) =3D=3D DEVICE_PCI_HOSTBRIDG= E)), .iomem_ranges =3D iomem_ranges, .irq_ranges =3D irq_ranges --=20 2.34.1 From nobody Fri Oct 31 03:41:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1751440232; cv=pass; d=zohomail.com; s=zohoarc; b=LfBIFu0S9D5G4VayaaKqN/EyPIaGuhRT7U+BHMcKIoc8SmZdKx4S8lnCE3+ApHRzVwN5aEq7guax7KqDnVADaKASddMmzzeft4jyLIsCM8cBLfQpdWrxTvQ+ue94tc0Rf9Somn1G31LAkvYytioQ985azm/1wLB90DgnaIjqG2c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751440232; 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=gx02fWw4/KPcrXSVDhcSP89YyPi3yqVvrZifvhGLY14=; b=WCsci+rcCYb84kC4ifKuSrCE9Mu7tLRpeNhwr/y4GJzrnKIW2m7pM18hAHlUb9VMCKQgOOGTwcU8OmWxlZHtF2FSs1pPvEhcLDHJjOXwbm21sf5wUJzmA52KdY2G6EX7i2psxg5ks0neoCsjEZ1hzNbr9rYIbTDn3kO94qBLW6c= 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 1751440232541663.1638100346838; Wed, 2 Jul 2025 00:10:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1030262.1403923 (Exim 4.92) (envelope-from ) id 1uWrbj-0001Gq-12; Wed, 02 Jul 2025 07:10:15 +0000 Received: by outflank-mailman (output) from mailman id 1030262.1403923; Wed, 02 Jul 2025 07:10:14 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbi-0001Ga-R4; Wed, 02 Jul 2025 07:10:14 +0000 Received: by outflank-mailman (input) for mailman id 1030262; Wed, 02 Jul 2025 07:10:14 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbh-0000Dm-Sg for xen-devel@lists.xenproject.org; Wed, 02 Jul 2025 07:10:13 +0000 Received: from AS8PR03CU001.outbound.protection.outlook.com (mail-westeuropeazlp170120005.outbound.protection.outlook.com [2a01:111:f403:c201::5]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 97fb8ff4-5713-11f0-a313-13f23c93f187; Wed, 02 Jul 2025 09:10:11 +0200 (CEST) Received: from AS2PR03MB10110.eurprd03.prod.outlook.com (2603:10a6:20b:57a::22) by PR3PR03MB6651.eurprd03.prod.outlook.com (2603:10a6:102:78::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.20; Wed, 2 Jul 2025 07:10:03 +0000 Received: from AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873]) by AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873%5]) with mapi id 15.20.8901.018; Wed, 2 Jul 2025 07:10:03 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 97fb8ff4-5713-11f0-a313-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Fzg/XruLWcdUyM2W4YDrsUbFQYw3bhrEP/ardk9QpLjC7dGD92veLukk/NX0mP+JB/QDvSs/sKEnlUZ3wPmwiHF+g4Ccec+vQ2tSmqmniPXHeB0ZYZ9PFqwIbZ+DLOFaqAovTa+tF4NDdvFvxKAv+mnH4H+3saXvaZM9pTFkA6Sod8RqY27wslb0CETvsK77saMc5lCBhJAJXpWOFtnQKOUPZKAy1HI8PahHwe/rbOSQrszqRqbg1PsmrFQ/D8S1MkZrcaTgjYVE0Vek7abR1txlNvDbAKeQkf5mWhMRpFzAhEF5QpTseFWMuXO4r3A6jeyOhit4WcIsSvC9H1W17g== 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=gx02fWw4/KPcrXSVDhcSP89YyPi3yqVvrZifvhGLY14=; b=nXUBOrxgQoq4ZdAmQcAvyJiX16e3zS36gX/uhqs3WgdpvUYRyzC1X8ZBRGnAG7Cgm9v/WsMywtu7UAdL2Dd98M1PO676i0ihVxg3/wYmgZvqzir8amPI1NRI4ZCGevN6GP6lGJVMOWKAhflnNY1qoyIhHFEpi95yQ3jvSdE6lZDuG7nr7SxtZUy8ZEPZHMx7JARptQawO6puc+XM5zHPeWdq9ffVs/rGO0RWouhzdE4Csu+i8AlvXlqs+V+l60qZ3eJtJCfwU1OU9hKyu0OOxLg+vagadDUpuUMOMp5UIhiKFN+LrstNnSKGFQSYLRJIA/NAtxwB6lS0AtvtCjPBHg== 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=gx02fWw4/KPcrXSVDhcSP89YyPi3yqVvrZifvhGLY14=; b=udQQPbds8XnHPTvjwKgfxv0qWFeSaDGOHmBev+zuEzERaXVcDd1sEQiF3EPXNnPUMLlSQe9MCcdbM7g/yrTD/1D5yd5q++YDdOeoNHxJiTxqJKoEqcLkXREdpsdogu4JLYlwdZRLn2SeOu/QAQzuw/zM9mR1ggFtsbTPPTVT1bYiGZ3im7otrSZai0AFuU5K7XlKU//xrHcmgqNFR9KBVL4DqbzTBx/zs9ItS3e88+uq3E9woMm0w/PgeCr4tXq5pfrCR6Mk+i9QcgwdSTnmtbPMEJgwLZmdZU3VdA05qOUiFxtLm+CcqQaFjWS7iae7fDQjE4l3YWwyU/86AqLaFg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Stewart Hildebrand , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Andrew Cooper , Anthony PERARD , Jan Beulich , =?iso-8859-1?Q?Roger_Pau_Monn=E9?= , Mykyta Poturai Subject: [PATCH v12 6/7] xen/arm: enable dom0 to use PCI devices with pci-passthrough=no Thread-Topic: [PATCH v12 6/7] xen/arm: enable dom0 to use PCI devices with pci-passthrough=no Thread-Index: AQHb6yBULI+qebFTaEmQEujYeGYPTg== Date: Wed, 2 Jul 2025 07:10:03 +0000 Message-ID: <88a7dc50bdff2ce9cb0f10a66155ae558e11cf50.1751439885.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: AS2PR03MB10110:EE_|PR3PR03MB6651:EE_ x-ms-office365-filtering-correlation-id: 1434f23e-9c48-4354-c4f4-08ddb9377760 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|376014|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?dD+QMruyyo3HI8b67CD8eSYDMtqXOlAXLrppXlr+Ftss4YUsGhbUu3teNP?= =?iso-8859-1?Q?CVujizR12EMo55qLiP3t58h+k2+tGgg/1Am7KMn3p331HZLQqTh5oPNbfD?= =?iso-8859-1?Q?NokPDX6aV+2wa+RD/ZKJGpBBfCEw/kQVGbM9rH7wvlio2TSYRtbLYi4Isx?= =?iso-8859-1?Q?1bgBMiAz37Lb6YxlIvcXDu5k251pGNDDp8skZqARSx7DlzUZOobBCg/rXO?= =?iso-8859-1?Q?YfJhklkn0GUTLtlXGYjBz5FJBf0weNeRpKP+5ZbTfLY12YwbfMYcwTkHNe?= =?iso-8859-1?Q?rXi9acsuweqYCasixoELCqzWABT+ZJB0D701rN2Pbwa4dBXlL/XUkoD/9R?= =?iso-8859-1?Q?lWokrzMT6tMiditmx9SiopJjubAizVpI22L8tes4/uiaLaOQ2BcK/BPkYd?= =?iso-8859-1?Q?jhkylBpwba/LeE5Z5gBVprrWquXSiXYhu0AX+Igl/sNPdQJUD78OA1RtpN?= =?iso-8859-1?Q?6VOG99HpWzi0Y/L/fbA2YaYWNMzPJQVaca3JUvFgPPvQUxyyNquxLp8pQe?= =?iso-8859-1?Q?0laUlLhKRroVjsjtbyKjf7TZGzt6BJXQuS8YwPfV1P11hgyDZo+xrfbe8B?= =?iso-8859-1?Q?rbd3qeXaAAJ250JOu/L1XY3/HK4mn9ViTzvvCXbKFkGheuPsJAKCf46iws?= =?iso-8859-1?Q?cR9Gtew3tcUndmFvWIc5p5q2RCdPzJXX9MveZ0CiI34iCJ9FBzqQRQKqbD?= =?iso-8859-1?Q?Oc34yuudLwJgLy6iAJqG38Tx4n2oTShf3NsTRcFYVZDU09HMS4tXREAEdY?= =?iso-8859-1?Q?GoWDPfAX8dCFFzgV1GP10kB4RH2hCd0ATHcujowdSjjkAt8hUHdjvCNXHP?= =?iso-8859-1?Q?IdkUu3ogHQ67hFKQml7zsQHjBTuLex1weBk5NqTjrMVE+N0jC34SpT/qYK?= =?iso-8859-1?Q?IpcO2m1KqO5spaEDgowvI1XM5k3sIm+rgjjMfsluCX8dHsA/wbj0qBp/ar?= =?iso-8859-1?Q?tELZKcnHabveM2Q6wpfzOQIvL9dnt3/+RjM4rPbTq1v836HnREQhaUsisk?= =?iso-8859-1?Q?JqzGV7sj/9nQfyxTEqiYChRXzs5Gt+yDLlVs8VtJw9FkeyXbgM4XJxcTty?= =?iso-8859-1?Q?KNQOxJjNNw+ojxec4wsiTjrsAVi/obC25mpeFKlrRRDnB20rbiQOoTwQuI?= =?iso-8859-1?Q?YXbANvLJIx+joTAqXKh5p0GNlb08PODDk6sKdhjIm2gR/9madWcrOxkI3v?= =?iso-8859-1?Q?2jjaZmsqESsfvGRgAjTobPhQk5mwIv6WpsUXEKT9RIXllpK0vMcFbHVGUu?= =?iso-8859-1?Q?igcnrycUDoOFb5MaJOnvmDsY0AimktmRtMhYrfkbFsQHQN59aGaK/CkNCK?= =?iso-8859-1?Q?JOlC8MFSr7iogNkNLx/OulOStCePV1AgwhNZt+wdLHCUtaPkRvoQY93WtX?= =?iso-8859-1?Q?Dv++SDOBKhYV5lCNB62TRZK1yFcT+murmJblsedHNuhElBaTEFwphMuTTr?= =?iso-8859-1?Q?0vg1JEzxhGDnc/UKocQiWViH3q3s1fhHa77sTyPmhmnkj1WEh9Rw43OisX?= =?iso-8859-1?Q?9xCACfMHlwFFNGnTmCzjC+agPy2ZP+ELGf+Mv2vUhK2Q=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS2PR03MB10110.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(376014)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?OAObmQ5rzzFKSLFvvxbOIiKoiBnFTAWiyLm6lu6FSu+XDdnc9e94cLUCZU?= =?iso-8859-1?Q?j4lF8vWEa9K+cz/AiqjbrwTb2OvXfsfnA7lfLYeiM+plj9bZdRNVQcLo1r?= =?iso-8859-1?Q?z6mi7XZvMGSSzAFavLRCOomExjPwHbUuuRe6iFArxl0w7ohr5xow2FnzX4?= =?iso-8859-1?Q?IOqr9lqoP3b8qIYIPMSah27WzMPE95wfuB8blTHYEG3oev3+9sVkJZzn51?= =?iso-8859-1?Q?mbB5A7w1+8DY5qhthRWtc+C/5qciZExrLe8/Ogeor5z2lKfC1ES/5v1pST?= =?iso-8859-1?Q?CEc52w65DPD8Hmthm9ss8kn3YbnN0uS7ATOVRPrkXCHShCya2CCfR0MxqS?= =?iso-8859-1?Q?+jvNA8Yeh/O0HdsMgc/sWHyHn4c9KTGmj6sNj0S5pT2PNNGmtLs3BDLOVn?= =?iso-8859-1?Q?ohzdq6kOHYnmSmWeh3MpMpIspKAfPwhe3hsIbQjQxpkRZIy20Guu/XXBkG?= =?iso-8859-1?Q?OjxiR+WOUkKWh9xxGq7WN3Z2RnGjbo//RCWHGZpLG4QMy3XBm2Br6nejn/?= =?iso-8859-1?Q?xMNO74QrdMGKbwb6Ejw6Ka7yNvH4YJ/sekdT4ZMLCvln0CXZ+dq4UijISV?= =?iso-8859-1?Q?AJ4nBVDjfU6g0UicxGOdr5UuOVLrdxaZrMLeF95jNmC5gOz/30NeH6YBpV?= =?iso-8859-1?Q?4Ro/9437UauwVUTJkN+IjlrAhpsIIt9+NhOpZ/eyg8Tdu0hmwrhnQllcVq?= =?iso-8859-1?Q?S0pH/vLW8IBLxHs/BkwK++ZSHi3GUxenaqCDqqcONLX0z8stzl/u2jbTI4?= =?iso-8859-1?Q?PzjgG91GklsVnXZ2AdXvfUhW/lXgQIc32vi883NV9+ZKIFQ7lsa1nXfQmS?= =?iso-8859-1?Q?Z9YaZEMp5eHffk4WJYObc1weOKBZV4Uv7/WNpWOJSIjnU4YsL+0S/ZFF29?= =?iso-8859-1?Q?w0wjy62s0d89x5/wDYwbki5V+TPubk7E1rINRUh/d5yipqkMo4paMIyCYO?= =?iso-8859-1?Q?7UBuHKaPL/k9FC6auetuX0iqnWK7vyNbk350ZRtd7dDCJdYmmxphr47k6f?= =?iso-8859-1?Q?X0tx9zkGqOnBstJWSgkyBLbtu6zrZa97oVXh6Tsmh8fITApvy8+AvfGQ9j?= =?iso-8859-1?Q?RDHRO+5wZ/gsACZVq46c4G9rv9DLAKYmAuZHiWwYMcyP27CmIdtVjk6h6A?= =?iso-8859-1?Q?pJJs3ML2FedRY2NGP0IO+hEgkDQl61yUt7+0zMQFfQqi7KgQHAI/d7u0Zt?= =?iso-8859-1?Q?/7Fva08UxQNESeGe+9AzkL3TsIr2r/0qYZtjfPsVc+tBEQ8XFANqCIaxEd?= =?iso-8859-1?Q?lPKe9SO0a65MF9hbTtTlTVNGRi7hCmYNj86RQvpoJLWN4jjUoGCCLQ7PQ3?= =?iso-8859-1?Q?aApTFwlp+U2BZomgqRr1UnIENL6MhCfgzH8mZtCwWFN2JHOP2UqjAOyNb3?= =?iso-8859-1?Q?vm+Ku8nhXSI3/TbAJOEE+GA9RafThjXALhVLXONFiGhklgopVUJPJbhaws?= =?iso-8859-1?Q?rlRDw7DKbkGeCWMt/RV20gXAlzWvXj0iFM42TDbHN/yp+3csatIdxfPTDH?= =?iso-8859-1?Q?JRBcM8s/zuQr7prLa74JV4XLwGaennaj7NMOl3UJlHXtXVpngWOiwnU4rj?= =?iso-8859-1?Q?f6BPipj63X8Jn1sXsdfy20Dy5URrTJ6V7240gP5BkXOPiiaf5dkYZ0Bs+S?= =?iso-8859-1?Q?A39pFD+FWs44vHQ0eyiUZHA7Gll5QnKNx7kcvSxoV3+6pOepOxwQrWYA?= =?iso-8859-1?Q?=3D=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: AS2PR03MB10110.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1434f23e-9c48-4354-c4f4-08ddb9377760 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jul 2025 07:10:03.0601 (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: ID6TIUI6pRGLI6aLq4JI0n+qzDIJt910pIV+QodQUmV2jMDY6VBpXMgQ3QFpc4zVPvTILnvgzzQCGGo8gIihKg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR03MB6651 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1751440233948116600 Content-Type: text/plain; charset="utf-8" From: Stewart Hildebrand Enable the use of IOMMU + PCI in dom0 without having to specify "pci-passthrough=3Dyes". Due to possible platform specific dependencies of the PCI host, we rely on dom0 to initialize it and perform a PHYSDEVOP_pci_device_add/remove call to add each device to SMMU. PHYSDEVOP_pci_device_reset is left untouched as it does not have the pci_passthrough_enabled check. Because pci_passthrough is not always enabled on all architectures, add a new function arch_pci_device_physdevop that checks if we need to enable a subset of the PCI subsystem related to managing IOMMU configuration for PCI devices. Enable pci_init() for initializing Xen's internal PCI subsystem, and allow PHYSDEVOP_pci_device_add when pci-passthrough is disabled. Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai Reviewed-by: Stefano Stabellini --- hmm. Since dec9e02f3190 ("xen: avoid generation of stub header") Should we also move is_pci_passthrough_enabled() back to xen/arch/arm/inclu= de/asm/pci.h ? Not sure if PPC/RISC-V will plan on using this check. v11->v12: * add enabled checks to pci_device_reset * fix style issues v10->v11: * always_inline -> inline * add comments * clarify reset sub-op handling in the commit message v9->v10: * move iommu_enabled check in a separate arch function * add Stefano's RB v8->v9: * move iommu_enabled check inside is_pci_passthrough_enabled() v7->v8: * bring back x86 definition of is_pci_passthrough_enabled() v6->v7: * remove x86 definition of is_pci_passthrough_enabled() * update comments * make pci_physdev_op checks stricter v5->v6: * new patch - this effectively replaces ("Revert "xen/arm: Add cmdline boot option "pci-passthrough =3D = """) --- xen/arch/arm/include/asm/pci.h | 2 ++ xen/arch/arm/pci/pci.c | 14 +++++++++++++- xen/arch/x86/include/asm/pci.h | 6 ++++++ xen/drivers/pci/physdev.c | 7 +++++-- xen/include/xen/pci.h | 5 +++++ 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/xen/arch/arm/include/asm/pci.h b/xen/arch/arm/include/asm/pci.h index 37a6f14dd4..08ffcd4438 100644 --- a/xen/arch/arm/include/asm/pci.h +++ b/xen/arch/arm/include/asm/pci.h @@ -151,6 +151,8 @@ void pci_generic_init_bus_range_child(struct dt_device_= node *dev, struct pci_host_bridge *bridge, struct pci_config_window *cfg); =20 +bool arch_pci_device_physdevop(void); + #else /*!CONFIG_HAS_PCI*/ =20 struct pci_dev; diff --git a/xen/arch/arm/pci/pci.c b/xen/arch/arm/pci/pci.c index 8d9692c92e..beb1f971fa 100644 --- a/xen/arch/arm/pci/pci.c +++ b/xen/arch/arm/pci/pci.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include =20 @@ -75,6 +76,17 @@ static int __init acpi_pci_init(void) } #endif =20 +/* + * Platform-specific PCI host dependencies require dom0 to handle + * initialization and issue PHYSDEVOP_pci_device_add/remove calls for SMMU + * device registration. This check is used to enable the minimal PCI + * subsystem required for dom0 operation when PCI passthrough is disabled. + */ +bool arch_pci_device_physdevop(void) +{ + return iommu_enabled; +} + /* By default pci passthrough is disabled. */ bool __read_mostly pci_passthrough_enabled; boolean_param("pci-passthrough", pci_passthrough_enabled); @@ -85,7 +97,7 @@ static int __init pci_init(void) * Enable PCI passthrough when has been enabled explicitly * (pci-passthrough=3Don). */ - if ( !pci_passthrough_enabled ) + if ( !is_pci_passthrough_enabled() && !arch_pci_device_physdevop() ) return 0; =20 if ( pci_add_segment(0) ) diff --git a/xen/arch/x86/include/asm/pci.h b/xen/arch/x86/include/asm/pci.h index 2e67cba8b9..3830232246 100644 --- a/xen/arch/x86/include/asm/pci.h +++ b/xen/arch/x86/include/asm/pci.h @@ -64,4 +64,10 @@ bool pci_check_bar(const struct pci_dev *pdev, mfn_t sta= rt, mfn_t end); struct rangeset; int pci_sanitize_bar_memory(struct rangeset *r); =20 +/* PCI passthrough is always enabled on x86 so no special handling is need= ed */ +static inline bool arch_pci_device_physdevop(void) +{ + return false; +} + #endif /* __X86_PCI_H__ */ diff --git a/xen/drivers/pci/physdev.c b/xen/drivers/pci/physdev.c index 0161a85e1e..3210f3aa96 100644 --- a/xen/drivers/pci/physdev.c +++ b/xen/drivers/pci/physdev.c @@ -19,7 +19,7 @@ ret_t pci_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void= ) arg) struct pci_dev_info pdev_info; nodeid_t node =3D NUMA_NO_NODE; =20 - if ( !is_pci_passthrough_enabled() ) + if ( !is_pci_passthrough_enabled() && !arch_pci_device_physdevop()= ) return -EOPNOTSUPP; =20 ret =3D -EFAULT; @@ -57,7 +57,7 @@ ret_t pci_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void= ) arg) case PHYSDEVOP_pci_device_remove: { struct physdev_pci_device dev; =20 - if ( !is_pci_passthrough_enabled() ) + if ( !is_pci_passthrough_enabled() && !arch_pci_device_physdevop()= ) return -EOPNOTSUPP; =20 ret =3D -EFAULT; @@ -74,6 +74,9 @@ ret_t pci_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void= ) arg) struct pci_dev *pdev; pci_sbdf_t sbdf; =20 + if ( !is_pci_passthrough_enabled() && !arch_pci_device_physdevop()= ) + return -EOPNOTSUPP; + =20 ret =3D -EFAULT; if ( copy_from_guest(&dev_reset, arg, 1) !=3D 0 ) break; diff --git a/xen/include/xen/pci.h b/xen/include/xen/pci.h index ef60196653..130c2a8c1a 100644 --- a/xen/include/xen/pci.h +++ b/xen/include/xen/pci.h @@ -79,6 +79,11 @@ static inline bool is_pci_passthrough_enabled(void) return false; } =20 +static inline bool arch_pci_device_physdevop(void) +{ + return false; +} + #endif =20 struct pci_dev_info { --=20 2.34.1 From nobody Fri Oct 31 03:41:49 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1751440239; cv=pass; d=zohomail.com; s=zohoarc; b=cf5AGgmlOy6hFZ6Nd/b0qZMMLVmY1Edofk12jqPQQ4OjO9xib7qvdJiGdTTEPDIHmhotrGibUcBHlsVR/tFpDJiqlMhd0KECIE8b38tfxps0r7iRCL4DnXFdNomDAj7QpkizzTYvprRuxdX05XfiduykPtsm3BaVwOpuw/YxJlA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751440239; 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=T0Qta02KU2i5eR6LOiPYT0O0sxIAYJlAJ/hF7D7pSQI=; b=QLWniDU4S1YDpT7UhQKyRTu/pAdLSBEj0fCbcK/S/Tjv17ASNfrLhbnYZ2PrBeruDc3b8r25yrYxSoGopBWNcuDELbfRdWgUXEDa2xyKbRy5c9ivCGmtjPrlUSmOVB8GJ1b/EhlW+p6ugy9m/3VbryIDiMFTXsXyrWCuLPXtxw4= 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 1751440239328399.3210245274994; Wed, 2 Jul 2025 00:10:39 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1030263.1403938 (Exim 4.92) (envelope-from ) id 1uWrbk-0001gw-Ic; Wed, 02 Jul 2025 07:10:16 +0000 Received: by outflank-mailman (output) from mailman id 1030263.1403938; Wed, 02 Jul 2025 07:10:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbk-0001fD-AZ; Wed, 02 Jul 2025 07:10:16 +0000 Received: by outflank-mailman (input) for mailman id 1030263; Wed, 02 Jul 2025 07:10:15 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uWrbi-0000Dm-Sp for xen-devel@lists.xenproject.org; Wed, 02 Jul 2025 07:10:14 +0000 Received: from AS8PR03CU001.outbound.protection.outlook.com (mail-westeuropeazlp170120005.outbound.protection.outlook.com [2a01:111:f403:c201::5]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 98374b6f-5713-11f0-a313-13f23c93f187; Wed, 02 Jul 2025 09:10:11 +0200 (CEST) Received: from AS2PR03MB10110.eurprd03.prod.outlook.com (2603:10a6:20b:57a::22) by PR3PR03MB6651.eurprd03.prod.outlook.com (2603:10a6:102:78::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.20; Wed, 2 Jul 2025 07:10:04 +0000 Received: from AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873]) by AS2PR03MB10110.eurprd03.prod.outlook.com ([fe80::52f0:1815:60c9:8873%5]) with mapi id 15.20.8901.018; Wed, 2 Jul 2025 07:10:04 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 98374b6f-5713-11f0-a313-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=K1H//fzjmbuyn7mhC13Qy9SEkZQkj5Ow2/0ULQHF8B+LGLrl9uyrSadcCOAa5NIMLQ4PtBGwCSAVGVSLVIuudTC9LgWkfd63A2K8yhdN1bYxla3QeHH+hAeDqRQSHTpi+O3LYkIsS8XOBLrwV4OrmtxkOCKRHBcf/tf1mC/YGBooBtyp3/THddqBAe6aFfdeq1YMMZlyLCc3aNRbdnPW+1OeXFPllra9J5Wen2Ogb8TWjU4xkiS7J6sTpgen3Oee1Q1bSZ45JbwxNJgmEa2rxWjaXJVy+485HzU5w9/ZlWq+n/CxIHo4WRwGub+EL3b4hw0z0Bz3FQjTQN2Wly6v7w== 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=T0Qta02KU2i5eR6LOiPYT0O0sxIAYJlAJ/hF7D7pSQI=; b=pRlLaX7nxYzvyb/bIQQ0039YKrLPNo+DpzWpe1kNrNCdY5HC0MtKqTnbCJMRN+56nBrAeOjG+D7ixCBLy5TYENnaST+arVYN5k09LpGj0sAMmYWBBtHBmFIy3UP/8Css9g8agxyl+0Gg7yPLM1aXs5VxaPl2bzbhf/FX5zYHUoRU9rcbThFIIwWbr3bwhhO0hUI5y3PiOE/1H3bOxrApCTLJQhDoal00b9lKGtobmp4YWE/B7PdyrEHx5rc57aN1Lq4pYdTTO7+d1Nb6XQwhY5gAMALCEbE1WZeQmsXdTJ3UiNH1PsxBM0U5l59814Qcqm4TO2gDdheZycWyeLudaQ== 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=T0Qta02KU2i5eR6LOiPYT0O0sxIAYJlAJ/hF7D7pSQI=; b=owUFpDV77j42qehQKPe8nRtTBI8yBYnb6mW5/D7Gx/mZTtIJ2NwcwHVLtMTWsDCfBEBhRW7GQERue3GHUR6SJFYtjZONzPB2AlThJdlKkKN9wY2BuF1I28PWTKfceiCxLodCfWelY4cc1S5uEO8GyJWfNaGg8BqIOSA6TXJLGT/bxa47wrhI+Y54/ES/zF9viG95+uJyhFIMQ1XRHDquJE+1XQSBa62cU18zVnG+et2cPfbn7KAzH/y9ZAt3HjgYR0UX/iggau7nXeJZGLIUTfDIxFCluv9DPW60f+LEXDJ6LzS4inRgExP20ezxBd5LaniDII3ZhDRHgBZrh2iNKg== From: Mykyta Poturai To: "xen-devel@lists.xenproject.org" CC: Rahul Singh , Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Stewart Hildebrand , Mykyta Poturai Subject: [PATCH v12 7/7] xen/arm: Map ITS doorbell register to IOMMU page tables Thread-Topic: [PATCH v12 7/7] xen/arm: Map ITS doorbell register to IOMMU page tables Thread-Index: AQHb6yBUo/4pCLPsgkWKLD7C6qkH7g== Date: Wed, 2 Jul 2025 07:10:03 +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: AS2PR03MB10110:EE_|PR3PR03MB6651:EE_ x-ms-office365-filtering-correlation-id: 0c3f2554-32c2-42b0-28d2-08ddb93777f9 x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?tFFmvTU5mXcoFqj6dIufLYkPsMqheWzRJfD6ezQ2VGRpYDwyqfA7OBEary?= =?iso-8859-1?Q?YC3RhYxl9mArhzkY2iO8foRRXEKCeT/NafdIuO8hbdI9dtQYmnIkcV/svZ?= =?iso-8859-1?Q?tW0aoe4sg/DURjfQiuQVr8ig0oV/ObTja3VMbbcIXei5+ppF0BvLsQuSUM?= =?iso-8859-1?Q?RIkkd/8BP6GiHJLif6jHY0d4ZysCkgUyrLZjNuFcKfxSDlRSPoK0Mx/L7R?= =?iso-8859-1?Q?3oFaNGp4mE/9lLcvxVIiAgyr57DkWVVq57NvMO1JVm+F4dxIe1oczC1Tc8?= =?iso-8859-1?Q?14enueP7a/nlefIAdW6E1oF4xgo3hgZCayeWzk5mEiglXVHYd9ZV6Pe7QD?= =?iso-8859-1?Q?0VU1jlHOVaf0h5B0ij25lUkDwulr6o/euBsx2VF6+u8LC+7buEbP3tsBv5?= =?iso-8859-1?Q?tlHB2NkMUMCIjKxOCuGrPA7HiPL4Ak90Wt+/oiRHqK8kf5dwgYOLENTSrY?= =?iso-8859-1?Q?8GZtGit8s7Uch22k8vA6cMHEtMZuSCJBPGdyju9cXMzZLAMt4dzQTFbtUb?= =?iso-8859-1?Q?4wzZBkItDpHSmvTDVbA0e7FeIRv1Jgitogy6rf91UlhGEFhkGSDXZrGJAK?= =?iso-8859-1?Q?wsAedV4JdTH/zLjB6nQIvDG/Lq2idnRFS4T8ZSWP1jIEECvpDM1PBqaAIX?= =?iso-8859-1?Q?xkK9P0xhzNtIdZvcklb2OFlfO5an02kJQMJ5V0bYDPJeTXQmUKflrGtwNK?= =?iso-8859-1?Q?xERFVUzrJBfT7FbNHzEu2LTOvvsPlm9aP0Y7dxKW4F5n36Kx6xXqWdQXha?= =?iso-8859-1?Q?BLpTscyLH0X9A2SUwwPyLv2egTcZ3Tsm1soDGVAjOg7+VqNhzlYBRDkYf1?= =?iso-8859-1?Q?264lqbHNshTLYMP00NBUxP4El7q9m6yA7BOcYABupy1vOy2ezfSd9OHhVy?= =?iso-8859-1?Q?TZb3p6nwFkpkstKkIm3qRblDhJUSUnjr7jOGONVhLb/06VGwXu86f4xpOy?= =?iso-8859-1?Q?EhVbzzymAoWXbn27vI7v2UwZwLER9nyJ6VRhzu7mziNmf265eTMXe0aCth?= =?iso-8859-1?Q?umid/F3gOjB71+FYcguOGaZv0VpKyaQXo6HmxdLCfTiykaUw2gOtbaaPXi?= =?iso-8859-1?Q?udITkNHfZ6kHhG50HuwCe4VfExiXRxsR+qX/hpa8lw/80jMhaNRDg4bFvK?= =?iso-8859-1?Q?5OrqVQXGpS9bUQeQOhTUrRDMmZENltOvn+NGDuO6BjyPyex0an5oxRSduh?= =?iso-8859-1?Q?/maHgdz3W4wcAP17ZtbbsFrHelPM7W9ft/gnuQRrEe8n2Hz8TvI5TvOnln?= =?iso-8859-1?Q?a2iBejNMpmKN85e9Rbg2vdgdYsZZ2ueMrFMywjatO1F5lX+obKIoROMNwF?= =?iso-8859-1?Q?ldJRvVVsWhPakmAMN+i3z9zlqhlWRnqRsAhSNxGQ1Bg4Gs/Ud87hW4CzUq?= =?iso-8859-1?Q?tFrxmDNulM1vg6ZRoNcFqus+4Y57ufIn+v0AgI4aCQ/2dcM4jDSCA46Qoc?= =?iso-8859-1?Q?RAWf8ao3JJaPHAxe//SOwvGZBmAGFxBWcXzk8YA4E7oIXoAxYUC/XnOBAr?= =?iso-8859-1?Q?s=3D?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS2PR03MB10110.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?+tc3gGB1TudiHZXyz57+jTmkcCYhzZa+VEoGbyc0+d6lAmBL5nZs2q064r?= =?iso-8859-1?Q?rfHRyB6RzrlzuEFnnTfZr7IyLEoW9Pvvp0QQSwA5nUvIGyPVtVcq0KAmEz?= =?iso-8859-1?Q?CFwqsjwXPzJG0+gpantCeF9p/QS20YsMXHKyqDkREHit/CvBGnFm9Ky8bD?= =?iso-8859-1?Q?iJsgY13BE5ZynykuzoKKvCid4lNtTvhfIHsimrZyFz8s6dHu5VipYhq2y0?= =?iso-8859-1?Q?vV12rBjfXNseHNbrj6O9dHo2t56m6hKqhz+P84UUVWiTPDTvvZsuv6j7U4?= =?iso-8859-1?Q?3guz7KuFOpivZskdJlrepA03+DTDR8k4qokiHVzplHluAMm9nnYAU83odB?= =?iso-8859-1?Q?dnc2vp6LqnrRpPTWmfIsWETOKQhR15lwa7K3AsGozCug/XCwcTmbOCkYWy?= =?iso-8859-1?Q?nmNNPckEc1dRa4oKWeRLfVep3VWrzq8YRsMbnNaZiRq5OIT4TVG8hSMbFK?= =?iso-8859-1?Q?JsfftjrAvu1/uzN5+uIUkFrr/CnRBbWBCQihkUrazsrMmC4PrhwkOfeFN2?= =?iso-8859-1?Q?AwrxKKrFaUnVDC0QLyS/E3c7DAr8wfsntgV80dJuTKjrTwSMITemM55T0U?= =?iso-8859-1?Q?U0q4+i3AGzbH71y+fSn1rT5xp2yu+cx6//WribkwwjUkFZlBn4Ah57nZ4H?= =?iso-8859-1?Q?RHsSCmiBMn0awdqAaMNOJasjin+SZC8WJ2Napgn4sNk1/64RkyDlGt2cA9?= =?iso-8859-1?Q?14ds4xp3XNEjQpFZzNe4At7uMYkT7ybbDtEHmfNZlv0BbCBFYkVAif6Akr?= =?iso-8859-1?Q?T+ifFkUR/XMplAa2QMYUWzvbzQOkjGZRW/UpqPcLDwJjll4bJyqvs6S+4J?= =?iso-8859-1?Q?ijV/B44oVfrIQVfIO+aMCreO182WhVidlfUCrxpkxU5GppRIsERcnmeWTr?= =?iso-8859-1?Q?pSSwVbgdmBgO5tzEa1lbBmQ1C9iqt9Chh7Ng2uIuB+UdYlusntMsYMUk8N?= =?iso-8859-1?Q?cPtZdbYlCEMd67s/Ie/RrJZhF6mQWPM+w1RLIRpBby2lVx//DY0A5msv0b?= =?iso-8859-1?Q?IpLt72Eu34+Or8k/p7JTMv1x8hgLzGN4rowfVX9H9bJM0t5xzsT9prxd7Z?= =?iso-8859-1?Q?tkJsuGjXLNdptfN3dQotyrt4bc4Ta/fndSaR43ohyh/O4525P0hD+VeKal?= =?iso-8859-1?Q?mQcVDIt4Z4udPID+zh6uNNjpb0yw9Skl8wkLhF5Hk2OKfrxbGa2mGff3fb?= =?iso-8859-1?Q?Ec7BZt6Nnmb5nywpe8sXPQxuCTXCc77RO104aPUPIhqfvLOQuYboJfL6gH?= =?iso-8859-1?Q?Gt7chOXvuufggnHt7QyeCAtYj1b6JExt6RwmAfsinWPZrXDYhHHoWBvQJD?= =?iso-8859-1?Q?qXhAlaYklpEUhbqjDYMCl6k/oZGWhHfUSpXFXAVYKoLOoDq64u8Je5giFe?= =?iso-8859-1?Q?RB9jn194DswCvh0NPJVdmeQV7sVcm5W5nG50J6BWNk/v3/16bCibMX1hZX?= =?iso-8859-1?Q?i6JXr00rjseyHW8xgFinYks3TpBbIb73MBqLX3pGfRPXYNrX6avwojT+CR?= =?iso-8859-1?Q?rw2x2Nn4td7OpfLIO283hJ1TxWeXvhHgjKl2JeN6ZvI4z6gGqzi2tLxV04?= =?iso-8859-1?Q?CO7YAiOPvCxHyVPtn6QrKkHSLwC/Bb1iEyn+xomiswoG1iV5rrKS1x47R3?= =?iso-8859-1?Q?F48vMMNIHrlI/WaIfipor49K3uR0lBJR62k4b+Fln9bkv9kJCxP17wQQ?= =?iso-8859-1?Q?=3D=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: AS2PR03MB10110.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0c3f2554-32c2-42b0-28d2-08ddb93777f9 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jul 2025 07:10:03.3850 (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: Pkl5aUlsWZUDmpQfDQ2r5za29Y8dbiYqabdy+oulWx9X/cjRZMjZcwaxXg+7WYpVLCpJwTrtOOlCq2/iglYgZw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR03MB6651 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1751440239991116600 Content-Type: text/plain; charset="utf-8" From: Rahul Singh When ITS is enabled and PCI devices that are behind an SMMU generate an MSI interrupt, SMMU fault will be observed as there is currently no mapping in p2m table for the ITS translation register (GITS_TRANSLATER). A mapping is required in the iommu page tables so that the device can generate the MSI interrupt writing to the GITS_TRANSLATER register. The GITS_TRANSLATER register is a 32-bit register, and there is nothing else in a page containing it, so map that page. Add new host_addr parameter to vgic_v3_its_init_virtual to prepare the foundation for DomU MSI support where guest doorbell address can differ for the host's. Note that the 1:1 check in arm_iommu_map_page remains for now, as virtual ITSes are currently only created for hwdom where the doorbell mapping is always 1:1. Signed-off-by: Rahul Singh Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai Reviewed-by: Stefano Stabellini --- This patch was originally picked up from [1], and commit description loosely borrowed from [2]. Example SMMUv3 fault (qemu-system-aarch64 virt model), ITS base 0x8080000: (XEN) SMMUv3: /smmuv3@9050000: event 0x10 received: (XEN) SMMUv3: /smmuv3@9050000: 0x0000000800000010 (XEN) SMMUv3: /smmuv3@9050000: 0x0000008000000000 (XEN) SMMUv3: /smmuv3@9050000: 0x0000000008090040 (XEN) SMMUv3: /smmuv3@9050000: 0x0000000000000000 Example SMMUv2 fault (AMD/Xilinx Versal), ITS base 0xf9020000: (XEN) smmu: /axi/smmu@fd800000: Unhandled context fault: fsr=3D0x402, iova= =3D0xf9030040, fsynr=3D0x12, cb=3D0 v11->v12: * no changes v10->v11: * add Stefano's RB v9->v10: * map vITS doorbell to host ITS doorbell instead of always 1:1 * use simpler addr to dfn conversion v8->v9: * no changes v7->v8: * no changes v6->v7: * add tlb flush after mapping * style: update formatting * revert back to printk with XENLOG_G_ERR v5->v6: * switch to iommu_map() interface * fix page_count argument * style fixup * use gprintk instead of printk * add my Signed-off-by * move to vgic_v3_its_init_virtual() v4->v5: * new patch [1] https://lists.xenproject.org/archives/html/xen-devel/2023-07/msg00483.h= tml [2] https://gitlab.com/xen-project/people/bmarquis/xen-arm-poc/-/commit/623= 2a0d53377009bb7fbc3c3ab81d0153734be6b --- xen/arch/arm/vgic-v3-its.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c index c65c1dbf52..bc738614bb 100644 --- a/xen/arch/arm/vgic-v3-its.c +++ b/xen/arch/arm/vgic-v3-its.c @@ -1445,11 +1445,13 @@ static const struct mmio_handler_ops vgic_its_mmio_= handler =3D { }; =20 static int vgic_v3_its_init_virtual(struct domain *d, paddr_t guest_addr, + paddr_t host_addr, unsigned int devid_bits, unsigned int evid_bits) { struct virt_its *its; uint64_t base_attr; + paddr_t host_doorbell_addr =3D host_addr + ITS_DOORBELL_OFFSET; =20 its =3D xzalloc(struct virt_its); if ( !its ) @@ -1478,6 +1480,26 @@ static int vgic_v3_its_init_virtual(struct domain *d= , paddr_t guest_addr, =20 register_mmio_handler(d, &vgic_its_mmio_handler, guest_addr, SZ_64K, i= ts); =20 + if ( is_iommu_enabled(its->d) ) + { + mfn_t mfn =3D maddr_to_mfn(host_doorbell_addr); + unsigned int flush_flags =3D 0; + int ret =3D iommu_map(its->d, _dfn(PFN_DOWN(its->doorbell_address)= ), + mfn, 1, IOMMUF_writable, &flush_flags); + + if ( ret < 0 ) + { + printk(XENLOG_G_ERR + "GICv3: Map ITS translation register for %pd failed.\n= ", + its->d); + return ret; + } + + ret =3D iommu_iotlb_flush(its->d, _dfn(PFN_DOWN(its->doorbell_addr= ess)), 1, flush_flags); + if ( ret < 0 ) + return ret; + } + /* Register the virtual ITS to be able to clean it up later. */ list_add_tail(&its->vits_list, &d->arch.vgic.vits_list); =20 @@ -1522,7 +1544,7 @@ int vgic_v3_its_init_domain(struct domain *d) * base and thus doorbell address. * Use the same number of device ID and event ID bits as the h= ost. */ - ret =3D vgic_v3_its_init_virtual(d, hw_its->addr, + ret =3D vgic_v3_its_init_virtual(d, hw_its->addr, hw_its->addr, hw_its->devid_bits, hw_its->evid_bits); if ( ret ) --=20 2.34.1