From patchwork Tue Aug 9 15:50:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12939711 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 9D79DC19F2D for ; Tue, 9 Aug 2022 15:51:08 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.383029.618121 (Exim 4.92) (envelope-from ) id 1oLRVJ-0001LM-P6; Tue, 09 Aug 2022 15:50:49 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 383029.618121; Tue, 09 Aug 2022 15:50:49 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1oLRVJ-0001LF-MJ; Tue, 09 Aug 2022 15:50:49 +0000 Received: by outflank-mailman (input) for mailman id 383029; Tue, 09 Aug 2022 15:50:48 +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 1oLRVI-0001L9-RY for xen-devel@lists.xenproject.org; Tue, 09 Aug 2022 15:50:48 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70049.outbound.protection.outlook.com [40.107.7.49]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 08d73cc4-17fb-11ed-bd2e-47488cf2e6aa; Tue, 09 Aug 2022 17:50:47 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM6PR04MB6199.eurprd04.prod.outlook.com (2603:10a6:20b:bf::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.20; Tue, 9 Aug 2022 15:50:45 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::fcd7:eaf7:5345:210f]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::fcd7:eaf7:5345:210f%6]) with mapi id 15.20.5504.019; Tue, 9 Aug 2022 15:50:45 +0000 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: 08d73cc4-17fb-11ed-bd2e-47488cf2e6aa ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AskTGe8AkF3GdI5Yu92z1jR1qH/ylxcYSaIOa3v0s4G41N4GDISep+p+bOr2a9lJXsMXsvZuGw5ux1ipN8hOLo2HyMieE40pvfeO11GIu1bSvt6CF6kJvQQ7W1/gJR/g7OVpzm3dr306OODrSrziOu2V2cf9VpEg3ralstvff22VhZEr3k9Fz20U6RomHguBkJzvu7xxhei1cg6igNlrMvdM0WQfF+HnnSCZxOIY0Mc7pqjC4/wDaRiZ/1sPNUd6SEbiloMNxt9LoOcjGRQvHrH3i4eUw1bon3zoYtXKCoousu/QodV/GUxIL4Mje/McDBaYOf4upuaTqbLhowMpbA== 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=j2o3e3VcZdpL1nk388vY2vbR7X6y2j6+znoiiGQykqM=; b=KT0+9yumtgfL76CfaIiq1VU5QqejDSstc74QvUmfAG9d1HhoQGP2tDQprP2ay91pE5oR/ZHTyImC8WJ/+oRzjHXe2387rCMybMUIA84WrMHFQEjFtbHPVq0mQsnKEc6YE4lmN6KoBzH9EAjKulMFgt/D1/BXEuknRpDjftM3tdPWRrBEgsBbFhOV5+re9anuG7/yTEpnPnv9Y4hwsqG5ObvIUTNSZXj13kmWu/S81XlnThLaWOSUAwWbYOYNUfPVIzJ3rLT+M7CaKHF3sP9JDFFyOsUkd5k4zCqW2LkC7nhHQIe+L0NK6YxnxOdPSpBPG0Q2gsVS4zJyzomAWDdb8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=j2o3e3VcZdpL1nk388vY2vbR7X6y2j6+znoiiGQykqM=; b=25fNPUuEbQ4F9k+RPbpk/mgHMUFnPN1xvABuuvOMNV3/UkErhUeBpX05AfnMcnyyfe3KgUsmKIr/Rx2RJfgDXW8c0XSxJ6skiAD8sTWGB1ppUFywQn+bzFqLn0fr7h3zjvQvWR2rR2fP7+L00dp44on1Y0n3gE+W+qVAsaOl6c1V9my+OFsytdRuNnU5ZX0joNJN9zRTCx+UmOXyBo41SFf2bPCOjGHn2qPgyS8xnZ/cJHoWHVzc3psGkiJ8RCQWyHQqAoRB5o0BZnQD17dyeMhYnOoaRCHQqVOzq6Bhjmh+Gu1vz8CxMkqBgH+U3Aql0EWG3wZ3lDmYp9BBGEEZNA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <80fb0709-5a0d-a3a5-b2ea-dca089714ac2@suse.com> Date: Tue, 9 Aug 2022 17:50:44 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.12.0 Content-Language: en-US To: "xen-devel@lists.xenproject.org" Cc: =?utf-8?q?Roger_Pau_Monn=C3=A9?= , Paul Durrant From: Jan Beulich Subject: [PATCH] PCI: avoid bogus calls to get_pseg() X-ClientProxiedBy: FR3P281CA0014.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1d::7) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 46fbd8e8-8b72-4f89-a4e5-08da7a1eec2a X-MS-TrafficTypeDiagnostic: AM6PR04MB6199:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wcy0nic8K7ZyDZQ+b0s3BmDk6N8zq94SUm3UMWIS6pO/fdZ1MIq7uN87QQIHubRpwoh+dgSWDGodIkuz3hg/e3M3PhoHCRF7ii9k2nYZyphxuC/gNOT8r3nDNxrjn3hGgJzN0YbJpQohPpPQAoZZLnfhMjsnIYyjbR7ok8zG3MlmJ1ZejlELvPYs/noUWA8a3FUUwLw8aErlIVGENM5G2cI5k48dXXTMSQajrdmVEak3Yi/4l2PnMEg+kTEp605Vi9DJOofvCmqDsBB762zePesE/qm8/HB5sJKxgRv2s+bP7BoisArqqOLSx/YoL5LHkIHsaeAiqHwliKgtWysCtJFOLGNHCZgYM6eObIYYB6grZe6KuJiiaOlxQ0g15NDTYXJW2mx+eE34ZJsRk7X+eT2VcUxka5fzCmJgJSRavrMNrlOWNHH63grXrdX0FqUU2/G9HZXFz0tScOe+6aSPMXtRNgjq7Dd1Np/u3CM3ajbG9ILZgK9PjKOWX2Q/QbOMNFuMQg5M9j69TG6/SLRaokrAbB55nnjoTJ1rkzLVTRDEmZ2OLB/45kHbY6W28Cw8Z6/gDYFCAwCP8CeP0t5IiXgIJ+m4+ANgWx9n+jDtUq8Cn8OGcI/Exv8y2mvfpXWR2gMeuqB2Rt1oW8vCcUFDlxMCJ1x/daSqGuv5RgL+pPOUCdFvV0vL4owGOIlEXN1eydrh1/Gf2vkPgnjh/fO79PZotjmOdKOcS+IPhNEeV+FO+cmklmaJsEXZqmYQ5YGbue/wDR99F1wHhJPmgTHPFV12Yw7s+MPS5tBu2vfZndKFDmCBwgYwrhxaQlF7XCboy6Cc6VAi2g0Lb4OGv2sq4Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(396003)(346002)(136003)(39860400002)(376002)(366004)(6506007)(38100700002)(41300700001)(2906002)(86362001)(186003)(26005)(6512007)(2616005)(83380400001)(316002)(54906003)(6916009)(66946007)(31696002)(66556008)(8676002)(4326008)(66476007)(31686004)(36756003)(6486002)(5660300002)(478600001)(8936002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?/Urw/4TLcuRGfd9z+qe0mXWOapfp?= =?utf-8?q?SwAoz8t+BqlNnRddaN66dYSLMChjPboiQVXGPamlnofe62+FklomyYKf56d9tgA+F?= =?utf-8?q?JF3BP+aKZJl09Rh0UBhFuESLxVhPMnUZBRwNLvnrrxG92PBGCAiLWNMB3e7TorRmT?= =?utf-8?q?DZ3r9CGtUnqDqnmKl5vTJRbDW7Uh13qaDdk60U0eBnoEt1hfvPJcwjCoKn4NgihGu?= =?utf-8?q?CmKNYLVccQftM5UhAMagbpV93XOZwlUShT7/F2pnpb3rUfgRFAnTR2Ygi8ecUVSBg?= =?utf-8?q?Ouwkf62E0U/z1Ah3U0Xxz19eSG7evSdBc2DB7LcXp8p8SlA1FGxJ1KuSJqOGqzh1R?= =?utf-8?q?9ytenlj8TnFmindbSAtJRpUalDLJqOa7jaFYL6c37f2vL2g+0jNjCKIbkfo/3JE+R?= =?utf-8?q?YKAccpgZl5w0nzOq821rC1w7COqj52ACGcNnEpktWvZU2aNntA32FKWDX2a8jeiKB?= =?utf-8?q?eZs0JWeo3sIGF06dXuxI/x+u1ezZU1obHx5Qh6lrPkpJNj4+NJRYbZCZOd9sIx4qC?= =?utf-8?q?gMjg8GHPKd/Arpc3BdUB0RTapZprVMQepalN9QkMn0cRFq3nwPqX5brrh0zHjJvqr?= =?utf-8?q?e1KkFf0Wb4pWZPrpVRGqJ9zHsW5MVgG1vRKCa8doMaRfBdVH03PsrNP7mz2vJ6BgP?= =?utf-8?q?TzRSlxflh4SOLsSqbwXWnYLg8xssV0OdaK7ljyQ1keT6fiC2cHmk6plI26gy73S2+?= =?utf-8?q?qIlqr7OOjUvcQLFcBZ4urEXa+rrs/+iHdVGB4+00hsIInuhFckeXGqI6/87CY5BCT?= =?utf-8?q?JOudAjUt/MOTLzaOQlmFYnubwGb61znyIgcGnjTP8th19HOmWoHRPNnyU9pYbxuV/?= =?utf-8?q?CG1QGY1Kkbw886uM1XlMVhmwd/HSZQF6n9spX5ukHq2D14y/JFCspyogNbh8gNH9J?= =?utf-8?q?6PgWra0Gt9UJkxX7o9pamhlSrF1z3rP/M4doNcWzOI1gkLpD6cKhsKtWIuNrROt+4?= =?utf-8?q?CMAxZNKIsZ3/0GBTfRgzPBQMufoXSTCHcI6s3O7QRl9y/8eUVwibHzhlWAfO/+HtE?= =?utf-8?q?dNm7vRyLQL8QwRTgbZEj53PcEQpQ2Z8ild/eSuTy3Z7HQX9guAT4wqOXlSHw1K1ck?= =?utf-8?q?/gxcsUHNJjmT6xbx86Mh9Zwrt0uHazWJ0fzKXzUK96Kh3BaqAvOYoDg9OUTUsm1hM?= =?utf-8?q?neYQuF+T3m8NqCCS57Pjlpb567IOMLk8sI109LNGWlF360Kg0Lif5HzeXjVk1DzUz?= =?utf-8?q?dvHfup4wXvqxm51ccWxlOD/Mjs+zGqZYhXf3HS4BgYrsu02WH7bgCLe3eZ5skBzEq?= =?utf-8?q?pYs1DeNC06DWRaic1R9zKLECiWn07MSKvK4XWJqq7eMAhCb4tGBX8x18DW2UZa4cS?= =?utf-8?q?Q4obauPiNH0ZhzwspQaTjDH5bsANu/JCRv7aMctb4jShbgoR7Ho/GnRaRcqNNtgy0?= =?utf-8?q?b7gSvvD81jTfuTFK4V5PhQLQnk8jw1/TYNlEG3xqRNeNZnrd/1G0+v1DOQppReY0S?= =?utf-8?q?wcKvtlIjengHbJL2ySRSjGFYczA4WAVHisxIWdGW9Si8tyr5LGew1wfCc7RiZMNI3?= =?utf-8?q?pma8ntCjlCer?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 46fbd8e8-8b72-4f89-a4e5-08da7a1eec2a X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Aug 2022 15:50:45.7421 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: w0nrcVRwisnSqhnvu53EfR4nXQlQ6cxetu4XjYr5il6e0Uvx5inFiJbdawOipwPW/fSiwtzHd+k0NE1oTPy8ZQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB6199 When passed -1, the function (taking a u16) will look for segment 0xffff, which might exist. If it exists, we may find (return) the wrong device. Signed-off-by: Jan Beulich Reviewed-by: Rahul Singh Tested-by: Rahul Singh --- An alternative would be to declare that both functions cannot be called with "wildcards" anymore. The last such use went away with f591755823a7 ("IOMMU/PCI: don't let domain cleanup continue when device de-assignment failed") afaict. Each time I look at this pair of functions I wonder why we have two copies of almost the same code (with a curious difference of only one having ASSERT(pcidevs_locked())). Any opinions on deleting either one, subsuming its functionality into the other one by allowing the domain pointer to be NULL to signify "any"? --- a/xen/drivers/passthrough/pci.c +++ b/xen/drivers/passthrough/pci.c @@ -578,20 +578,19 @@ int __init pci_ro_device(int seg, int bu struct pci_dev *pci_get_pdev(int seg, int bus, int devfn) { - struct pci_seg *pseg = get_pseg(seg); + struct pci_seg *pseg = NULL; struct pci_dev *pdev = NULL; ASSERT(pcidevs_locked()); ASSERT(seg != -1 || bus == -1); ASSERT(bus != -1 || devfn == -1); + if ( seg == -1 ) + radix_tree_gang_lookup(&pci_segments, (void **)&pseg, 0, 1); + else + pseg = get_pseg(seg); if ( !pseg ) - { - if ( seg == -1 ) - radix_tree_gang_lookup(&pci_segments, (void **)&pseg, 0, 1); - if ( !pseg ) - return NULL; - } + return NULL; do { list_for_each_entry ( pdev, &pseg->alldevs_list, alldevs_list ) @@ -628,19 +627,18 @@ struct pci_dev *pci_get_real_pdev(int se struct pci_dev *pci_get_pdev_by_domain(const struct domain *d, int seg, int bus, int devfn) { - struct pci_seg *pseg = get_pseg(seg); + struct pci_seg *pseg = NULL; struct pci_dev *pdev = NULL; ASSERT(seg != -1 || bus == -1); ASSERT(bus != -1 || devfn == -1); + if ( seg == -1 ) + radix_tree_gang_lookup(&pci_segments, (void **)&pseg, 0, 1); + else + pseg = get_pseg(seg); if ( !pseg ) - { - if ( seg == -1 ) - radix_tree_gang_lookup(&pci_segments, (void **)&pseg, 0, 1); - if ( !pseg ) - return NULL; - } + return NULL; do { list_for_each_entry ( pdev, &pseg->alldevs_list, alldevs_list )