From nobody Thu Jul 23 21:54:32 2026 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=1783544650; cv=pass; d=zohomail.com; s=zohoarc; b=l0DEWkm/FXFGO7MIV9fr57CKOOaz7KyzsmkasFHxLho/sBMIQlCs2bgMELx3TxZHyKq6mY5ZdWzOqzYwJsGqdqF4To4OeL3mZ0fKGT7ZzUejvWXl9FZLz0vgHKs8ahhHLrCMHqbUqO7X3GdKJFiwb9JuO7xV9L+y7CIa7E6GiLA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783544650; 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=VMH2OpeOLM8+juWpQGgzXCROZP9A2bpoLNjB3cnaChc=; b=I/Iz8remLnXTAaUWTV9mkVyc8/SACKbOD85FgYDGK5cAi6GGaHUUCdlnF4r2kL1zeN1w4a1MNZb2Xuc8XdRB3csSfVR05uwATFWbMu2eiUyaEitQGxE8NnBJOhsMKJvLF4FSfhwv1+ewO7FJ+J8Ac9PHT+j6ybB6dh+fu6jKeBw= 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 1783544650328198.0384358595186; Wed, 8 Jul 2026 14:04:10 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1357349.1611779 (Exim 4.92) (envelope-from ) id 1whZQo-0003pj-G5; Wed, 08 Jul 2026 21:03:46 +0000 Received: by outflank-mailman (output) from mailman id 1357349.1611779; Wed, 08 Jul 2026 21:03:46 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQo-0003pc-Co; Wed, 08 Jul 2026 21:03:46 +0000 Received: by outflank-mailman (input) for mailman id 1357349; Wed, 08 Jul 2026 21:03:44 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQm-0003j1-IY for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 21:03:44 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1whZQl-00BD5T-D8 for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 23:03:43 +0200 Received: from [10.42.69.7] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a4ebaf3-e002-0a2a0a5209dd-0a2a45079420-46 for ; Wed, 08 Jul 2026 23:03:43 +0200 Received: from [52.101.57.60] (helo=BN8PR05CU002.outbound.protection.outlook.com) by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a4ebb2d-9c8e-0a2a45070019-3465393c8e62-3 for ; Wed, 08 Jul 2026 23:03:42 +0200 Received: from DS1PR07CA0018.namprd07.prod.outlook.com (2603:10b6:8:44d::13) by CH3PR12MB8234.namprd12.prod.outlook.com (2603:10b6:610:125::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.8; Wed, 8 Jul 2026 21:03:34 +0000 Received: from CY4PEPF0000E9D9.namprd05.prod.outlook.com (2603:10b6:8:44d:cafe::6) by DS1PR07CA0018.outlook.office365.com (2603:10b6:8:44d::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.202.10 via Frontend Transport; Wed, 8 Jul 2026 21:03:34 +0000 Received: from satlexmb08.amd.com (165.204.84.17) by CY4PEPF0000E9D9.mail.protection.outlook.com (10.167.241.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 8 Jul 2026 21:03:33 +0000 Received: from Satlexmb09.amd.com (10.181.42.218) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 16:03:18 -0500 Received: from ubuntu (10.180.168.240) by satlexmb09.amd.com (10.181.42.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 14:03:15 -0700 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cBd69AFckwXcGfxN159ZrR3dqKHiqHQaMPcROPcKBoLbmMjKPOW+uYfiuKGqSOrRgzn62n86tHDjo+FUfCCM1+BZ5vd8r60Dm0bLMsReh+WpTo1M3c8jl+dqO6FpSI54Qa1BysBeZgO6P6IdaznKXmT3uUl1MX2NB8jNupIvJLTXz2USYQySSTyIHckfkgpzCjYODP43pC+uR3lNK8UhI4gBZR9vf3Ar66u+rHEKW88gjHczK3nz45tfTiSXTsMSxYE8mdll6ppnShb5betSl+1+fH2+9Z7aFZixQGxricrzLnWVjwOQudhx2V/o6Mhwx7ekse/b2QFg/CxGUzbiXQ== 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=VMH2OpeOLM8+juWpQGgzXCROZP9A2bpoLNjB3cnaChc=; b=Xei8wWjrcjqCuMM2RaR9bGum22z+MGnsrqWNx++heMakBTNyWxXBkOd649Sk8LAfqvO8CnB3gO0a/VVAjPx7l7Z/AyJ0TDLLXwxa4QzLX+Lh5OOKneOcA2WfUWa8/RlRlzc2varvSknriu0EAOj54sqinDWwjwAzgFdlvx8fEFiDA6IIahKv5wmTHNxi+9hY6JRsee8Ibd+bLY2WCPTfBfdrdKH1a9Hil+Hi6Tjv9qPw2F7FFiXvqmKtOMO1x4Yx8w4qrGaxNPhk71gv4QsdueEDiP7Tocv2gV8dKjL+xQzawC9ixfJDuBplPfrTy34ZSb4yvmQTSLBCAqHBw2WbmQ== 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=VMH2OpeOLM8+juWpQGgzXCROZP9A2bpoLNjB3cnaChc=; b=WGG9z+vF7ek6jI9gxqcvqwwfW6tt9dXp+X3oKaeEjpgYe7kcfV/ncI5XgP8/98kv2/dgyMbACGswcLLVIxN7EtazDAgjmUZ9U0qMZp4tDT01esXd+A3XXoAyu1dgNBfmwpqjHOd6UxO0AOUO0llsm1fvL8FqABFeLeZYyVxy5Js= 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=satlexmb08.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , "Daniel P. Smith" Subject: [PATCH v5 1/9] vpci: move BAR mapping permissions checks Date: Wed, 8 Jul 2026 17:02:16 -0400 Message-ID: <20260708210233.922275-2-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260708210233.922275-1-stewart.hildebrand@amd.com> References: <20260708210233.922275-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: satlexmb07.amd.com (10.181.42.216) To satlexmb09.amd.com (10.181.42.218) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9D9:EE_|CH3PR12MB8234:EE_ X-MS-Office365-Filtering-Correlation-Id: 12c03e06-8427-4e0e-ef31-08dedd345f49 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|1800799024|376014|82310400026|23010399003|18002099003|22082099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: YK/CRFC7v5jXTdS3MAIU5GVlvNro234PO7Rq3+hwOP0jdqSbitQ8DnLyrvMFlrE2eBE4YA4jDUc6y2QLxeBoqtFEOFxYEW2QnEjYdEJ0uOLhUt7HPDhCTKwE3kBATyhGfJzZEPcIkSU2Y0w2JllvyOR7zTHab+X/FbyC/62+0iYPTdrCB7Vu96/vFVKe3f+/bOYdkLsT5T4WmNMd6LL4/m9x9J1jSMz57S9aWW5Dl/gMb6UChs0esb+/orhpYisFmZoTvzJ3X8sM0aUR599OGfsx7jNKPuGqtSTDrwUkarqNhNANcJlgYkQz74LmNI9WgOmDq2bC1COHrNzz3UjVTau6e9ocFzQUgByMYfDSjWmJPr1acFMLco/Rkb7LYB2yJIAA8HGeLrVTNOJg2E9wouQt1AgXGWXd8sIZWexpkNih803o73E/h1bHzh1lyjOEerriEIOKbdRko7zJfda83JwzUVxU7VPXELcrmbNfD6JRBHEkiLj/I/IAf5GX4uX2L2uJaSvYwdBpy7BpHKkq7XIZV8qra/FS6PScV0biPo6rYZwxK41ojZX2O7iEOhVguU/HN2VEVonF/qwr77ygCjco9S+g2thfeqk5lguIqMiKfDpjqVm4/K+LNYHEwQnF5QyZWlH6aHIn+pVMqDa2V3TaFjgLp5QjOLVKCWrdmm95aRXD9V3hM6y0qIo0nqGd91HOx04NJWfavX08+j4iDw== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb08.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700016)(1800799024)(376014)(82310400026)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: pRnIGqFpTfdkn2mEgt1ONrWuYR9tzZ9a63sbQLchIaYtfUsTFdlZF/Jh6LjM0sY0/8cfwiuUlkTK9e/6mXkTLGp+lFDYdHA4Y5GvUxK46JJ3N9jdvzWAiKtR8JJNI20IzZZx5/ejqAweZ1PUWjRQe4GLZBR7h72x+66GIs6FI6PGwcPwEP9joXYD9m9qbUpbvMAPzRhTiOeXpQM2alx8p8+m/B0hxLTWsibRux9F5AyvkeURFaxlD+1/h5rzOX0Oll0QpsfQyGro0sH1IvYomlZP163zQ1Ntf50xdsXp9WLiLpHeewGuAM8l83HzQ3eNgq0ezfd+0Ka4II4NaMtuzgAeVtzJ7+t4EGTERAJJzQ/yB05S2AOtbYn5I7BEdiRpyeuSe4tMYW70wYDeXjq06X0nh5JGMs6J9M/mfz2YoU73D6TG/PTMIjMSjee9/DCI X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2026 21:03:33.9071 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 12c03e06-8427-4e0e-ef31-08dedd345f49 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=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9D9.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8234 X-purgate-ID: tlsNG-ef75cf/1783544623-145FC25E-C2C5DDF4/0/0 X-purgate-type: clean X-purgate-size: 2667 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1783544650776158500 Content-Type: text/plain; charset="utf-8" There's no need to defer the permissions checks. Perform them right away in modify_bars(). As a result of the move, the permissions checks will now cover the whole BAR before any holes are removed. Carry over the domain_crash() in the error path for domUs. Signed-off-by: Stewart Hildebrand --- v5: new patch --- xen/drivers/vpci/header.c | 40 +++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index d1c92cf77f8a..5ac525036672 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -58,24 +58,6 @@ static int cf_check map_range( * offset of the current address from the BAR start. */ unsigned long map_mfn =3D start_mfn + s - start_gfn; - unsigned long m_end =3D map_mfn + size - 1; - - if ( !iomem_access_permitted(map->d, map_mfn, m_end) ) - { - printk(XENLOG_G_WARNING - "%pd denied access to MMIO range [%#lx, %#lx]\n", - map->d, map_mfn, m_end); - return -EPERM; - } - - rc =3D xsm_iomem_mapping_vpci(XSM_HOOK, map->d, map_mfn, m_end, ma= p->map); - if ( rc ) - { - printk(XENLOG_G_WARNING - "%pd XSM denied access to MMIO range [%#lx, %#lx]: %d\n= ", - map->d, map_mfn, m_end, rc); - return rc; - } =20 /* * ARM TODOs: @@ -369,6 +351,28 @@ static int modify_bars(const struct pci_dev *pdev, uin= t16_t cmd, bool rom_only) return -EINVAL; } =20 + if ( !iomem_access_permitted(pdev->domain, start, end) ) + { + printk(XENLOG_G_WARNING + "%pd denied access to MMIO range [%#lx, %#lx]\n", + pdev->domain, start, end); + if ( !is_hardware_domain(pdev->domain) ) + domain_crash(pdev->domain); + return -EPERM; + } + + rc =3D xsm_iomem_mapping_vpci(XSM_HOOK, pdev->domain, start, end, + !!(cmd & PCI_COMMAND_MEMORY)); + if ( rc ) + { + printk(XENLOG_G_WARNING + "%pd XSM denied access to MMIO range [%#lx, %#lx]: %d\n= ", + pdev->domain, start, end, rc); + if ( !is_hardware_domain(pdev->domain) ) + domain_crash(pdev->domain); + return rc; + } + rc =3D rangeset_add_range(bar->mem, start_guest, end_guest); if ( rc ) { --=20 2.54.0 From nobody Thu Jul 23 21:54:32 2026 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=1783544658; cv=pass; d=zohomail.com; s=zohoarc; b=UySp/2e4bV4zzrPYkRLE0aov+Rrw9jmgV5SnO2bSbUsjcy/IqUpafHDuXsT7b9eLEY7UYDh3R3x0qlzJhYBbZRuV0lTvBx0E7zTRQBKh2UJfD571G2IvRHohIkMcO4JXvOWX9J7x/VEP9xQUGfR85MgiBAGgxUnWoow4rszkrTY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783544658; 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=LX3mDmX0UiOUsankD8ZHIzdyC6Ou3P5sTJu+c9AM/Nc=; b=dFQU1pwuj2G/hUCu/P5u/X7ZSHrOX79oMgtSEsi1ZPiJekthgDQmTEK0eTRNiQcproXibruGnJmVzINyPwZagBn6zhY0YcGRXn9aN2VzWBKKp22pLV5cMl7ZZ2/wWANg8azDoIqjm1gTwEMOLnx1lL1A7D2m97mhqajjJuVkS/Y= 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 1783544658227100.70295042997395; Wed, 8 Jul 2026 14:04:18 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1357350.1611782 (Exim 4.92) (envelope-from ) id 1whZQo-0003sX-Nx; Wed, 08 Jul 2026 21:03:46 +0000 Received: by outflank-mailman (output) from mailman id 1357350.1611782; Wed, 08 Jul 2026 21:03:46 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQo-0003s5-K9; Wed, 08 Jul 2026 21:03:46 +0000 Received: by outflank-mailman (input) for mailman id 1357350; Wed, 08 Jul 2026 21:03:44 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQm-0003oJ-QG for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 21:03:44 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1whZQl-00BD5T-Vf for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 23:03:43 +0200 Received: from [10.42.69.9] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a4ebafe-e002-0a2a0a5209dd-0a2a4509dc22-34 for ; Wed, 08 Jul 2026 23:03:43 +0200 Received: from [52.101.57.41] (helo=BN8PR05CU002.outbound.protection.outlook.com) by tlsNG-bad1c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a4ebb2e-97e6-0a2a45090019-34653929b111-4 for ; Wed, 08 Jul 2026 23:03:43 +0200 Received: from DS1PR07CA0020.namprd07.prod.outlook.com (2603:10b6:8:44d::18) by CH3PR12MB8185.namprd12.prod.outlook.com (2603:10b6:610:123::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.11; Wed, 8 Jul 2026 21:03:34 +0000 Received: from CY4PEPF0000E9D9.namprd05.prod.outlook.com (2603:10b6:8:44d:cafe::46) by DS1PR07CA0020.outlook.office365.com (2603:10b6:8:44d::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.202.10 via Frontend Transport; Wed, 8 Jul 2026 21:03:34 +0000 Received: from satlexmb08.amd.com (165.204.84.17) by CY4PEPF0000E9D9.mail.protection.outlook.com (10.167.241.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 8 Jul 2026 21:03:34 +0000 Received: from Satlexmb09.amd.com (10.181.42.218) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 16:03:24 -0500 Received: from ubuntu (10.180.168.240) by satlexmb09.amd.com (10.181.42.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 14:03:23 -0700 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SV53JJaYr5hfkslGHN8rbgoHokAOxB7L8gWZGW+cABWcfzi3vg3IeJzReIKzViltEThcf2QNfXVmOuZ1LHS1uzogmjwPjgF2ccEiXJ6YRGDRkBltBRBbra/LViCeY9gMEcDWgCGjKfdoPWu4FXr8MQBE86XGR9oA/Mm7fFwzcRovpspKI36OMuihQu95YcHJxLvJGT9qCm4dz4dEPFF8qyJ9LEXOE52uEyvHDv6X0xh8I0Qe5/tG11/27HwBxicGM5O7CvfKfZQDlLg7vsKdOWr78QeOVF8yO+ouUwuXMdHAQ7pliKM5tZLsKI3xzcRpKh3NHCIx9QQM8FAMLSv2iw== 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=LX3mDmX0UiOUsankD8ZHIzdyC6Ou3P5sTJu+c9AM/Nc=; b=CVL4eW0nbMaSgpU40l3Krg3RcFtlyUCxNabRBY5HSjv1PjRMyeEs0VhUvzzZB6K3rjauCgy464a6Z3p9ECYG2X/BhKdvg9tCqYeynd17fulozNkylqj3fSsHPTct9F3WwxHmPj1N5Gw+MC/fJGFL+Wmddfkeb/kd0EuibmsMGgbgVmaNehSdjAk7HbG2uJYFcHKqd730xAcb9Yguqwa/zfN7qveeJibORUMrHet6h1f9YWQ6gAPcZ5InEbp46HPqHQbpaSd91Cs5CewcHdH88rWbKdMQJy9M/k0FKTmGqK3AOQoz6Rh5klUOmDCszfRaYdyVSdDxSy5OeeTPoR8CKg== 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=LX3mDmX0UiOUsankD8ZHIzdyC6Ou3P5sTJu+c9AM/Nc=; b=s2XqaLTZCd3M/drBHKcJeux+TAFh4rXRWxEZCvjWIHEKJSyNDBojgsz5hZz91dlBMmMgTC+iS2derNJ/B5kUE6MBBBVxtA4FvY2BJoP6laROrDcoXKwHyyYmGJOF2/6YTB1h1C52w9k3BDM9G4r9SMDdkMj1HmLtYydur/UUYWM= 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=satlexmb08.amd.com; pr=C From: Stewart Hildebrand To: CC: Roger Pau Monne , Stewart Hildebrand Subject: [PATCH v5 2/9] vpci: make BAR mapping more resilient for the hardware domain Date: Wed, 8 Jul 2026 17:02:17 -0400 Message-ID: <20260708210233.922275-3-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260708210233.922275-1-stewart.hildebrand@amd.com> References: <20260708210233.922275-1-stewart.hildebrand@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: satlexmb07.amd.com (10.181.42.216) To satlexmb09.amd.com (10.181.42.218) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9D9:EE_|CH3PR12MB8185:EE_ X-MS-Office365-Filtering-Correlation-Id: 59804325-2291-4500-4745-08dedd345fac X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|376014|23010399003|1800799024|82310400026|6133799003|18002099003|11063799006|22082099003|56012099006; X-Microsoft-Antispam-Message-Info: SKMMzIIBP7sahrwyYwLKPIiuKD1xhxQsu+SlJbRY3+DBx3uhNTqsUFIexAd+gDGHfalp+DbP3KMGet5171LfcPOE+O383qPr1uh78Xhxmir6A6r5BrNnptvZwiQ3fb9ZdG86P9pla60nyPlgCjSmKS20NtpGyrNnWXOZ8FMKNiL4Jt+WZIqycuT3G5zYKZnZRd7eA1Vs4yZr/wKic8mmOXKUX5WdTHU3X5ZgEDYaExfidGPJMX3tpkJ2iw33FpN0RYd7Xr7dLADm+fe8uO69CqtXt8y+h0m7hGk/hR4tueRANWurzwmBll6k9dK53PszjXwh+xGL1xw5vPmvxuqo5mVQxfm/uHsQ24A6Q8PZZRMmNEdYRTlpR07MAENR5NuePEn/z7U1T6l6qdUbdgZI9Hu+z2a2JIuZISyiMeS3sEBELV3nqEDS5f0VIgZ/n7Zs13vfG7+huUTqggcAjvN8SQA5csAXrOL6BO2fIMychAGuITaBmH6clIpzu2q+3na2O5UBNE5/MhogvOMnuKUcr7kY1ne5S0D889GB9Hdh/ihiGDxP/iz4qDcmpc+fboRxmgZPsYcpMF5STCMONj34OTZGvH5qOMZX+n3PzD+SLFe6YM4h7mioKmYqiid/Gd6/+YfOX4BtaClyZ0YYDSNXj3NtZXBU8yDk0edFiHYH/6/hnu5z7H34mDUMqBeZCV6aKagNt6cQ/UPHxMUoR16Bzg== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb08.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700016)(376014)(23010399003)(1800799024)(82310400026)(6133799003)(18002099003)(11063799006)(22082099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2XgnPlEh/dhI5I0Jp21i+22/UX2XL8dkNLayHApJbcOyIawh/Cm7y9wtTC6W+K/H3UiFRfvtwG9SWYmmoDfDDY0uaXllA20HFYx7icRkWhfAb/bXqyGSjNQm9aRbr+kNLGoqmHPK2apxj0SHOe7fgENjjL0INSoXKmz+LnooN5+sq6mnf0x6riWAvOQicLrqMybGK0vtO7z3yqUKydcKgfOfDIM6y7WXWFsvkEdvoLPEsUWS40YXEut15FAl8xgoKC47Eu3FryodW1tWuh4y15JPZFS0q8tYd7U4SRjKhS4bs00BlE1ycf8x8mafzj5ZJbnov8V4IjzHDz9/gRz/cDJbEKJLnq7Z8XII+66fN3FVxh4ZNgChqrEke14/MkVwkIlIUvEORomLtxX6bHrYUN9zLiOxs2blkmwDsicK3NWTpfxHAyqqAooiuriL/wPU X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2026 21:03:34.5517 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 59804325-2291-4500-4745-08dedd345fac 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=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9D9.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8185 X-purgate-ID: tlsNG-bad1c0/1783544623-4733F986-4E1CE8C4/0/0 X-purgate-type: clean X-purgate-size: 4148 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1783544658859158500 From: Roger Pau Monne The logic in map_range() will bubble up failures to the upper layer, which will result in any remaining regions being skip, and for the non-hardware domain case the owner domain of the device would be destroyed. However for the hardware domain the intent is to continue execution, hoping the failure to modify the p2m could be worked around by the hardware domain. To accomplish that in a better way, ignore failures and skip the range in that case, possibly continuing to map further ranges. Since the error path in vpci_process_pending() should only be used by domUs now, and it will unconditionally end up calling domain_crash(), simplify it: there's no need to cleanup if the domain will be destroyed. Memory decoding may be left enabled in case of mapping error for devices assigned to domUs. No functional change for domUs intended. Signed-off-by: Roger Pau Monn=C3=A9 Signed-off-by: Stewart Hildebrand --- Although not strictly a pre-requisite for queued p2m mapping, I've included this patch from Roger's vPCI fixes series since it simplifies the error path in vpci_process_pending(). v1->v5: * move "*c +=3D size;" outside is_hardware_domain condition * add note to commit message about not disabling memory decoding on failure --- xen/drivers/vpci/header.c | 45 +++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 5ac525036672..9f2d0c8a5452 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -70,17 +70,26 @@ static int cf_check map_range( =20 rc =3D map->map ? map_mmio_regions(map->d, _gfn(s), size, _mfn(map= _mfn)) : unmap_mmio_regions(map->d, _gfn(s), size, _mfn(map= _mfn)); - if ( rc =3D=3D 0 ) - { - *c +=3D size; - break; - } if ( rc < 0 ) { printk(XENLOG_G_WARNING "Failed to %smap [%lx %lx] -> [%lx %lx] for %pd: %d\n", map->map ? "" : "un", s, e, map_mfn, map_mfn + size, map->d, rc); + goto done; + } + if ( rc =3D=3D 0 ) + { + done: + if ( is_hardware_domain(map->d) ) + /* + * Ignore failures for the hardware domain and skip the ra= nge. + * Do it as a best effort workaround to attempt to get the + * hardware domain to boot. + */ + rc =3D 0; + + *c +=3D size; break; } ASSERT(rc < size); @@ -196,28 +205,22 @@ bool vpci_process_pending(struct vcpu *v) return true; } =20 - if ( rc ) + if ( rc && !is_hardware_domain(v->domain) ) { - 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); =20 - if ( !is_hardware_domain(v->domain) ) - domain_crash(v->domain); + domain_crash(v->domain); =20 return false; } + ASSERT(!rc); + /* + * Purge rangeset to deal with the hardware domain having triggere= d an + * error. It shouldn't be possible, as map_range() will always sw= allow + * errors for hardware domain owned devices, and + * rangeset_consume_ranges() itself doesn't generate any errors. + */ + rangeset_purge(bar->mem); } v->vpci.pdev =3D NULL; =20 --=20 2.54.0 From nobody Thu Jul 23 21:54:32 2026 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=1783544655; cv=pass; d=zohomail.com; s=zohoarc; b=lfwjvguHJXMyLGNyX2f/fHUBoMN7ecQQhfWgXCiSiX0+1tLb39vtgsomH7XpGO+nrQqLxCSN50cPc+WPQac69yU+rv8pEROgasDNSl7dvCEiPVtFLWSR3FZo2EYhoOmORW93Dgi48WJmvjGMTS2TZcwENDjGwGk6TVChgRK+0WE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783544655; 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=DSKtr1QODaGQ+yBMbiw0PTCEl6qNRjC3impW+6VKld0=; b=Tedpzm0/ICiLTfmEhS+KSE6oLQZ4gg061yvYBhlQ6zKFVUlyelee3UndkiLs+cg5BvlFvAHAdX6tB96yDT7W7eLrGl5aELowBD3YMjY/HEAvS4h8qv9qIABeEs/Ywt20NhOrv7DOq/2whPo8Gh8C1+b56g8TCQpD6+tEdD4nLrE= 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 1783544655574636.4263938651435; Wed, 8 Jul 2026 14:04:15 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1357347.1611758 (Exim 4.92) (envelope-from ) id 1whZQk-0003Hv-2b; Wed, 08 Jul 2026 21:03:42 +0000 Received: by outflank-mailman (output) from mailman id 1357347.1611758; Wed, 08 Jul 2026 21:03: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 1whZQj-0003HE-Ug; Wed, 08 Jul 2026 21:03:41 +0000 Received: by outflank-mailman (input) for mailman id 1357347; Wed, 08 Jul 2026 21:03:41 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQi-0003BV-Tz for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 21:03:41 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1whZQi-001FOW-1P for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 23:03:40 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a4ebb18-5cb7-0a2a0a5109dd-0a2a4506bcd2-20 for ; Wed, 08 Jul 2026 23:03:39 +0200 Received: from [40.93.196.65] (helo=SA9PR02CU001.outbound.protection.outlook.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a4ebb2a-08de-0a2a45060019-285dc44164ea-3 for ; Wed, 08 Jul 2026 23:03:39 +0200 Received: from CH0P221CA0044.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:11d::27) by CH3PR12MB7667.namprd12.prod.outlook.com (2603:10b6:610:14f::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.10; Wed, 8 Jul 2026 21:03:35 +0000 Received: from CH3PEPF0000000C.namprd04.prod.outlook.com (2603:10b6:610:11d:cafe::72) by CH0P221CA0044.outlook.office365.com (2603:10b6:610:11d::27) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.181.10 via Frontend Transport; Wed, 8 Jul 2026 21:03:35 +0000 Received: from satlexmb08.amd.com (165.204.84.17) by CH3PEPF0000000C.mail.protection.outlook.com (10.167.244.39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 8 Jul 2026 21:03:34 +0000 Received: from Satlexmb09.amd.com (10.181.42.218) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 16:03:29 -0500 Received: from ubuntu (10.180.168.240) by satlexmb09.amd.com (10.181.42.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 14:03:29 -0700 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UK3Gmy8oby9ofsA7T0E/gPoVclyD6ZOLaydoexBeXCIz1fFlNjpieWKjzCTzUsd8RgM7REz+H15HGSjd/uS0uBI3eYA/MWGx0YRNfyUvO6Z01RQRI3ObXiMq6ZooQ05/hVBPlP6Uq4ze78X5p12L6JPjtfN4eosKGH3ojPjL5hXha8umHA1UPpIt5f8Qf99E4jVgkQ2CijeHmY+FP5ShWOKP3By6AlxPIYeqHUbMMgt2Q25WsgQYDj5fOXsOE5ml9mR/3zEzZfyVHiXKRYalo5YI6TeMveurPF5UO2wdDguaQv1KE5/7Z4Wb1WPo64C4p2wfEYMuGmYsuVxAxsPpzQ== 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=DSKtr1QODaGQ+yBMbiw0PTCEl6qNRjC3impW+6VKld0=; b=X5jNpdrDA6pjoEfMB6AFNa9ptHGbWzQmHzH/xTBUE8ZgqfFQXcrPNFXx1eszEZFhya4BDivLVFxjAtnfESslrRRQUmUE1/EHl1btXaVVhI18Km+IG5PFa2KeHNhcx9bdIPpLGofpomFII7jVtcZTIfuTQJ8ZfIkPRQ5a2D+Zifm1BVCvfg2ZSNanXgTDIHOJDB3dOtVmASNNEGPgATeBCbHshjRTtNJHviPBMU5kJ7EhD9zXG5x25qmNj5u80OCA/oCEdAWxYtiasDsSviFXaYMehEyfvONLZZtK5CBdMP4/uSDO7il7fFefLYFIjHn1po/nVpFkH9r6dTO79hHDGw== 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=DSKtr1QODaGQ+yBMbiw0PTCEl6qNRjC3impW+6VKld0=; b=XFpvO2KXwvZarZn8GTxeguY5V7C8gXmAN1h/5Ann5Jh662tAr+q8yS1sUpjXl4DDQBYLnH4EAocq9qNFRchteyuvPnFtDtPDd4+A0jTZYgunNf5fCdC3bk9KNjvYj/5OvO79EVVYO24MBKYGGng9kXt3+s5BRBBqAaXYRb/WEzk= 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=satlexmb08.amd.com; pr=C From: Stewart Hildebrand To: CC: Roger Pau Monne , Stewart Hildebrand , Andrew Cooper Subject: [PATCH v5 3/9] vpci: only check BAR validity once Date: Wed, 8 Jul 2026 17:02:18 -0400 Message-ID: <20260708210233.922275-4-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260708210233.922275-1-stewart.hildebrand@amd.com> References: <20260708210233.922275-1-stewart.hildebrand@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: satlexmb07.amd.com (10.181.42.216) To satlexmb09.amd.com (10.181.42.218) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000C:EE_|CH3PR12MB7667:EE_ X-MS-Office365-Filtering-Correlation-Id: 317a639d-aaf4-41de-07e7-08dedd345fdd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|23010399003|376014|36860700016|13003099007|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: PJ/S7en6FHNjzOhtO5YbTP5LbdWA53G215p1RQGfHHiJVU2tFagmKAu/fhPl0TduAAu//wD3nf30PEeKjCddavYgaY8q1fAd70EldIP5ROzUQFzhWCV6TQJIa5sW1uQkYn8BS3V2Tn+wI+rA94r/P6UtPVfL8SbNdSORpUf4lDnY04fqpptjUEZdfqWWZb+9/MFImj+V2gC5SZphekNl5hLe65zTlwriYl2EckluxWw22TPvuJpuoDaFr980+JtNLusm0Jep6MQHHSnB0Wy9dWo/GWjQfgCgbx87DE1iWeCeRibDcuUTVMNKlZOXffjdL/YUx5LgCEQ0yStYbxLZkIv/fJXJ1upAENLJA4bgy7f0XtWwhasf2BVWTg3NGLJ1XAZhyyhLAw06HCWty4wPthPzFC7k5WBWAmMS2X3tDZPrp3ifkiqhPXJk/2/o8M7+lqBI7WA27pkt2DJZPQQndGocOvyy6sWB9TW/LitUzy3SWnG1XHnRXs+G8sWSsxoWznB7Y25/pNE6mAuei4McbIkvtauZ5raJqhOX5pxIAshCIdHUqh1VlXYn5v170JtPrM66Yqr9NEGTf07Q4yCgk4nQI/EOm9D3iyjB10jQB3QAsMT/nDmSGXiyy1sC21fTgCqMPwHvFCvklTMZqKmctRxJk2YPkUUSQieAYk63Vgz/PdEb3mJp/59ds/3XCDIh/8Zmx4RuXKG6o1zhiMzyDw== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb08.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(23010399003)(376014)(36860700016)(13003099007)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: p7EdcUcq/vmYTVI6FIFb21IpNJntPfhHMDC5ItGe6q19vs7sYeIvYSujPpPGizYXECH9XlavDVRJExMaIXvSFUG/jH3tGJ2+A/TpG1/gx2mYWHRyYMjk5EBDtBQyKHbfgLHJDk/oJlveNwpm2/KbL9l4gOPjQjeVmBRRaQuzDdWCPqgdC7ofzNOwnYDEtay+dEsvNpVE/WATsEVh/NRs6tfwA596Fqxq0LRxpQG4lj2WUngzqIUDamCMwiAhnv1NFe+V2y0VVz8wE3A/EmRtFpuloUxAANWhzyL21bLk1bAz6UUuNLyd9SEpARDiSBpq0SZQMF0Wv6974/8NQFfr1i21Z/LXcxPD4VHZYnDLENXIKah/46FeRFStYyZ/NEAeCdtC5RD8KxpAXJxgiDeRCdS/L2HU41+K9j89cZxGul4J0/qjnL61m5uIrSw8su1j X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2026 21:03:34.9008 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 317a639d-aaf4-41de-07e7-08dedd345fdd 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=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000C.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB7667 X-purgate-ID: tlsNG-16d1c6/1783544619-C513768D-AB82D982/0/0 X-purgate-type: clean X-purgate-size: 3969 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1783544656987158500 From: Roger Pau Monne The BAR validity checks in modify_decoding() are redundant since they are already done in modify_bars(). Avoid multiple calls to pci_check_bar() for the same memory decoding related operation, as each call can possibly print a warning message about a BAR being in an invalid position. Further, there's no need to defer setting bar->enabled until p2m operations are finished. It can safely be set in modify_bars() itself. This slightly changes the meaning of the bar->enabled flag: when true, it means a BAR is either mapped or queued to be mapped. Store whether the BAR is validly positioned in modify_bars(), and use the cached value for setting bar->enabled. Reported-by: Andrew Cooper Fixes: 4acab25a9300 ('x86/vpci: fix handling of BAR overlaps with non-hole = regions') Signed-off-by: Roger Pau Monn=C3=A9 Signed-off-by: Stewart Hildebrand --- v1->v5: * rebase * don't defer setting bar->enabled * use local variable for bar_valid flag Original report [1]: [1] https://lore.kernel.org/xen-devel/dbc003a2-9202-46ec-bf87-2829d8a63d53@= citrix.com/ --- xen/drivers/vpci/header.c | 18 +++++++++--------- xen/include/xen/vpci.h | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 9f2d0c8a5452..1fd4832033e9 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -128,19 +128,10 @@ static void modify_decoding(const struct pci_dev *pde= v, uint16_t cmd, uint32_t val =3D bar->addr | (map ? PCI_ROM_ADDRESS_ENABLE : 0); =20 - if ( pci_check_bar(pdev, _mfn(PFN_DOWN(bar->addr)), - _mfn(PFN_DOWN(bar->addr + bar->size - 1))) ) - bar->enabled =3D map; header->rom_enabled =3D map; pci_conf_write32(pdev->sbdf, rom_pos, val); return; } - - if ( !rom_only && - (bar->type !=3D VPCI_BAR_ROM || header->rom_enabled) && - pci_check_bar(pdev, _mfn(PFN_DOWN(bar->addr)), - _mfn(PFN_DOWN(bar->addr + bar->size - 1))) ) - bar->enabled =3D map; } =20 /* @@ -296,6 +287,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) struct pci_dev *tmp; const struct domain *d; const struct vpci_msix *msix =3D pdev->vpci->msix; + bool bar_valid[ARRAY_SIZE(header->bars)] =3D { false }; unsigned int i, j; int rc; =20 @@ -341,6 +333,8 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) =20 ASSERT(rangeset_is_empty(bar->mem)); =20 + bar_valid[i] =3D true; + /* * Make sure that the guest set address has the same page offset * as the physical address on the host or otherwise things won't w= ork as @@ -506,6 +500,12 @@ static int modify_bars(const struct pci_dev *pdev, uin= t16_t cmd, bool rom_only) d =3D dom_xen; } =20 + for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) + { + if ( bar_valid[i] ) + header->bars[i].enabled =3D cmd & PCI_COMMAND_MEMORY; + } + if ( system_state < SYS_STATE_active ) { /* diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index 877aa391d178..ab94eb60d65f 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -64,7 +64,7 @@ struct vpci { VPCI_BAR_ROM, } type; bool prefetchable : 1; - /* Store whether the BAR is mapped into guest p2m. */ + /* Whether the BAR is mapped or queued for mapping in guest p2= m. */ bool enabled : 1; } bars[PCI_HEADER_NORMAL_NR_BARS + 1]; /* At most 6 BARS + 1 expansion ROM BAR. */ --=20 2.54.0 From nobody Thu Jul 23 21:54:32 2026 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=1783544647; cv=pass; d=zohomail.com; s=zohoarc; b=OOCzT9GAM1aPbrauON38mdGHrMWN1Mz7yDABtj+ROD0ME8OtwhFMPoFD7++HlruzcVvN/Zwex0AiCcGcxoNvppa6E8HYw2mvViaGCk5JpVmk2xihFe8azToBxYBZoUbejr4cCKW2gbTlZEQ2I/Iy8JWfx/OrrmTRJp8KXO19q1w= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783544647; 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=gcreZ/yNtHeipp+IQwqa98GHDSr0hRONrQURcLHiG7E=; b=QhcTSm8YbPeZeEwegMwnRNatpMrj07bpREIAhRgydPTi4tATb4J6x7gy1zMHUhOXdlm5E+sOJTwiukOn6hiy6R2cVFd7RH2gFBa5ahMQj4I7/5l4azjnsA26b9EjRHHatg5okLIqRjMeLPANMwzPT8ENY0VC/kGIZ04XossmsYQ= 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 178354464728594.61819846735057; Wed, 8 Jul 2026 14:04:07 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1357348.1611770 (Exim 4.92) (envelope-from ) id 1whZQl-0003bH-9J; Wed, 08 Jul 2026 21:03:43 +0000 Received: by outflank-mailman (output) from mailman id 1357348.1611770; Wed, 08 Jul 2026 21:03:43 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQl-0003bA-5m; Wed, 08 Jul 2026 21:03:43 +0000 Received: by outflank-mailman (input) for mailman id 1357348; Wed, 08 Jul 2026 21:03:41 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQj-0003Bb-El for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 21:03:41 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1whZQi-001FOW-Rv for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 23:03:40 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a4ebb18-5cb7-0a2a0a5109dd-0a2a4506bcd2-26 for ; Wed, 08 Jul 2026 23:03:40 +0200 Received: from [52.101.61.59] (helo=DM1PR04CU001.outbound.protection.outlook.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a4ebb2b-08de-0a2a45060019-34653d3b3f23-3 for ; Wed, 08 Jul 2026 23:03:40 +0200 Received: from CH0P221CA0026.NAMP221.PROD.OUTLOOK.COM (2603:10b6:610:11d::6) by DM6PR12MB4435.namprd12.prod.outlook.com (2603:10b6:5:2a6::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.14; Wed, 8 Jul 2026 21:03:36 +0000 Received: from CH3PEPF0000000C.namprd04.prod.outlook.com (2603:10b6:610:11d:cafe::16) by CH0P221CA0026.outlook.office365.com (2603:10b6:610:11d::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.202.10 via Frontend Transport; Wed, 8 Jul 2026 21:03:36 +0000 Received: from satlexmb08.amd.com (165.204.84.17) by CH3PEPF0000000C.mail.protection.outlook.com (10.167.244.39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 8 Jul 2026 21:03:36 +0000 Received: from Satlexmb09.amd.com (10.181.42.218) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 16:03:35 -0500 Received: from ubuntu (10.180.168.240) by satlexmb09.amd.com (10.181.42.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 14:03:35 -0700 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=m8Qei/p0jHBxVkppaYSnNj2hwlvYj61LHN9PG9QzAb5uDaFegy+CirUSa+kOC58H4qTT25EYOcp3VRfTk4cd8UKlCAqT3NnLK13m4BmqWOUlVDBLXfsxyadHQDKGlxE6fKHjjYtQHjjXB1BLCwSE27iHKMb6FDVQSBzfP7SDZ9guBLO0umV7GAjAdGa5MwydI8x4ZvKYXZEDquFxFc269Dz6ple9z2OZc2YPKLExVf3e9yGfrC9joaZYYcXwVKDvEVunkv/u8m4BOU6RgYSzYZT8Ur6djQjXDekv+U8yUOqIyTDo/fsdJvU0FKDmE3W9CDeUfy0EZJUkSD93K2GOgA== 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=gcreZ/yNtHeipp+IQwqa98GHDSr0hRONrQURcLHiG7E=; b=HOgt5qZEI5C5QHPu07RmSKBb192DvLpmVVWFHsqz7O01ljRTeJLqAiIKvk8he+r8Fku0aeo4IQ8IVz5D2Y/AF1yuXjUa55IqsaiUUJ2FwThnK99M5zLoCiS6pmtYROgoLB2PyJFtEowrCXaYJ0MZXvRjQ+hrTMFSxFR9WD0fTRicl13mdqI8mV3/XUArSbCxWEsNCXFWYjvLOmXDxftTIi3sNYHWY2CsfoYVCTewWk+vg4WUuMqVMbmRJbKXG90f04fe480QKMmdZpIMkZwpNdP5hK8fFLrYd3F21qbRkOBgXyipuNVYZnuR775SWDCYQkyPSsYKShfILlv4L03/dw== 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=gcreZ/yNtHeipp+IQwqa98GHDSr0hRONrQURcLHiG7E=; b=jNU0tXHPcDcstPRTzyN2/hTZbCdbHANW/jLfnX1ojOEFVBr/PJROuCq1GIlsbziRJPcF7oWXWkYiBhGMoE9yUrniakDvb/mX7DJokLoIytvLHz5mKotFTuQDq1FDC1tgdDgTTtP4fs+VIEb8GBMMcxnyTffVJGCh3/UKC4Ikfmc= 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=satlexmb08.amd.com; pr=C From: Stewart Hildebrand To: CC: Roger Pau Monne , Stewart Hildebrand Subject: [PATCH v5 4/9] vpci/msix: move MSI-X hole punching as a result of memory decoding enable Date: Wed, 8 Jul 2026 17:02:19 -0400 Message-ID: <20260708210233.922275-5-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260708210233.922275-1-stewart.hildebrand@amd.com> References: <20260708210233.922275-1-stewart.hildebrand@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: satlexmb07.amd.com (10.181.42.216) To satlexmb09.amd.com (10.181.42.218) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000C:EE_|DM6PR12MB4435:EE_ X-MS-Office365-Filtering-Correlation-Id: 84d4b59f-4dd8-4687-66ac-08dedd34608c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700016|376014|82310400026|23010399003|13003099007|18002099003|22082099003|6133799003|5023799004|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: nTJloavw2r/OWjTKnO87BfrHsBsF3i3Qy1iciNJ+EuKy0DRU6+rrnrg/Gs5iF05hCGa0Px2oEjfiOlxxiHc16tpod1mXUtkbzeBQT8xOHQG01jn8TX8Ysqo4RvayBQu6BlSmsBR0LEk7Ym8bq4qVcKIQ7wRnSQVhmgOX57HN5ZkqHzJPxfFkO0dDqx9eBt7OHzV+MvMyljiwDZ9W5C/Gdsb3zQPdfHugVahj4KiqrS6upqLyy88t5dSmDvu4D27nNYRNR6gq/YRoKrmWp8qgtQ22s+0f3vElXO52w57XuG6kvbYmO4s5I9WpI4aO1tHmMTZplsgmjOI/B/dM0xAmweKD1fw7Gu/miBbimb0TsoM0Pl8Nz4sa2lVaoGzVBccX9v8VAnrxsj0AT1Bs0iGtpPbSuWRCWNbktcbF+fcATL6512q7CJMbVKQ5B70/He8c6SzfdSnH3A9OnaHG0kb27fLfQB7X09UQvJXCtFYTUmvt2gGGqaItt1l+T8hUvx8EczN9JaeRBIpqlJRKpt6Djq5HkNCnQdFsJWz8SS4qZ8k9I+bszs+oAcG8p6MlRiVrhCPNpzeNfEydRqve/m1BJIfG2BvTgKaFe+x3/S0emcXy9braB+2NeNWnXhFf+0ShYcuyKH5jpyhtIrI1MPL18Ui4YLlxxe4RhwyhPuyz1zOAmqmqheCxmxWvAB8g+Rpyhk0+ddTQYiSq0oqLoKKYyA== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb08.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(36860700016)(376014)(82310400026)(23010399003)(13003099007)(18002099003)(22082099003)(6133799003)(5023799004)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: GloOGldQnjkyzuD6i1217oRt2UlaGYTJaXvKxYAyXK4jgbanu+LquN2e0iLMYjC/sm5i+LyBzSUfV/qQkIAnj3CSOWrQGU5VyQJbDuM/yRZohUmrLuGZeZe4uGKad+Io/PA9LP/Rnc+H+rwL63N8AUSVrkxvTPBo4zWy06b3l9zRI9buxiYkRkYgTTbI7f+L+ri1LKc24VSUFO9Tc0RSdhR4c06QrbAmumE9pdB/4SdNPqFC22oohzQTyfcZGYSgCy9tICp0kp6/D2c71gyvAmy3FewY/puTXaOs9gtsz8zcEYsfrVGd+pqs24CWEGb4bUGF7aPRrV/rdxvJwjHvlW8ijNaubwA7x6kpisLaSDnPnMu0dFmsAzTJekMf17XL09PfQzg/nAoMwXCjib33HuI7XEGsigwf/7qDFWTmTW1U5kGScTyGHGR0roE8p7Fx X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2026 21:03:36.0791 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 84d4b59f-4dd8-4687-66ac-08dedd34608c 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=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000C.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4435 X-purgate-ID: tlsNG-16d1c6/1783544620-F81E568D-655A63EA/0/0 X-purgate-type: clean X-purgate-size: 4042 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1783544648997158500 From: Roger Pau Monne Deferring the p2m unpopulate of the MSI-X table region to after the BARs are mapped in the p2m is not needed. The aim of vpci_make_msix_hole() is to cope with the BAR containing the MSI-X table being positioned over a reserved e820 region, by making sure the MSI-X table region is unpopulated on the p2m. Note that reserved e820 regions are identity mapped in the hardware domain p2m by default. Doing it before or after the BAR p2m changes are done is irrelevant, hence do it ahead of the p2m changes, as that's simpler. Note that vpci_make_msix_hole() should be invoked strictly after setting bar->enabled. The movement of vpci_make_msix_hole() is OK since bar->enabled is set in modify_bars(). Take the opportunity to store the memory decoding enabled bit in a local variable. Signed-off-by: Roger Pau Monn=C3=A9 Signed-off-by: Stewart Hildebrand --- Note that this should not be committed until after the bar->enabled setting movement in ("xen/vpci: only check BAR validity once") I tested this with hot-plug as described in 7c24d58a6e64 ("vpci/msix: check for BARs enabled in vpci_make_msix_hole"). The return at the end of the function will gain a purpose again after a later code movement patch in the series. The new_enabled variable will gain 2 additional uses later in the series. v1->v5: * order after ("xen/vpci: only check BAR validity once") * preserve behavior of only invoking vpci_make_msix_hole() when memory decoding toggles from 0 to 1 * add note about vpci_make_msix_hole() invocation after setting bar->enabled * use local variable * Jan offered an R-b tag in [1], though I hesitated to pick it up due to changes, and it was offered prior to 7c24d58a6e64 going upstream [1] https://lore.kernel.org/xen-devel/e2c4944d-d089-490c-879d-b6baec5e4cae@= suse.com/ --- xen/drivers/vpci/header.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 1fd4832033e9..cf9d0bac8876 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -134,19 +134,6 @@ static void modify_decoding(const struct pci_dev *pdev= , uint16_t cmd, } } =20 - /* - * Make sure there are no mappings in the MSIX MMIO areas, so that acc= esses - * can be trapped (and emulated) by Xen when the memory decoding bit is - * enabled. - * - * FIXME: punching holes after the p2m has been set up might be racy f= or - * DomU usage, needs to be revisited. - */ -#ifdef CONFIG_HAS_PCI_MSI - if ( map && !rom_only && vpci_make_msix_hole(pdev) ) - return; -#endif - if ( !rom_only ) { pci_conf_write16(pdev->sbdf, PCI_COMMAND, cmd); @@ -529,6 +516,7 @@ static void cf_check cmd_write( const struct pci_dev *pdev, unsigned int reg, uint32_t cmd, void *data) { struct vpci_header *header =3D data; + bool new_enabled =3D cmd & PCI_COMMAND_MEMORY; =20 if ( !is_hardware_domain(pdev->domain) ) { @@ -546,7 +534,7 @@ static void cf_check cmd_write( * decoding one. Bits that are not allowed for DomU are already * handled above and by the rsvdp_mask. */ - if ( header->bars_mapped !=3D !!(cmd & PCI_COMMAND_MEMORY) ) + if ( header->bars_mapped !=3D new_enabled ) /* * Ignore the error. No memory has been added or removed from the = p2m * (because the actual p2m changes are deferred in defer_map) and = the @@ -556,6 +544,12 @@ static void cf_check cmd_write( modify_bars(pdev, cmd, false); else pci_conf_write16(pdev->sbdf, reg, cmd); + +#ifdef CONFIG_HAS_PCI_MSI + /* Unpopulate MSI-X table region, so accesses trap into Xen. */ + if ( !header->bars_mapped && new_enabled && vpci_make_msix_hole(pdev) ) + return; +#endif } =20 static uint32_t cf_check guest_cmd_read( --=20 2.54.0 From nobody Thu Jul 23 21:54:32 2026 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=1783544655; cv=pass; d=zohomail.com; s=zohoarc; b=AzE0CkwpS461TC64FWgM5HexX47PfRjRhbbB/jvd4P4VYQYNnsQIAENvrouTaHx4j+FL9StOJCQ/uztOxOEBXMLRDgCAsiTeDsesi3NKKjUpitMaCJm1P2ewumc1c0y8/7ihzaXxcawOINOqalTQ/ccSfSb+Th11BmGMvSwtQEo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783544655; 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=VVUodHck0vEaTTblxDg5RDc7BDsFcyAxQrfUdezpsHI=; b=e0X5EaboiqQh3e4Jts763BFEt8RLJlogI3GOxT98CsOS+uZuUOLcAKkrE14NiWVk/Syx3ZeDjlTrVXYYkn/yKafdT0QqzVQi183lI6XOg0WgzOAlE0n+Y84CZKCY6VWqhRs+Ql/Dv6EJ2JXuMlGA4c+A5PrbCIJalN0M1efcUsI= 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 1783544655651538.1406216364592; Wed, 8 Jul 2026 14:04:15 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1357351.1611797 (Exim 4.92) (envelope-from ) id 1whZQv-0004QQ-8T; Wed, 08 Jul 2026 21:03:53 +0000 Received: by outflank-mailman (output) from mailman id 1357351.1611797; Wed, 08 Jul 2026 21:03:53 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQv-0004Q6-5B; Wed, 08 Jul 2026 21:03:53 +0000 Received: by outflank-mailman (input) for mailman id 1357351; Wed, 08 Jul 2026 21:03:52 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQu-0004NW-Hz for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 21:03:52 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1whZQt-00CYbB-HL for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 23:03:51 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a4ebafd-bab6-0a2a0a5309dd-0a2a4502c1f2-36 for ; Wed, 08 Jul 2026 23:03:51 +0200 Received: from [52.101.61.60] (helo=DM1PR04CU001.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a4ebb35-5a27-0a2a45020019-34653d3c37fb-3 for ; Wed, 08 Jul 2026 23:03:50 +0200 Received: from CH0PR03CA0362.namprd03.prod.outlook.com (2603:10b6:610:119::9) by DM4PR12MB6664.namprd12.prod.outlook.com (2603:10b6:8:bb::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.9; Wed, 8 Jul 2026 21:03:42 +0000 Received: from CH3PEPF0000000B.namprd04.prod.outlook.com (2603:10b6:610:119:cafe::55) by CH0PR03CA0362.outlook.office365.com (2603:10b6:610:119::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.202.10 via Frontend Transport; Wed, 8 Jul 2026 21:03:42 +0000 Received: from satlexmb08.amd.com (165.204.84.17) by CH3PEPF0000000B.mail.protection.outlook.com (10.167.244.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 8 Jul 2026 21:03:41 +0000 Received: from Satlexmb09.amd.com (10.181.42.218) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 16:03:41 -0500 Received: from ubuntu (10.180.168.240) by satlexmb09.amd.com (10.181.42.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 14:03:41 -0700 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KN60nnxFFwJSSDrfCC10oE3/sBu/YBouEwTCQY95C6DDJx3wUXx5c1qq1LKc1Zy08sTRARQENz6O5HWzU7+AMVna4Z/e8HsF3Y4eOiI/LhC2Nn9cJlFYONIz6BoC9dfUEhqoDxpYq5s5J5hGD4ULYdk6Q/oZ/wqK1acSWLYuAgR57nO1IwTfhOo576ECCzO9YzuqtpQv4m0xEmEHXrVkYBy2G0wMh39h0Avwt79pkAcE1KTfV4AFuRhwhEy5yB/0m+X4BZCftZsyJcpjijcX/Z4gAMHtqIu769O4SMuJlAIVVNk3pfRKncTu68X7nmMP1/UVcfk9YIq9DYg/hFVuoQ== 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=VVUodHck0vEaTTblxDg5RDc7BDsFcyAxQrfUdezpsHI=; b=Y3OtsuuQlIOooIaC0Eo+vexfSM5FFyzx0QGooESIQcECCDssq6SsnfdDn82FhNLdMaE+Y6hQdpMAWa6iNS/F3Y16eZ3Isw9ex2bNnD+/rvw9jXzignRLv+57Uy3Cln0HCL3+VPJVhXKTnU7LqUbtl6QQcFOoX9zUPsyMnY3X2vPAzM0HUEt3gwbW8LRB0d1YXRjk5N9VnzJ6vQFi/+E6zzedgavyEYuTNFmo50O1TIvYDL6JpNbPnALmf0b+KQ18P6GbANd7X3MH8HHoEPqF9s9PsfFyhmbbQsELvLeuvx1kOgOwwlUvOVjZzYDuqqchDTkG43ut1oWmadtl7w+b2Q== 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=VVUodHck0vEaTTblxDg5RDc7BDsFcyAxQrfUdezpsHI=; b=3LhAIgOWB8fP2T9tqWVx9jqWMhf294LShZHBbaKGU5i3/4CsK+TMHggBkbKdLoasqv4fIZ+zLg1rUMyNxIrJPOKoLXzDkhCHxzw83Ip+cM3M+pweDI8gxsmTufUGwLeOtrifszAPjePHOh1GhIdRyhP1assZek2wM7oY8LFn6pk= 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=satlexmb08.amd.com; pr=C From: Stewart Hildebrand To: CC: Roger Pau Monne , Stewart Hildebrand Subject: [PATCH v5 5/9] vpci: simplify handling of memory decoding and ROM enable writes Date: Wed, 8 Jul 2026 17:02:20 -0400 Message-ID: <20260708210233.922275-6-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260708210233.922275-1-stewart.hildebrand@amd.com> References: <20260708210233.922275-1-stewart.hildebrand@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: satlexmb07.amd.com (10.181.42.216) To satlexmb09.amd.com (10.181.42.218) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000B:EE_|DM4PR12MB6664:EE_ X-MS-Office365-Filtering-Correlation-Id: 05df2474-5f02-41a2-c0ad-08dedd346408 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|36860700016|1800799024|82310400026|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: 6z0ELKaOZ9oqmhr9HvY8dox93fJIWG8HluOXzKVseqFiJMZqCTxqLB2Nv8RuVpR9DZaFgoq8V0KtGUOcruUqyo7+EN2a/FTf1di7xhjk9dHuJ4gltIwkZCN32Hsqhiw611W37BOiwcn7N0X465rIlGRYOY5Q6N9SUHXYyMasXonSBg04+6+aTCL8SqvPS9a42lvgbEoIzVxeCixs5bALum3MUnN6Gzt+a7g9EmRJp8g98L9yekw/cEp5oCJME1Rn4I6CVpwvuNnfqBpMuJqTuyJ7gnfCX6DSEl4WyEkoe22yWnRuSGyL0gClwEKcs0z3qBLQTy+s8K0afBdgZifmdPYRognMjmY+bWvuwNBek2Paoif9t6NOjab2GZKTWCx+bGGFrsMTylANjRMGEL76A5/f+kQNGBIL7kcQahqx+ryLMBHoOUQakl6FvNcCePMjR8uLbA6zpYNzxl0ih0BrWvm99y+tyCDv1Iipyg87rA74WZKMvvm4LcHCHPO8BwS0AJqSidjLKAZXJeJ8Z87i46MDzE4nGZlpsOLkfgl35dlNBgjlwgPUlx1YsGVR6j2aNO39R5GzoQZuFYm/+lSCTp9B7XIteTZDTjIakJwpS3O+htGSGh7dfxz2EXEB+4mndTmixUw4J9va0dAw/mHNBdcDPZfdUx+spCEqnpuG9/oc+tbmdP7f2J3XZ7ax0aCq3bCNfSOgj2ARJFCwGbrvUw== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb08.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(23010399003)(376014)(36860700016)(1800799024)(82310400026)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: X/SjnTYyp95Fy6Iq9DMjGbQLlUs5uU+Gf11Sd0fSdhmJ9BeJpXoHFWTX6eoL1RtpqUXjkpENRKKe6xpGut2R5e7TSFis45k+/GQB8qYgGScAB2g4Ep8RihUE6zSCTrOxYJC7El0GhEbmL3opwcO4wIqUKRxu5PikJL+kZx2gmi0XUj5TjJAmMrodqmFLPfdyMdtdWkuwig1ZXiWKuOMegjYbC4dv2RPIuWUOsZVdD2uBTJ8yNyVX4zph+B83LLDrei95IsQMF4S6/tKjSOGuq3lfwb30C/wEmallKJlMJFhmmG4q1ae7m7umZOsowmbG+sAaDh/S+fRJ//npeJrFofTBRwuwn0n99orKQshR2G1SSkgY2JWaLqq1IrfWm9W1Jg1fws3/o6loiVXr4aQrB89wDRD94IuPIqQJ6FFY5JEXEcWKD+vKgt8fk5/hvg11 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2026 21:03:41.8972 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 05df2474-5f02-41a2-c0ad-08dedd346408 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=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6664 X-purgate-ID: tlsNG-720697/1783544631-4D70D7C5-F7AD733C/0/0 X-purgate-type: clean X-purgate-size: 7442 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1783544657052158500 From: Roger Pau Monne Deferring the actual write of the PCI register bit, either the memory decoding or the ROM enable is not helpful, and adds an unnecessary amount of complexity to the preemptible handling of BAR related p2m modifications. In the hardware domain case, whether the PCI register write is done ahead or after the p2m changes doesn't matter, a hardware domain has plenty of ways to mess with the PCI register state if it wants to. Any poking at the BAR p2m regions ahead of the guest write having completed will be undefined. On the other hand, for domUs the memory decoding bit shouldn't really change as a result of guest actions, and should always be enabled. Guest toggling the memory decoding command register should only result in p2m modifications, but no propagation to the device PCI registers. Having memory decoding unconditionally enabled ensures the domU attempting to perform p2m accesses while the p2m changes are taking place will always access the BAR contents. This is not the current behavior for domUs, so add a note that it would preferably done that way. This allows to get rid of modify_decoding(), as writing the command register can easily be done without the need for an external helper. Resolves: https://gitlab.com/xen-project/xen/-/issues/98 Signed-off-by: Roger Pau Monn=C3=A9 Signed-off-by: Stewart Hildebrand --- Since the full command register value is no longer needed after p2m operations, we could reasonably replace the cmd parameter to modify_bars() with 'bool map' immediately after this patch. However, I chose to wait until the end of the series to reduce the diffstat and make review easier. Note that in rom_write(), when rom->enabled and new_enabled are both false, rom->addr/guest_addr will be written twice. This quirk is preexisting, so I didn't think it was in the scope for this patch to address it. Do you think it's worth addressing separately? v1->v5: * rebase * reorder within series * in rom_write(), retain bars_mapped / enable toggle gate for invoking modify_bars() * add Resolves: tag --- xen/drivers/vpci/header.c | 80 +++++++++++---------------------------- 1 file changed, 22 insertions(+), 58 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index cf9d0bac8876..908adf0b3f4c 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -102,47 +102,6 @@ static int cf_check map_range( return rc; } =20 -/* - * The rom_only parameter is used to signal the map/unmap helpers that the= ROM - * BAR's enable bit has changed with the memory decoding bit already enabl= ed. - * If rom_only is not set then it's the memory decoding bit that changed. - */ -static void modify_decoding(const struct pci_dev *pdev, uint16_t cmd, - bool rom_only) -{ - struct vpci_header *header =3D &pdev->vpci->header; - bool map =3D cmd & PCI_COMMAND_MEMORY; - unsigned int i; - - for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) - { - struct vpci_bar *bar =3D &header->bars[i]; - - if ( !MAPPABLE_BAR(bar) ) - continue; - - if ( rom_only && bar->type =3D=3D VPCI_BAR_ROM ) - { - unsigned int rom_pos =3D (i =3D=3D PCI_HEADER_NORMAL_NR_BARS) - ? PCI_ROM_ADDRESS : PCI_ROM_ADDRESS1; - uint32_t val =3D bar->addr | - (map ? PCI_ROM_ADDRESS_ENABLE : 0); - - header->rom_enabled =3D map; - pci_conf_write32(pdev->sbdf, rom_pos, val); - return; - } - } - - if ( !rom_only ) - { - pci_conf_write16(pdev->sbdf, PCI_COMMAND, cmd); - header->bars_mapped =3D map; - } - else - ASSERT_UNREACHABLE(); -} - bool vpci_process_pending(struct vcpu *v) { const struct pci_dev *pdev =3D v->vpci.pdev; @@ -202,10 +161,6 @@ bool vpci_process_pending(struct vcpu *v) } v->vpci.pdev =3D NULL; =20 - spin_lock(&pdev->vpci->lock); - modify_decoding(pdev, v->vpci.cmd, v->vpci.rom_only); - spin_unlock(&pdev->vpci->lock); - read_unlock(&v->domain->pci_lock); =20 return false; @@ -241,8 +196,6 @@ static int __init apply_map(struct domain *d, const str= uct pci_dev *pdev, write_lock(&d->pci_lock); } } - if ( !rc ) - modify_decoding(pdev, cmd, false); =20 return rc; } @@ -534,22 +487,29 @@ static void cf_check cmd_write( * decoding one. Bits that are not allowed for DomU are already * handled above and by the rsvdp_mask. */ - if ( header->bars_mapped !=3D new_enabled ) + if ( header->bars_mapped !=3D new_enabled && + modify_bars(pdev, cmd, false) ) /* * Ignore the error. No memory has been added or removed from the = p2m * (because the actual p2m changes are deferred in defer_map) and = the * 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); - else - pci_conf_write16(pdev->sbdf, reg, cmd); + return; =20 #ifdef CONFIG_HAS_PCI_MSI /* Unpopulate MSI-X table region, so accesses trap into Xen. */ if ( !header->bars_mapped && new_enabled && vpci_make_msix_hole(pdev) ) return; #endif + + /* + * FIXME: for domUs we don't want the guest toggling the memory decodi= ng + * bit. It should be set in vpci_init_header() and guest attempts to + * modify it should only lead to guest p2m changes. + */ + header->bars_mapped =3D new_enabled; + pci_conf_write16(pdev->sbdf, reg, cmd); } =20 static uint32_t cf_check guest_cmd_read( @@ -705,17 +665,12 @@ static void cf_check rom_write( rom->guest_addr =3D rom->addr; } =20 - if ( !header->bars_mapped || rom->enabled =3D=3D new_enabled ) - { - /* Just update the ROM BAR field. */ - header->rom_enabled =3D new_enabled; - pci_conf_write32(pdev->sbdf, reg, val); - } /* * 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= ) ) + if ( header->bars_mapped && rom->enabled !=3D new_enabled && + modify_bars(pdev, new_enabled ? PCI_COMMAND_MEMORY : 0, true) ) /* * No memory has been added or removed from the p2m (because the a= ctual * p2m changes are deferred in defer_map) and the ROM enable bit h= as @@ -726,6 +681,8 @@ static void cf_check rom_write( */ return; =20 + header->rom_enabled =3D new_enabled; + pci_conf_write32(pdev->sbdf, reg, val); if ( !new_enabled ) { rom->addr =3D val & PCI_ROM_ADDRESS_MASK; @@ -927,6 +884,13 @@ int vpci_init_header(struct pci_dev *pdev) goto fail; } =20 + if ( cmd & PCI_COMMAND_MEMORY ) + { + /* Restore command register value. */ + header->bars_mapped =3D true; + pci_conf_write16(pdev->sbdf, PCI_COMMAND, cmd); + } + return (cmd & PCI_COMMAND_MEMORY) ? modify_bars(pdev, cmd, false) : 0; =20 fail: --=20 2.54.0 From nobody Thu Jul 23 21:54:32 2026 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=1783544664; cv=pass; d=zohomail.com; s=zohoarc; b=mMBwwXO3eAO54EVCmf/W6edyEKPkRvGffAgBz4f3eAH50y4WaAxIJ73ydJiPRgtbJgwk2x+TFtWYG/P1/0mNj7eY396K1D26uHHASRoKhrpqDX3WtDmuF3IwDyYOFFUDKYziy+Akm/1fDYcfeKdHhmMWN0pIvJeCDPuXqxv9GkE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783544664; 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=Mo/LqwcRC5ubuqxIgn4Vv90MFbTVJNrQe4oyzux4B+o=; b=U6iI+ZE8zDSA9Nr1Hr1CX9aTDJM7V1M/R+TPQNCx6c6pq5hV0PmKcyeN1Ksl8ksscwWUCZsV52UwVq0WEouRFuuVMaV6/9TVMzbcLYJVT/M5jAR3hOkc1gjXio8wusT7u1Jep+F89vPWIsLwnNDyNUqiaC+cNom4sPwqElkz9qI= 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 1783544664544742.1940494250149; Wed, 8 Jul 2026 14:04:24 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1357356.1611806 (Exim 4.92) (envelope-from ) id 1whZQz-0004mg-Jo; Wed, 08 Jul 2026 21:03:57 +0000 Received: by outflank-mailman (output) from mailman id 1357356.1611806; Wed, 08 Jul 2026 21:03:57 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQz-0004mG-GE; Wed, 08 Jul 2026 21:03:57 +0000 Received: by outflank-mailman (input) for mailman id 1357356; Wed, 08 Jul 2026 21:03:56 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZQy-0004kJ-KS for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 21:03:56 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1whZQy-001Bh4-1F for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 23:03:56 +0200 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a4ebb37-2eae-0a2a0a5409dd-0a2a4505e776-2 for ; Wed, 08 Jul 2026 23:03:55 +0200 Received: from [52.101.62.48] (helo=DM5PR21CU001.outbound.protection.outlook.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a4ebb3a-3cb2-0a2a45050019-34653e30b4b9-3 for ; Wed, 08 Jul 2026 23:03:55 +0200 Received: from CH5PR04CA0016.namprd04.prod.outlook.com (2603:10b6:610:1f4::24) by PH0PR12MB7984.namprd12.prod.outlook.com (2603:10b6:510:26f::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.10; Wed, 8 Jul 2026 21:03:50 +0000 Received: from CH3PEPF0000000D.namprd04.prod.outlook.com (2603:10b6:610:1f4:cafe::46) by CH5PR04CA0016.outlook.office365.com (2603:10b6:610:1f4::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.202.10 via Frontend Transport; Wed, 8 Jul 2026 21:03:48 +0000 Received: from satlexmb08.amd.com (165.204.84.17) by CH3PEPF0000000D.mail.protection.outlook.com (10.167.244.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 8 Jul 2026 21:03:48 +0000 Received: from Satlexmb09.amd.com (10.181.42.218) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 16:03:48 -0500 Received: from ubuntu (10.180.168.240) by satlexmb09.amd.com (10.181.42.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 14:03:46 -0700 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A8CWO4Ml1xQ18GKLYOjJKgNEQjD/X7CvpRRdTmiGWY2uP6JMTJ+5ghUWcBQ5AoPgbdVO0A+iMgLoG4jJD+DU+ah/T/628AbIzc1pgQE/62zHoWKXTQII6j0Y13u2UaDEWIsMCOgnld7L/r3bCCao9ok/E8GDy6Qpq9mDZo/v3vHMrGOgPYzfeSPB1+wdz6XXnKOHTdZLirmfuh4aiAnP+I3WirM/Yq9aoK3MWGh5rAuBLUhWyJgUY985oZxc4hleamR+vsf9hYJhVeSOjtLwBifns0dXHk/waApGorJeO2H5+6PHTEhMX6yRnseBuWlT5k6E+PhyLJm0m+mOOWFtWA== 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=Mo/LqwcRC5ubuqxIgn4Vv90MFbTVJNrQe4oyzux4B+o=; b=t5IVnBQUbBcnHOaKcDr7RvNrgPU/zidkYuRRKOZgeVPB4HyGstqUa9LFQkUNdmf3ZHg0y2F7lqw+QCUxJHd+yM7U5zw0gw+qIcF+ojUq8kZ4o8300u5iobNsbIfh+BauyDViX03f78SXPncUGq3k95zCk7fSYJtD15TNbqa42aO86XkTAGCGVZyYDGHcrNt6QWQvmKBVT0dO54D9jpHdXgXDihblunn6gziv0DLRQ6QEAzrpRlqRbhVKIi3dcf/dVPmXVp0bIADZFvE2NQV06bo13J223QEzaaEEeX4UlelEe1RaW8/hJV8yd8NCUviURXLgn5yZImXlWbYb6lGM2A== 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=Mo/LqwcRC5ubuqxIgn4Vv90MFbTVJNrQe4oyzux4B+o=; b=5Yl/XjhJTTf+NSjs4aUp9s4hBIcYWVYX7x80uxE5WRQral/iWaI/KB2iXhUZu2OdJpaZTsVXCPdBjiBdSOV9CeTuQLLqEfgqMrFxghr6PhgCA/pS8jZCLOjKBZRv61ddpPQMzba/njTxf2XP+kAWXW/vigisWW5775gC4NqaEmc= 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=satlexmb08.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Mykyta Poturai Subject: [PATCH v5 6/9] vpci: create mem local variables Date: Wed, 8 Jul 2026 17:02:21 -0400 Message-ID: <20260708210233.922275-7-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260708210233.922275-1-stewart.hildebrand@amd.com> References: <20260708210233.922275-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: satlexmb07.amd.com (10.181.42.216) To satlexmb09.amd.com (10.181.42.218) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000D:EE_|PH0PR12MB7984:EE_ X-MS-Office365-Filtering-Correlation-Id: 0d478f83-f067-44b5-992a-08dedd34681e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700016|376014|1800799024|23010399003|11063799006|18002099003|22082099003|56012099006; X-Microsoft-Antispam-Message-Info: yru+yoYVz9AG1FwPJEJyfce+AYHA1xSy5S8euQJR5qT3rbUGmsGV/Nqbj0VF4jaokO7Zg6ASQ3ZxsQaFiTmNcIJCVzAHDt6nkrAS4bSSKPTmqt7cYdbRAecYDWyA3sgYqR9kVGvfnQ2SNYZbx76DB+ULBsbDP5rQiDjhoharR5QwLqpQi7yAZx67yReHtWPYBrhZ7PVIkBlViuZY1csZ4lSPQ1LDt097nPLTe0rJdXvtHX2d1j/qNmvhik6FQU0jkI7HVE+phCYPjSZ7EQOnpJyuFrERLNRE1EsC/7GAU5tGO3Hm0arXLTMsCHra29UyoPScshHAe+ANwr6U2TlmTnzmbcnHChHO7Lva4ACFLkfXqXPe5sycIy10ORak+5y3l2N0ougQF93yLoEzd8Tv3K6fcqolvDaJa17qZ1s7C0f8EtHvcNeYa4t4ByIJ4boxOSPnXmFInTqLZe+XCBs7cQbdtMZ8+RM7kD79yspTjSPES9KmbYb2n/vYKKD6Fh4zc9B12q/6KM2hajDM9x7P2PPm7mb1Tu+MFwhPngQlAbXf9Lw0IPPSoVWfYaZDssrq8MZVcglMeHUzHNcAuwVZBYTWm9hyaDSnBm/oIybouycIXUr9DDZomVYbDVwae9VxQhsxBj9twAlJnFCMBCR8j4Dvxd1PsUWDzxmCyJksOxuRRp2ky/nAugVnDf9uz0JccdBgHM+sDA8yIqxIvkbyCw== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb08.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(36860700016)(376014)(1800799024)(23010399003)(11063799006)(18002099003)(22082099003)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hyTEYV8+2pB0YX2cyzbQFWqxKntNJ3l2giLwN+KvE8aK5UdQQuWo3ulvBPMY0lMSXOkzAuzIjU0VgneTP0i+BUa0n+4w5HnX2D0COxJgo2ouLE00bhzGA7ubjKLycvRTxB8tWtQacR1sMtUZXJcr6EIybiECRDcXKvxEsRUjJ9A6vNYbfpk5zPJ9gVJSiBi6tF5AQJ2jd1bjZ/Uf3bRUtwfJw21UVXQ6VJ558P1g/oayXpuoC30yoALggnIFj2LMqBY2YtVMz+/vE6qbJcDNZ3E06RuFIFxN4O2LuQQpQXB0IVTbxGY1v8JDP+DraMmHhDNh55wwEhq33McDrGNTLR07j/A/lTg/dJZEQc8Nt9ZjIuiRAVLpYAFnYrzVIe9huuNegcddTZwg32yyN8XjbjmliGgSlO8mdLNPV+XK4TPvzz1rbu3K3Cc1DzP5mfJ8 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2026 21:03:48.7519 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0d478f83-f067-44b5-992a-08dedd34681e 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=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000D.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7984 X-purgate-ID: tlsNG-c201ff/1783544635-54BE32B8-42E1F82B/0/0 X-purgate-type: clean X-purgate-size: 6360 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1783544664929158500 Content-Type: text/plain; charset="utf-8" Use local variables to reference struct rangeset *mem in preparation of moving it out of struct vpci. No functional change. Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai --- v4->v5: * Patch adapted from [1] ("vpci: Use pervcpu ranges for BAR mapping"). I kept Mykyta's S-o-b tag since many of the changes are similar. [1] https://lore.kernel.org/xen-devel/20260406191203.97662-2-stewart.hildeb= rand@amd.com/ --- xen/drivers/vpci/header.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 908adf0b3f4c..28e051f2779c 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -124,6 +124,7 @@ bool vpci_process_pending(struct vcpu *v) for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) { struct vpci_bar *bar =3D &header->bars[i]; + struct rangeset *mem =3D bar->mem; struct map_data data =3D { .d =3D v->domain, .map =3D v->vpci.cmd & PCI_COMMAND_MEMORY, @@ -131,10 +132,10 @@ bool vpci_process_pending(struct vcpu *v) }; int rc; =20 - if ( rangeset_is_empty(bar->mem) ) + if ( rangeset_is_empty(mem) ) continue; =20 - rc =3D rangeset_consume_ranges(bar->mem, map_range, &data); + rc =3D rangeset_consume_ranges(mem, map_range, &data); =20 if ( rc =3D=3D -ERESTART ) { @@ -178,13 +179,14 @@ static int __init apply_map(struct domain *d, const s= truct pci_dev *pdev, for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) { struct vpci_bar *bar =3D &header->bars[i]; + struct rangeset *mem =3D bar->mem; struct map_data data =3D { .d =3D d, .map =3D true, .bar =3D bar }; =20 - if ( rangeset_is_empty(bar->mem) ) + if ( rangeset_is_empty(mem) ) continue; =20 - while ( (rc =3D rangeset_consume_ranges(bar->mem, map_range, - &data)) =3D=3D -ERESTART ) + while ( (rc =3D rangeset_consume_ranges(mem, map_range, &data)) = =3D=3D + -ERESTART ) { /* * It's safe to drop and reacquire the lock in this context @@ -248,12 +250,13 @@ static int modify_bars(const struct pci_dev *pdev, ui= nt16_t cmd, bool rom_only) for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) { struct vpci_bar *bar =3D &header->bars[i]; + struct rangeset *mem =3D bar->mem; unsigned long start =3D PFN_DOWN(bar->addr); unsigned long end =3D PFN_DOWN(bar->addr + bar->size - 1); unsigned long start_guest =3D PFN_DOWN(bar->guest_addr); unsigned long end_guest =3D PFN_DOWN(bar->guest_addr + bar->size -= 1); =20 - if ( !bar->mem ) + if ( !mem ) continue; =20 if ( !MAPPABLE_BAR(bar) || @@ -271,7 +274,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(mem)); =20 bar_valid[i] =3D true; =20 @@ -310,7 +313,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) return rc; } =20 - rc =3D rangeset_add_range(bar->mem, start_guest, end_guest); + rc =3D rangeset_add_range(mem, start_guest, end_guest); if ( rc ) { printk(XENLOG_G_WARNING "Failed to add [%lx, %lx]: %d\n", @@ -321,12 +324,12 @@ static int modify_bars(const struct pci_dev *pdev, ui= nt16_t cmd, bool rom_only) /* Check for overlap with the already setup BAR ranges. */ for ( j =3D 0; j < i; j++ ) { - struct vpci_bar *prev_bar =3D &header->bars[j]; + struct rangeset *prev_mem =3D header->bars[j].mem; =20 - if ( rangeset_is_empty(prev_bar->mem) ) + if ( rangeset_is_empty(prev_mem) ) continue; =20 - rc =3D rangeset_remove_range(prev_bar->mem, start_guest, end_g= uest); + rc =3D rangeset_remove_range(prev_mem, start_guest, end_guest); if ( rc ) { gprintk(XENLOG_WARNING, @@ -336,7 +339,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(mem); if ( rc ) { gprintk(XENLOG_WARNING, @@ -355,12 +358,12 @@ static int modify_bars(const struct pci_dev *pdev, ui= nt16_t cmd, bool rom_only) =20 for ( j =3D 0; j < ARRAY_SIZE(header->bars); j++ ) { - const struct vpci_bar *bar =3D &header->bars[j]; + struct rangeset *mem =3D header->bars[j].mem; =20 - if ( rangeset_is_empty(bar->mem) ) + if ( rangeset_is_empty(mem) ) continue; =20 - rc =3D rangeset_remove_range(bar->mem, start, end); + rc =3D rangeset_remove_range(mem, start, end); if ( rc ) { gprintk(XENLOG_WARNING, @@ -410,8 +413,9 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) for ( j =3D 0; j < ARRAY_SIZE(header->bars); j++) { const struct vpci_bar *bar =3D &header->bars[j]; + struct rangeset *mem =3D bar->mem; =20 - if ( !rangeset_overlaps_range(bar->mem, start, end) || + if ( !rangeset_overlaps_range(mem, start, end) || /* * If only the ROM enable bit is toggled check ag= ainst * other BARs in the same device for overlaps, bu= t not @@ -422,7 +426,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(mem, start, end); if ( rc ) { gprintk(XENLOG_WARNING, --=20 2.54.0 From nobody Thu Jul 23 21:54:32 2026 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=1783544664; cv=pass; d=zohomail.com; s=zohoarc; b=fm/iP/4EMzdKr3TUZAmN8YL8DKmz+AEr1faWQ6LcdaFybePRCAvjzSFvyAvrpgBxbeDydf9/jDL0cHh1HAELjd3Q6rhi5dpWijZu7NOPh9N/RmsywldWps+UvkLELpLFeIeXo5aWTU2mXmrQcm9UbgaItQ1kGlvxsTG2/HwNPjY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783544664; 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=rRLzzk0UEgl4+j4PxlJtdiOyBbtWQKjKKPnDYZswYE0=; b=H5gOI45q9AFronJ5NfFtqKSJGoK9UwVNtg02mu0Avrvz1nWs1vauqig5DdgpMB7JIu2fcpQIRCwSbLxwXe3FZ93iq+FQF6BdhyBwvYc+MOiou/XLtZosJy5hR5Gab++2y+rZd7k27Fz6/8roQiQ/63p3ostno4C/Y/5Wc44MpfU= 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 1783544664370866.3820840107629; Wed, 8 Jul 2026 14:04:24 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1357358.1611814 (Exim 4.92) (envelope-from ) id 1whZR4-0005Bj-2G; Wed, 08 Jul 2026 21:04:02 +0000 Received: by outflank-mailman (output) from mailman id 1357358.1611814; Wed, 08 Jul 2026 21:04:02 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZR3-0005BY-Uu; Wed, 08 Jul 2026 21:04:01 +0000 Received: by outflank-mailman (input) for mailman id 1357358; Wed, 08 Jul 2026 21:04:00 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZR2-00053t-0S for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 21:04:00 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1whZR1-00BD5T-Dh for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 23:03:59 +0200 Received: from [10.42.69.10] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a4ebb3f-e002-0a2a0a5209dd-0a2a450aae6c-0 for ; Wed, 08 Jul 2026 23:03:59 +0200 Received: from [52.101.52.54] (helo=BL2PR02CU003.outbound.protection.outlook.com) by tlsNG-4011c0.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a4ebb3d-e40e-0a2a450a0019-3465343685cf-3 for ; Wed, 08 Jul 2026 23:03:58 +0200 Received: from CH0PR03CA0340.namprd03.prod.outlook.com (2603:10b6:610:11a::28) by SJ2PR12MB8009.namprd12.prod.outlook.com (2603:10b6:a03:4c7::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.10; Wed, 8 Jul 2026 21:03:54 +0000 Received: from CH3PEPF00000010.namprd04.prod.outlook.com (2603:10b6:610:11a:cafe::a) by CH0PR03CA0340.outlook.office365.com (2603:10b6:610:11a::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.202.10 via Frontend Transport; Wed, 8 Jul 2026 21:03:53 +0000 Received: from satlexmb08.amd.com (165.204.84.17) by CH3PEPF00000010.mail.protection.outlook.com (10.167.244.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 8 Jul 2026 21:03:53 +0000 Received: from Satlexmb09.amd.com (10.181.42.218) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 16:03:53 -0500 Received: from ubuntu (10.180.168.240) by satlexmb09.amd.com (10.181.42.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 14:03:52 -0700 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=scUJPh+G9d3VHKb1BRkNz/DDs7u7+OLLgVRofZf01SPtims2NbfKX1nxdpSlb/rvnCxCCzxpbHYk4RMCcOWcOIqR9dpgYh9bgKrLTH4FJ0UkFe3uOFnxHxy9fnhLRHsgAW9khKZNrmfd3baD06RzpA03hPvDtQzOIzTpO3wLmhT1I2rqbnnX5jJBYWLqG3F60t+YANawZPLICVam2cwnZgBdBj3zB+M0Yq4YV9eVDBXnFP8UemIauJesxXxyAZtZJLElmRaEeZaVWCs+8FqLqFqIj7cWT8a+ZdffsXp1ywBIPTov9zSiJ3gDTN4MRBt0OUQOicxNA/1LLBqD9tqnGA== 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=rRLzzk0UEgl4+j4PxlJtdiOyBbtWQKjKKPnDYZswYE0=; b=lUt2Trf6A5abmFnFvfcmMSOytzOOyFyvqGkiXyuviMoQ0TuWSJ17ujPBSmuUx+8iPy28uV+eRdJuBwr5WJ+ZJsbX48M/Apmh2Rmr8aMA9Wvc3SsoNwmSSSu8LPG8XE1z9SBEvPUXOFP4lF8/bLJBIkbCXwvzFU/8sOE29JKulc88mW/eyD3qJUBPZcyED2yyrM0GWtixjSmqcytfXJt3oqR8v9nB7uzlmy72wMOmHNLpqVeL6uE2itf8Zvl4W6KTLaNhtQweLyp1hLIhYfG3mbT4hCIVh3L7QnL2l5Ot/ypGlAcbNsStaUMg3RVquahbrA2/alDVBWP5d2Sc2B/5YQ== 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=rRLzzk0UEgl4+j4PxlJtdiOyBbtWQKjKKPnDYZswYE0=; b=WHL0UwOZgS2C/ekQkhQCUbjxQOtdatAGVN+L9jDdr4TbGTa5bBxIBT5o1Tp/Y1akwUFHMD8r8IcJgX8NBf22HNdKPM2Ew8CunRZfY7/hULNVPbYxz6IliZ8PU+9oK0eFZvL2KfcVvRVXCAugqTtQwoseCqJJT8uG2x6xYRh2Ufw= 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=satlexmb08.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v5 7/9] vpci: split vpci_process_pending() Date: Wed, 8 Jul 2026 17:02:22 -0400 Message-ID: <20260708210233.922275-8-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260708210233.922275-1-stewart.hildebrand@amd.com> References: <20260708210233.922275-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: satlexmb07.amd.com (10.181.42.216) To satlexmb09.amd.com (10.181.42.218) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF00000010:EE_|SJ2PR12MB8009:EE_ X-MS-Office365-Filtering-Correlation-Id: 7d3c03cd-7aa8-4b0f-547b-08dedd346af2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700016|376014|23010399003|1800799024|6133799003|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: nwpeD2q4o8lNHHzF3tai4ZwEnY1apl6q4MVWUzoUUQfE9BFOGgJiOeJYVwUbu0I3o72MDoyrEpj+bBrXUDVqlUmAKa7gKN9oQkLnPZbngCFpKvTwgDblSsA4rkeP2iAWi7UgMq3BaUoaT4ewSx8+7R0xAgxS2eyfk5EJRv3h+0eIGOWRkMNfvcjGl4IsuDkIFly9dq543mMFv/fPM83+j0U3LgclSKTzioJNLmu9iVYj0STokSH2sNejdDgWlav+1CX4zT0UY5CsjYDbAhyuvE84Lo5sHV0Wwv1cLv4nawddoiFQ4LXzYnbo1i9PVYhn0xWZhpUa4SLW7HTsY8PaSH+MwuGaCbgi2angbfidbhnbik68Fci3taXz50RpIuSMi1A5/ZbthDMsGGCv9yViRO50ygQhtu4f7k1fbHLt9NFLlPbJlAGmDxiTkFI30Hbiks1pchsCWuTXm/ZaMpcMqlgexpx4pQ3wJCtst+TcN1bWp1zkELOvnnV01pgYxMSxmBOB//woubabI7i5rNa90+S26DbQ+9dUbw0ExNrKpaYcbG/5kDciutHJWt0CxDi1SERoibj0aY0l++HjGkvyNfOOMj8NTNEVKWDiYHf4Wae5STzshoR1OKS1uuI07HTksBPB+R79s2D88GA938u7ZLSp/q5860474YBQu0aGPNfxSVO+ECLjU+atrOiGjbTb3xG/nJVG2SWKEdGtkgqoxQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb08.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(36860700016)(376014)(23010399003)(1800799024)(6133799003)(22082099003)(18002099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LMH5Tpc5chYhMHyO3aMpUBd16pQBu0zMVJLxdnWpV/V4Aougc30nYBKXiAc8lnoGQhreT3X6Z9pw9eDnFJIGDU7uqjaK+pVi/YEXkEL47XBu8WgVhk38+F/24bLGJ4CU3Z3UZaIwpP6vMZoQbfx/WZUTgxeHB7JczHipT8Z7iEwJ6tgpZDGddLX1IWfSoQz/4l5JKFUBNxyjk/4ePbIZ3aKZkeS0kjuPCYvUEG9Gc/suEMQVMxQyZ4IwTRg9AKQ97vqsG+yOrQWVtlm6un4xxME1d7CpspYTvXrwZbn6FJ0j+7bKFhqYxLgiSjQQuprcjpKjIdVFoI6JtCT1Ofci11/zoneRpddS2xou/3OU83ut4uTU3NtH567c0ETbntHSvRMafrn72NKvb0oosEzw6wCqC+LS8Tompd4lggjU2iHq7PTZ71SAesbUbRgVO591 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2026 21:03:53.5263 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7d3c03cd-7aa8-4b0f-547b-08dedd346af2 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=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF00000010.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8009 X-purgate-ID: tlsNG-4011c0/1783544639-3E806DDE-258A867B/0/0 X-purgate-type: clean X-purgate-size: 3347 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1783544664895158500 Content-Type: text/plain; charset="utf-8" Create a new function to separate the mapping logic from the pdev validation and lock-acquiring logic. Slightly consolidate exit paths for hardware_domain and !hardware_domain. No functional change. Signed-off-by: Stewart Hildebrand --- v4->v5: * new patch --- xen/drivers/vpci/header.c | 65 +++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 28e051f2779c..f7eaf9c6ddf2 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -102,23 +102,12 @@ static int cf_check map_range( return rc; } =20 -bool vpci_process_pending(struct vcpu *v) +static int process_map_task(const struct pci_dev *pdev, bool map) { - const struct pci_dev *pdev =3D v->vpci.pdev; struct vpci_header *header =3D NULL; unsigned int i; =20 - if ( !pdev ) - return false; - - read_lock(&v->domain->pci_lock); - - if ( !pdev->vpci || (v->domain !=3D pdev->domain) ) - { - v->vpci.pdev =3D NULL; - read_unlock(&v->domain->pci_lock); - return false; - } + ASSERT(rw_is_locked(&pdev->domain->pci_lock)); =20 header =3D &pdev->vpci->header; for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) @@ -126,8 +115,8 @@ bool vpci_process_pending(struct vcpu *v) struct vpci_bar *bar =3D &header->bars[i]; struct rangeset *mem =3D bar->mem; struct map_data data =3D { - .d =3D v->domain, - .map =3D v->vpci.cmd & PCI_COMMAND_MEMORY, + .d =3D pdev->domain, + .map =3D map, .bar =3D bar, }; int rc; @@ -136,21 +125,12 @@ bool vpci_process_pending(struct vcpu *v) continue; =20 rc =3D rangeset_consume_ranges(mem, map_range, &data); - if ( rc =3D=3D -ERESTART ) - { - read_unlock(&v->domain->pci_lock); - return true; - } - - if ( rc && !is_hardware_domain(v->domain) ) - { - read_unlock(&v->domain->pci_lock); + return rc; =20 - domain_crash(v->domain); + if ( rc && !is_hardware_domain(pdev->domain) ) + return rc; =20 - return false; - } ASSERT(!rc); /* * Purge rangeset to deal with the hardware domain having triggere= d an @@ -160,10 +140,41 @@ bool vpci_process_pending(struct vcpu *v) */ rangeset_purge(bar->mem); } + + return 0; +} + +bool vpci_process_pending(struct vcpu *v) +{ + const struct pci_dev *pdev =3D v->vpci.pdev; + int rc; + + if ( !pdev ) + return false; + + read_lock(&v->domain->pci_lock); + + if ( !pdev->vpci || (v->domain !=3D pdev->domain) ) + { + v->vpci.pdev =3D NULL; + read_unlock(&v->domain->pci_lock); + return false; + } + + rc =3D process_map_task(pdev, v->vpci.cmd & PCI_COMMAND_MEMORY); + if ( rc =3D=3D -ERESTART ) + { + read_unlock(&v->domain->pci_lock); + return true; + } + v->vpci.pdev =3D NULL; =20 read_unlock(&v->domain->pci_lock); =20 + if ( rc && !is_hardware_domain(v->domain) ) + domain_crash(v->domain); + return false; } =20 --=20 2.54.0 From nobody Thu Jul 23 21:54:32 2026 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=1783544678; cv=pass; d=zohomail.com; s=zohoarc; b=VtWm2BFemEmB4Ehlp8c1Nm605/yv0Uput9O1hMRU1HnsfhiwCWIIr2gNjW7sjIzghri7GH7lhf2ME1v0O9/rcGuf43mNfXE6Q4zYgvkToqftmY4bBfHKtAFt3Lih4WJeJDLgsw7HGE66ZJ24xWGH1UWNtO6rd3KpiVyiPrX1jLg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783544678; 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=NwT/vmxOazu6ITUa9dqv7ojlgNbcRzolsBQWcOh7e5g=; b=O5qN7M2IoDs7OWt8iOs+/Yg4ZE+5swfZgl0pafCbEkWMD1akoAZjCVBG6MJ9yHBeM64OfSc0wUAk8AYWn0r7kHcm4Wk3XztmA251yMPzOhLWR+I3164IT6ELMA9fNQ35fx0Z2r+yKzm6L1EsXU0nfNwCMDqvxMf9Ecm0OiRgoDo= 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 178354467853810.095401931134461; Wed, 8 Jul 2026 14:04:38 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1357386.1611824 (Exim 4.92) (envelope-from ) id 1whZRE-0006Dn-E6; Wed, 08 Jul 2026 21:04:12 +0000 Received: by outflank-mailman (output) from mailman id 1357386.1611824; Wed, 08 Jul 2026 21:04:12 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZRE-0006Db-Ac; Wed, 08 Jul 2026 21:04:12 +0000 Received: by outflank-mailman (input) for mailman id 1357386; Wed, 08 Jul 2026 21:04:11 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZRC-00069S-VB for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 21:04:11 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1whZRC-001Bnw-C7 for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 23:04:10 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a4ebb1f-2eae-0a2a0a5409dd-0a2a450cab22-26 for ; Wed, 08 Jul 2026 23:04:10 +0200 Received: from [52.101.193.55] (helo=CH1PR05CU001.outbound.protection.outlook.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a4ebb48-f399-0a2a450c0019-3465c1372abd-3 for ; Wed, 08 Jul 2026 23:04:09 +0200 Received: from CH0P223CA0016.NAMP223.PROD.OUTLOOK.COM (2603:10b6:610:116::34) by MW5PR12MB5623.namprd12.prod.outlook.com (2603:10b6:303:199::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.13; Wed, 8 Jul 2026 21:04:01 +0000 Received: from CH3PEPF0000000F.namprd04.prod.outlook.com (2603:10b6:610:116:cafe::c) by CH0P223CA0016.outlook.office365.com (2603:10b6:610:116::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.202.10 via Frontend Transport; Wed, 8 Jul 2026 21:04:01 +0000 Received: from satlexmb08.amd.com (165.204.84.17) by CH3PEPF0000000F.mail.protection.outlook.com (10.167.244.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 8 Jul 2026 21:04:01 +0000 Received: from Satlexmb09.amd.com (10.181.42.218) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 16:04:01 -0500 Received: from ubuntu (10.180.168.240) by satlexmb09.amd.com (10.181.42.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 14:03:59 -0700 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L9v5N4jEv2FOg7LQ2usToFIKIt5VoS3toutJpR0vaDl4/PuGZu8ZgdbpMckvLH/7z256LFf08W5Yiy3DJB2dT/AT7cc+bG+jD0Pk3YWlqWTPpI3yRhS845ueSuvFHtQmkf5GJbX4iQ6NSgLeGWNkFnf9YNBKXIMfn1hSH8FytQwz38I4qRgNg0PPwpDaIZwBCQJ1MlZFwss80vu4pFhk7J/5qTQyko01mCQptKUWugUoT8uR7ueREWIw1Dx3F58xuwv+SfTlLo4zAqz8PmacCife5GGnr0QGziQ9MTgp3tFfPE6DTsx+LIWhUEfGFRAra+moXsPJi62gxoGCZG4L1Q== 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=NwT/vmxOazu6ITUa9dqv7ojlgNbcRzolsBQWcOh7e5g=; b=XeBAhVj2H3cMrbJNpF4y2GXHVyrxmQqlyGdzmlyKd87z5JeOxxNDdiNVWE1TUcTRag/OjFt/MSLyQbU9unGgtz0k4PeNPwy8mAeqCBsBPTTj7PpCEf0iYwQnURF3jp2tn5L8R39jrQVjR8n2LMRJCXzPf16KJPgcxShgi33UezgY98uKDsX7TamsNK+XkXwg5rfPkiMECSkAAS9go5kzdLG6YOovqqHhb3509wM1AYr1Cne3IlxLsolr6nLDnFCO9m1glEExMINbz3wV65QuRs7M0tctVo7U47zVs9VJmyKFZ6eSQfruYyP2fvzLeO2BIV1Dnu/V8Ugbq+eWzzkkCA== 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=NwT/vmxOazu6ITUa9dqv7ojlgNbcRzolsBQWcOh7e5g=; b=xxVm5QnwSDXyYil6AIg7VyRiLxrMrCXiEQmmFcYc952Zc1YDjHZz92hC+CKdY7U9oa5ayxq/AwdjchNWivcxtIFsXfdcMuJhA85db5c/DHINUs8G7FvqiR5Uce1VKTYLyUXnGCNjGlSB9Akj6dzkuBCNjBZ263PAXm4ryF/Y0M8= 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=satlexmb08.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , "Julien Grall" , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini , "Mykyta Poturai" Subject: [PATCH v5 8/9] vpci: allow queueing of mapping operations Date: Wed, 8 Jul 2026 17:02:23 -0400 Message-ID: <20260708210233.922275-9-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260708210233.922275-1-stewart.hildebrand@amd.com> References: <20260708210233.922275-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: satlexmb07.amd.com (10.181.42.216) To satlexmb09.amd.com (10.181.42.218) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000F:EE_|MW5PR12MB5623:EE_ X-MS-Office365-Filtering-Correlation-Id: ff9c680c-2ae0-4018-84bd-08dedd346fc6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|23010399003|36860700016|82310400026|376014|11063799006|56012099006|18002099003|22082099003|6133799003|13003099007; X-Microsoft-Antispam-Message-Info: oKaiOwnxHXgNRUEX22qcgTtdnJSYrJhgiL2LtaUYgiIOMjBfhJ949OUj46AOMuDeyoqW4RXI4a8SHqlOoeluJKaOvA+yUgvBUgv39btt2jaBcVnTpJfLyvTSra7fpwmLjFxf+O9Tjcg3OqlYmtMvVeG8wdUiLlTGzXvcQaNknaSldvIaFlw4pgwiZf+581C/2b+NudGn2kePoA04+mtNuqTvRdjPESOEeqxpAMEZ2lognMJN5ASzEVNWQ5SXo3UxDZKRQSfxnlvq+f+kstLfjFvqYd4iEPuneAF9azzDfb/5w7W0O6jEjbAhSzNNrKL7ViZSC4Hrxm4y3C9sYwzzq/p4q/OuWz5C+TwrxgF5jb05qex0eX6ZSWP1JUQf6ZizDCRBBygq1WSOOcbdV/OwXzJx4iZIx/E2mtsxJ0HGFS54YLTgXtrxSnEPnA6l67++TJjiF7fu/4QRUbhqmI+z452qEy1jmBsYEFgs56PfQKEZ4ls7xbylhGZMz8VSdqBK9Copt2JOZJk0Ertb69jMO+IN8vojASIuNAhRFnCTEFBt/Vmrd2EyQxrTx09IgkM9oVnq1qhchVQsiwqIr9sxCwFbttDhkejnGHF4+tXLx17iQpLPvpgMi1HmtlxmRAvFyTPEo/ho92E0CX+kHufvVDBK7dxKgZ1hd05J5jkn8DYC5vdRdlToPqm2p8Ad1k0khqK5RoL7C1Nmzv3VY4ABtQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb08.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(36860700016)(82310400026)(376014)(11063799006)(56012099006)(18002099003)(22082099003)(6133799003)(13003099007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2BI0o4CAF78KqUNHcFhJE41o9bZzX8E1gJQx8+b4BNve5K2TN7FwGGLFAxl3IA5U69PJ9geBnCXR1LjvxhS7V7M5fMSFwnbiswyUbvUk3RFOKSKXa3suVPJr49yJERDBbsmwOebjoTdJccjpHowKxaD50lOPxd+iVix2PWjgPCXY7gpfOcsBL5AFXVtr2NFX46meO8ZCZSejL32IOAsgxZyJ378BPJFhlX9g+cNRgC+r+B9jZE5vLjl/PITc3whBKyxNct5byFeLWzb18q3k4IwpSVMMhc7WmudZeLQOiaeEOd9CjChUMANaqLI1udSYxEJYQBxky6oMD8eCe5+GnYJRZ1okOIdHtJm/1volc4yBanLhpvagNvpYMLYZwUKkOsvZo+qwCEjCkOqdCOxMf1007u3/BpJEwzfe60szjeeQ49xrYHoNV2ek1iDBxWYB X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2026 21:04:01.5955 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ff9c680c-2ae0-4018-84bd-08dedd346fc6 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=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000F.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR12MB5623 X-purgate-ID: tlsNG-d25034/1783544650-0D727D51-5445B4F8/0/0 X-purgate-type: clean X-purgate-size: 19956 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1783544679016158500 Content-Type: text/plain; charset="utf-8" Introduce vPCI BAR mapping task queue. Store information needed to map/unmap BARs in struct map_task. Allow queueing of BAR map/unmap operations in a queue, thus making it possible to perform multiple p2m operations associated with single PCI config space register access. This is preparatory work for further changes that need to perform multiple unmap/map operations before returning to guest. While queueing multiple operations is valid, at the moment, only a single operation will be queued. Removed rangeset names, since RANGESETF_no_print was set anyway. Amends: 622bdd962822 ("vpci/header: handle p2m range sets per BAR") Signed-off-by: Stewart Hildebrand Signed-off-by: Mykyta Poturai --- As a side effect of this, the ASSERT(rangeset_is_empty(mem)) in modify_bars() is no longer bogus (see [2]). v4->v5: * split non-functional pre-requisites out into separate patches * move pdev into struct map_task in anticipation of mapping different pdevs corresponding to different VFs * move call to vpci_vcpu_destroy() from vcpu_destroy() to vcpu_teardown() v3->v4: * switch back to dynamically allocated queue elements v2->v3: * rebase on ("vpci: Use pervcpu ranges for BAR mapping") from [1] * rework with fixed array of map/unmap slots [1] https://lore.kernel.org/xen-devel/cover.1772806036.git.mykyta_poturai@e= pam.com/T/#t [2] https://lore.kernel.org/xen-devel/20250814160358.95543-2-roger.pau@citr= ix.com/ v1->v2: * new patch --- xen/common/domain.c | 5 + xen/drivers/vpci/header.c | 222 +++++++++++++++++++++++++------------ xen/drivers/vpci/private.h | 1 + xen/drivers/vpci/vpci.c | 17 ++- xen/include/xen/vpci.h | 13 ++- 5 files changed, 180 insertions(+), 78 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index 53ac1d6c4034..d576c2a40fdf 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -439,6 +440,8 @@ static int vmtrace_alloc_buffer(struct vcpu *v) */ static int vcpu_teardown(struct vcpu *v) { + vpci_vcpu_destroy(v); + vmtrace_free_buffer(v); =20 return 0; @@ -508,6 +511,8 @@ struct vcpu *vcpu_create(struct domain *d, unsigned int= vcpu_id) if ( arch_vcpu_create(v) !=3D 0 ) goto fail_sched; =20 + vpci_vcpu_init(v); + d->vcpu[vcpu_id] =3D v; if ( vcpu_id !=3D 0 ) { diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index f7eaf9c6ddf2..99ce67053068 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -23,6 +23,7 @@ #include #include #include +#include =20 #include =20 @@ -33,9 +34,21 @@ ((x)->type =3D=3D VPCI_BAR_MEM32 || (x)->type =3D=3D VPCI_BAR_MEM64_LO= || \ (x)->type =3D=3D VPCI_BAR_ROM) =20 +struct map_task { + /* Structure to store state while {un}mapping PCI BARs. */ + struct list_head next; /* List element in v->vpci.task_queue */ + const struct pci_dev *pdev; + struct bar_map { + uint64_t addr; + uint64_t guest_addr; + struct rangeset *mem; + } bars[ARRAY_SIZE(((struct vpci_header *)NULL)->bars)]; + bool map : 1; +}; + struct map_data { struct domain *d; - const struct vpci_bar *bar; + const struct bar_map *bar; bool map; }; =20 @@ -102,21 +115,82 @@ static int cf_check map_range( return rc; } =20 -static int process_map_task(const struct pci_dev *pdev, bool map) +static void destroy_map_task(struct map_task *task) +{ + unsigned int i; + + for ( i =3D 0; i < ARRAY_SIZE(task->bars); i++ ) + rangeset_destroy(task->bars[i].mem); + + xvfree(task); +} + +void vpci_clear_map_queue(struct vcpu *v, const struct pci_dev *pdev) +{ + struct map_task *task, *tmp; + + list_for_each_entry_safe ( task, tmp, &v->vpci.task_queue, next ) + { + if ( !pdev || task->pdev =3D=3D pdev ) + { + list_del(&task->next); + destroy_map_task(task); + } + } +} + +static struct map_task *alloc_map_task(const struct pci_dev *pdev, bool ma= p, + bool rom_only) +{ + struct map_task *task; + unsigned int i; + + task =3D xvzalloc(struct map_task); + if ( !task ) + return NULL; + + task->pdev =3D pdev; + + for ( i =3D 0; i < ARRAY_SIZE(task->bars); i++ ) + { + if ( !MAPPABLE_BAR(&pdev->vpci->header.bars[i]) ) + continue; + + if ( rom_only && pdev->vpci->header.bars[i].type !=3D VPCI_BAR_ROM= ) + continue; + + task->bars[i].mem =3D rangeset_new(pdev->domain, NULL, + RANGESETF_no_print); + + if ( !task->bars[i].mem ) + { + destroy_map_task(task); + return NULL; + } + + task->bars[i].addr =3D pdev->vpci->header.bars[i].addr; + task->bars[i].guest_addr =3D pdev->vpci->header.bars[i].guest_addr; + } + + task->map =3D map; + + return task; +} + +static int process_map_task(struct map_task *task) { - struct vpci_header *header =3D NULL; + const struct pci_dev *pdev =3D task->pdev; unsigned int i; =20 ASSERT(rw_is_locked(&pdev->domain->pci_lock)); =20 - header =3D &pdev->vpci->header; - for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) + for ( i =3D 0; i < ARRAY_SIZE(task->bars); i++ ) { - struct vpci_bar *bar =3D &header->bars[i]; + struct bar_map *bar =3D &task->bars[i]; struct rangeset *mem =3D bar->mem; struct map_data data =3D { .d =3D pdev->domain, - .map =3D map, + .map =3D task->map, .bar =3D bar, }; int rc; @@ -146,29 +220,47 @@ static int process_map_task(const struct pci_dev *pde= v, bool map) =20 bool vpci_process_pending(struct vcpu *v) { - const struct pci_dev *pdev =3D v->vpci.pdev; - int rc; - - if ( !pdev ) - return false; + struct map_task *task; + int rc =3D 0; =20 read_lock(&v->domain->pci_lock); =20 - if ( !pdev->vpci || (v->domain !=3D pdev->domain) ) + while ( (task =3D list_first_entry_or_null(&v->vpci.task_queue, + struct map_task, next)) !=3D = NULL ) { - v->vpci.pdev =3D NULL; - read_unlock(&v->domain->pci_lock); - return false; - } + const struct pci_dev *pdev =3D task->pdev; =20 - rc =3D process_map_task(pdev, v->vpci.cmd & PCI_COMMAND_MEMORY); - if ( rc =3D=3D -ERESTART ) - { - read_unlock(&v->domain->pci_lock); - return true; - } + if ( !pdev ) + { + ASSERT_UNREACHABLE(); + vpci_clear_map_queue(v, NULL); + rc =3D -EILSEQ; + break; + } =20 - v->vpci.pdev =3D NULL; + if ( !pdev->vpci || (v->domain !=3D pdev->domain) ) + { + list_del(&task->next); + destroy_map_task(task); + continue; + } + + rc =3D process_map_task(task); + if ( rc =3D=3D -ERESTART ) + { + read_unlock(&v->domain->pci_lock); + return true; + } + + list_del(&task->next); + destroy_map_task(task); + + if ( rc ) + { + vpci_clear_map_queue(v, pdev); + break; + } + } =20 read_unlock(&v->domain->pci_lock); =20 @@ -178,18 +270,17 @@ bool vpci_process_pending(struct vcpu *v) return false; } =20 -static int __init apply_map(struct domain *d, const struct pci_dev *pdev, - uint16_t cmd) +static int __init apply_map(struct map_task *task) { - struct vpci_header *header =3D &pdev->vpci->header; + struct domain *d =3D task->pdev->domain; int rc =3D 0; unsigned int i; =20 ASSERT(rw_is_write_locked(&d->pci_lock)); =20 - for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) + for ( i =3D 0; i < ARRAY_SIZE(task->bars); i++ ) { - struct vpci_bar *bar =3D &header->bars[i]; + struct bar_map *bar =3D &task->bars[i]; struct rangeset *mem =3D bar->mem; struct map_data data =3D { .d =3D d, .map =3D true, .bar =3D bar }; =20 @@ -213,7 +304,7 @@ 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(struct map_task *task) { struct vcpu *curr =3D current; =20 @@ -223,9 +314,8 @@ static void defer_map(const struct pci_dev *pdev, uint1= 6_t cmd, bool rom_only) * is mapped. This can lead to parallel mapping operations being * started for the same device if the domain is not well-behaved. */ - curr->vpci.pdev =3D pdev; - curr->vpci.cmd =3D cmd; - curr->vpci.rom_only =3D rom_only; + list_add_tail(&task->next, &curr->vpci.task_queue); + /* * Raise a scheduler softirq in order to prevent the guest from resumi= ng * execution with pending mapping operations, to trigger the invocation @@ -240,12 +330,17 @@ static int modify_bars(const struct pci_dev *pdev, ui= nt16_t cmd, bool rom_only) struct pci_dev *tmp; const struct domain *d; const struct vpci_msix *msix =3D pdev->vpci->msix; + struct map_task *task; bool bar_valid[ARRAY_SIZE(header->bars)] =3D { false }; unsigned int i, j; int rc; =20 ASSERT(rw_is_write_locked(&pdev->domain->pci_lock)); =20 + task =3D alloc_map_task(pdev, cmd & PCI_COMMAND_MEMORY, rom_only); + if ( !task ) + return -ENOMEM; + /* * Create a rangeset per BAR that represents the current device memory * region and compare it against all the currently active BAR memory @@ -261,7 +356,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) { struct vpci_bar *bar =3D &header->bars[i]; - struct rangeset *mem =3D bar->mem; + struct rangeset *mem =3D task->bars[i].mem; unsigned long start =3D PFN_DOWN(bar->addr); unsigned long end =3D PFN_DOWN(bar->addr + bar->size - 1); unsigned long start_guest =3D PFN_DOWN(bar->guest_addr); @@ -299,7 +394,8 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) gprintk(XENLOG_G_WARNING, "%pp: can't map BAR%u - offset mismatch: %#lx vs %#lx\= n", &pdev->sbdf, i, bar->guest_addr, bar->addr); - return -EINVAL; + rc =3D -EINVAL; + goto fail; } =20 if ( !iomem_access_permitted(pdev->domain, start, end) ) @@ -309,7 +405,8 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) pdev->domain, start, end); if ( !is_hardware_domain(pdev->domain) ) domain_crash(pdev->domain); - return -EPERM; + rc =3D -EPERM; + goto fail; } =20 rc =3D xsm_iomem_mapping_vpci(XSM_HOOK, pdev->domain, start, end, @@ -321,7 +418,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) pdev->domain, start, end, rc); if ( !is_hardware_domain(pdev->domain) ) domain_crash(pdev->domain); - return rc; + goto fail; } =20 rc =3D rangeset_add_range(mem, start_guest, end_guest); @@ -329,13 +426,13 @@ static int modify_bars(const struct pci_dev *pdev, ui= nt16_t cmd, bool rom_only) { printk(XENLOG_G_WARNING "Failed to add [%lx, %lx]: %d\n", start_guest, end_guest, rc); - return rc; + goto fail; } =20 /* Check for overlap with the already setup BAR ranges. */ for ( j =3D 0; j < i; j++ ) { - struct rangeset *prev_mem =3D header->bars[j].mem; + struct rangeset *prev_mem =3D task->bars[j].mem; =20 if ( rangeset_is_empty(prev_mem) ) continue; @@ -346,7 +443,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) gprintk(XENLOG_WARNING, "%pp: failed to remove overlapping range [%lx, %lx]= : %d\n", &pdev->sbdf, start_guest, end_guest, rc); - return rc; + goto fail; } } =20 @@ -356,7 +453,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) gprintk(XENLOG_WARNING, "%pp: failed to sanitize BAR#%u memory: %d\n", &pdev->sbdf, i, rc); - return rc; + goto fail; } } =20 @@ -367,9 +464,9 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) unsigned long end =3D PFN_DOWN(vmsix_table_addr(pdev->vpci, i) + vmsix_table_size(pdev->vpci, i) - 1); =20 - for ( j =3D 0; j < ARRAY_SIZE(header->bars); j++ ) + for ( j =3D 0; j < ARRAY_SIZE(task->bars); j++ ) { - struct rangeset *mem =3D header->bars[j].mem; + struct rangeset *mem =3D task->bars[j].mem; =20 if ( rangeset_is_empty(mem) ) continue; @@ -380,7 +477,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) gprintk(XENLOG_WARNING, "%pp: failed to remove MSIX table [%lx, %lx]: %d\n", &pdev->sbdf, start, end, rc); - return rc; + goto fail; } } } @@ -424,7 +521,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) for ( j =3D 0; j < ARRAY_SIZE(header->bars); j++) { const struct vpci_bar *bar =3D &header->bars[j]; - struct rangeset *mem =3D bar->mem; + struct rangeset *mem =3D task->bars[j].mem; =20 if ( !rangeset_overlaps_range(mem, start, end) || /* @@ -443,7 +540,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) gprintk(XENLOG_WARNING, "%pp: failed to remove [%lx, %lx]: %d\n", &pdev->sbdf, start, end, rc); - return rc; + goto fail; } } } @@ -472,12 +569,19 @@ static int modify_bars(const struct pci_dev *pdev, ui= nt16_t cmd, bool rom_only) * will always be to establish mappings and process all the BARs. */ ASSERT((cmd & PCI_COMMAND_MEMORY) && !rom_only); - return apply_map(pdev->domain, pdev, cmd); + rc =3D apply_map(task); + destroy_map_task(task); + return rc; } =20 - defer_map(pdev, cmd, rom_only); + defer_map(task); =20 return 0; + + fail: + destroy_map_task(task); + + return rc; } =20 static void cf_check cmd_write( @@ -705,18 +809,6 @@ static void cf_check rom_write( } } =20 -static int bar_add_rangeset(const struct pci_dev *pdev, struct vpci_bar *b= ar, - unsigned int i) -{ - char str[32]; - - snprintf(str, sizeof(str), "%pp:BAR%u", &pdev->sbdf, i); - - bar->mem =3D rangeset_new(pdev->domain, str, RANGESETF_no_print); - - return !bar->mem ? -ENOMEM : 0; -} - int vpci_init_header(struct pci_dev *pdev) { uint16_t cmd; @@ -826,10 +918,6 @@ int vpci_init_header(struct pci_dev *pdev) else bars[i].type =3D VPCI_BAR_MEM32; =20 - rc =3D bar_add_rangeset(pdev, &bars[i], i); - if ( rc ) - goto fail; - rc =3D pci_size_mem_bar(pdev->sbdf, reg, &addr, &size, (i =3D=3D num_bars - 1) ? PCI_BAR_LAST : 0); if ( rc < 0 ) @@ -882,12 +970,6 @@ int vpci_init_header(struct pci_dev *pdev) 4, rom); if ( rc ) rom->type =3D VPCI_BAR_EMPTY; - else - { - rc =3D bar_add_rangeset(pdev, rom, num_bars); - if ( rc ) - goto fail; - } } else if ( !is_hwdom ) { diff --git a/xen/drivers/vpci/private.h b/xen/drivers/vpci/private.h index 2907f6b40fce..52f26394745b 100644 --- a/xen/drivers/vpci/private.h +++ b/xen/drivers/vpci/private.h @@ -44,6 +44,7 @@ typedef struct { #define REGISTER_VPCI_EXTCAP(name, finit, fclean) \ REGISTER_VPCI_CAPABILITY(PCI_EXT_CAP_ID_##name, name, finit, fclean, t= rue) =20 +void vpci_clear_map_queue(struct vcpu *v, const struct pci_dev *pdev); int __must_check vpci_init_header(struct pci_dev *pdev); =20 int vpci_init_capabilities(struct pci_dev *pdev, bool ext_only); diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 0ac9ec8b0475..226c7870dd6c 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -24,6 +24,17 @@ =20 #ifdef __XEN__ =20 +void vpci_vcpu_destroy(struct vcpu *v) +{ + if ( v->vpci.task_queue.next ) + vpci_clear_map_queue(v, NULL); +} + +void vpci_vcpu_init(struct vcpu *v) +{ + INIT_LIST_HEAD(&v->vpci.task_queue); +} + #ifdef CONFIG_HAS_VPCI_GUEST_SUPPORT static int assign_virtual_sbdf(struct pci_dev *pdev) { @@ -89,7 +100,7 @@ struct vpci_register *vpci_get_register(const struct vpc= i *vpci, =20 void vpci_deassign_device(struct pci_dev *pdev) { - unsigned int i; + struct vcpu *v; =20 ASSERT(rw_is_write_locked(&pdev->domain->pci_lock)); =20 @@ -116,8 +127,8 @@ void vpci_deassign_device(struct pci_dev *pdev) } spin_unlock(&pdev->vpci->lock); =20 - for ( i =3D 0; i < ARRAY_SIZE(pdev->vpci->header.bars); i++ ) - rangeset_destroy(pdev->vpci->header.bars[i].mem); + for_each_vcpu ( pdev->domain, v ) + vpci_clear_map_queue(v, pdev); =20 xfree(pdev->vpci); pdev->vpci =3D NULL; diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index ab94eb60d65f..6bb09afd4eb0 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -19,6 +19,9 @@ */ #define VPCI_MAX_VIRT_DEV (PCI_SLOT(~0) + 1) =20 +void vpci_vcpu_destroy(struct vcpu *v); +void vpci_vcpu_init(struct vcpu *v); + /* Assign vPCI to device by adding handlers. */ int __must_check vpci_assign_device(struct pci_dev *pdev); =20 @@ -54,7 +57,6 @@ struct vpci { uint64_t guest_addr; uint64_t size; uint64_t resizable_sizes; - struct rangeset *mem; enum { VPCI_BAR_EMPTY, VPCI_BAR_IO, @@ -153,10 +155,8 @@ struct vpci { }; =20 struct vpci_vcpu { - /* Per-vcpu structure to store state while {un}mapping of PCI BARs. */ - const struct pci_dev *pdev; - uint16_t cmd; - bool rom_only : 1; + /* List head with struct map_task elements */ + struct list_head task_queue; }; =20 #ifdef __XEN__ @@ -204,6 +204,9 @@ bool vpci_ecam_read(pci_sbdf_t sbdf, unsigned int reg, = unsigned int len, #else /* !CONFIG_HAS_VPCI */ struct vpci_vcpu {}; =20 +static inline void vpci_vcpu_destroy(struct vcpu *v) { } +static inline void vpci_vcpu_init(struct vcpu *v) { } + static inline int vpci_reinit_ext_capabilities(struct pci_dev *pdev) { return 0; --=20 2.54.0 From nobody Thu Jul 23 21:54:32 2026 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=1783544683; cv=pass; d=zohomail.com; s=zohoarc; b=BwEe9wVyWugmdSwzhIHNbyDP4nquVeoqZSgfku2kdfBQkXwx0XaeKq/O69aW8r/LktZX/gf+B1zeBJ187NI3HhNAeMHESgCIo5ESKJKUfIvXw9KHxWTVhEynixHoQ6iQVNHkEMEFjFTN29tTne/oAjpOBbaet4w/VpkDSuq/4N0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1783544683; 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=q9Ml1rEuDAWohroa4VYPF4k6cEO055kVYBLCDJzDEvI=; b=bn5eNrMVXphOCeeCUolgoHJL8i2h7wKluAnmPYNrfSclegQysZN3UL3V8+h4LkLW2VOozxJ4NKKmXl8+WW0m3tJJb8gbhxd/Fnn1yoyHG4KeJoPfj1TilGF2dKpzqsyLtpNzQC3lcgkgi7KMpTRccdA9CNzWCVPAty34QidHTwQ= 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 1783544683162175.23417067622438; Wed, 8 Jul 2026 14:04:43 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1357393.1611833 (Exim 4.92) (envelope-from ) id 1whZRI-0006hK-03; Wed, 08 Jul 2026 21:04:16 +0000 Received: by outflank-mailman (output) from mailman id 1357393.1611833; Wed, 08 Jul 2026 21:04:15 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZRH-0006hD-SP; Wed, 08 Jul 2026 21:04:15 +0000 Received: by outflank-mailman (input) for mailman id 1357393; Wed, 08 Jul 2026 21:04:14 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1whZRG-0006a2-9R for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 21:04:14 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1whZRF-00BD5T-MQ for xen-devel@lists.xenproject.org; Wed, 08 Jul 2026 23:04:13 +0200 Received: from [10.42.69.7] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a4ebb34-e002-0a2a0a5209dd-0a2a4507ae2e-24 for ; Wed, 08 Jul 2026 23:04:13 +0200 Received: from [40.107.209.30] (helo=PH8PR06CU001.outbound.protection.outlook.com) by tlsNG-ef75cf.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a4ebb4b-9c8e-0a2a45070019-286bd11ead0f-3 for ; Wed, 08 Jul 2026 23:04:13 +0200 Received: from CH0P223CA0018.NAMP223.PROD.OUTLOOK.COM (2603:10b6:610:116::28) by CH2PR12MB9457.namprd12.prod.outlook.com (2603:10b6:610:27c::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.10; Wed, 8 Jul 2026 21:04:07 +0000 Received: from CH3PEPF0000000F.namprd04.prod.outlook.com (2603:10b6:610:116:cafe::8f) by CH0P223CA0018.outlook.office365.com (2603:10b6:610:116::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.202.10 via Frontend Transport; Wed, 8 Jul 2026 21:04:07 +0000 Received: from satlexmb08.amd.com (165.204.84.17) by CH3PEPF0000000F.mail.protection.outlook.com (10.167.244.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Wed, 8 Jul 2026 21:04:07 +0000 Received: from Satlexmb09.amd.com (10.181.42.218) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 16:04:07 -0500 Received: from ubuntu (10.180.168.240) by satlexmb09.amd.com (10.181.42.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 8 Jul 2026 14:04:06 -0700 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EfGaMFGslcPz3bBqBETRlEU8uMf6YUP5kEaT5ZsBEtoKxzcq4tjWA6nMA7QeGI2ebOhs98LuYBiZAvRS1fZxO2Z7fkhUs7/ZYWA+U6tCF0uz7mmxO6hTNxWt7+Lw54uf/B6YgCfvUsbVKpFgXdN69Xy3N/EO38QjV3HEUZklXn4PwNjbvgXfHuKK7qPFxUHV1dHvd6YzxcxJWJwSzEXxQ11Xc7OmmicNlcPLCI28uPMik+qDuwk7C3dbqaMEWz74dHJM/XQ+Tfq2ksPLzi946oJ5mVDZG0NwbpY4toI63S9NhY66kE2p3UOP7VfNGhi+ZufVRTemva4QvLFvNyWDkQ== 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=q9Ml1rEuDAWohroa4VYPF4k6cEO055kVYBLCDJzDEvI=; b=BHsNz2mC3ar3qIxN8v7daPMOXRTW2a/Dnx5Kt+85jd6vIiirGZeIfEYTc9+lvfdpQOQEpSCbR5b9qX3DhccTO4gaNvTA9WdsmemWFHGVbfewcFdDnq2GtUR5uValwv+iDWKJ7zgSfVDsz2THjM2/QH6cV36HArATO9G57jXY+lkvrkKUOnv9dWHFYUyohGbN9YBhQ3VPGN6PAryZXzoXcLEfO6NiV6E9h8g+GMl+y6aCv6yHYSTYOP6vcq0DULQOvn9PcaFZLXAj5Nz5HXNKqyCYL+bii0WL0GC/bwbfH6mFFiCxms4O9305ESgTIvney8j6ye+rwYnhU3fTYYINEw== 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=q9Ml1rEuDAWohroa4VYPF4k6cEO055kVYBLCDJzDEvI=; b=GYr/3BGGw43YpJAMMOKlxaaKaT1IQZ4Pqbam/d1HcG5O8WnGEMf+p3AKMESESfCSBnqLmr0s8qYQB+m/nwmY8mCMOlq1dh5xlmcFhh1sQJ3DpYxzY59BJHyAhJ8djXKjnNPzBe1eCnR0E4NafxCW6IOXF5dio7AxpmenXrFc+W4= 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=satlexmb08.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , "Daniel P. Smith" Subject: [PATCH v5 9/9] vpci: don't pass command value to modify_bars() Date: Wed, 8 Jul 2026 17:02:24 -0400 Message-ID: <20260708210233.922275-10-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260708210233.922275-1-stewart.hildebrand@amd.com> References: <20260708210233.922275-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: satlexmb07.amd.com (10.181.42.216) To satlexmb09.amd.com (10.181.42.218) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000F:EE_|CH2PR12MB9457:EE_ X-MS-Office365-Filtering-Correlation-Id: 74f2cd4f-6d7b-49d8-9570-08dedd34734e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|36860700016|376014|23010399003|11063799006|18002099003|56012099006|22082099003; X-Microsoft-Antispam-Message-Info: HhVwZdPh0GSLdXOJAzZvMSnn+t9GjnFrMzgpxvET0FdktfQE456XweStMMGZ3pT6x6qGh7v+JVIXYyCFRqMuf8Xuj6CGyvaz7GWAiBGmZOCEcv0x+sJR6Oh3Zyj8S+rSU5U/59utcYljLVRJ2MNwaRNUODCWQpuFT8sh8pIcFefxxbfnxpRBgAHqiVnvDTJ8F3vSWfdCVz8m73Mxyu+n3Pa01BGpVF0Q2fQ74njhBLrpeBcq99safWVLjbWTaQsaAYTVBXv2zfE9PGmj1R5oUJPuSv7J7KhKYO8tinJxenFZcd+nrnJnMIde/uSWUEYZm1aDX8D8TRCWStMDXjGBpT5OU3EMMZy8o6ox6hA6cJfDHI/NrXRH4cxCMGIQNIzQNLEnP+27Al1tD1MdRpqRYPfhYeHV8eMinMH3a+gAMAusABQ5/X6FgMbFJ6i+gkUVB5d6UeyZJDAqnJLR9eL1BqFtF1qsDyYzaqyqpZ5nC5d2Xn0WEYUWeBJkL0FypWxbCvni9aoIMTe2gUIyHXGSnqS0JB2y/65+ALfzlx+bAB0Cl9zUNFYMoXN1Apvy3NHpuyYh0f9SGJWK4ifg/rbsHKGo02v9IchkzMMOoYF6BzPdx+YfHLcG2BEtvXEjMy6aGOV4xx7bBo1jlztrEQKE16WZH85lsn46ffmobVdIOdAlU8X63wML8yjU2woIj7+pHfpcCNaZuNmc1PZK8OnZ9w== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb08.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(36860700016)(376014)(23010399003)(11063799006)(18002099003)(56012099006)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9+96k0L5V0NdgTWRRPTC4wZnESalCqPlNLHmN3JVztiQ4AHQEc9PjTJZotmo1IjuTYgaCOU9pSW0I+hYAy7GqJ66I/EEAqZ0PI4pO2Oo9w6STPXtc3EyNfqkwDoYRcqnKvCvLDQTMfz6LrqYHGQOKAe2ehK/e+izBVXm0ZGhwnC9WAQ5oiX3sPR/kx9RxPfUfyHpnU1z0V+gUwSWweK5CQ0rP3/P8yBqlEG471KMAQPcEWf0bz0ej0fEPpLEH2kEQVm/qo+CPoQ9IQbzCcG+RTQSqcaan5FkErpkP2IXNdE7iKEIIm+H3hOq8WOAEOu/H+mgCwKMTlZg6gq59dMpBiczg2jULXG7MN5jlNeQsMFQjv6zgR8BKfGNfy0qF+8t/kr3zWHNKoby+c9jhK23qp9Yc8RUi/RnDjWDeGmhJoCD0K2gqk8QPUfkWDGSRIVN X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2026 21:04:07.5212 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 74f2cd4f-6d7b-49d8-9570-08dedd34734e 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=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000F.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB9457 X-purgate-ID: tlsNG-ef75cf/1783544653-FD72125E-DA63933E/0/0 X-purgate-type: clean X-purgate-size: 4658 X-ZohoMail-DKIM: pass (identity @amd.com) X-ZM-MESSAGEID: 1783544685063158500 Content-Type: text/plain; charset="utf-8" Now that writing the command register is no longer deferred, there's no need to pass the cmd value to modify_bars(). Replace it with a bool to indicate map/unmap. Signed-off-by: Stewart Hildebrand --- v4->v5: * adapted from: ("vpci: allow BAR map/unmap without affecting memory decoding bit") * significant rework v3->v4: * rebase on dynamically allocated map queue v2->v3: * use bool * switch to task->map in more places v1->v2: * new patch --- xen/drivers/vpci/header.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 99ce67053068..187de3a12abb 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -324,7 +324,7 @@ static void defer_map(struct map_task *task) 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, bool map, bool rom_only) { struct vpci_header *header =3D &pdev->vpci->header; struct pci_dev *tmp; @@ -337,7 +337,7 @@ 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 - task =3D alloc_map_task(pdev, cmd & PCI_COMMAND_MEMORY, rom_only); + task =3D alloc_map_task(pdev, map, rom_only); if ( !task ) return -ENOMEM; =20 @@ -369,7 +369,7 @@ 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 map ) continue; =20 if ( !pci_check_bar(pdev, _mfn(start), _mfn(end)) ) @@ -409,8 +409,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) goto fail; } =20 - rc =3D xsm_iomem_mapping_vpci(XSM_HOOK, pdev->domain, start, end, - !!(cmd & PCI_COMMAND_MEMORY)); + rc =3D xsm_iomem_mapping_vpci(XSM_HOOK, pdev->domain, start, end, = map); if ( rc ) { printk(XENLOG_G_WARNING @@ -555,7 +554,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) for ( i =3D 0; i < ARRAY_SIZE(header->bars); i++ ) { if ( bar_valid[i] ) - header->bars[i].enabled =3D cmd & PCI_COMMAND_MEMORY; + header->bars[i].enabled =3D map; } =20 if ( system_state < SYS_STATE_active ) @@ -568,7 +567,7 @@ static int modify_bars(const struct pci_dev *pdev, uint= 16_t cmd, bool rom_only) * be called iff the memory decoding bit is enabled, thus the oper= ation * will always be to establish mappings and process all the BARs. */ - ASSERT((cmd & PCI_COMMAND_MEMORY) && !rom_only); + ASSERT(map && !rom_only); rc =3D apply_map(task); destroy_map_task(task); return rc; @@ -607,7 +606,7 @@ static void cf_check cmd_write( * handled above and by the rsvdp_mask. */ if ( header->bars_mapped !=3D new_enabled && - modify_bars(pdev, cmd, false) ) + modify_bars(pdev, new_enabled, false) ) /* * Ignore the error. No memory has been added or removed from the = p2m * (because the actual p2m changes are deferred in defer_map) and = the @@ -784,12 +783,8 @@ static void cf_check rom_write( rom->guest_addr =3D rom->addr; } =20 - /* - * 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. - */ if ( header->bars_mapped && rom->enabled !=3D new_enabled && - modify_bars(pdev, new_enabled ? PCI_COMMAND_MEMORY : 0, true) ) + modify_bars(pdev, new_enabled, 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 @@ -988,7 +983,7 @@ int vpci_init_header(struct pci_dev *pdev) pci_conf_write16(pdev->sbdf, PCI_COMMAND, cmd); } =20 - return (cmd & PCI_COMMAND_MEMORY) ? modify_bars(pdev, cmd, false) : 0; + return (cmd & PCI_COMMAND_MEMORY) ? modify_bars(pdev, true, false) : 0; =20 fail: pci_conf_write16(pdev->sbdf, PCI_COMMAND, cmd); --=20 2.54.0