From patchwork Mon Aug 28 17:56:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stewart Hildebrand X-Patchwork-Id: 13368181 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 04B16C83F11 for ; Mon, 28 Aug 2023 18:00:32 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.591733.924211 (Exim 4.92) (envelope-from ) id 1qagXC-0000ar-Hx; Mon, 28 Aug 2023 18:00:18 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 591733.924211; Mon, 28 Aug 2023 18:00:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qagXC-0000ak-Eq; Mon, 28 Aug 2023 18:00:18 +0000 Received: by outflank-mailman (input) for mailman id 591733; Mon, 28 Aug 2023 18:00:17 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qagXB-0007dz-0K for xen-devel@lists.xenproject.org; Mon, 28 Aug 2023 18:00:17 +0000 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on20614.outbound.protection.outlook.com [2a01:111:f400:7e8a::614]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id bcf25ff3-45cc-11ee-9b0c-b553b5be7939; Mon, 28 Aug 2023 20:00:15 +0200 (CEST) Received: from CY5PR15CA0241.namprd15.prod.outlook.com (2603:10b6:930:66::10) by MW3PR12MB4457.namprd12.prod.outlook.com (2603:10b6:303:2e::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.34; Mon, 28 Aug 2023 18:00:10 +0000 Received: from CY4PEPF0000EE39.namprd03.prod.outlook.com (2603:10b6:930:66:cafe::49) by CY5PR15CA0241.outlook.office365.com (2603:10b6:930:66::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.35 via Frontend Transport; Mon, 28 Aug 2023 18:00:10 +0000 Received: from SATLEXMB03.amd.com (165.204.84.17) by CY4PEPF0000EE39.mail.protection.outlook.com (10.167.242.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6745.16 via Frontend Transport; Mon, 28 Aug 2023 18:00:09 +0000 Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 28 Aug 2023 13:00:09 -0500 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.27 via Frontend Transport; Mon, 28 Aug 2023 13:00:08 -0500 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: bcf25ff3-45cc-11ee-9b0c-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dL83EREyZlZA0NnDMtxy0VKkA223uxkJeHLSLaxHwN6J3h7y8jcbvmYx0g3jaivSd9qqNdSinrc2mq5pG8IF9A/T9sW698PcWUADof6Cl80wiIvI13Kftko5IigqCsKFuwSKV6eyTM7MJNthTAYC4L1tr7OYvIQvYEdk9wfpWAzdpZ5OyJMudvc3AQgV1rDXU1j/4usz+V2Amw/MlpjP3GVm2HZK7/FqyF1f1n5G5zKrfp6/PK9q+bYRDZpiR6MdD4o4y9jtalNJBOBm9DZZvoidnKsI7mhFs3j5gMRv1Nxg8z4UsaanR4aRSxkHIlpTc/lb+Pd1fCT2ioAoJfCVPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=sSugDH+jgmJ2t21KwpZdRqjLqY8PIhOuQoVgJ7q4wiw=; b=eqEL7xDbTup4CV04/svym4epFIhstRM4dJDGQ4E3qXsnHfct18PpRajKMBaVKszqHn+mnZa6+TkS+pSC0CaT/708Zs3Yr+1ZfF84ioAe5LN1TDNuaOIMD1d8eGeaQBiyAEe1T1qgJbYZydmxbn/3RHZK257B6SbXYLy0LKRbPUke37IXeBHWCC62nfg6neqjaORLSymg2XTKMOaQxEFIw10s+i8HmhSo+hmUcx3ZP6U0xdIFSmiAHprwjaxX9Blc7cgFGYMKOqud0qaUIaeUVPHt4gRQYbkC5DDapnxaNeXjnpNmqd5PmSg89FljcPjKIPPftBY1E3mgavaEa8YChg== 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 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=sSugDH+jgmJ2t21KwpZdRqjLqY8PIhOuQoVgJ7q4wiw=; b=3FurlRBFbT6833ICek4NBadPmyU1HvNs8xTBNw4UKNoES3ysphnKyQqPWT2JQrM2wUtzcJH/2XQqvsHuUDzEMDUUE1XIX7NCajgRa//g2xS30NBLT1ZvEWcaBgrOrkpBaQBgFNJKPBE5YWG8TaIeU5hL7hkLRy13jeU0GfFoN34= 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 (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB03.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , Jan Beulich , Andrew Cooper , =?utf-8?q?Roger_Pau_Monn=C3=A9?= , Wei Liu Subject: [PATCH v4 1/6] x86/msi: remove some unused-but-set-variables Date: Mon, 28 Aug 2023 13:56:49 -0400 Message-ID: <20230828175858.30780-2-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230828175858.30780-1-stewart.hildebrand@amd.com> References: <20230828175858.30780-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE39:EE_|MW3PR12MB4457:EE_ X-MS-Office365-Filtering-Correlation-Id: ddca4f7b-1661-4d2d-1401-08dba7f09eae X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 828WXKOQBMzXPvy9XyFmSEHxGUT1CCmc8yWfwYHIsFMkV/yRjFXK440QK6M8kpn5yZPnG/rSEe44ZgZOt9vnshKDOq9kA9VzxJDRv9H2Tu1QU8Yk1MXNkF8oFJIuaY0GdKhaZtbS2dV5AUUqpJSjx5jN/zYkvyUyFnuHuHCN5KEDUJ/qJRpHXpDRMaDkpdzUm1kN6PrdDEuRCW/ryHKj83fdglw9SydbvH/zekTOja+mPJv3zejcLnDrhZYeLyLO8L22v8KK6pAaxTLEaL1S+9XdzfDeXzlLzh3ar+IiPib/TWQjTc4XRC+kq0A3cEVFzODDdc9aTxxfj68IFShl5FLy+QJiGKo6dla3fGnMVRuTHYKs8Pn00EBdpnMu55WAtghjkJMwYZowk2PZW7s5ufpoBytQnYR/TdTc4r/QoepiJWwupK4DuBN1umrQgDFFdoOx7MeQAUEdg4A4qk08VeMbsedxGa+DlRWLn2SDaAJnGR6unlXTsNAh9863M4r8jSSXoEK+GmCDv0CRjfle5WMzRc53tii5y77WN0As599gaY2/mAyQUkPN8emyKQEy5BLb0vG3MhLsCulUbxGFxkKUrHC7wbxsIuoi0eD/vdEA1AHXcjtSDQYNa98e+v+63HfmVwyur7it1qMaYyN8EdLByZdI7R6a3rK5+pWDmWUdQNq3Pjj77VkhFrim+slsjzkZHQktMU2bD5d4pRUwdXWy97EH3ILRth21IIVx2/4AcyL4a3nE+2FeSrES+EnFU070XuR962t7MFoXGFK93g== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB03.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(136003)(376002)(346002)(39860400002)(396003)(451199024)(1800799009)(186009)(82310400011)(36840700001)(40470700004)(46966006)(82740400003)(6666004)(40460700003)(36756003)(86362001)(356005)(81166007)(40480700001)(36860700001)(47076005)(2616005)(1076003)(2906002)(426003)(336012)(26005)(83380400001)(478600001)(41300700001)(70586007)(70206006)(4326008)(8676002)(8936002)(5660300002)(44832011)(54906003)(6916009)(316002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2023 18:00:09.8161 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ddca4f7b-1661-4d2d-1401-08dba7f09eae X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EE39.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR12MB4457 These were left over after a previous pci_sbdf_t conversion. Fixes: 0c38c61aad21 ("pci: switch pci_conf_write32 to use pci_sbdf_t") Signed-off-by: Stewart Hildebrand Reviewed-by: Jan Beulich --- v3->v4: * new patch: this change was split from ("xen/pci: convert pci_find_*cap* to pci_sbdf_t") Found by building with EXTRA_CFLAGS_XEN_CORE="-Wunused-but-set-variable" arch/x86/msi.c: In function ‘msi_set_mask_bit’: arch/x86/msi.c:322:19: warning: variable ‘func’ set but not used [-Wunused-but-set-variable] 322 | u8 bus, slot, func; | ^~~~ arch/x86/msi.c:322:13: warning: variable ‘slot’ set but not used [-Wunused-but-set-variable] 322 | u8 bus, slot, func; | ^~~~ arch/x86/msi.c:322:8: warning: variable ‘bus’ set but not used [-Wunused-but-set-variable] 322 | u8 bus, slot, func; | ^~~ arch/x86/msi.c:321:9: warning: variable ‘seg’ set but not used [-Wunused-but-set-variable] 321 | u16 seg, control; | ^~~ --- xen/arch/x86/msi.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/xen/arch/x86/msi.c b/xen/arch/x86/msi.c index d0bf63df1def..41b82f3e87cb 100644 --- a/xen/arch/x86/msi.c +++ b/xen/arch/x86/msi.c @@ -318,17 +318,12 @@ static bool msi_set_mask_bit(struct irq_desc *desc, bool host, bool guest) { struct msi_desc *entry = desc->msi_desc; struct pci_dev *pdev; - u16 seg, control; - u8 bus, slot, func; + uint16_t control; bool flag = host || guest, maskall; ASSERT(spin_is_locked(&desc->lock)); BUG_ON(!entry || !entry->dev); pdev = entry->dev; - seg = pdev->seg; - bus = pdev->bus; - slot = PCI_SLOT(pdev->devfn); - func = PCI_FUNC(pdev->devfn); switch ( entry->msi_attrib.type ) { case PCI_CAP_ID_MSI: From patchwork Mon Aug 28 17:56:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stewart Hildebrand X-Patchwork-Id: 13368182 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 37DB4C71153 for ; Mon, 28 Aug 2023 18:01:04 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.591742.924221 (Exim 4.92) (envelope-from ) id 1qagXo-0001Im-0f; Mon, 28 Aug 2023 18:00:56 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 591742.924221; Mon, 28 Aug 2023 18:00:55 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qagXn-0001If-TW; Mon, 28 Aug 2023 18:00:55 +0000 Received: by outflank-mailman (input) for mailman id 591742; Mon, 28 Aug 2023 18:00:55 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qagXn-0007dz-DD for xen-devel@lists.xenproject.org; Mon, 28 Aug 2023 18:00:55 +0000 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on20600.outbound.protection.outlook.com [2a01:111:f400:7eae::600]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id d38cbc26-45cc-11ee-9b0c-b553b5be7939; Mon, 28 Aug 2023 20:00:52 +0200 (CEST) Received: from DM6PR03CA0041.namprd03.prod.outlook.com (2603:10b6:5:100::18) by PH8PR12MB6698.namprd12.prod.outlook.com (2603:10b6:510:1cd::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.34; Mon, 28 Aug 2023 18:00:48 +0000 Received: from CY4PEPF0000EE3E.namprd03.prod.outlook.com (2603:10b6:5:100:cafe::50) by DM6PR03CA0041.outlook.office365.com (2603:10b6:5:100::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.34 via Frontend Transport; Mon, 28 Aug 2023 18:00:47 +0000 Received: from SATLEXMB03.amd.com (165.204.84.17) by CY4PEPF0000EE3E.mail.protection.outlook.com (10.167.242.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6745.17 via Frontend Transport; Mon, 28 Aug 2023 18:00:47 +0000 Received: from SATLEXMB05.amd.com (10.181.40.146) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 28 Aug 2023 13:00:46 -0500 Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB05.amd.com (10.181.40.146) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 28 Aug 2023 13:00:41 -0500 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.27 via Frontend Transport; Mon, 28 Aug 2023 13:00:39 -0500 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: d38cbc26-45cc-11ee-9b0c-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CLzcUh31j61frhp1KBKl+uHeyo1D0rYcC+O48EP+pZBPzLXHgkMS4TV9kA2HuhOurOkAxs6cUAR78qtitoBq2o0WQBiTXBDOcNbHuqd0PsH8jl3UNihd6Pg/fenKP2lF59dMcJJRepPv4of89tlIvr7D7E04G6FTDWcnSwDPa9fkrGxHaXflPRIqm5zzoeRBKXFAMwdnS/4XNsbcpuffGKczlxrUwrm3IT5hYjZmbjBhO+jGfJ0yu+12mmfRUMSmmvHMpye4yWlNnPUwC2GhSkXkk0bDnkG/qYa+yr/epov6lOoyUy/0aZC/H54TTfCnye787NT+EkYu3Ii6bssjDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=m4EibGZ4Yk5HNGOsk7Jp/890SzDtnxNqFOoFc4Nnbtg=; b=OvFQgZgu22OwFjgSJ7GAXskqts/S+cj3Jra3DuxnPw3A3GgDusaPVG/Gf3mn1UHuIvBbD5sLGKH5AhAQNs4uhCYAMBEAod0S3Zm1p6sAE2NOtZFBU0aahGW60N2lTkADzQYzMkehtwuEN/go8gfQafOHg+40QmLxT23pO/NAlHhfWnwZ1kwMSfvGXjDGprraIv4nQiIDdr6zidrhdG0JQ5viBvQR8F7jKmYI5OLuBc5vZgpD6s5n5iiymDCg0WYY1ZWz0chWD7eq1LPiMqUA6MFXm+5NhMOdj13YdCKNUDZAPPY6LxE34oyU/8ig1MMcYDpBKzxy7jGpKIO1uwZD3Q== 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 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=m4EibGZ4Yk5HNGOsk7Jp/890SzDtnxNqFOoFc4Nnbtg=; b=wm5hku5k9/VXlzYB42PvLo6Pt2jM8+lgAzp/3EpuIEsj5UKx24BpEk+7TMOtpTBMcWz2IwvcmVNhPbRF3wBIgrZKHn44G4dqGo0JMPwd3DWfWgu832AJEnVj/8Ojw8z1rzEjRBLXJawCnscMMV7ycDE2Ixt7ZKAhliWFNCaG4qk= 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 (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB03.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , Jan Beulich , Andrew Cooper , =?utf-8?q?Roger_Pau_Monn=C3=A9?= , Wei Liu , George Dunlap , Julien Grall , Stefano Stabellini , Paul Durrant , Kevin Tian Subject: [PATCH v4 2/6] xen/pci: convert pci_find_*cap* to pci_sbdf_t Date: Mon, 28 Aug 2023 13:56:50 -0400 Message-ID: <20230828175858.30780-3-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230828175858.30780-1-stewart.hildebrand@amd.com> References: <20230828175858.30780-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE3E:EE_|PH8PR12MB6698:EE_ X-MS-Office365-Filtering-Correlation-Id: d9aed885-ee32-45f0-6715-08dba7f0b529 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0AS7Ly6Hf+CQs7lp/Exjy8SAaCchl3SV7DJcvBBMXCb7XxH6B9wKujGhc261xZqcG4Epd3EIM88su0eM0Pr4kbEDVfP+rQQ7nbrZb3SRfLgq7J0cFdQK+EHhMkjbVH+zibdsDokwyGl95KgMuHrUaI20ePfJM9YczH9S4zgbj2bQhyyDqnYokKEiTW+TogMcvjlCja4BPRu0EUaXpJwygllala4+iXghGpToSqRH6U0RjgXNNQVmbhGYwujsX/FpzE13gsYeOiiXtutVggiLBZB2SeKY5L/slfKX7XdUIqvmzwmcELIjPLkzW5wON+xM0Z/ZQTAl7D2G0G9LMSE8frOk1wx1dgnB8oozNAfRitM7yF/Ds4bL/OEZbe3zU8mDTIJSiYkZY1m/sPibk07AlAvDdya5iWpva/syAomiIxfS7jrbvPxyCUAEQmPzMhaKT4ZgzHFJEptvEcq3933naXX2SFBdt/TTkt18tD817UCIt+yMDerSDkb7A1fGVN9NdO2vx8qLQ4ji9d9rbPPnWiOIZe5+zlcKFFlfnaJw7xN/C3E0eMzJX8xYpfeilg7/rFUyPDuCFAHZvbD+2yqj3fpwM7hto5w9PvZdKAqDlmxr1mhvPIgRzUBxlxSw1EWGBrs9/SOjdljN98MsglohbXqQc/QWR9ApNFywYYQozS2rki0U4E7L0sdbP1oA54fB2v90E1SWblHMRuJ2yhNGAHMeaW20KQX4atVq32kP+l6hZCPYSkRInCEqXpnH3oKEyL8Eq3nbzAL5wMUJ1QZzQQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB03.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(376002)(39860400002)(136003)(396003)(346002)(451199024)(1800799009)(82310400011)(186009)(40470700004)(36840700001)(46966006)(8676002)(8936002)(4326008)(2906002)(6916009)(70586007)(36756003)(54906003)(316002)(70206006)(5660300002)(44832011)(7416002)(40460700003)(26005)(41300700001)(36860700001)(336012)(1076003)(2616005)(426003)(40480700001)(30864003)(82740400003)(81166007)(356005)(478600001)(47076005)(83380400001)(6666004)(86362001)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2023 18:00:47.5186 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d9aed885-ee32-45f0-6715-08dba7f0b529 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EE3E.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB6698 Convert pci_find_*cap* functions and call sites to pci_sbdf_t, and remove some now unused local variables. Also change to more appropriate types on lines that are already being modified as a result of the pci_sbdf_t conversion. Signed-off-by: Stewart Hildebrand Reviewed-by: Jan Beulich --- I built with EXTRA_CFLAGS_XEN_CORE="-Wunused-but-set-variable" (and unfortunately -Wno-error=unused-but-set-variable too) to identify locations of unneeded local variables as a result of the change to pci_sbdf_t. v3->v4: * use more appropriate types on lines that are being modified anyway * remove "no functional change" from commit description v2->v3: * new patch --- xen/arch/x86/msi.c | 40 ++++++---------------- xen/drivers/char/ehci-dbgp.c | 3 +- xen/drivers/passthrough/amd/iommu_detect.c | 2 +- xen/drivers/passthrough/ats.c | 4 +-- xen/drivers/passthrough/ats.h | 6 ++-- xen/drivers/passthrough/msi.c | 6 ++-- xen/drivers/passthrough/pci.c | 21 +++++------- xen/drivers/passthrough/vtd/quirks.c | 10 ++---- xen/drivers/passthrough/vtd/x86/ats.c | 3 +- xen/drivers/pci/pci.c | 32 +++++++++-------- xen/drivers/vpci/msi.c | 4 +-- xen/drivers/vpci/msix.c | 4 +-- xen/include/xen/pci.h | 11 +++--- 13 files changed, 58 insertions(+), 88 deletions(-) diff --git a/xen/arch/x86/msi.c b/xen/arch/x86/msi.c index 41b82f3e87cb..8d4fd43b10a6 100644 --- a/xen/arch/x86/msi.c +++ b/xen/arch/x86/msi.c @@ -283,7 +283,7 @@ static void msi_set_enable(struct pci_dev *dev, int enable) u8 slot = PCI_SLOT(dev->devfn); u8 func = PCI_FUNC(dev->devfn); - pos = pci_find_cap_offset(seg, bus, slot, func, PCI_CAP_ID_MSI); + pos = pci_find_cap_offset(dev->sbdf, PCI_CAP_ID_MSI); if ( pos ) __msi_set_enable(seg, bus, slot, func, pos, enable); } @@ -291,12 +291,9 @@ static void msi_set_enable(struct pci_dev *dev, int enable) static void msix_set_enable(struct pci_dev *dev, int enable) { int pos; - u16 control, seg = dev->seg; - u8 bus = dev->bus; - u8 slot = PCI_SLOT(dev->devfn); - u8 func = PCI_FUNC(dev->devfn); + uint16_t control; - pos = pci_find_cap_offset(seg, bus, slot, func, PCI_CAP_ID_MSIX); + pos = pci_find_cap_offset(dev->sbdf, PCI_CAP_ID_MSIX); if ( pos ) { control = pci_conf_read16(dev->sbdf, msix_control_reg(pos)); @@ -603,13 +600,10 @@ static int msi_capability_init(struct pci_dev *dev, struct msi_desc *entry; int pos; unsigned int i, mpos; - u16 control, seg = dev->seg; - u8 bus = dev->bus; - u8 slot = PCI_SLOT(dev->devfn); - u8 func = PCI_FUNC(dev->devfn); + uint16_t control; ASSERT(pcidevs_locked()); - pos = pci_find_cap_offset(seg, bus, slot, func, PCI_CAP_ID_MSI); + pos = pci_find_cap_offset(dev->sbdf, PCI_CAP_ID_MSI); if ( !pos ) return -ENODEV; control = pci_conf_read16(dev->sbdf, msi_control_reg(pos)); @@ -680,8 +674,8 @@ static u64 read_pci_mem_bar(u16 seg, u8 bus, u8 slot, u8 func, u8 bir, int vf) { struct pci_dev *pdev = pci_get_pdev(NULL, PCI_SBDF(seg, bus, slot, func)); - unsigned int pos = pci_find_ext_capability(seg, bus, - PCI_DEVFN(slot, func), + unsigned int pos = pci_find_ext_capability(PCI_SBDF(seg, bus, slot, + func), PCI_EXT_CAP_ID_SRIOV); uint16_t ctrl = pci_conf_read16(PCI_SBDF(seg, bus, slot, func), pos + PCI_SRIOV_CTRL); @@ -772,8 +766,7 @@ static int msix_capability_init(struct pci_dev *dev, u8 slot = PCI_SLOT(dev->devfn); u8 func = PCI_FUNC(dev->devfn); bool maskall = msix->host_maskall, zap_on_error = false; - unsigned int pos = pci_find_cap_offset(seg, bus, slot, func, - PCI_CAP_ID_MSIX); + unsigned int pos = pci_find_cap_offset(dev->sbdf, PCI_CAP_ID_MSIX); if ( !pos ) return -ENODEV; @@ -1097,12 +1090,7 @@ static void _pci_cleanup_msix(struct arch_msix *msix) static void __pci_disable_msix(struct msi_desc *entry) { struct pci_dev *dev = entry->dev; - u16 seg = dev->seg; - u8 bus = dev->bus; - u8 slot = PCI_SLOT(dev->devfn); - u8 func = PCI_FUNC(dev->devfn); - unsigned int pos = pci_find_cap_offset(seg, bus, slot, func, - PCI_CAP_ID_MSIX); + unsigned int pos = pci_find_cap_offset(dev->sbdf, PCI_CAP_ID_MSIX); u16 control = pci_conf_read16(dev->sbdf, msix_control_reg(entry->msi_attrib.pos)); bool maskall = dev->msix->host_maskall; @@ -1206,8 +1194,7 @@ void pci_cleanup_msi(struct pci_dev *pdev) int pci_reset_msix_state(struct pci_dev *pdev) { - unsigned int pos = pci_find_cap_offset(pdev->seg, pdev->bus, pdev->sbdf.dev, - pdev->sbdf.fn, PCI_CAP_ID_MSIX); + unsigned int pos = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_MSIX); ASSERT(pos); /* @@ -1229,10 +1216,6 @@ int pci_reset_msix_state(struct pci_dev *pdev) int pci_msi_conf_write_intercept(struct pci_dev *pdev, unsigned int reg, unsigned int size, uint32_t *data) { - u16 seg = pdev->seg; - u8 bus = pdev->bus; - u8 slot = PCI_SLOT(pdev->devfn); - u8 func = PCI_FUNC(pdev->devfn); struct msi_desc *entry; unsigned int pos; @@ -1240,8 +1223,7 @@ int pci_msi_conf_write_intercept(struct pci_dev *pdev, unsigned int reg, { entry = find_msi_entry(pdev, -1, PCI_CAP_ID_MSIX); pos = entry ? entry->msi_attrib.pos - : pci_find_cap_offset(seg, bus, slot, func, - PCI_CAP_ID_MSIX); + : pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_MSIX); ASSERT(pos); if ( reg >= pos && reg < msix_pba_offset_reg(pos) + 4 ) diff --git a/xen/drivers/char/ehci-dbgp.c b/xen/drivers/char/ehci-dbgp.c index 72be4d9cc970..00cbdd5454dd 100644 --- a/xen/drivers/char/ehci-dbgp.c +++ b/xen/drivers/char/ehci-dbgp.c @@ -687,7 +687,8 @@ static unsigned int __init __find_dbgp(u8 bus, u8 slot, u8 func) if ( (class >> 8) != PCI_CLASS_SERIAL_USB_EHCI ) return 0; - return pci_find_cap_offset(0, bus, slot, func, PCI_CAP_ID_EHCI_DEBUG); + return pci_find_cap_offset(PCI_SBDF(0, bus, slot, func), + PCI_CAP_ID_EHCI_DEBUG); } static unsigned int __init find_dbgp(struct ehci_dbgp *dbgp, diff --git a/xen/drivers/passthrough/amd/iommu_detect.c b/xen/drivers/passthrough/amd/iommu_detect.c index 2317fa6a7d8d..cede44e6518f 100644 --- a/xen/drivers/passthrough/amd/iommu_detect.c +++ b/xen/drivers/passthrough/amd/iommu_detect.c @@ -27,7 +27,7 @@ static int __init get_iommu_msi_capabilities( { int pos; - pos = pci_find_cap_offset(seg, bus, dev, func, PCI_CAP_ID_MSI); + pos = pci_find_cap_offset(PCI_SBDF(seg, bus, dev, func), PCI_CAP_ID_MSI); if ( !pos ) return -ENODEV; diff --git a/xen/drivers/passthrough/ats.c b/xen/drivers/passthrough/ats.c index 253f5c2e1042..0da183d057c5 100644 --- a/xen/drivers/passthrough/ats.c +++ b/xen/drivers/passthrough/ats.c @@ -24,11 +24,9 @@ boolean_param("ats", ats_enabled); int enable_ats_device(struct pci_dev *pdev, struct list_head *ats_list) { u32 value; - u16 seg = pdev->seg; - u8 bus = pdev->bus, devfn = pdev->devfn; int pos; - pos = pci_find_ext_capability(seg, bus, devfn, PCI_EXT_CAP_ID_ATS); + pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_ATS); BUG_ON(!pos); if ( iommu_verbose ) diff --git a/xen/drivers/passthrough/ats.h b/xen/drivers/passthrough/ats.h index baa5f6a6dc04..f5e1d254e0d3 100644 --- a/xen/drivers/passthrough/ats.h +++ b/xen/drivers/passthrough/ats.h @@ -32,7 +32,8 @@ static inline int pci_ats_enabled(int seg, int bus, int devfn) u32 value; int pos; - pos = pci_find_ext_capability(seg, bus, devfn, PCI_EXT_CAP_ID_ATS); + pos = pci_find_ext_capability(PCI_SBDF(seg, bus, devfn), + PCI_EXT_CAP_ID_ATS); BUG_ON(!pos); value = pci_conf_read16(PCI_SBDF(seg, bus, devfn), pos + ATS_REG_CTL); @@ -45,7 +46,8 @@ static inline int pci_ats_device(int seg, int bus, int devfn) if ( !ats_enabled ) return 0; - return pci_find_ext_capability(seg, bus, devfn, PCI_EXT_CAP_ID_ATS); + return pci_find_ext_capability(PCI_SBDF(seg, bus, devfn), + PCI_EXT_CAP_ID_ATS); } #endif /* _ATS_H_ */ diff --git a/xen/drivers/passthrough/msi.c b/xen/drivers/passthrough/msi.c index fb78e2ebe8a4..13d904692ef8 100644 --- a/xen/drivers/passthrough/msi.c +++ b/xen/drivers/passthrough/msi.c @@ -24,8 +24,7 @@ int pdev_msi_init(struct pci_dev *pdev) INIT_LIST_HEAD(&pdev->msi_list); - pos = pci_find_cap_offset(pdev->seg, pdev->bus, PCI_SLOT(pdev->devfn), - PCI_FUNC(pdev->devfn), PCI_CAP_ID_MSI); + pos = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_MSI); if ( pos ) { uint16_t ctrl = pci_conf_read16(pdev->sbdf, msi_control_reg(pos)); @@ -33,8 +32,7 @@ int pdev_msi_init(struct pci_dev *pdev) pdev->msi_maxvec = multi_msi_capable(ctrl); } - pos = pci_find_cap_offset(pdev->seg, pdev->bus, PCI_SLOT(pdev->devfn), - PCI_FUNC(pdev->devfn), PCI_CAP_ID_MSIX); + pos = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_MSIX); if ( pos ) { struct arch_msix *msix = xzalloc(struct arch_msix); diff --git a/xen/drivers/passthrough/pci.c b/xen/drivers/passthrough/pci.c index ed1f689227fa..04d00c7c37df 100644 --- a/xen/drivers/passthrough/pci.c +++ b/xen/drivers/passthrough/pci.c @@ -361,8 +361,7 @@ static struct pci_dev *alloc_pdev(struct pci_seg *pseg, u8 bus, u8 devfn) break; case DEV_TYPE_PCIe_ENDPOINT: - pos = pci_find_cap_offset(pseg->nr, bus, PCI_SLOT(devfn), - PCI_FUNC(devfn), PCI_CAP_ID_EXP); + pos = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_EXP); BUG_ON(!pos); cap = pci_conf_read16(pdev->sbdf, pos + PCI_EXP_DEVCAP); if ( cap & PCI_EXP_DEVCAP_PHANTOM ) @@ -565,13 +564,12 @@ struct pci_dev *pci_get_pdev(const struct domain *d, pci_sbdf_t sbdf) static void pci_enable_acs(struct pci_dev *pdev) { int pos; - u16 cap, ctrl, seg = pdev->seg; - u8 bus = pdev->bus; + uint16_t cap, ctrl; if ( !is_iommu_enabled(pdev->domain) ) return; - pos = pci_find_ext_capability(seg, bus, pdev->devfn, PCI_EXT_CAP_ID_ACS); + pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_ACS); if (!pos) return; @@ -704,7 +702,7 @@ int pci_add_device(u16 seg, u8 bus, u8 devfn, if ( !pdev->info.is_virtfn && !pdev->vf_rlen[0] ) { - unsigned int pos = pci_find_ext_capability(seg, bus, devfn, + unsigned int pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_SRIOV); uint16_t ctrl = pci_conf_read16(pdev->sbdf, pos + PCI_SRIOV_CTRL); @@ -916,7 +914,8 @@ enum pdev_type pdev_type(u16 seg, u8 bus, u8 devfn) { u16 class_device, creg; u8 d = PCI_SLOT(devfn), f = PCI_FUNC(devfn); - int pos = pci_find_cap_offset(seg, bus, d, f, PCI_CAP_ID_EXP); + unsigned int pos = pci_find_cap_offset(PCI_SBDF(seg, bus, devfn), + PCI_CAP_ID_EXP); class_device = pci_conf_read16(PCI_SBDF(seg, bus, d, f), PCI_CLASS_DEVICE); switch ( class_device ) @@ -1184,10 +1183,7 @@ static int hest_match_pci(const struct acpi_hest_aer_common *p, static bool hest_match_type(const struct acpi_hest_header *hest_hdr, const struct pci_dev *pdev) { - unsigned int pos = pci_find_cap_offset(pdev->seg, pdev->bus, - PCI_SLOT(pdev->devfn), - PCI_FUNC(pdev->devfn), - PCI_CAP_ID_EXP); + unsigned int pos = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_EXP); u8 pcie = MASK_EXTR(pci_conf_read16(pdev->sbdf, pos + PCI_EXP_FLAGS), PCI_EXP_FLAGS_TYPE); @@ -1258,8 +1254,7 @@ bool pcie_aer_get_firmware_first(const struct pci_dev *pdev) { struct aer_hest_parse_info info = { .pdev = pdev }; - return pci_find_cap_offset(pdev->seg, pdev->bus, PCI_SLOT(pdev->devfn), - PCI_FUNC(pdev->devfn), PCI_CAP_ID_EXP) && + return pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_EXP) && apei_hest_parse(aer_hest_parse, &info) >= 0 && info.firmware_first; } diff --git a/xen/drivers/passthrough/vtd/quirks.c b/xen/drivers/passthrough/vtd/quirks.c index 5d706a539788..5a56565ea883 100644 --- a/xen/drivers/passthrough/vtd/quirks.c +++ b/xen/drivers/passthrough/vtd/quirks.c @@ -495,8 +495,6 @@ int me_wifi_quirk(struct domain *domain, uint8_t bus, uint8_t devfn, void pci_vtd_quirk(const struct pci_dev *pdev) { - int seg = pdev->seg; - int bus = pdev->bus; int pos; bool ff; u32 val, val2; @@ -532,12 +530,10 @@ void pci_vtd_quirk(const struct pci_dev *pdev) /* Sandybridge-EP (Romley) */ case 0x3c00: /* host bridge */ case 0x3c01 ... 0x3c0b: /* root ports */ - pos = pci_find_ext_capability(seg, bus, pdev->devfn, - PCI_EXT_CAP_ID_ERR); + pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_ERR); if ( !pos ) { - pos = pci_find_ext_capability(seg, bus, pdev->devfn, - PCI_EXT_CAP_ID_VNDR); + pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_VNDR); while ( pos ) { val = pci_conf_read32(pdev->sbdf, pos + PCI_VNDR_HEADER); @@ -546,7 +542,7 @@ void pci_vtd_quirk(const struct pci_dev *pdev) pos += PCI_VNDR_HEADER; break; } - pos = pci_find_next_ext_capability(seg, bus, pdev->devfn, pos, + pos = pci_find_next_ext_capability(pdev->sbdf, pos, PCI_EXT_CAP_ID_VNDR); } ff = 0; diff --git a/xen/drivers/passthrough/vtd/x86/ats.c b/xen/drivers/passthrough/vtd/x86/ats.c index 9de419775f90..1f5913bed9d2 100644 --- a/xen/drivers/passthrough/vtd/x86/ats.c +++ b/xen/drivers/passthrough/vtd/x86/ats.c @@ -57,8 +57,7 @@ int ats_device(const struct pci_dev *pdev, const struct acpi_drhd_unit *drhd) return 0; ats_drhd = find_ats_dev_drhd(drhd->iommu); - pos = pci_find_ext_capability(pdev->seg, pdev->bus, pdev->devfn, - PCI_EXT_CAP_ID_ATS); + pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_ATS); if ( pos && (ats_drhd == NULL) ) { diff --git a/xen/drivers/pci/pci.c b/xen/drivers/pci/pci.c index c73a8c4124af..3569ccb24e9e 100644 --- a/xen/drivers/pci/pci.c +++ b/xen/drivers/pci/pci.c @@ -8,25 +8,25 @@ #include #include -int pci_find_cap_offset(u16 seg, u8 bus, u8 dev, u8 func, u8 cap) +unsigned int pci_find_cap_offset(pci_sbdf_t sbdf, unsigned int cap) { u8 id; int max_cap = 48; u8 pos = PCI_CAPABILITY_LIST; u16 status; - status = pci_conf_read16(PCI_SBDF(seg, bus, dev, func), PCI_STATUS); + status = pci_conf_read16(sbdf, PCI_STATUS); if ( (status & PCI_STATUS_CAP_LIST) == 0 ) return 0; while ( max_cap-- ) { - pos = pci_conf_read8(PCI_SBDF(seg, bus, dev, func), pos); + pos = pci_conf_read8(sbdf, pos); if ( pos < 0x40 ) break; pos &= ~3; - id = pci_conf_read8(PCI_SBDF(seg, bus, dev, func), pos + PCI_CAP_LIST_ID); + id = pci_conf_read8(sbdf, pos + PCI_CAP_LIST_ID); if ( id == 0xff ) break; @@ -39,19 +39,20 @@ int pci_find_cap_offset(u16 seg, u8 bus, u8 dev, u8 func, u8 cap) return 0; } -int pci_find_next_cap(u16 seg, u8 bus, unsigned int devfn, u8 pos, int cap) +unsigned int pci_find_next_cap(pci_sbdf_t sbdf, unsigned int pos, + unsigned int cap) { u8 id; int ttl = 48; while ( ttl-- ) { - pos = pci_conf_read8(PCI_SBDF(seg, bus, devfn), pos); + pos = pci_conf_read8(sbdf, pos); if ( pos < 0x40 ) break; pos &= ~3; - id = pci_conf_read8(PCI_SBDF(seg, bus, devfn), pos + PCI_CAP_LIST_ID); + id = pci_conf_read8(sbdf, pos + PCI_CAP_LIST_ID); if ( id == 0xff ) break; @@ -65,21 +66,21 @@ int pci_find_next_cap(u16 seg, u8 bus, unsigned int devfn, u8 pos, int cap) /** * pci_find_ext_capability - Find an extended capability - * @seg/@bus/@devfn: PCI device to query + * @sbdf: PCI device to query * @cap: capability code * * Returns the address of the requested extended capability structure * within the device's PCI configuration space or 0 if the device does * not support it. */ -int pci_find_ext_capability(int seg, int bus, int devfn, int cap) +unsigned int pci_find_ext_capability(pci_sbdf_t sbdf, unsigned int cap) { - return pci_find_next_ext_capability(seg, bus, devfn, 0, cap); + return pci_find_next_ext_capability(sbdf, 0, cap); } /** * pci_find_next_ext_capability - Find another extended capability - * @seg/@bus/@devfn: PCI device to query + * @sbdf: PCI device to query * @start: starting position * @cap: capability code * @@ -87,13 +88,14 @@ int pci_find_ext_capability(int seg, int bus, int devfn, int cap) * within the device's PCI configuration space or 0 if the device does * not support it. */ -int pci_find_next_ext_capability(int seg, int bus, int devfn, int start, int cap) +unsigned int pci_find_next_ext_capability(pci_sbdf_t sbdf, unsigned int start, + unsigned int cap) { u32 header; int ttl = 480; /* 3840 bytes, minimum 8 bytes per capability */ - int pos = max(start, 0x100); + unsigned int pos = max(start, 0x100U); - header = pci_conf_read32(PCI_SBDF(seg, bus, devfn), pos); + header = pci_conf_read32(sbdf, pos); /* * If we have no capabilities, this is indicated by cap ID, @@ -109,7 +111,7 @@ int pci_find_next_ext_capability(int seg, int bus, int devfn, int start, int cap pos = PCI_EXT_CAP_NEXT(header); if ( pos < 0x100 ) break; - header = pci_conf_read32(PCI_SBDF(seg, bus, devfn), pos); + header = pci_conf_read32(sbdf, pos); } return 0; } diff --git a/xen/drivers/vpci/msi.c b/xen/drivers/vpci/msi.c index 2814b63d2be7..a253ccbd7db7 100644 --- a/xen/drivers/vpci/msi.c +++ b/xen/drivers/vpci/msi.c @@ -184,9 +184,7 @@ static void cf_check mask_write( static int cf_check init_msi(struct pci_dev *pdev) { - uint8_t slot = PCI_SLOT(pdev->devfn), func = PCI_FUNC(pdev->devfn); - unsigned int pos = pci_find_cap_offset(pdev->seg, pdev->bus, slot, func, - PCI_CAP_ID_MSI); + unsigned int pos = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_MSI); uint16_t control; int ret; diff --git a/xen/drivers/vpci/msix.c b/xen/drivers/vpci/msix.c index 1be861343dba..d1126a417da9 100644 --- a/xen/drivers/vpci/msix.c +++ b/xen/drivers/vpci/msix.c @@ -659,14 +659,12 @@ int vpci_make_msix_hole(const struct pci_dev *pdev) static int cf_check init_msix(struct pci_dev *pdev) { struct domain *d = pdev->domain; - uint8_t slot = PCI_SLOT(pdev->devfn), func = PCI_FUNC(pdev->devfn); unsigned int msix_offset, i, max_entries; uint16_t control; struct vpci_msix *msix; int rc; - msix_offset = pci_find_cap_offset(pdev->seg, pdev->bus, slot, func, - PCI_CAP_ID_MSIX); + msix_offset = pci_find_cap_offset(pdev->sbdf, PCI_CAP_ID_MSIX); if ( !msix_offset ) return 0; diff --git a/xen/include/xen/pci.h b/xen/include/xen/pci.h index 7d8a7cd21301..ea6a4c9abf38 100644 --- a/xen/include/xen/pci.h +++ b/xen/include/xen/pci.h @@ -193,11 +193,12 @@ int pci_mmcfg_read(unsigned int seg, unsigned int bus, unsigned int devfn, int reg, int len, u32 *value); int pci_mmcfg_write(unsigned int seg, unsigned int bus, unsigned int devfn, int reg, int len, u32 value); -int pci_find_cap_offset(u16 seg, u8 bus, u8 dev, u8 func, u8 cap); -int pci_find_next_cap(u16 seg, u8 bus, unsigned int devfn, u8 pos, int cap); -int pci_find_ext_capability(int seg, int bus, int devfn, int cap); -int pci_find_next_ext_capability(int seg, int bus, int devfn, int start, - int cap); +unsigned int pci_find_cap_offset(pci_sbdf_t sbdf, unsigned int cap); +unsigned int pci_find_next_cap(pci_sbdf_t sbdf, unsigned int pos, + unsigned int cap); +unsigned int pci_find_ext_capability(pci_sbdf_t sbdf, unsigned int cap); +unsigned int pci_find_next_ext_capability(pci_sbdf_t sbdf, unsigned int start, + unsigned int cap); const char *parse_pci(const char *, unsigned int *seg, unsigned int *bus, unsigned int *dev, unsigned int *func); const char *parse_pci_seg(const char *, unsigned int *seg, unsigned int *bus, From patchwork Mon Aug 28 17:56:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stewart Hildebrand X-Patchwork-Id: 13368183 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4196AC83F11 for ; Mon, 28 Aug 2023 18:02:02 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.591747.924230 (Exim 4.92) (envelope-from ) id 1qagYi-0001v6-B9; Mon, 28 Aug 2023 18:01:52 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 591747.924230; Mon, 28 Aug 2023 18:01:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qagYi-0001uz-8V; Mon, 28 Aug 2023 18:01:52 +0000 Received: by outflank-mailman (input) for mailman id 591747; Mon, 28 Aug 2023 18:01:51 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qagYg-0001uT-Ve for xen-devel@lists.xenproject.org; Mon, 28 Aug 2023 18:01:50 +0000 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on20617.outbound.protection.outlook.com [2a01:111:f400:7e88::617]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id f5729655-45cc-11ee-8783-cb3800f73035; Mon, 28 Aug 2023 20:01:50 +0200 (CEST) Received: from SJ0PR03CA0335.namprd03.prod.outlook.com (2603:10b6:a03:39c::10) by DM6PR12MB4155.namprd12.prod.outlook.com (2603:10b6:5:221::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.34; Mon, 28 Aug 2023 18:01:46 +0000 Received: from MWH0EPF000971E9.namprd02.prod.outlook.com (2603:10b6:a03:39c:cafe::6a) by SJ0PR03CA0335.outlook.office365.com (2603:10b6:a03:39c::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.35 via Frontend Transport; Mon, 28 Aug 2023 18:01:46 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by MWH0EPF000971E9.mail.protection.outlook.com (10.167.243.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6745.17 via Frontend Transport; Mon, 28 Aug 2023 18:01:44 +0000 Received: from SATLEXMB07.amd.com (10.181.41.45) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 28 Aug 2023 13:01:34 -0500 Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB07.amd.com (10.181.41.45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 28 Aug 2023 11:01:06 -0700 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.27 via Frontend Transport; Mon, 28 Aug 2023 13:01:05 -0500 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: f5729655-45cc-11ee-8783-cb3800f73035 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cswSmCj94ODoAymZNCjeIu82UvSsOCUYdseO+IEQWsOVKlwnWT1aAQ9mCCzoPUCyWQdVwbHPswqHZUc1r0eHt6ANAsU5JMwA7+RJKdjQoSkaMoGxd9LeoG5DGK422DIzVbcZx4nlC0nr2q+42LBqpoa12JeiSj24fWmX1ukddhZNzl3zLieHsLH/ZWkoiuAYUtYAH+HeNnSnXmbqNLnAvQ2Kh6rNu7pI3A0mwQu7r69Gy6KzfNa/dMyJ7jr4gA89K+tCbO9nchig9qGy9XxewQ5q5FL8Sihgc2kAERPiCD056sDoOKCZDVvvus+zLvC8g762LCtLq1CoLx38WXc/2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=mS9rwZFaRU6LsAH3hSbs0rvFafQqmACIWYiLR7cPWEs=; b=fGB7XwSulEdwpU9PD0EXcag2Wyh7kDPlmb8wGZU3yg2lLVNJhx8HbrH8QzMJrg3az1LmlwcvRcSmEdz5BocKuQdb6TFEa6gDOavI1GPLA9sEQN1bce/e/2N/9SgL2L2KixTXplE53SmnTc9gQhwYIeQVWeTtvK0ePL6IpkqbEntDNWu93tq0MZpih6ZjvIdQYu9g00Ngq0J4318ThWe74hn9Y4akGzueSXmSiyNloMjnNvv0JLBh3fDrwb37l5w4GaWBFD7SZKT8S+LOwPYsaL9PQixWliEHHGYFAMjdpnuaUQLRW/cPwzCwANsoR6MRKnLmgztirvMfgxMX8VkCrQ== 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 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=mS9rwZFaRU6LsAH3hSbs0rvFafQqmACIWYiLR7cPWEs=; b=SR0yJoPsVpQ2D1djm7+QaADbSgGxMQQQaSIFLKCbheTsxPXiYp3fhOjwv09cWAWbrHLQD8yUt3Ju6ohcCYwItN0P4KqqLsVnimzx/OjrVhx67NINtBx6lNl9G9Nhi57g0x/K3yCuKQPL194kiWEb9JpF57yLFV7Elqvuv/wHEoI= 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 (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , Jan Beulich , Andrew Cooper , =?utf-8?q?Roger_Pau_Monn=C3=A9?= , Wei Liu Subject: [PATCH v4 3/6] x86/msi: rearrange read_pci_mem_bar slightly Date: Mon, 28 Aug 2023 13:56:51 -0400 Message-ID: <20230828175858.30780-4-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230828175858.30780-1-stewart.hildebrand@amd.com> References: <20230828175858.30780-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000971E9:EE_|DM6PR12MB4155:EE_ X-MS-Office365-Filtering-Correlation-Id: 63a8ffa4-c099-48f2-7415-08dba7f0d76a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UXr7OgOp1pWq7aK9O7b4pmHuiGTftoINwb1NCkCFZv2alVpCcpQFTqsy0iLOimKGCQz6IDouEYB2KVeNo4YtIlgocurVo/E75Jujemy0g6GMKNmEyz+WdYdS4Nsa3WXbE733fv4qP6NGEzxkTGse4CSSHnIhUKr2J3Dum+g7B7Ru23/REzFBKoRJ/LS3Bx197MWgeRM5YhrSBmiVpV4ha463tOD+s+v6jWS5Qxo9KZhHf2hyMiuY60TFgN71V7YvbGyBqCMoLH1ap7FMRmiv9aVEFpu5/93aWPpcFVSdj31L8dlSQPJibg8cYs7Z2WEBbDmqVurpeTR87keFZNVV42+b8cUrJtBGy9iTMFLMxMqLhVENNZ67UtDUg7+QzmF8oHCn3dT4KJMdpnrW0MophsEP/eSgt8wB7Gqz5AipkdVxMi8SiiUoH4fcKSRhpqJUmY7e8F6Z0XaTjI8CYUb3NcejUrPwtz6xlAHn+rGadJO6uck4TtEjyEnbrwsibFjucKiSQF6WaKGyik3woOw7YMaDK4WtZWH/m2pYieehZYzpE26S33ol1pgaZf5SYObKyIeSwFD2kOnu/BOae7Jx8eDeJ5LyYabYELo86FVqDlheD9Y0BVVao4zykvhPu3yVfBSHopzIWIhspCQ3K9Ic5SHdc6c9k3cXCeQewWWnZUCOnal1AEQI5JNuM5EbcV+acPDqxQ2DRAv3qmW7Isb6pFNxfBZrlYo+1TjV1EWVS318akRK2ljOQaD20+ueGM5FSZxhvEWqlRtcNDTD9nOp4w== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(136003)(376002)(346002)(39860400002)(396003)(451199024)(1800799009)(186009)(82310400011)(36840700001)(40470700004)(46966006)(82740400003)(6666004)(40460700003)(36756003)(86362001)(356005)(81166007)(40480700001)(36860700001)(47076005)(2616005)(1076003)(2906002)(426003)(336012)(26005)(83380400001)(966005)(478600001)(41300700001)(70586007)(70206006)(4326008)(8676002)(8936002)(5660300002)(44832011)(54906003)(6916009)(316002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2023 18:01:44.9562 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 63a8ffa4-c099-48f2-7415-08dba7f0d76a X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000971E9.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4155 Use pdev->sbdf instead of the PCI_SBDF macro in calls to pci_* functions where appropriate. Move NULL check earlier. Suggested-by: Jan Beulich Signed-off-by: Stewart Hildebrand Reviewed-by: Jan Beulich --- v3->v4: * new patch Suggested-by tag added based on conversation at [1] [1] https://lists.xenproject.org/archives/html/xen-devel/2023-08/msg01886.html --- xen/arch/x86/msi.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/xen/arch/x86/msi.c b/xen/arch/x86/msi.c index 8d4fd43b10a6..a78367d7cf5d 100644 --- a/xen/arch/x86/msi.c +++ b/xen/arch/x86/msi.c @@ -674,19 +674,19 @@ static u64 read_pci_mem_bar(u16 seg, u8 bus, u8 slot, u8 func, u8 bir, int vf) { struct pci_dev *pdev = pci_get_pdev(NULL, PCI_SBDF(seg, bus, slot, func)); - unsigned int pos = pci_find_ext_capability(PCI_SBDF(seg, bus, slot, - func), - PCI_EXT_CAP_ID_SRIOV); - uint16_t ctrl = pci_conf_read16(PCI_SBDF(seg, bus, slot, func), - pos + PCI_SRIOV_CTRL); - uint16_t num_vf = pci_conf_read16(PCI_SBDF(seg, bus, slot, func), - pos + PCI_SRIOV_NUM_VF); - uint16_t offset = pci_conf_read16(PCI_SBDF(seg, bus, slot, func), - pos + PCI_SRIOV_VF_OFFSET); - uint16_t stride = pci_conf_read16(PCI_SBDF(seg, bus, slot, func), - pos + PCI_SRIOV_VF_STRIDE); - - if ( !pdev || !pos || + unsigned int pos; + uint16_t ctrl, num_vf, offset, stride; + + if ( !pdev ) + return 0; + + pos = pci_find_ext_capability(pdev->sbdf, PCI_EXT_CAP_ID_SRIOV); + ctrl = pci_conf_read16(pdev->sbdf, pos + PCI_SRIOV_CTRL); + num_vf = pci_conf_read16(pdev->sbdf, pos + PCI_SRIOV_NUM_VF); + offset = pci_conf_read16(pdev->sbdf, pos + PCI_SRIOV_VF_OFFSET); + stride = pci_conf_read16(pdev->sbdf, pos + PCI_SRIOV_VF_STRIDE); + + if ( !pos || !(ctrl & PCI_SRIOV_CTRL_VFE) || !(ctrl & PCI_SRIOV_CTRL_MSE) || !num_vf || !offset || (num_vf > 1 && !stride) || From patchwork Mon Aug 28 17:56:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stewart Hildebrand X-Patchwork-Id: 13368184 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C08DFC71153 for ; Mon, 28 Aug 2023 18:02:21 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.591748.924241 (Exim 4.92) (envelope-from ) id 1qagZ1-0002Jp-PE; Mon, 28 Aug 2023 18:02:11 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 591748.924241; Mon, 28 Aug 2023 18:02:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qagZ1-0002Ji-LF; Mon, 28 Aug 2023 18:02:11 +0000 Received: by outflank-mailman (input) for mailman id 591748; Mon, 28 Aug 2023 18:02:10 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qagZ0-0002JG-Et for xen-devel@lists.xenproject.org; Mon, 28 Aug 2023 18:02:10 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on20613.outbound.protection.outlook.com [2a01:111:f400:7e89::613]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 0016af90-45cd-11ee-9b0c-b553b5be7939; Mon, 28 Aug 2023 20:02:08 +0200 (CEST) Received: from CY5PR19CA0004.namprd19.prod.outlook.com (2603:10b6:930:15::22) by SJ2PR12MB8035.namprd12.prod.outlook.com (2603:10b6:a03:4d3::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.34; Mon, 28 Aug 2023 18:02:03 +0000 Received: from CY4PEPF0000EE3B.namprd03.prod.outlook.com (2603:10b6:930:15:cafe::c0) by CY5PR19CA0004.outlook.office365.com (2603:10b6:930:15::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.34 via Frontend Transport; Mon, 28 Aug 2023 18:02:02 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by CY4PEPF0000EE3B.mail.protection.outlook.com (10.167.242.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6745.17 via Frontend Transport; Mon, 28 Aug 2023 18:02:02 +0000 Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 28 Aug 2023 13:02:01 -0500 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.27 via Frontend Transport; Mon, 28 Aug 2023 13:02:01 -0500 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 0016af90-45cd-11ee-9b0c-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h+oeHL8tmBcBPqE9HHzzRnVQCuTyOQv5/UOKzh4jwLrMAny6N++ge+0BTx5wp2EmuI4ptuyYFoj9g4UORm64aXri7/H26BA06wQN4+fOPwqLhKYyZIfuZ/WhsEtiHlJmlQsHV8vvJGD+vLnR+3I0O4odXIohFpwcZkW8jxDlUuO6R4R7SiKKtQ6tgEWt1zG8sACQdSrT2mKG+CzlEBeaI77gKtOnJw2e+iMrthk+qE7z1S4ccpPC1Ye08ZW+3l+FCnomZzjsR4Kh+Ul2V2rsRavwRowrJX8t6FaCDcNFgsCl1B1Me3gDCd1AjlMHVsK/+90JcHJxueFyzfseNqPMnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=MJvej4o/mElq6FjgO0ZWLPfwnQd61fY6nEWCZloj5OE=; b=hRDjo4vS7WZEvF5yj65zrXG3sH1VzPdDjAyyefoYIvbbK8Npl/BZA9KbxUW4BmjbQLDjnL2LwwUwPn/sZ0bVaVH3PAxInwbZwU+8KkxkcVRF3jANbN7jqZZrAunE7pjADXDtGjmDC7LAMirap/5jJIvEKO+KWHeaLM8rA/nYlGtMUC5vUgVILtccFm/Hr/vp2p+yeTZ2MCAlzaLlRO4jTkPgogsbnkdbk3h9GFIVaQPuvA4hp85ywhqHcvFIgcJ/swNj3gJN4CdfYb6toZ3GtV6J2XaOrF9AQMg2Iq9ZwtFR0gdb+yPAaFrp3kNKDasJQtvekEJhnOxlNuypmvGvow== 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 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=MJvej4o/mElq6FjgO0ZWLPfwnQd61fY6nEWCZloj5OE=; b=L0yNnOG6af+pbAIvZOfi9IcD7v6TBMDWETAzoT+LL0Ra2n+kdEnC9ED3AjeVwM7Ax0HgQpymYK4Td/DOnGz87yAMsD5zwsitCuJKwDQBFC7XkRXpOigaQ4eQ8AAcA5umcGBqj+2K7ejcvPXrCLYDusZoSMiLtxOt2k9OsMavzz0= 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 (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , =?utf-8?q?Roger_Pau_Mon?= =?utf-8?q?n=C3=A9?= Subject: [PATCH v4 4/6] xen/vpci: header: status register handler Date: Mon, 28 Aug 2023 13:56:52 -0400 Message-ID: <20230828175858.30780-5-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230828175858.30780-1-stewart.hildebrand@amd.com> References: <20230828175858.30780-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE3B:EE_|SJ2PR12MB8035:EE_ X-MS-Office365-Filtering-Correlation-Id: 98d8a99c-88b4-4537-af11-08dba7f0e1f6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /NrZaw/dF2KnJ1SojurgEW8oPSC3Jv/yQT107KcDCJpGRL4w5kFzNhIHpuVM/JOWNivAbhvUFHGslHVLXnmQ7ubJ7y048ywaSZQSYB0mOhPrMqm54c8JgrkZJOTwXeI/LEDywmtyXhs5ZJ1NO+MYAFqXoBLcb8pViuDtvmwmtULddavbz5pX3G5LiWkZH1UMDh1aeGnK0vBfX/qIINXqBfUuTnQWbi6nkDbXNkqgszmptAEX/l4WRf6GChFhcls9UyzgTYUHnzWy3uVz7Q613zNbTdmnQxP6AhymuleivcAiZo5pjCH7ULrmtDCfTEzU01+HP4cEofjPPXnOMYcxgp5wt2vUxK81OJ/3/r8MDJr8WwrzMzoVmhKJfnbABj/fHYsr+iWdh+V8L6oomJvIZujbub4GDt52k/gw9KRItlP+0aKRTCTQ8I2ZWjVcQuWmGgCg9C5Grw0l1hGmx6PRPt4jEbdcXEZCrW2PkrEdy8HhNbH7kVhFQ0y5434B5iTV0FU4/K3a9EujwGm9gRHrxlWve86x0C+wKwP7MZ5FKfCL+ga1JN5UwMDv4Kzl0JMWbWfX/5m2PyTxchvdV4rBRCAAh+zcElF/2QtEH4m+vUrKOB1Bo7Zrva5Ufi3hDugu/hXgBPeCTiMnzqjM17Os00PEiceHZ+cTxGtViqB8CYugXh2HtJEpqDEDyRCAjBMwqb+HGF2Yh2/wgMFpl5RpbtU2R/v47c3kgzGk0W9pqoJ6eRwBa46vrEo8CzBVgH4wOyye3UeZgWq5PjMaJ8vilNjHMjHoQTnOApWn1LmtsaA= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(396003)(376002)(39860400002)(136003)(346002)(1800799009)(82310400011)(451199024)(186009)(46966006)(40470700004)(36840700001)(478600001)(83380400001)(81166007)(356005)(82740400003)(26005)(336012)(426003)(47076005)(36860700001)(1076003)(2616005)(40480700001)(66899024)(6666004)(86362001)(2906002)(44832011)(316002)(4326008)(6916009)(70206006)(5660300002)(8676002)(70586007)(41300700001)(8936002)(54906003)(36756003)(40460700003)(36900700001)(357404004);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2023 18:02:02.6993 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 98d8a99c-88b4-4537-af11-08dba7f0e1f6 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EE3B.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8035 Introduce a handler for the PCI status register, with ability to mask the capabilities bit. The status register is write-1-to-clear, so introduce handling for this type of register in vPCI. The mask_cap_list flag will be set in a follow-on patch. Signed-off-by: Stewart Hildebrand --- v3->v4: * move mask_cap_list setting to the capabilities patch * single pci_conf_read16 in status_read * align mask_cap_list bitfield in struct vpci_header * change to rw1c bit mask instead of treating whole register as rw1c * drop subsystem prefix on renamed add_register function v2->v3: * new patch --- xen/drivers/vpci/header.c | 17 +++++++++++++++++ xen/drivers/vpci/vpci.c | 36 ++++++++++++++++++++++++++++-------- xen/include/xen/vpci.h | 9 +++++++++ 3 files changed, 54 insertions(+), 8 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 767c1ba718d7..dc8c6a66770b 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -413,6 +413,18 @@ static void cf_check cmd_write( pci_conf_write16(pdev->sbdf, reg, cmd); } +static uint32_t cf_check status_read(const struct pci_dev *pdev, + unsigned int reg, void *data) +{ + struct vpci_header *header = data; + uint32_t status = pci_conf_read16(pdev->sbdf, reg); + + if ( header->mask_cap_list ) + status &= ~PCI_STATUS_CAP_LIST; + + return status; +} + static void cf_check bar_write( const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data) { @@ -544,6 +556,11 @@ static int cf_check init_bars(struct pci_dev *pdev) if ( rc ) return rc; + rc = vpci_add_rw1c_register(pdev->vpci, status_read, vpci_hw_write16, + PCI_STATUS, 2, header, 0xF900); + if ( rc ) + return rc; + if ( pdev->ignore_bars ) return 0; diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 3bec9a4153da..8b26870a8a2b 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -29,6 +29,7 @@ struct vpci_register { unsigned int offset; void *private; struct list_head node; + uint32_t rw1c_mask; }; #ifdef __XEN__ @@ -145,9 +146,15 @@ uint32_t cf_check vpci_hw_read32( return pci_conf_read32(pdev->sbdf, reg); } -int vpci_add_register(struct vpci *vpci, vpci_read_t *read_handler, - vpci_write_t *write_handler, unsigned int offset, - unsigned int size, void *data) +void cf_check vpci_hw_write16( + const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data) +{ + pci_conf_write16(pdev->sbdf, reg, val); +} + +static int add_register(struct vpci *vpci, vpci_read_t *read_handler, + vpci_write_t *write_handler, unsigned int offset, + unsigned int size, void *data, uint32_t rw1c_mask) { struct list_head *prev; struct vpci_register *r; @@ -167,6 +174,7 @@ int vpci_add_register(struct vpci *vpci, vpci_read_t *read_handler, r->size = size; r->offset = offset; r->private = data; + r->rw1c_mask = rw1c_mask; spin_lock(&vpci->lock); @@ -193,6 +201,22 @@ int vpci_add_register(struct vpci *vpci, vpci_read_t *read_handler, return 0; } +int vpci_add_register(struct vpci *vpci, vpci_read_t *read_handler, + vpci_write_t *write_handler, unsigned int offset, + unsigned int size, void *data) +{ + return add_register(vpci, read_handler, write_handler, offset, size, data, + 0); +} + +int vpci_add_rw1c_register(struct vpci *vpci, vpci_read_t *read_handler, + vpci_write_t *write_handler, unsigned int offset, + unsigned int size, void *data, uint32_t rw1c_mask) +{ + return add_register(vpci, read_handler, write_handler, offset, size, data, + rw1c_mask); +} + int vpci_remove_register(struct vpci *vpci, unsigned int offset, unsigned int size) { @@ -407,11 +431,6 @@ uint32_t vpci_read(pci_sbdf_t sbdf, unsigned int reg, unsigned int size) /* * Perform a maybe partial write to a register. - * - * Note that this will only work for simple registers, if Xen needs to - * trap accesses to rw1c registers (like the status PCI header register) - * the logic in vpci_write will have to be expanded in order to correctly - * deal with them. */ static void vpci_write_helper(const struct pci_dev *pdev, const struct vpci_register *r, unsigned int size, @@ -424,6 +443,7 @@ static void vpci_write_helper(const struct pci_dev *pdev, uint32_t val; val = r->read(pdev, r->offset, r->private); + val &= ~r->rw1c_mask; data = merge_result(val, data, size, offset); } diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index 0b8a2a3c745b..51b1b06c2c71 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -37,6 +37,11 @@ int __must_check vpci_add_register(struct vpci *vpci, vpci_write_t *write_handler, unsigned int offset, unsigned int size, void *data); +int __must_check vpci_add_rw1c_register(struct vpci *vpci, + vpci_read_t *read_handler, + vpci_write_t *write_handler, + unsigned int offset, unsigned int size, + void *data, uint32_t rw1c_mask); int __must_check vpci_remove_register(struct vpci *vpci, unsigned int offset, unsigned int size); @@ -50,6 +55,8 @@ uint32_t cf_check vpci_hw_read16( const struct pci_dev *pdev, unsigned int reg, void *data); uint32_t cf_check vpci_hw_read32( const struct pci_dev *pdev, unsigned int reg, void *data); +void cf_check vpci_hw_write16( + const struct pci_dev *pdev, unsigned int reg, uint32_t val, void *data); /* * Check for pending vPCI operations on this vcpu. Returns true if the vcpu @@ -94,6 +101,8 @@ struct vpci { * upon to know whether BARs are mapped into the guest p2m. */ bool bars_mapped : 1; + /* Store whether to hide all capabilities from the guest. */ + bool mask_cap_list : 1; /* FIXME: currently there's no support for SR-IOV. */ } header; From patchwork Mon Aug 28 17:56:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stewart Hildebrand X-Patchwork-Id: 13368186 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id F15E7C71153 for ; Mon, 28 Aug 2023 18:03:04 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.591756.924250 (Exim 4.92) (envelope-from ) id 1qagZi-00032b-1r; Mon, 28 Aug 2023 18:02:54 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 591756.924250; Mon, 28 Aug 2023 18:02:54 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qagZh-00032T-Vb; Mon, 28 Aug 2023 18:02:53 +0000 Received: by outflank-mailman (input) for mailman id 591756; Mon, 28 Aug 2023 18:02:51 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qagZf-00030x-TC for xen-devel@lists.xenproject.org; Mon, 28 Aug 2023 18:02:51 +0000 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on20625.outbound.protection.outlook.com [2a01:111:f400:7e88::625]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 18f359bc-45cd-11ee-9b0c-b553b5be7939; Mon, 28 Aug 2023 20:02:49 +0200 (CEST) Received: from DM6PR13CA0031.namprd13.prod.outlook.com (2603:10b6:5:bc::44) by SJ0PR12MB6927.namprd12.prod.outlook.com (2603:10b6:a03:483::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.34; Mon, 28 Aug 2023 18:02:46 +0000 Received: from CY4PEPF0000EE3D.namprd03.prod.outlook.com (2603:10b6:5:bc:cafe::a4) by DM6PR13CA0031.outlook.office365.com (2603:10b6:5:bc::44) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.17 via Frontend Transport; Mon, 28 Aug 2023 18:02:45 +0000 Received: from SATLEXMB04.amd.com (165.204.84.17) by CY4PEPF0000EE3D.mail.protection.outlook.com (10.167.242.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6745.17 via Frontend Transport; Mon, 28 Aug 2023 18:02:45 +0000 Received: from SATLEXMB07.amd.com (10.181.41.45) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 28 Aug 2023 13:02:42 -0500 Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB07.amd.com (10.181.41.45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 28 Aug 2023 11:02:24 -0700 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.27 via Frontend Transport; Mon, 28 Aug 2023 13:02:24 -0500 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 18f359bc-45cd-11ee-9b0c-b553b5be7939 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DPHH0+u5014acUuC1706UsAUtoAetJ4rPxNach1h23NS91Dq7/TMuEc0VXdgshXD7hhHRsxIX/0Ut4Rap8s5WVWGa1WvHirn4M4lLQLwTFmfWH9WBBLD8JEXXey5XgYK4/FMZLBmqwIeFDvZRsuUH5lmgDMivKiBdAaiwLlHB0YA/hCKrN+mweaVIcaL3Es/TFw8nahWAwK+h8dsGZ67+8pxEurws4yc3ZlnTqXTaklM5fZbmZOZwOSSl0RotQFHHxQ6LQgWLTZnKZJ3hSXDkedTbr/s0UshQ5I9+TwPaNaUBEFmfTnBGMWQn2pd2KT7iDX4eAohSMU9P3r0dvvn4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=dU/f6BYM+t+yAh1uQ1Cq9rU23TlKf83Tj/wjom6+IVU=; b=jaoompQuoo7wzvnNfndd0zsZJZu7DkQk/iSOc3CNauejuUQC4Eh3TCBl81X2c6U1dOy1CSWiBV5nk2dN+gbW/qvlMrPdRm1PbgAFJL8lLrvZyEp5KH6Nh2FHgNPLSwR6jQ0R4BUN8tyip4sNhYxFu53fddv4+LGSvaEnd6jwgIRIxNEAlXTiRnBtHhqrF9UxRm59uL9HQPvVL4rUiOlry0dRasf+TmzOVNarE2HnFBLc/0SwRrTK66meq0d0jrhbt9vVPWNQ7weF9YBSjYFcN1LSpYXf2wXGoS1XPXTQWfQZx7dzC9UoozMOR8QwfdQDWSin6PGa04hFSrdq3N2JKQ== 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 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=dU/f6BYM+t+yAh1uQ1Cq9rU23TlKf83Tj/wjom6+IVU=; b=zCaLUy0h85pU+40YoySWVLeXUBQfRmqoN09nGL7KBFTFTwdE6UY/vWBiE5Tlwysjm1D1FTHK5gS2TJyUzzQy9xcJBnqjHOqbBTXgJDN8rjF1xeP8a6QmQ4cQTNPTvMoA3+OPBkfi7U+ZtzdrTR3d3jkRtTYJl4HLJ0g9Cqy47cg= 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 (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , =?utf-8?q?Roger_Pau_Mon?= =?utf-8?q?n=C3=A9?= Subject: [RFC PATCH v4 5/6] xen/vpci: support ro mask Date: Mon, 28 Aug 2023 13:56:53 -0400 Message-ID: <20230828175858.30780-6-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230828175858.30780-1-stewart.hildebrand@amd.com> References: <20230828175858.30780-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE3D:EE_|SJ0PR12MB6927:EE_ X-MS-Office365-Filtering-Correlation-Id: 96754622-b765-4e00-c8a8-08dba7f0fb8b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 248eUgPEvL4aBCElLvvHqtJAPCn1seaBQW9NHZ3Lx+lGONPEybiOjJnYy7ODcurbhFzg52n4MD2CB4yvRm0DkJSGfxsebFfpBYUHX0VPSGeF0WlMhtWzg2+yoMq4W7i2Se1zYaNKS+t/yIq5E6oqOLsU1tRp62Igg0v9I/AJMAH+Blv4+43YgIyfJ1L4/57shiQPdZMdYnNj/7L8Ba0DKP/suj9Yhi7y6meKP3cVRixWUK6gUpzFQ5NtnJeHhAvZ9/BKhx0QqficcgZfEzm0psSKn24HQJg380+nzhSOa31gJNkpW5a9UrJ5SxvDRKRLlsCdcvdwGx+FqnrmcpzGLZQfveIMf1ih4hH0H8ZrNtXxb/X6JZXprw5owegPv+Be+qQw/efB+axetv3W3JSJC7RkDJ9CD1b9GeHhWbZv0m2lPmdg1TX6gnzqJBOmSRSynPXNdkRDPlUzwofn40KcAPjB4LrGg3bBHzFQ+7pYbA76pYN/cJqpeXe4lh4DZnflfkKCxgK+NJAoxCLlRC165fAamU8MoqaX9xaK6u4+qIpFoSMM4+GWNChxj7pKTAvYrgj8+uVY+L0ycxo7JtjRPQ098u7LKeZ/h98Bh9nAVbFX76XMD7et0LfpqnbOMimp0Dc+dSB5vB3KwH5u+GHuEt0SeeUuUva2uAWGS1VoxLHoo8GIjaSvnmHflc3utwEdUunYJCb1fmP3qCnZqNFqJib5vAEi1bifmR8vo4A/hCgcDD5iQ9xNw0jWNzWTZSc/l4E+Y08z5WvGgozooaSlFQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(136003)(39860400002)(346002)(376002)(396003)(186009)(1800799009)(451199024)(82310400011)(36840700001)(46966006)(40470700004)(6666004)(1076003)(2616005)(40480700001)(40460700003)(86362001)(5660300002)(2906002)(44832011)(41300700001)(8936002)(70206006)(36756003)(8676002)(4326008)(316002)(6916009)(54906003)(70586007)(82740400003)(478600001)(356005)(83380400001)(36860700001)(47076005)(81166007)(26005)(426003)(336012)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2023 18:02:45.6038 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 96754622-b765-4e00-c8a8-08dba7f0fb8b X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000EE3D.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB6927 Add support for a read-only bit mask for vPCI register handlers. Signed-off-by: Stewart Hildebrand --- v3->v4: * new patch RFC: It seemed like a low-hanging fruit to add support for ro mask. Let me know what you think, and I could squash it into the status handler patch for the next version of the series. --- xen/drivers/vpci/header.c | 4 ++-- xen/drivers/vpci/vpci.c | 15 ++++++++++----- xen/include/xen/vpci.h | 5 +++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index dc8c6a66770b..4a4dbb69ab1c 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -556,8 +556,8 @@ static int cf_check init_bars(struct pci_dev *pdev) if ( rc ) return rc; - rc = vpci_add_rw1c_register(pdev->vpci, status_read, vpci_hw_write16, - PCI_STATUS, 2, header, 0xF900); + rc = vpci_add_register_mask(pdev->vpci, status_read, vpci_hw_write16, + PCI_STATUS, 2, header, 0x06F8, 0xF900); if ( rc ) return rc; diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 8b26870a8a2b..2a67cc516626 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -29,6 +29,7 @@ struct vpci_register { unsigned int offset; void *private; struct list_head node; + uint32_t ro_mask; uint32_t rw1c_mask; }; @@ -154,7 +155,8 @@ void cf_check vpci_hw_write16( static int add_register(struct vpci *vpci, vpci_read_t *read_handler, vpci_write_t *write_handler, unsigned int offset, - unsigned int size, void *data, uint32_t rw1c_mask) + unsigned int size, void *data, uint32_t ro_mask, + uint32_t rw1c_mask) { struct list_head *prev; struct vpci_register *r; @@ -174,6 +176,7 @@ static int add_register(struct vpci *vpci, vpci_read_t *read_handler, r->size = size; r->offset = offset; r->private = data; + r->ro_mask = ro_mask; r->rw1c_mask = rw1c_mask; spin_lock(&vpci->lock); @@ -206,15 +209,16 @@ int vpci_add_register(struct vpci *vpci, vpci_read_t *read_handler, unsigned int size, void *data) { return add_register(vpci, read_handler, write_handler, offset, size, data, - 0); + 0, 0); } -int vpci_add_rw1c_register(struct vpci *vpci, vpci_read_t *read_handler, +int vpci_add_register_mask(struct vpci *vpci, vpci_read_t *read_handler, vpci_write_t *write_handler, unsigned int offset, - unsigned int size, void *data, uint32_t rw1c_mask) + unsigned int size, void *data, uint32_t ro_mask, + uint32_t rw1c_mask) { return add_register(vpci, read_handler, write_handler, offset, size, data, - rw1c_mask); + ro_mask, rw1c_mask); } int vpci_remove_register(struct vpci *vpci, unsigned int offset, @@ -447,6 +451,7 @@ static void vpci_write_helper(const struct pci_dev *pdev, data = merge_result(val, data, size, offset); } + data &= ~r->ro_mask; r->write(pdev, r->offset, data & (0xffffffffU >> (32 - 8 * r->size)), r->private); } diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index 51b1b06c2c71..b0636182d91e 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -37,11 +37,12 @@ int __must_check vpci_add_register(struct vpci *vpci, vpci_write_t *write_handler, unsigned int offset, unsigned int size, void *data); -int __must_check vpci_add_rw1c_register(struct vpci *vpci, +int __must_check vpci_add_register_mask(struct vpci *vpci, vpci_read_t *read_handler, vpci_write_t *write_handler, unsigned int offset, unsigned int size, - void *data, uint32_t rw1c_mask); + void *data, uint32_t ro_mask, + uint32_t rw1c_mask); int __must_check vpci_remove_register(struct vpci *vpci, unsigned int offset, unsigned int size); From patchwork Mon Aug 28 17:56:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stewart Hildebrand X-Patchwork-Id: 13368187 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CC470C71153 for ; Mon, 28 Aug 2023 18:03:20 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.591759.924261 (Exim 4.92) (envelope-from ) id 1qaga1-0003Xg-BE; Mon, 28 Aug 2023 18:03:13 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 591759.924261; Mon, 28 Aug 2023 18:03:13 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qaga1-0003XZ-8W; Mon, 28 Aug 2023 18:03:13 +0000 Received: by outflank-mailman (input) for mailman id 591759; Mon, 28 Aug 2023 18:03:12 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1qaga0-0001uT-78 for xen-devel@lists.xenproject.org; Mon, 28 Aug 2023 18:03:12 +0000 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on20626.outbound.protection.outlook.com [2a01:111:f400:7e89::626]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 25a821a8-45cd-11ee-8783-cb3800f73035; Mon, 28 Aug 2023 20:03:11 +0200 (CEST) Received: from DS7PR07CA0009.namprd07.prod.outlook.com (2603:10b6:5:3af::9) by CH2PR12MB4150.namprd12.prod.outlook.com (2603:10b6:610:a6::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.34; Mon, 28 Aug 2023 18:03:07 +0000 Received: from CY4PEPF0000E9DC.namprd05.prod.outlook.com (2603:10b6:5:3af:cafe::6e) by DS7PR07CA0009.outlook.office365.com (2603:10b6:5:3af::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.34 via Frontend Transport; Mon, 28 Aug 2023 18:03:07 +0000 Received: from SATLEXMB03.amd.com (165.204.84.17) by CY4PEPF0000E9DC.mail.protection.outlook.com (10.167.241.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6745.16 via Frontend Transport; Mon, 28 Aug 2023 18:03:06 +0000 Received: from SATLEXMB03.amd.com (10.181.40.144) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 28 Aug 2023 13:03:06 -0500 Received: from ubuntu.mshome.net (10.180.168.240) by SATLEXMB03.amd.com (10.181.40.144) with Microsoft SMTP Server id 15.1.2507.27 via Frontend Transport; Mon, 28 Aug 2023 13:03:04 -0500 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 25a821a8-45cd-11ee-8783-cb3800f73035 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F3j3mDpZ+44P5WurDfQPTSg/9v2DhCjRDzrWZXqgBavo5CoT5rDjJDw/dIpEax+2K7npOaIdxZH9XLHE7gcGP/SACWlYwadxl9qu+ji9Qon+1sST9xDtSaevbEGT0+p61X6AOKsYOV200up/102Z1AExlh3e6YPQ+CeU5wuwpXD2bU78qYZePloYupb8WlKwor+ueoy+qiaVTeKH7ZHIBKt1c+MrV8xECGEz0/1zvOlRsvUPALlqsJ7El2YNmUyclaZoFP7j5dOF9vm50hDC04Yg4AfHJPhBPVLPExDVHYQCaEpwih6j2UdV+b8a0DoP2T3nam/zs6TaprCpQltGCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=fnedCK7tAR44q7lO/DURZyKyOiN3g7ouC9lxG2A93XY=; b=HfekPXyKQ9Q2vdzSprVvMA4zyqPdsgii78OnbnZquisUjd+bnowolII1pI7hAXJwH/iRDpmq7lROJNWwh9ZXHFKJke9dc07nTnIel0rqCAeHCGj6W27Rr/Liiueg0llaNMfvDFkPPNuVvksjUoaWda6BhXKh79XyOXq6eHKN/jFS7HLxhiHbGK1jKsN89T9PI8UDjjKBNRHINtZlqtNDK3RlF+kk3KNPxxbc/3AGY+i0SYqXXPdnUKlKqJPrxZC9zanVK1uF4ucIwJ4lcY4ogwh0i6pjeTzNk0eheUU4pqln94Oxwnt9+SWItfwycDd2manNKK4yeAfBspAwHPP5kQ== 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 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=fnedCK7tAR44q7lO/DURZyKyOiN3g7ouC9lxG2A93XY=; b=R7oS/llCM9SDdqAtvA26ZbveqDiGLmdsLHhfJ7nAvbob31JEOxv4ptBxZ7kEpDmDGlwSQ2h0zawaQTG+Jfg2I1Ugxf2Bl4OExQyk2UTz19nbLcnYIAFyhQpnXXA1iFLtqAadDdYsEUTVBZCaD3ihB9L/q7cY72GSI6cCBbsHj2Q= 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 (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB03.amd.com; pr=C From: Stewart Hildebrand To: CC: Stewart Hildebrand , Andrew Cooper , George Dunlap , "Jan Beulich" , Julien Grall , "Stefano Stabellini" , Wei Liu , =?utf-8?q?Roger_Pau_Monn=C3=A9?= Subject: [PATCH v4 6/6] xen/vpci: header: filter PCI capabilities Date: Mon, 28 Aug 2023 13:56:54 -0400 Message-ID: <20230828175858.30780-7-stewart.hildebrand@amd.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230828175858.30780-1-stewart.hildebrand@amd.com> References: <20230828175858.30780-1-stewart.hildebrand@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9DC:EE_|CH2PR12MB4150:EE_ X-MS-Office365-Filtering-Correlation-Id: df6e9dd2-e2e0-4344-4a0c-08dba7f10835 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /CsJmoMb0Yx7fnezMLF9P+lYZXAa4K1VJR0YeOq/qAUHiqG+RPrSUDwC8kSVTRuEMreYjWtlQk5v4G27nLsErutuJJBL03bT4k6Hyl7QEa7XMy1y/TfKdbMpYupYjNR7P/AYy1l/xMSWzxAWb5VRQICOLUSeujinZUEdkKuDmoqTdgxSL/Tiuo+2W0XQiel38naKijXwLaY3qi7XVUlvNLgoHLPLUbogBeogywXaDJIp8362hyW38wiXuGATDTDzgx0lvgRBNJDZlkWTbOrA28DHdjD9NkvW+mtWEK5Tn7ZgghH9RVQSprKuKylxMBQUQnrdjsvVstNakYk52djaqVLLgvI5KjoCcQYI+gBFcj4snTP/LPjIycVwmrrl4oXqotnlpD8BhFVgJcCgn8gu02fkVAKjX1eaCwV0RaZTIrG+ggKXbEhlrUX9vEOVBAI2hjZVDxRB/Na9NVrioKZEOInhoNv6gkY7qeyw/QOFWiH7JXT/GtAbrx/aigvSMrr9Q1FN00ZG1hTy6zFJNlMPS/YLsCTdVRx30XadEiWUiMrCxRpWmj7PdlQnY0+g2UUVaFtlPOMNmXGraDi7/2YjdMlyrNYuzR3MsPgPe/zOyk84/roFodlHb8Xn1sb7GVYeT8Pkp1fqPy9NA1u6HlDFvc8n5BLv7QniO45A2G/M426ZfqnFQfHZx4qnp5+3hP3Y3g1J+vdnvHC+hsCzjMYRxtQqc6aLl3vCRSfG862saWKwedQ0gLdoFANCf8fa6j0bo0VF6f1R/8JfM77A6e7Dxw== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB03.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(136003)(376002)(346002)(39860400002)(396003)(451199024)(1800799009)(186009)(82310400011)(46966006)(36840700001)(40470700004)(82740400003)(6666004)(40460700003)(36756003)(86362001)(81166007)(356005)(40480700001)(36860700001)(47076005)(1076003)(478600001)(2906002)(336012)(426003)(26005)(83380400001)(70586007)(70206006)(41300700001)(8676002)(4326008)(8936002)(44832011)(5660300002)(2616005)(6916009)(316002)(54906003)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2023 18:03:06.8630 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: df6e9dd2-e2e0-4344-4a0c-08dba7f10835 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB03.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9DC.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4150 Currently, Xen vPCI only supports virtualizing the MSI and MSI-X capabilities. Hide all other PCI capabilities (including extended capabilities) from domUs for now, even though there may be certain devices/drivers that depend on being able to discover certain capabilities. We parse the physical PCI capabilities linked list and add vPCI register handlers for the next elements, inserting our own next value, thus presenting a modified linked list to the domU. Introduce helper functions vpci_hw_read8 and vpci_read_val. The vpci_read_val helper function returns a fixed value, which may be used for RAZ registers, or registers whose value doesn't change. Introduce pci_find_next_cap_ttl() helper while adapting the logic from pci_find_next_cap() to suit our needs, and implement the existing pci_find_next_cap() in terms of the new helper. Signed-off-by: Stewart Hildebrand Reviewed-by: Jan Beulich --- v3->v4: * move mask_cap_list setting to this patch * leave pci_find_next_cap signature alone * use more appropriate types v2->v3: * get rid of > 0 in loop condition * implement pci_find_next_cap in terms of new pci_find_next_cap_ttl function so that hypothetical future callers wouldn't be required to pass &ttl. * change NULL to (void *)0 for RAZ value passed to vpci_read_val * change type of ttl to unsigned int * remember to mask off the low 2 bits of next in the initial loop iteration * change return type of pci_find_next_cap and pci_find_next_cap_ttl * avoid wrapping the PCI_STATUS_CAP_LIST condition by using ! instead of == 0 v1->v2: * change type of ttl to int * use switch statement instead of if/else * adapt existing pci_find_next_cap helper instead of rolling our own * pass ttl as in/out * "pass through" the lower 2 bits of the next pointer * squash helper functions into this patch to avoid transient dead code situation * extended capabilities RAZ/WI --- xen/drivers/pci/pci.c | 31 +++++++++++----- xen/drivers/vpci/header.c | 77 +++++++++++++++++++++++++++++++++++++++ xen/drivers/vpci/vpci.c | 12 ++++++ xen/include/xen/pci.h | 3 ++ xen/include/xen/vpci.h | 5 +++ 5 files changed, 119 insertions(+), 9 deletions(-) diff --git a/xen/drivers/pci/pci.c b/xen/drivers/pci/pci.c index 3569ccb24e9e..733e5e028908 100644 --- a/xen/drivers/pci/pci.c +++ b/xen/drivers/pci/pci.c @@ -39,31 +39,44 @@ unsigned int pci_find_cap_offset(pci_sbdf_t sbdf, unsigned int cap) return 0; } -unsigned int pci_find_next_cap(pci_sbdf_t sbdf, unsigned int pos, - unsigned int cap) +unsigned int pci_find_next_cap_ttl(pci_sbdf_t sbdf, unsigned int pos, + bool (*is_match)(unsigned int, unsigned int), + unsigned int userdata, unsigned int *ttl) { - u8 id; - int ttl = 48; + unsigned int id; - while ( ttl-- ) + while ( (*ttl)-- ) { pos = pci_conf_read8(sbdf, pos); if ( pos < 0x40 ) break; - pos &= ~3; - id = pci_conf_read8(sbdf, pos + PCI_CAP_LIST_ID); + id = pci_conf_read8(sbdf, (pos & ~3) + PCI_CAP_LIST_ID); if ( id == 0xff ) break; - if ( id == cap ) + if ( is_match(id, userdata) ) return pos; - pos += PCI_CAP_LIST_NEXT; + pos = (pos & ~3) + PCI_CAP_LIST_NEXT; } + return 0; } +static bool cf_check is_cap_match(unsigned int id1, unsigned int id2) +{ + return id1 == id2; +} + +unsigned int pci_find_next_cap(pci_sbdf_t sbdf, unsigned int pos, + unsigned int cap) +{ + unsigned int ttl = 48; + + return pci_find_next_cap_ttl(sbdf, pos, is_cap_match, cap, &ttl) & ~3; +} + /** * pci_find_ext_capability - Find an extended capability * @sbdf: PCI device to query diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c index 4a4dbb69ab1c..919addbfa630 100644 --- a/xen/drivers/vpci/header.c +++ b/xen/drivers/vpci/header.c @@ -525,6 +525,18 @@ static void cf_check rom_write( rom->addr = val & PCI_ROM_ADDRESS_MASK; } +static bool cf_check vpci_cap_supported(unsigned int id1, unsigned int id2) +{ + switch ( id1 ) + { + case PCI_CAP_ID_MSI: + case PCI_CAP_ID_MSIX: + return true; + default: + return false; + } +} + static int cf_check init_bars(struct pci_dev *pdev) { uint16_t cmd; @@ -561,6 +573,71 @@ static int cf_check init_bars(struct pci_dev *pdev) if ( rc ) return rc; + if ( !is_hardware_domain(pdev->domain) ) + { + if ( !(pci_conf_read16(pdev->sbdf, PCI_STATUS) & PCI_STATUS_CAP_LIST) ) + { + /* RAZ/WI */ + rc = vpci_add_register(pdev->vpci, vpci_read_val, NULL, + PCI_CAPABILITY_LIST, 1, (void *)0); + if ( rc ) + return rc; + } + else + { + /* Only expose capabilities to the guest that vPCI can handle. */ + uint8_t next; + unsigned int ttl = 48; + + next = pci_find_next_cap_ttl(pdev->sbdf, PCI_CAPABILITY_LIST, + vpci_cap_supported, 0, &ttl); + + rc = vpci_add_register(pdev->vpci, vpci_read_val, NULL, + PCI_CAPABILITY_LIST, 1, + (void *)(uintptr_t)next); + if ( rc ) + return rc; + + next &= ~3; + + if ( !next ) + /* + * If we don't have any supported capabilities to expose to the + * guest, mask the PCI_STATUS_CAP_LIST bit in the status + * register. + */ + header->mask_cap_list = true; + + while ( next && ttl ) + { + uint8_t pos = next; + + next = pci_find_next_cap_ttl(pdev->sbdf, + pos + PCI_CAP_LIST_NEXT, + vpci_cap_supported, 0, &ttl); + + rc = vpci_add_register(pdev->vpci, vpci_hw_read8, NULL, + pos + PCI_CAP_LIST_ID, 1, NULL); + if ( rc ) + return rc; + + rc = vpci_add_register(pdev->vpci, vpci_read_val, NULL, + pos + PCI_CAP_LIST_NEXT, 1, + (void *)(uintptr_t)next); + if ( rc ) + return rc; + + next &= ~3; + } + } + + /* Extended capabilities RAZ/WI */ + rc = vpci_add_register(pdev->vpci, vpci_read_val, NULL, 0x100, 4, + (void *)0); + if ( rc ) + return rc; + } + if ( pdev->ignore_bars ) return 0; diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 2a67cc516626..25567005d66f 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -135,6 +135,18 @@ static void cf_check vpci_ignored_write( { } +uint32_t cf_check vpci_read_val( + const struct pci_dev *pdev, unsigned int reg, void *data) +{ + return (uintptr_t)data; +} + +uint32_t cf_check vpci_hw_read8( + const struct pci_dev *pdev, unsigned int reg, void *data) +{ + return pci_conf_read8(pdev->sbdf, reg); +} + uint32_t cf_check vpci_hw_read16( const struct pci_dev *pdev, unsigned int reg, void *data) { diff --git a/xen/include/xen/pci.h b/xen/include/xen/pci.h index ea6a4c9abf38..50ca2f40acda 100644 --- a/xen/include/xen/pci.h +++ b/xen/include/xen/pci.h @@ -194,6 +194,9 @@ int pci_mmcfg_read(unsigned int seg, unsigned int bus, int pci_mmcfg_write(unsigned int seg, unsigned int bus, unsigned int devfn, int reg, int len, u32 value); unsigned int pci_find_cap_offset(pci_sbdf_t sbdf, unsigned int cap); +unsigned int pci_find_next_cap_ttl(pci_sbdf_t sbdf, unsigned int pos, + bool (*is_match)(unsigned int, unsigned int), + unsigned int userdata, unsigned int *ttl); unsigned int pci_find_next_cap(pci_sbdf_t sbdf, unsigned int pos, unsigned int cap); unsigned int pci_find_ext_capability(pci_sbdf_t sbdf, unsigned int cap); diff --git a/xen/include/xen/vpci.h b/xen/include/xen/vpci.h index b0636182d91e..a63f2ca8ed56 100644 --- a/xen/include/xen/vpci.h +++ b/xen/include/xen/vpci.h @@ -51,7 +51,12 @@ uint32_t vpci_read(pci_sbdf_t sbdf, unsigned int reg, unsigned int size); void vpci_write(pci_sbdf_t sbdf, unsigned int reg, unsigned int size, uint32_t data); +uint32_t cf_check vpci_read_val( + const struct pci_dev *pdev, unsigned int reg, void *data); + /* Passthrough handlers. */ +uint32_t cf_check vpci_hw_read8( + const struct pci_dev *pdev, unsigned int reg, void *data); uint32_t cf_check vpci_hw_read16( const struct pci_dev *pdev, unsigned int reg, void *data); uint32_t cf_check vpci_hw_read32(