From nobody Fri Oct 31 09:42:12 2025 Delivered-To: importer@patchew.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=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748252804; cv=pass; d=zohomail.com; s=zohoarc; b=PZ0bAFVqil4h6XxKGqhX1h+mFIxVxBcQ4BnnJnux2tRlJefW1H1WMt665tRcJxEp3aQyknTtIneh/+AE+LgZ1HfWvAdhRUjj0jomYfwfyas2XZbO+hO/c8qdGKLSbcwB+XpwuX0RgLf4xqXU4LatlOUvbEf/XJMZvNJ2PhYWNUM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748252804; 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=w2/1tROtTobp55suc1IUtXBV9vnatZqXAC4xP78p8Uo=; b=VyPc96SIjzbyiO85CNc9OFQuyx2ALOhgc68RQ3hAWal0JETqoISYyALb6woKB9p9dtsS1gpQPiggUttR/kAXK0isJDKnQrXQAw4NqgcTP3ZJm3nSUDD/XL/3ObKRNKGjgETohd3gRYC/nwJJZCffsfyl1l1gTjbT6+A739FQH2Y= 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=amd.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 1748252804536136.10812503752675; Mon, 26 May 2025 02:46:44 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997342.1378233 (Exim 4.92) (envelope-from ) id 1uJUPb-0003oZ-A4; Mon, 26 May 2025 09:46:27 +0000 Received: by outflank-mailman (output) from mailman id 997342.1378233; Mon, 26 May 2025 09:46:27 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPb-0003nm-4X; Mon, 26 May 2025 09:46:27 +0000 Received: by outflank-mailman (input) for mailman id 997342; Mon, 26 May 2025 09:46:26 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPa-0003hN-Kj for xen-devel@lists.xenproject.org; Mon, 26 May 2025 09:46:26 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on20625.outbound.protection.outlook.com [2a01:111:f403:2412::625]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 4869a737-3a16-11f0-b893-0df219b8e170; Mon, 26 May 2025 11:46:24 +0200 (CEST) Received: from MN2PR13CA0008.namprd13.prod.outlook.com (2603:10b6:208:160::21) by PH7PR12MB9101.namprd12.prod.outlook.com (2603:10b6:510:2f9::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.21; Mon, 26 May 2025 09:46:19 +0000 Received: from BL02EPF0001A105.namprd05.prod.outlook.com (2603:10b6:208:160:cafe::17) by MN2PR13CA0008.outlook.office365.com (2603:10b6:208:160::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.15 via Frontend Transport; Mon, 26 May 2025 09:46:18 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BL02EPF0001A105.mail.protection.outlook.com (10.167.241.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:18 +0000 Received: from cjq-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 26 May 2025 04:46:16 -0500 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: 4869a737-3a16-11f0-b893-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YwnjWgcs0IiU43Xwx6GaXKIyJcm42vMmljHS0dQXhOqykzWMTsBPLdfhrt/B3MMKudZbp2gRDR8UQ0Zj8H+rs+GWTXcJcOKYTGuRE/+/fTcNT7ayb7bG2S95yktbkLvSL0xA6lw8Ngdve8A2xxsKE58D1qBHmEFtfO6WGIksLQTM5+5PvqQ61Sa0WGvLkQux9r8c5K9BfSALCioj0uZQDpPASA1nO7ORs2raGC10rlPCAsV5rmc+k9gDhcXTrUx9/ycGeyAE1hfhgU9bpWTHvUr2P12mUgEn5FtNhgh3dc02wBadI4nqS2fFR/Sz+BjqELEu+BOx6s1dFMTWtbTQlw== 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=w2/1tROtTobp55suc1IUtXBV9vnatZqXAC4xP78p8Uo=; b=a7BPAM7QuG3ZNkBbSFqJjS4rT+ehjwhgDSrEEMjI+5IhTxWDkSwKg7U2UYT7e/xHoX6elWJ/gqiq6we5oI2FxAkqyMloBuiEUQPjXBLGoTDtff7VOs588cd0GxJ6tPGLY8bLJkW6Mtk4b//zXVvpxXdcKuHanrSqCtB8rcJWmIUM2wE0m0iBcarIo5zlBJ4F2rOka8TyOWmNB+HIEMc6b9xd95eVxIFBhVslAX1MYG/LzGsYflw7lJJP1n2BouJ9nOLN8Rx1BXtyE8OY+vk4WbNEJ32Qv2lBJA/cP2tUmB83q0ub9Z20bIQf1n1nvemXDo8KNzn3LPa6ngVFTK0yqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=w2/1tROtTobp55suc1IUtXBV9vnatZqXAC4xP78p8Uo=; b=1iGbNVhx9tlc9SJX9MNunw5XGeRXZpSn2PNOnbLjEI4bMTrrh26ssYQTDNmFSzMZjQFEtNfb2lWJzlNsKSji6FFnco9uQSvhHdSuNQ9lwpdv1BY6f4Jtj3wLaGwxZqrmhbd4kmbVJUbUdg8w3CKM0HSjwojC7hA83XQmb/JHbig= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; 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; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Jiqian Chen To: CC: Huang Rui , Jiqian Chen , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 01/10] vpci/header: Move emulating cap list logic into new function Date: Mon, 26 May 2025 17:45:50 +0800 Message-ID: <20250526094559.140423-2-Jiqian.Chen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250526094559.140423-1-Jiqian.Chen@amd.com> References: <20250526094559.140423-1-Jiqian.Chen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A105:EE_|PH7PR12MB9101:EE_ X-MS-Office365-Filtering-Correlation-Id: d653b429-c45c-4ab6-d0df-08dd9c3a29f3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cTRtUS9BYmorTDZzbVdkcGlHMFFWbHZyOEUwSEZTVVJJRUpiME5BMDBNWkdU?= =?utf-8?B?dDBUQ1IvQWdlYjMrbHZZQk9jSUFFUS9ROXpHWWFUM0dmUDhGTjQ4c1gyeFd1?= =?utf-8?B?TjhIZXpGZlVlcHltcjhHbUtRUlF3RFZ4c1Nic0NwTTF6K3RwT1IvbjlkaDky?= =?utf-8?B?S1hTNG1tdWY4L2lZSWs4QUxJTmVSb3Vkam9EbHpLblplMW16MVR1S3F2SnhC?= =?utf-8?B?SXVSU0pwQUJZMXJsZ1l6WkdXS09NemMrMEJZQkVzb0U4OGpzeHk4d3BzRUFH?= =?utf-8?B?M3NTQ3pZdzR3NWMxdVpEN24yQjFWakdxNnkrZmIvUmdaMEY3T3BObWNneUJa?= =?utf-8?B?NkVxcm1xRmxEVnlnMnRvcTI3ZlZTTVJvT2o4WE81MERjajhTVGtqb1VPZ01F?= =?utf-8?B?Umh0czRvMFhQelVTbjZMZG5Ha25IL29WbVRnd0tHUWdtVGUzME85ejZZUlZY?= =?utf-8?B?cHRaSGRUZmlMb0NDQm1UNzF6cDg1MnQwNmVzK25WM09zZzdLRng2TFlCRXls?= =?utf-8?B?QTdBZk0xS1Q0dktLSlU0VnVvSW8zdDIrWitCVEI5TXFkMnMrY2l6VzFvM2Rl?= =?utf-8?B?Z1JYM1RnWjJZT092YjFWcjNkYmhoMHp1ZEdTRnRPaUlxbU0wTHpkN0Rhb2JJ?= =?utf-8?B?UTZIS1N6SUtiZHF3Y2ovWVdtNC8zb3ZnZDN1RWE1aVJxSjdCbU5xVUx3UUdX?= =?utf-8?B?OUhBdnlFOHZQR2FhcE9QVWhQRTE5aWVJaW1DV0VHeVpic3dLWmxOTEpXTUVu?= =?utf-8?B?bFFXY2NMU1pwQXVPWU94TWFrVlgxTnR6aGkvTVhnaFJHSy9RUzJTMzRSWGJk?= =?utf-8?B?bklXQnNOaHNRdEdjVmJ6QjJ4WGJMYWxlNlE0S2E3anRSMEF4UmpOTnV6UjV6?= =?utf-8?B?SUtmWlBCR3lrSXQycDNpT3JXUGxqblVDUlFGUUNRRlBDV3VqZE9xTGFROFVm?= =?utf-8?B?NlZLZDhEc1RZcTRwcHd2UlQxTjczNnVZUEFGUzA2b2xiblhXQnNxU0QwbEk3?= =?utf-8?B?RUt6WGtROEtsYmpDSVhvNlh1SGdBcTRpNmMxSFdMbk5QSVo5RjVrSUVGeHBN?= =?utf-8?B?ZVFSblBJSWhNWWoxdUxkZGdOUklYcjM5b3lEdnRGclJXOXJUWTB4K2FGamFT?= =?utf-8?B?U2h4VXlnQU4yOFJWbnluYU9FM0lpUWcwcHI4ck5qZUVRZFZ3ZDFHWjREaXlX?= =?utf-8?B?ZCtLYXJwUDBpWDV5OUNVOFlLQWhSc2VXejE4WlJPbG1rUVBrUmo0YnpMMGx4?= =?utf-8?B?eFp3RXF3ZStIMStjWnp2WC9uNkVmbFRFS1hmQ1N4SWUxeTBHSm1OSkg3NDhU?= =?utf-8?B?M3lvNDYvR2tybGNuWVlvWXZEb1d1eExyK0laZlZGZTJzQ3p1cHVCaTRQMWJL?= =?utf-8?B?Q20yRU9vYWhqeHpsRVZ3L29mTmFmUjNPY215ZVJVaXBjcU1oeWE4TlI5OCs4?= =?utf-8?B?VHZLNEZHZnlBc1F4RmVNUVBqQVVBSTZ1QXBlZk1pYW9hNFpMN0xUd04rdTFm?= =?utf-8?B?RHJSMVE1ejliWlFSaTFIWmxQbDE0aGlVMFdKaVlNS1JXR3hhU0FMVVNuNGhT?= =?utf-8?B?UUhVT2kxK3NwUlYrWjJ3SzN6L25yL2RSbjBtNFVmMEtXZE1udFYvemxIeC9Z?= =?utf-8?B?c0IxK1kyWnFQbTFUVTJRQ1F6QmlkQ2lIV24yamV3WjNJUnhvK0pHalN1bkQ3?= =?utf-8?B?QUlmMU1XRUMxcjBMR0dvVGxHbi9Hc1I4dTZKcjdrT3RXaU93N1NjZjdPR0FN?= =?utf-8?B?U05QaVRGV2RvYy9YcnlKd0xYblpRUjZwMUF2VSttUHgyQTh3aHdIV1BFaEhk?= =?utf-8?B?WWROUzg1QmlpaE5KaWxRSmFTNStIYWRQakFIczVzVkQ4SVFybmF6SXNKMWkw?= =?utf-8?B?RW42TUF4dFYvVU5udmlwUnUzczFQbGZJQmkyaVA5UWFJVU8zNGNCeWV3Ym90?= =?utf-8?B?MGN2am5zN1pNbVpodUl2Rlhub2VuYXoxWnRFZVJzNzlTQ3FWSDVGYWMxNU1R?= =?utf-8?B?bEora2xSSE43R3NxYTNIMEkyM21tY1JzR0RJdEtHZVpldThYU0xYeFhMenlx?= =?utf-8?Q?CGjnDg?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(82310400026)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2025 09:46:18.1910 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d653b429-c45c-4ab6-d0df-08dd9c3a29f3 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A105.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB9101 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748252806033116600 No functional changes. Follow-on changes will benifit from this. Signed-off-by: Jiqian Chen Acked-by: Roger Pau Monn=C3=A9 --- cc: "Roger Pau Monn=C3=A9" --- v4->v5 changes: No. v3->v4 changes: * Add Acked-by of Roger. v2->v3 changes: new patch. Best regards, Jiqian Chen. --- xen/drivers/vpci/header.c | 138 ++++++++++++++++++++------------------ 1 file changed, 73 insertions(+), 65 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 1f48f2aac64e..0fb3cfa6a376 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -754,6 +754,75 @@ static int bar_add_rangeset(const struct pci_dev *pdev= , struct vpci_bar *bar, return !bar->mem ? -ENOMEM : 0; } =20 +static int vpci_init_capability_list(struct pci_dev *pdev) +{ + int rc; + bool mask_cap_list =3D false; + + if ( !is_hardware_domain(pdev->domain) && + pci_conf_read16(pdev->sbdf, PCI_STATUS) & PCI_STATUS_CAP_LIST ) + { + /* Only expose capabilities to the guest that vPCI can handle. */ + unsigned int next, ttl =3D 48; + static const unsigned int supported_caps[] =3D { + PCI_CAP_ID_MSI, + PCI_CAP_ID_MSIX, + }; + + next =3D pci_find_next_cap_ttl(pdev->sbdf, PCI_CAPABILITY_LIST, + supported_caps, + ARRAY_SIZE(supported_caps), &ttl); + + rc =3D vpci_add_register(pdev->vpci, vpci_read_val, NULL, + PCI_CAPABILITY_LIST, 1, + (void *)(uintptr_t)next); + if ( rc ) + return rc; + + next &=3D ~3; + + if ( !next ) + /* + * If we don't have any supported capabilities to expose to the + * guest, mask the PCI_STATUS_CAP_LIST bit in the status + * register. + */ + mask_cap_list =3D true; + + while ( next && ttl ) + { + unsigned int pos =3D next; + + next =3D pci_find_next_cap_ttl(pdev->sbdf, + pos + PCI_CAP_LIST_NEXT, + supported_caps, + ARRAY_SIZE(supported_caps), &ttl); + + rc =3D vpci_add_register(pdev->vpci, vpci_hw_read8, NULL, + pos + PCI_CAP_LIST_ID, 1, NULL); + if ( rc ) + return rc; + + rc =3D vpci_add_register(pdev->vpci, vpci_read_val, NULL, + pos + PCI_CAP_LIST_NEXT, 1, + (void *)(uintptr_t)next); + if ( rc ) + return rc; + + next &=3D ~3; + } + } + + /* Utilize rsvdp_mask to hide PCI_STATUS_CAP_LIST from the guest. */ + return vpci_add_register_mask(pdev->vpci, vpci_hw_read16, vpci_hw_writ= e16, + PCI_STATUS, 2, NULL, + PCI_STATUS_RO_MASK & + ~(mask_cap_list ? PCI_STATUS_CAP_LIST = : 0), + PCI_STATUS_RW1C_MASK, + mask_cap_list ? PCI_STATUS_CAP_LIST : 0, + PCI_STATUS_RSVDZ_MASK); +} + static int cf_check init_header(struct pci_dev *pdev) { uint16_t cmd; @@ -762,7 +831,6 @@ static int cf_check init_header(struct pci_dev *pdev) struct vpci_header *header =3D &pdev->vpci->header; struct vpci_bar *bars =3D header->bars; int rc; - bool mask_cap_list =3D false; bool is_hwdom =3D is_hardware_domain(pdev->domain); =20 ASSERT(rw_is_write_locked(&pdev->domain->pci_lock)); @@ -803,61 +871,12 @@ static int cf_check init_header(struct pci_dev *pdev) if ( rc ) return rc; =20 + rc =3D vpci_init_capability_list(pdev); + if ( rc ) + return rc; + if ( !is_hwdom ) { - if ( pci_conf_read16(pdev->sbdf, PCI_STATUS) & PCI_STATUS_CAP_LIST= ) - { - /* Only expose capabilities to the guest that vPCI can handle.= */ - unsigned int next, ttl =3D 48; - static const unsigned int supported_caps[] =3D { - PCI_CAP_ID_MSI, - PCI_CAP_ID_MSIX, - }; - - next =3D pci_find_next_cap_ttl(pdev->sbdf, PCI_CAPABILITY_LIST, - supported_caps, - ARRAY_SIZE(supported_caps), &ttl); - - rc =3D vpci_add_register(pdev->vpci, vpci_read_val, NULL, - PCI_CAPABILITY_LIST, 1, - (void *)(uintptr_t)next); - if ( rc ) - return rc; - - next &=3D ~3; - - if ( !next ) - /* - * If we don't have any supported capabilities to expose t= o the - * guest, mask the PCI_STATUS_CAP_LIST bit in the status - * register. - */ - mask_cap_list =3D true; - - while ( next && ttl ) - { - unsigned int pos =3D next; - - next =3D pci_find_next_cap_ttl(pdev->sbdf, - pos + PCI_CAP_LIST_NEXT, - supported_caps, - ARRAY_SIZE(supported_caps), &= ttl); - - rc =3D vpci_add_register(pdev->vpci, vpci_hw_read8, NULL, - pos + PCI_CAP_LIST_ID, 1, NULL); - if ( rc ) - return rc; - - rc =3D vpci_add_register(pdev->vpci, vpci_read_val, NULL, - pos + PCI_CAP_LIST_NEXT, 1, - (void *)(uintptr_t)next); - if ( rc ) - return rc; - - next &=3D ~3; - } - } - /* Extended capabilities read as zero, write ignore */ rc =3D vpci_add_register(pdev->vpci, vpci_read_val, NULL, 0x100, 4, (void *)0); @@ -865,17 +884,6 @@ static int cf_check init_header(struct pci_dev *pdev) return rc; } =20 - /* Utilize rsvdp_mask to hide PCI_STATUS_CAP_LIST from the guest. */ - rc =3D vpci_add_register_mask(pdev->vpci, vpci_hw_read16, vpci_hw_writ= e16, - PCI_STATUS, 2, NULL, - PCI_STATUS_RO_MASK & - ~(mask_cap_list ? PCI_STATUS_CAP_LIST = : 0), - PCI_STATUS_RW1C_MASK, - mask_cap_list ? PCI_STATUS_CAP_LIST : 0, - PCI_STATUS_RSVDZ_MASK); - if ( rc ) - return rc; - if ( pdev->ignore_bars ) return 0; =20 --=20 2.34.1 From nobody Fri Oct 31 09:42:12 2025 Delivered-To: importer@patchew.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=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748252813; cv=pass; d=zohomail.com; s=zohoarc; b=cAR2bpo56cNitYTpuimalFZpTcA6CBBBLDy09cGbSSclcI2624p2K0KAVXaNZ1kjHmUPEPlLel0x1iKtQGKpzACTL980oTaQCxCEk/dwf8gqrCalYfFmA0KpTCTbuJfgL1fbi4ShooKjwmuju/ZyNxzx3WgE6u+Xa79lHcnH2qE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748252813; 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=GuyCxUQ97UVFVG8LWs3GMa6eIbl8t+L0KXIZRR7uPyI=; b=m/QH5gbnuaEBP80/orWwQDSiMK4uuYZUEs6+mEhQcjDBYPj8VxbPAWhD/0btFxsCZzhvg67noMtSdzItcmklETQC3zjKadPlW7lwZCEm76t46XTs8IfYvQs0u5aVF1z2+tEdd2uXCW/MYmoWYxiep8XC2enSYzsNJYb+YmKrYfU= 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=amd.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 1748252813417108.24327088507903; Mon, 26 May 2025 02:46:53 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997343.1378246 (Exim 4.92) (envelope-from ) id 1uJUPc-000492-EZ; Mon, 26 May 2025 09:46:28 +0000 Received: by outflank-mailman (output) from mailman id 997343.1378246; Mon, 26 May 2025 09:46:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPc-00048v-BO; Mon, 26 May 2025 09:46:28 +0000 Received: by outflank-mailman (input) for mailman id 997343; Mon, 26 May 2025 09:46:27 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPb-0003hN-9K for xen-devel@lists.xenproject.org; Mon, 26 May 2025 09:46:27 +0000 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on20624.outbound.protection.outlook.com [2a01:111:f403:200a::624]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 492600b0-3a16-11f0-b893-0df219b8e170; Mon, 26 May 2025 11:46:25 +0200 (CEST) Received: from MN2PR15CA0043.namprd15.prod.outlook.com (2603:10b6:208:237::12) by DS0PR12MB7993.namprd12.prod.outlook.com (2603:10b6:8:14b::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.30; Mon, 26 May 2025 09:46:20 +0000 Received: from BL02EPF0001A108.namprd05.prod.outlook.com (2603:10b6:208:237:cafe::cf) by MN2PR15CA0043.outlook.office365.com (2603:10b6:208:237::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8746.30 via Frontend Transport; Mon, 26 May 2025 09:46:20 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BL02EPF0001A108.mail.protection.outlook.com (10.167.241.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:19 +0000 Received: from cjq-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 26 May 2025 04:46:18 -0500 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: 492600b0-3a16-11f0-b893-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lW2van0nJzyJr+30QYBsW2ppzr1OfdkFN+PnI92ub2b3MO2Rdo6vbMINEKV8ayCI+yh77ZtitmMD/0Prc8EIEQIG3yVxs4uRL23Mw8AwUljVPSgI+sqMxC5LYPnlRl2NaoLJcUFBamsKWpDQqZztowePF2W7iBNhUh6d+QeBnpvi+L6QO9wdRGJ/y5HKuGhoWvJCrhdqYE3clevKxahaxzSXBRiNEaHiTmg+Nwuo1mTee6zYBJsoUVpqDr8zDinTnRdAR7uEcyyK07wWNN6BkzFkLBg4fAXpKFlzFz6QW+bX4vxg5+JIAbZ1oNA3egxsoTHEm9i8ABc76U2XrU3bFA== 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=GuyCxUQ97UVFVG8LWs3GMa6eIbl8t+L0KXIZRR7uPyI=; b=IUy10aRIfGX1fsFNSGR3GqmZenhqVddvsx4F2i84JCNN92sKkfov+Kh5NmboLJnL69dSFzEIZRjcjI5bQzgLn13AFmW4ysU7mQLCaPGJojRUQIZo3updO/PUr8oj/VpgnSByZFl7QVod8uqRhZOvhHpki9dwZEmOJweJpRNNecAvF9lOSI7ldPpaXS47HVo7SmWbw2I1yx4cXs6DV7J7YCefA8Ky4sHLhxS2dgu1YV0ZWKgN1LiBK09iSrDcOUXmZEAffTJMsVoULbI676HI7VcqN6LEIpT15pdmOvXTOA12BeE84wrvS+tkzu78aDhUjDBPnZ7t9tl5CJmU8YNZvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GuyCxUQ97UVFVG8LWs3GMa6eIbl8t+L0KXIZRR7uPyI=; b=xyh9NU1ml5gug9mbuxLeklfCpugp+E9hY4nCKuqmZX3bcAmuecyjA9o9fIACGh+6j/zaNcJkE7G/wKoX/sP4OpHa4DIwd2EXUsy5BxBE5L+Clybk2TmvcoBAA20inlpurIYdhjytEAGhSaA5xjidG1kmmXMKE4cYgkuXOrjZNAY= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; 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; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Jiqian Chen To: CC: Huang Rui , Jiqian Chen , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 02/10] vpci/header: Emulate legacy capability list for dom0 Date: Mon, 26 May 2025 17:45:51 +0800 Message-ID: <20250526094559.140423-3-Jiqian.Chen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250526094559.140423-1-Jiqian.Chen@amd.com> References: <20250526094559.140423-1-Jiqian.Chen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A108:EE_|DS0PR12MB7993:EE_ X-MS-Office365-Filtering-Correlation-Id: ba72d00d-6046-4b9e-64c2-08dd9c3a2ae5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?OU5semlvVFBlZmFGOVp2bWlTMkd6VHVMZjYxamM1MXJTdXNLQytBaE9vRWVt?= =?utf-8?B?dDc5Z1RqMVZNd3pYWnN3cFR1a1ljMHBKMXlBMjlwR25pd3haZFZVK0JraUp4?= =?utf-8?B?akxTM3IxZGdKZG92Tmh4LzV1NkxKRWdjVGNjd1lrbGNpMXRBUWxMVFFrMFh2?= =?utf-8?B?bjlReGlwSnJJajYzTHE0QmtvU2NmZkw2NHp3S3U0b1hPYkZTamVLR2dKbzIr?= =?utf-8?B?VS9QMlFmamlXbVRkWm92LzEvSEFzWjJyTmJWTk1QcVlSTmF6M3ZMZm1qWFgz?= =?utf-8?B?ZE5tK2JCV242SjZWNVFBQlFFRUJVa09DWk5ybS9iejdIWjBMRkorU3h2bGRx?= =?utf-8?B?Rmg4OGFUTFpTTVZpZUdlMlkrS2Jlb3FKRHh5QldmZnhYa1dmd2M3NVA0N01S?= =?utf-8?B?VHgva3ZxVy8vMnpzT3BxMkQ4emltTXNpNjE0UDdrcG9sRW9FbWtXTUZacUc5?= =?utf-8?B?bGZnL044ODdDTjlPUEZCQS8xOXNqemgrNlZieDBTYWFoRGZsQU1POFVHUHlh?= =?utf-8?B?bUNNL2huY0FBWXJDUkNvVnlESWVSUWtDTnVKUzQ0dEJlVEdQYXQ2dHJrV0ht?= =?utf-8?B?MVkxWjZVWk1Sc3I3czFwSXpweW9JaWQ2QjhPUWJVMEZQeDV5YVNydEF2aVRx?= =?utf-8?B?cElGZnVoM3NORTdOZ2RhMHdmR0dQQXRnam1TRWZKY2xCTXJvZGN6NGpEYkha?= =?utf-8?B?RG04b2NtMDU2RS9KYnlkNEJySHRleHh5eTV1OWxuVlNKb0F5QXo0UmlEY3JU?= =?utf-8?B?UUU1OS81SmdJNVl0aTEzVjV1RmZXM0tvQWV2YjZ5TVhhelprRHBaRFpNMGFB?= =?utf-8?B?UDZMakFFV1VLMGRhNHNqaXEyODhxZE5wS09mOUZYcWtxNWw3MHhVNTNlV3M3?= =?utf-8?B?U2RBSjFKMUpTYWVTc0J6N2wybTNQSThMMEU2OXpXTGFCRkpMa2JBUTZ3a0h1?= =?utf-8?B?Q3JNaFMrL2xTblNKUHVsQmZuMlUxWmptVE5EV2pKM01HTGJuUUFCY0U1YjJl?= =?utf-8?B?QUFRQWxMVzBjZStCNzBWWkZocGZLbmN5VjVBUUpBQWZsY0NiY1d2ZVhVNk16?= =?utf-8?B?SXJMeUVOa0VDNE1OSFplcjYwaHo1bjl3STRHREFZSXpOV1c0eE5JNSs4YkR5?= =?utf-8?B?Zjl5eWdpaC9VemU4WjViSmhyclVZb2ViZ0NpMW1XaGlQTldPQ3VHZ1dqMGpK?= =?utf-8?B?ZDBkVDFqb3F6QXE3Rk93UXlQSUUwNkozcW1CbjA3dTFwd2JPcUVNbC9TTE14?= =?utf-8?B?OXJHeTdYVjVzNGdBZGtmRC9xWXF4VWRhZERXUjlqUjhxYmFmUzFYZVQ3OG9R?= =?utf-8?B?V2hWNk4rR0cwcjJtWHM5YW4xQnIwWTlzY2NyYkdTMEgxYi9UaS9qWTN2M2pQ?= =?utf-8?B?bkxBczdiWGd2UDNQUEZQVG5yVC9WTGtkRzNuamc3SGFPK3NPT1RvdEZjRzZj?= =?utf-8?B?Qmd6b0pTdFBya0gycmNtRnNvaEtGOWxsY25idkJlRFRuZjZ5aE01aGZWTXdv?= =?utf-8?B?dTBaQ2ovOFZ1SVdQSkFUMlNjNnBPQnJsaEUySVNHNUFjTEo1aThWVVdxZ2pQ?= =?utf-8?B?Zk44UFhOWWFwT1NxaGtqUm9zY0FhSWdsRVV6cWc1T0ZNdzRBMk82QnZIY29V?= =?utf-8?B?YjhDUWl4bFZIY1c3Zk0zbjNjbXFRbVc5N1pFS25vTndxbkJGYlc1amdibnNE?= =?utf-8?B?TGpuT0liZkZWalhUVktwampxM2kwTXdkQlZTWlR6ZmRxVm5aNWY4VjlmNjNC?= =?utf-8?B?b2IrTVl3c3k3VnlNOFdFSmdhZzYzcVlXK3AzR1BXRW5lNVVKRTFwcjFrN1R2?= =?utf-8?B?NTdWNnVuVzJkWmFleGdjZEsvelRwTjhYeDZzVmV4eDhWbEZUOEVpUVRsM0Nl?= =?utf-8?B?QTd1eWNWVXV4My9uRVhSZWE3Z0NOUDFMWm9aNmtoRnc3bmk1dEhmT1Jrd3Ns?= =?utf-8?B?ZE5qeXVRWThVOE41M0gvOENtRFNJOE4vZDduVEVsc2Fld0p5Y241T2ZWSnJm?= =?utf-8?B?QlRKMWh0NmJMY1Vsc0R1QW1TbG93QkIvcFBlWkd5ZmJ1RkxPc0lIMjFINmhP?= =?utf-8?Q?HHNVSR?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(82310400026)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2025 09:46:19.7747 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ba72d00d-6046-4b9e-64c2-08dd9c3a2ae5 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A108.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB7993 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748252814434116600 Current logic of emulating legacy capability list is only for domU. So, expand it to emulate for dom0 too. Then it will be easy to hide a capability whose initialization fails in a function. And restrict adding PCI_STATUS register only for domU since dom0 has no limitation to access that register. Signed-off-by: Jiqian Chen Reviewed-by: Roger Pau Monn=C3=A9 --- cc: "Roger Pau Monn=C3=A9" --- v4->v5 changes: * Return early if dom0, so that I didn't need to change the exiting return = chunk. v3->v4 changes: * Also pass supported_caps to pci_find_next_cap_ttl() for dom0 since the n = is zero when dom0, and add a comment to explain it. * Restrict adding PCI_STATUS register only for domU since dom0 has no limit= ation to access that register. * For dom0 register handler, set vpci_hw_write8 to it instead of NULL. v2->v3 changes: * Not to add handler of PCI_CAP_LIST_ID when domain is dom0. v1->v2 changes: new patch. Best regards, Jiqian Chen. --- xen/drivers/vpci/header.c | 39 ++++++++++++++++++++++++++------------- xen/drivers/vpci/vpci.c | 6 ++++++ xen/include/xen/vpci.h | 2 ++ 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 0fb3cfa6a376..d26cbba08ee1 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -758,9 +758,9 @@ static int vpci_init_capability_list(struct pci_dev *pd= ev) { int rc; bool mask_cap_list =3D false; + bool is_hwdom =3D is_hardware_domain(pdev->domain); =20 - if ( !is_hardware_domain(pdev->domain) && - pci_conf_read16(pdev->sbdf, PCI_STATUS) & PCI_STATUS_CAP_LIST ) + if ( pci_conf_read16(pdev->sbdf, PCI_STATUS) & PCI_STATUS_CAP_LIST ) { /* Only expose capabilities to the guest that vPCI can handle. */ unsigned int next, ttl =3D 48; @@ -768,12 +768,18 @@ static int vpci_init_capability_list(struct pci_dev *= pdev) PCI_CAP_ID_MSI, PCI_CAP_ID_MSIX, }; + /* + * For dom0, we should expose all capabilities instead of a fixed + * capabilities array, so setting n to 0 here is to get the next + * capability position directly in pci_find_next_cap_ttl. + */ + const unsigned int n =3D is_hwdom ? 0 : ARRAY_SIZE(supported_caps); =20 next =3D pci_find_next_cap_ttl(pdev->sbdf, PCI_CAPABILITY_LIST, - supported_caps, - ARRAY_SIZE(supported_caps), &ttl); + supported_caps, n, &ttl); =20 - rc =3D vpci_add_register(pdev->vpci, vpci_read_val, NULL, + rc =3D vpci_add_register(pdev->vpci, vpci_read_val, + is_hwdom ? vpci_hw_write8 : NULL, PCI_CAPABILITY_LIST, 1, (void *)(uintptr_t)next); if ( rc ) @@ -781,7 +787,7 @@ static int vpci_init_capability_list(struct pci_dev *pd= ev) =20 next &=3D ~3; =20 - if ( !next ) + if ( !next && !is_hwdom ) /* * If we don't have any supported capabilities to expose to the * guest, mask the PCI_STATUS_CAP_LIST bit in the status @@ -795,15 +801,18 @@ static int vpci_init_capability_list(struct pci_dev *= pdev) =20 next =3D pci_find_next_cap_ttl(pdev->sbdf, pos + PCI_CAP_LIST_NEXT, - supported_caps, - ARRAY_SIZE(supported_caps), &ttl); + supported_caps, n, &ttl); =20 - rc =3D vpci_add_register(pdev->vpci, vpci_hw_read8, NULL, - pos + PCI_CAP_LIST_ID, 1, NULL); - if ( rc ) - return rc; + if ( !is_hwdom ) + { + rc =3D vpci_add_register(pdev->vpci, vpci_hw_read8, NULL, + pos + PCI_CAP_LIST_ID, 1, NULL); + if ( rc ) + return rc; + } =20 - rc =3D vpci_add_register(pdev->vpci, vpci_read_val, NULL, + rc =3D vpci_add_register(pdev->vpci, vpci_read_val, + is_hwdom ? vpci_hw_write8 : NULL, pos + PCI_CAP_LIST_NEXT, 1, (void *)(uintptr_t)next); if ( rc ) @@ -813,6 +822,10 @@ static int vpci_init_capability_list(struct pci_dev *p= dev) } } =20 + /* Return early for the hw domain, no masking of PCI_STATUS. */ + if ( is_hwdom ) + return 0; + /* Utilize rsvdp_mask to hide PCI_STATUS_CAP_LIST from the guest. */ return vpci_add_register_mask(pdev->vpci, vpci_hw_read16, vpci_hw_writ= e16, PCI_STATUS, 2, NULL, diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index d2f0f97e0a04..09988f04c27c 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -255,6 +255,12 @@ uint32_t cf_check vpci_hw_read32( return pci_conf_read32(pdev->sbdf, reg); } =20 +void cf_check vpci_hw_write8( + const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data) +{ + pci_conf_write8(pdev->sbdf, reg, val); +} + void cf_check vpci_hw_write16( const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data) { diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index 475981cb8155..fc8d5b470b0b 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -76,6 +76,8 @@ uint32_t cf_check vpci_hw_read16( const struct pci_dev *pdev, unsigned int reg, void *data); uint32_t cf_check vpci_hw_read32( const struct pci_dev *pdev, unsigned int reg, void *data); +void cf_check vpci_hw_write8( + const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data= ); void cf_check vpci_hw_write16( const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data= ); =20 --=20 2.34.1 From nobody Fri Oct 31 09:42:12 2025 Delivered-To: importer@patchew.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=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748252808; cv=pass; d=zohomail.com; s=zohoarc; b=SUlqggwcjSSxDNjJxvXs2QcJoklI+i6u0ZyYDdF0GNoXzbb16yPfeIA7B6Kdv7IcmF2gc4i8vR4OJ25mGEKb5Me1U0DLeV89cOWL2Q/wpLYrd7jqEXApM3lFfEOH8RAAhG1u6EbTT2HJKPGdOsEIEdmnuAaAUTN8sAqyNb1WqKs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748252808; 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=KgWjqDD6QFXmhNcGRKv57wsy+lqnZUw9leCF2c/u6zQ=; b=OEF6OuFaKb2sLVRnUXLrU9ulDB4cae8maEq/G3T9S197xFD3XG+8bL8CeL8kGF+qn5i91/ISaezV2cxJBDiF2y3c1sMPwN3u5GJDrlNM6owcB+nJeurMQjjrfHgy1D1zA36U/GM92z8GINBMiNDb0GRQ0s1osBCTUfB0WUWkdgU= 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=amd.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 1748252808139677.4975212848439; Mon, 26 May 2025 02:46:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997344.1378256 (Exim 4.92) (envelope-from ) id 1uJUPe-0004OT-Rm; Mon, 26 May 2025 09:46:30 +0000 Received: by outflank-mailman (output) from mailman id 997344.1378256; Mon, 26 May 2025 09:46:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPe-0004OM-O5; Mon, 26 May 2025 09:46:30 +0000 Received: by outflank-mailman (input) for mailman id 997344; Mon, 26 May 2025 09:46:29 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPd-0003hN-Nf for xen-devel@lists.xenproject.org; Mon, 26 May 2025 09:46:29 +0000 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2060a.outbound.protection.outlook.com [2a01:111:f403:2405::60a]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 4ae3034e-3a16-11f0-b893-0df219b8e170; Mon, 26 May 2025 11:46:28 +0200 (CEST) Received: from MN0P222CA0021.NAMP222.PROD.OUTLOOK.COM (2603:10b6:208:531::28) by PH0PR12MB7790.namprd12.prod.outlook.com (2603:10b6:510:289::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.20; Mon, 26 May 2025 09:46:21 +0000 Received: from BL02EPF0001A101.namprd05.prod.outlook.com (2603:10b6:208:531:cafe::aa) by MN0P222CA0021.outlook.office365.com (2603:10b6:208:531::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.19 via Frontend Transport; Mon, 26 May 2025 09:46:21 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BL02EPF0001A101.mail.protection.outlook.com (10.167.241.132) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:21 +0000 Received: from cjq-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 26 May 2025 04:46:19 -0500 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: 4ae3034e-3a16-11f0-b893-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lx6W9cl9NxFVafl8qTeA616ClSSeFeb92H8/IILu1F8ZAohB4AuOrQbUTZXNaj21+Jb3RUuy0mjIFb1rTr+W0JRcgu3ZQoEJqdPC40J2l3OYz3WtgaM9PE+gMY4bzyezCVCiuc4hRiabr0J5CtnthzcQtBuNPAeVlqhDphgpPePuwL6dTHtRlk5K9mgUTSTF8vUHJlaZ7rEoCOSgQpdaWTTgFIPvKrGWiP7Is7sQoILtZg0hQ6ylRVlV3K9n1XIZHqOWFUntnW+VBA2qIoB78XxvXJHpNwJceeqs6t98z345yAqdfEYkkVyKC0WeDsNpUHJgeGgCbEVfXFmarvPnEQ== 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=KgWjqDD6QFXmhNcGRKv57wsy+lqnZUw9leCF2c/u6zQ=; b=dZIPHM89afK0nXY8JmNRrBMCIsAPXFVmj/SOYVERzB7sIigkP/WnFICmszTLEXO/qK3HHgl1fTx2cn0te9OIa5xMqMfFQviIAq2fqJefIbaZLF4ldgAh7KVCSrXseBwgrvvPJnjxIATIqdIcZDaygsbzbqCDgrUSLiECijO3YTkAZN/P05+0/IqxmqYF4mKFitG5Ss+wSQNF/+Ha6rxSa3/5zP+UpHAuN9Z9EjX1AuL9LQQ6bgWPElwqlSE3ExprsXhaGdqH7ikdTtCBJ4+oFLGYXks+LHqNGczO4SBVlsO5MmhVee+iSFyzUyTQ4sPVhEoZMoAQwAKglsznalKLcQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KgWjqDD6QFXmhNcGRKv57wsy+lqnZUw9leCF2c/u6zQ=; b=Xu/YN7pKpzc6waIL9u+D3+WxzubgRKyA3PTeVA2h12uS6zq2Wra713eLIkXtydoiM999Wmf+mfACzmNIjaDVx46SpJrpDtUtf1OKjdWZEEjChfdHZWkFv2RV4CPZa8g3+CIWfbOFGe9ssNPGyBgJcag+WHGjW7hbT9TeAYa2fEw= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; 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; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Jiqian Chen To: CC: Huang Rui , Jiqian Chen , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 03/10] vpci/header: Emulate extended capability list for dom0 Date: Mon, 26 May 2025 17:45:52 +0800 Message-ID: <20250526094559.140423-4-Jiqian.Chen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250526094559.140423-1-Jiqian.Chen@amd.com> References: <20250526094559.140423-1-Jiqian.Chen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A101:EE_|PH0PR12MB7790:EE_ X-MS-Office365-Filtering-Correlation-Id: 3cbac272-2ad3-45d2-ba38-08dd9c3a2bd9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VVdGTHVFaG5JbEliK1NxZndBZ1pZeGIxQVpISWlDdDJxNTNHU3lOUU0xMVFr?= =?utf-8?B?WS95M2FLRVZVM2ZvNmlyYy93dHg3TDJnYzhZRXNkMmxCOHJITUI3OEd0ODFR?= =?utf-8?B?ZnJpbWxVWDcwd3NVYmdCcGdpd0l0RGM0TnFDZmNkMG1yYTFyMURQaFJITVRV?= =?utf-8?B?MEx3ckNJcGliMWZKQ0xpZitIYVMza2ozS2FIUlZTYVdqcVpCSk82Z1ZmUXFH?= =?utf-8?B?TllEa2x0NWc1VllyRGlQcUk2Z0RKNGtZbVQ1U1FOUW9vS0hjTDhHUW41bXNM?= =?utf-8?B?SUJSaGlvQUlkWnNLQXVIQW1xSVdMZnNONW9TVlVxTUU3YkJmcGdwMlBDUnFG?= =?utf-8?B?aVQvWDd0UVExeEpXcnA4S1N5OWRpanhJaWpwNUgxQnNhY2s0MEhOUWZwS0p0?= =?utf-8?B?V01XM083NlhUMWtQT2phN3lyR0Y3RjBmbFJMaVFqcWlKK2xtazNNOTJWYVQy?= =?utf-8?B?T1poeDlkd2cyQU41QzdjdVdXQ2dGeTJmZENqOGFQcUdPZmI0ZzNBZVN1eVh2?= =?utf-8?B?MVo0dGdlRms5UGE4N0VCK3RnRzM5NUlNRi9xWUVyVGxDbVBrNEJHYmJ1RDBw?= =?utf-8?B?R0wxZGNJSXdsczg1eksvOXBxdklERXJUU1dzZ012Z0svWGtVbHNXNDhNeDVa?= =?utf-8?B?SzNicVlncjcwOFNRZVdONFFmSDV0d0RIOU5CaVdreXlCYTJ1M3BPOVFQdXRK?= =?utf-8?B?MWJmZkxlUFpiZ2RuN3lZRXVrRmY1UFR0Ty9kaTVtVlN6c29PRGYxakpxWXYz?= =?utf-8?B?YndvcityNmt0eGd5ck9zaVlGb0tBZGpESVNtWmJaN3k4b2lVVGJWOWhrRHE4?= =?utf-8?B?bjQ1azZpTkNZN0RzZWduMDlxRGJSSVpsSy85Mk5KdWUwb1dlY1VTUXdyQWtl?= =?utf-8?B?anBVWm5zTnJVd0E4OGp5ak5aRDFOZnF3R1VuT3VwaU1yVTBBSWtlaHZrckVt?= =?utf-8?B?Y05ubThGY0ZCOVFkTGs0VjBPeDRhS0o5anRSbENnRnhDRDVvMXlRVnZUQnoz?= =?utf-8?B?ZkVIK29yS1VKeno2QUdOVzg3Rm5QM1hqZ2d5MEtzQ1BhS0xlb2NkYm9xQlZG?= =?utf-8?B?MHlJT04walBGTGFwcXZCYjI5SUVRM2tuVzFMbjZXZVBSUVcyOUE0dXlhYWVE?= =?utf-8?B?cjVYUUY4UjRqM1pnMHJJcmxsdXVKRDRlTlFvckdyRWRuMU5Wd3pNR1d1VEt1?= =?utf-8?B?MlNrb20vTyszaFN0aXFiWC9tK2U4UGEwdXcyOFZkemN2N28zU0hvQkwzQ0RQ?= =?utf-8?B?Y3NsSjloTEpXNUNqSWRGNXVjUCtWR1RZcFpuSzFrcG5aeFM0ZDVlTGJKc2ND?= =?utf-8?B?cHp3T2JndUR0TW9aNXNpVi9XYXN1NzBGTHIrK0lpSmg5Rk85a2ZQQkdDVzM5?= =?utf-8?B?dE81a0pYc2ZadVdGVjZneXRYUGtxYmE4OFFnQ3Q3VVQ1MHRlNGtmM202Rmk0?= =?utf-8?B?dWQwdGY3Q2tOMVZtR2hHOExFZmlteVpQd290a3E1eEM2c05Veitkb0FQNmdD?= =?utf-8?B?ZCtmeXV1SFByKzFKdk52VDg5b0grVUFxKzh5QVpvTkVIcytFZmxmb0xRd1RU?= =?utf-8?B?R0EzaDVrWkp0VWVjQytWSTd5bm95bjRBL3cyaHBiOVNMc05YelRMTHVkR0Ji?= =?utf-8?B?VEloL0tXRUsyZVdiSis3SEg2RmJhbXF6L0VYNGgrb2VyeCtRVVBoaW5MN3Zu?= =?utf-8?B?SHVKWHZOSHAvTDZyOHJOY3Q1VzlLbGxmMWhoTW1xRUJWS0R1L043WTZ5QmZV?= =?utf-8?B?ZTVIbGs1bFFTM2p4VlYzK3BTK3lFVG1sVFpJazkzbWxLTXp2dUczZzR2Ymh2?= =?utf-8?B?ankzVkVPeXliMDVYOG5hYW1vT2RrYXA1ck03dG9NU1M1NStrRngzM3k5TTQ5?= =?utf-8?B?ZW9rS2hna2FMOVkvbkNmeUtyWTVkaFZrL1VQY3hrYTVtdlZwSWxLNWYvbHFT?= =?utf-8?B?THJ1VytsYW5XVnlOVFJEN0xLM0FjaUFIZkc3OGN0eDdlcGlIR2dTamdESE4z?= =?utf-8?B?R1BMQzBQTTRrYWM5bVFtODVmVzNWT3R3MGEwWHU4YktPdS9RaUE2aDd2SUJv?= =?utf-8?Q?0C5i3O?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(82310400026)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2025 09:46:21.3753 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3cbac272-2ad3-45d2-ba38-08dd9c3a2bd9 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A101.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7790 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748252810236116600 Add a new function to emulate extended capability list for dom0, and call it in init_header(). So that it will be easy to hide a extended capability whose initialization fails. As for the extended capability list of domU, just move the logic into above function and keep hiding it for domU. Signed-off-by: Jiqian Chen --- cc: "Roger Pau Monn=C3=A9" --- v4->v5 changes: * Add check: if capability list of hardware has a overlap, print warning an= d return 0. v3->v4 changes: * Add check "if ( !header ) return 0;" to avoid adding handler for device that has no extended capabilities. v2->v3 changes: * In vpci_init_ext_capability_list(), when domain is domU, directly return = after adding a handler(hiding all extended capability for domU). * In vpci_init_ext_capability_list(), change condition to be "while ( pos >= =3D 0x100U && ttl-- )" instead of "while ( pos && ttl-- )". * Add new function vpci_hw_write32, and pass it to extended capability hand= ler for dom0. v1->v2 changes: new patch Best regards, Jiqian Chen. --- xen/drivers/vpci/header.c | 47 ++++++++++++++++++++++++++++++++------- xen/drivers/vpci/vpci.c | 6 +++++ xen/include/xen/vpci.h | 2 ++ 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index d26cbba08ee1..4b2f761c9c24 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -836,6 +836,42 @@ static int vpci_init_capability_list(struct pci_dev *p= dev) PCI_STATUS_RSVDZ_MASK); } =20 +static int vpci_init_ext_capability_list(struct pci_dev *pdev) +{ + unsigned int pos =3D PCI_CFG_SPACE_SIZE, ttl =3D 480; + + if ( !is_hardware_domain(pdev->domain) ) + /* Extended capabilities read as zero, write ignore for guest */ + return vpci_add_register(pdev->vpci, vpci_read_val, NULL, + pos, 4, (void *)0); + + while ( pos >=3D PCI_CFG_SPACE_SIZE && ttl-- ) + { + uint32_t header =3D pci_conf_read32(pdev->sbdf, pos); + int rc; + + if ( !header ) + return 0; + + rc =3D vpci_add_register(pdev->vpci, vpci_read_val, vpci_hw_write3= 2, + pos, 4, (void *)(uintptr_t)header); + if ( rc =3D=3D -EEXIST ) + { + printk(XENLOG_WARNING + "%pd %pp: overlap in extended cap list, offset %#x\n", + pdev->domain, &pdev->sbdf, pos); + return 0; + } + + if ( rc ) + return rc; + + pos =3D PCI_EXT_CAP_NEXT(header); + } + + return 0; +} + static int cf_check init_header(struct pci_dev *pdev) { uint16_t cmd; @@ -888,14 +924,9 @@ static int cf_check init_header(struct pci_dev *pdev) if ( rc ) return rc; =20 - if ( !is_hwdom ) - { - /* Extended capabilities read as zero, write ignore */ - rc =3D vpci_add_register(pdev->vpci, vpci_read_val, NULL, 0x100, 4, - (void *)0); - if ( rc ) - return rc; - } + rc =3D vpci_init_ext_capability_list(pdev); + if ( rc ) + return rc; =20 if ( pdev->ignore_bars ) return 0; diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 09988f04c27c..8474c0e3b995 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -267,6 +267,12 @@ void cf_check vpci_hw_write16( pci_conf_write16(pdev->sbdf, reg, val); } =20 +void cf_check vpci_hw_write32( + const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data) +{ + pci_conf_write32(pdev->sbdf, reg, val); +} + int vpci_add_register_mask(struct vpci *vpci, vpci_read_t *read_handler, vpci_write_t *write_handler, unsigned int offse= t, unsigned int size, void *data, uint32_t ro_mask, diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index fc8d5b470b0b..61d16cc8b897 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -80,6 +80,8 @@ void cf_check vpci_hw_write8( const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data= ); void cf_check vpci_hw_write16( const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data= ); +void cf_check vpci_hw_write32( + const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data= ); =20 /* * Check for pending vPCI operations on this vcpu. Returns true if the vcpu --=20 2.34.1 From nobody Fri Oct 31 09:42:12 2025 Delivered-To: importer@patchew.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=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748252810; cv=pass; d=zohomail.com; s=zohoarc; b=cx5TMgJzOUVH3/PV8Y9WXfR4U+yvjrRCD2lzr5vDE/+KQhZWjQUgEr47Oy1zB+pTbh9xZLRh2/+zqeeHiJUNMxL3gNFzg9qIHrFjxbB7D9J63huatQmfR31iMWiHYZBBvGg7p/p54icrm7Mu63DZsr3eovdvU9ZYpBNARbjI+oY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748252810; 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=ZipsPW/ns1bYXVu9iRhK77+DF2OaAhLQxGjFTNkOoi0=; b=J9UHez9zjSAlF1oqUKXG2a7r7d9FbDFAvoFFZcer7zbAPQG1R0uboUg8Y43/kb+W3F97AtgFY7g3heWK5rJCSjjkDwQrCvV2LZlRtgvQ/PGjP52FKm+TqVZ+t7b3HkNsEzIOAY6DFH5y7GhH5puUuYYBronPh3la00XKO5yEW4k= 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=amd.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 1748252810170286.57756253088246; Mon, 26 May 2025 02:46:50 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997346.1378271 (Exim 4.92) (envelope-from ) id 1uJUPh-0004hS-Df; Mon, 26 May 2025 09:46:33 +0000 Received: by outflank-mailman (output) from mailman id 997346.1378271; Mon, 26 May 2025 09:46:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPh-0004h5-8Q; Mon, 26 May 2025 09:46:33 +0000 Received: by outflank-mailman (input) for mailman id 997346; Mon, 26 May 2025 09:46:32 +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 1uJUPf-0003hH-UO for xen-devel@lists.xenproject.org; Mon, 26 May 2025 09:46:32 +0000 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2062e.outbound.protection.outlook.com [2a01:111:f403:2414::62e]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4c248069-3a16-11f0-a2fb-13f23c93f187; Mon, 26 May 2025 11:46:30 +0200 (CEST) Received: from BL6PEPF00013DF9.NAMP222.PROD.OUTLOOK.COM (2603:10b6:22e:400:0:1001:0:c) by SN7PR12MB7882.namprd12.prod.outlook.com (2603:10b6:806:348::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.26; Mon, 26 May 2025 09:46:25 +0000 Received: from BL02EPF0001A103.namprd05.prod.outlook.com (2a01:111:f403:c922::3) by BL6PEPF00013DF9.outlook.office365.com (2603:1036:903:4::4) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.19 via Frontend Transport; Mon, 26 May 2025 09:46:24 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BL02EPF0001A103.mail.protection.outlook.com (10.167.241.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:24 +0000 Received: from cjq-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 26 May 2025 04:46:21 -0500 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: 4c248069-3a16-11f0-a2fb-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pZNcvluNG6GQdfWF4G0nlv/cxQmeZ/eWjgW8oiCa9zfPRL90y7wABTeF/SPp0M5DfWje2Xb3G7O9v+wcy6UjyNwFddBiGZ7uyv1CNs43fG8cyOTcup+MMvDXHRjbDD3moX+C0FRMAOHL7KpkSVpY7jsFT9Fgno58LGArqOqXxrKVu3hicNfl3GXbHNqhe0cfOB8w66aVqQBRMcY+pE2ZCke/HJhQ0GrW90oAYptrSrFjayGznsqonWrWZyq9B9C9qh8OVvKtIsbZousaLXHBoVhbr29l9GKXVWqnZA5iAg0q1JTBQvWwBUTk90XuW7Uk3VikrOduo57Qu8chpjVbMw== 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=ZipsPW/ns1bYXVu9iRhK77+DF2OaAhLQxGjFTNkOoi0=; b=WqGKTiNXEaiAM0d5ppcbEGjsjsoY/vucawaaBxlj4FH6dOvkctu+g4wCg1prFWzZmmhMiXLP9ppopvVlwWeMFLPbr5OvA1TcMfO+9iAE/j/oyL0vqyOoKhBsMYIY26VGJcnI7v5SF3HzZPEK7CW4ATb1zEwEiaaYiwPT9dTuP91C5EA0w2aSeZyAQbCEkn3iurXcFhRm12WF9B9/97INwyxcIke4aZtJ4VnGDibRwKYVMaqwyQKz5JAZBsPkDSg9iHUTQaNpp4CpirVsCwMZ2vicrn3kGexS6FCCG4CAdjvTXK4WW4lcZ2imDrW8uvfFSQbZJxVjJ7XF3SZwqQfdgQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZipsPW/ns1bYXVu9iRhK77+DF2OaAhLQxGjFTNkOoi0=; b=KCaahkoOQg09xeREJdIRjlk0u/hOF0vwcaO0XABiYXFZT9VNoQneZbYkl5zH5Z/QvN/iepplNExuKPtAn+X6uZyfbMeonMmzgLn+DjrepOsOPsfT3tBwXRxNv54khjxzihJb6duuKwzhxbLsM9UlUlhUM/zwm6uug7YxSmzbsNc= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; 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; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Jiqian Chen To: CC: Huang Rui , Jiqian Chen , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , "Julien Grall" , Stefano Stabellini Subject: [PATCH v5 04/10] vpci: Refactor REGISTER_VPCI_INIT Date: Mon, 26 May 2025 17:45:53 +0800 Message-ID: <20250526094559.140423-5-Jiqian.Chen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250526094559.140423-1-Jiqian.Chen@amd.com> References: <20250526094559.140423-1-Jiqian.Chen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A103:EE_|SN7PR12MB7882:EE_ X-MS-Office365-Filtering-Correlation-Id: c28d7e39-a65a-4d7a-aef9-08dd9c3a2d74 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Ymd4WEZzNURJMXVRQVNMcEJWNmptOHZ0YkxCY1lPdk5HVXNXaFVtNjYwTlRk?= =?utf-8?B?QnhtVVQxQ1RlRyt1SlhmSUxTTE13SG8yTFplQWJack5kS3Zidlp6WGdySkx2?= =?utf-8?B?ZHJKSTFWamdzaFNXYWV0YVZHRU1OL0RvTUtnWjJvRTk0MmoyTnhZaHprQkg0?= =?utf-8?B?anRwWGhQNm1ibnZOM1lQWmNrNWE5Yk95SW1VYTEySDJ2VWJ0LzBoTXRTd2k1?= =?utf-8?B?Q0JHR0NVV0pRVnJFS0puVjJxRDlTcFpMT1MzWWhteElId2wrUkR6Z0RUN0Ev?= =?utf-8?B?OG82cnBvRHJhV1k2S0g3cFFpVzZvWE5aUFdJbnNUVmVYYzFuQjh5UDREWDNt?= =?utf-8?B?ZnVpWGY1dTVLMVhUMEV4UHYzc0l4a0JkNnJXOHJNQVdYTzViUzZZcDh5Sklq?= =?utf-8?B?Y1YvK0JKb1RjNjN6d1BPS3RSNnk5RVVXcEg2MzZHdTBPaWNFR2ZZcTNWc21E?= =?utf-8?B?aGhwMXZPNThrZm5TSWZXREpDSUdOdjMxRzc3THpYdVZqQTBwQ0NwMXJ1K3FD?= =?utf-8?B?c1pjV0FQRXJKTVpybzJwRzVmdnIzZWd2L0RIeW1aU3V3M1lZekN4d3JNVlIy?= =?utf-8?B?ZE1mOTdWVkRiWWlDYytqWmloR1pCejFDUUhHejlMT05MTitqQzcxcUtsMnF2?= =?utf-8?B?NTIrcDNtQUdBci9tbkpPTldQZWdZUDdvTllHTTMwQ1RyTHZxdHNaaHhaSktw?= =?utf-8?B?dVZLdVVsVFdWVWRrYnVvZERaTkpZZzJVbkZVVWsxUldsZ3lUOWovUytVWlJZ?= =?utf-8?B?KzkxR24zNTRZWnUxb0YraGhGM0FZZUZ5N21ycEE2ZDdoL1hnTjN5RWgxdlgr?= =?utf-8?B?RWY3L3ExemRaMXhJN2Vwd1ltakxvcGkvRzFUK1RiVEM0ZVd2dGRzMWdoaStt?= =?utf-8?B?ZjhHUi9xR0t6Q2pLckF6aVdUWGZGNnQvYkJ2clhWRERWeEpRdjhES21IZEN4?= =?utf-8?B?N2RPM0x0My9Dd2ZKSU1oYUhDQmZjSEFqMXdncEFBenJaeWFYNndkNDZXSmNM?= =?utf-8?B?c0lJR3FNVGpqVXJDNm5lS1Qwc05CVnlTQXdSMHJsZVczKzFzVHZjYVNlRGhW?= =?utf-8?B?TE8vZTRhbjhWVlZvU1dXczZxWlUreGxoR3VjUFAxQ2dCdUlZKzVUUisrcEFF?= =?utf-8?B?cUUwdjNBYnVmY1RkaUFZN2dxR0JyeU5EWlNyYkllMzdob0I1VGlHTjdqVlJm?= =?utf-8?B?YjlUSGxEMzRkaWxGamgvTDJyL1pqdUZLOThXSjdQMkFUZmR4Ti9rYzdZRlhU?= =?utf-8?B?NXpoUDJHOTBtUnhHSitqUDdJd21vYmV2UjcvOEFhOGhxdlQ2c2hyV0hXRHhC?= =?utf-8?B?UXZ2djNrZlJ6RGpPY0VUTUIvSWhGbHl0c2dCZmhaZlQ0NTBZelpSeUw3QVdu?= =?utf-8?B?bHJ4TWxvNHVuNHhMd0d0YWt1dldId0R3U1VLc3FFbHlCQWxuN1ZSYVQ0ODBN?= =?utf-8?B?RWhDbEVncTlKaE1FMFE1Y0lBemFDbVVqOUczL09qWDg2aFFBSXpya0o3V0xq?= =?utf-8?B?aVpMVm1pVUFKSFFJa0l4RVNRY1FtTVZ4YTRaMDVQMTg5YXhjNzNGRHRqMUJQ?= =?utf-8?B?TEZ2YUF0eVNqa3dRczRZNXYwTTJRQ3NMVDVsZlh6aUMrODJuaXFDdDB2c3Za?= =?utf-8?B?NGxSUk5leEE3VzBiTVh3M0ZucFpjbWEyVTcyM1lVMHNpb2NYQytWRUxETm5M?= =?utf-8?B?NWZwQjd5Z01nZG05SDJWZC9VS1pSNG1sRkdjYXpPMGR0YkhwZU9ISDhzTFNw?= =?utf-8?B?aXFEUFl0ZmluMFIrenN4dFRTM0dackJSTXRiUTAvaGhqMnBRWVRNdVlkOFlK?= =?utf-8?B?MkFUU0N6S0swR1dKcGJyL2JXSUY3VHhzcllKZjRnZTlDTlR6NTUzeFFEZFd5?= =?utf-8?B?Wm9PM2loZUVkVnJaK0FLaEQ3ZnVpN1dxSnBIRzZlUWRoS3JkWUVPMkNDMXR3?= =?utf-8?B?aUlQQlhrajFBanR0aVpZME04MVZPOFZOd0pST0hzU3BYa1h3ZVluS1hUck5v?= =?utf-8?B?QkVuV1pjN2RPM0k3OE04M0h5VmJGVERwR21sREtwUDl3WXBLV1J6eDRHeVA3?= =?utf-8?Q?LL65X5?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2025 09:46:24.0702 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c28d7e39-a65a-4d7a-aef9-08dd9c3a2d74 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A103.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7882 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748252812089116600 Refactor REGISTER_VPCI_INIT to contain more capability specific information, this is benefit for follow-on changes to hide capability when initialization fails. What's more, change the definition of init_header() since it is not a capability and it is needed for all devices' PCI config space. After refactor, the "priority" of initializing capabilities isn't needed anymore, so delete its related codes. Note: Call vpci_make_msix_hole() in the end of init_msix() since the change of sequence of init_header() and init_msix(). The cleanup hook is also added in this change, even if it's still unused. Further changes will make use of it. Signed-off-by: Jiqian Chen --- cc: "Roger Pau Monn=C3=A9" cc: Andrew Cooper cc: Anthony PERARD cc: Michal Orzel cc: Jan Beulich cc: Julien Grall cc: Stefano Stabellini --- v4->v5 changes: * Rename REGISTER_VPCI_CAP to REGISTER_PCI_CAPABILITY, rename REGISTER_VPCI= _LEGACY_CAP to REGISTER_VPCI_CAP, rename REGISTER_VPCI_EXTENDED_CAP to REGI= STER_VPCI_EXTCAP. * Change cleanup hook of vpci_capability_t from void to int. v3->v4 changes * Delete the useless trailing dot of section ".data.vpci". * Add description about priority since this patch removes the initializing = priority of capabilities and priority is not needed anymore. * Change the hook name from fini to cleanup. * Change the name x and y to be finit and fclean. * Remove the unnecessary check "!capability->init" v2->v3 changes: * This is separated from patch "vpci: Hide capability when it fails to init= ialize" of v2. * Delete __maybe_unused attribute of "out" in function vpci_assign_devic(). * Rename REGISTER_VPCI_EXTEND_CAP to REGISTER_VPCI_EXTENDED_CAP. v1->v2 changes: * Removed the "priorities" of initializing capabilities since it isn't used= anymore. * Added new function vpci_capability_mask() and vpci_ext_capability_mask() = to remove failed capability from list. * Called vpci_make_msix_hole() in the end of init_msix(). Best regards, Jiqian Chen. --- xen/drivers/vpci/header.c | 3 +-- xen/drivers/vpci/msi.c | 2 +- xen/drivers/vpci/msix.c | 8 +++++-- xen/drivers/vpci/rebar.c | 2 +- xen/drivers/vpci/vpci.c | 46 ++++++++++++++++++++++++++++++--------- xen/include/xen/vpci.h | 30 ++++++++++++++++++------- xen/include/xen/xen.lds.h | 2 +- 7 files changed, 68 insertions(+), 25 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 4b2f761c9c24..9fa1cda23151 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -872,7 +872,7 @@ static int vpci_init_ext_capability_list(struct pci_dev= *pdev) return 0; } =20 -static int cf_check init_header(struct pci_dev *pdev) +int vpci_init_header(struct pci_dev *pdev) { uint16_t cmd; uint64_t addr, size; @@ -1068,7 +1068,6 @@ static int cf_check init_header(struct pci_dev *pdev) pci_conf_write16(pdev->sbdf, PCI_COMMAND, cmd); return rc; } -REGISTER_VPCI_INIT(init_header, VPCI_PRIORITY_MIDDLE); =20 /* * Local variables: diff --git a/xen/drivers/vpci/msi.c b/xen/drivers/vpci/msi.c index 66e5a8a116be..2d45c7867de7 100644 --- a/xen/drivers/vpci/msi.c +++ b/xen/drivers/vpci/msi.c @@ -270,7 +270,7 @@ static int cf_check init_msi(struct pci_dev *pdev) =20 return 0; } -REGISTER_VPCI_INIT(init_msi, VPCI_PRIORITY_LOW); +REGISTER_VPCI_CAP(PCI_CAP_ID_MSI, init_msi, NULL); =20 void vpci_dump_msi(void) { diff --git a/xen/drivers/vpci/msix.c b/xen/drivers/vpci/msix.c index 74211301ba10..674815ead025 100644 --- a/xen/drivers/vpci/msix.c +++ b/xen/drivers/vpci/msix.c @@ -703,9 +703,13 @@ static int cf_check init_msix(struct pci_dev *pdev) pdev->vpci->msix =3D msix; list_add(&msix->next, &d->arch.hvm.msix_tables); =20 - return 0; + spin_lock(&pdev->vpci->lock); + rc =3D vpci_make_msix_hole(pdev); + spin_unlock(&pdev->vpci->lock); + + return rc; } -REGISTER_VPCI_INIT(init_msix, VPCI_PRIORITY_HIGH); +REGISTER_VPCI_CAP(PCI_CAP_ID_MSIX, init_msix, NULL); =20 /* * Local variables: diff --git a/xen/drivers/vpci/rebar.c b/xen/drivers/vpci/rebar.c index 793937449af7..9cafd80ca2c9 100644 --- a/xen/drivers/vpci/rebar.c +++ b/xen/drivers/vpci/rebar.c @@ -118,7 +118,7 @@ static int cf_check init_rebar(struct pci_dev *pdev) =20 return 0; } -REGISTER_VPCI_INIT(init_rebar, VPCI_PRIORITY_LOW); +REGISTER_VPCI_EXTCAP(PCI_EXT_CAP_ID_REBAR, init_rebar, NULL); =20 /* * Local variables: diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 8474c0e3b995..2861557e06d2 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -36,8 +36,8 @@ struct vpci_register { }; =20 #ifdef __XEN__ -extern vpci_register_init_t *const __start_vpci_array[]; -extern vpci_register_init_t *const __end_vpci_array[]; +extern vpci_capability_t *const __start_vpci_array[]; +extern vpci_capability_t *const __end_vpci_array[]; #define NUM_VPCI_INIT (__end_vpci_array - __start_vpci_array) =20 #ifdef CONFIG_HAS_VPCI_GUEST_SUPPORT @@ -83,6 +83,34 @@ static int assign_virtual_sbdf(struct pci_dev *pdev) =20 #endif /* CONFIG_HAS_VPCI_GUEST_SUPPORT */ =20 +static int vpci_init_capabilities(struct pci_dev *pdev) +{ + for ( unsigned int i =3D 0; i < NUM_VPCI_INIT; i++ ) + { + const vpci_capability_t *capability =3D __start_vpci_array[i]; + const unsigned int cap =3D capability->id; + const bool is_ext =3D capability->is_ext; + unsigned int pos; + int rc; + + if ( !is_ext ) + pos =3D pci_find_cap_offset(pdev->sbdf, cap); + else if ( !is_hardware_domain(pdev->domain) ) + continue; + else + pos =3D pci_find_ext_capability(pdev->sbdf, cap); + + if ( !pos ) + continue; + + rc =3D capability->init(pdev); + if ( rc ) + return rc; + } + + return 0; +} + void vpci_deassign_device(struct pci_dev *pdev) { unsigned int i; @@ -128,7 +156,6 @@ void vpci_deassign_device(struct pci_dev *pdev) =20 int vpci_assign_device(struct pci_dev *pdev) { - unsigned int i; const unsigned long *ro_map; int rc =3D 0; =20 @@ -159,14 +186,13 @@ int vpci_assign_device(struct pci_dev *pdev) goto out; #endif =20 - for ( i =3D 0; i < NUM_VPCI_INIT; i++ ) - { - rc =3D __start_vpci_array[i](pdev); - if ( rc ) - break; - } + rc =3D vpci_init_header(pdev); + if ( rc ) + goto out; + + rc =3D vpci_init_capabilities(pdev); =20 - out: __maybe_unused; + out: if ( rc ) vpci_deassign_device(pdev); =20 diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index 61d16cc8b897..e5e3f23ca39c 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -13,11 +13,12 @@ typedef uint32_t vpci_read_t(const struct pci_dev *pdev= , unsigned int reg, typedef void vpci_write_t(const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data); =20 -typedef int vpci_register_init_t(struct pci_dev *dev); - -#define VPCI_PRIORITY_HIGH "1" -#define VPCI_PRIORITY_MIDDLE "5" -#define VPCI_PRIORITY_LOW "9" +typedef struct { + unsigned int id; + bool is_ext; + int (*init)(struct pci_dev *pdev); + int (*cleanup)(struct pci_dev *pdev); +} vpci_capability_t; =20 #define VPCI_ECAM_BDF(addr) (((addr) & 0x0ffff000) >> 12) =20 @@ -29,9 +30,22 @@ typedef int vpci_register_init_t(struct pci_dev *dev); */ #define VPCI_MAX_VIRT_DEV (PCI_SLOT(~0) + 1) =20 -#define REGISTER_VPCI_INIT(x, p) \ - static vpci_register_init_t *const x##_entry \ - __used_section(".data.vpci." p) =3D (x) +#define REGISTER_PCI_CAPABILITY(cap, finit, fclean, ext) \ + static vpci_capability_t finit##_t =3D { \ + .id =3D (cap), \ + .init =3D (finit), \ + .cleanup =3D (fclean), \ + .is_ext =3D (ext), \ + }; \ + static vpci_capability_t *const finit##_entry \ + __used_section(".data.vpci") =3D &finit##_t + +#define REGISTER_VPCI_CAP(cap, finit, fclean) \ + REGISTER_PCI_CAPABILITY(cap, finit, fclean, false) +#define REGISTER_VPCI_EXTCAP(cap, finit, fclean) \ + REGISTER_PCI_CAPABILITY(cap, finit, fclean, true) + +int __must_check vpci_init_header(struct pci_dev *pdev); =20 /* Assign vPCI to device by adding handlers. */ int __must_check vpci_assign_device(struct pci_dev *pdev); diff --git a/xen/include/xen/xen.lds.h b/xen/include/xen/xen.lds.h index 793d0e11450c..84ec506b00da 100644 --- a/xen/include/xen/xen.lds.h +++ b/xen/include/xen/xen.lds.h @@ -188,7 +188,7 @@ #define VPCI_ARRAY \ . =3D ALIGN(POINTER_ALIGN); \ __start_vpci_array =3D .; \ - *(SORT(.data.vpci.*)) \ + *(.data.vpci) \ __end_vpci_array =3D .; #else #define VPCI_ARRAY --=20 2.34.1 From nobody Fri Oct 31 09:42:12 2025 Delivered-To: importer@patchew.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=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748252816; cv=pass; d=zohomail.com; s=zohoarc; b=PoAn412RgDU4x0ipfwlEieMcIPB5EPJ9B6Wvgu5ekETVJggEjUVhbCxNzk1/9GH+WFrIBOmqeF/E1Df9Psxd8R9DPFeRBc4mRyErm4TUTbWiw52zQRtLu5gwQ/yIhJmy5Nhua0HGkPTw1dYBXPIxtSEHJUAsiK3Gh6QmYQjw9XI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748252816; 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=RKPMNclJOluHYnlqetY+d81+gl5XyN6bNJSpIWX/+lI=; b=jHPd7/0he9U60dyWtzl5jOksX04vt9UvzHG/ngL6pO+ioidkDeRnhR7UH4brxDddxsvE5cWLlZnA8cwWlRYlBKhWbKXOjJRcV4JLynXBsNEj+bp0rtxx3UpfN60cre+Lr1nrHZ2l10uOsFQOEAX/i1yT+n4VEKd/wbuE+aBrGSM= 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=amd.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 1748252816028694.7712372348153; Mon, 26 May 2025 02:46:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997345.1378266 (Exim 4.92) (envelope-from ) id 1uJUPh-0004f3-4M; Mon, 26 May 2025 09:46:33 +0000 Received: by outflank-mailman (output) from mailman id 997345.1378266; Mon, 26 May 2025 09:46:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPh-0004eo-0k; Mon, 26 May 2025 09:46:33 +0000 Received: by outflank-mailman (input) for mailman id 997345; Mon, 26 May 2025 09:46:31 +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 1uJUPe-0003hH-UB for xen-devel@lists.xenproject.org; Mon, 26 May 2025 09:46:30 +0000 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on20614.outbound.protection.outlook.com [2a01:111:f403:2415::614]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4ce2042d-3a16-11f0-a2fb-13f23c93f187; Mon, 26 May 2025 11:46:30 +0200 (CEST) Received: from MN2PR15CA0063.namprd15.prod.outlook.com (2603:10b6:208:237::32) by CH3PR12MB9124.namprd12.prod.outlook.com (2603:10b6:610:1a7::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.25; Mon, 26 May 2025 09:46:25 +0000 Received: from BL02EPF0001A108.namprd05.prod.outlook.com (2603:10b6:208:237:cafe::22) by MN2PR15CA0063.outlook.office365.com (2603:10b6:208:237::32) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8746.30 via Frontend Transport; Mon, 26 May 2025 09:46:25 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BL02EPF0001A108.mail.protection.outlook.com (10.167.241.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:25 +0000 Received: from cjq-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 26 May 2025 04:46:24 -0500 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: 4ce2042d-3a16-11f0-a2fb-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hWsjEDzNCh53YBZMPzNv8owVUajKZ3rIfxdID1DjkXPtEMmSJRzbQoVbWwL9cvMutN9C+L4bnLmy7R3P+8lsXyV1cf7TlGfreTk4lUdDhzuOr/GVfFGEjWkCvoAPV3Xv4ALHXQf/7h/BHbAqvYi9IqgIckT38tshgW7+POQCLP851qETYN0REXgEEaTNenQilX0Bq4wkF2HKqw/0JyDrvUGgcxww+LC/0Vj98F+yViEjuNG0zunH8RQ1DHeq0+LmTG99lSR+z8KKF1G+NjH9HutZ2kyVBqz4jW7a2VJ0XOlPZ125aqk609VjWHiV0oOiWN0PemB66aKoIJu1JQhSXA== 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=RKPMNclJOluHYnlqetY+d81+gl5XyN6bNJSpIWX/+lI=; b=fQtleOzZUCP01ZwD7z14LVZ6qpZMlCUFRLMpUObmPIFCNpW5p9VQV1nagioVFEe611L9Hhfyo9ZH2/LICz0w9NuNmJatGF9kA9MSt2NXSwH33slH7kxT/ONhHRF1q7rSNwjcgMwYhbDLF2/BFhzsA4SPVQQQC1ijg8AvZI5cN+oU1oMenbMKM8aoTG4rEnfS4rYfQz7lIBoxFu0GNDax0fkYrZrQ9UtrRa/WvO3Sz688CYM+L5w7Jmr2WDYECgBYeJdYbJORCAljchcarvUfZIz/UEgtGgm/BdJRue0Lsyv5Vs596+XaUs0Ej9brF/Ja/qZ+zzLwssPBh0o99fqPdw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RKPMNclJOluHYnlqetY+d81+gl5XyN6bNJSpIWX/+lI=; b=TCvLHTzZ/cAWHRMfWjEe7kGZj8h0J1daxIKzUJ+PTORTGG9vRzJeCVHWcBNHhUn7IoTZGbLT2j4masSaLcCaVaPdRNMiAcPKidliavm/6Vl3Hirlo8nQaDWU4jTsUZLj+hnz9f1LjzGEgfvOSXR866BxNU5zWCSRu96oavRDOwo= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; 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; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Jiqian Chen To: CC: Huang Rui , Jiqian Chen , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 05/10] vpci: Hide legacy capability when it fails to initialize Date: Mon, 26 May 2025 17:45:54 +0800 Message-ID: <20250526094559.140423-6-Jiqian.Chen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250526094559.140423-1-Jiqian.Chen@amd.com> References: <20250526094559.140423-1-Jiqian.Chen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A108:EE_|CH3PR12MB9124:EE_ X-MS-Office365-Filtering-Correlation-Id: b98aa00b-3e19-45e4-3721-08dd9c3a2e6f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RTlaY3FVc1dTYWRkbDBsNjVPaytlMmVhdDFuNVZDY0wvbmJiWWVhaG5Rem9H?= =?utf-8?B?SFM0OER0Mk9YQVFwRUh1a1NOYUtURlBNb0FVZVBVYURGaXFua3lsY1VWV3Nl?= =?utf-8?B?d2tKdjh2clRoVkJnM003eEQ2b1oxdmQ0ekg0RUZ1L1JjRlVnQ1lGbW1IRFBs?= =?utf-8?B?ZUdKd1dXWWxOb1hHUExYV1FiOGI4ckpWYzNxSDA3Z1VyczlLeTBZcVFQMk5h?= =?utf-8?B?Q3NqN0Z2alRqSzEvMEQ5UlZTRTFuczVGZmFCM1pVRmtSSEZMZXpLL2R5bHJ2?= =?utf-8?B?a3AwdE1qVkxuell1RC9kSTJ3RWhnRk1nQ0VZQmt6c053RitQemRkSGNvOGs1?= =?utf-8?B?bmpRZjIrdWxsMm40NDNPb1Q4c1JkTHZmbGJSTXZxSHFDRGF0bmFkT2VJQ2Y0?= =?utf-8?B?RmNGY2RvalJvWWRUaTdHL0FWemJSWE8wSGdYY0lscFpXQ3BsK3ZqZlZjbU9F?= =?utf-8?B?aGFhdTMvd2tOaUxBeHpCZ1BVSXhmY3ZUamFiNzJST01BcytQdmdCMGhzYWlG?= =?utf-8?B?eTFOY2RDbGRiWWIxa2Y2STFqK3NWanRhMTFIM0dFR0tubldmcE5WVnNyTnVT?= =?utf-8?B?bmx4VVNpNlVXdUJJcURtVkg2YXNJSUJ6NkJYQ3I5dVM1S2NGYWZCM0YwUndO?= =?utf-8?B?MHVPbWdMZzJZMGhCck92ck5iL0VtOFg3S3Y4R2I1QkdRTGF2d0Z0Z0lodHJK?= =?utf-8?B?d2hFQWJOWnlEWU81eHRQbW5CNHpFaDVrdHRMUXF3c2t0NjVJaG56T2dmbVla?= =?utf-8?B?ZnFjN21DU0h4ZkFqeEVXOGcrSGtld2FDSDFJSG1vajhYb0xDZEtRejlaYVZ4?= =?utf-8?B?ZmxIV0NibW9mbDVUT3F3KzBtT3VGUXNYTlJsRGdlOElNL2tWZVZoeW1DUDNv?= =?utf-8?B?VkhtbGhPQ2tScWhXeHRrRzFoV1dKTTI1eHl4cExTUS9mTXVPLzBKNUdKTHNL?= =?utf-8?B?V25KQ1lKay80ZjIzYU9Hcy84NlUzUVhyN3ZDMER0S043V3lOV0haQWtnZG44?= =?utf-8?B?akJvL3NNaW52MjZOditSekRNUXFwNmNYY1RiOVVjNFg2YjV3SkhOQXI4TUdZ?= =?utf-8?B?NThqbmZWcURDS1RGREVQU2orc3JVUUdtdGZaYnhLWVVBNmpsSXFybEZwK216?= =?utf-8?B?Yml0TFc3SHYrTk5GWWNSbGt3U01TU0xQOHVqSnJpNHRPNmxGNUpTQWZyaDF4?= =?utf-8?B?TEJJSVdxUHhoZU9hRmo1MkxOTDJiVXV1MFV4dTB5WFVZd0JzUTJNNGlPcFVH?= =?utf-8?B?bERzWENnWWQzODZyc1hnZWdycFdKV0ZUOXhSZm5HVWYzbGcxbkFWTk9ERUR3?= =?utf-8?B?MjJoUFRHS0NrYnMvNTBDMlZBU3JZeFJUQUFvdVdoSEVvOHVmTzRXSWZoWlpx?= =?utf-8?B?SVRuWU1pUGMwSlBTakJxR281N3hkMTRtQVMrNnQ2VUJkTFo4TFk5Zmxkb3Fl?= =?utf-8?B?cDBlcDFHcmxKTCtZelhPMUtIZXNKUjN6L0hSdWZwRXZuRk9zUjJ1alhubWJ5?= =?utf-8?B?UzR6U0E5cGxYcEs4MnBYcjBGSjNBaXNIbDRvaFBUb3puUGx1MGQvUmgzMVBH?= =?utf-8?B?L2NzeUZxYU5HTjZEY2pTMnJERnN0OU5Wdjd5VEpxWmhDVlp5TllGbzBqSVdL?= =?utf-8?B?bHdFTmlralZWbkg5a1V5ZSt4eDl5OFBmeVJGSkMyZ0dhYlRvdkZrTUlhK2Vr?= =?utf-8?B?TDBZejF5U1ZGbWgyRG5QN2R5Y0Z6RlBHNzNjUHJ2QmExS1hhWTdHNiszUjJM?= =?utf-8?B?bk5mNWV2NUg2NWtDa3Zzcm0xa0x5TkVRTExNYk1ZekNBZi8vUk9iejVRUlZp?= =?utf-8?B?KzZBT2N2bnZrUlBDZmMwMDQrVVFUWkFidVRVbDQ5L3RESVR4TEtQMm9NQjE0?= =?utf-8?B?V0h3V3hkenFwQUl1NDhuWCtmMUthQ3BkeElIcnVKYjBwVS9oVHE0MVJpQnpi?= =?utf-8?B?RlpHU3NQaDUveGcxbU11TTVibjBNRlBiNk9QY2xoR1F0aHJzSkxlTk5yVnk5?= =?utf-8?B?OG9kMUdXWnBoU0YvTFJ0SGszSERkOWM1WURNWEgxUjI1Y2ZMdFUrb2xYSGFz?= =?utf-8?Q?48wY9y?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700013)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2025 09:46:25.7128 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b98aa00b-3e19-45e4-3721-08dd9c3a2e6f X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A108.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB9124 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748252818501116600 When vpci fails to initialize a legacy capability of device, it just returns an error and vPCI gets disabled for the whole device. That most likely renders the device unusable, plus possibly causing issues to Xen itself if guest attempts to program the native MSI or MSI-X capabilities if present. So, add new function to hide legacy capability when initialization fails. And remove the failed legacy capability from the vpci emulated legacy capability list. Signed-off-by: Jiqian Chen --- cc: "Roger Pau Monn=C3=A9" --- v4->v5 changes: * Modify vpci_get_register() to delete some unnecessary check, so that I do= n't need to move function vpci_register_cmp(). * Rename vpci_capability_mask() to vpci_capability_hide(). v3->v4 changes: * Modify the commit message. * In function vpci_get_previous_cap_register(), add an ASSERT_UNREACHABLE()= if offset below 0x40. * Modify vpci_capability_mask() to return error instead of using ASSERT. * Use vpci_remove_register to remove PCI_CAP_LIST_ID register instead of op= en code. * Add check "if ( !offset )" in vpci_capability_mask(). v2->v3 changes: * Separated from the last version patch "vpci: Hide capability when it fail= s to initialize" * Whole implementation changed because last version is wrong. This version adds a new helper function vpci_get_register() and uses it t= o get target handler and previous handler from vpci->handlers, then remove the = target. v1->v2 changes: * Removed the "priorities" of initializing capabilities since it isn't used= anymore. * Added new function vpci_capability_mask() and vpci_ext_capability_mask() = to remove failed capability from list. * Called vpci_make_msix_hole() in the end of init_msix(). Best regards, Jiqian Chen. --- xen/drivers/vpci/vpci.c | 117 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 113 insertions(+), 4 deletions(-) diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 2861557e06d2..60e7654ec377 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -83,6 +83,99 @@ static int assign_virtual_sbdf(struct pci_dev *pdev) =20 #endif /* CONFIG_HAS_VPCI_GUEST_SUPPORT */ =20 +static struct vpci_register *vpci_get_register(struct vpci *vpci, + unsigned int offset, + unsigned int size) +{ + struct vpci_register *rm; + + ASSERT(spin_is_locked(&vpci->lock)); + + list_for_each_entry ( rm, &vpci->handlers, node ) + { + if ( rm->offset =3D=3D offset && rm->size =3D=3D size ) + return rm; + + if ( offset <=3D rm->offset ) + break; + } + + return NULL; +} + +static struct vpci_register *vpci_get_previous_cap_register( + struct vpci *vpci, unsigned int offset) +{ + uint32_t next; + struct vpci_register *r; + + if ( offset < 0x40 ) + { + ASSERT_UNREACHABLE(); + return NULL; + } + + r =3D vpci_get_register(vpci, PCI_CAPABILITY_LIST, 1); + if ( !r ) + return NULL; + + next =3D (uint32_t)(uintptr_t)r->private; + while ( next >=3D 0x40 && next !=3D offset ) + { + r =3D vpci_get_register(vpci, next + PCI_CAP_LIST_NEXT, 1); + if ( !r ) + return NULL; + next =3D (uint32_t)(uintptr_t)r->private; + } + + if ( next < 0x40 ) + return NULL; + + return r; +} + +static int vpci_capability_hide(struct pci_dev *pdev, unsigned int cap) +{ + const unsigned int offset =3D pci_find_cap_offset(pdev->sbdf, cap); + struct vpci_register *prev_next_r, *next_r; + struct vpci *vpci =3D pdev->vpci; + + if ( !offset ) + { + ASSERT_UNREACHABLE(); + return 0; + } + + spin_lock(&vpci->lock); + next_r =3D vpci_get_register(vpci, offset + PCI_CAP_LIST_NEXT, 1); + if ( !next_r ) + { + spin_unlock(&vpci->lock); + return -ENODEV; + } + + prev_next_r =3D vpci_get_previous_cap_register(vpci, offset); + if ( !prev_next_r ) + { + spin_unlock(&vpci->lock); + return -ENODEV; + } + + prev_next_r->private =3D next_r->private; + /* + * Not calling vpci_remove_register() here is to avoid redoing + * the register search + */ + list_del(&next_r->node); + spin_unlock(&vpci->lock); + xfree(next_r); + + if ( !is_hardware_domain(pdev->domain) ) + return vpci_remove_register(vpci, offset + PCI_CAP_LIST_ID, 1); + + return 0; +} + static int vpci_init_capabilities(struct pci_dev *pdev) { for ( unsigned int i =3D 0; i < NUM_VPCI_INIT; i++ ) @@ -91,7 +184,6 @@ static int vpci_init_capabilities(struct pci_dev *pdev) const unsigned int cap =3D capability->id; const bool is_ext =3D capability->is_ext; unsigned int pos; - int rc; =20 if ( !is_ext ) pos =3D pci_find_cap_offset(pdev->sbdf, cap); @@ -103,9 +195,26 @@ static int vpci_init_capabilities(struct pci_dev *pdev) if ( !pos ) continue; =20 - rc =3D capability->init(pdev); - if ( rc ) - return rc; + if ( capability->init(pdev) ) + { + int rc; + + if ( capability->cleanup ) { + rc =3D capability->cleanup(pdev); + if ( rc ) + return rc; + } + + printk(XENLOG_WARNING "%pd %pp: %s cap %u init fail, mask it\n= ", + pdev->domain, &pdev->sbdf, + is_ext ? "extended" : "legacy", cap); + if ( !is_ext ) + { + rc =3D vpci_capability_hide(pdev, cap); + if ( rc ) + return rc; + } + } } =20 return 0; --=20 2.34.1 From nobody Fri Oct 31 09:42:12 2025 Delivered-To: importer@patchew.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=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748252817; cv=pass; d=zohomail.com; s=zohoarc; b=VrdXUgtPvtSBJpb18boZLDPux7OGljFctpQwLJw/VHVCnS/XMc+asFUVdFaW+wvOGR62CutfD96UXUKMYbqA2AZcmzMNdLm91d5XCSHOj7Uh1o/QPm/jLuswCvkuVcM2RmlWoi+1k6kGtMwjcoRQWVGtzURbjpTRqIi/zV/plVc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748252817; 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=xzigtSLOhnEm/3jzO+ojdi4ugIrKKVRZMdTKswuh48k=; b=bgkRJcsp7YsyJSJkK87q+KJwCqy2OwGRmnBgieIplCmTp5JMMLD6a82yayN9cPLDSTgBEnxsyadroGN7L3QK07T1b129FhlFb4RI0frjUV/vPVDtUrPQKXeCCj1JE5e9kcop1oTBujYXoYh67c5tgJH5+9rDHH05jiBU6iqItgc= 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=amd.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 1748252817155723.0921989464264; Mon, 26 May 2025 02:46:57 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997347.1378286 (Exim 4.92) (envelope-from ) id 1uJUPj-0005AX-PH; Mon, 26 May 2025 09:46:35 +0000 Received: by outflank-mailman (output) from mailman id 997347.1378286; Mon, 26 May 2025 09:46:35 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPj-0005AK-L2; Mon, 26 May 2025 09:46:35 +0000 Received: by outflank-mailman (input) for mailman id 997347; Mon, 26 May 2025 09:46:34 +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 1uJUPi-0003hH-94 for xen-devel@lists.xenproject.org; Mon, 26 May 2025 09:46:34 +0000 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on20630.outbound.protection.outlook.com [2a01:111:f403:200a::630]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4e12c9f4-3a16-11f0-a2fb-13f23c93f187; Mon, 26 May 2025 11:46:33 +0200 (CEST) Received: from BL0PR0102CA0026.prod.exchangelabs.com (2603:10b6:207:18::39) by DS4PR12MB9707.namprd12.prod.outlook.com (2603:10b6:8:278::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.24; Mon, 26 May 2025 09:46:30 +0000 Received: from BL02EPF0001A106.namprd05.prod.outlook.com (2603:10b6:207:18:cafe::b3) by BL0PR0102CA0026.outlook.office365.com (2603:10b6:207:18::39) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:18 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BL02EPF0001A106.mail.protection.outlook.com (10.167.241.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:29 +0000 Received: from cjq-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 26 May 2025 04:46:25 -0500 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: 4e12c9f4-3a16-11f0-a2fb-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IP/vku6xvFOnVqfNrX34k5zc5lCLDS+ew9JVoGJhKlNnEm21LT9tAy1M61awkuYyOw8zLryTN6Bm0fbPoLt4CXCr7QcFuTT9G1drAXO19SLOFlwVAdU6olfGI+I6iKWLTROxNfXJy2OkyWDxIQe4mp7OldtHSu1uX/+uDOdd1mj46F+U0xgeA1gNPKg9BhbYWmwH17j1vGIYcSKPY6XgcRDARAkEtpB8yyI64fflJYdj96wlsyxmc9KwDRCnWQ8gxVhqUnc9bpXhYkzyfU+Qm98RuKev9Z3CkgBB5CkY3I/YCp+PUev2a2canuAzZfP1A72hHprygBYYPmjIwOq7Rg== 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=xzigtSLOhnEm/3jzO+ojdi4ugIrKKVRZMdTKswuh48k=; b=ujsLU93NBWWUX69VWe5/xaO7lxpA4xEVmTM8gSRhvqOY54LpFLU2CTuAWR73o8GCX4LeixYERTux34AVRhRYQ3ti7A9zaPHHHATSUEK9KlL5dcuNQs2FXLnD8M7oSw7h2sMVlccgUk4Uj84sJR2BEKYUY2V9NDUDoAwqnreJfczOsChDd4aYSpxZz/SzEzX5UGi6i6clPPyG04wYPlxOfaN5FJWAJoI/GaTcgOOVtEyvxZ1GlrsohaPkM8MsRFPZh9XYpGvAPbLS+k7i2j9FFaceDHhFjItIQyAnMyQN1XEKW6UGnouP2/CfITLKenPx1t1lHu22MyfG2Hi/xDWYww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xzigtSLOhnEm/3jzO+ojdi4ugIrKKVRZMdTKswuh48k=; b=Cnn7FgGd29aMfD0r8+jqS6g3nxK7UBUXTIwOs24oGAXy3FZAqaIDO9tshp1Y9HjZvqEPTfY85NTb/82IzkiK7raejh3ghQt40yb6L7768Eae8h8sZxHnJ4Ao+Qybk0Eo74+e8RUf0UMbmtv3TNTHwoZ+S1WdTrbcaJH9a/44P4E= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; 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; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Jiqian Chen To: CC: Huang Rui , Jiqian Chen , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , "Julien Grall" , Stefano Stabellini Subject: [PATCH v5 06/10] vpci: Hide extended capability when it fails to initialize Date: Mon, 26 May 2025 17:45:55 +0800 Message-ID: <20250526094559.140423-7-Jiqian.Chen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250526094559.140423-1-Jiqian.Chen@amd.com> References: <20250526094559.140423-1-Jiqian.Chen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A106:EE_|DS4PR12MB9707:EE_ X-MS-Office365-Filtering-Correlation-Id: f472eaff-55aa-42d4-969b-08dd9c3a30cf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dU1hSmNscXNrWENJaklXQ3JwQjBpaHMyN3o1bngxOEM2eGdSSzdKRU9Kd0tR?= =?utf-8?B?aWtMN0tWcSs1OVVYV3d0SXlJem53Mk5vblJ0SlFSbFNHL1NZV3FFcXNQMVhE?= =?utf-8?B?SjR5TXhjT1c2b2l4a2pDbTRZR3NBZkdUdEJ4dFJkcHZuRGtYdjU1T2kwTW5L?= =?utf-8?B?TzcvYk80K2dKS2J0c3pJUWlzTFBSbEdBZFlKRUFkZHNWYTFjK1hsVUpURmN5?= =?utf-8?B?eUZveDJDb1BqT2w1aUo3RmpQb3dkcTBwNG9PeXlReXF1T09BeWpCdGZndk5k?= =?utf-8?B?UDZXc0ZnWWlxTEtPbFVJVlFnWTlkdGF0QmFaK1g4NUtQa29ucGFOaWxKZWEv?= =?utf-8?B?dElPN0NxenJOT3YvOXpZV2dkcHlYeTdzcWZtcm9Mcmp4eVRYalM2a3g5RDZp?= =?utf-8?B?NEd1UjMwdHRTTUNlbGlsMU9wZ2lHUnA0V2h6VHhVdDZwRjdXVERhcmdTTnBl?= =?utf-8?B?WWpPUHNRRXV5dmt3V0Nsc3BFdFBzSVN2eEFQS3RmbmwyTzZHVVNWcllYMHQw?= =?utf-8?B?Q01tTTRKZ2JNKzdlN2ZVU2FBcjJSVVR1RWNXbFlFb09aNFVOb3ptUjFlMnpy?= =?utf-8?B?TkdzdFZNZW5iS1N6RnNyZlAvSjZHNG11d0liaW1xdWFHOHYyNHZMRm85bi9X?= =?utf-8?B?WEYzaXh6YXRZUTlHQmJPMmM3NllNeGQ2YmQrRWtWSW5RZ20wQUl6Tnh1bXdr?= =?utf-8?B?eE9tYVg0TzBVd1RvK0U4SUtMdmRNMjdtdFpOTTFiMC9ZRjQ5S1RDYUdINEpa?= =?utf-8?B?VkdtV2FyeG5qdC9LbGVEclFSUDFuT3VxUkFDcVhrME9xN1FlWWdVNHhRQ3Q0?= =?utf-8?B?b0R3WFdnOGRPdndKU1Z6a0ptMkNnSW5jNE9RZE4rblc4a3F2REpqWDRPZWZK?= =?utf-8?B?VTk4U0lBZjVHaWRpME9NbGRkU3JRL2V4U0gxUHpPUXF1NGU1d3ZxUDJ0YThJ?= =?utf-8?B?a0F1RlJ0andQRWVldUJsYVlyaDBrNWVDUlQ1K0lpMXJyM0pqaEJYTjJaQXVH?= =?utf-8?B?aXBMUjVTUWsyclJmanpzNEhGbjQ5bGJCekxTbzk3Rk1ncGJnbTM3UzdCQzBB?= =?utf-8?B?QnpLT3BWR0R1aXNjTW1kZmRRamh4NDZIeGVGd0tWYVlaTTZ4N0JqZEVESXlH?= =?utf-8?B?WEU1OUhwSG0zMnAxRDF4aFh4blQ3LytLL3BoREhYUkJKeWZnbUhPeWtvbEpE?= =?utf-8?B?dWE3VnhVVlIwYVlCZVg0MmFnZHY1L0hyMFJZYTdxT04vQXc4Z0gyMEV4RW9o?= =?utf-8?B?aCtmeDdDQnRwY0ZSa2MvTFdDdnloSHBmekRDOWVSVUoydUVtVHBWaTNXMThG?= =?utf-8?B?YnkrRC84Z1V6VHQrRGFuK01rU2VjbE82aXdLdHRKOHlHdmh5cEZ2WXlPMTFq?= =?utf-8?B?UVlsL2JodkVveHVDSk5NeVB3WFdOdSt4andPT1JMSlN2ZDdnV3NucEhlUWZS?= =?utf-8?B?RlFwZGFrYVpzWmVKTjlWR2twVktPV1pPRlhMd1BPbkpLUkx1RnFoVm1CWTdC?= =?utf-8?B?Y25zTHV1WUVRUTZFQzNXNW5YdGI2NHBXbTZFTlptUVZrWW1jM05mb1F2ZzlP?= =?utf-8?B?Q3lKa0sra0RPZ243UDFUR2w3Zzhvam9BMmdIcXhLb0tNVHRBZElPQzcxd1lv?= =?utf-8?B?bW5VeVZKM1Rkd3dVbk9pVFk5OCszcVJFeE96ODE5Vzh1bFlXMlpOQkdicFQv?= =?utf-8?B?V09tNGpiZG9wMTF2bTArWEpNNDJCNytsK0Q5bU8zQ2haRXpEV0poMTFka01H?= =?utf-8?B?S0N3akJ0amxKTUhuZlUvRDMxMVR6ZWV2a1Fic3J4WUZYa29MK2ZjQjRvb08v?= =?utf-8?B?cldBbHFaRjJPRGo5WW9Sc084dzFpS1dhcHdCNXRlWW1pb3VmcnV2eUZpdmQy?= =?utf-8?B?RzFQU1FicWJybHhxQTB4UGFsWmozNXp4MDNqTHBxdllaUzRwN0dPejQyM2lU?= =?utf-8?B?dkJicWcrdHNkRGg5a0owS0VxdmVRcVpEYk5TTG5yRWtMbDlHdldIMXNBWk42?= =?utf-8?B?MWRrQ1NTS25DRFJDY3Z0VnlZWEhVbzZlay81TXVrMGxOK0VMb001cTI2Y1lk?= =?utf-8?Q?T1N0H/?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(82310400026)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2025 09:46:29.6973 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f472eaff-55aa-42d4-969b-08dd9c3a30cf X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A106.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9707 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748252818521116600 When vpci fails to initialize a extended capability of device, it just returns an error and vPCI gets disabled for the whole device. So, add function to hide extended capability when initialization fails. And remove the failed extended capability handler from vpci extended capability list. Signed-off-by: Jiqian Chen --- cc: "Roger Pau Monn=C3=A9" cc: Andrew Cooper cc: Anthony PERARD cc: Michal Orzel cc: Jan Beulich cc: Julien Grall cc: Stefano Stabellini --- v4->v5 changes: * Modify the hex digits of PCI_EXT_CAP_NEXT_MASK and PCI_EXT_CAP_NEXT to be= low case. * Rename vpci_ext_capability_mask to vpci_ext_capability_hide. v3->v4 changes: * Change definition of PCI_EXT_CAP_NEXT to be "#define PCI_EXT_CAP_NEXT(hea= der) (MASK_EXTR(header, PCI_EXT_CAP_NEXT_MASK) & 0xFFCU)" to avoid redundan= cy. * Modify the commit message. * Change vpci_ext_capability_mask() to return error instead of using ASSERT. * Set the capability ID part to be zero when we need to hide the capability= of position 0x100U. * Add check "if ( !offset )" in vpci_ext_capability_mask(). v2->v3 changes: * Separated from the last version patch "vpci: Hide capability when it fail= s to initialize". * Whole implementation changed because last version is wrong. This version gets target handler and previous handler from vpci->handlers= , then remove the target. * Note: a case in function vpci_ext_capability_mask() needs to be discussed, because it may change the offset of next capability when the offset of ta= rget capability is 0x100U(the first extended capability), my implementation is= just to ignore and let hardware to handle the target capability. v1->v2 changes: * Removed the "priorities" of initializing capabilities since it isn't used= anymore. * Added new function vpci_capability_mask() and vpci_ext_capability_mask() = to remove failed capability from list. * Called vpci_make_msix_hole() in the end of init_msix(). Best regards, Jiqian Chen. --- xen/drivers/vpci/vpci.c | 100 +++++++++++++++++++++++++++++++++++-- xen/include/xen/pci_regs.h | 5 +- 2 files changed, 100 insertions(+), 5 deletions(-) diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 60e7654ec377..2d4794ff3dea 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -176,6 +176,98 @@ static int vpci_capability_hide(struct pci_dev *pdev, = unsigned int cap) return 0; } =20 +static struct vpci_register *vpci_get_previous_ext_cap_register( + struct vpci *vpci, unsigned int offset) +{ + uint32_t header; + unsigned int pos =3D PCI_CFG_SPACE_SIZE; + struct vpci_register *r; + + if ( offset <=3D PCI_CFG_SPACE_SIZE ) + { + ASSERT_UNREACHABLE(); + return NULL; + } + + r =3D vpci_get_register(vpci, pos, 4); + if ( !r ) + return NULL; + + header =3D (uint32_t)(uintptr_t)r->private; + pos =3D PCI_EXT_CAP_NEXT(header); + while ( pos > PCI_CFG_SPACE_SIZE && pos !=3D offset ) + { + r =3D vpci_get_register(vpci, pos, 4); + if ( !r ) + return NULL; + header =3D (uint32_t)(uintptr_t)r->private; + pos =3D PCI_EXT_CAP_NEXT(header); + } + + if ( pos <=3D PCI_CFG_SPACE_SIZE ) + return NULL; + + return r; +} + +static int vpci_ext_capability_hide(struct pci_dev *pdev, unsigned int cap) +{ + const unsigned int offset =3D pci_find_ext_capability(pdev->sbdf, cap); + struct vpci_register *rm, *prev_r; + struct vpci *vpci =3D pdev->vpci; + uint32_t header, pre_header; + + if ( !offset ) + { + ASSERT_UNREACHABLE(); + return 0; + } + + spin_lock(&vpci->lock); + rm =3D vpci_get_register(vpci, offset, 4); + if ( !rm ) + { + spin_unlock(&vpci->lock); + return -ENODEV; + } + + header =3D (uint32_t)(uintptr_t)rm->private; + if ( offset =3D=3D PCI_CFG_SPACE_SIZE ) + { + if ( PCI_EXT_CAP_NEXT(header) <=3D PCI_CFG_SPACE_SIZE ) + rm->private =3D (void *)(uintptr_t)0; + else + /* + * If this case removes target capability of position 0x100U, = then + * it needs to move the next capability to be in position 0x10= 0U, + * that would cause the offset of next capability in vpci diff= erent + * from the hardware, then cause error accesses, so here choos= es to + * set the capability ID part to be zero. + */ + rm->private =3D (void *)(uintptr_t)(header & + ~PCI_EXT_CAP_ID(header)); + + spin_unlock(&vpci->lock); + return 0; + } + + prev_r =3D vpci_get_previous_ext_cap_register(vpci, offset); + if ( !prev_r ) + { + spin_unlock(&vpci->lock); + return -ENODEV; + } + + pre_header =3D (uint32_t)(uintptr_t)prev_r->private; + prev_r->private =3D (void *)(uintptr_t)((pre_header & + ~PCI_EXT_CAP_NEXT_MASK) | + (header & PCI_EXT_CAP_NEXT_MASK)= ); + list_del(&rm->node); + spin_unlock(&vpci->lock); + xfree(rm); + return 0; +} + static int vpci_init_capabilities(struct pci_dev *pdev) { for ( unsigned int i =3D 0; i < NUM_VPCI_INIT; i++ ) @@ -209,11 +301,11 @@ static int vpci_init_capabilities(struct pci_dev *pde= v) pdev->domain, &pdev->sbdf, is_ext ? "extended" : "legacy", cap); if ( !is_ext ) - { rc =3D vpci_capability_hide(pdev, cap); - if ( rc ) - return rc; - } + else + rc =3D vpci_ext_capability_hide(pdev, cap); + if ( rc ) + return rc; } } =20 diff --git a/xen/include/xen/pci_regs.h b/xen/include/xen/pci_regs.h index 27b4f44eedf3..3b6963133dbd 100644 --- a/xen/include/xen/pci_regs.h +++ b/xen/include/xen/pci_regs.h @@ -448,7 +448,10 @@ /* Extended Capabilities (PCI-X 2.0 and Express) */ #define PCI_EXT_CAP_ID(header) ((header) & 0x0000ffff) #define PCI_EXT_CAP_VER(header) (((header) >> 16) & 0xf) -#define PCI_EXT_CAP_NEXT(header) (((header) >> 20) & 0xffc) +#define PCI_EXT_CAP_NEXT_MASK 0xfff00000U +/* Bottom two bits of next capability position are reserved. */ +#define PCI_EXT_CAP_NEXT(header) \ + (MASK_EXTR(header, PCI_EXT_CAP_NEXT_MASK) & 0xffcU) =20 #define PCI_EXT_CAP_ID_ERR 1 #define PCI_EXT_CAP_ID_VC 2 --=20 2.34.1 From nobody Fri Oct 31 09:42:12 2025 Delivered-To: importer@patchew.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=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748252816; cv=pass; d=zohomail.com; s=zohoarc; b=hR7Ylvuo/rZKsvfI+QL2P+IAKR5C9t4oOiW9riSun4dq7BI9usFWpYHWyy6RzY5GtjgpokoemFpNPw13//FytURygc2NBkP/93oeFYe8HgctrD2K1a9jLJgsjKoj/DQRlcufLZRyHRYAJvG18uztDeAn/X3HSPkRSa76b4QlDE0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748252816; 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=K+CghjyF0DfUwZBc7m8sGLxK/5lEr3a3ULjAAbU6V14=; b=ipwjGMKVqqAttnjvxd1vvBxIetIncqJrqk5BO3KkC7f6R7M8SMU8E4oOEMJTC69gy3fCOUWSPA1q63eR52cvxMIf+tOt3WG14ACtdRWIKPtNUzErVFuN9YAxxHFsVJTSAk/Kpn9IcQMyPCM04G0N5T/iSZnzWu1BIIx5SpB2Epg= 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=amd.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 1748252816395132.2650581503691; Mon, 26 May 2025 02:46:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997349.1378296 (Exim 4.92) (envelope-from ) id 1uJUPn-0005Ws-32; Mon, 26 May 2025 09:46:39 +0000 Received: by outflank-mailman (output) from mailman id 997349.1378296; Mon, 26 May 2025 09:46:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPm-0005Wc-Vg; Mon, 26 May 2025 09:46:38 +0000 Received: by outflank-mailman (input) for mailman id 997349; Mon, 26 May 2025 09:46:37 +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 1uJUPl-0003hH-3q for xen-devel@lists.xenproject.org; Mon, 26 May 2025 09:46:37 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on20604.outbound.protection.outlook.com [2a01:111:f403:2412::604]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4fbf4d14-3a16-11f0-a2fb-13f23c93f187; Mon, 26 May 2025 11:46:36 +0200 (CEST) Received: from BL0PR0102CA0017.prod.exchangelabs.com (2603:10b6:207:18::30) by PH7PR12MB8426.namprd12.prod.outlook.com (2603:10b6:510:241::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.21; Mon, 26 May 2025 09:46:31 +0000 Received: from BL02EPF0001A106.namprd05.prod.outlook.com (2603:10b6:207:18:cafe::d5) by BL0PR0102CA0017.outlook.office365.com (2603:10b6:207:18::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:22 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BL02EPF0001A106.mail.protection.outlook.com (10.167.241.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:30 +0000 Received: from cjq-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 26 May 2025 04:46:28 -0500 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: 4fbf4d14-3a16-11f0-a2fb-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JJ8Esg4i7wvHMrzqORg86Mh9U0IN2HBwdlNGfqbS3XtoIULUBFw8t9fjUm9hWqMs1SplsSk0W2/hx88ZthdLd+ygwxpK15LxNEx6HjwNZfI1RKLblE6XR5DB9vXJ/tAhRV/dcAXZIUSYOBKjXdf5zEwzkfKiCW7tGGduz+rZdfNUFxUj209FMNJWFtP4+NNa1P9i5BCO+pFPdKpzE1SM925vL1rIU5lWAsF1zqASdlk1soKsMzrgVGHJEJsRuQHYwLqTcfZxqi8tp6/fQ+7bx7sUC9iHDciVowEUrrSXH/6WsiqMRsJLDpg6Er9RTl/7iUP3Gb63/V6MIOkATLCzLw== 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=K+CghjyF0DfUwZBc7m8sGLxK/5lEr3a3ULjAAbU6V14=; b=AhD61NMgmWkvzoegxQX7NPI4cDqz09GTXuDPg49+UGImRMufmSeoNGzSlR5VxHlgBy47+ld+JjPVJXYjgwicg+UY3EqPT3P69Pa0kLRz/CLNhWXnZnE9YH+2X/87Ad6UQd1PKcyWuCbUgr+f5bWcwjre9ibvHkAabOwJ5ALZ0A5rvtsWNqY2Silcyq+owyDIb9RDYJFTSFHR9fs0PdL32fq0GWUxHaAfPuglvHmm3LUuHJRQFJjthIY3X39ENzxbsf77X0Ms+Kmy2r27s2Ou35evYnKKYx72zKHVOCqIm0wQzlI6U90eWpZkSEGIy+usFdWNuuvzD8Ff6LUre4kGew== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K+CghjyF0DfUwZBc7m8sGLxK/5lEr3a3ULjAAbU6V14=; b=aJL7pNmGIoVNvSrwmK6b4lTMpgzDKDw0jGr338ihcwr/K0BSkaFzsCYK/ZyhfuxUZ/VIrLqBLnVzddlP88rblO0VCQdT60h25UaQAN/X2U3YC7alAUwSdKnmIM4TPQvXFMVDyh9zf+P6gIcqu2VB5U6Wpyuy6N5snKbYXjIu7zU= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; 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; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Jiqian Chen To: CC: Huang Rui , Jiqian Chen , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Anthony PERARD Subject: [PATCH v5 07/10] vpci: Refactor vpci_remove_register to remove matched registers Date: Mon, 26 May 2025 17:45:56 +0800 Message-ID: <20250526094559.140423-8-Jiqian.Chen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250526094559.140423-1-Jiqian.Chen@amd.com> References: <20250526094559.140423-1-Jiqian.Chen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A106:EE_|PH7PR12MB8426:EE_ X-MS-Office365-Filtering-Correlation-Id: 589ce9b0-eea3-4ff4-0fd1-08dd9c3a3166 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?utf-8?B?TDdYNHk5ek1KWnFEZGJTdmVjSU5KSjdVdGtFVkpBN3E5VEpPYTRDNTJkWUpt?= =?utf-8?B?bWxFWWdCRUplNUxLcTdxVC85MUxmaDhUSW9td0syaWYzeW5TVE5EVnM1ODc2?= =?utf-8?B?aGQyaUt1SVM0OHFNZ2p1NzNqdnB2TUVLbHFiNTJiTlpFN2gxdWpkWnZiQ2pI?= =?utf-8?B?RldBdDZrdUo4S0VzemcvZUtiV1NKWTlFdFJkam5hMjZ5Nm1QSFlTTGpTZXVN?= =?utf-8?B?VTN4T2hHMlRNQ2pOTC9tSTFrU24xRUYzRDNOSVNRUFZtTlhPbkpWVzJQWXRE?= =?utf-8?B?aXNjbGZobnFKWWRkOHREYjdoZmllWDJlWnJZT0FDQWorcGV4dlR2RUVqekl1?= =?utf-8?B?OStHaWU2VklERW1lRXVUQWZBazJFTGtUNUlmd1NnS0plejVCTWF2cklqTFd6?= =?utf-8?B?dVdPVDVlVG13dmNCNTNUS2d5YWZVeXBFNTUwc0puWTRMVkd0VWJEeUw0VzJP?= =?utf-8?B?Z0x5dHluMmRkaEZiZG1FSlFWWkFqa0d5V2dTMWNUTGM4K1p0NmZrcyt6SHBY?= =?utf-8?B?UlJ0UmlRQ0cwWVVJUWlwNkMvQThodEc3R3ZhL1NWWm9wODJrazNIVUViTCt3?= =?utf-8?B?aDhBamdRUGhISVFwTGs4anVyWDlwMWt6Y045RjNFbWU5ZjliSVd4d0dNcDg4?= =?utf-8?B?OCtrSzZyL2dSYTkyNkIveTJ5bnZ4dUZkNHpjUk83RlhMNkJrQjA0eXRQMldK?= =?utf-8?B?bzhXNWdIWTVNaUNFUmRVMXBSS3JJQkpmRmJWdXZpcUl4U3JhMDhPM1dxOFBi?= =?utf-8?B?TjVaSlZqZGlCRlA3VEloMmc0ekZCR0NwbE5JRjhZcXk0NmJhWUpRekNUK2JG?= =?utf-8?B?ZE4wZzZDRUlFTU5LT1NKNzYxQ2lndXA0dmJDSENPK1htS1FsY2RKTHUzV0My?= =?utf-8?B?bVd3S0VLU0VURFFpTEtBU2J0Z0ROSDdmRm5PWlI5Mkw1N1A1dzNRcVF3YjU5?= =?utf-8?B?TWYxbkJnZWdyckRHeVJINE5Sd1RBYWpFYklaeUVySkVYMmlCYjloYUlESmdE?= =?utf-8?B?cHRZL3J4ZkRBOXJKaEwzYk9UNXArMFJkbThMS2dYd09iUXhKOEg4bW1pUUZ4?= =?utf-8?B?K094ejFiRnlYeXNMb0tpUWRTNHhzZXlYUDJnbVJQMldoYUZZU1hrcmpYYnJv?= =?utf-8?B?RnFOQWp2NXR1MnVMUEZjOTJOd3VXaldhSUJYaDFSbTluU2ExazJaQXIzWFZT?= =?utf-8?B?SmVYdURzcGpTWWxPM2hKZkdLTG56UkM3ckswRzVLb3Jycm1TK0JFMmc4cjEr?= =?utf-8?B?VTc0diszTmk1U2pjbnBQL0pqeWFoNnUwTm9jUFRhSTR6cFVCSGZGM3c3am1y?= =?utf-8?B?Zyt2a0w4RWZ2dklRc08xOWFCSGl0aWJld3lPL25qZGx0dzJJckp0aFVVTmJp?= =?utf-8?B?bUZteHFrWkF2MlNCL2RScGdWMDZJejdvMXAvZEZQdm03UGQxc01JSXdCRDh0?= =?utf-8?B?WmxBVitsZUw3RDZxTmVYQWRPWUIvRmdvbGhIRTVHZzFPQzIzbjNWcWNlY1dR?= =?utf-8?B?MTN0ZkxxUGR2aDlZQVk2U2cybGRLa1lnZzBtNXFSQTZqVnVQOHljU2l2ZFRj?= =?utf-8?B?dlcralRPQXR1L3h6RjdQTFVTUXNDUWFwRzVtNEJudnVSQkdZclFvRVZ0VmMz?= =?utf-8?B?d1Uzb1E3RXE5OElKQlF6L1VnWnFjeGRCK3pWTmQxVVdhamlpN2tHbkJJWDFl?= =?utf-8?B?Y2E5a2UzZlBpbTdJOERFaDl5YkNNQ3JkbkJxMFdHMmI3VW1BM0lmbmV2Vkh5?= =?utf-8?B?aHY1OWtxNW5YYzc0eWtlWHRBZ3lvanhJWlBFNnRwSEJSTjU0WlBwS1pIWnBX?= =?utf-8?B?VjdmMVdvWEtHWGxRblZFbTlrTG1LQ20zQ0xjaHdKWHp2OEVpc1h2c3hmUEtv?= =?utf-8?B?dHlkQWo2RElYZnZYdVdPQkxjUEVEMzMwNDVLa0pCSGpQbTBXdHpCTjJBbkRS?= =?utf-8?B?V3dHNGVXMkVQR1hIN0EwNDFXZUM2SmN1em1mRXNpM0F2N3hpOVZWcEZKc3g4?= =?utf-8?B?VmVnRzBoQ3NGRVUyN3pkT3lPR2crWHhTYjZrQlRGd1pMYW5qVmhtSzBtanVv?= =?utf-8?Q?Me0ufd?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(1800799024)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2025 09:46:30.6831 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 589ce9b0-eea3-4ff4-0fd1-08dd9c3a3166 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A106.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8426 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748252818451116600 vpci_remove_register() only supports removing a register in a time, but the follow-on changes need to remove all registers within a range. So, refactor it to support removing all matched registers in a calling time. And it is no matter to remove a non exist register, so remove the __must_check prefix. Signed-off-by: Jiqian Chen Reviewed-by: Roger Pau Monn=C3=A9 --- cc: "Roger Pau Monn=C3=A9" cc: Anthony PERARD --- v4->v5 changes: No. v3->v4 changes: * Use list_for_each_entry_safe instead of list_for_each_entry. * Return ERANGE if overlap. v2->v3 changes: * Add new check to return error if registers overlap but not inside range. v1->v2 changes: new patch Best regards, Jiqian Chen. --- tools/tests/vpci/main.c | 4 ++-- xen/drivers/vpci/vpci.c | 38 ++++++++++++++++++++------------------ xen/include/xen/vpci.h | 4 ++-- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/tools/tests/vpci/main.c b/tools/tests/vpci/main.c index 33223db3eb77..ca72877d60cd 100644 --- a/tools/tests/vpci/main.c +++ b/tools/tests/vpci/main.c @@ -132,10 +132,10 @@ static void vpci_write32_mask(const struct pci_dev *p= dev, unsigned int reg, rsvdz_mask)) =20 #define VPCI_REMOVE_REG(off, size) = \ - assert(!vpci_remove_register(test_pdev.vpci, off, size)) + assert(!vpci_remove_registers(test_pdev.vpci, off, size)) =20 #define VPCI_REMOVE_INVALID_REG(off, size) = \ - assert(vpci_remove_register(test_pdev.vpci, off, size)) + assert(vpci_remove_registers(test_pdev.vpci, off, size)) =20 /* Read a 32b register using all possible sizes. */ void multiread4_check(unsigned int reg, uint32_t val) diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 2d4794ff3dea..d3e9a76d0cf6 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -163,7 +163,7 @@ static int vpci_capability_hide(struct pci_dev *pdev, u= nsigned int cap) =20 prev_next_r->private =3D next_r->private; /* - * Not calling vpci_remove_register() here is to avoid redoing + * Not calling vpci_remove_registers() here is to avoid redoing * the register search */ list_del(&next_r->node); @@ -171,7 +171,7 @@ static int vpci_capability_hide(struct pci_dev *pdev, u= nsigned int cap) xfree(next_r); =20 if ( !is_hardware_domain(pdev->domain) ) - return vpci_remove_register(vpci, offset + PCI_CAP_LIST_ID, 1); + return vpci_remove_registers(vpci, offset + PCI_CAP_LIST_ID, 1); =20 return 0; } @@ -561,34 +561,36 @@ int vpci_add_register_mask(struct vpci *vpci, vpci_re= ad_t *read_handler, return 0; } =20 -int vpci_remove_register(struct vpci *vpci, unsigned int offset, - unsigned int size) +int vpci_remove_registers(struct vpci *vpci, unsigned int start, + unsigned int size) { - const struct vpci_register r =3D { .offset =3D offset, .size =3D size = }; - struct vpci_register *rm; + struct vpci_register *rm, *tmp; + unsigned int end =3D start + size; =20 spin_lock(&vpci->lock); - list_for_each_entry ( rm, &vpci->handlers, node ) + list_for_each_entry_safe ( rm, tmp, &vpci->handlers, node ) { - int cmp =3D vpci_register_cmp(&r, rm); - - /* - * NB: do not use a switch so that we can use break to - * get out of the list loop earlier if required. - */ - if ( !cmp && rm->offset =3D=3D offset && rm->size =3D=3D size ) + /* Remove rm if rm is inside the range. */ + if ( rm->offset >=3D start && rm->offset + rm->size <=3D end ) { list_del(&rm->node); - spin_unlock(&vpci->lock); xfree(rm); - return 0; + continue; } - if ( cmp <=3D 0 ) + + /* Return error if registers overlap but not inside. */ + if ( rm->offset + rm->size > start && rm->offset < end ) + { + spin_unlock(&vpci->lock); + return -ERANGE; + } + + if ( start < rm->offset ) break; } spin_unlock(&vpci->lock); =20 - return -ENOENT; + return 0; } =20 /* Wrappers for performing reads/writes to the underlying hardware. */ diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index e5e3f23ca39c..67a831d8e9a0 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -71,8 +71,8 @@ static inline int __must_check vpci_add_register(struct v= pci *vpci, size, data, 0, 0, 0, 0); } =20 -int __must_check vpci_remove_register(struct vpci *vpci, unsigned int offs= et, - unsigned int size); +int vpci_remove_registers(struct vpci *vpci, unsigned int start, + unsigned int size); =20 /* Generic read/write handlers for the PCI config space. */ uint32_t vpci_read(pci_sbdf_t sbdf, unsigned int reg, unsigned int size); --=20 2.34.1 From nobody Fri Oct 31 09:42:12 2025 Delivered-To: importer@patchew.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=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748252821; cv=pass; d=zohomail.com; s=zohoarc; b=R5GTFsZhh7KoJPl2N/kQTTR5k/SY2+WOsxBG3sae4Y5+dVTO+FGicekKKy3QPVDkfN6e5Urb4IefpzCcwY786XT4X+q+XqvTyX10sUg2wY2g80v7MO6LZp60mLTcEd/qFIJccpn2TEuXaQHk6wPu+GKOu2JP6udMOju8bApgf74= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748252821; 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=fd0GbwbRrEi2YvKEmsoXyPAhLSxsOxC7xEEZ+gZkL0U=; b=AaUdW9QjNBCpX2ICMwKCBGE10FSQuGiL2K3GZB9rNwWKF0QA6blb4IvYE55HkDuu9xGl5OSKNIJm2LpRRGr7g+WIHMp6Inu6q10+qbBtHZMpI6UPztsjH97ZzEHfLSvDBryZrg/xX+7eR3+QbC6ML9FKCHNPvGdVNAJvgLfQ5rs= 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=amd.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 1748252821937756.680727722017; Mon, 26 May 2025 02:47:01 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997350.1378306 (Exim 4.92) (envelope-from ) id 1uJUPo-0005nj-Hx; Mon, 26 May 2025 09:46:40 +0000 Received: by outflank-mailman (output) from mailman id 997350.1378306; Mon, 26 May 2025 09:46:40 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPo-0005ms-BT; Mon, 26 May 2025 09:46:40 +0000 Received: by outflank-mailman (input) for mailman id 997350; Mon, 26 May 2025 09:46:38 +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 1uJUPm-0003hH-48 for xen-devel@lists.xenproject.org; Mon, 26 May 2025 09:46:38 +0000 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2061c.outbound.protection.outlook.com [2a01:111:f403:2407::61c]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 5074f9b2-3a16-11f0-a2fb-13f23c93f187; Mon, 26 May 2025 11:46:37 +0200 (CEST) Received: from MN2PR13CA0028.namprd13.prod.outlook.com (2603:10b6:208:160::41) by MW3PR12MB4427.namprd12.prod.outlook.com (2603:10b6:303:52::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.20; Mon, 26 May 2025 09:46:32 +0000 Received: from BL02EPF0001A105.namprd05.prod.outlook.com (2603:10b6:208:160:cafe::c) by MN2PR13CA0028.outlook.office365.com (2603:10b6:208:160::41) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.15 via Frontend Transport; Mon, 26 May 2025 09:46:31 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BL02EPF0001A105.mail.protection.outlook.com (10.167.241.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:31 +0000 Received: from cjq-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 26 May 2025 04:46:30 -0500 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: 5074f9b2-3a16-11f0-a2fb-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ikcbm6HD4qH2L/2d2H/bs2mbVHQHqBqSomNiMa0xrMUwtQ9Fpwrd1O5HBvxJpK/e4B9k207vuiMHdMsAhisqqCqw34gKEj48igtx9ZgnhfBoJCNCejYJhlRqtuVNHrhuLOLK7IUCfosVf6Md++PwgsGwJiE01By/3NN7uL9EhC67qZ6+oOGLZEXshxraHBR+btZbLd4WOUrxW6fAog3fBjbb41v1Ykq6ipZtoQMsIAQhJTcv3r9BKdR6LHqk8qz6Bd8Ozmc2q8ONpMS7cTt+kmw5pYqnsmNTwLRQW2msGG+8zLrHlvxVX7haqvUWXiTOJXPNqSeeZ2JFRfua6C84oQ== 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=fd0GbwbRrEi2YvKEmsoXyPAhLSxsOxC7xEEZ+gZkL0U=; b=F4pwAjSxYDA0Vz/kwj/WR+cvsAHb/isYncvU/cVz546pkb6udP1btDSyUmnYP/xM1Gxo7Uhklv/4nOlSWwfVS5o/5bx8CAigdkzobbard50CaEFcF9a1iIeBYi5PjJkyVMqU6+Z+X12TjcRdaXpAiTwqc38p8ELCR/JCvMdEaA8AArMNibdmeFdJkA1z9L+vjWgh+dhuMRgee4YybQkcPd3bbJlXuD0hQoqUlOpfaZJsJDFBYE4yLKxf5GVhgrpw9ALXiGNo7OiiJXYDviZZq0jYw/sMCsV4OXOVe3ejc3rCL1MJpWaOI45SVbjACscNprlm4XrC5JZiINLsThMyQw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fd0GbwbRrEi2YvKEmsoXyPAhLSxsOxC7xEEZ+gZkL0U=; b=RwCt7JSIapsW4Kdmhj4iZAEAPD+vuIAD5PHcEGEdR0iP071zx7YtpwPKO4hz4ssKWRHOP3NoaEMAQSERRK9jmAfblgJMslu31/KG8zfnggVeeNUns3xl+N3vAFZqHak6WID6rLbKhKm40X1JJ2TN/lz8lsR3aLF1QV0Y5tRleT4= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; 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; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Jiqian Chen To: CC: Huang Rui , Jiqian Chen , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 08/10] vpci/rebar: Free Rebar resources when init_rebar() fails Date: Mon, 26 May 2025 17:45:57 +0800 Message-ID: <20250526094559.140423-9-Jiqian.Chen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250526094559.140423-1-Jiqian.Chen@amd.com> References: <20250526094559.140423-1-Jiqian.Chen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A105:EE_|MW3PR12MB4427:EE_ X-MS-Office365-Filtering-Correlation-Id: 1362b4e4-b37d-4666-54e6-08dd9c3a321f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RFV5aU5HcEtiWjFEQ0RSM2VrU29iSjM4U055VjM4SWpCU0JMbFVCRU9RL3lv?= =?utf-8?B?eGVsOVVJVDdmU3VRb1IwMkh6cGM0TSt6dGFaQU5FZ1F2UVVYZ3VlOFlNNDZT?= =?utf-8?B?OEZnRUZtZm44Z3JWY1h3cWgyVHJiL3hyN2xOTFByN0FtUi9Hb045WS9EQUl2?= =?utf-8?B?ZFdyUVZSMzBoUnBrekQwSjNmQnVGdGkvdjNhR0F2UXIrMHowZ05jQWh1VlhQ?= =?utf-8?B?N0tTWTljZHd4UjR2RHpabUdGVmcxRHZ0TXZXdFhzMnNuUGprVm5kOXBMR2M4?= =?utf-8?B?NWxac1hDaVFjVUlCUWNPa3A0WG9xRTFTNEhTWHJNeHRWSzh4TW5wVnBDTUtZ?= =?utf-8?B?OEY3UDF1NTRHZzZPV290RTR5Nk5pVGhiWnZWd2ZhRjc3NUNsd2owcU84SGE3?= =?utf-8?B?a1prZk1ISjlXRkFFOVJiYXNobVNxcUR3U0VjcVlVbkVpQ0x1UHVNNlRscmN0?= =?utf-8?B?TTk4UE1YWDN5QmZoNWZhTnQ4bitZSXJZU0p0bUpyb3VzS0w1Q2J3OS9MUnFG?= =?utf-8?B?RkpOdmdCQUo3alAxaGwwWTh6ZHhLOVI5TmpHMG9LR1ErcWxIT0VJaWdSZUF1?= =?utf-8?B?NGRxTEpQakgzWW8wS2VQeTdXOGRuNHVKOEJkL1R1NUpOdVJYNGFOWFBHOXBC?= =?utf-8?B?cysvd1Z5cFJqOFVmUzFUWUhld0k3SHNyb1BldWVIOWdjVkdCN25WazllMzdH?= =?utf-8?B?M2hDOFFOYXBqNUlWQnZadTFjN2FVNHI2V1JSWmFBRUl6VTVzb0RFa01na2lB?= =?utf-8?B?YTVGSGt0ZHhyN0lpUW8zdllKRWFXL2tKQ2hZdUJOa0lzOXNwN2dmRG9mUHJR?= =?utf-8?B?aCtMRFUxampNNDBTVmdpb05ob2JzcUU0aWVWanZYbVhhN3JSWkowUHoweVZk?= =?utf-8?B?b3JEbml0bjNpNjZCb2dPSVN5YzFsdmhuOUhKREQzR0x6TEplNXlkNEZKczdW?= =?utf-8?B?ZWFpeTBCTWtKaEFjeDZVSVVXZ0UzZVd3eEZYN1JmNTZJbHZyeDNYMENwbHk2?= =?utf-8?B?NDhXQ000akpjTjZ2Mjg0RVFnQ3VhbUxrNDhxelNRNk5zOThzc1hxWmpBQk1P?= =?utf-8?B?NXRwOTE0UlFTVmhHKzI3ekhLaEUveDRRQ0ZMVVNNbTIzZWtRQjd5UTNWbDZV?= =?utf-8?B?M09xNkdzenJEak9VV1VHVTRjT0h3RDhsanJURDlKMUpXNTMzK1I1V0IyUzlE?= =?utf-8?B?RmM5ZTVBNjJaSWpnMVZaVWJoUmQxdDdMeEtTZUVQbGgyOGI5eHZnSGQvbE5l?= =?utf-8?B?cDROSWV0czZXMmtLa0g5YTdCd2U3RVFRR0Jod0hJb3l5STZNeVpvTGtCRmta?= =?utf-8?B?QitLTGllSEM0WmhNMFhtYlhsK3BOZ2ptTmxMMjc2eDU5bUlDOCtjMytKeGNo?= =?utf-8?B?SENQN2tFa0dNanFtWlg1dWllMU1zcmZxSWtNVW56NlNXQWsyR3BGOFN3Umdq?= =?utf-8?B?WUdoWDd0dzBhWDA0TkRmNWUvTktDQy9XeHRuTGxrMmhXMDVLMlo3N3VuWGZv?= =?utf-8?B?NnNSK24wSHN6dDZsRGFLT3lVL3NhbFhPb0I2SHdncjkyZjhVZGRvYXhKdEcz?= =?utf-8?B?ZEZUOTNKSkJtRTU5WCtWNEVKM212M2MvTzkwb2JldkszM0Y2cW1nLzBJaENM?= =?utf-8?B?U21BRno5Zmpxazd4Ylg1em96UzdyUWtzUURVKzgwWHg1aG5hY0dEaEp2VEJv?= =?utf-8?B?dDdlamhsS1lRakYram1BZlJWWkw0VzJwMjZNUU5QTU5DZ2NwdjV4Q2dqQURB?= =?utf-8?B?Ui85Y2ZUSzJKSEE3Zk1DYzNxT2hkcjhVNUxvUFRGbWwyMUVwS084M2RDV2Iz?= =?utf-8?B?dGptV2VWb0JyYjFoQUd1azZGRU9PdjR4bjVQUEJnczRPOFVkNkt3NmVXbDNS?= =?utf-8?B?MkxNUDY3aXUzcnZrV0dpQ3dVaXA1QWdtem8yUnlrR1BDL1dDbEMweER3NWQ3?= =?utf-8?B?bGZJdHpvcFR1NnZWWk5VVWhSY0JYVEdZdVFiMW9uOVdnaVpnZm54bEFWVElz?= =?utf-8?B?SUI2dHk5QkJ6WjU5VENRd01LcjBEN1RlQW9uSnZIeUN5b1VSdnV3cjV1RmpX?= =?utf-8?Q?yqM9Vr?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(376014)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2025 09:46:31.8988 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1362b4e4-b37d-4666-54e6-08dd9c3a321f X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A105.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR12MB4427 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748252824572116600 When init_rebar() fails, current logic return fail and free Rebar-related resources in vpci_deassign_device(). But the previous new changes will hide Rebar capability and return success, it can't reach vpci_deassign_device() to remove resources if hiding success, so those resources must be removed in cleanup function of Rebar. To do that, implement cleanup function for Rebar. Signed-off-by: Jiqian Chen --- cc: "Roger Pau Monn=C3=A9" --- v4->v5 changes: * Change definition "static void cleanup_rebar" to "static int cf_check cle= anup_rebar" since cleanup hook is changed to be int. v3->v4 changes: * Change function name from fini_rebar() to cleanup_rebar(). * Change the error number to be E2BIG and ENXIO in init_rebar(). v2->v3 changes: * Use fini_rebar() to remove all register instead of in the failure path of= init_rebar(); v1->v2 changes: * Called vpci_remove_registers() to remove all possible registered register= s instead of using a array to record all registered register. Best regards, Jiqian Chen. --- xen/drivers/vpci/rebar.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/xen/drivers/vpci/rebar.c b/xen/drivers/vpci/rebar.c index 9cafd80ca2c9..4b1892fab3d6 100644 --- a/xen/drivers/vpci/rebar.c +++ b/xen/drivers/vpci/rebar.c @@ -49,6 +49,26 @@ static void cf_check rebar_ctrl_write(const struct pci_d= ev *pdev, bar->guest_addr =3D bar->addr; } =20 +static int cf_check cleanup_rebar(struct pci_dev *pdev) +{ + uint32_t ctrl; + unsigned int nbars; + unsigned int rebar_offset =3D pci_find_ext_capability(pdev->sbdf, + PCI_EXT_CAP_ID_REB= AR); + + if ( !rebar_offset || !is_hardware_domain(pdev->domain) ) + { + ASSERT_UNREACHABLE(); + return 0; + } + + ctrl =3D pci_conf_read32(pdev->sbdf, rebar_offset + PCI_REBAR_CTRL(0)); + nbars =3D MASK_EXTR(ctrl, PCI_REBAR_CTRL_NBAR_MASK); + + return vpci_remove_registers(pdev->vpci, rebar_offset + PCI_REBAR_CAP(= 0), + PCI_REBAR_CTRL(nbars - 1)); +} + static int cf_check init_rebar(struct pci_dev *pdev) { uint32_t ctrl; @@ -80,7 +100,7 @@ static int cf_check init_rebar(struct pci_dev *pdev) { printk(XENLOG_ERR "%pd %pp: too big BAR number %u in REBAR_CTR= L\n", pdev->domain, &pdev->sbdf, index); - continue; + return -E2BIG; } =20 bar =3D &pdev->vpci->header.bars[index]; @@ -88,7 +108,7 @@ static int cf_check init_rebar(struct pci_dev *pdev) { printk(XENLOG_ERR "%pd %pp: BAR%u is not in memory space\n", pdev->domain, &pdev->sbdf, index); - continue; + return -ENXIO; } =20 rc =3D vpci_add_register(pdev->vpci, vpci_hw_read32, rebar_ctrl_wr= ite, @@ -97,14 +117,7 @@ static int cf_check init_rebar(struct pci_dev *pdev) { printk(XENLOG_ERR "%pd %pp: BAR%u fail to add reg of REBAR_CTR= L rc=3D%d\n", pdev->domain, &pdev->sbdf, index, rc); - /* - * Ideally we would hide the ReBar capability on error, but co= de - * for doing so still needs to be written. Use continue instead - * to keep any already setup register hooks, as returning an - * error will cause the hardware domain to get unmediated acce= ss - * to all device registers. - */ - continue; + return rc; } =20 bar->resizable_sizes =3D @@ -118,7 +131,7 @@ static int cf_check init_rebar(struct pci_dev *pdev) =20 return 0; } -REGISTER_VPCI_EXTCAP(PCI_EXT_CAP_ID_REBAR, init_rebar, NULL); +REGISTER_VPCI_EXTCAP(PCI_EXT_CAP_ID_REBAR, init_rebar, cleanup_rebar); =20 /* * Local variables: --=20 2.34.1 From nobody Fri Oct 31 09:42:12 2025 Delivered-To: importer@patchew.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=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748252817; cv=pass; d=zohomail.com; s=zohoarc; b=YfO+hC+2NL1xaDR7VZUq7ZcmSaILde6figXueZgs5rYgOdR1+ziMkYaTklB+XgOfkH2B0t8QQcgOoas5iPiARujX3fujFBv5+nx7OWFgyrowXR6QC78VrhLDlHeGQYysxy3ksSqC9isUkNQCTLDt2L9vUEa1hoai8Ug1A6KbRAg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748252817; 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=8aE/xhQc1ScjD8FKImKyyPi2cNcNucokrC3sZcN9VTw=; b=MYiO0v4JUdxqp3rRV2F2an9MaSPNGETLHf9kXVfb4oVRhAMhENAY2TT02XDajLNdfp9e9ElIDGB8Hj3AxxEaJz1LRki85YyEV15BhKpfRCdEdUvB1u0u2XhrbeGEEVp6I+3MJ02WtgSnMEvuiDo9noHo1nFV5OkYhSlBUqWu/UA= 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=amd.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 1748252817798255.76969696526646; Mon, 26 May 2025 02:46:57 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997352.1378310 (Exim 4.92) (envelope-from ) id 1uJUPp-0005xH-9w; Mon, 26 May 2025 09:46:41 +0000 Received: by outflank-mailman (output) from mailman id 997352.1378310; Mon, 26 May 2025 09:46:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPp-0005wE-3F; Mon, 26 May 2025 09:46:41 +0000 Received: by outflank-mailman (input) for mailman id 997352; Mon, 26 May 2025 09:46:39 +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 1uJUPn-0003hH-48 for xen-devel@lists.xenproject.org; Mon, 26 May 2025 09:46:39 +0000 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on20617.outbound.protection.outlook.com [2a01:111:f403:2415::617]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 5091a631-3a16-11f0-a2fb-13f23c93f187; Mon, 26 May 2025 11:46:37 +0200 (CEST) Received: from BL1PR13CA0181.namprd13.prod.outlook.com (2603:10b6:208:2be::6) by IA0PR12MB8279.namprd12.prod.outlook.com (2603:10b6:208:40c::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.25; Mon, 26 May 2025 09:46:33 +0000 Received: from BL02EPF0001A107.namprd05.prod.outlook.com (2603:10b6:208:2be:cafe::6c) by BL1PR13CA0181.outlook.office365.com (2603:10b6:208:2be::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:33 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BL02EPF0001A107.mail.protection.outlook.com (10.167.241.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:33 +0000 Received: from cjq-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 26 May 2025 04:46:31 -0500 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: 5091a631-3a16-11f0-a2fb-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tq1kJrnr/fvzqqisowZKymlNS2/GoPbzezudxgpFD+jNGFvd5rNS3Wxow27lLS9wc9gfVTsrz1y6c1URbpRwCxb71yiCqKdAOJAhB7j6VMfeDWmsH/VmFjmYcMy6SzuomsR6/9r+a83EfBzF2vpyjxrCtXYf4/Zfd02XO+BT/2hZ5OymQtAOoz4bmW3b6perZV9To7EbQKHEjzZ2vkJN/6FSxwV6NQkT5m/+GX67LwKVyFQcc58FRVv3fgK6H5e9dyJgaJQF8wHXlEzS6a/IgWrsTNEIfKuL3lyUBkCmgBYz14zBuIvizMLyIVBgu1fI5Lk5qEt4ShKu8BawykXxMw== 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=8aE/xhQc1ScjD8FKImKyyPi2cNcNucokrC3sZcN9VTw=; b=KEBZOc7AOiLriDlJPOLVXx7f5wfrWHX7/kSI5t7WHx+EqyJUr8OkxuMc33WXGi2xngMuPz4OlmOwZrC917EtJnnV0zVJNLpaxNL9hGXXI7stTjEJkMMvsxx0NNzYRfnAxr919CFS7pcA5yOTKnYPcR5D0el6sUC5SCtVizTUFV1OjWE37lPE+NYG3846zlh+WOmVMHBB0FqSduj0kQVgZZYGUoIANKo4c+KBkE2oVK8PkK6qcGYEUJR7Mtj73ERgPe6fa8oPBdjlHUnKmbIHv+D8xjy1Uc3BrwZlEocXqgjHHSctxFID+Ek1ob2PSbLk0Xy/a8plDh4fp1z44dUSnA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8aE/xhQc1ScjD8FKImKyyPi2cNcNucokrC3sZcN9VTw=; b=cIakaQFL8jpEI8ibgtzEkWtOy0QBXReimvA6eU6NJ6Lcgu12y716Z5y4EOFz//IcsG8vm6p43fsRWxwud1ZwsdArpbB/rKX5nLZS9SgZOB6hlnlvzhdevCYRc11GKj1uvyuV7IHDK09Anjkwgkk29Ba3oJXz/foGL4KFYYcKyy0= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; 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; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Jiqian Chen To: CC: Huang Rui , Jiqian Chen , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 09/10] vpci/msi: Free MSI resources when init_msi() fails Date: Mon, 26 May 2025 17:45:58 +0800 Message-ID: <20250526094559.140423-10-Jiqian.Chen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250526094559.140423-1-Jiqian.Chen@amd.com> References: <20250526094559.140423-1-Jiqian.Chen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A107:EE_|IA0PR12MB8279:EE_ X-MS-Office365-Filtering-Correlation-Id: 135ec16f-577d-4648-bb7b-08dd9c3a3317 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dlJqa0F3T0pnYXBPRDdtajdOeUsxRUpnRjBCekVzTmo2cks2UEVjUFlQcmtr?= =?utf-8?B?SWw1QmdEcTMxWGZiU2JkMG5RYlp6c2FSOFVvWFMwNktiUGxXM0JEaFA4R0xZ?= =?utf-8?B?aUd3Zk1BNWEzc1ZNbUl2ZFc2anlKRnBFaFlISmpFR1lycnZYK0wrZUNLcXRX?= =?utf-8?B?N2MzZDdlY213ZFQ4eE4rOVIvSkNXN1ZMLzAxQ2tkY3p0eW56K2dDZ1NKMTV4?= =?utf-8?B?VnBOV2lKK056dGZDaWZlRWIyUW9BVnFLendRSm11OXQzb254Q1NLeEVGeHNr?= =?utf-8?B?eUczVExacXE2MXltVkVvVkpXeDdLOEFuQmdKeGl3NnZxU2hOYmwwSkg1R2p1?= =?utf-8?B?SjBjZjQrRzQ2VFlmY0ZjeVpMSHpGYmtSWG9jalNOWTQwVW9BaExRVGZxUEUy?= =?utf-8?B?dXJHZDE2emdFR0dxRWg1aStZaEhzUERmQUluUzJIcUhsUjcxWVJqbzE2TWRS?= =?utf-8?B?OE13R0dxQWF4T0hqZ2dMU2wvQ0hibFVDdzVjU0NyRHh1K0lZVCtTKzA2TFBk?= =?utf-8?B?SGVxcXdNKzh3eHgxWXQwa2ZqM3RnTFpVQU9sQ2tGNjdKTGFpZE5aQUI4U1dh?= =?utf-8?B?ZGJ4OE5XV01jL1hvZG5vNXAwb0lKZGRiclFRNUYyb1VmdVRNTm1aa0NrSHBR?= =?utf-8?B?b3NiV3hkRHNZL2hKdzcvaWp5cDdBN1ZacUJTcGpsakVSS1crbFp6b0RFU1JG?= =?utf-8?B?MFk2OWlZSm5wTHI0ekhPbmxJblNVeWZKajYyT3JUdC9IN0xtZHBxSmhpcXcy?= =?utf-8?B?YUw5OWFrWVQxdzBDa2RLVUhrTldyU3Zwek9PdnZsd2o2OVB3b3E5WnZiT3JX?= =?utf-8?B?OGxZWjgva1MrRFVJQVVROUc0c2pnMDhRWm4rNnhRclF3dXBVcmMxVjFMVk4v?= =?utf-8?B?S2lqdmpzRkF3dU9LMDBHWldQWWhQWFkzMzFJSkpSZHRaMHRRNHlMNVFoNTZP?= =?utf-8?B?YVRHdlFZSVRTN0FTdFY5WlBuZWh6VmZjcDFjQzFxM211YVh4bTF6d2hqYWh2?= =?utf-8?B?UHRBRWVOOVhLR0dNM1FyajlPYTVJYjNocys0QWJDNFZ4NE9RNDc1VkFxV3F1?= =?utf-8?B?Z3d1TldzNG1DdmF3WDFUWFlIUVEwZ051NGFxR2FTVHlWWisyTS9ndzVzN01y?= =?utf-8?B?aGwxV0daL3U4aXJPUDZ0MG9jaFY5Z3RZQi9XeWJKVU1TMUorT0grQUh5TFlT?= =?utf-8?B?VjJCNGlRRDFMYkV1NXZqdGorZjhGWlZUS0NoMUU2anBTTTI4eFlxMUpKUi9Z?= =?utf-8?B?TEVEb25LbFUxdFJEaGNsQVBzc2V2U2I5NWFzTEZHWXJTUG1GOENpbDMwYU42?= =?utf-8?B?c2Jud1ErQTFsNlBsZ3B5UFlsZlU4Q3F4cnJhNDlTcjFzbUdEZ3hyanA5Ykxl?= =?utf-8?B?SlZvd25za1dBMzc3RjFMUzA4OVd6UUJiWDMyc0NMY2orU3g4cjk5RGNRT3Vj?= =?utf-8?B?WjlpOE83blhVRE9qTWNqLzY3dTI0eForWE83Y1M3c1J1N3dHK3AvR0UwZTY5?= =?utf-8?B?cGo3RkVGN0Q1OUFFODN5TmZPR1VoemJLdkNSbVQ2Q0xIcEFFRStKZTB4ZTZ2?= =?utf-8?B?eVREZnR6WXdrS0w4MDZQd1NWcnk4NHNPT05FVnFqME8yTjRvQktNM2RydzZp?= =?utf-8?B?ZTJLU1NuZ3NZMzg0ejNLTm5reUlqRUZBY2J5VmhqUUp6RTlCQ0pwMUVxa1FP?= =?utf-8?B?dU1yVVhEeHZiUUdaYUJ0VHZVdUpHbkFDVnNvc0lTZEtoNmJxLzB0cG1ZL21p?= =?utf-8?B?VFB3emk4bkh1aEtDQVVTaEUydkYvTWIvRi9ISXFsTFY0a3g1SFRVVlh4UVVW?= =?utf-8?B?eEpCS2pGQk9ReHA4YmdpVXlDemg5Qm00NkRwcFpyRG04TmdQVnFSYkJUMXFn?= =?utf-8?B?VHFTU0FXbURvYmZmbEhvQng0ZDhpK2Eyc3NCY29tTFhsbHcxaDBrcllFdmxu?= =?utf-8?B?UG0rNkh2bzF2Z3I5bU53U1pLSjRMOXFXeTkvdFFxVjhZT0Nvd1hSbTRwdWFW?= =?utf-8?B?ODBPbXphVExGRHVucWdURms1U09yUEowOXJvaUNEMXljL29QZU02K3pNbGJp?= =?utf-8?Q?dNDChj?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(36860700013)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2025 09:46:33.5274 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 135ec16f-577d-4648-bb7b-08dd9c3a3317 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A107.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8279 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748252820160116600 When init_msi() fails, current logic return fail and free MSI-related resources in vpci_deassign_device(). But the previous new changes will hide MSI capability and return success, it can't reach vpci_deassign_device() to remove resources if hiding success, so those resources must be removed in cleanup function of MSI. To do that, implement cleanup function for MSI. Signed-off-by: Jiqian Chen --- cc: "Roger Pau Monn=C3=A9" --- v4->v5 changes: * Change definition "static void cleanup_msi" to "static int cf_check clean= up_msi" since cleanup hook is changed to be int. * Add a read-only register for MSI Control Register in the end of cleanup_m= si. v3->v4 changes: * Change function name from fini_msi() to cleanup_msi(). * Remove unnecessary comment. * Change to use XFREE to free vpci->msi. v2->v3 changes: * Remove all fail path, and use fini_msi() hook instead. * Change the method to calculating the size of msi registers. v1->v2 changes: * Added a new function fini_msi to free all MSI resources instead of using = an array to record registered registers. Best regards, Jiqian Chen. --- xen/drivers/vpci/msi.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/xen/drivers/vpci/msi.c b/xen/drivers/vpci/msi.c index 2d45c7867de7..4e106c39efae 100644 --- a/xen/drivers/vpci/msi.c +++ b/xen/drivers/vpci/msi.c @@ -193,6 +193,33 @@ static void cf_check mask_write( msi->mask =3D val; } =20 +static int cf_check cleanup_msi(struct pci_dev *pdev) +{ + int rc; + unsigned int end, size; + struct vpci *vpci =3D pdev->vpci; + const unsigned int msi_pos =3D pdev->msi_pos; + const unsigned int ctrl =3D msi_control_reg(msi_pos); + + if ( !msi_pos || !vpci->msi ) + return 0; + + if ( vpci->msi->masking ) + end =3D msi_pending_bits_reg(msi_pos, vpci->msi->address64); + else + end =3D msi_mask_bits_reg(msi_pos, vpci->msi->address64) - 2; + + size =3D end - ctrl; + + rc =3D vpci_remove_registers(vpci, ctrl, size); + if ( rc ) + return rc; + + XFREE(vpci->msi); + + return vpci_add_register(pdev->vpci, vpci_hw_read16, NULL, ctrl, 2, NU= LL); +} + static int cf_check init_msi(struct pci_dev *pdev) { unsigned int pos =3D pdev->msi_pos; @@ -270,7 +297,7 @@ static int cf_check init_msi(struct pci_dev *pdev) =20 return 0; } -REGISTER_VPCI_CAP(PCI_CAP_ID_MSI, init_msi, NULL); +REGISTER_VPCI_CAP(PCI_CAP_ID_MSI, init_msi, cleanup_msi); =20 void vpci_dump_msi(void) { --=20 2.34.1 From nobody Fri Oct 31 09:42:12 2025 Delivered-To: importer@patchew.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=amd.com); dmarc=pass(p=quarantine dis=none) header.from=amd.com ARC-Seal: i=2; a=rsa-sha256; t=1748252822; cv=pass; d=zohomail.com; s=zohoarc; b=SWoaCyIM76Yb0eeWKPNjQqlXtNM7s0zSAMG27NRNsNp8O43wrtuGOWFFRZkwvLKxbwPzT48qO6a0tf9KIl04swMApoOEg+Bbjb+6qLYb0lOvBUnkG5wwzAiqFTkQYZYSm6z6UX004kVUM9sc+NFaPygfyYzPx4Ej+DpdCdglghQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748252822; 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=fUJWfL2DY49Egk7Lf4LkxsuGcBQxC7mWhWoHagyWnjk=; b=EEY8y8feBBKZGp76e8oZe4K06C+o6boJjm2qbcnCm9SWQOYiXNAxgjym93M4FY5gQS2bG2nSmFQ/0BNr6Zhdsj19f+oi7wyC+A0KP7/RB1wyEzIXS2mytBPpHivxDjDRGoFqWPuBlcvOuLIW9q0uDui76NA1NScMINl3mEjDH10= 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=amd.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 17482528226951017.4140860142165; Mon, 26 May 2025 02:47:02 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.997354.1378324 (Exim 4.92) (envelope-from ) id 1uJUPq-0006LB-VB; Mon, 26 May 2025 09:46:42 +0000 Received: by outflank-mailman (output) from mailman id 997354.1378324; Mon, 26 May 2025 09:46:42 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uJUPq-0006Iu-ME; Mon, 26 May 2025 09:46:42 +0000 Received: by outflank-mailman (input) for mailman id 997354; Mon, 26 May 2025 09:46:41 +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 1uJUPp-0003hH-6E for xen-devel@lists.xenproject.org; Mon, 26 May 2025 09:46:41 +0000 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2062f.outbound.protection.outlook.com [2a01:111:f403:2009::62f]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 527b233b-3a16-11f0-a2fb-13f23c93f187; Mon, 26 May 2025 11:46:40 +0200 (CEST) Received: from BL0PR0102CA0027.prod.exchangelabs.com (2603:10b6:207:18::40) by CH1PPF931B95D07.namprd12.prod.outlook.com (2603:10b6:61f:fc00::619) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Mon, 26 May 2025 09:46:35 +0000 Received: from BL02EPF0001A106.namprd05.prod.outlook.com (2603:10b6:207:18:cafe::93) by BL0PR0102CA0027.outlook.office365.com (2603:10b6:207:18::40) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:26 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BL02EPF0001A106.mail.protection.outlook.com (10.167.241.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8769.18 via Frontend Transport; Mon, 26 May 2025 09:46:35 +0000 Received: from cjq-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 26 May 2025 04:46:33 -0500 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: 527b233b-3a16-11f0-a2fb-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GmgZEmrcDTqPmcvlYDCxSSxtBFhRAegAkgVpuX/L5WS4ELCI0XrwZIaf0rwq+VuXN/s/6lqD1WPwSVIaN/NadlXTelZjnufctCfnEOke1FogHrkUUPN5fb1+yvICX8oRYyTQ93pevc+chm0Ox88EWEoGsHjxJrkHVdhpP9C5lPhM638aQQmpYY9JNx0iD4L4QI6vx+MbiH1945+3xaUBuSVbn+D5Gsm0+lJlubi0a974E8qYfzDP5JL65X0j26pF4FocM8FP+idywfkvdezz4npKhlSoSSGY4H5GVJUwXLfD2GhW0h9RHbeMNss35DHXP58yepAb2pJQoS5eHxtvlg== 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=fUJWfL2DY49Egk7Lf4LkxsuGcBQxC7mWhWoHagyWnjk=; b=vi0Dvoe3iBTq/IDVPnLD1SnB/dLAq2BJDZrWKsZVjHs51XJx/k9cXwl6ubItncVjgwoJ/EEQH5u3ns89vfVFirQpyw/lncID0Z/guxBFIb4ftSrXgWy2O+TVbvsBkZjPrxVE0g+tEWIKDJxrJBDraA5h1rb+l5kX0/6IlGSRzDHGpld7UBYREwJGksVe4MQjqBbdZJTygBkvVXqAzvCs4VV0uksskMZfZZbmWGMoJK/8DOl8lNleDpWmTOTcnVV4Muao9r7ZJh0MgZgrfXDqG6lMhgptEy27i11kqo4rv6voGHFSSplXYZbWzdCjNCzsn9X1zZ0pV/ZLbixMZdv/aA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fUJWfL2DY49Egk7Lf4LkxsuGcBQxC7mWhWoHagyWnjk=; b=X3E/pPG1QHTm+p7JgW5sT2Av3IxCBrRkdDTsqTCVAcykp7K1OML2EymjVs5dvmNrimdA54BHEjb8Jky2RP0fV3uh7keEZEH/ata7fnnr01EgB7Lotq1ZeokK6L7I5An1RXh0ZHbeUph8P+0dWRfpnA1gIs4ZyIDjCKDBFbgF/7o= X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; 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; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Jiqian Chen To: CC: Huang Rui , Jiqian Chen , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 10/10] vpci/msix: Free MSIX resources when init_msix() fails Date: Mon, 26 May 2025 17:45:59 +0800 Message-ID: <20250526094559.140423-11-Jiqian.Chen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250526094559.140423-1-Jiqian.Chen@amd.com> References: <20250526094559.140423-1-Jiqian.Chen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A106:EE_|CH1PPF931B95D07:EE_ X-MS-Office365-Filtering-Correlation-Id: f9a88e34-37e9-45b7-4b49-08dd9c3a3409 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?utf-8?B?REk2bHFEWURVZmRYd1FYWkVrTFJuVzdqWGpMOEF4N2QwZHZtRXdDc1ZvVVpG?= =?utf-8?B?S2RvMW1LemtuNDVPRUQ2ZWUraUk0V2VRTlY5bm50U1RRVkRKNWNXOFBNaHo4?= =?utf-8?B?bjMrYi9BRG9VWDJWaE1Ba3VhM1N2VGpCZllqcGlWWWNDa3ZScENuUi9SRjhB?= =?utf-8?B?ZnhEZzJHVWcxbWk4S0tuNlFKMHZ3MGdDZHE5S3dCNWgwaWVVM3RWOWtFd0o0?= =?utf-8?B?c212WjJYTmpuTVEvc1pqY2tKR21FaElycE5xNUF3UHcwcEFGcjNsMk5CV0t2?= =?utf-8?B?MVBEMkRPaXJZRDZVTVNzbkJ3bm1LdnJYUGdXV25nMkFQUzlIdWJnVEhjZXJu?= =?utf-8?B?czl6eGdlY21EZldOTU9iUzNUV2RUTnBnc1hXcUNuUjZ1UkxCemtucjdRU29y?= =?utf-8?B?bG5IMndha3plMzdDK2ZZZUpoM1BjWTBEbjNUdUNWcys0bkVDS2RWYmpieEZ1?= =?utf-8?B?TkhaSEVteno1OU9xbk9uekVkVklvQVVVbWhzL28zdUk0ZmVtb1FJRnpEN0VZ?= =?utf-8?B?eW5DUGQ5NHFSZ2F1QllmamxJMlk4T204M1N5cFczeUluZ09wRmpmN2tXUElz?= =?utf-8?B?MllSSUE2OEY1eWpKWTBHaWFZbnpqQ21qR2JmS0dQUFlsN3RZSnpDRGJucHNz?= =?utf-8?B?UzFnQi9tVkRiWERVbDJTSTNMV29mdndubWowNVcwRGh0SnhpRmpzV1ZYa2RV?= =?utf-8?B?eitSdGU0eWw5TFRpdVp1Y1ljdWtMZi9jUHc5UVcxR29zcjVnNWRtemZkNmNn?= =?utf-8?B?d1k5TDNUK1IwaGhiWkpIRkJMSEx6bVJwa01yaEFZUmk2QTJyVXdlMW5EUm1S?= =?utf-8?B?QjZKWXd0QXhmQnM4MDl0ekVKVlpoV1pqS3RtcU9HK3E4U2V3QVRHaVNDODNM?= =?utf-8?B?UDVKQWJoaXZrNUp2eUd6ZDdQbmFVSGhVcHJQQml0WHVkUEw0QlgwVFI2NDEv?= =?utf-8?B?RmVJOVZya1dyb0M2aXRZbHRtd2VJN3Vlb3pQLzNnL3JFdS9EUEhWMm1KWm1z?= =?utf-8?B?dUVMRXptSzl6UHM3cVV2RSsvQTZPYzNMNVAyUzZ6QWZvN1VzUEZDV1AvZHBF?= =?utf-8?B?eis3bnBZZ3RPdHNXbC9RZmZxU3RRQTczd1VZSlFudFk5ais1d1QvQ29PQ3VZ?= =?utf-8?B?V0dxazkvUHdsWW9YM1FtYnp2amVIeDlJMnpCQUhmYUY5UW4wTnFiRjdqa2hU?= =?utf-8?B?c2tRL2llRUZISDJCT1ZhcitlQVpLTEFKZjAzc2pqZStmdGZUT3pkZDRHVlBq?= =?utf-8?B?VHFqRFJ1UGxjN29PRDNvYkNhWU1PckZONU90TnVYRnFmN2xPeFJxdEJuTklv?= =?utf-8?B?YXgzR2t6YlAzQTEzY0t4cmY4aTJMN0lGSTFPNThGZjZja1BYcTRKMEVjUm5V?= =?utf-8?B?TFdxazNxVlh3ei9PTU4yemQxVVppZitKWkgxZTFWc3lhZDhtMlpSay9LKzBq?= =?utf-8?B?OG5DZ3RVbHFIaTFESWlaYUlrNXFSZVd6dmJmaEtLZGNmT2F3S0RhdGQ0RVNr?= =?utf-8?B?VDd3czUxb2duakZrS2ZDak1xQnJCcTZIM2EzcFJaeWhGcWxLQytBbkdWamRT?= =?utf-8?B?U2xaTDVsc2NTQkhIZTNzYjNCRmoxZ2pRK1VUYkVtaHoxQmpJQWdZb29VU2hR?= =?utf-8?B?Uk1jSG8vWDAvT29TZnZRY09pTHBMQkgvVWEyaGF4TFZmY1hIL3dBUGg3eGt3?= =?utf-8?B?Ui9IT0w1bDdQbmtWVGsySnorUXlmKzlzY01TYjZWUjIzY2w5TnI3NXZwSXV1?= =?utf-8?B?TlJMK1ZHTC9ENjhienBjS1FBYkIvUmxRODBZOWxoMGtVNHlqSVlaa1ZsWW9n?= =?utf-8?B?NEV6cXZ0WDh2SmVoSlhxTGpLVmw4RDZkaEhoYVg2V1g5YW1QQ3J5R2hjUHhX?= =?utf-8?B?ak9zS0U4S0JCTTI1Smd4WjdPeXh4bGd4SmhIT1A4ay9rS2h4SWlWYlZ6ZXdL?= =?utf-8?B?VWJmRGdWTEl4OFJ5YmJ2UjNWdTNCRGZnQkpEekRtMmxhcDJkdzZLbEhqYkdE?= =?utf-8?B?cnMxNlZOSU5MVzFMR3hPR0I2aExia1VqOGZ3WnlrcDBPUGZ4NGk5MUdweHFW?= =?utf-8?Q?d7djrV?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(376014)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2025 09:46:35.1103 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f9a88e34-37e9-45b7-4b49-08dd9c3a3409 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A106.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PPF931B95D07 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748252824566116600 When init_msix() fails, current logic return fail and free MSIX-related resources in vpci_deassign_device(). But the previous new changes will hide MSIX capability and return success, it can't reach vpci_deassign_device() to remove resources if hiding success, so those resources must be removed in cleanup function of MSIX. To do that, implement cleanup function for MSIX. Signed-off-by: Jiqian Chen --- cc: "Roger Pau Monn=C3=A9" --- v4->v5 changes: * Change definition "static void cleanup_msix" to "static int cf_check clea= nup_msix" since cleanup hook is changed to be int. * Add a read-only register for MSIX Control Register in the end of cleanup_= msix(). v3->v4 changes: * Change function name from fini_msix() to cleanup_msix(). * Change to use XFREE to free vpci->msix. * In cleanup function, change the sequence of check and remove action accor= ding to init_msix(). v2->v3 changes: * Remove unnecessary clean operations in fini_msix(). v1->v2 changes: new patch. Best regards, Jiqian Chen. --- xen/drivers/vpci/msix.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/xen/drivers/vpci/msix.c b/xen/drivers/vpci/msix.c index 674815ead025..cf79320d3b6f 100644 --- a/xen/drivers/vpci/msix.c +++ b/xen/drivers/vpci/msix.c @@ -655,6 +655,33 @@ int vpci_make_msix_hole(const struct pci_dev *pdev) return 0; } =20 +static int cf_check cleanup_msix(struct pci_dev *pdev) +{ + int rc; + struct vpci *vpci =3D pdev->vpci; + const unsigned int msix_pos =3D pdev->msix_pos; + + if ( !msix_pos ) + return 0; + + rc =3D vpci_remove_registers(vpci, msix_control_reg(msix_pos), 2); + if ( rc ) + return rc; + + if ( !vpci->msix ) + return 0; + + for ( unsigned int i =3D 0; i < ARRAY_SIZE(vpci->msix->table); i++ ) + if ( vpci->msix->table[i] ) + iounmap(vpci->msix->table[i]); + + list_del(&vpci->msix->next); + XFREE(vpci->msix); + + return vpci_add_register(pdev->vpci, vpci_hw_read16, NULL, + msix_control_reg(msix_pos), 2, NULL); +} + static int cf_check init_msix(struct pci_dev *pdev) { struct domain *d =3D pdev->domain; @@ -709,7 +736,7 @@ static int cf_check init_msix(struct pci_dev *pdev) =20 return rc; } -REGISTER_VPCI_CAP(PCI_CAP_ID_MSIX, init_msix, NULL); +REGISTER_VPCI_CAP(PCI_CAP_ID_MSIX, init_msix, cleanup_msix); =20 /* * Local variables: --=20 2.34.1