From nobody Fri Jul 24 23:30:38 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011031.outbound.protection.outlook.com [40.93.194.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73C83408628; Wed, 22 Jul 2026 07:39:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.31 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784705996; cv=fail; b=NMc3oYwBvAE3cIkABeTeOX7q6FpW05r+S4hQc33WeVVoi6EVbj+/Z+6wsLalZvWtdgam4xuBqQw7WzjCFcqk0bxkpNct7Z9kDsBDZ8z+z2bPLxnaBlLiEMeHJRMkL/ymsHomvhUzm2OoUQahnRe4V2DTgfL2B1PDgcytqqXCo7Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784705996; c=relaxed/simple; bh=ZEh/JvWIrinZ4apVI8eFGEhc2qaGY5u5bEN1sWbqR9Y=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=N83uY7ZIGh93MKIHJiDhN71RvnBVYe1FxJ2COSUxMQhD6xq3PjoWlluRlVGK3Kgq32saJ/gj8mr7CiBKaIwfE8GUiw5w0F9QZSkoy0YLE8T1eApCQ6PU3CnA3fp6Mb2jxLIBmwE08X1MetxyrU5UcunEeOHwfgrClml9quX+BI8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=pEihd6Hs; arc=fail smtp.client-ip=40.93.194.31 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="pEihd6Hs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tEu6HfBPnIawPssDKbbySERHYUDZNWUGh/acjFmNbn1XU1YFIDF7vw9e6e4cTwBuVHq29qcM+ek4+Ap7xi5671RtVcXZTBjEDRfefPjWvG9Eji3fCAw8FKKQpkVU7tyN4Zb9/2NfyKuuLPFWhYgURr+JmfJi/sXhdWZwkFst5KUc/Wz/yGYFXAd8dLBFi/EB8Py52TX9O7OcWZ84mg5PtwdBWrS/0W927oYESL6wlnagSclVMlcTNWEWQnVysx2r3qONGvdBx5RPhCNZZ4el/LB0lGSl7OzBV0V7jn49IVXvj9sG9O6+7SxxAtwhRS8cAvgzo04VsLtR5tLN6q4cGA== 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=Lm4/dT2belvGgiv3OqFFV3HPDnNM3+7zltaTL9BKbKY=; b=LMR2TlYsoEwG9Ehq/rKkvBb+XW2WqKadN92WuFWKXA06Gdb/3dvTO9wsM6ekYIbTEj13UGAP1zBkoGPueUox9iev7+HMH5dgej12MXXAkhYQzmRo+822ytvBcRuUfkQyI35coi4wbfa3oymsyHpGST60dGRvFHVeywC+TgEZaAzfknAKB10+d4c62ly4ChONBoOO3tbEbY2j5k5R+rLo3W9fvkhYILlIVFplBXTGJ6cOfzpEkpTTCn6BRanNqBs+Fek1bNFON8Cx/yq5sfzF3oSgYDnz/gfvGEyqYRzus6NVgB9oVLtQTI35k8GyfyhQXkkDTnwQTRfjELxROV199Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=kernel.org 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) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Lm4/dT2belvGgiv3OqFFV3HPDnNM3+7zltaTL9BKbKY=; b=pEihd6HsLcT3/uklnLcgXhGuFR8zWHLM0suKIep+yS6lWBGskHXRUxzuLY4Ek20+Yb29S3hGoJrCGiCEplfimXt12zvIBkgFevlM4PI15Lr9dHQWZ/S9/rNGorPdJQEnnvU0Gi+E2dRY2L4ep5UR3WhTAm3GHTdT2jHOV2bKVhnVTHc7SQFEGLE72qJxm/yLhebjA9IK5FRt9SRKDhrCjABlvkFAPT9wvHo6kg9un76tia18eK5AzBKvfznd1UEuKump306aKGly5Em3LjvF0QMSs7h0SdDgRpbcLgcD3/hYEBO4lPbapa3xf2tZJ+Q8dX5elsKWfK51TVmdePTXfg== Received: from IA1P220CA0024.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:464::12) by SN7PR12MB7420.namprd12.prod.outlook.com (2603:10b6:806:2a7::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Wed, 22 Jul 2026 07:39:48 +0000 Received: from BL6PEPF0001AB4E.namprd04.prod.outlook.com (2603:10b6:208:464:cafe::4b) by IA1P220CA0024.outlook.office365.com (2603:10b6:208:464::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Wed, 22 Jul 2026 07:39:48 +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 BL6PEPF0001AB4E.mail.protection.outlook.com (10.167.242.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Wed, 22 Jul 2026 07:39:48 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) 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.2562.20; Wed, 22 Jul 2026 00:39:34 -0700 Received: from drhqmail202.nvidia.com (10.126.190.181) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Wed, 22 Jul 2026 00:39:33 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Wed, 22 Jul 2026 00:39:26 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang , Bjorn Helgaas , David Laight , Subject: [PATCH v5 1/6] PCI/IOV: Return unsigned int from pci_sriov_get_totalvfs() Date: Wed, 22 Jul 2026 10:39:08 +0300 Message-ID: <20260722073913.1807677-2-zhiw@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260722073913.1807677-1-zhiw@nvidia.com> References: <20260722073913.1807677-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB4E:EE_|SN7PR12MB7420:EE_ X-MS-Office365-Filtering-Correlation-Id: f435e787-6b10-4862-7d92-08dee7c46871 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|23010399003|82310400026|36860700016|7416014|376014|13003099007|11063799006|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: wW4+l3eOtKNb+j5Br0FS+989QoiuUJkzGuOUdRozRsplrffWlVgLMbIlK06ynlZ1YydCq+5rYDgTfdkmgvpkCTT1ysqrt60n4UKT1m19Mez1NIR8B3aIZgyjZOKRH7V0oLLILHFmO02N7aMghs5pOi0nZcYdTdfsx1pBwIi45xDOAAxHm44LkXd8/VK4JpIaL1OmNhfQxoJKRYdXX0clN4pWTph0snUQ+EpSM0tDrXGtrHXXmtNXiPw/rLIgpmeyQPAQyLR/VY7KJGUwydGZml0vxAXk1z0F6+4VSuk5eWEDA/VPIPkqTqDcCj0qg0XbQQAjXyULGF6fZ+8ytAnfnJvhhpRSHa4enJaeSEVNZQGxoqErK+EesaoSGw06Nj8emBilNXV/g1ersajWJgSbZc6cDxU5apjj+/ciaO59/1SOkxgbAnVOUt0z2CKZa800hrCXw+S577GA8O28ehAN8rJIypRFJ+p1KBsnw9C9QxTbTsiiU/tcquHIGbgW390TTFbLbGUiPXANCcZ/5jDDM9ojGcL17zN2kxZhnW3WA0yyPC470lGkdLOej5YjBcYHY/1tlB+1rtrIXgQmq9FXq8dAQbyNNmDhxnC6Dx28rBdcQIGf07LCDO9iHsNwQAjdaMI648kge6XvIxTMVyUOnvKcUuRwaffMLa61VjtoeKY8YgB2X4rY9QfPSbs0wih6EmDid3Pzg1OCo7kZkQyQLw== 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)(23010399003)(82310400026)(36860700016)(7416014)(376014)(13003099007)(11063799006)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZYMGnES122p7oa1w42aJNMeP0v+yCjh78LGCWfKkQAdTwum0p44wcSGngh6ChssWb5f5U4+yfNN4DuuiOjOVdypsYy01S9gm7Ug1RcDtdZ1wJTFFHejLWFAQUkKiBP7HaNj/e29lOWzOCVkQ8lzLK6jOuDxZ70MG6+QCAgwHwX3IQIdNd4oVIbmMUHYunvzvpsus20EFKcdxbWHCObC2A3sNBK6XM7pVg2gfxdDGE5XoSZRnoWUgvy43Ctt7bzoUuF9y8bHUi0rOYJH5SOaPC41sfdQBF7Td9MzrZ7/sNFJwT+OVXCS++BLBHV48jNk3uOCKUS+WU7u8+BpeFU9d8s9vOPZ+OpmcBAsZ3mtFmHEpAS2n1PaAnPKRp+NWgBkaePFQyDFFBhLyBXrXVIYHn3Hgmf/vnsDodw17hJmqs6x+BD8+PuNDXODec/Wf++LM X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2026 07:39:48.3186 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f435e787-6b10-4862-7d92-08dee7c46871 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: BL6PEPF0001AB4E.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7420 Content-Type: text/plain; charset="utf-8" pci_sriov_get_totalvfs() reports a VF count, not an errno-style status. It returns 0 when SR-IOV is unavailable or the device is not a PF, and otherwise returns the PF's driver_max_VFs value. driver_max_VFs is stored as a u16 in struct pci_sriov. It is derived from the SR-IOV TotalVFs field or from a driver-provided limit, so the implementation cannot return a negative value. Change the declaration, CONFIG_PCI_IOV stub, and implementation to return unsigned int. Suggested-by: Alexandre Courbot Reviewed-by: Alexandre Courbot Acked-by: Bjorn Helgaas Cc: Bjorn Helgaas Cc: David Laight Cc: Gary Guo Cc: linux-pci@vger.kernel.org Link: https://lore.kernel.org/all/DJHPRE4TGGT8.BUTMYOF5YE05@nvidia.com/ Signed-off-by: Zhi Wang --- drivers/pci/iov.c | 2 +- include/linux/pci.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index b0d24839c084..9d408fb8ac25 100644 --- a/drivers/pci/iov.c +++ b/drivers/pci/iov.c @@ -1283,7 +1283,7 @@ EXPORT_SYMBOL_GPL(pci_sriov_set_totalvfs); * SRIOV capability value of TotalVFs or the value of driver_max_VFs * if the driver reduced it. Otherwise 0. */ -int pci_sriov_get_totalvfs(struct pci_dev *dev) +unsigned int pci_sriov_get_totalvfs(struct pci_dev *dev) { if (!dev->is_physfn) return 0; diff --git a/include/linux/pci.h b/include/linux/pci.h index ebb5b9d76360..2b9c61de5f67 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -2569,7 +2569,7 @@ void pci_iov_remove_virtfn(struct pci_dev *dev, int i= d); int pci_num_vf(struct pci_dev *dev); int pci_vfs_assigned(struct pci_dev *dev); int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs); -int pci_sriov_get_totalvfs(struct pci_dev *dev); +unsigned int pci_sriov_get_totalvfs(struct pci_dev *dev); int pci_sriov_configure_simple(struct pci_dev *dev, int nr_virtfn); resource_size_t pci_iov_resource_size(const struct pci_dev *dev, int resno= ); int pci_iov_vf_bar_set_size(struct pci_dev *dev, int resno, int size); @@ -2622,7 +2622,7 @@ static inline int pci_vfs_assigned(struct pci_dev *de= v) { return 0; } static inline int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs) { return 0; } -static inline int pci_sriov_get_totalvfs(struct pci_dev *dev) +static inline unsigned int pci_sriov_get_totalvfs(struct pci_dev *dev) { return 0; } #define pci_sriov_configure_simple NULL static inline resource_size_t pci_iov_resource_size(const struct pci_dev *= dev, --=20 2.53.0 From nobody Fri Jul 24 23:30:38 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011012.outbound.protection.outlook.com [52.101.62.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B3D5F408628; Wed, 22 Jul 2026 07:40:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.12 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784706005; cv=fail; b=VK2unp4JG9qHNggVdFSU21pywmAMLgf0nHf6dy9bmEl2AWCuJwJdAKZlKVFOYBaBKFGPromdeAaUGPwOOA8yfi9IFUxdTTjpcQGyYOG4eoBxmwFw8gJ/sZSzpQopaIpoh3ZDAUCp6RvL2olhvBvaJCXAEMOWxhrhCGKJkzVsTCU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784706005; c=relaxed/simple; bh=zEx1Hc3A819OhPAiwRBFQp/pS6ONJg4zduWE1AO9LCA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jecia0R6RonOgwFdcCutbuAPkQ1pohf+x7hBEz6EHUUCmFnRF+z2B9fHiEkab2AsPigBrxeQmbGgYGRPDLU/VgzJ1lMQKiJI3H6Acz6Y3soFnNSbm3g7Z2iXbLKUZnBOSq9iWDYgo9jlzw5+4SoNP2kZFZtvY9cXoVl6C/n0jXg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=K/oMN+Vv; arc=fail smtp.client-ip=52.101.62.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="K/oMN+Vv" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wBQ3DjVFCx4dnA7SHOPNgAervLCcmLoqDFFydLYUtbDYio72VuNdo4kyIxOAKs6yXhTRpcEopxc3KHMYj5Ruse4mAkoD0XAAZmLusDspedYBPxmyLdA2GhUjIA/aNKDM4cY5bBtLVTLq7OwHPjpNMaukgW3EPXN3gGUBAY7kSXBw3FVCISsAJIT2OTqezi9aKFOzBF0qpEuIAI4UGCx/BN+DnWoO5G4DSGWz79E5jVPOh3hNOr1K73B2MAH36QAezrLYSHjDz4MC0IYaF6XMWl3eTqbdlQxgh7FAd7h0W1zVA0kZAo1I98K4wc2cpMi4zbXtv8GZ9IaC63/DeUDV4w== 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=FrORapsNJyhCBH/26E5XZhOZQ+bl0Dz+YpSM7DKWD0k=; b=iqnD28O+zsLIKIxz1aqTI45RgY6cCBhaIilSTV1Et5b1iuBYavh84J4qA46krB7LptLx52FcW3EjR1qrV42jx4PKARVtvv+sUdHjkShotJmjsejbDu2Eby0ZtKAtjzaNNNYorem8I7FvougA/Ec4+hp24uYffkJzG502xueiZjHpDU2bgxB3/H3UIj9k5bV5Bzdpz16bxZUHm13cosAJBgbRu6Ce+RYxPpJTjUcSAwmzjoPZjuZjhWxpnJ0+lc29roMtJu2kiOftMxxm8CluJN41B9cufcTnaLC85d8RLMrrg2avUMcbDm+7CtfL4IERczkR5SnOhsM30xi7iju3oQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=kernel.org 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) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FrORapsNJyhCBH/26E5XZhOZQ+bl0Dz+YpSM7DKWD0k=; b=K/oMN+VvRwWvfivOL2R4FE19aaY8aXacNUFLRFlt5iPHtbg6ULZ3/ig5zzdmKQkD8q97JSOnPUulBseefng2Go9bmAiO3NdBdcPp3VdEYB6qrA0hUwJ+Q9eYj7HIucePy6S66NKW5n3XqkBNlayILpS0lgtiqJ6gtB5WWjuQ4oi32a15+xpFCVjCIJx/yG2iJl7Mn0N/gfcLKPk1Xb2wwWJCMnK8Jq/YbVdex6uXuBnnkdPVgjCEmW78yI6i4SDArcjeFBp0JVUUGEBl11VjyhHV6oj7lyvtmeVlw2+7WOXbUvim9MXjHZJ0h0JQl8en6T55zjDOTdz21Rb+C0xpwQ== Received: from SJ0PR05CA0171.namprd05.prod.outlook.com (2603:10b6:a03:339::26) by MW4PR12MB7216.namprd12.prod.outlook.com (2603:10b6:303:226::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Wed, 22 Jul 2026 07:39:58 +0000 Received: from BY1PEPF0001AE1A.namprd04.prod.outlook.com (2603:10b6:a03:339:cafe::13) by SJ0PR05CA0171.outlook.office365.com (2603:10b6:a03:339::26) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Wed, 22 Jul 2026 07:39:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by BY1PEPF0001AE1A.mail.protection.outlook.com (10.167.242.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Wed, 22 Jul 2026 07:39:58 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Wed, 22 Jul 2026 00:39:42 -0700 Received: from drhqmail202.nvidia.com (10.126.190.181) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Wed, 22 Jul 2026 00:39:41 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Wed, 22 Jul 2026 00:39:34 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang , Bjorn Helgaas , David Laight , Subject: [PATCH v5 2/6] rust: pci: add sriov_get_totalvfs() helper Date: Wed, 22 Jul 2026 10:39:09 +0300 Message-ID: <20260722073913.1807677-3-zhiw@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260722073913.1807677-1-zhiw@nvidia.com> References: <20260722073913.1807677-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PEPF0001AE1A:EE_|MW4PR12MB7216:EE_ X-MS-Office365-Filtering-Correlation-Id: ae3fc42d-5f0a-4e51-fff5-08dee7c46e7f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|376014|7416014|23010399003|1800799024|82310400026|56012099006|11063799006|10067099003|6133799003|18002099003|22082099003|13003099007; X-Microsoft-Antispam-Message-Info: UIigq5Lw+FrUvoFG5RYgrinmz6QGS7n8qY3qKHp1wAQnld2irwVXkpEJtbut7SQ14c2pOca8o/mQz7sxkSmZzmD+WxPfeclXo6d35tlS61NWe34VhGUQCSmTkLHqh4g4TfHN6wS60Yq/7S/53KVwEabuIS6rR/glMXgz+/psBzydM5uRoy1Q8ejqBu8Qr2PGcix3mYL3l6wUPIfykEsJNGSg3TgLssh+atHqHXp+aoIYlYI6WoJP85o683XmoN7qc5oNdM3i7gKj0I/hTcmeYmv47LafpT0gp0VbXDVEVAs2pJtWhLkwWW/6ExOrUssn+1IF99rREKC0R/xVqaQkAh0LukjH8TnvoGQmarjTvEvK4ZLRyOLPC+QGKh0acv4quizzGNVAVIptHGo9fMr1e6owd4psS3f9tNUMW+8T8qmTzDWgWa3B58qr649RJVNyoZd4EQnaPLJg5fE/hSm88SBRZVy9QoxmJxhOfmDFDOmkDHmkaiscQWdVjB1PMfXHGp5pnfYCLtewQLopQ9Su74B1w/4yfdAiV/BzwTse7BAz+7306OQiAsnH1hueNXNf98fzB0R1GyOLWChabjAx/G4vLZVMwTJKQo8YpuCYU4kOEOqC4jdiML51wpsoUEDpA14gsNYAyLtJh4AWmTAOdwB/qkpgDMlrxDPY77zdwNZHNte0JPKfoavEaxbfLau0C/IgMkucUDy3WWqJZppMOg== X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(36860700016)(376014)(7416014)(23010399003)(1800799024)(82310400026)(56012099006)(11063799006)(10067099003)(6133799003)(18002099003)(22082099003)(13003099007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2SXEtmKtLavwdJZQbrciLFegscQp0zfY7cmOkNG0OIqeFcVwKeUcTqkR1GGXugfmwliCGzQcp9pk28sQuY8U2VOO+FI+21lNnuC6unTE0cHKbV+of3Hzl3gk9Yeiei6c+gt/cnlS+T+pOMKT8iWmF3OsMZAt3g0k7M6aqTPD97CTvvrdJ+manlpXRn1nRGTvlkxWsx+kzi04hjP9anWiHr8LgrnSErGmoSxOXqX5K9qWb7cXaEITZkWN/S8ojsY+wvCcbAtZcauzNYn/8jPxKIDHbgJSQfkdR+Y5Jt/rLS82HwQ6hAurHpCA7sgftdfmnUv/esXUYq1Yo0BajNF4wFlbaySjjmaykt+1uqgWNLwA5RD/FQziUe7KntZe6L1voFFJEKw0hj51irJGlTJPFma/KFfEpCynFqB5hiidGz7EyVyRtIgVdgvP8NHFKh1Z X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2026 07:39:58.6517 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ae3fc42d-5f0a-4e51-fff5-08dee7c46e7f 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.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BY1PEPF0001AE1A.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB7216 Content-Type: text/plain; charset="utf-8" Expose pci_sriov_get_totalvfs() to Rust PCI drivers so they can query how many SR-IOV VFs a device supports. Use a conditional C helper because the !CONFIG_PCI_IOV version of pci_sriov_get_totalvfs() is a static inline function and is therefore not emitted into the Rust bindings. Return Option> so Rust callers must handle the zero value that represents unavailable SR-IOV. Reviewed-by: Alexandre Courbot Cc: Alexandre Courbot Cc: Bjorn Helgaas Cc: David Laight Cc: Gary Guo Cc: linux-pci@vger.kernel.org Link: https://lore.kernel.org/all/DJHPRE4TGGT8.BUTMYOF5YE05@nvidia.com/ Signed-off-by: Zhi Wang --- rust/helpers/pci.c | 8 ++++++++ rust/kernel/pci.rs | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/rust/helpers/pci.c b/rust/helpers/pci.c index e44905317d75..4ebf256dff23 100644 --- a/rust/helpers/pci.c +++ b/rust/helpers/pci.c @@ -24,6 +24,14 @@ __rust_helper bool rust_helper_dev_is_pci(const struct d= evice *dev) return dev_is_pci(dev); } =20 +#ifndef CONFIG_PCI_IOV +__rust_helper unsigned int +rust_helper_pci_sriov_get_totalvfs(struct pci_dev *pdev) +{ + return pci_sriov_get_totalvfs(pdev); +} +#endif + #ifndef CONFIG_PCI_MSI __rust_helper int rust_helper_pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs, diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs index c6d6bd8f251d..9f19ccd5905c 100644 --- a/rust/kernel/pci.rs +++ b/rust/kernel/pci.rs @@ -25,6 +25,7 @@ use core::{ marker::PhantomData, mem::offset_of, + num::NonZero, ptr::{ addr_of_mut, NonNull, // @@ -452,6 +453,18 @@ pub fn pci_class(&self) -> Class { } =20 impl<'a> Device> { + /// Returns the total number of VFs, or [`None`] if SR-IOV is not avai= lable. + #[inline] + pub fn sriov_get_totalvfs(&self) -> Option> { + // SAFETY: `self.as_raw()` is a valid pointer to a `struct pci_dev= `. + let total_vfs =3D unsafe { bindings::pci_sriov_get_totalvfs(self.a= s_raw()) }; + + // CAST: The C function returns `unsigned int`, but the value orig= inates + // from TotalVFs/driver_max_VFs (which are defined as `u16`), so t= his cast + // cannot truncate. + NonZero::new(total_vfs as u16) + } + /// Enable memory resources for this device. pub fn enable_device_mem(&self) -> Result { // SAFETY: `self.as_raw` is guaranteed to be a pointer to a valid = `struct pci_dev`. --=20 2.53.0 From nobody Fri Jul 24 23:30:38 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011037.outbound.protection.outlook.com [40.93.194.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0B3E83B47D0 for ; Wed, 22 Jul 2026 07:40:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784706012; cv=fail; b=K7uZDVqXxfnU93hsVl9wtL0O5j8LzyseBpt/Z36mX1Jde2OWz+mNi3vU0fzPjD0NGMtvs+p7NX785rlB7Y/DsnNSmJBH+ugG7vN0H9k/cclOEP6sqgnw9ogHNiusa/K69t3kIZdL3zJUuoEObyKb42x5agazD0qck+xD4YLeUYM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784706012; c=relaxed/simple; bh=nejxH+98rRQ7HkcnlxUV5lVuYFfeY1fpgbC0mMbGIEM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qLbBQQu+92/QnPA9pjtoVq4kwXH1ciszKDFiWQijlNKjj5Ud+QCHjm9y5V6d5Kc3oGWGHJTI32s4JRFJzDLpuhj0ar62vE77st02maNcDVG984FD0s7TtzUTGshQNGIMtFUDFfGRNDIqpVf9+ltglfF2BnQqDepaaMHl7lWorys= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=L2wTbAJC; arc=fail smtp.client-ip=40.93.194.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="L2wTbAJC" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NqbzQQDuf3QjzlLxmfOj5Qkz3hThQGEYqDQ3ZPR9b7WrkSihoqt5k77D9PXqDTRBskZdMzUgefS2jiJWvjOi2U9+UNcEVrbCyfl18j+2+1s13B6+leCDV8zgbjeqoAeh3RGFaFnHZVAK2DELfzy4tWphg1A7Mu6q1NjqJ7SMdtiNppP3+cVNevD9k4uUe6cLalCZGfX6LBrWuUKdRg3vBhK0/IVgUaaL9VINViOqz+tIZ/mIoc4SWeATrJ+Hl6RRYYYPPl9iRrMjXmLT1pwv+AZeDjv3+bEEuCwGpc/yi4k03QYFeFe/mVI1ZowPrd72ym72nPRomwfDRYV/XdK7SQ== 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=/VXVNvZidTR5SAqvjoXAFOaoGThKeCvB0fPUObuPF7s=; b=BOKuqJHVFpu10H3jq9CU2MDP34hzjQ+zBMdy2VMWiiWdHuTXi5/ijzWh7lLf/O8tttYWvT0UfdYH9V3hVihAir+FbOTtHx4Up6txoYuhPA7SFkAlYryjyLZP2bY1lYw4ELsz5WpDD0rALUPuMjIdj4whiLo/Ak8nGsqWKSDIPg/Fb50Go3trzSEyr6DW1kP430FO84EYNZXWi4qHGD+a3BjNsI/9CP1lTnHew44UQiaBY3xalZ+OaYEteUV7IxIPQNXLUM9L7uDLcbeFdoxdt0a1xxXYcm3831pRhAeiLSF9Prj0wvb+KicSoTs//EKm56wCGAdBNLnXP7Yv793ZNg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=kernel.org 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) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/VXVNvZidTR5SAqvjoXAFOaoGThKeCvB0fPUObuPF7s=; b=L2wTbAJCGg2BS536xKy+dvR//BKZp6T6Mt9mLQg4D76scwyVxlz8Z8j8X7KhlqEej6275O9UOata1Y/kD0njDF/k3mepqfmoIlhoBknGjbuMXJiZm1pFTJtie2F0ZOccs6nAF66ilLWbuY9pb32DikknEwKZnf0YTHFVm+7NBTI1mQHw/bgO7B0UKJTdTGc8TJcV3S79QpucNxkiQGkc6EYPm5Rx2rXS2cuY6Xhe0Oh933iQQMx1JU6aANrjrxB8qUTWK+MySEv+JFrYqn3Twlee0fLtToFVdaCnYw6SKo0SWBP2YUYHumSHn7i3tusrjA6uRlV75iuLHIitUVMaqA== Received: from SJ0PR05CA0171.namprd05.prod.outlook.com (2603:10b6:a03:339::26) by IA0PR12MB7752.namprd12.prod.outlook.com (2603:10b6:208:442::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Wed, 22 Jul 2026 07:40:03 +0000 Received: from BY1PEPF0001AE1A.namprd04.prod.outlook.com (2603:10b6:a03:339:cafe::87) by SJ0PR05CA0171.outlook.office365.com (2603:10b6:a03:339::26) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Wed, 22 Jul 2026 07:40:02 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by BY1PEPF0001AE1A.mail.protection.outlook.com (10.167.242.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Wed, 22 Jul 2026 07:40:02 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Wed, 22 Jul 2026 00:39:48 -0700 Received: from drhqmail202.nvidia.com (10.126.190.181) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Wed, 22 Jul 2026 00:39:48 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Wed, 22 Jul 2026 00:39:42 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang Subject: [PATCH v5 3/6] gpu: nova-core: read vGPU mode from FSP via PRC protocol Date: Wed, 22 Jul 2026 10:39:10 +0300 Message-ID: <20260722073913.1807677-4-zhiw@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260722073913.1807677-1-zhiw@nvidia.com> References: <20260722073913.1807677-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PEPF0001AE1A:EE_|IA0PR12MB7752:EE_ X-MS-Office365-Filtering-Correlation-Id: 333a6b99-d61c-411b-44d5-08dee7c470d1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|23010399003|82310400026|1800799024|36860700016|6133799003|56012099006|11063799006|10067099003|18002099003|22082099003|3023799007; X-Microsoft-Antispam-Message-Info: B0LjDxQhHPEZfFyrJ9+HfzwbMvQnB88UW/nJfUeypQBGB3Qpmarml3Fog8BYmCfJcQI7byI9mT78NioYgQV7ddVLfw8yjaM8vGovHcCF7gSThoGHU6RdhP1caGtfVbUI3kcu9gTtj55pYp+KVRbg5GGNgw3JbIo/D17EfsuZJqq9ctThGwtVfBC2fkBwTXPXGYetRIbI1k9bPiOf2rngWWaZgHcMh9+UF6bJ4DcvClv39hiZyOBMG9TsT/3hT5mYt3Ly1JNGzGDx+MpIzxyS7KIIlD6q5lTFTIT0cC+QKkrcuCwrNf18Wu82CG8fNUSudzjFwzAF8nOw6klmvE6zSXr8snJN/pDmi74NwfQb0Q2LMnL2NHr6GLnvFg5c0MqqgXMCCpG/yerKkkAw4OzdkowuTZrTsJqwQhoXarFIXxUiFSGVO/ulzW2OCRxpoE/w/5V4GpUe3ZjVz84e1viS0PU2j8yv7VkVLwqWt9za0PKBWdreun74nqeIHMc7q+kytle7JEiCAdjc5hcwa3cEZBlxSv2YMwVmc3HrKgLA9JmmdV7yQQmr25xzhFbA8cMez8NCq0fhZ61rveeZgQVEKlAoi3S6OT6ntIOcsFdVPJpOAvVTEcp+wQsRI2G68n+oBE1SJXM60vvvwEXSGVH3zjWILzhOisxdllTY1k+CmKKP232fG2thEyThn0HG9e65lerMctbBnNXjpUw7tq0cyQ== X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(7416014)(376014)(23010399003)(82310400026)(1800799024)(36860700016)(6133799003)(56012099006)(11063799006)(10067099003)(18002099003)(22082099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +QGe8Pj9UsIubKMgQdz4DBZ/ogv1JJ284j6a45JnfzWwNRLeM1W07GTb7Y7OHZm1oDgk4MpKAMdlL8bg2S6RkoOf+jMafr/x0slcZOePnnOlTD6RlxE4jfAXNHLfH0L2qzfHVvuBPv4qf6tA7Q3dvgsMwu9aUqPn9YjW2MUYm5Bb9/CfMs6+7H5Ay+sgyyd0CgztrLXQFtimA9ZtS/dr2eH6eoIOx0X+Jd1U/2LhUyDSnWGQnagOrZG8e0OPXq2FU40dIcckM1+8FM86g+dOoNbfz8syFfIRouIYcpp/JWbwBiwlditwOSm2Jm7fZyHtWRITMuA46lHbWz3dqzulvsI/0TlmNaLmrwPQ19909DzS/JL5zaoQci802ZFqraKFCzPSd7vBjkquAPHW5+SnxI25iZXbA6O8TRvqmZDFMaafU+jq5MmZzyyQnGwuCTnW X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2026 07:40:02.5354 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 333a6b99-d61c-411b-44d5-08dee7c470d1 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.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BY1PEPF0001AE1A.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB7752 Content-Type: text/plain; charset="utf-8" vGPU boot needs to know whether firmware reports vGPU mode as active. FSP's Management Partition exposes PRC (Product Reconfiguration Control) as an API for reading device configuration knobs without firmware updates. The vGPU mode knob is one such configuration value. Add typed PRC request and response payloads for the vGPU mode object, add the PRC NVDM type, and parse the returned knob value into VgpuMode. Signed-off-by: Zhi Wang Reviewed-by: Alexandre Courbot --- drivers/gpu/nova-core/fsp.rs | 173 ++++++++++++++++++++++++++++++++++ drivers/gpu/nova-core/mctp.rs | 2 + 2 files changed, 175 insertions(+) diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index afbd75879d16..3a6b02f0dc11 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -52,6 +52,56 @@ =20 mod hal; =20 +/// PRC message sub-command. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u8)] +enum PrcMessageSubcmd { + /// Read a PRC knob value. + Read =3D 0x0c, +} + +impl From for u8 { + fn from(value: PrcMessageSubcmd) -> Self { + value as u8 + } +} + +/// PRC object identifier. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u8)] +enum PrcObjectId { + /// vGPU mode configuration knob. + VgpuMode =3D 0x29, +} + +impl From for u8 { + fn from(value: PrcObjectId) -> Self { + value as u8 + } +} + +kernel::impl_flags!( + /// PRC request flags. + #[derive(Clone, Copy, Default, PartialEq, Eq)] + struct PrcFlags(u8); + + /// Individual PRC request flag. + #[derive(Clone, Copy, PartialEq, Eq)] + enum PrcFlag { + /// Request the active knob value for the current boot. + Active =3D 1 << 1, + } +); + +/// vGPU operating mode as reported by FSP via the PRC protocol. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub(crate) enum VgpuMode { + /// vGPU support is disabled on this GPU. + Disabled, + /// vGPU support is enabled on this GPU. + Enabled, +} + /// FSP command response payload (`NVDM_PAYLOAD_COMMAND_RESPONSE`). #[repr(C, packed)] #[derive(Clone, Copy)] @@ -61,6 +111,62 @@ struct NvdmPayloadCommandResponse { error_code: u32, } =20 +/// PRC message payload. +/// +/// Sent to FSP to query or modify a device configuration knob. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct NvdmPayloadPrc { + sub_message_id: u8, + flags: u8, + object_id: u8, + reserved: u8, +} + +impl NvdmPayloadPrc { + /// Constructs a PRC payload from typed protocol fields. + fn new(subcmd: PrcMessageSubcmd, object_id: PrcObjectId, flags: PrcFla= gs) -> Self { + Self { + sub_message_id: subcmd.into(), + flags: flags.into(), + object_id: object_id.into(), + reserved: 0, + } + } +} + +// SAFETY: NvdmPayloadPrc is a packed C struct with only integral fields. +unsafe impl AsBytes for NvdmPayloadPrc {} + +/// PRC response payload containing the knob state value. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct NvdmPayloadPrcResponse { + value_low: u8, + value_high: u8, + reserved1: u8, + reserved2: u8, +} + +impl NvdmPayloadPrcResponse { + /// Returns the PRC knob value as a little-endian 16-bit integer. + fn value(self) -> u16 { + u16::from(self.value_low) | (u16::from(self.value_high) << 8) + } +} + +impl TryFrom for VgpuMode { + type Error =3D kernel::error::Error; + + fn try_from(value: NvdmPayloadPrcResponse) -> Result { + match value.value() { + 0 =3D> Ok(VgpuMode::Disabled), + 1 =3D> Ok(VgpuMode::Enabled), + _ =3D> Err(EINVAL), + } + } +} + /// Common MCTP and NVDM headers shared by all FSP messages. #[repr(C, packed)] #[derive(Clone, Copy)] @@ -96,6 +202,17 @@ struct FspResponseHeader { // SAFETY: FspResponseHeader is a packed C struct with only integral field= s. unsafe impl FromBytes for FspResponseHeader {} =20 +/// Complete FSP PRC response including the knob state payload. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct FspPrcResponse { + header: FspResponseHeader, + prc_data: NvdmPayloadPrcResponse, +} + +// SAFETY: FspPrcResponse is a packed C struct with only integral fields. +unsafe impl FromBytes for FspPrcResponse {} + /// Trait implemented by types representing a message to send to FSP. /// /// This provides [`Fsp::send_sync_fsp`] with the information it needs to = send @@ -183,10 +300,35 @@ fn new<'a>( // bytes are initialized. unsafe impl AsBytes for FspCotMessage {} =20 +/// Complete FSP PRC message. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct FspPrcMessage { + header: FspMessageHeader, + prc: NvdmPayloadPrc, +} + +impl FspPrcMessage { + /// Constructs a PRC message. + fn new(subcmd: PrcMessageSubcmd, object_id: PrcObjectId, flags: PrcFla= gs) -> Self { + Self { + header: FspMessageHeader::new(NvdmType::Prc), + prc: NvdmPayloadPrc::new(subcmd, object_id, flags), + } + } +} + +// SAFETY: FspPrcMessage is a packed C struct with only integral fields. +unsafe impl AsBytes for FspPrcMessage {} + impl MessageToFsp for FspCotMessage { const NVDM_TYPE: NvdmType =3D NvdmType::Cot; } =20 +impl MessageToFsp for FspPrcMessage { + const NVDM_TYPE: NvdmType =3D NvdmType::Prc; +} + /// Bundled arguments for FMC boot via FSP Chain of Trust. pub(crate) struct FmcBootArgs { chipset: Chipset, @@ -342,6 +484,37 @@ fn send_sync_fsp(&mut self, dev: &device::Device, m= sg: &M) -> Result Ok(response_buf) } =20 + /// Reads the active vGPU mode from FSP using the PRC protocol. + /// + /// Queries FSP's Management Partition for the active vGPU mode knob v= alue. + #[expect(dead_code)] + pub(crate) fn read_vgpu_mode( + &mut self, + dev: &device::Device, + ) -> Result { + let msg =3D KBox::new( + FspPrcMessage::new( + PrcMessageSubcmd::Read, + PrcObjectId::VgpuMode, + PrcFlags::from(PrcFlag::Active), + ), + GFP_KERNEL, + )?; + + let response_buf =3D self.send_sync_fsp(dev, &*msg)?; + let (prc_response, _) =3D + FspPrcResponse::from_bytes_prefix(&response_buf[..]).ok_or_els= e(|| { + dev_err!(dev, "PRC response too small: {}\n", response_buf= .len()); + EIO + })?; + + let prc_data =3D prc_response.prc_data; + + VgpuMode::try_from(prc_data).inspect_err(|_| { + dev_err!(dev, "Unexpected vGPU mode value: {:#x}\n", prc_data.= value()); + }) + } + /// Boots GSP FMC via FSP Chain of Trust. /// /// Builds the CoT message from the pre-configured [`FmcBootArgs`], se= nds it diff --git a/drivers/gpu/nova-core/mctp.rs b/drivers/gpu/nova-core/mctp.rs index acc2abbd4b0c..90c642c91a72 100644 --- a/drivers/gpu/nova-core/mctp.rs +++ b/drivers/gpu/nova-core/mctp.rs @@ -22,6 +22,8 @@ /// NVDM message type identifiers carried over MCTP. #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub(crate) enum NvdmType with TryFrom> { + /// PRC (Product Reconfiguration Control) message. + Prc =3D 0x13, /// Chain of Trust boot message. Cot =3D 0x14, /// FSP command response. --=20 2.53.0 From nobody Fri Jul 24 23:30:38 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010069.outbound.protection.outlook.com [52.101.46.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DD104446069 for ; Wed, 22 Jul 2026 07:40:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784706019; cv=fail; b=oW28FX4xO0dG+cTqHwSmmkMBdhhgiiZ+Df8gE3nh5Oiv5Cgq63xuujmkd3f1TlCAS9kU0I2VN55bs4uR1ksRHAfLdYSOvkJ6MoBa7Qxk91aehjoxcJbeR2qXKm61tSrEv+tF6OEFB5VwykOnkpp981U6TyZo1lwiLDbU4ISb9m0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784706019; c=relaxed/simple; bh=5XWM2R24Ui6LM0a12AwuleRITIGgerh8dbG2xLqkoBw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=j5p/dVNwmJe8m1h1npk12AER6xfu40vaswwtoOI17ZXpbsiWu4ZqcuH0mycmdKO2hiRwdPuRCamTrlb19/TTpjLj/z8Q9Rc3vPZMijOP8avR7QPv8RPRqHSHK5Rb47Y0lgPd3IHt20BZNoAMtI4WkpSK3erSG1ON+7C4uVa5HpA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=otjz/YJ9; arc=fail smtp.client-ip=52.101.46.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="otjz/YJ9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zTFmq4GDoVuAeKgXiY2vh2ai1wuF8MQEdY+knWm3Nr6KwXWLW+Db41rHMZmH76mvcQ8XwKB8RXgRfIEon5+p89+y+C8OQ3XB7imVl4XIePs/ZcmnuOWFhtpPDthrmYE2cW5UKyn35LI+dQGYHtWqjWrau/hdd6ll2UAEMkXYhd+4DzGHWWX9yALDHMhgkny0BavRH5OUTD7+OmTIcYdJqv/dUPDkcBwGq4RLNDsf+NJsaXKCeSsHPjo6VPEEWZ1878Ld5tqyQkANWu7TlsibwBoMvByA/Tlv08Xp1ooPEu4A+rGL7l275EtKr8uykVGNa/VeHkgTDw0Nh2g0M5xaqQ== 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=414dHjPJ7FT0Hn/WTVPtAqMgZDPH6Zw5ZM3hFqi7d+4=; b=dmYXlMBukZAIpuCX9Ks0jPl2bC3sCJP8VUGo5qXvINu7LyU83QHGwrtZOub0fC76P5bqu+wBQmVN1ssM1Ywi41VtH6Klpfxvu4zzebo6K5WiMI25XkyQIGRBMrTeLMJ8eAv/y/ivt2A6OnPzzq+9GatLb/9kcBu2/3WBGjp/a2zGXFNXMkU/RKIgKMTrM6boUSyHRB9hrdBt9iKyJR/G1IX2aXqH991BHqYwHBV2tSCjtC7kw/aITytDF7tdwqep5hJACr6UL13YU+XdkUfp/zmIDN+II3Y+he6Gl4/gcjwpA2HSqr1sJhucZSsD1LuaF+SZFxqAN+ueGhIdlyU45w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=kernel.org 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) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=414dHjPJ7FT0Hn/WTVPtAqMgZDPH6Zw5ZM3hFqi7d+4=; b=otjz/YJ9UG6YuSqtCtbPtJL0y+6DQ5HdGZwi2VSKlu9eY4zCzqDhPxtJkrpoF+3vrMCxtf8TNM0A929VfdY3DB41FPjSZC63oET2riXFFnqkJvajjBb7Bkc5WZHg+JABW7eIMbimJDs61fhMl3T7k6wDIuLWf+h91Y3KyivLHlVkQihIF7BXr483TbrZHzyRNr0ON8xUZ4HBJCLsmEaBMgDG+Db2QtCTgYDVwJBmox/cmrjrevIXHKkiimRiIq02OK3b3Am4zh7GUtmRupNAYLy0RRI/8E0gsuxkidT0bgAtkylz7qjIPnFPjxZIa/AD1H8gCwCWQJ1jYedQuy8HJw== Received: from SJ0PR03CA0127.namprd03.prod.outlook.com (2603:10b6:a03:33c::12) by CH2PR12MB4232.namprd12.prod.outlook.com (2603:10b6:610:a4::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Wed, 22 Jul 2026 07:40:10 +0000 Received: from BY1PEPF0001AE19.namprd04.prod.outlook.com (2603:10b6:a03:33c:cafe::8f) by SJ0PR03CA0127.outlook.office365.com (2603:10b6:a03:33c::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Wed, 22 Jul 2026 07:40:09 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by BY1PEPF0001AE19.mail.protection.outlook.com (10.167.242.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Wed, 22 Jul 2026 07:40:09 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Wed, 22 Jul 2026 00:39:56 -0700 Received: from drhqmail202.nvidia.com (10.126.190.181) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Wed, 22 Jul 2026 00:39:55 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Wed, 22 Jul 2026 00:39:48 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang Subject: [PATCH v5 4/6] gpu: nova-core: detect and store vGPU state Date: Wed, 22 Jul 2026 10:39:11 +0300 Message-ID: <20260722073913.1807677-5-zhiw@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260722073913.1807677-1-zhiw@nvidia.com> References: <20260722073913.1807677-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PEPF0001AE19:EE_|CH2PR12MB4232:EE_ X-MS-Office365-Filtering-Correlation-Id: b6cadff6-d413-4ce2-348c-08dee7c47524 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|36860700016|82310400026|1800799024|23010399003|3023799007|11063799006|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 0CdHJ7oToVBrAMUdOa8j7YNcw32ksWgtvvTLmyeH39hDcyyYi+50RRs4bYk5qpj/k6LoFuvNvSjd6MygxikS+OKu4neXIxg7D/FQfb3fAJxQ3Vh9ban2AckeG15GzZ1VCIBL9GXVrPqrBoAEinVOqGK4tv3xJfldn5yxBUNp5zeQ84AMAvK8Xr6fGKs+xQQZ9yVO/QEd3TmZuBtm8v5VX1Tm7ruFdlPJ0qrEJY3JGBxhP8cvzkU20TJVWefED/XeSQOS0YDRt+GhM7Ow4cDSayN3CVpgJ79qcnxffLxd73KRyQ/YEdfQcYhcX3mT1/4BvEdQ2MTBb42wK16YxLcwO4xw2qDhttqkUBzhENOfOpA0uuTU0cou+31L2lNMOqndT6n3iQAYQMp5k79Wgryt9IHTN6P0vKwx0Zy9Kn8SmnMfFTvwbH8aZT9YDj54JNGH3QzJpTT8iOZiDgHyfX2pEYQYk8JV+RB9rsu8/ATywytTtBnSrHCUWmDJlJKdv5rS3KTQMvw1pr85iBtPlWaE/fmzDTwXwIj2v+Ev6IDjjvFx7pxS7ETmhLCjtELo5/aSzxafmexyUtRk+dY1WqY8tSh99vOZsVRvKzRuySdprHip0xWvsRojUQv/nzyLfd3bJLjuI6P4F0bVL+WbUmrOrCvZmknFsgI4ql9jB4JBKy0geI5lpZgeZeKn52jJ2jva99y8FvV+6rqOjYSk+8CVJg== X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(7416014)(36860700016)(82310400026)(1800799024)(23010399003)(3023799007)(11063799006)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Ccx434NgsT370ytvH18CtAaIK3uSmSjM9zcugTKbREFPTbIFx/wO9xPT8DnTH0jLHJfGBo6lHvNjWdp2Ox35QNYqvpTR7b/dFhCNuT4mljAszhkZK69BnHNiDA+KMcEusqE2C4zaZIV7K+cpGi8ZGT7CQqn0r5L+Lh3TFXSFu07aHlU4/qMXS6WIrq6hWJpLHKG4E076C1L7nw6uQWqOluRIO68mp1rcpYzCsWCcQ8lCNEqgqLMYM+mBVy7mHn6oC87+wZVM/H+X2v8+0h38iM1oKEsL93j/XuU0V2FyqKJeycuaAHJWumJtOcGthqgHqbFTgk1MlcDEc6vcLaLbkdsfYs82KIkqslFC/yKwFVOCCgTXJqwE/vxT1Qt8wGJvrDQ9fLo3zHDlUtfJyrdmizX8JorLUjSwCxMZdXLoIhmXetge3gcY5Otk2FSNi7L6 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2026 07:40:09.7972 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b6cadff6-d413-4ce2-348c-08dee7c47524 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.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BY1PEPF0001AE19.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4232 Content-Type: text/plain; charset="utf-8" GSP boot needs a stable view of vGPU state before it starts building the boot-time data structures that depend on SR-IOV and firmware policy. That state must be derived once from the PCI VF count and the FSP PRC vGPU mode knob before booting GSP. Add VgpuManager to detect and retain the vGPU state during GPU construction. Keep the manager separate from the detected state because later vGPU milestones will add vGPU resources and lifecycle state to it. Keep the vGPU capability gate local to the vGPU module with per-chip HAL modules. Treat failures to detect the optional vGPU state as disabled so they do not prevent a bare-metal probe, and log both the failure and the detected state where the manager is constructed. Cc: Alexandre Courbot Signed-off-by: Zhi Wang Reviewed-by: Alexandre Courbot --- drivers/gpu/nova-core/fsp.rs | 1 - drivers/gpu/nova-core/gpu.rs | 7 ++ drivers/gpu/nova-core/gsp.rs | 3 + drivers/gpu/nova-core/nova_core.rs | 1 + drivers/gpu/nova-core/vgpu.rs | 93 +++++++++++++++++++++++++ drivers/gpu/nova-core/vgpu/hal.rs | 25 +++++++ drivers/gpu/nova-core/vgpu/hal/gb202.rs | 15 ++++ drivers/gpu/nova-core/vgpu/hal/tu102.rs | 15 ++++ 8 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/nova-core/vgpu.rs create mode 100644 drivers/gpu/nova-core/vgpu/hal.rs create mode 100644 drivers/gpu/nova-core/vgpu/hal/gb202.rs create mode 100644 drivers/gpu/nova-core/vgpu/hal/tu102.rs diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index 3a6b02f0dc11..abc161c4ba96 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -487,7 +487,6 @@ fn send_sync_fsp(&mut self, dev: &device::Device, ms= g: &M) -> Result /// Reads the active vGPU mode from FSP using the PRC protocol. /// /// Queries FSP's Management Partition for the active vGPU mode knob v= alue. - #[expect(dead_code)] pub(crate) fn read_vgpu_mode( &mut self, dev: &device::Device, diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 442c0979f9c6..42a4cd7971fa 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -30,6 +30,7 @@ GspBootContext, // }, regs, + vgpu::VgpuManager, // }; =20 mod hal; @@ -267,6 +268,8 @@ struct GspResources<'gpu> { // TODO: use different resource types for each boot method, and make t= he relevant Gsp methods // generic against them. fsp: Option>, + /// vGPU state detected before GSP boot. + vgpu: VgpuManager, /// GSP runtime data. #[pin] gsp: Gsp, @@ -311,6 +314,7 @@ fn drop(self: Pin<&mut Self>) { gsp_falcon: &*this.gsp_falcon, sec2_falcon: &*this.sec2_falcon, fsp: this.fsp.as_mut(), + vgpu: &*this.vgpu, }, bundle, ) @@ -364,6 +368,8 @@ pub(crate) fn new( =20 fsp: Fsp::try_new(dev, bar, spec.chipset)?, =20 + vgpu: VgpuManager::new(pdev, spec.chipset, fsp.as_mut()), + gsp <- Gsp::new(pdev), =20 // This member must be initialized last, so the `UnloadBun= dle` can never be dropped @@ -376,6 +382,7 @@ pub(crate) fn new( gsp_falcon, sec2_falcon, fsp: fsp.as_mut(), + vgpu, })?, }), =20 diff --git a/drivers/gpu/nova-core/gsp.rs b/drivers/gpu/nova-core/gsp.rs index f38630026e5d..0480881d437f 100644 --- a/drivers/gpu/nova-core/gsp.rs +++ b/drivers/gpu/nova-core/gsp.rs @@ -51,6 +51,7 @@ }, }, num, + vgpu::VgpuManager, // }; =20 pub(crate) const GSP_PAGE_SHIFT: usize =3D 12; @@ -69,6 +70,8 @@ pub(crate) struct GspBootContext<'ctx, 'gpu> { pub(crate) gsp_falcon: &'ctx Falcon<'gpu, GspFalcon>, pub(crate) sec2_falcon: &'ctx Falcon<'gpu, Sec2Falcon>, pub(crate) fsp: Option<&'ctx mut Fsp<'gpu>>, + #[expect(dead_code)] + pub(crate) vgpu: &'ctx VgpuManager, } =20 impl<'ctx, 'gpu> GspBootContext<'ctx, 'gpu> { diff --git a/drivers/gpu/nova-core/nova_core.rs b/drivers/gpu/nova-core/nov= a_core.rs index a61406ba5c0b..35a8b1214b0e 100644 --- a/drivers/gpu/nova-core/nova_core.rs +++ b/drivers/gpu/nova-core/nova_core.rs @@ -23,6 +23,7 @@ mod regs; mod sbuffer; mod vbios; +mod vgpu; =20 pub(crate) const MODULE_NAME: &core::ffi::CStr =3D ::NAME; =20 diff --git a/drivers/gpu/nova-core/vgpu.rs b/drivers/gpu/nova-core/vgpu.rs new file mode 100644 index 000000000000..71fd0fe879c2 --- /dev/null +++ b/drivers/gpu/nova-core/vgpu.rs @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: GPL-2.0 + +use core::num::NonZero; + +use kernel::{ + device, + pci, + prelude::*, // +}; + +use crate::{ + fsp::{ + Fsp, + VgpuMode, // + }, + gpu::Chipset, // +}; + +mod hal; + +/// vGPU state detected during GPU construction. +#[derive(Debug, Clone, Copy)] +pub(crate) enum VgpuState { + /// vGPU mode is not enabled for this boot. + Disabled, + /// vGPU mode is enabled for this boot. + Enabled { + /// Total number of SR-IOV VFs supported by this device. + #[expect(dead_code)] + total_vfs: NonZero, + }, +} + +/// vGPU state manager. +pub(crate) struct VgpuManager { + state: VgpuState, +} + +impl VgpuManager { + /// Creates a vGPU manager by querying SR-IOV and the FSP PRC vGPU kno= b. + pub(crate) fn new( + pdev: &pci::Device>, + chipset: Chipset, + fsp: Option<&mut Fsp<'_>>, + ) -> Self { + let state =3D Self::detect_state(pdev, chipset, fsp).unwrap_or_els= e(|e| { + dev_warn!( + pdev, + "vGPU state detection failed: {:?}; disabling vGPU\n", + e + ); + VgpuState::Disabled + }); + dev_dbg!(pdev, "vGPU state: {:?}\n", state); + + Self { state } + } + + /// Detects the vGPU state from the chipset, SR-IOV capability and FSP= PRC knob. + fn detect_state( + pdev: &pci::Device>, + chipset: Chipset, + fsp: Option<&mut Fsp<'_>>, + ) -> Result { + if !hal::vgpu_hal(chipset).supports_vgpu() { + return Ok(VgpuState::Disabled); + } + + let Some(total_vfs) =3D pdev.sriov_get_totalvfs() else { + return Ok(VgpuState::Disabled); + }; + + if total_vfs.get() < 2 { + // The current vGPU path does not support single-VF SR-IOV dev= ices yet. + // Treat one total VF as vGPU-disabled for now; single-VF supp= ort can relax + // this gate once the manager handles that topology. + return Ok(VgpuState::Disabled); + } + + let fsp =3D fsp.ok_or(ENODEV)?; + + match fsp.read_vgpu_mode(pdev.as_ref())? { + VgpuMode::Enabled =3D> Ok(VgpuState::Enabled { total_vfs }), + VgpuMode::Disabled =3D> Ok(VgpuState::Disabled), + } + } + + /// Returns the detected vGPU state for this boot. + #[expect(dead_code)] + pub(crate) fn state(&self) -> VgpuState { + self.state + } +} diff --git a/drivers/gpu/nova-core/vgpu/hal.rs b/drivers/gpu/nova-core/vgpu= /hal.rs new file mode 100644 index 000000000000..456f8fe27582 --- /dev/null +++ b/drivers/gpu/nova-core/vgpu/hal.rs @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-2.0 + +use crate::gpu::{ + Architecture, + Chipset, // +}; + +mod gb202; +mod tu102; + +pub(super) trait VgpuHal { + /// Returns whether this chipset can support vGPU. + fn supports_vgpu(&self) -> bool; +} + +pub(super) fn vgpu_hal(chipset: Chipset) -> &'static dyn VgpuHal { + match chipset.arch() { + Architecture::BlackwellGB20x =3D> gb202::GB202_HAL, + Architecture::Turing + | Architecture::Ampere + | Architecture::Hopper + | Architecture::Ada + | Architecture::BlackwellGB10x =3D> tu102::TU102_HAL, + } +} diff --git a/drivers/gpu/nova-core/vgpu/hal/gb202.rs b/drivers/gpu/nova-cor= e/vgpu/hal/gb202.rs new file mode 100644 index 000000000000..3add8af26616 --- /dev/null +++ b/drivers/gpu/nova-core/vgpu/hal/gb202.rs @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +use crate::vgpu::hal::VgpuHal; + +struct Gb202; + +impl VgpuHal for Gb202 { + fn supports_vgpu(&self) -> bool { + true + } +} + +const GB202: Gb202 =3D Gb202; +pub(super) const GB202_HAL: &dyn VgpuHal =3D &GB202; diff --git a/drivers/gpu/nova-core/vgpu/hal/tu102.rs b/drivers/gpu/nova-cor= e/vgpu/hal/tu102.rs new file mode 100644 index 000000000000..baeea3ac5754 --- /dev/null +++ b/drivers/gpu/nova-core/vgpu/hal/tu102.rs @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +use crate::vgpu::hal::VgpuHal; + +struct Tu102; + +impl VgpuHal for Tu102 { + fn supports_vgpu(&self) -> bool { + false + } +} + +const TU102: Tu102 =3D Tu102; +pub(super) const TU102_HAL: &dyn VgpuHal =3D &TU102; --=20 2.53.0 From nobody Fri Jul 24 23:30:38 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010049.outbound.protection.outlook.com [52.101.46.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBDE33B47D0 for ; Wed, 22 Jul 2026 07:40:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784706019; cv=fail; b=eIN4Wff58NOItLPqiz0V/hTf878m8cMfJUZfG4ap8HCiRQaji1axbL+KwBPhwdPzGZGDcKh/ER25nDuA0KhujjfFhehEU6iRr+P0hM99TBg0c2puWGt/N6zga/m9CERmJMHkOpg1mYvI5UwjjXKlCR2MCIWM3iRtQsLp/Rz8K2k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784706019; c=relaxed/simple; bh=C1drvNtyLS9h7JbHdYjUxXbDmelUr9xewzt6jqqIQI4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VOv4YBDnmNotSnOBs+9HPrWBCkNyTvtqa84amI2rabYrl04InpYLnLvGn0U4aoN1R/dFGBScsFvy82Y84FI0E2Ho9h2+mVpmHo6TE1fPQenyrl1tvh108Ed9cOPdt+OrBNb3+mJm5k4v0nJskaLX4rfrZtL8+sXN1enOfrTR4/Y= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=DIhjAeyr; arc=fail smtp.client-ip=52.101.46.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="DIhjAeyr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Cd23l4jxQds1ggniQsI9CuBXuZJ9N05RNb53/Lw+iABznYaCz1RUHGrlV0fWUNjKtFfEdy7znW12gg2EXu5wBXl8lvqC4/ifvpZRFssp0T7vZlqUYuCPrIFs+5sOhgCE6tVnInL/0272Zk5Tgr1Kvg94AIFlYBxjGEcFTbTi2oHfx2EHn779xFbn5K+cV5/qQm7Dh5b6XAYcZzuWKZbjcpG+wkUVQLUpR5YnhW+vzfu61GMGiw+61ARvI+gfQor5daz7xe5ev4JyyGDhwf9kG3hRz/byQP1MQiDs6dQ8jijbrKrC0Iw4HWPGhO395Ke0U5aTkPH7Q2qO65USNhJQmA== 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=SV7F217Xp8oXWwf76BEwETjDc4OENvYuOBY3OP6+OTY=; b=i3r4wrh90btrWHnkDUfoXvZ82ciauGZe4IMcvZDKCpjNUPJuLhJNOrEMnTHGOr+UKFOSgNIPJL2UoYGo09RD0J1vTNSvco3CXRttfQFuWHUVrf/+irhuHceFsQaHKE+FO+1FiOU5gfJSW2tIV1jhLb+P+yzJDHbPXHIhe/t49RqH5RuKiwhHzC/Im242zd8Gq18vZybhK/mAV/zTVVjLjrNGTEcV7Un+aCMMomH0xaO0ziZ0Nh3pWMHqs54Yvzep/Q3y3FtCRHvpeUXx7c1k22l9ARF9fvD9EszWLHOt86+G7YEe34ZbaNyLqiL+HoUhnNRvcoGY+ChSSwvI8PAIYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=kernel.org 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) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SV7F217Xp8oXWwf76BEwETjDc4OENvYuOBY3OP6+OTY=; b=DIhjAeyrFZ2UOGm7RFV8jDExBG6BmaLd1uNUshLpIyhj/0BUzofmzMv03W0fCc0bfdsTm5Mes6zQUvFygHfQcy1jP+lhdAjOWwT5mHO9IgZdjAvK8op0R90WA9B0e/rPsQFXkQHmT1JRZu35eA945CaF7oOy1FOR0VlxfPCLlt7oXe8ZA2vbDxrVYjxOWQDoR3QEvk67mhydiaJesbz/cv9J16b61CrGkRaksSfDVI6z2MEo8fubngHkXZTT3+orVpS6th1Y7kBPuDgDKmQqLEVqRnkkD4EZDEaAVCpv+PGJIW06PJlLcBDGarcbdA4Z3vP4sQh/nsls12/P1pEI7w== Received: from SJ0PR05CA0175.namprd05.prod.outlook.com (2603:10b6:a03:339::30) by SA0PR12MB4383.namprd12.prod.outlook.com (2603:10b6:806:94::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Wed, 22 Jul 2026 07:40:13 +0000 Received: from BY1PEPF0001AE1A.namprd04.prod.outlook.com (2603:10b6:a03:339:cafe::9) by SJ0PR05CA0175.outlook.office365.com (2603:10b6:a03:339::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Wed, 22 Jul 2026 07:40:13 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by BY1PEPF0001AE1A.mail.protection.outlook.com (10.167.242.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Wed, 22 Jul 2026 07:40:13 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Wed, 22 Jul 2026 00:40:03 -0700 Received: from drhqmail202.nvidia.com (10.126.190.181) 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.2562.20; Wed, 22 Jul 2026 00:40:02 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Wed, 22 Jul 2026 00:39:55 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang Subject: [PATCH v5 5/6] gpu: nova-core: set RMSetSriovMode for vGPU Date: Wed, 22 Jul 2026 10:39:12 +0300 Message-ID: <20260722073913.1807677-6-zhiw@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260722073913.1807677-1-zhiw@nvidia.com> References: <20260722073913.1807677-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PEPF0001AE1A:EE_|SA0PR12MB4383:EE_ X-MS-Office365-Filtering-Correlation-Id: 75651c3c-cfbe-4523-f6d3-08dee7c4778a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|23010399003|1800799024|82310400026|36860700016|22082099003|18002099003|3023799007|10067099003|11063799006|56012099006|6133799003; X-Microsoft-Antispam-Message-Info: Y1zh00XcXFh6jbaTO7WzZKkSov4HrMyEAsdPwSMkMyVFfs/TwsPvK815LHteBtGZfSvCacMWDcI25WEoGBvssOz5LlmzF9IEfsUh/Wk8uPw5eVPToS+GcbbMHUH/OXAcqA9gL/v8+Q2mV0VCYKOBmVwii/H168/8rf+yZDWXZ6dW/A0KKk9tUYHmHloATuk7cwGRdYo91x8N8CiTjyYV203M7wtCYWAJICfuvvnssuzLj+jQO9yhHCIO6XUaS2EY5CHeo24d8R3heJ7du04abHuKsSFBay55UAdQ1Yv2iquUulInSNSW1/ymgYrCM9j8SjN2haEo2HZbLGIcwj3uigUkFMcEREUpAS7my6ydtu6tA5d79phO8H5pBcuyo83nGOBOBUjc531psmbCMlxVls0GgVIJdfm8SHtgmo+53zDoV70nmdKv8hZfPCxjEJ3cNc4TPpxM8mvS/5BJHjC8eLTe9W/rm5IFbv2d+uhOY2S5mnMMh1d+i0Fe5XsUlxmyhKgtN1I+Sa44Qb5B0U1pVy5K7Tp5lqwzxVTJ1CI5DeRQ48uLGHC/nptJFPoUh4gJlcU2y+eJvMt8Dg4ojYvqWst4BZmHot8PE66H/Ul6atbEotWq9Hyt/BAJrfE45Adn/xEicEdnWWmoMu3yJem84ixFpXkk0JRVFl5NpczVd39YoHV91A5hVij70nx1UQfKurM4uGhNzk30Ze5xTfmN+Q== X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(7416014)(23010399003)(1800799024)(82310400026)(36860700016)(22082099003)(18002099003)(3023799007)(10067099003)(11063799006)(56012099006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PMdNslMeR2bCEzeL35nf+UcP3GqoF7z3eEMNEDbUj1pcJE2ao3Y9vAck1PCuoFfevyiRSsvhRl8+/hH+pznug0akaHahfr1UYZE6vnJqSI+3ktDDHFqVEQckWwOyy7INQhscOO4xRDWr3uzCDMteVRL+lTekqdEav2ikAd6XaUY+Dhe/4z6/ruBxzxBRoErkPT4r8CPzrcF2NGi8WIEbruAtKstZGcTf3rFahupAtrdo9dj4TR+++VymwsoZ50mvCcMQPyXKAFF776iQWKsEAbTh0CAqNjDECtRV7ct/2YJCnTS51OctVqGmi1ahGOjMg1v2YwOEqa1MjWyKD5tr3opXOw/ycyDY1qt++iUlb+dj7pWjs3o53O4JuGTatiBckLraYVHhbYqQh/sT15tNwEjkax5uoxo32LDyBjwi8Ed9nKcdcYqG9euuxdB0MD3n X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2026 07:40:13.7936 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 75651c3c-cfbe-4523-f6d3-08dee7c4778a 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.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BY1PEPF0001AE1A.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4383 Content-Type: text/plain; charset="utf-8" The GSP registry setup needs to advertise SR-IOV mode when nova-core boots GSP for an enabled vGPU configuration. Without the registry entry, GSP-RM is not told to initialize in the mode required by NVIDIA vGPU. Append RMSetSriovMode to the SetRegistry command when the vGPU state detected before GSP boot is enabled. Keep the existing registry entries unchanged for non-vGPU boots. Cc: Alexandre Courbot Signed-off-by: Zhi Wang Reviewed-by: Alexandre Courbot --- drivers/gpu/nova-core/gsp.rs | 1 - drivers/gpu/nova-core/gsp/boot.rs | 2 +- drivers/gpu/nova-core/gsp/commands.rs | 14 +++++++++++++- drivers/gpu/nova-core/vgpu.rs | 1 - 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/nova-core/gsp.rs b/drivers/gpu/nova-core/gsp.rs index 0480881d437f..70123dc54981 100644 --- a/drivers/gpu/nova-core/gsp.rs +++ b/drivers/gpu/nova-core/gsp.rs @@ -70,7 +70,6 @@ pub(crate) struct GspBootContext<'ctx, 'gpu> { pub(crate) gsp_falcon: &'ctx Falcon<'gpu, GspFalcon>, pub(crate) sec2_falcon: &'ctx Falcon<'gpu, Sec2Falcon>, pub(crate) fsp: Option<&'ctx mut Fsp<'gpu>>, - #[expect(dead_code)] pub(crate) vgpu: &'ctx VgpuManager, } =20 diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 6b7d00205000..a2e8342e7760 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -89,7 +89,7 @@ pub(crate) fn boot( self.cmdq .send_command_no_wait(bar, commands::SetSystemInfo::new(pdev, = chipset))?; self.cmdq - .send_command_no_wait(bar, commands::SetRegistry::new()?)?; + .send_command_no_wait(bar, commands::SetRegistry::new(ctx.vgpu= .state())?)?; =20 hal.post_boot(&self, ctx, &gsp_fw)?; =20 diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index 08380de39048..134f34b19174 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -34,6 +34,7 @@ }, }, sbuffer::SBufferIter, + vgpu::VgpuState, // }; =20 /// The `GspSetSystemInfo` command. @@ -72,7 +73,7 @@ pub(crate) struct SetRegistry { =20 impl SetRegistry { /// Creates a new `SetRegistry` command, using a set of hardcoded entr= ies. - pub(crate) fn new() -> Result { + pub(crate) fn new(vgpu_state: VgpuState) -> Result { let mut entries =3D KVec::new(); =20 // RMSecBusResetEnable - enables PCI secondary bus reset @@ -104,6 +105,17 @@ pub(crate) fn new() -> Result { GFP_KERNEL, )?; =20 + if matches!(vgpu_state, VgpuState::Enabled { .. }) { + // RMSetSriovMode - required when vGPU is enabled. + entries.push( + RegistryEntry { + key: "RMSetSriovMode", + value: 1, + }, + GFP_KERNEL, + )?; + } + Ok(Self { entries }) } } diff --git a/drivers/gpu/nova-core/vgpu.rs b/drivers/gpu/nova-core/vgpu.rs index 71fd0fe879c2..5359847e2eb9 100644 --- a/drivers/gpu/nova-core/vgpu.rs +++ b/drivers/gpu/nova-core/vgpu.rs @@ -86,7 +86,6 @@ fn detect_state( } =20 /// Returns the detected vGPU state for this boot. - #[expect(dead_code)] pub(crate) fn state(&self) -> VgpuState { self.state } --=20 2.53.0 From nobody Fri Jul 24 23:30:38 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012007.outbound.protection.outlook.com [40.93.195.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 80C4F471269 for ; Wed, 22 Jul 2026 07:40:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784706031; cv=fail; b=UIP2dIMg0USprdJHPsPFp+GhAr4RfguOQEeakJyXZFCgdFxN/wXaJrbGlszjF/3PW/iwv2sH0YdkTdFBb/wwedj/qLAonZVQFqWkN+QrYMyzcPFo2LjxU8K6tR0GEngVE4P7HuRtiLkouNkFJpI/nzM4TC/T+oLBZY1Nhckw5+Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784706031; c=relaxed/simple; bh=9UkxoMYjaoy6lJ+7xwX8Z7H4rwG34G4JweP27cqrV4Q=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WiHDKdL9qtnikuKnmBDKAzMHtKsGcJtCW5EaQynWwwV1qgsPggwIRZG123mPHeIl/iXkMFCM3Bummid74UL5OQ9R0g/ONhKO/AMZtrzhCad1CecPbzi1UJKnlifmfxdQRotSk2Rpr4TCHnl/TFMpU00hviTi+iVQjuR9WtYp6r0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=jCdL1/a9; arc=fail smtp.client-ip=40.93.195.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="jCdL1/a9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YB+oPI/j54DJG7Kueu9N0TsnUADFRuzIctSA6dDl7tfuwoW5ijJ2FZjPPCY0oYn68QMLodPugk3nNB0Onhm3vHxEftbdvSPT4clol2ft7P9OmnL3Y7kzyVus+SWXGxM/b7+9gIjFLW1K2qLkBD3qRqErX8ocvXLxaLUTklYNT3yJMRJSm0y2hBcNeTBNQmYD+tYBa1yMe4xZ8G1egVo1ikxR0DL6dWf61c9z5mOdo5OSFuV9Ux5eTklUjJ4kOXnZJLQCB7UoW1QNSr3MlGQBYsyk0dQgniG9Qv8wK3ZxTf3UHdyuwk1SZMxINDJKTZAhmaQNkqhf1UvrUiStzeVdIw== 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=Qygh9AFoYL9hGcvqX4kiSForysiZ9hGbn5SQd9vM9wE=; b=rRKdLQGyIgfM3NH+MyIZOyaAkaA9+UIxJbB45bobcH7U6aPaz1HoslzNrsNOZuOt0A16c+6qqqmKoS5ZdHltOqr6sFgPCyFo5+Hdy+K/SgYolx8lJlrBtlKm7Z6bwV2zwaaMVg3K0IJENsiPYf3lK0QRmIJfFKqI7EXWD9NMNa7qO6PknTeLdpiGe4aEya2OnXIzXgGbG3H0SCSHjB5G0o6eM14IheCdUx63uAcL/B2ACC7/0SXiLukzL90Lx4egy3OnDI8XqQ/rMzzf8VhGt0A6AFJ+CgNtyUZW9Vrq78PuyFaHUgpUeo1KvLyuTnl+VHzls3VCa/Yi0VkPtZMefQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=kernel.org 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) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Qygh9AFoYL9hGcvqX4kiSForysiZ9hGbn5SQd9vM9wE=; b=jCdL1/a94Y81s9VeWsl0UX45LmaHk3ZJDHzLdcddXSRf4Rm6aF70Td63cDYMfIGQMESfG682KbSozk3wZqu6JjVCl38nDdKCE4WEJCSZC6Myam/6gVeL/KZRa8zLyukwJAYnjzx+UqrKyFqAdMHDQjRh8WQEqflF8JNAlcKnZ5sJE/h0Fum4PV7eme9q/2cWHrPQ+AZ+NVc7TtoOKw+JMsj1UGMojtdevE8NdBTCT8XsMWETu3QKdcv3bVTymn/8OR5p54ynWJq4O2Be4dPqnckc3KXWoYAbIV88pij08kuNJJmA0zFgMR9Vt0FfqZp+kpMF5t6PtiqgxMk7HyEmtw== Received: from SJ0PR03CA0336.namprd03.prod.outlook.com (2603:10b6:a03:39c::11) by MW4PR12MB7191.namprd12.prod.outlook.com (2603:10b6:303:22d::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.10; Wed, 22 Jul 2026 07:40:24 +0000 Received: from BY1PEPF0001AE1B.namprd04.prod.outlook.com (2603:10b6:a03:39c:cafe::9) by SJ0PR03CA0336.outlook.office365.com (2603:10b6:a03:39c::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.10 via Frontend Transport; Wed, 22 Jul 2026 07:40:23 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by BY1PEPF0001AE1B.mail.protection.outlook.com (10.167.242.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.5 via Frontend Transport; Wed, 22 Jul 2026 07:40:23 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Wed, 22 Jul 2026 00:40:10 -0700 Received: from drhqmail202.nvidia.com (10.126.190.181) 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.2562.20; Wed, 22 Jul 2026 00:40:09 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Wed, 22 Jul 2026 00:40:03 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang Subject: [PATCH v5 6/6] gpu: nova-core: reserve vGPU WPR2 heap Date: Wed, 22 Jul 2026 10:39:13 +0300 Message-ID: <20260722073913.1807677-7-zhiw@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260722073913.1807677-1-zhiw@nvidia.com> References: <20260722073913.1807677-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PEPF0001AE1B:EE_|MW4PR12MB7191:EE_ X-MS-Office365-Filtering-Correlation-Id: c8acc0c9-6fcc-4239-bad5-08dee7c47d7f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|36860700016|82310400026|1800799024|23010399003|3023799007|11063799006|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 1p7QSc8Ac66fyBWmnmREaH135R53bUgWHFzg6RyQlPOdpIfVKAbiOzLovbq9ZmXIhscLEK62cQSJfOiIM4B41BLE/YuVQEQ06l8Bk7N2f1Q/10vdjS59yFhEOO6dNy5ta4jQ6dyPLJCSmdDMzIZHvqUXlOEd792RyjLpLxd5NK+1dj1VYs2rTl8Rd1U7rPBKbKmup9wcsisQWrOmEwsCe1p4QZgPZc+APN4IcjinoOu+N0jV//5DBVVhD4VVHouQSXHf97NPMrkgwlaqXPvo88XfptLu8wFDRGRimZDsq30rJIN5+s1l7ienD7yiSN0UOOyI1gDEjKwIBySk8acIL6rdek8GjbeL61EAu8pWdTS4rZiiu+AV5Ghllzew1GcCdNkidjTYCkNT2iNZnXGlB8Y1jWKaGPyqpL10j2m7E0wA+a3CiysAIWS9nU68E53kX25znKG06Xxx5e93Hsj3CAfcbGzq9pLp60H0WjAX1qE1nCVGqlQCyyCDFWs7F+oZnz+/HX8iVabLBEcizcqDjukQ0F/z4U6MJosF3rmldZ1F4V2AGwaTmHpuRHRTNYEA6bM2sCfcXtD61M59EmGX4tINPVhw2ieLxyuHFDNZHeW8ztsdIcc9HbXy4nOCtXLuzCrJIG7c2uQXp9ql8yeaT1lXCc2AVdChM7a5yTJpe7nO6/RqTnpIcu4PGjxK8qycNV0G1CZ3Xh8L1vHNx8a6Sg== X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(7416014)(36860700016)(82310400026)(1800799024)(23010399003)(3023799007)(11063799006)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: o9tFduBnlmuFNhTqVjaZTYUEaJATqKOAEL/3SNBlN46BZPsCE83bvV8GQm3mwyrzkaN2OJNj3ERO6HLWNkfWVFVzxlx9/1CG5ceF3TZg6dQbZbZBcdQ5FwIVu/yV2X+YeGhSlDEqnm6OV53JS+rWmYp9Z3NXTKT1i0YAlR1EgZs2ITYB0EHIJr6sCpJIDX40xzVCWqBdgPHDsfPM48E+nudVR1Cqm78xvauSreN4YXr+X0mtqDwDkCjyjd3d2dd7jJRYnO6/T64mK2DTi+JF0uOvcI0EQc468Ng4YbQsxMgA0PDFqrWPoMnWoly7S2z8sa1rGk99pDefxDAG7K81ZJJfrOrn8cNPIY8dNNFWVWKFR1CKNyPIhB4LCmKyfhNf3gBF+Tylu44E0OY7S6g2N2vmmxnxXhtIWIhUGErax5ZVrsI/4LqtNw1R2ez+EQdg X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2026 07:40:23.7840 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c8acc0c9-6fcc-4239-bad5-08dee7c47d7f 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.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BY1PEPF0001AE1B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB7191 Content-Type: text/plain; charset="utf-8" GSP-RM needs a larger WPR2 heap when booting in vGPU mode. The heap size is firmware-dependent, so it should come from the generated firmware bindings instead of being open-coded in nova-core. Pass the detected vGPU state into the framebuffer layout calculation. Keep baremetal boots on the existing heap sizing path, and use the 570.144 vGPU default heap binding only when vGPU is enabled. The same state match also sets the VF partition count, so disabled and invalid 0/1-VF states do not enter the vGPU heap path. Cc: Alexandre Courbot Signed-off-by: Zhi Wang Reviewed-by: Alexandre Courbot --- drivers/gpu/nova-core/fb.rs | 25 +++++++++++++++---- drivers/gpu/nova-core/gsp/boot.rs | 2 +- drivers/gpu/nova-core/gsp/fw.rs | 5 ++++ .../gpu/nova-core/gsp/fw/r570_144/bindings.rs | 1 + drivers/gpu/nova-core/vgpu.rs | 1 - 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 273cff752fae..fee6a3e11dfb 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -23,7 +23,8 @@ firmware::gsp::GspFirmware, gpu::Chipset, gsp, - num::FromSafeCast, // + num::FromSafeCast, + vgpu::VgpuState, // }; =20 mod hal; @@ -171,7 +172,12 @@ pub(crate) struct FbLayout { =20 impl FbLayout { /// Computes the FB layout for `chipset` required to run the `gsp_fw` = GSP firmware. - pub(crate) fn new(chipset: Chipset, bar: Bar0<'_>, gsp_fw: &GspFirmwar= e) -> Result { + pub(crate) fn new( + chipset: Chipset, + bar: Bar0<'_>, + gsp_fw: &GspFirmware, + vgpu_state: VgpuState, + ) -> Result { let hal =3D hal::fb_hal(chipset); =20 let fb =3D { @@ -234,10 +240,19 @@ pub(crate) fn new(chipset: Chipset, bar: Bar0<'_>, gs= p_fw: &GspFirmware) -> Resu FbRange(elf_addr..elf_addr + elf_size) }; =20 + let (vf_partition_count, wpr2_heap_size) =3D match vgpu_state { + VgpuState::Disabled =3D> ( + 0, + gsp::LibosParams::from_chipset(chipset).wpr_heap_size(chip= set, fb.end)?, + ), + VgpuState::Enabled { total_vfs } =3D> ( + u8::try_from(total_vfs.get()).map_err(|_| EINVAL)?, + gsp::LibosParams::vgpu_wpr_heap_size(), + ), + }; + let wpr2_heap =3D { const WPR2_HEAP_DOWN_ALIGN: Alignment =3D Alignment::new::(); - let wpr2_heap_size =3D - gsp::LibosParams::from_chipset(chipset).wpr_heap_size(chip= set, fb.end)?; let wpr2_heap_addr =3D (elf.start - wpr2_heap_size).align_down= (WPR2_HEAP_DOWN_ALIGN); =20 FbRange(wpr2_heap_addr..(elf.start).align_down(WPR2_HEAP_DOWN_= ALIGN)) @@ -265,7 +280,7 @@ pub(crate) fn new(chipset: Chipset, bar: Bar0<'_>, gsp_= fw: &GspFirmware) -> Resu wpr2_heap, wpr2, heap, - vf_partition_count: 0, + vf_partition_count, pmu_reserved_size: hal.pmu_reserved_size(), }) } diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index a2e8342e7760..727b8ae4bcb7 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -50,7 +50,7 @@ pub(crate) fn boot( =20 let gsp_fw =3D KBox::pin_init(GspFirmware::new(dev, chipset, FIRMW= ARE_VERSION), GFP_KERNEL)?; =20 - let fb_layout =3D FbLayout::new(chipset, bar, &gsp_fw)?; + let fb_layout =3D FbLayout::new(chipset, bar, &gsp_fw, ctx.vgpu.st= ate())?; dev_dbg!(dev, "{:#x?}\n", fb_layout); =20 let wpr_meta =3D Coherent::init(dev, GFP_KERNEL, GspFwWprMeta::new= (&gsp_fw, &fb_layout))?; diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 166b0c69edb7..6e8e7d822ef1 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -132,6 +132,11 @@ pub(crate) fn from_chipset(chipset: Chipset) -> &'stat= ic LibosParams { } } =20 + /// Returns the WPR heap size to reserve when vGPU is enabled. + pub(crate) fn vgpu_wpr_heap_size() -> u64 { + u64::from(bindings::GSP_FW_HEAP_SIZE_VGPU_DEFAULT) + } + /// Returns the amount of memory (in bytes) to allocate for the WPR he= ap for a framebuffer size /// of `fb_size` (in bytes) for `chipset`. pub(crate) fn wpr_heap_size(&self, chipset: Chipset, fb_size: u64) -> = Result { diff --git a/drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs b/drivers/gp= u/nova-core/gsp/fw/r570_144/bindings.rs index ea350f9b2cc4..afe3e007f088 100644 --- a/drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs +++ b/drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs @@ -40,6 +40,7 @@ fn fmt(&self, fmt: &mut ::core::fmt::Formatter<'_>) -> ::= core::fmt::Result { pub const GSP_FW_HEAP_PARAM_BASE_RM_SIZE_GH100: u32 =3D 14680064; pub const GSP_FW_HEAP_PARAM_SIZE_PER_GB_FB: u32 =3D 98304; pub const GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE: u32 =3D 100663296; +pub const GSP_FW_HEAP_SIZE_VGPU_DEFAULT: u32 =3D 609222656; pub const GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS2_MIN_MB: u32 =3D 64; pub const GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS2_MAX_MB: u32 =3D 256; pub const GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_BAREMETAL_MIN_MB: u32 =3D 88; diff --git a/drivers/gpu/nova-core/vgpu.rs b/drivers/gpu/nova-core/vgpu.rs index 5359847e2eb9..6b7e045acea8 100644 --- a/drivers/gpu/nova-core/vgpu.rs +++ b/drivers/gpu/nova-core/vgpu.rs @@ -26,7 +26,6 @@ pub(crate) enum VgpuState { /// vGPU mode is enabled for this boot. Enabled { /// Total number of SR-IOV VFs supported by this device. - #[expect(dead_code)] total_vfs: NonZero, }, } --=20 2.53.0