From nobody Fri Oct 31 11:41:59 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=1748696090; cv=pass; d=zohomail.com; s=zohoarc; b=UjyEZTa6bfv2lnQbXxnd8Cv3dohqH0WUTgcI3YEh3/BjpOokOSh1o0fFB+Do9X7M3qAkODS7H+8hzc1cUUF4PezvJYJiYSJ6xgonpvie+sHTOBCY+IOmmHyRZMjmIhJSF4eCjW9BjxX7sh/7ogm2nGceqrlzpeBMf9dnUAZO5wo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748696090; 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=b8T8GqrveNE1OlycZlEksUxncr6lhVzWwzvdzZ1VRls=; b=gkqJB3OpTJObB4Y6HN8Dzp9vORY6qvE4BcaVvhuVfuTQsc2h40cHM5Xyj8tgcwQ6CRXbFXu52VTaR7krQM/au+mYByy0jPJQ/YzS5twzT63xWhanY5ZU58USVYuIlOEmrgBspCwYdhUxYpkKJBAjvRy/qy8EGDrtnuLJR18KRe8= 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 1748696090250207.5455780545126; Sat, 31 May 2025 05:54:50 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1002021.1382052 (Exim 4.92) (envelope-from ) id 1uLLjG-00006T-4q; Sat, 31 May 2025 12:54:26 +0000 Received: by outflank-mailman (output) from mailman id 1002021.1382052; Sat, 31 May 2025 12:54:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uLLjG-00006K-2A; Sat, 31 May 2025 12:54:26 +0000 Received: by outflank-mailman (input) for mailman id 1002021; Sat, 31 May 2025 12:54:25 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uLLjF-0008IU-Hf for xen-devel@lists.xenproject.org; Sat, 31 May 2025 12:54:25 +0000 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on20605.outbound.protection.outlook.com [2a01:111:f403:2409::605]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 604ca8b1-3e1e-11f0-a300-13f23c93f187; Sat, 31 May 2025 14:54:24 +0200 (CEST) Received: from IA4P220CA0007.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:558::16) by SA1PR12MB8163.namprd12.prod.outlook.com (2603:10b6:806:332::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.29; Sat, 31 May 2025 12:54:18 +0000 Received: from BN2PEPF0000449D.namprd02.prod.outlook.com (2603:10b6:208:558:cafe::7b) by IA4P220CA0007.outlook.office365.com (2603:10b6:208:558::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8792.24 via Frontend Transport; Sat, 31 May 2025 12:54:18 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BN2PEPF0000449D.mail.protection.outlook.com (10.167.243.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8792.29 via Frontend Transport; Sat, 31 May 2025 12:54:17 +0000 Received: from SATLEXMB03.amd.com (10.181.40.144) 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; Sat, 31 May 2025 07:54:17 -0500 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Sat, 31 May 2025 07:54: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: 604ca8b1-3e1e-11f0-a300-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vjVMj59ue9T0HRhKhQPy//JQjNo64M8o5RSIJWXi/m/j2ii+XeWv3gB4QIKrd7pUL/FbqD7A5u+/Yf8HAJKbVSnI+AQ2vM1F7a45tEViCjEHIA4+oe+PqX9Qw/4NcvLUu7zDq8zYM7Ui7UF+VX+E0ZnuMyyTOymk6QWOe8xpiFUH+si78B9xwfxCEBu27eNllOy0loqgHFf/FOx5mT5aCdTYCPY28oPLYkx9nnXFZ+J06aWkJZMcV1E2SZDiCvgepCGgYlWSUjMzZtOvbtwINp5IqVNfdVPg5NSC6sRvN6VKZCSMHd5q1zF5ELzna29kQyNk35RaLOrqlbtGYnUUkg== 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=b8T8GqrveNE1OlycZlEksUxncr6lhVzWwzvdzZ1VRls=; b=V6pcRJ3l3fFJvG1rK7kr8zpDi6MuK2QxvwtiWLOygi9SyE+EXXV91R6OLWgoP+le8xH3CmH1yV6KTQbSNFubIm8w8r+6a85AV0Mhnn6ikwCAuW10noatIXiwLgYE+alPXvyXuB3FXNU4KJ4lZowXEyvrN+UqpxWA5LBupeUM19zvXr2yh3ukPFjDVjtjG8Dwdh+2URoVneitLEncqrDC2DiOtf+mbE5jyq0/ocWodv4FVKUhX78W/9CprgMlmXHZWqLOx073hKVCGEh0OXKBAo+kE6vXR05d9GAYINFZE8PFEPhZVPb4vMATaH3eUlBWAbEdsjmDMwkQPA6c9QTLoQ== 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=b8T8GqrveNE1OlycZlEksUxncr6lhVzWwzvdzZ1VRls=; b=ApNosnu17zQEKHcoIjgT7xQO2Al7+dYXHPgGE6xqvknje3k+ycpIUMLU1ovANTYvxTCnpfSo/RU5dEOn54GjPQt+a2f+JKTXX3KLok1PnBbYzSGRubGO1RRQ3MbScNvQG322Dzin36qfgD4Ufx9k6MrLtyNggbAWDdpVLal0qT8= 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: Stewart Hildebrand To: CC: Stewart Hildebrand , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v1 1/5] vpci: const-ify some pdev instances Date: Sat, 31 May 2025 08:53:59 -0400 Message-ID: <20250531125405.268984-2-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250531125405.268984-1-stewart.hildebrand@amd.com> References: <20250531125405.268984-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: None (SATLEXMB04.amd.com: stewart.hildebrand@amd.com does not designate permitted sender hosts) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF0000449D:EE_|SA1PR12MB8163:EE_ X-MS-Office365-Filtering-Correlation-Id: 9fe736c3-f081-4db0-6e7b-08dda0424128 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|376014|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?A91mWcmeILaReVai66cqdmuURSesgh0Cs7/pZor5VGqKXSF//kZgHRyzSvcC?= =?us-ascii?Q?sMlINnIKC2mnmB8zgxJ588MvCxO7FzNfE4R3BrkT3tUTd+H6ScmLvAOVUHD1?= =?us-ascii?Q?92w0vnR1Ns4sZDEqUHZMYy7+ypz6qGFNwux9dRmwhMENplASEz90Yx8cJPun?= =?us-ascii?Q?8jH2EZnjuUDlg/FhcttTWWxaakq5RlIeiHhu2OpV0zbJAnMZjMcHygdKiD/D?= =?us-ascii?Q?yuRqrAUTwqCnWt15jZnOHB6nWfkXTRd1svHVmqx5h/0hH+vi6hHxGLjOn38x?= =?us-ascii?Q?cSMVsgbHVOrzjnDJj7O/gfool7696YE1A6apKFK1Y5NOAi5dBntrRjnlWLyR?= =?us-ascii?Q?aCHQky5jMJHBIBCNUYmqXDSNjKFUyuRCOxJF0//vo1QAeYnnw8FR+kDBt606?= =?us-ascii?Q?zuhtSThVE3PbEOgqtpV51UNEjusAuT8tsMvLbcFcKZK/guI/y1afBwVFxqcn?= =?us-ascii?Q?lLrHfKF3bKVNTedRHDsoaG4K4G/y64Q9os0/Q7YUqdl2OZt5WrZX1hJnQeVl?= =?us-ascii?Q?I59/ZncLphEnxygssslQU7kNpxYJzeqR2amczD0NmRmdiNAbNwv/H35l+vGH?= =?us-ascii?Q?cvBGvlsSlDOAoda1bbhDu97UpIgpRLv3dO8zQQhGROEFe/Sq53l1GiwAsDq+?= =?us-ascii?Q?uMh/fFem6olbd7AL0So68er37vMBkycwomq1E89z68GYwwyedQpbh9k18STE?= =?us-ascii?Q?2c7zWWRvOeGuvoNCA7d+EDGQfZMMto9VGz/AC0jCkWtKi6xs5RdEuQJmyTqU?= =?us-ascii?Q?zNpDZbReXKUFj0OD1Zys7hn2doaFQLFJrew8C0MqkQhagA4hYpbpt7brLGG1?= =?us-ascii?Q?7BIUoGw7Ihv7yzdv4Nx9mq+QaU2slmY76+/5cS2H6GPZNT/c7C5XrPRCLjcp?= =?us-ascii?Q?rbA0Q4MJmJvbMkLKNLMaoV/63wdcI+LNfV9fgDOiTEqHxKHiiy9qTy6prqCm?= =?us-ascii?Q?GBdwpVu5mHnylTwl2qL51x4PkZtORbeRMQLwl+LXvg6h+2SWKO/ownd8DJjs?= =?us-ascii?Q?bUc6aZpMuNMfHQu/wrBPFObYqZgMJssQInfb/7+aoqdifLu+FihD4j+Jr5Qt?= =?us-ascii?Q?KZIg75ZiBaTd+WINKeR7d74TRQGaSfUPvZdn0N9uOzk9cElJsRoqwXBsiSZo?= =?us-ascii?Q?1KmRiqHJG2j3Pzop8AI58lEGArMWrxzl8RMi3LuatQ2fF+kh/1JShzyzlHPp?= =?us-ascii?Q?PIuMb1XQHzOZlwWQVxI1G5j+3MUof0puC7Z72U8wv64C7L/zEJ+7IxRPaZDQ?= =?us-ascii?Q?t0d4GGggkN4WW7QlO5zzukU4v1wp9yIRIiU+Zzv7giszQpfeKH0AzprRzRne?= =?us-ascii?Q?6yvTrwBRfqiUztihQlJ/7w7eSEpsTaidKUb+DowyOBiVYvEL/hNs+gitGpPn?= =?us-ascii?Q?c3zX1HFp2dyxNlsyFNWxH6JuaTQuiC2Rb/CxVfEryQSfGr9kjpgInClhC8Z+?= =?us-ascii?Q?iREh7wEYC0ATvxojAnY+DvayIDflRhn6xv0Ey47GQCDSC8v7+UDMbkCPyhUO?= =?us-ascii?Q?gbru/VYSMvqvlHk0jBbnNVtPSOAHagA7ngDy?= 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)(376014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2025 12:54:17.7509 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9fe736c3-f081-4db0-6e7b-08dda0424128 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: BN2PEPF0000449D.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8163 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748696091077116600 Content-Type: text/plain; charset="utf-8" Since 622bdd962822 ("vpci/header: handle p2m range sets per BAR"), a non-const pdev is no longer needed for error handling in vpci_process_pending(). Const-ify pdev in vpci_process_pending(), defer_map(), and struct vpci_vcpu. Get rid of const-removal workaround in modify_bars(). Take the opportunity to remove an unused parameter in defer_map(). Signed-off-by: Stewart Hildebrand Reviewed-by: Roger Pau Monn=C3=A9 --- This is prerequisite for ("vpci: use separate rangeset for BAR unmapping") in order to call defer_map() with a const pdev. --- xen/drivers/vpci/header.c | 16 ++++------------ xen/include/xen/vpci.h | 2 +- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 1f48f2aac64e..e42c8efa2302 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -175,7 +175,7 @@ static void modify_decoding(const struct pci_dev *pdev,= uint16_t cmd, =20 bool vpci_process_pending(struct vcpu *v) { - struct pci_dev *pdev =3D v->vpci.pdev; + const struct pci_dev *pdev =3D v->vpci.pdev; struct vpci_header *header =3D NULL; unsigned int i; =20 @@ -283,8 +283,7 @@ static int __init apply_map(struct domain *d, const str= uct pci_dev *pdev, return rc; } =20 -static void defer_map(struct domain *d, struct pci_dev *pdev, - uint16_t cmd, bool rom_only) +static void defer_map(const struct pci_dev *pdev, uint16_t cmd, bool rom_o= nly) { struct vcpu *curr =3D current; =20 @@ -308,7 +307,7 @@ static void defer_map(struct domain *d, struct pci_dev = *pdev, static int modify_bars(const struct pci_dev *pdev, uint16_t cmd, bool rom_= only) { struct vpci_header *header =3D &pdev->vpci->header; - struct pci_dev *tmp, *dev =3D NULL; + struct pci_dev *tmp; const struct domain *d; const struct vpci_msix *msix =3D pdev->vpci->msix; unsigned int i, j; @@ -450,11 +449,6 @@ static int modify_bars(const struct pci_dev *pdev, uin= t16_t cmd, bool rom_only) =20 if ( tmp =3D=3D pdev ) { - /* - * Need to store the device so it's not constified and def= er_map - * can modify it in case of error. - */ - dev =3D tmp; if ( !rom_only ) /* * If memory decoding is toggled avoid checking agains= t the @@ -507,8 +501,6 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) d =3D dom_xen; } =20 - ASSERT(dev); - if ( system_state < SYS_STATE_active ) { /* @@ -523,7 +515,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) return apply_map(pdev->domain, pdev, cmd); } =20 - defer_map(dev->domain, dev, cmd, rom_only); + defer_map(pdev, cmd, rom_only); =20 return 0; } diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index 475981cb8155..27eebdcef170 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -194,7 +194,7 @@ struct vpci { =20 struct vpci_vcpu { /* Per-vcpu structure to store state while {un}mapping of PCI BARs. */ - struct pci_dev *pdev; + const struct pci_dev *pdev; uint16_t cmd; bool rom_only : 1; }; --=20 2.49.0 From nobody Fri Oct 31 11:41:59 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=1748696090; cv=pass; d=zohomail.com; s=zohoarc; b=ZLVZ3mmLEMGp25tMpxlWXzWrS/BW0ZxodC1bT7sp4XHaqtqQ/O23DnNTHQdKsEloii22nZ5V6OCarvVZKjKc7iNDnzy5UsNlESES55Uv3i4P3DaX5dOvIVHTilC29B/ebRYts5YB6OeyLNJPH2J+oRsseuHavtA2wD2hjt5/FBI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748696090; 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=1kR/ClfUZKKqigCC70/OsoHrcl2UsMV2lP7p0tn/BBM=; b=UTlWEu0FAUfQs0ugiC28qMWAQo8LnROHaV+ZgW0SnArpghY0VAZ3OsaXnaOlo4dKD8KwMYa0BOECBMoseRNHbk0hObv6pEgYHnBcqDjzEMnSJFvs0LaiFdAjxdUV68mvr0FMmI4q7VPMiCIt7wpMMNsGt3k8Hnn9x+gm7+IGxUc= 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 1748696090121672.8028392810243; Sat, 31 May 2025 05:54:50 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1002022.1382061 (Exim 4.92) (envelope-from ) id 1uLLjJ-0000M1-DO; Sat, 31 May 2025 12:54:29 +0000 Received: by outflank-mailman (output) from mailman id 1002022.1382061; Sat, 31 May 2025 12:54:29 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uLLjJ-0000Lu-A5; Sat, 31 May 2025 12:54:29 +0000 Received: by outflank-mailman (input) for mailman id 1002022; Sat, 31 May 2025 12:54:28 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uLLjI-0008IU-Hz for xen-devel@lists.xenproject.org; Sat, 31 May 2025 12:54:28 +0000 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on20624.outbound.protection.outlook.com [2a01:111:f403:2009::624]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 62ff30bd-3e1e-11f0-a300-13f23c93f187; Sat, 31 May 2025 14:54:28 +0200 (CEST) Received: from IA4P220CA0007.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:558::16) by LV8PR12MB9450.namprd12.prod.outlook.com (2603:10b6:408:202::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.26; Sat, 31 May 2025 12:54:23 +0000 Received: from BN2PEPF0000449D.namprd02.prod.outlook.com (2603:10b6:208:558:cafe::64) by IA4P220CA0007.outlook.office365.com (2603:10b6:208:558::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8792.24 via Frontend Transport; Sat, 31 May 2025 12:54:23 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BN2PEPF0000449D.mail.protection.outlook.com (10.167.243.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8792.29 via Frontend Transport; Sat, 31 May 2025 12:54:23 +0000 Received: from SATLEXMB06.amd.com (10.181.40.147) 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; Sat, 31 May 2025 07:54:23 -0500 Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB06.amd.com (10.181.40.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Sat, 31 May 2025 07:54:23 -0500 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Sat, 31 May 2025 07:54:22 -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: 62ff30bd-3e1e-11f0-a300-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FUhzN+wz0ovtTrnBQ+5mfuY7chuuuCQ/muoDHMvqNDEpAA4CBuUkyjkvb+s+Oyl6hQEiro0TPeHNlI6n+aaQ+NiZJnlHQL52r745pCvq3fbi/w+dhnErzBmMpW+Twotrq2H20jMrH/42V1UYbJD4iWmirRDn8ZPK2EOT4V0gzqs2RBd20k8QO0Kxry3zCE7xwgE6KN91Ej3XrsThXPsC2W2A7bzJc/4d6eM4e6YNqMAKHee1YTCq44llRU/quMUkqIuAlEkUtA1elAfvaPeDkClmLLwzzTyErHgH0NjAeHvTf+5MIAkrs9545kyNuAoiE5KSFK7HIY937BC8z+L5NA== 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=1kR/ClfUZKKqigCC70/OsoHrcl2UsMV2lP7p0tn/BBM=; b=xvPkgbzWWh+QcoPrXV0Ez7ZIhrgM1koP6Oph7ZSpId5WgiMlCuqSsCFlzzrNAPrvaFaSm9S1F3w5nndgQRXz8qjtL+GIOmeue2mrI/ipMFeazJrniPt2zYEc8mg4MIYJKyqd4dOghvho3Yqq2GKa5clCVEKLFoUzZt6eUqi0M3KRIWSm7hD/K3Xv4W1yfKvnFx9BqGYOXRwqUt+V1dQlMnvruBroxwMcEYO4PnG80oXGEIF8foM0gpGq4fO9S40W/lEbZG5xUZhSwj50jWf6aFhLQonFHMT3lBVnxhueVPBv0HFMjvkevCriLKv5FU9N0p9NZgReB3o47zCCyxRL4g== 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=1kR/ClfUZKKqigCC70/OsoHrcl2UsMV2lP7p0tn/BBM=; b=wKkYa7iUCCwc8B9VRbTPiqA0w4T6cm9VJtFALxnH70ExV0ByIQPXPKuHUBIx5piWSOjtApaShU2NBY4qLLK16dR4g+6tN2wLzcT8WrWtXdkLjd4QK+q4eztHAjAYt3hGIUL3bHG2Lp17BZr6nxxaCxI2XVRSWHE2IJvGrwkbf4k= 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: Stewart Hildebrand To: CC: Stewart Hildebrand , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v1 2/5] vpci: rework error path in vpci_process_pending() Date: Sat, 31 May 2025 08:54:00 -0400 Message-ID: <20250531125405.268984-3-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250531125405.268984-1-stewart.hildebrand@amd.com> References: <20250531125405.268984-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF0000449D:EE_|LV8PR12MB9450:EE_ X-MS-Office365-Filtering-Correlation-Id: d72a5853-d0b2-4d4e-6e3e-08dda04244c4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Etmck4gWNJYdRJqnjTafhmPKZqVkEUM93Ym84Fe3eajlaq8Ay5LkCCRPTgsO?= =?us-ascii?Q?NGVBrvPNePeaObW9Ws4Iis1NvuRY3avdP4bbk6hRUdq0sMnUPVHn7JYD0v+k?= =?us-ascii?Q?uGQ0X5GoffwKu62rL6OIPjRKmm6613Tr2IG1wCo1LTCekFjlgMh7KwWqzxFI?= =?us-ascii?Q?4FwcfzMPzfAihX/PoR4Ip1rJf0wZKxys+VtTBRFRzEFwTXCM8lG2muN0pWjz?= =?us-ascii?Q?3MZnYSDyGNPAV5XC/HHFun/8pbeCO/DVJ7eCkpXqYIAiNmxAh3QHcQimwFVx?= =?us-ascii?Q?aTcs2cgFCClIC33kItqohLPSXNC0DDGBjni0PjaBLhA17nVp50w73P1Vz0H/?= =?us-ascii?Q?/7Ig3rF5RZVRbWfFbE7fTpGe6raND9rKA4uvGRP9itCX7IiIGNHMgUTNZYd5?= =?us-ascii?Q?+2qJy8gx+rWYMNy9BqkcSLJotkrvKYyLgSEq+JuhO+bg+N8hPnRQNU0jRO14?= =?us-ascii?Q?8pNwtzThxUwnUmGgXmQw2C2PrxvO1rBcgN2zewu4yQsffNBoPmoGDBatlPgE?= =?us-ascii?Q?MoAJ8ebu5737ZTWv8cHUcXNjR1jfyCpRTBr/lHc6Ag2Ob/32JuqzPr2iVtny?= =?us-ascii?Q?+cpDqSSRkK0XwmWlsnJ7sX02g1nfs+lTbUcR86OOH+Jc2WAwAx+88TLo9YH1?= =?us-ascii?Q?lJAtXAeNWdKM8aPNL9VpK68fDJmofNT3N1FEPa0NE7InVKpYmoGq7U40299L?= =?us-ascii?Q?LvFX69cyGyulXanbOCUMBRcsHRlTWXXrHBpQ+V5JA/ltYAKjiQH+9jxqb7XM?= =?us-ascii?Q?VNshhzemePOtirXhqs8/15KIuI9Bh/8wsaAGYrsiH9gwHAnAZQQrW9FY9KgV?= =?us-ascii?Q?ChobUth+s08lqlG9Rs6JeE5sJGCOvoxThDi7XvXba7wl14E8bNJ1KZ65Q9NE?= =?us-ascii?Q?0hqZzoAPPfrMnccnbepP5woPLDNjcicy0ly0klkXJQFMeuXnQwnmfcIujOuK?= =?us-ascii?Q?OVwZUyYEPRSnF0OrHUTyMjuLUayUHF30trCfuZw7wFmyTsJIg/oRxOXAq6wM?= =?us-ascii?Q?gS7hNhFCkfrK9+Rr5BRw/5CzqgrsfL/kncdp8FlIjHzAbHrFYmld8G3i2lXr?= =?us-ascii?Q?9EfBCMziIAip49JnU9YYiSlHCpfMgrSiT9BHmqLsUxGLl9S4HyyYlqBhjfNz?= =?us-ascii?Q?k7XpIejg7F/78ypWtvv1rp7pzyqTJwkp0iGfyI+qEJYNMe3zG3w8rIj2Qx1G?= =?us-ascii?Q?Zzc4i5jVROWuTOkttojJJW7QPE7XNkmNHvMI+V1qRr40dmR4i5pjyzJBD2Le?= =?us-ascii?Q?C7y99BZPSTY68r36/8LGHv1ScULfW2rFTYbzVBU14No5q7pg9AOmASHikttS?= =?us-ascii?Q?cpYoNzvMkkaGIEUX7MwWg5Gn7J79LgSZ9b5CWq4uq2dYx2prgVqzJBO+Ymqq?= =?us-ascii?Q?Ma4ARb8COMihZZY0OQ7zvjeGnPHabK3EX9XO4yP5LG/0+K0o2b+ke94Z25f5?= =?us-ascii?Q?6u/RbJ9EFSEjyoumypE3j1ompP1pFpjIPxPywhy0Ik03MD+S71Abevtumi9u?= =?us-ascii?Q?n8qsmYaZkiRhsdA4x8R4hCMJKS+ryeDK8tHe?= 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)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2025 12:54:23.8064 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d72a5853-d0b2-4d4e-6e3e-08dda04244c4 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: BN2PEPF0000449D.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR12MB9450 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748696091045116600 Content-Type: text/plain; charset="utf-8" This will make further refactoring simpler. Signed-off-by: Stewart Hildebrand Acked-by: Roger Pau Monn=C3=A9 --- xen/drivers/vpci/header.c | 42 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index e42c8efa2302..c1463d2ce076 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -214,27 +214,7 @@ bool vpci_process_pending(struct vcpu *v) } =20 if ( rc ) - { - spin_lock(&pdev->vpci->lock); - /* Disable memory decoding unconditionally on failure. */ - modify_decoding(pdev, v->vpci.cmd & ~PCI_COMMAND_MEMORY, - false); - spin_unlock(&pdev->vpci->lock); - - /* Clean all the rangesets */ - for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) - if ( !rangeset_is_empty(header->bars[i].mem) ) - rangeset_purge(header->bars[i].mem); - - v->vpci.pdev =3D NULL; - - read_unlock(&v->domain->pci_lock); - - if ( !is_hardware_domain(v->domain) ) - domain_crash(v->domain); - - return false; - } + goto fail; } v->vpci.pdev =3D NULL; =20 @@ -245,6 +225,26 @@ bool vpci_process_pending(struct vcpu *v) read_unlock(&v->domain->pci_lock); =20 return false; + + fail: + spin_lock(&pdev->vpci->lock); + /* Disable memory decoding unconditionally on failure. */ + modify_decoding(pdev, v->vpci.cmd & ~PCI_COMMAND_MEMORY, false); + spin_unlock(&pdev->vpci->lock); + + /* Clean all the rangesets */ + for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) + if ( !rangeset_is_empty(header->bars[i].mem) ) + rangeset_purge(header->bars[i].mem); + + v->vpci.pdev =3D NULL; + + read_unlock(&v->domain->pci_lock); + + if ( !is_hardware_domain(v->domain) ) + domain_crash(v->domain); + + return false; } =20 static int __init apply_map(struct domain *d, const struct pci_dev *pdev, --=20 2.49.0 From nobody Fri Oct 31 11:41:59 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=1748696096; cv=pass; d=zohomail.com; s=zohoarc; b=QiSTyLMQvu/umP3mzTs7LYAawwkisLF1eWrBUEzk420U8yXiISU+zob3bxzgESGFJxdJ0aFDJjQspdGtF53YUWvycAP6HS2tExlh0fD8931St1vUeJcuPpZjA0Svm1LsLeS35TWldKrvNaNzZ50pbdEl3AtYK5I2iSro+ITbasg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748696096; 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=tSKZrMr2YteCMaQlPNeKwVgUDT7zaH5OzY0UNxxx8gM=; b=acjhZfXuTFcBOTQrmCegQe3WarKPG67JhrmKwAarf4vPvx6l/HLRKzaFtCPYG6NAcQDwxVTrOo1HCuYdKBC7AKOpBVxX/iwN3PAXH077qpqX9v/JbQxfJAGaoorh+hcCDIufeNyHuZXic8wRzF9ttJalYN2ZI+GBspsFRa6pMAg= 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 17486960969581021.1603604990147; Sat, 31 May 2025 05:54:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1002025.1382072 (Exim 4.92) (envelope-from ) id 1uLLjU-0000mg-PP; Sat, 31 May 2025 12:54:40 +0000 Received: by outflank-mailman (output) from mailman id 1002025.1382072; Sat, 31 May 2025 12:54: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 1uLLjU-0000mA-LU; Sat, 31 May 2025 12:54:40 +0000 Received: by outflank-mailman (input) for mailman id 1002025; Sat, 31 May 2025 12:54:39 +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 1uLLjT-0000jq-B7 for xen-devel@lists.xenproject.org; Sat, 31 May 2025 12:54:39 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on20622.outbound.protection.outlook.com [2a01:111:f403:2412::622]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 6777e1e2-3e1e-11f0-b894-0df219b8e170; Sat, 31 May 2025 14:54:37 +0200 (CEST) Received: from BL0PR01CA0002.prod.exchangelabs.com (2603:10b6:208:71::15) by CYYPR12MB8871.namprd12.prod.outlook.com (2603:10b6:930:c2::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.31; Sat, 31 May 2025 12:54:30 +0000 Received: from BL02EPF0002992D.namprd02.prod.outlook.com (2603:10b6:208:71:cafe::a2) by BL0PR01CA0002.outlook.office365.com (2603:10b6:208:71::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.19 via Frontend Transport; Sat, 31 May 2025 12:54:30 +0000 Received: from SATLEXMB03.amd.com (165.204.84.17) by BL02EPF0002992D.mail.protection.outlook.com (10.167.249.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8792.29 via Frontend Transport; Sat, 31 May 2025 12:54:29 +0000 Received: from SATLEXMB06.amd.com (10.181.40.147) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Sat, 31 May 2025 07:54:29 -0500 Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB06.amd.com (10.181.40.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Sat, 31 May 2025 07:54:28 -0500 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Sat, 31 May 2025 07:54: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: 6777e1e2-3e1e-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZIYBJnmI5KT0rI79mVxn1+1/uKeGa03IpFCrk6FmFsWoHXLpyEe+CjuOCuTxBeCTCRHAXAdRr80V7OyK4c6WQ1kDRVIQ+asif5iYL+LimAFrg4vLBsLTU8qOQjOAWFXsxc5WCucAaPkRshdtsoNLQEc30sb2qaUU3+nEkVlgey0SBlIqOk7K+xydaxctEB1YACA8uIma49eUMlUAbFnIpokiz7jPrzpx7CIhcliUCfoT/cw5HDUeyqZQK01BYojFOSP8In5ReJ24A69JT51PYmJV0lbBVyuhzbrLrxnnVl1bDvw8mSPar+msprFQG0lF/oEKLugz+9kR1evBjNLJ3g== 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=tSKZrMr2YteCMaQlPNeKwVgUDT7zaH5OzY0UNxxx8gM=; b=iTZL2e90ezOVZuRsA1LHpAn71lzLETktA5vfjnUjF+ttX0Lngdvsx6lZG3j4/CnOysPj0Zqk8AttvswfcOQU8opSvU1sdCsKGfaGeFM0dLufQoJLKS5ay7+NMQ7vZPcOoTlcAfeaMEYBLeEc/2SfE2dtCUNvHbBRdoHChPlUfiItsgzLQkrNsIcK1o9MZ6/BGKrPmi+gTQ14AiBrE4qwdSUHUCP9T86wP11RehErV7FpoOeXk4j15+5wda14wfdldnP8qSKswT1vREVuoF0XgYN0cxPAh0210+hW5gN3fhI9JytSGYBsEM7UHIVNh+me7/SpxpFzlrgJKw6zi8zdAQ== 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=tSKZrMr2YteCMaQlPNeKwVgUDT7zaH5OzY0UNxxx8gM=; b=ZBxrfxFoVrCjPvEiyx8g7aWKVnuI6ixoPboQsXRQPfbRN7OtvrDeRz1QIvE3op8x/Un8cVte5tV6Kgj22mto4Fmaf0Pji/3h6JQHdbJusOE2g0Z5u13SLuF9NSaWDJcef0ApsXY1Quxf2WIXPw70KibZZTxJhiG5GG760tAeVVU= 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=SATLEXMB03.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v1 3/5] vpci: introduce map_bars() Date: Sat, 31 May 2025 08:54:01 -0400 Message-ID: <20250531125405.268984-4-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250531125405.268984-1-stewart.hildebrand@amd.com> References: <20250531125405.268984-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0002992D:EE_|CYYPR12MB8871:EE_ X-MS-Office365-Filtering-Correlation-Id: 2b81dfba-47e9-43ef-b997-08dda0424838 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?MhQ7I7+8XB8ol+bznIDs8sOq9qKt8pSxEV0mlRwQq3/217JqHWK5uBofbZ/H?= =?us-ascii?Q?SscocFDngHJBf8xzEvBWvHc9IQ/8O2jFfDzM9X+T8anE86F8e7zkroRj8qXY?= =?us-ascii?Q?5uM3+kNaiNwhsEt60EF3KTy3sXx4IUlaKcfnarrU/o5Ey/cINwMZRXd/iMXZ?= =?us-ascii?Q?ZKJ8OtCZ0AwsI8pwKgr5BxVu9GMlxICeXP5aYzLQCs4PNKoJuvOCGMJElMcg?= =?us-ascii?Q?NNwvWd4GHd06vUGN3gaPayuhSyhxPN7QOLpOINuIxfjnIlyXU/C5oujVilEi?= =?us-ascii?Q?2Ew7Osnvcrc2V3MKkw2KPBZt9tfWtutAdVRopq+PHMc3hfJNt1jwcGhDHk6F?= =?us-ascii?Q?LjUCCS8iNen10q72LNA5ECV9/GNkXKPW20NwFdqL3iRxyQ84NK2euJrtC/1L?= =?us-ascii?Q?2zaMqR49Ekqy19K4g6auFLh+dSLvE5Pi3J/8uMCqlZXmjQW/hMCngG4XxbNt?= =?us-ascii?Q?X6wrgNmZHOBtLW8ae3e116C7CD+/WUYU+l8sZiuyjNQS0egby7WHVDj5RdHK?= =?us-ascii?Q?0mzrEsBwVAH9BlaVlGAogdgT60zXeUSunfN+z7Bz+hx6bQK64YNgPtyyGECl?= =?us-ascii?Q?Y0uZ9BBwJmCggkqqlnV8E4sWOAfBICt7oZm8pSIQ0FZv6mRHUaGymWHfnXe5?= =?us-ascii?Q?O+r6X3u54XWARp04rMv6pRe20WdcAhmh4Knff58mHu04/oMSgAZ6ZHvRDxTR?= =?us-ascii?Q?7Eu5AEMmhwSDLohaX5kmLgnFstbJ+ja+iP7V4Qoj5HVhuz/pFyqi6QNG8odA?= =?us-ascii?Q?mHrP7XdCepT1uWY1LBRvko+HFttjlZyjazq1yNUFCHORp7kNKms5FwXopQzF?= =?us-ascii?Q?n99jYZX+wrbh1AqmWzMgFC6QinHaY8En2qW/d9Ep06LSPz+FsCsGYa8mw/8f?= =?us-ascii?Q?VuuMbuHPFL501cssVDDNuGuabx6PAnKhJPZrzku471iypypEAiqPzulI1Byu?= =?us-ascii?Q?3K/2D/cCcmlFfQQWS3zXidIuIU4hWZSOVkk2vr40f2krmnq99sVWiau+gfsx?= =?us-ascii?Q?gk96wtPIFSAYc+ao9+d9WUPjMfY7s2iVXpqfk+mRXm5fMkDJMvLUr70Vi7Nl?= =?us-ascii?Q?O/sDHk5RJbcihBrzTMIazdzWhhIZGBcwS3Mq3AeV0lvmyti7CzQjf/BOOuCI?= =?us-ascii?Q?4uywSJNBUsXijyqhZnAfcyCYoHmLuXpaPF3gTYxEZRUn8AhiEolm2lwON3ox?= =?us-ascii?Q?zc/ed95nq/AkXc3NqxaOKuiovuXk4bnyKwCy8J2IvxzpSALeE6mQbV0utc1P?= =?us-ascii?Q?fLAEyxWcaPNt7cHBXQtDmxh7sCEnqNvpdMkaaJOW3erK5021CYctqdc+wL1E?= =?us-ascii?Q?2RlWYtEgtov0YVe1xWN87ysOpCYvSGYurTwH5PXP/+DPO05136uidGnViZ5o?= =?us-ascii?Q?ChchNmurVgOQ4YrYDGtDnwWqouZHTxX0Va3FSlX64OJL2Hy3or+gz0L62w1E?= =?us-ascii?Q?XoeKY/HUK7vBb4P8zsQqvUUOyW8kF3R6PGEpSlKgnFCFkql5ZhND0dawK4Zu?= =?us-ascii?Q?gfZGAttsUhqwkxQNGFR93MzOgxSg1W5wlaBm?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB03.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(376014)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2025 12:54:29.6002 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2b81dfba-47e9-43ef-b997-08dda0424838 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=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0002992D.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8871 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748696099425116600 Content-Type: text/plain; charset="utf-8" Move some logic to a new function to enable code reuse. Signed-off-by: Stewart Hildebrand --- xen/drivers/vpci/header.c | 56 ++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index c1463d2ce076..b09ccc5e6be6 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -173,11 +173,38 @@ static void modify_decoding(const struct pci_dev *pde= v, uint16_t cmd, ASSERT_UNREACHABLE(); } =20 +static int map_bars(struct vpci_header *header, struct domain *d, bool map) +{ + unsigned int i; + + for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) + { + struct vpci_bar *bar =3D &header->bars[i]; + struct map_data data =3D { + .d =3D d, + .map =3D map, + .bar =3D bar, + }; + int rc; + + if ( rangeset_is_empty(bar->mem) ) + continue; + + rc =3D rangeset_consume_ranges(bar->mem, map_range, &data); + + if ( rc ) + return rc; + } + + return 0; +} + bool vpci_process_pending(struct vcpu *v) { const struct pci_dev *pdev =3D v->vpci.pdev; struct vpci_header *header =3D NULL; unsigned int i; + int rc; =20 if ( !pdev ) return false; @@ -192,30 +219,17 @@ bool vpci_process_pending(struct vcpu *v) } =20 header =3D &pdev->vpci->header; - for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) - { - struct vpci_bar *bar =3D &header->bars[i]; - struct map_data data =3D { - .d =3D v->domain, - .map =3D v->vpci.cmd & PCI_COMMAND_MEMORY, - .bar =3D bar, - }; - int rc; - - if ( rangeset_is_empty(bar->mem) ) - continue; + rc =3D map_bars(header, v->domain, v->vpci.cmd & PCI_COMMAND_MEMORY); =20 - rc =3D rangeset_consume_ranges(bar->mem, map_range, &data); + if ( rc =3D=3D -ERESTART ) + { + read_unlock(&v->domain->pci_lock); + return true; + } =20 - if ( rc =3D=3D -ERESTART ) - { - read_unlock(&v->domain->pci_lock); - return true; - } + if ( rc ) + goto fail; =20 - if ( rc ) - goto fail; - } v->vpci.pdev =3D NULL; =20 spin_lock(&pdev->vpci->lock); --=20 2.49.0 From nobody Fri Oct 31 11:41:59 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=1748696103; cv=pass; d=zohomail.com; s=zohoarc; b=Gm/32j+zEQnQxo7ocs5Dqq0n2eRAy2jKwmf+EpekNoHxtHSSpLOTkQy7x12WWdN/ZkctHKXM6H+OyOAEhV3aJ9aZvjVUmYqxGZnItl0DY216RQKl2qWxevtxaTUBpRjYir2KLrHbhCJjyIi/5lXy7inkeav57LApLBs5oleXFok= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748696103; 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=jRLlB/4MlTzuE2oawBKxhWDsuNWlyRB6/R+h6IJtbIE=; b=BZqEz8ZgQrSD5dW3HmWI01lZiJLepmID7eFr4FZAJhHYOG6TyC0KMekGI7PM9zUuY257+pZKuFJ56BbwTuFwAHjpw8ciIiKknVWZiRts8G8fWdZ+xCCBfszUJkT8b8qRZ1GE/oR26CEorvvRv1+Uy+guJvXadGWnkzim9Jux/yU= 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 1748696103005752.2785816193452; Sat, 31 May 2025 05:55:03 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1002030.1382082 (Exim 4.92) (envelope-from ) id 1uLLjc-0001Je-0y; Sat, 31 May 2025 12:54:48 +0000 Received: by outflank-mailman (output) from mailman id 1002030.1382082; Sat, 31 May 2025 12:54:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uLLjb-0001JU-UN; Sat, 31 May 2025 12:54:47 +0000 Received: by outflank-mailman (input) for mailman id 1002030; Sat, 31 May 2025 12:54:46 +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 1uLLjZ-0000jq-Sn for xen-devel@lists.xenproject.org; Sat, 31 May 2025 12:54:45 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on20609.outbound.protection.outlook.com [2a01:111:f403:2412::609]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 6b432af5-3e1e-11f0-b894-0df219b8e170; Sat, 31 May 2025 14:54:43 +0200 (CEST) Received: from BL0PR01CA0026.prod.exchangelabs.com (2603:10b6:208:71::39) by MN0PR12MB5857.namprd12.prod.outlook.com (2603:10b6:208:378::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.37; Sat, 31 May 2025 12:54:35 +0000 Received: from BN2PEPF000044A0.namprd02.prod.outlook.com (2603:10b6:208:71:cafe::7b) by BL0PR01CA0026.outlook.office365.com (2603:10b6:208:71::39) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8769.25 via Frontend Transport; Sat, 31 May 2025 12:54:35 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by BN2PEPF000044A0.mail.protection.outlook.com (10.167.243.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8792.29 via Frontend Transport; Sat, 31 May 2025 12:54:34 +0000 Received: from SATLEXMB06.amd.com (10.181.40.147) 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; Sat, 31 May 2025 07:54:34 -0500 Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB06.amd.com (10.181.40.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Sat, 31 May 2025 07:54:34 -0500 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Sat, 31 May 2025 07:54: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: 6b432af5-3e1e-11f0-b894-0df219b8e170 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZJAIkIVaUbBuWLUFlyUrilG+yo4Sy97coG0SQq3d9JcyUBvBKiaPVBkZmsZ0U6sYYN5Bgl7IN8Wym8Gtjk8TuhJK2Mu24CRBs3aebxIT9kUa5JKBELHRAj5Dh5b3Z2erRO4tzplWFlMSYac3MeWsWs100Hz1j2pxu+3J7QQUva2CAMNyX9sWd0BQd6xHxhioHncOImljhDcoA7mWLPvIU2m+KvxrDY40qe7ip6snJt7av+38JMrHCMkFsotOsvHYMl3UB1d9LNTBMYS8QShfM6s8oLdsxj3WyrlGI1eXeT4p8z55ihLo/MubYNthyF7gvyeU3RTCXgOeJVKzLhvLfQ== 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=jRLlB/4MlTzuE2oawBKxhWDsuNWlyRB6/R+h6IJtbIE=; b=oPH/exz9JJrx5D4sjCRnG91ZlUc+t6xP865mtI57aiFAvFZ+01C0mQ/GpCOJS8i0+26QOM8b698aIjzYJ0OBPVO0Iyj/lz+guvzyXCHCG80KX6LLm43leZ+ioT7XAjmO1ADoqVpfyRzCXhuYYxI4oywfnfwKe3Al7mVsed1UKlxM4IUV5V8l4uLzLJ8Fu8FBD4yUg+JMlx2/JeCEUAKeqQ4chuXhv48PcUSZ3MAIYPaJKPfqvgTZf7g/zZCOwGCJ4KtpfXUnW89F4BLDYJuvrWYlmfLFsVkWIZgqanM9SeLnfBsPB1CPojAo+qZnx5XUIGoVXVQxv+/ZtrE2vGKyGg== 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=jRLlB/4MlTzuE2oawBKxhWDsuNWlyRB6/R+h6IJtbIE=; b=d7svcjOjySOn+NTh1RJSEMxi4PuXNgyhuhSaWYWWZ7EL5wWH6mQreOsPedQn5aQ6xRKHXCgzMeTXn4gW8L5gFKRewyNR8cwBC3w0jZfDvrILkRV6TodD4h/03d1wafMpnJf7MJ6w1um1mSDsU3d6uueK4f1QOy7fCJaY0gMMbSQ= 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: Stewart Hildebrand To: CC: Stewart Hildebrand , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v1 4/5] vpci: use separate rangeset for BAR unmapping Date: Sat, 31 May 2025 08:54:02 -0400 Message-ID: <20250531125405.268984-5-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250531125405.268984-1-stewart.hildebrand@amd.com> References: <20250531125405.268984-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN2PEPF000044A0:EE_|MN0PR12MB5857:EE_ X-MS-Office365-Filtering-Correlation-Id: 7c873d21-e470-45de-b9e0-08dda0424b5b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|376014|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?7WoNnWjX4ZrMMUPvg2SE4AAvDG90zRtLFdGeKUdYUDpUHxy57CjLh1c0ujh8?= =?us-ascii?Q?ltAGTu31q5GQ+XwwhuomTxJNGM2cZuR9xWICSEDXF4XTenEbYPCDT/5uIFgw?= =?us-ascii?Q?7h27T+ONFmEhouJMss8UzzEI7Dm2C8LULblOgPHyHTWJTWodhBgotkM5HG5O?= =?us-ascii?Q?O4/IwhR1dHtxDf78+JoUSTaxwb9rMhYKC4jZSEFvQB96VHehUnxvl4AAQ6cQ?= =?us-ascii?Q?IjWTPCO3Ggl2KFxvUWhl83xiFXiGGXkIav1DrT/p/rP6b8QETzXblO5fkBoE?= =?us-ascii?Q?YEYlH3WKPeeek2O9jA+lI1nIyBExFgk8+0MjNy2Pose009QtSGLPN6ObNPsU?= =?us-ascii?Q?nv22l8YMuDpsdO70b6QyeQ5VPZOzQKWMkfIIY2XR8Kby+3Ovkq4GXM2kHZRg?= =?us-ascii?Q?fgGWN05/p322cKyFGNWmW0spsPdXPibBVNBmbzqMh5VaS7623TNGbE/0i42f?= =?us-ascii?Q?0oJJcqLnHD/ZU9pdIpkaEwwfIQirjcBP6iFB00oQq2KeL3NyR1uXnNVOb9ha?= =?us-ascii?Q?vF8dgDMjB6rJsnNEBFlDgOUpWXtAjNkGNldq1FKMvztYBOA2assl8QkM9aEa?= =?us-ascii?Q?JAUXEkB8ZI1Tp8OyB8K3tm94hRJBFsPpGaCnLNgdt7+RybxejquXblFRMLNj?= =?us-ascii?Q?gkbioDc2DZJ23SRZP0/wxytnB+HUfvlywNyelkiQS8cH+uYGV4CG6zY9aBEx?= =?us-ascii?Q?VQ2ZLc+uyn8/G7wgfQenXii9dH/YUyW461eg6hNTuJuTANK5h72PGzjH4eWS?= =?us-ascii?Q?0TTUhhfHx7Xn0DaKEzFGShZ2Wim7qXbCktzVT3qCVqaseo8gWonfzWo2dU1j?= =?us-ascii?Q?9p2/qDOhoLUZz57LZQtGwrDl2sWfh/aTCPKslk7VqsZ+2Px5codAsdOBkPBN?= =?us-ascii?Q?KcCjohIMy8x0uGsjW2UzypkkZ8oyDZDS39jT4ZHiRUFA3Kk21AMPsoOqnonN?= =?us-ascii?Q?EihH8+hidaUVsxvK65BxL3enge/ZlwykADa7W/rroCtYDgxawGL/299GO3Eu?= =?us-ascii?Q?wzxCw/v+JplJMHBJMOsZ3zc4JzIv8N59S6qiqh6P8WW7WvyqCfcSCc37MMC6?= =?us-ascii?Q?FnyO0UUX074eWQth2fS8w8ofXjnki+eC7+KYdfgl1xE0livzRNchHMDhMvxp?= =?us-ascii?Q?jtiNI++qyD8tSLcm4h57o+bj2+IsXqoKCmJDMoHYxCqxOqu4uZpMlCpr78Nf?= =?us-ascii?Q?Fw2dwuOL15KFmHHEclMquFs6U+N94ybmSiaMq0r038joMN0gTvM3FceSM8wN?= =?us-ascii?Q?mgkfqlDrJDnDWwD9IiEt+NrM+LyGc6YaAwTyA0JjrjJG6susdH4B+C+glZOv?= =?us-ascii?Q?yDBLaMMqcONKm6Fcb09J/QPONYqXcsfSZ829Rd1FwNrrSvD6XnnnczPWsn2X?= =?us-ascii?Q?VzyUEU1z/UWQSxZa7PTns3a8lRsjL/f58Num4dPP3Wcn6mSfElMq49C+m9nX?= =?us-ascii?Q?QwMCYjqntmFLqElYEkQsJDPNB51u3zcx5ldqA/uozFRbQXKOLqPmBCz77+88?= =?us-ascii?Q?lw123vVjPs08cQyXGOSwp4MCGXqngy3J66zg?= 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)(376014)(1800799024)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2025 12:54:34.8643 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7c873d21-e470-45de-b9e0-08dda0424b5b 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: BN2PEPF000044A0.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5857 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748696105024116600 Content-Type: text/plain; charset="utf-8" Introduce a new per-BAR rangeset, unmap_mem, for p2m unmapping. Rename existing mem rangeset to map_mem, which is now only used for mapping. Populate unmap_mem by moving just-mapped ranges from map_mem to unmap_mem. In modify_bars(), skip recalculating the ranges when unmapping as they are already stored in unmap_mem. Signed-off-by: Stewart Hildebrand --- xen/drivers/vpci/header.c | 74 +++++++++++++++++++++++++++++---------- xen/drivers/vpci/vpci.c | 5 ++- xen/include/xen/vpci.h | 3 +- 3 files changed, 62 insertions(+), 20 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index b09ccc5e6be6..c9519c804d97 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -90,6 +90,8 @@ static int cf_check map_range( if ( rc =3D=3D 0 ) { *c +=3D size; + if ( map->map ) + rc =3D rangeset_add_range(map->bar->unmap_mem, s, e); break; } if ( rc < 0 ) @@ -102,6 +104,13 @@ static int cf_check map_range( } ASSERT(rc < size); *c +=3D rc; + if ( map->map ) + { + int rc2 =3D rangeset_add_range(map->bar->unmap_mem, s, s + rc); + + if ( rc2 ) + return rc2; + } s +=3D rc; if ( general_preempt_check() ) return -ERESTART; @@ -185,12 +194,13 @@ static int map_bars(struct vpci_header *header, struc= t domain *d, bool map) .map =3D map, .bar =3D bar, }; + struct rangeset *r =3D map ? bar->map_mem : bar->unmap_mem; int rc; =20 - if ( rangeset_is_empty(bar->mem) ) + if ( rangeset_is_empty(r) ) continue; =20 - rc =3D rangeset_consume_ranges(bar->mem, map_range, &data); + rc =3D rangeset_consume_ranges(r, map_range, &data); =20 if ( rc ) return rc; @@ -248,8 +258,13 @@ bool vpci_process_pending(struct vcpu *v) =20 /* Clean all the rangesets */ for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) - if ( !rangeset_is_empty(header->bars[i].mem) ) - rangeset_purge(header->bars[i].mem); + { + if ( !rangeset_is_empty(header->bars[i].map_mem) ) + rangeset_purge(header->bars[i].map_mem); + + if ( !rangeset_is_empty(header->bars[i].unmap_mem) ) + rangeset_purge(header->bars[i].unmap_mem); + } =20 v->vpci.pdev =3D NULL; =20 @@ -275,10 +290,10 @@ static int __init apply_map(struct domain *d, const s= truct pci_dev *pdev, struct vpci_bar *bar =3D &header->bars[i]; struct map_data data =3D { .d =3D d, .map =3D true, .bar =3D bar }; =20 - if ( rangeset_is_empty(bar->mem) ) + if ( rangeset_is_empty(bar->map_mem) ) continue; =20 - while ( (rc =3D rangeset_consume_ranges(bar->mem, map_range, + while ( (rc =3D rangeset_consume_ranges(bar->map_mem, map_range, &data)) =3D=3D -ERESTART ) { /* @@ -329,6 +344,13 @@ static int modify_bars(const struct pci_dev *pdev, uin= t16_t cmd, bool rom_only) =20 ASSERT(rw_is_write_locked(&pdev->domain->pci_lock)); =20 + if ( !(cmd & PCI_COMMAND_MEMORY) ) + { + defer_map(pdev, cmd, rom_only); + + return 0; + } + /* * Create a rangeset per BAR that represents the current device memory * region and compare it against all the currently active BAR memory @@ -349,7 +371,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) unsigned long start_guest =3D PFN_DOWN(bar->guest_addr); unsigned long end_guest =3D PFN_DOWN(bar->guest_addr + bar->size -= 1); =20 - if ( !bar->mem ) + if ( !bar->map_mem || !bar->unmap_mem ) continue; =20 if ( !MAPPABLE_BAR(bar) || @@ -367,7 +389,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) continue; } =20 - ASSERT(rangeset_is_empty(bar->mem)); + ASSERT(rangeset_is_empty(bar->map_mem)); =20 /* * Make sure that the guest set address has the same page offset @@ -382,7 +404,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) return -EINVAL; } =20 - rc =3D rangeset_add_range(bar->mem, start_guest, end_guest); + rc =3D rangeset_add_range(bar->map_mem, start_guest, end_guest); if ( rc ) { printk(XENLOG_G_WARNING "Failed to add [%lx, %lx]: %d\n", @@ -395,10 +417,10 @@ static int modify_bars(const struct pci_dev *pdev, ui= nt16_t cmd, bool rom_only) { struct vpci_bar *prev_bar =3D &header->bars[j]; =20 - if ( rangeset_is_empty(prev_bar->mem) ) + if ( rangeset_is_empty(prev_bar->map_mem) ) continue; =20 - rc =3D rangeset_remove_range(prev_bar->mem, start_guest, end_g= uest); + rc =3D rangeset_remove_range(prev_bar->map_mem, start_guest, e= nd_guest); if ( rc ) { gprintk(XENLOG_WARNING, @@ -408,7 +430,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) } } =20 - rc =3D pci_sanitize_bar_memory(bar->mem); + rc =3D pci_sanitize_bar_memory(bar->map_mem); if ( rc ) { gprintk(XENLOG_WARNING, @@ -429,10 +451,10 @@ static int modify_bars(const struct pci_dev *pdev, ui= nt16_t cmd, bool rom_only) { const struct vpci_bar *bar =3D &header->bars[j]; =20 - if ( rangeset_is_empty(bar->mem) ) + if ( rangeset_is_empty(bar->map_mem) ) continue; =20 - rc =3D rangeset_remove_range(bar->mem, start, end); + rc =3D rangeset_remove_range(bar->map_mem, start, end); if ( rc ) { gprintk(XENLOG_WARNING, @@ -486,7 +508,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) { const struct vpci_bar *bar =3D &header->bars[j]; =20 - if ( !rangeset_overlaps_range(bar->mem, start, end) || + if ( !rangeset_overlaps_range(bar->map_mem, start, end= ) || /* * If only the ROM enable bit is toggled check ag= ainst * other BARs in the same device for overlaps, bu= t not @@ -497,7 +519,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) bar->type =3D=3D VPCI_BAR_ROM) ) continue; =20 - rc =3D rangeset_remove_range(bar->mem, start, end); + rc =3D rangeset_remove_range(bar->map_mem, start, end); if ( rc ) { gprintk(XENLOG_WARNING, @@ -752,12 +774,28 @@ static int bar_add_rangeset(const struct pci_dev *pde= v, struct vpci_bar *bar, unsigned int i) { char str[32]; + int rc =3D 0; =20 snprintf(str, sizeof(str), "%pp:BAR%u", &pdev->sbdf, i); =20 - bar->mem =3D rangeset_new(pdev->domain, str, RANGESETF_no_print); + bar->map_mem =3D rangeset_new(pdev->domain, str, RANGESETF_no_print); + bar->unmap_mem =3D rangeset_new(pdev->domain, str, RANGESETF_no_print); + + if ( !bar->map_mem ) + rc =3D -ENOMEM; + + if ( !bar->unmap_mem ) + rc =3D -ENOMEM; =20 - return !bar->mem ? -ENOMEM : 0; + if ( rc =3D=3D -ENOMEM ) + { + rangeset_destroy(bar->map_mem); + rangeset_destroy(bar->unmap_mem); + bar->map_mem =3D NULL; + bar->unmap_mem =3D NULL; + } + + return rc; } =20 static int cf_check init_header(struct pci_dev *pdev) diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index d2f0f97e0a04..c0198aa1b08d 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -118,7 +118,10 @@ void vpci_deassign_device(struct pci_dev *pdev) } =20 for ( i =3D 0; i < ARRAY_SIZE(pdev->vpci->header.bars); i++ ) - rangeset_destroy(pdev->vpci->header.bars[i].mem); + { + rangeset_destroy(pdev->vpci->header.bars[i].map_mem); + rangeset_destroy(pdev->vpci->header.bars[i].unmap_mem); + } =20 xfree(pdev->vpci->msix); xfree(pdev->vpci->msi); diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index 27eebdcef170..e74359848440 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -101,7 +101,8 @@ struct vpci { uint64_t guest_addr; uint64_t size; uint64_t resizable_sizes; - struct rangeset *mem; + struct rangeset *map_mem; + struct rangeset *unmap_mem; enum { VPCI_BAR_EMPTY, VPCI_BAR_IO, --=20 2.49.0 From nobody Fri Oct 31 11:41:59 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=1748696107; cv=pass; d=zohomail.com; s=zohoarc; b=HbM32Z3LEXL0Y/+x8cbL6DtLeBIAAdyXupnFRE80Kimo0rIpz5p4Td2Ie3yV1AwbHFY9fpQGLafBqINa9k/zeyPZF3V32Vn68w5PcDXf7QBHUMhoa/hqLSyvmTUUu7W8jl7f1c0jhFWgLJBoWmeZA6RIINnSB7mC+gcW+s/hfwM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748696107; 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=7rI8UnhNOrjv0t84mgaR1iGWPmAZvLMQm08nsNuTMTw=; b=hUQQavsNwlDWmIgpgdgL8wISZPRKNr0mhn6NYIlIaMiU8Yyej8EbRaotS68Yy4mMCR/GvVnCxOKnO/1ZEnNoYOvtHLqjPHiexkuWwMtuw/V8sEOYuHqTepjR2xq3yv/860RUtTFda1Qc7c1WJsgAnfg8cyHrbkzoTFwowFcpC98= 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 1748696107051367.64417247573374; Sat, 31 May 2025 05:55:07 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1002032.1382091 (Exim 4.92) (envelope-from ) id 1uLLje-0001dP-9a; Sat, 31 May 2025 12:54:50 +0000 Received: by outflank-mailman (output) from mailman id 1002032.1382091; Sat, 31 May 2025 12:54:50 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uLLje-0001dE-6F; Sat, 31 May 2025 12:54:50 +0000 Received: by outflank-mailman (input) for mailman id 1002032; Sat, 31 May 2025 12:54:49 +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 1uLLjd-0008IU-Bn for xen-devel@lists.xenproject.org; Sat, 31 May 2025 12:54:49 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on20606.outbound.protection.outlook.com [2a01:111:f403:2412::606]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 6f334c24-3e1e-11f0-a300-13f23c93f187; Sat, 31 May 2025 14:54:48 +0200 (CEST) Received: from BL6PEPF00016414.NAMP222.PROD.OUTLOOK.COM (2603:10b6:22e:400:0:1004:0:c) by SJ5PPF7B9E98CB6.namprd12.prod.outlook.com (2603:10b6:a0f:fc02::99a) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8678.27; Sat, 31 May 2025 12:54:41 +0000 Received: from BL02EPF00029929.namprd02.prod.outlook.com (2a01:111:f403:c922::2) by BL6PEPF00016414.outlook.office365.com (2603:1036:903:4::a) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8699.33 via Frontend Transport; Sat, 31 May 2025 12:54:40 +0000 Received: from SATLEXMB03.amd.com (165.204.84.17) by BL02EPF00029929.mail.protection.outlook.com (10.167.249.54) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8792.29 via Frontend Transport; Sat, 31 May 2025 12:54:40 +0000 Received: from SATLEXMB06.amd.com (10.181.40.147) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Sat, 31 May 2025 07:54:39 -0500 Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB06.amd.com (10.181.40.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Sat, 31 May 2025 07:54:39 -0500 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Sat, 31 May 2025 07:54:38 -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: 6f334c24-3e1e-11f0-a300-13f23c93f187 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g7JZaOLHJ3H1PzknsycPo8EDku8ZSENiC+nBrPgChrCjUI1mOAcFXYQ//fZVz/xAYGpICweBEfLmiIjsqM5Bae5HEz6olmiuQNWL5zdr3jVGvmcs0B47S8+Kgkg1RSmD/O4USvvYgulUi5m8ftrS6U8h3AoklOa+XCU1utTuKuRC+qtR9sQ7Rb1D+RPmoinFnfE4TfViCNJavzIW+C9lGO2ObQ4v5kYDWLwL2GPWSor47WPjVUOw0TCOEVAaQbFb+kWQFpdBCXNRCVrgU5V4ULlrTZWBilKGwghWkJL9bIepwrIEZABU5x1VaOf3H6cZuSccdrDlK5EvbDEydHMVtQ== 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=7rI8UnhNOrjv0t84mgaR1iGWPmAZvLMQm08nsNuTMTw=; b=CI3WYmiTWX8xOrrwM6G8RQhuw2q1/jqNYZbxobFTz61KhCd3KH4/Zp8Qyg8OL9xxmLVFKvzjXGo9nV9bfrlkBZJD0VZhAmimWGKnIUO9E0s3ivgvIUaOWLBXHfLo1tk/yqka3yP+5QzjUzqcPw5H9mKfntyr1f9+rC378xbGR0ncLhuMmddEcK2HUrjor5nDjDg7Y2zkWX9wFqESwMQFtA/rs0i3umqHJ6fhrwWmwaMmhu7bnLnc7tJAMams2AFxQvwL2ChGW3nNyET9+pjIV3/F1sZhzsFNgs+A+N9tdtlQAttyu+h1j16HhzPFW5rR2/pVwsfGvqoIOYT5/3sGfA== 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=7rI8UnhNOrjv0t84mgaR1iGWPmAZvLMQm08nsNuTMTw=; b=Ea8ti5lNO+JtMZMhC6eEX+6n0Ld2icdT5t3dVewJMRatqDaoTDRamNwTZsRf38bJvrYjDgiWCg6AFH5HtI2hFDfSSkDOYWEq+7p81MQOddKtey44ldNfh3XlDFm+MFfl7frBYNDauHv4B10x/jkYcrLc4r7gKmhd/91xZFi9HSg= 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=SATLEXMB03.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v1 5/5] vpci: allow 32-bit BAR writes with memory decoding enabled Date: Sat, 31 May 2025 08:54:03 -0400 Message-ID: <20250531125405.268984-6-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250531125405.268984-1-stewart.hildebrand@amd.com> References: <20250531125405.268984-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF00029929:EE_|SJ5PPF7B9E98CB6:EE_ X-MS-Office365-Filtering-Correlation-Id: 05757956-fbb6-4eeb-cc03-08dda0424e86 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|1800799024|376014|13003099007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?8ceTcrfjKC8POQ00hCBahmBS995brB5K3F/O2aIpNwLc3rQaDepXyEcK7kCw?= =?us-ascii?Q?Qb84j/s6nH4aWOPMWdz9+/JtFlaN7Azvp4ApAaOCWRijXKXvAj5u/4KazisK?= =?us-ascii?Q?s0+NJP0vR2ynNYDA/d5TikdoZChUvAw4Q/hN68Rub1XC/qCyHqy7qxs57Ldb?= =?us-ascii?Q?Ppt9gK0lPiZxYw1qjsuodEsevsIahEs/PXxKNhxjNjDrkrC2KFGc05lXp9kL?= =?us-ascii?Q?6aW8Za+Jm1sQuvMrd3HVLmyTLqrZS2dxuM6XhWbgjqwP9zKDcZ1kMfinX3dU?= =?us-ascii?Q?I3/cSxYbPO1I922KyaYR3Qx85GmGUr/cYabMidp7i/Zw/d8bXQIH1NzttZXD?= =?us-ascii?Q?JNbrE1EpAeiM4MUo4DG32rgg39gj9eD0ciGR/fV2w9kzn1Fieadjsvu/pJ+R?= =?us-ascii?Q?onOMehQofUBGAt2rl1OW2ia8muNvMAMcfMAfukOfeuUe8QnyabF9so7rifkX?= =?us-ascii?Q?hHhk6xP5D8MSoV+hDlML16R/j3fMOBXfhU0bs148NU+lP3l5Dbc48d1sGrkm?= =?us-ascii?Q?rzMD8n3CCztUpS38rAa4i/1tzDam/XgYkxKBSf4A79waw1xPe+XOxAUHVCfG?= =?us-ascii?Q?02EJiuJsoFfRMMKFKQwyjciWUl0uUD2APiatzmMSwZibQ5/sdj8B5bEbushW?= =?us-ascii?Q?J8+CDMGFp13uz67hFqYJUnqh2K5S/Hig2LBo+0A4/OskHYI57l9MtzL7epnu?= =?us-ascii?Q?5nTEKHuEnVgOlgEcjaZ0gOkR0lGobFHKJV9Wl1I8Ai3A0pxc0E2fv6Z2qXOm?= =?us-ascii?Q?CF9E0mnonxVhxo8BTYMrQGeoApFi1exVa0IWBEfxY0+Y6zVvEUlvSWlDUSFz?= =?us-ascii?Q?m+JD4xYHa80cxJQMocDLhbgw3VxYXKewtsxEgRlP9pHEUE/JLVlexNCwAztj?= =?us-ascii?Q?Eqt15AoATjjJZPzfLxZg3aZnTGGf7C/I861F6crw0nl/+N/HNLfIRRN7iw99?= =?us-ascii?Q?EhKyeoJK2nV9h2SjwcW4bN/1oJ1gtES1esFLwMnyOyBeBiuqtKJhym37Z1yv?= =?us-ascii?Q?ZE1ySkcUJxNo+04RV6Qb9SP4cKZNXN/aqBA3Qu7lkrKPOym3/zOgbO3Ww8yb?= =?us-ascii?Q?kv9OesOgLOQKdof5psu60Ucwt6Ior3HP1ayNuA0Npi9i7K6Pt597b/DOw2WP?= =?us-ascii?Q?U6n/wuDdmEh+A6GYiUeJNmNKaZSGREa8Lh3yWmp0oLKeb8rZWpu2OfCqyvw7?= =?us-ascii?Q?Qu5W3LntnSeyCT81i3ziNyhxGUnfi2S6kyu7vGI+AUOqJbgNSd3C4eGzQG0e?= =?us-ascii?Q?cYrvbJHI0z3rUk+20QbHwmFTtZ4Z7IjVEP/YkGVswSzGYWFCOs39Xc/+A2ua?= =?us-ascii?Q?hK6PkutuM/LL6x8fuT3yCgiemJnSYxXHWT0fd4BdJjUXFrLsQDE/LS5dbXmt?= =?us-ascii?Q?RSQ8QDtIfWO8HR0FP2e7pTN225XXvsC/F6hJ8ULcM7FO52yTVOpqWS6IclMS?= =?us-ascii?Q?RiUPwKz4+07EC7io5yPIM+IWWIk3Um8P21YoeZRZk3m+8zkdbA0zTA=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB03.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(1800799024)(376014)(13003099007);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2025 12:54:40.1799 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 05757956-fbb6-4eeb-cc03-08dda0424e86 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=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF00029929.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ5PPF7B9E98CB6 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1748696109359116600 Content-Type: text/plain; charset="utf-8" Currently, Xen vPCI refuses BAR writes if the BAR is mapped in p2m. If firmware initializes a 32-bit BAR to a bad address, Linux may try to write a new address to the BAR without disabling memory decoding. Since Xen refuses such writes, the BAR (and thus PCI device) will be non-functional. Currently the deferred mapping machinery supports only map or unmap operations. Rework the deferred mapping machinery to support unmap-then-map (VPCI_MOVE) operations. Allow the hardware domain to issue 32-bit BAR writes with memory decoding enabled, using the VPCI_MOVE operation to remap the BAR in p2m. Take the opportunity to remove a stray newline in bar_write(). Resolves: https://gitlab.com/xen-project/xen/-/issues/197 Signed-off-by: Stewart Hildebrand --- RFC->v1: * keep memory decoding enabled in hardware * allow write while memory decoding is enabled for 32-bit BARs only * rework BAR mapping machinery to support unmap-then-map operation --- xen/drivers/vpci/header.c | 86 +++++++++++++++++++++++++++------------ xen/include/xen/vpci.h | 5 +++ 2 files changed, 66 insertions(+), 25 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index c9519c804d97..f2ffad2ace32 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -214,7 +214,6 @@ bool vpci_process_pending(struct vcpu *v) const struct pci_dev *pdev =3D v->vpci.pdev; struct vpci_header *header =3D NULL; unsigned int i; - int rc; =20 if ( !pdev ) return false; @@ -229,16 +228,34 @@ bool vpci_process_pending(struct vcpu *v) } =20 header =3D &pdev->vpci->header; - rc =3D map_bars(header, v->domain, v->vpci.cmd & PCI_COMMAND_MEMORY); =20 - if ( rc =3D=3D -ERESTART ) + if ( v->vpci.map_op =3D=3D VPCI_UNMAP || v->vpci.map_op =3D=3D VPCI_MO= VE ) { - read_unlock(&v->domain->pci_lock); - return true; + int rc =3D map_bars(header, v->domain, false); + + if ( rc =3D=3D -ERESTART ) + { + read_unlock(&v->domain->pci_lock); + return true; + } + + if ( rc ) + goto fail; } =20 - if ( rc ) - goto fail; + if ( v->vpci.map_op =3D=3D VPCI_MAP || v->vpci.map_op =3D=3D VPCI_MOVE= ) + { + int rc =3D map_bars(header, v->domain, true); + + if ( rc =3D=3D -ERESTART ) + { + read_unlock(&v->domain->pci_lock); + return true; + } + + if ( rc ) + goto fail; + } =20 v->vpci.pdev =3D NULL; =20 @@ -312,7 +329,8 @@ static int __init apply_map(struct domain *d, const str= uct pci_dev *pdev, return rc; } =20 -static void defer_map(const struct pci_dev *pdev, uint16_t cmd, bool rom_o= nly) +static void defer_map(const struct pci_dev *pdev, uint16_t cmd, + enum vpci_map_op map_op, bool rom_only) { struct vcpu *curr =3D current; =20 @@ -324,6 +342,7 @@ static void defer_map(const struct pci_dev *pdev, uint1= 6_t cmd, bool rom_only) */ curr->vpci.pdev =3D pdev; curr->vpci.cmd =3D cmd; + curr->vpci.map_op =3D map_op; curr->vpci.rom_only =3D rom_only; /* * Raise a scheduler softirq in order to prevent the guest from resumi= ng @@ -333,7 +352,8 @@ static void defer_map(const struct pci_dev *pdev, uint1= 6_t cmd, bool rom_only) raise_softirq(SCHEDULE_SOFTIRQ); } =20 -static int modify_bars(const struct pci_dev *pdev, uint16_t cmd, bool rom_= only) +static int modify_bars(const struct pci_dev *pdev, uint16_t cmd, + enum vpci_map_op map_op, bool rom_only) { struct vpci_header *header =3D &pdev->vpci->header; struct pci_dev *tmp; @@ -344,9 +364,9 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) =20 ASSERT(rw_is_write_locked(&pdev->domain->pci_lock)); =20 - if ( !(cmd & PCI_COMMAND_MEMORY) ) + if ( map_op =3D=3D VPCI_UNMAP ) { - defer_map(pdev, cmd, rom_only); + defer_map(pdev, cmd, map_op, rom_only); =20 return 0; } @@ -378,7 +398,8 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) (rom_only ? bar->type !=3D VPCI_BAR_ROM : (bar->type =3D=3D VPCI_BAR_ROM && !header->rom_en= abled)) || /* Skip BARs already in the requested state. */ - bar->enabled =3D=3D !!(cmd & PCI_COMMAND_MEMORY) ) + (bar->enabled =3D=3D !!(cmd & PCI_COMMAND_MEMORY) && + map_op !=3D VPCI_MOVE) ) continue; =20 if ( !pci_check_bar(pdev, _mfn(start), _mfn(end)) ) @@ -551,7 +572,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) return apply_map(pdev->domain, pdev, cmd); } =20 - defer_map(pdev, cmd, rom_only); + defer_map(pdev, cmd, map_op, rom_only); =20 return 0; } @@ -584,7 +605,8 @@ static void cf_check cmd_write( * memory decoding bit has not been changed, so leave everything a= s-is, * hoping the guest will realize and try again. */ - modify_bars(pdev, cmd, false); + modify_bars(pdev, cmd, cmd & PCI_COMMAND_MEMORY ? VPCI_MAP : VPCI_= UNMAP, + false); else pci_conf_write16(pdev->sbdf, reg, cmd); } @@ -615,20 +637,27 @@ static void cf_check bar_write( val &=3D PCI_BASE_ADDRESS_MEM_MASK; =20 /* - * Xen only cares whether the BAR is mapped into the p2m, so allow BAR - * writes as long as the BAR is not mapped into the p2m. + * Allow 64-bit BAR writes only when the BAR is not mapped in p2m. Alw= ays + * allow 32-bit BAR writes, but skip unnecessary p2m operations when m= apped. */ if ( bar->enabled ) { - /* If the value written is the current one avoid printing a warnin= g. */ - if ( val !=3D (uint32_t)(bar->addr >> (hi ? 32 : 0)) ) - gprintk(XENLOG_WARNING, - "%pp: ignored BAR %zu write while mapped\n", - &pdev->sbdf, bar - pdev->vpci->header.bars + hi); - return; + if ( bar->type =3D=3D VPCI_BAR_MEM32 ) + { + if ( val =3D=3D bar->addr ) + return; + } + else + { + /* If the value written is the same avoid printing a warning. = */ + if ( val !=3D (uint32_t)(bar->addr >> (hi ? 32 : 0)) ) + gprintk(XENLOG_WARNING, + "%pp: ignored BAR %zu write while mapped\n", + &pdev->sbdf, bar - pdev->vpci->header.bars + hi); + return; + } } =20 - /* * Update the cached address, so that when memory decoding is enabled * Xen can map the BAR into the guest p2m. @@ -647,6 +676,10 @@ static void cf_check bar_write( } =20 pci_conf_write32(pdev->sbdf, reg, val); + + if ( bar->enabled ) + modify_bars(pdev, pci_conf_read16(pdev->sbdf, PCI_COMMAND), VPCI_M= OVE, + false); } =20 static void cf_check guest_mem_bar_write(const struct pci_dev *pdev, @@ -752,7 +785,8 @@ static void cf_check rom_write( * Pass PCI_COMMAND_MEMORY or 0 to signal a map/unmap request, note th= at * this fabricated command is never going to be written to the registe= r. */ - else if ( modify_bars(pdev, new_enabled ? PCI_COMMAND_MEMORY : 0, true= ) ) + else if ( modify_bars(pdev, new_enabled ? PCI_COMMAND_MEMORY : 0, + new_enabled ? VPCI_MAP : VPCI_UNMAP, true) ) /* * No memory has been added or removed from the p2m (because the a= ctual * p2m changes are deferred in defer_map) and the ROM enable bit h= as @@ -1054,7 +1088,9 @@ static int cf_check init_header(struct pci_dev *pdev) goto fail; } =20 - return (cmd & PCI_COMMAND_MEMORY) ? modify_bars(pdev, cmd, false) : 0; + return (cmd & PCI_COMMAND_MEMORY) + ? modify_bars(pdev, cmd, VPCI_MAP, false) + : 0; =20 fail: pci_conf_write16(pdev->sbdf, PCI_COMMAND, cmd); diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index e74359848440..2ddfb147e7b7 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -197,6 +197,11 @@ struct vpci_vcpu { /* Per-vcpu structure to store state while {un}mapping of PCI BARs. */ const struct pci_dev *pdev; uint16_t cmd; + enum vpci_map_op { + VPCI_MAP, + VPCI_UNMAP, + VPCI_MOVE, + } map_op; bool rom_only : 1; }; =20 --=20 2.49.0