From patchwork Mon Sep 23 22:35:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 1988705 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=185.125.189.65; helo=lists.ubuntu.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=patchwork.ozlabs.org) Received: from lists.ubuntu.com (lists.ubuntu.com [185.125.189.65]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XCHrt4SKvz1xst for ; Tue, 24 Sep 2024 08:35:58 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=lists.ubuntu.com) by lists.ubuntu.com with esmtp (Exim 4.86_2) (envelope-from ) id 1ssrem-0006vk-FW; Mon, 23 Sep 2024 22:35:48 +0000 Received: from mail-bn8nam04on2088.outbound.protection.outlook.com ([40.107.100.88] helo=NAM04-BN8-obe.outbound.protection.outlook.com) by lists.ubuntu.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1ssrel-0006v8-Ei for kernel-team@lists.ubuntu.com; Mon, 23 Sep 2024 22:35:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Q4ojEWC5WINYWkeBIT0Fgz7oKygE7bxj8/OZPJTtB87bSHIvkk2mYAK1eqsucKSnfPxOGieoXcK9gwthwLb00W+xRKRuZ+zqTSLqWDggXRGxLF6GCJkjbOcnwwPDz3O4mYIvMop8oQwST9u/WtvnYisBbpBbvWyANtRDU/D+faPv6n23HwWEC/8kIpQp7sAGO/BdfOTwAGz4/DmVcuSA450NF4FfEROWbguUPEJCnBxn/mMuHg2tHFm1VYq5X/FRi5XiDFZNsUsj85voIcWwwaeUVhzdtFdndduk7gVliKIKWGVRtG/yQ7i6PfLndzRU2r1NImJRL34fqxm4UyZ33Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Y1WVJVRnQpmze+qdR8SVbpjNX2k4p9x/BrnTwN5LLXg=; b=wcx6j8ekDgq2MgGQ7Nlw4/wp4OeQem1yHuq1QPVVVPiFdLLrz39HTBsC5ZtgGVB0SYyfYZmTx16lLgWclwFgZTlSiG+pM20HS+bUvkusaUpBCnoSKBP7YXn7gq2j4D4j3Vk5neO0snfm2CDGjAWmLtZeslI+bYg8VdgJZbR1VTN7+35mBCIDJu4HC0cVV3Qk/aNPR1CYS0nw7QNkxt3eal0S8J+AOkZPaenrVKZd0B3t/qXKbFsJQfCZCsHrw2sfFmnCIi+2g2msPlTK89K+9gqASicWOisA9H5si4rwqs7v2W0jhycryGGoPFa9YM2S5msApnw0eUGF9V2K4w1MTQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=lists.ubuntu.com smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) Received: from SA1P222CA0177.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:3c4::25) by MN6PR12MB8541.namprd12.prod.outlook.com (2603:10b6:208:47a::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.24; Mon, 23 Sep 2024 22:35:41 +0000 Received: from SA2PEPF00003F66.namprd04.prod.outlook.com (2603:10b6:806:3c4:cafe::85) by SA1P222CA0177.outlook.office365.com (2603:10b6:806:3c4::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7982.26 via Frontend Transport; Mon, 23 Sep 2024 22:35:40 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by SA2PEPF00003F66.mail.protection.outlook.com (10.167.248.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Mon, 23 Sep 2024 22:35:40 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 23 Sep 2024 15:35:30 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 23 Sep 2024 15:35:29 -0700 Received: from vdi.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Mon, 23 Sep 2024 15:35:29 -0700 From: William Tu To: Subject: [SRU][J:linux-bluefield][PATCH v6 3/6] UBUNTU: SAUCE: vfio_pci: Do not open code pci_try_reset_function() Date: Mon, 23 Sep 2024 22:35:19 +0000 Message-ID: <20240923223522.1203691-4-witu@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240923223522.1203691-1-witu@nvidia.com> References: <20240923223522.1203691-1-witu@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PEPF00003F66:EE_|MN6PR12MB8541:EE_ X-MS-Office365-Filtering-Correlation-Id: d5051c86-7d2e-4bf3-2a69-08dcdc200dad X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: tJJysN0PdtY20pn9AefDaX523XFEMI32sSkeVeIjZcjLONC10+pov79A3yIMRRailjHMVuQd5l86WXI4rI+iJDrOsXkpIbsto6LfcmmdO3QBHD7jzjWaS4rC12DFKLSIVTbRqqx+RSARhc9V1hmpPVTYeHSwqDa/yR9LFq+WNrM2HfOINymJSOeX7Xzr1hwzzxZr5hwoGlx+iWkE9+hstz13LJfoEPO+AQf4Gkb6lCSZM49w7f0QiEmBQEcMb5EHXRyyCamBMGDI2KuR+p4zkErifwVNflQgeviwkgT+hmBJ18hFy6JnsEjqx0XU4Kfhi66awtOTkNj0mN9alCWPOfmk80bb+NjS9KoF/yAp6Dml4JAdQVk+FG5gmm9DApGCoTsaK75tNb715VntAv5iWXd9l4hFKUFPhuvSd3QsSYqe1P5mDMDzl8h0+oe17ZkAldrMyG98sccEVRohtr1+ljjuh3wzyKB87uNP/PVKcqHDY1FDRFXxM1U2XMwimjhZJlPxciNumcDHp+gRxeMrzC8Cn+GqFIQVFb2WAAO/IaHHb0yERYnsLWwhia1S+g6/OrN5y/2k/6XvRYSNSqfcL4DHYtCph47AVLSwU8GPiyepcbj367guYDQd6P0BfyagGbwBD1p7HU/0xuy11zCyEhmoZvVWPHsrQoTYOpBSRQkdS9usXN7IuAhbymYbqwdCGW2Jar2YhMWckL/uehy8XCzfJXqxN10420JwmOsd5lh8Dj/oBicwMA3nd8trsMMvoGRBFwvzE87LfmnOV7avIQjeMu0l2TC8WDZubxdKT06fAWbOhqx7SwyHsIJI0+jmnwwWb/47ZkEi6D0yu/FunqLPWZs+OcBpQj7/SLTtv4nETF+6gPl9L98qW3ZWWfhqCDAlNwpHAi1/qrc/hHiY289XoIT38KfNuWZ9PYFjGWkqrWN4IsKrpBdOGH7pVJgZghzZKc3UwgZU+ksGNgksxZ7W8bqdd70Ms4e4XdsP/f13pjP3edeBDzrU3TbO25exyvIstltHgpyE9sO5XYcqe/evhtV0yn5r2Hl7nWDQQELZ5gtq20PWDtCHzdGN+LNmUjpwB5DF3znVg/EdJ/XbsVw4MOVwQ0Zfqs/oLYnBK30vLUnzZOdDnzGnk9n4AwHM5xJ7LKlU7lXFZ9H1m0ZITA7WL425EzyQY5E27G1XuFds3W8xpE6SqBaIwWX7cauYiaGQnwuydwt662uwkWl32K9a01z/SS4zciR95Xwar2fpFzFS5ma6rwCMENrQko8BjjKH71iPHs6U2PW4hU2XyHyA1itGdwWK7zJlYE0tJwjumWHWXT6iVIN0NMOmiwXGZqOf/HlDI2I+841tP5m+IhyKib50HdhrhStC01mA8wo= X-Forefront-Antispam-Report: CIP:216.228.118.233; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(36860700013)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2024 22:35:40.5034 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d5051c86-7d2e-4bf3-2a69-08dcdc200dad X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.233]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF00003F66.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN6PR12MB8541 Received-SPF: softfail client-ip=40.107.100.88; envelope-from=witu@nvidia.com; helo=NAM04-BN8-obe.outbound.protection.outlook.com X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: vlad@nvidia.com, bodong@nvidia.com, sergeygo@nvidia.com, jgg@nvidia.com, zwaksman@nvidia.com Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Jason Gunthorpe BugLink: https://bugs.launchpad.net/bugs/2077887 FLR triggered by an emulated config space write should not behave differently from a FLR triggered by VFIO_DEVICE_RESET, currently the config space path misses the power management. Consolidate all the call sites to invoke a single function. Signed-off-by: Jason Gunthorpe Signed-off-by: William Tu --- drivers/vfio/pci/vfio_pci_config.c | 14 +++----- drivers/vfio/pci/vfio_pci_core.c | 54 +++++++++++++++++------------- drivers/vfio/pci/vfio_pci_priv.h | 7 ++++ 3 files changed, 41 insertions(+), 34 deletions(-) create mode 100644 drivers/vfio/pci/vfio_pci_priv.h diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c index 6e58b4bf7a60..78c626b8907d 100644 --- a/drivers/vfio/pci/vfio_pci_config.c +++ b/drivers/vfio/pci/vfio_pci_config.c @@ -857,11 +857,8 @@ static int vfio_exp_config_write(struct vfio_pci_core_device *vdev, int pos, pos - offset + PCI_EXP_DEVCAP, &cap); - if (!ret && (cap & PCI_EXP_DEVCAP_FLR)) { - vfio_pci_zap_and_down_write_memory_lock(vdev); - pci_try_reset_function(vdev->pdev); - up_write(&vdev->memory_lock); - } + if (!ret && (cap & PCI_EXP_DEVCAP_FLR)) + vfio_pci_try_reset_function(vdev); } /* @@ -939,11 +936,8 @@ static int vfio_af_config_write(struct vfio_pci_core_device *vdev, int pos, pos - offset + PCI_AF_CAP, &cap); - if (!ret && (cap & PCI_AF_CAP_FLR) && (cap & PCI_AF_CAP_TP)) { - vfio_pci_zap_and_down_write_memory_lock(vdev); - pci_try_reset_function(vdev->pdev); - up_write(&vdev->memory_lock); - } + if (!ret && (cap & PCI_AF_CAP_FLR) && (cap & PCI_AF_CAP_TP)) + vfio_pci_try_reset_function(vdev); } return count; diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c index 4f1aceadd4fb..a45cdd3cfb84 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -29,6 +29,8 @@ #include +#include "vfio_pci_priv.h" + #define DRIVER_AUTHOR "Alex Williamson " #define DRIVER_DESC "core driver for VFIO based PCI devices" @@ -648,6 +650,33 @@ int vfio_pci_register_dev_region(struct vfio_pci_core_device *vdev, } EXPORT_SYMBOL_GPL(vfio_pci_register_dev_region); +int vfio_pci_try_reset_function(struct vfio_pci_core_device *vdev) +{ + int ret; + + if (!vdev->reset_works) + return -EINVAL; + + vfio_pci_zap_and_down_write_memory_lock(vdev); + + /* + * This function can be invoked while the power state is non-D0. + * If pci_try_reset_function() has been called while the power + * state is non-D0, then pci_try_reset_function() will + * internally set the power state to D0 without vfio driver + * involvement. For the devices which have NoSoftRst-, the + * reset function can cause the PCI config space reset without + * restoring the original state (saved locally in + * 'vdev->pm_save'). + */ + vfio_pci_set_power_state(vdev, PCI_D0); + + ret = pci_try_reset_function(vdev->pdev); + up_write(&vdev->memory_lock); + + return ret; +} + long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, unsigned long arg) { @@ -929,30 +958,7 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd, return ret; } else if (cmd == VFIO_DEVICE_RESET) { - int ret; - - if (!vdev->reset_works) - return -EINVAL; - - vfio_pci_zap_and_down_write_memory_lock(vdev); - - /* - * This function can be invoked while the power state is non-D0. - * If pci_try_reset_function() has been called while the power - * state is non-D0, then pci_try_reset_function() will - * internally set the power state to D0 without vfio driver - * involvement. For the devices which have NoSoftRst-, the - * reset function can cause the PCI config space reset without - * restoring the original state (saved locally in - * 'vdev->pm_save'). - */ - vfio_pci_set_power_state(vdev, PCI_D0); - - ret = pci_try_reset_function(vdev->pdev); - up_write(&vdev->memory_lock); - - return ret; - + return vfio_pci_try_reset_function(vdev); } else if (cmd == VFIO_DEVICE_GET_PCI_HOT_RESET_INFO) { struct vfio_pci_hot_reset_info hdr; struct vfio_pci_fill_info fill = { 0 }; diff --git a/drivers/vfio/pci/vfio_pci_priv.h b/drivers/vfio/pci/vfio_pci_priv.h new file mode 100644 index 000000000000..4971cd95b431 --- /dev/null +++ b/drivers/vfio/pci/vfio_pci_priv.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef VFIO_PCI_PRIV_H +#define VFIO_PCI_PRIV_H + +int vfio_pci_try_reset_function(struct vfio_pci_core_device *vdev); + +#endif