From nobody Sun Feb 8 05:42:13 2026 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2077.outbound.protection.outlook.com [40.107.244.77]) (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 585681BE849; Fri, 2 Aug 2024 07:24:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583479; cv=fail; b=VU2boWWdxO3uV7uT/87/gZMjKEqPLcoJF509AWFEtOZWujPqs1IYo8pwq8mGAZgzHHm2cIeNEMWewJTm14eHpY1YT1lgfcKjbczwn0w6YT7VOKb89W6R+w1bKn/QdanXuI0se2rgH8WSMPIF9DrPWfYYLY005+kKdQ9R+SGbTSQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583479; c=relaxed/simple; bh=FUka5qk6/51H40hlKRoZOsn86GGp1j4Hu54fbEuZI5U=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BE2+clsVlb5jCYNhEFLGyHTto7iuQY507+Nwg333uKGSYjT4lQMFB/SjI3aXumcpOMnWnzfYVyKAFchqsGALyF7rsKy+4yDFVfjDBk2BYUyRT9vh+UspZQk9bIcM+uMrkXLHtKtbYuNaVids+Qq0mI3kOkw62dUO0o+7KkaI09w= 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=gXl71wuj; arc=fail smtp.client-ip=40.107.244.77 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="gXl71wuj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=V2m7xbz3y1a3+LL4kjGNzmyYkIQljntd3Xv0fYXcrWKyqQ9sYpEIStbq7l6+4K19Fo6d558i3/+q3AEVrrJrRuMprJCCfOkZUS50yO8uX5jROfe//Q0tKEtwh3zei5V8PCVlAnAuA68T23DC0Vp4zBMiE66GsjvccjImgOERas+y1mgLBZiRe3BE9mu3evll/vLXWQJfsT7OaCqf/xNo6GEGQMCgULWqW3yiXWDd/8oq+LfYLSGS3VIqtlcgNBbJGs5jZrC1vX3Mw3oFtCp1UeyLSx6VxZ80hIbk7nyvqk8smC1LeWgVtr+p3BLBTEMfcwrj5ToYAxQFF3z33H0gZg== 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=oAfTIvEk+LAh4zqVzWI5gOR8Fd4lOSuFkkLGCyxVrMw=; b=er88jLycqT4nJJvXMVJki2bWPZBBpc2nbgiObgdjsAdasox47B6htXkl63LUoea3LAaI8PS3182lWULRZoYhaEMLOZepAmVx9YqPG+uYWSIczw0VkBr2n3ltEKWOuJEjE3PXZ7zeCLhr0kOpasiVOONuixY0KUGiES868Weznrv4z55oQ5Uu1l8AAiJxNUCDYDrZvgF7MuayJ9WaMTwcGqyveOobPmSnPM0MWsWyAnVveXOZuACwBAYPfhr2eIpeN1K5NviEodxkt+23/ExX5SYhEb8trczRcHE6o48axLZXG7DTbjPgidbg02KWBfK02trVgfNSoIV9qh8Eeetu1g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) 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=oAfTIvEk+LAh4zqVzWI5gOR8Fd4lOSuFkkLGCyxVrMw=; b=gXl71wujmUOMvQTJiIomGXy8eHSq3bNDeT6JTXlwvpuG+miEUySL5TKQFo0XIGgEZVIWgl5l/jGBpTuTyYK2jIQFvTf1K2AnQNLtnToOA2WAOKpt+CqzD0hcmMrew7VsUVmKUbn5TpeQXW5wKhZagEUUHreJStuih1aehaX4Nr5b31si32jut0rsePClSOHJe1QDo6ck3amYOb+9vDQ4n5AssAYI0mBpMJ/4UCILjp47XrBG9smCdjd/2AMAQoSpnTMOC3XjMUOvrkOCvIU/yfSL9fecg1lTOsQI6PWivop+TlxYrLTz1hJXNpPd5O6TIcNtTn61ZfAH+KVc4koWJg== Received: from CH2PR10CA0022.namprd10.prod.outlook.com (2603:10b6:610:4c::32) by CYXPR12MB9278.namprd12.prod.outlook.com (2603:10b6:930:e5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.23; Fri, 2 Aug 2024 07:24:34 +0000 Received: from CH2PEPF00000148.namprd02.prod.outlook.com (2603:10b6:610:4c:cafe::8c) by CH2PR10CA0022.outlook.office365.com (2603:10b6:610:4c::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.23 via Frontend Transport; Fri, 2 Aug 2024 07:24:34 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CH2PEPF00000148.mail.protection.outlook.com (10.167.244.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.19 via Frontend Transport; Fri, 2 Aug 2024 07:24:34 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:24 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:23 -0700 Received: from dev-l-177.mtl.labs.mlnx (10.127.8.11) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Fri, 2 Aug 2024 00:24:20 -0700 From: Dragos Tatulea To: Saeed Mahameed , Leon Romanovsky , Tariq Toukan , "David S. Miller" , Eric Dumazet , Jakub Kicinski , "Paolo Abeni" CC: Si-Wei Liu , Dragos Tatulea , Leon Romanovsky , , , Subject: [PATCH mlx5-vhost 1/7] net/mlx5: Support throttled commands from async API Date: Fri, 2 Aug 2024 10:20:18 +0300 Message-ID: <20240802072039.267446-2-dtatulea@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240802072039.267446-1-dtatulea@nvidia.com> References: <20240802072039.267446-1-dtatulea@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: CH2PEPF00000148:EE_|CYXPR12MB9278:EE_ X-MS-Office365-Filtering-Correlation-Id: b7a1b91b-e43e-43e0-1d4e-08dcb2c42888 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?rzRXEEst1NlFLzeHh0FsStEbzeQxVTolGxeEsQW0WAkiNsTb2U9Mp58tG1jB?= =?us-ascii?Q?dJmG+aoBfqs5B1Z7RNwG2LJIVi4rcrVXNC7Vbijap1EDYHBikkvA702q66ag?= =?us-ascii?Q?5aLYbl2E4cswGAR8BZiRBYm7NpuviRboL/0kmydtii8tyMf/E7SV8e4s1tEO?= =?us-ascii?Q?UNYso8jEN+jtk3FgO0I33dDDKFrTp2p2YaEBuHkVtG3Cn/Mtztk1mqDk+xQy?= =?us-ascii?Q?5PPitSVvtsqzspN8xS9jv/jF3O+avxX5qGICR3MG80tDBeAjblP7KeHgKx+J?= =?us-ascii?Q?ATEaT0ibgHIOZ5Ydab1xi99SiuH0rTISD+HUFwJ9yTwr1gS/K3ZTU32z8HvC?= =?us-ascii?Q?sjWiHiFULpY1wz6a7Fbh0a60G6TDSPY8rt0o2rK3RzmLZb8/9N5PMyxJ+4IU?= =?us-ascii?Q?fbcKSLnb6xejHJbo71RG49VWdgm27h/TAk9kZGzNXoUhqxUn6U6++MHp0Sbs?= =?us-ascii?Q?7+XvY4EUlr8/rznsXajQXfGuq654nCSSfq4a8lQNhaN89nRA7NYW/qrwcpYv?= =?us-ascii?Q?sMsyHCRVm5hTM50MHJ4nKd5SnVFMGJm2fztqpe81+jyHfeqZN/CvjrbeQkfK?= =?us-ascii?Q?ANsxY2cdOw/qvqoKb8cEeGcWh64FEnPPJSUWy/VrXkolWgTz9a7Z0dmG+nNA?= =?us-ascii?Q?rXkwocE8wSI26m6+kT6kkcwBwpETeQXy3neYtjLKGZzBL1T5CHvP9Ep8SaF8?= =?us-ascii?Q?beyB4BGdtapPqdgz7p3FqnoAcRnMXYej9O9SMdEKHKv8T/KorVVhIsgDUrrE?= =?us-ascii?Q?lPX5V4KJiv9hl3bBoetoWVjGj9u93p6XyIXKyDCReBqZGe3OqhOkCqrcfIwx?= =?us-ascii?Q?fQL6gygWgtnDVS5UGraBmoUmDO8QP2G6VG54LO/qXUemnf+K6LTygLQTo+Z/?= =?us-ascii?Q?nNnsbZoiYrNyyjKZS3qDCbh0Wne9PnaQB0nBx5Tr/BKlvZupFZLCnjdqg8df?= =?us-ascii?Q?cIDrkcy/2LlnqA0ErF2HlNSmCXgGqa2ylW00ikkH/yza8z3i+gWxsW48AEaz?= =?us-ascii?Q?I8+wQt4nkqOv+g0DGX4LqaArBKEwg3+zNtb6+nNjfca86mc2Y3MObQ47a3db?= =?us-ascii?Q?IX29BnKmXqCTgfJwZPaUrnqVwLzt1azFr2dpeW/tvoBldcUZc/acZspH52WK?= =?us-ascii?Q?WVXpq/aj8YqsVLkVQNXh8RRlxc8xGTJYSxGSHOYXCirIPvh/kgD45n2kqzuA?= =?us-ascii?Q?8n7Gdaro+DQPvGy6JSNRSy3BbKXib+8FTxIR4h+LDn0i/9+Ju5Ps6z8RekLH?= =?us-ascii?Q?nCOIA83s5/poUt92KGA9KBX203w5ocMzJ+WBSP6yslwqUZ9WIadZg/Gdiwfz?= =?us-ascii?Q?ZIc4uGVtsXi07CJaZwm9FLzpvq2x+5EZ1aCkS4ta4lnIfZfb15cGagXtODGl?= =?us-ascii?Q?Mz1WgvAjFLBzcp5dRNsb2MJfJgTrbEKaGn4683/quPqh6sTHsKtCnRRHht7H?= =?us-ascii?Q?J5+j0YWKu7PL2nI5clYp49mIqrJ9/oB2?= X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(376014)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2024 07:24:34.1392 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b7a1b91b-e43e-43e0-1d4e-08dcb2c42888 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH2PEPF00000148.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYXPR12MB9278 Content-Type: text/plain; charset="utf-8" Currently, commands that qualify as throttled can't be used via the async API. That's due to the fact that the throttle semaphore can sleep but the async API can't. This patch allows throttling in the async API by using the tentative variant of the semaphore and upon failure (semaphore at 0) returns EBUSY to signal to the caller that they need to wait for the completion of previously issued commands. Furthermore, make sure that the semaphore is released in the callback. Signed-off-by: Dragos Tatulea Cc: Leon Romanovsky Reviewed-by: Tariq Toukan Acked-by: Eugenio P=C3=A9rez --- drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/et= hernet/mellanox/mlx5/core/cmd.c index 20768ef2e9d2..f69c977c1569 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c @@ -1882,10 +1882,12 @@ static int cmd_exec(struct mlx5_core_dev *dev, void= *in, int in_size, void *out, =20 throttle_op =3D mlx5_cmd_is_throttle_opcode(opcode); if (throttle_op) { - /* atomic context may not sleep */ - if (callback) - return -EINVAL; - down(&dev->cmd.vars.throttle_sem); + if (callback) { + if (down_trylock(&dev->cmd.vars.throttle_sem)) + return -EBUSY; + } else { + down(&dev->cmd.vars.throttle_sem); + } } =20 pages_queue =3D is_manage_pages(in); @@ -2091,10 +2093,19 @@ static void mlx5_cmd_exec_cb_handler(int status, vo= id *_work) { struct mlx5_async_work *work =3D _work; struct mlx5_async_ctx *ctx; + struct mlx5_core_dev *dev; + u16 opcode; =20 ctx =3D work->ctx; - status =3D cmd_status_err(ctx->dev, status, work->opcode, work->op_mod, w= ork->out); + dev =3D ctx->dev; + opcode =3D work->opcode; + status =3D cmd_status_err(dev, status, work->opcode, work->op_mod, work->= out); work->user_callback(status, work); + /* Can't access "work" from this point on. It could have been freed in + * the callback. + */ + if (mlx5_cmd_is_throttle_opcode(opcode)) + up(&dev->cmd.vars.throttle_sem); if (atomic_dec_and_test(&ctx->num_inflight)) complete(&ctx->inflight_done); } --=20 2.45.2 From nobody Sun Feb 8 05:42:13 2026 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2043.outbound.protection.outlook.com [40.107.92.43]) (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 E5E0F1C0DD4 for ; Fri, 2 Aug 2024 07:24:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.92.43 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583485; cv=fail; b=t4cSp77veLL+G/Tk+ggHKP/w3o7rWgMxS5cQ930L3Ox2uryaeYBisdaX+TZXDvm+UMy0URY2hl3jgLT1Jwu4JY3/9YfXQIQWeJ/z01GxRRYM51vgmgUMrayYirbuICs9IgsZx9G2gJkhl9EPZFKH2W4f4X9sM6z857p1bUKJHcU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583485; c=relaxed/simple; bh=9uGCBqHkq8Qmn0HHjK+cIpTyE7TwIl8u7dAftV9IP8g=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=err6DJPdK7gCtPSbCxqtRSOllt5X78T8QgXKiHWMIxSBLdDI+rw0jBLjIA0lJz1GiEGJzddPJlRhrvq3bN7SfLium1ejj1lf02NimHlEL6Ed7/6mDbl22V//G9VS6XMvUzdMYhs6g9QJ40haWz3jSSMeqbuDjMhG0WUjNJ1MrFg= 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=r0Rba11m; arc=fail smtp.client-ip=40.107.92.43 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="r0Rba11m" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FJ603CHaW7gtUjeOkF/73i0RlhSkLdzHdl1EkpR1C5BS60eMF0Ez5/Un9/y/noPYTy/rbVZa12HkqyP924Gcn1rZmWe8JrZp1ccdmiudjW26i1gAcv9eeHT6HyFm1ZJlKqQJ1sJfLgi1HHaxFmjY3NDS2bvb2vbzuVLLKcjMh5VQ9ppXaq06auL6Haj5rMeqbIlK57b83w7C3IWxhgAdcrmdhv6sEK4DouuBSJRruVX/rYpGmbF34rVvKTyYvNdfwNosHsoYflzIsC8GQxGZBuiIfDQyaBJjDDJoAfkHQtATlxA+lomoxoaNdA0N3GbzBtU7KsMMlEnfAqAL8DQiNQ== 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=fmkn+/ZzPeR3gOgUm4vohEtfonYNDyg7w8DZJlwvIsQ=; b=RQpf5Pl/W9n9uN9y3MhDRSgf17Ju7MMz/FWSBbXDVljb1iXUsP/Pw+XLb55IrCgJijvrgSc5S/TK4DpiUQDnqbU5EFyY0goJdG0hZMiHv9cwsFvYvzVyy5Umm5fiSiI26ecK4VfEUIaATnYjjuEirakQQ5fLkA9kKAK+KABrTPmfdLqqtBLtUFJuLjunN8sBOJa5FJlFCx0Jn7LYA+ilxGMGzKul4k/1Jsc4LrI+SLORIf3s3blb+G33lTLFHt3CeZU0Y/DrtDufQV/7ByzrNRlzknJp6hr1wnU0woA7H3c9P3lwc9eyJWu27HyoQQohYJsugdIuBLgq9829LzkZXA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=redhat.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) 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=fmkn+/ZzPeR3gOgUm4vohEtfonYNDyg7w8DZJlwvIsQ=; b=r0Rba11mVOVKfZmSuo7pk3KSH6NepSXaMqDMJSPDbK85NY3X4uieSMannI46BO45Q/ygSrlUmUrX2i19R9OR/wZDO92Id3GJfnWhpaI+PHHpEmrf3V71Qb5xQBnyFMTELFvRDGT2Q4MJl0i7+TXv5WlcqqW6+dDNeoD9gPpq23aD+xh2IsRuSJI97EbJXpNgDcTSAgl+XmhMO+9b/1okhhKFMA/fOnXhaJpHZ32o1GqWRt68zJTSmewaZczxfFy/OAx25ynw2vgCUm0va20c9HYu9bOQKdZzGP0OXesXVNdX2RtIXse90glFB0p4AICYSAOAJ7I+gSA7B4Puc4t/iA== Received: from CH5PR02CA0005.namprd02.prod.outlook.com (2603:10b6:610:1ed::7) by CY8PR12MB7315.namprd12.prod.outlook.com (2603:10b6:930:51::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.22; Fri, 2 Aug 2024 07:24:40 +0000 Received: from CH2PEPF00000146.namprd02.prod.outlook.com (2603:10b6:610:1ed:cafe::79) by CH5PR02CA0005.outlook.office365.com (2603:10b6:610:1ed::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.23 via Frontend Transport; Fri, 2 Aug 2024 07:24:40 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CH2PEPF00000146.mail.protection.outlook.com (10.167.244.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.19 via Frontend Transport; Fri, 2 Aug 2024 07:24:40 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:28 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:27 -0700 Received: from dev-l-177.mtl.labs.mlnx (10.127.8.11) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Fri, 2 Aug 2024 00:24:25 -0700 From: Dragos Tatulea To: Dragos Tatulea , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= CC: Si-Wei Liu , Tariq Toukan , , Subject: [PATCH vhost 2/7] vdpa/mlx5: Introduce error logging function Date: Fri, 2 Aug 2024 10:20:19 +0300 Message-ID: <20240802072039.267446-3-dtatulea@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240802072039.267446-1-dtatulea@nvidia.com> References: <20240802072039.267446-1-dtatulea@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: CH2PEPF00000146:EE_|CY8PR12MB7315:EE_ X-MS-Office365-Filtering-Correlation-Id: cccdda9e-c96d-4db1-8772-08dcb2c42c10 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?B+5AIGtWW0UnUbPNJbAvgsDZ4oP1J+hVThNebX9uLxifko5ezQi70YWgdECo?= =?us-ascii?Q?SUsI1Yq3Vw2eFFjrtiFp5xExU674Mo/VA08zQ9d/hK2G34E65wUAl7lZ8C/8?= =?us-ascii?Q?bgleqk6REbfaIKauoZQqLswPfJNcC65BTB7fjtLnC8aPY05t2Ye9M9Zsq3Tb?= =?us-ascii?Q?YJw7IZRuzvlHBVtRGhi49jtddtk7p7gYLgleYh7F9QZ0QPdqdZZUTwYEzBxe?= =?us-ascii?Q?R6svABCw9dMPtRYacQ24VsjKSzJCHEvbqSihBnHzHIPvrOpb+Qksg8Aw91zF?= =?us-ascii?Q?vNJSq+FLWHTrsyMs04yYGZUdAXiUQ07a8vyrGcDfIOZDqv2jTMeww448k6NX?= =?us-ascii?Q?QkgFhVi2bcuOX2bGtx4VFgmKtpzIfa8ddVQno/aB1QrfZhiAJJBU4y2BD+p6?= =?us-ascii?Q?p9Cud0UyKdF8XsJ9997HANg6sQ9AKKOOf6qiAyynzQEstQ5ji7dSz2QPCofL?= =?us-ascii?Q?m7bPc+rG8P6Bw1J2YQtQBQuXjBZCBy91bTeRMrh9xW3B77WvvGmymVs6uMH3?= =?us-ascii?Q?tqt8LcA5xHq6GumqrCdImYd4CdATT9URyWC2poXtGZGGLsFxskFbfsJpWcWG?= =?us-ascii?Q?yRAsJhZpuwX9wpLXIdIIwM54e7BYRRcdL6tuVCSGjGExVIDRntaCcpYYd06F?= =?us-ascii?Q?a9b3f8fLPaX97/PhHSFcrN+AsJK+H75iBgs3dtzl1gda4WR1fKy+NGzVBs4F?= =?us-ascii?Q?Yz/n8hhO+RO9Ck5JsBSk0ThJkmD4TWMpHOEEBkRspZP7QZDfdbSSlKA1M7SO?= =?us-ascii?Q?HXETdcwGyQdRCD44ZLYTYjy0eQ5GF1EPqor5pJLG5UnvkNG5rgF8/UHHeXVA?= =?us-ascii?Q?Jvm19cSA9wr1g5Vf6pMbclBRtA1EcPMpyRnSsZkH039+ZOAiluz+HZ43WCtH?= =?us-ascii?Q?WYp6jg4MYUvX5Ld8J/GpfxGdsfkmNvvZ9g/MLnYdUVDfnOd3D/daSVPYy1x3?= =?us-ascii?Q?B7EnWQQ7h9XV//TpH49l98mw3Vw+6Y8TcK6Cfvvfes9ZbhHQNz5cArrV9eYZ?= =?us-ascii?Q?XPkXq/cPxnTeMYx4vzZu1ZkhKQCZqTp9RIP8TygFHd3w7a0PcxfNL+m6ovs8?= =?us-ascii?Q?P9DQLjA0HmsyckC9kuaKhVdR872EOkdwlevYLC0504tM+kUxsdd/ZcnyR5Op?= =?us-ascii?Q?x6AUqYqj+AUA329c20qQY6aMVGuJIPKKWsBCxex59n2EinlKHvVzdGTBqliK?= =?us-ascii?Q?vH17bOt2b/umOBeT+mAf7h88gTSka/LYReM6D4diJHWlhb2DQVylj/Twrue4?= =?us-ascii?Q?oqYTmhMVE7wBJClfnUIrhT5N/QYHtJJddN/PmBiEvE2fDy5bKhioGBiGe5Pz?= =?us-ascii?Q?zEtBOOTWyZuaAmR7Scc06fc+rmWxzI+8ItL8u2j2mloWM22leP/Rn1y0q9Gq?= =?us-ascii?Q?HFcs2imqkHyIlGjbTTjFLxoilhwXA52QRH7dxuyGGFzAA9VJxMeJsxz7NoJp?= =?us-ascii?Q?8SMVazkRGCnuMvR+TTw7Ic6OeNM8CbOk?= X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2024 07:24:40.1445 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cccdda9e-c96d-4db1-8772-08dcb2c42c10 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH2PEPF00000146.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7315 Content-Type: text/plain; charset="utf-8" mlx5_vdpa_err() was missing. This patch adds it and uses it in the necessary places. Signed-off-by: Dragos Tatulea Reviewed-by: Tariq Toukan Acked-by: Eugenio P=C3=A9rez --- drivers/vdpa/mlx5/core/mlx5_vdpa.h | 5 +++++ drivers/vdpa/mlx5/net/mlx5_vnet.c | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/drivers/vdpa/mlx5/core/mlx5_vdpa.h b/drivers/vdpa/mlx5/core/ml= x5_vdpa.h index 50aac8fe57ef..424d445ebee4 100644 --- a/drivers/vdpa/mlx5/core/mlx5_vdpa.h +++ b/drivers/vdpa/mlx5/core/mlx5_vdpa.h @@ -135,6 +135,11 @@ int mlx5_vdpa_update_cvq_iotlb(struct mlx5_vdpa_dev *m= vdev, int mlx5_vdpa_create_dma_mr(struct mlx5_vdpa_dev *mvdev); int mlx5_vdpa_reset_mr(struct mlx5_vdpa_dev *mvdev, unsigned int asid); =20 +#define mlx5_vdpa_err(__dev, format, ...) = \ + dev_err((__dev)->mdev->device, "%s:%d:(pid %d) error: " format, __func__,= __LINE__, \ + current->pid, ##__VA_ARGS__) + + #define mlx5_vdpa_warn(__dev, format, ...) = \ dev_warn((__dev)->mdev->device, "%s:%d:(pid %d) warning: " format, __func= __, __LINE__, \ current->pid, ##__VA_ARGS__) diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5= _vnet.c index fa78e8288ebb..12133e5d1285 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -1538,13 +1538,13 @@ static int suspend_vq(struct mlx5_vdpa_net *ndev, s= truct mlx5_vdpa_virtqueue *mv =20 err =3D modify_virtqueue_state(ndev, mvq, MLX5_VIRTIO_NET_Q_OBJECT_STATE_= SUSPEND); if (err) { - mlx5_vdpa_warn(&ndev->mvdev, "modify to suspend failed, err: %d\n", err); + mlx5_vdpa_err(&ndev->mvdev, "modify to suspend failed, err: %d\n", err); return err; } =20 err =3D query_virtqueue(ndev, mvq, &attr); if (err) { - mlx5_vdpa_warn(&ndev->mvdev, "failed to query virtqueue, err: %d\n", err= ); + mlx5_vdpa_err(&ndev->mvdev, "failed to query virtqueue, err: %d\n", err); return err; } =20 @@ -1585,7 +1585,7 @@ static int resume_vq(struct mlx5_vdpa_net *ndev, stru= ct mlx5_vdpa_virtqueue *mvq */ err =3D modify_virtqueue(ndev, mvq, 0); if (err) { - mlx5_vdpa_warn(&ndev->mvdev, + mlx5_vdpa_err(&ndev->mvdev, "modify vq properties failed for vq %u, err: %d\n", mvq->index, err); return err; @@ -1600,15 +1600,15 @@ static int resume_vq(struct mlx5_vdpa_net *ndev, st= ruct mlx5_vdpa_virtqueue *mvq case MLX5_VIRTIO_NET_Q_OBJECT_STATE_RDY: return 0; default: - mlx5_vdpa_warn(&ndev->mvdev, "resume vq %u called from bad state %d\n", + mlx5_vdpa_err(&ndev->mvdev, "resume vq %u called from bad state %d\n", mvq->index, mvq->fw_state); return -EINVAL; } =20 err =3D modify_virtqueue_state(ndev, mvq, MLX5_VIRTIO_NET_Q_OBJECT_STATE_= RDY); if (err) - mlx5_vdpa_warn(&ndev->mvdev, "modify to resume failed for vq %u, err: %d= \n", - mvq->index, err); + mlx5_vdpa_err(&ndev->mvdev, "modify to resume failed for vq %u, err: %d\= n", + mvq->index, err); =20 return err; } @@ -2002,13 +2002,13 @@ static int setup_steering(struct mlx5_vdpa_net *nde= v) =20 ns =3D mlx5_get_flow_namespace(ndev->mvdev.mdev, MLX5_FLOW_NAMESPACE_BYPA= SS); if (!ns) { - mlx5_vdpa_warn(&ndev->mvdev, "failed to get flow namespace\n"); + mlx5_vdpa_err(&ndev->mvdev, "failed to get flow namespace\n"); return -EOPNOTSUPP; } =20 ndev->rxft =3D mlx5_create_auto_grouped_flow_table(ns, &ft_attr); if (IS_ERR(ndev->rxft)) { - mlx5_vdpa_warn(&ndev->mvdev, "failed to create flow table\n"); + mlx5_vdpa_err(&ndev->mvdev, "failed to create flow table\n"); return PTR_ERR(ndev->rxft); } mlx5_vdpa_add_rx_flow_table(ndev); @@ -2530,7 +2530,7 @@ static int mlx5_vdpa_get_vq_state(struct vdpa_device = *vdev, u16 idx, struct vdpa =20 err =3D query_virtqueue(ndev, mvq, &attr); if (err) { - mlx5_vdpa_warn(mvdev, "failed to query virtqueue\n"); + mlx5_vdpa_err(mvdev, "failed to query virtqueue\n"); return err; } state->split.avail_index =3D attr.used_index; @@ -3189,7 +3189,7 @@ static int mlx5_vdpa_compat_reset(struct vdpa_device = *vdev, u32 flags) if ((flags & VDPA_RESET_F_CLEAN_MAP) && MLX5_CAP_GEN(mvdev->mdev, umem_uid_0)) { if (mlx5_vdpa_create_dma_mr(mvdev)) - mlx5_vdpa_warn(mvdev, "create MR failed\n"); + mlx5_vdpa_err(mvdev, "create MR failed\n"); } if (vq_reset) setup_vq_resources(ndev, false); @@ -3244,7 +3244,7 @@ static int set_map_data(struct mlx5_vdpa_dev *mvdev, = struct vhost_iotlb *iotlb, new_mr =3D mlx5_vdpa_create_mr(mvdev, iotlb); if (IS_ERR(new_mr)) { err =3D PTR_ERR(new_mr); - mlx5_vdpa_warn(mvdev, "create map failed(%d)\n", err); + mlx5_vdpa_err(mvdev, "create map failed(%d)\n", err); return err; } } else { @@ -3257,7 +3257,7 @@ static int set_map_data(struct mlx5_vdpa_dev *mvdev, = struct vhost_iotlb *iotlb, } else { err =3D mlx5_vdpa_change_map(mvdev, new_mr, asid); if (err) { - mlx5_vdpa_warn(mvdev, "change map failed(%d)\n", err); + mlx5_vdpa_err(mvdev, "change map failed(%d)\n", err); goto out_err; } } --=20 2.45.2 From nobody Sun Feb 8 05:42:13 2026 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2072.outbound.protection.outlook.com [40.107.220.72]) (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 417EB1C0DE8 for ; Fri, 2 Aug 2024 07:24:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.72 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583491; cv=fail; b=bdDtyIlsocc8+5Em4A5E25rXvOhzjZjFhfh0ChGpkyD1ZoSf5u0Or+v/woAaC0wmcO/hARRtAGvhXltIm8ox787H9yXUpxa2VBHSRJLNqPepmirKQiQQtFAXsLQ4Zzghfnwl8n5M77KpcdSsXp8flQ2y7+PkuCcFpG58MKH2Za0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583491; c=relaxed/simple; bh=wKSqH8znK4M4oTd9KiEjOJvpDzQoYGFesAbMWqEeCk4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ELHYTmZ79J7jTAmoEhD6n/rDcOoI5j1WN83os/FNeb+XzMzKai0WATZkbWRwq/DTJp+C++VvqYT2zRdPFRCHvqAh1GFknu0P1/uQvSTLRhE8m3AayrWAHktVW4Y99p4LES26UaCpdK9AvpXOLeyVRr5P2Y84eGAh39Cpwwhp6/w= 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=m6Ny+BqH; arc=fail smtp.client-ip=40.107.220.72 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="m6Ny+BqH" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U47xHfO6qZVIi/xRreMxoSVbWL1J85snQEhLADb+kNyful2UD72SIpQZlScRXLdV3J+Os6NbhglKrK0eFXOPyhYc9ZbJsyPkw6LsItZDXX5XJhVHkQWFiQUNFuy6n7bMVDBE/7oMj5V2H6SOTqYn1JeTcvlDdNMlGObSQ8aZzafQ9CVsYRR7BRBvSwdZ+/6PaPeAcObjBEhwC1VZEYneOxrVD9wZ3XSG44H9IRoLzp0XoyDY13xAeroL/aKZkqFkN6GU2OdF0NTUdo12R5zC0Hs1jskwWxNZk18L27WdAGUmN3KsEJC+1nezQVqsM6Xl61yauGsiawqiNYXlMwMYIg== 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=V7TDu4w+AWZFYWCpX79TnGAvuCvTI8JjqdZiFtdNwFo=; b=rGDcjNH7zwq3euE5nHsyX1q75nccT700Ah4YRHydAyitDctPhgvahNHWf5WnKeDE4sJkpJT3GDjWEO7IJmUAARlyNyX6eEjuJrCGAqbXco5SfKS2jJXKg5uAyDxwewsgQ5WmecSdVmRgwpub3oiCbQB+Oufoi9KKAI/rd08IuFkwwHnIbNj7yyQFzt90x6ow17gi88nMbyAbm9CBDNGO+5SS6jHsZQ6G4IcmbZorY6cPEqwYrxyJVn3FLavEix7YA9XgRdEBxHx2UyqEM0QLvhqb5sHZQ4MUTVA/sEQPYEtazj0tLUBkupZjvzDOG2rS82oaSqDdiNczKotqSfsw7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=redhat.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) 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=V7TDu4w+AWZFYWCpX79TnGAvuCvTI8JjqdZiFtdNwFo=; b=m6Ny+BqHAXcXVmBfrzgZFS5EkOk2a3h83QBV/zfXyAAKPNeAYOSWzYCMsSn1TXUtqkHDLqW7kPX1h74+y5UD9Dh3c/F5rxLf+8mtGOMq5QS4t1Mb1O6G1niMt1HSZlv7f/iSCs5E+jUolj3YcifUpJ08ItLd5y3hc9pNwOhyvtzBabPCm0YiRgQLSStG/XdTUByMqUaXsn9eoFSFy34I55BQ8HaVySwA5fjyFOn7kBW8lqbHlVcz11tAAnANAn97DoC/BxVRmEKTX4HS7xV6rVfgQqWqiugTtDb1Y0yUtRKU0wjmdeLV2Eqqv+nP90oxucvYjfueVXYxBjGg7gR+dw== Received: from BL1PR13CA0129.namprd13.prod.outlook.com (2603:10b6:208:2bb::14) by SJ0PR12MB8113.namprd12.prod.outlook.com (2603:10b6:a03:4e0::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7807.28; Fri, 2 Aug 2024 07:24:46 +0000 Received: from BL6PEPF0001AB4F.namprd04.prod.outlook.com (2603:10b6:208:2bb:cafe::f1) by BL1PR13CA0129.outlook.office365.com (2603:10b6:208:2bb::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7849.7 via Frontend Transport; Fri, 2 Aug 2024 07:24:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL6PEPF0001AB4F.mail.protection.outlook.com (10.167.242.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.19 via Frontend Transport; Fri, 2 Aug 2024 07:24:45 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:32 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:32 -0700 Received: from dev-l-177.mtl.labs.mlnx (10.127.8.11) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Fri, 2 Aug 2024 00:24:29 -0700 From: Dragos Tatulea To: Dragos Tatulea , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= CC: Si-Wei Liu , Tariq Toukan , , Subject: [PATCH vhost 3/7] vdpa/mlx5: Use async API for vq query command Date: Fri, 2 Aug 2024 10:20:20 +0300 Message-ID: <20240802072039.267446-4-dtatulea@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240802072039.267446-1-dtatulea@nvidia.com> References: <20240802072039.267446-1-dtatulea@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: BL6PEPF0001AB4F:EE_|SJ0PR12MB8113:EE_ X-MS-Office365-Filtering-Correlation-Id: 83c293d2-4184-4ec2-e1b6-08dcb2c42f68 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|376014|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?RQJp61l7tuHXuNkgbfeJ+qHOyL0UJ6nKkMoPcRik/tyb7M0k1WVuIEVceTQa?= =?us-ascii?Q?Dboo6jsYsW0mroXhiul2no1faBXjojGuG92PrLe7LzZX3KEK4hWsotz8mSii?= =?us-ascii?Q?9SRhy/Wa/56V09gAoYlSWBARrJFcmPkJt29Nn7SQ0rUfcD9R8wwWQoeHbxsX?= =?us-ascii?Q?cFKiH1yaG0JZTUSU0he94vN9I0qMlLKTglUILIB4yjOb/buzk1EE/5GY2UkD?= =?us-ascii?Q?FlywN0wd035PRFr7tRKohsXskJfm8gg2Bd/xoOIWvGD5urlEZ+mG175Yg4D1?= =?us-ascii?Q?YCgGfCQag6hWlykH2inyQyJKmk6UUSWg1deiC3JYO6O6fV7fy27FJunkPPW0?= =?us-ascii?Q?8ZUMgXwuhlR8Aehh2cMjjzC44Jpix/ckwLKrizrNL2QVdxZdzderw6qzvsc7?= =?us-ascii?Q?FJzZMkLm8e8BSLX6lW027a62JHCIdbHRphQQPoVzcrk0DRv/KBF52VPodshM?= =?us-ascii?Q?j8eDHWd+ENrcWFX1ywA/4+sQvts6pCkcHdJqoUpWh3i9u8gLS/RqvEG7Tr9o?= =?us-ascii?Q?FT8RIAJOC5/Sg/+2m3vukjwrzbJPG6WzcxdEmUQo+DwsKYA5KBvLNV0KZeFX?= =?us-ascii?Q?NEcSI2d3lUEuQGZ2df2sUKSibNcM8qRXTDjz11uiCPl/TAcTNZda8obChHZX?= =?us-ascii?Q?b8ZvDaF+m6xOVHDtPDA5rWwh4Ac8pqqoZ/IZzCiffKUnqJmt6H3jdKxaVwnJ?= =?us-ascii?Q?rkuur82um8FkS24ZhqvYeif/MEw7w8MJ8+JV1cGkjhKK82zX+SkiI69p44y8?= =?us-ascii?Q?ZG+M+mGBpIh6PcNY3SgbC5G906vIT2GxyemEtDJFIwWeEf3MD8fhvA0uz8Fs?= =?us-ascii?Q?SM3Y4ulNuTqs93ovW5BBCtZ7YlYebMtFsb/+1hSMVgE/KCU9EKDZ2CKeRYUc?= =?us-ascii?Q?1PO6QVX7Q+UaJNyz1S+3G9xr1mcwvL0RUxhNfLYsOEpEmzrkKBEwHbUwdZNv?= =?us-ascii?Q?a/NKgNfix35M340h/I2w2xSWBnBSMQd+rbCybgTJZgUEmiwZAeMpD1etcbDY?= =?us-ascii?Q?ceeT5wvYoM5nmaK9niGZuRKMhQn2GT4eQ/I6LXk5bXiHd+/CtL6naqUEwUl9?= =?us-ascii?Q?A9c6K8wbl2aNGj/Wb4MIWGIlEJxjLoy4P+rFYl4pNgFZdO8c8EHLcI/45X3N?= =?us-ascii?Q?rWW5xUMrqFkb4tHZxpzGnvUCEZBwxX7RAs1X+ZpKqWkX6dlZ6iryz5ym+QlX?= =?us-ascii?Q?1xe8JvZKe9qEwn2cxcUM12/AdK8pH20/zIGBRW/jGfpWdh3i9wWmbNDJhHHP?= =?us-ascii?Q?pxwzWx6gZCT3FgnabtAXZmHIxWmj5M2gCbNGMGD8VJxqIPUFExwuqXpVeF3j?= =?us-ascii?Q?TCq1o9/KkwC/hy+7CBzyZQ9bzrPNsih7AH50ODN84zqOGoJSEkKsilAcvlJ8?= =?us-ascii?Q?4eJvqGHqwHzj8gIJzIP4k4RtlMy08S6PqJOnogFMtLzZgJ1vIvsfjAlwXmV8?= =?us-ascii?Q?TvsRtHdKddMAjBk/qGPvB4FTkIMV37yd?= X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(376014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2024 07:24:45.6317 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 83c293d2-4184-4ec2-e1b6-08dcb2c42f68 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB4F.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB8113 Content-Type: text/plain; charset="utf-8" Switch firmware vq query command to be issued via the async API to allow future parallelization. exec_virtqueue_async_cmds() is a generic execution function that will be used to issue other async operations as well. Handling of throttled commands is built in. For now the command is still serial but the infrastructure is there to issue commands in parallel, including ratelimiting the number of issued async commands to firmware. A later patch will switch to issuing more commands at a time. Signed-off-by: Dragos Tatulea Reviewed-by: Tariq Toukan Acked-by: Eugenio P=C3=A9rez --- drivers/vdpa/mlx5/core/mlx5_vdpa.h | 2 + drivers/vdpa/mlx5/net/mlx5_vnet.c | 181 +++++++++++++++++++++++++---- 2 files changed, 161 insertions(+), 22 deletions(-) diff --git a/drivers/vdpa/mlx5/core/mlx5_vdpa.h b/drivers/vdpa/mlx5/core/ml= x5_vdpa.h index 424d445ebee4..12136163d8ad 100644 --- a/drivers/vdpa/mlx5/core/mlx5_vdpa.h +++ b/drivers/vdpa/mlx5/core/mlx5_vdpa.h @@ -103,6 +103,8 @@ struct mlx5_vdpa_dev { struct workqueue_struct *wq; unsigned int group2asid[MLX5_VDPA_NUMVQ_GROUPS]; bool suspended; + + struct mlx5_async_ctx async_ctx; }; =20 int mlx5_vdpa_create_tis(struct mlx5_vdpa_dev *mvdev, void *in, u32 *tisn); diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5= _vnet.c index 12133e5d1285..be8df9d9f4df 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -1184,40 +1184,173 @@ struct mlx5_virtq_attr { u16 used_index; }; =20 -static int query_virtqueue(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_vi= rtqueue *mvq, - struct mlx5_virtq_attr *attr) -{ - int outlen =3D MLX5_ST_SZ_BYTES(query_virtio_net_q_out); - u32 in[MLX5_ST_SZ_DW(query_virtio_net_q_in)] =3D {}; +struct mlx5_virtqueue_query_mem { + u8 in[MLX5_ST_SZ_BYTES(query_virtio_net_q_in)]; + u8 out[MLX5_ST_SZ_BYTES(query_virtio_net_q_out)]; +}; + +struct mlx5_vdpa_async_virtqueue_cmd { + int err; + struct mlx5_async_work cb_work; + struct completion cmd_done; + + void *in; + size_t inlen; + void *out; - void *obj_context; - void *cmd_hdr; + size_t outlen; + + union { + struct mlx5_virtqueue_query_mem query; + }; +}; + +static void virtqueue_cmd_callback(int status, struct mlx5_async_work *con= text) +{ + struct mlx5_vdpa_async_virtqueue_cmd *cmd =3D + container_of(context, struct mlx5_vdpa_async_virtqueue_cmd, cb_work); + + cmd->err =3D mlx5_cmd_check(context->ctx->dev, status, cmd->in, cmd->out); + complete(&cmd->cmd_done); +} + +static int issue_async_cmd(struct mlx5_vdpa_net *ndev, + struct mlx5_vdpa_async_virtqueue_cmd *cmds, + int issued, + int *completed) + +{ + struct mlx5_vdpa_async_virtqueue_cmd *cmd =3D &cmds[issued]; int err; =20 - out =3D kzalloc(outlen, GFP_KERNEL); - if (!out) - return -ENOMEM; +retry: + err =3D mlx5_cmd_exec_cb(&ndev->mvdev.async_ctx, + cmd->in, cmd->inlen, + cmd->out, cmd->outlen, + virtqueue_cmd_callback, + &cmd->cb_work); + if (err =3D=3D -EBUSY) { + if (*completed < issued) { + /* Throttled by own commands: wait for oldest completion. */ + wait_for_completion(&cmds[*completed].cmd_done); + (*completed)++; + + goto retry; + } else { + /* Throttled by external commands: switch to sync api. */ + err =3D mlx5_cmd_exec(ndev->mvdev.mdev, + cmd->in, cmd->inlen, + cmd->out, cmd->outlen); + if (!err) + (*completed)++; + } + } + + return err; +} + +static int exec_virtqueue_async_cmds(struct mlx5_vdpa_net *ndev, + struct mlx5_vdpa_async_virtqueue_cmd *cmds, + int num_cmds) +{ + int completed =3D 0; + int issued =3D 0; + int err =3D 0; + + for (int i =3D 0; i < num_cmds; i++) + init_completion(&cmds[i].cmd_done); + + while (issued < num_cmds) { + + err =3D issue_async_cmd(ndev, cmds, issued, &completed); + if (err) { + mlx5_vdpa_err(&ndev->mvdev, "error issuing command %d of %d: %d\n", + issued, num_cmds, err); + break; + } + + issued++; + } + + while (completed < issued) + wait_for_completion(&cmds[completed++].cmd_done); =20 - cmd_hdr =3D MLX5_ADDR_OF(query_virtio_net_q_in, in, general_obj_in_cmd_hd= r); + return err; +} + +static void fill_query_virtqueue_cmd(struct mlx5_vdpa_net *ndev, + struct mlx5_vdpa_virtqueue *mvq, + struct mlx5_vdpa_async_virtqueue_cmd *cmd) +{ + void *cmd_hdr; + + cmd->in =3D &cmd->query.in; + cmd->inlen =3D sizeof(cmd->query.in); + cmd->out =3D &cmd->query.out; + cmd->outlen =3D sizeof(cmd->query.out); + + cmd_hdr =3D MLX5_ADDR_OF(query_virtio_net_q_in, cmd->query.in, general_ob= j_in_cmd_hdr); =20 MLX5_SET(general_obj_in_cmd_hdr, cmd_hdr, opcode, MLX5_CMD_OP_QUERY_GENER= AL_OBJECT); MLX5_SET(general_obj_in_cmd_hdr, cmd_hdr, obj_type, MLX5_OBJ_TYPE_VIRTIO_= NET_Q); MLX5_SET(general_obj_in_cmd_hdr, cmd_hdr, obj_id, mvq->virtq_id); MLX5_SET(general_obj_in_cmd_hdr, cmd_hdr, uid, ndev->mvdev.res.uid); - err =3D mlx5_cmd_exec(ndev->mvdev.mdev, in, sizeof(in), out, outlen); - if (err) - goto err_cmd; +} + +static void query_virtqueue_end(struct mlx5_vdpa_net *ndev, + struct mlx5_vdpa_async_virtqueue_cmd *cmd, + struct mlx5_virtq_attr *attr) +{ + void *obj_context =3D MLX5_ADDR_OF(query_virtio_net_q_out, cmd->query.out= , obj_context); =20 - obj_context =3D MLX5_ADDR_OF(query_virtio_net_q_out, out, obj_context); memset(attr, 0, sizeof(*attr)); attr->state =3D MLX5_GET(virtio_net_q_object, obj_context, state); attr->available_index =3D MLX5_GET(virtio_net_q_object, obj_context, hw_a= vailable_index); attr->used_index =3D MLX5_GET(virtio_net_q_object, obj_context, hw_used_i= ndex); - kfree(out); - return 0; +} =20 -err_cmd: - kfree(out); +static int query_virtqueues(struct mlx5_vdpa_net *ndev, + int start_vq, + int num_vqs, + struct mlx5_virtq_attr *attrs) +{ + struct mlx5_vdpa_dev *mvdev =3D &ndev->mvdev; + struct mlx5_vdpa_async_virtqueue_cmd *cmds; + int err =3D 0; + + WARN(start_vq + num_vqs > mvdev->max_vqs, "query vq range invalid [%d, %d= ), max_vqs: %u\n", + start_vq, start_vq + num_vqs, mvdev->max_vqs); + + cmds =3D kvcalloc(num_vqs, sizeof(*cmds), GFP_KERNEL); + if (!cmds) + return -ENOMEM; + + for (int i =3D 0; i < num_vqs; i++) + fill_query_virtqueue_cmd(ndev, &ndev->vqs[start_vq + i], &cmds[i]); + + err =3D exec_virtqueue_async_cmds(ndev, cmds, num_vqs); + if (err) { + mlx5_vdpa_err(mvdev, "error issuing query cmd for vq range [%d, %d): %d\= n", + start_vq, start_vq + num_vqs, err); + goto done; + } + + for (int i =3D 0; i < num_vqs; i++) { + struct mlx5_vdpa_async_virtqueue_cmd *cmd =3D &cmds[i]; + int vq_idx =3D start_vq + i; + + if (cmd->err) { + mlx5_vdpa_err(mvdev, "query vq %d failed, err: %d\n", vq_idx, err); + if (!err) + err =3D cmd->err; + continue; + } + + query_virtqueue_end(ndev, cmd, &attrs[i]); + } + +done: + kfree(cmds); return err; } =20 @@ -1542,7 +1675,7 @@ static int suspend_vq(struct mlx5_vdpa_net *ndev, str= uct mlx5_vdpa_virtqueue *mv return err; } =20 - err =3D query_virtqueue(ndev, mvq, &attr); + err =3D query_virtqueues(ndev, mvq->index, 1, &attr); if (err) { mlx5_vdpa_err(&ndev->mvdev, "failed to query virtqueue, err: %d\n", err); return err; @@ -2528,7 +2661,7 @@ static int mlx5_vdpa_get_vq_state(struct vdpa_device = *vdev, u16 idx, struct vdpa return 0; } =20 - err =3D query_virtqueue(ndev, mvq, &attr); + err =3D query_virtqueues(ndev, mvq->index, 1, &attr); if (err) { mlx5_vdpa_err(mvdev, "failed to query virtqueue\n"); return err; @@ -2879,7 +3012,7 @@ static int save_channel_info(struct mlx5_vdpa_net *nd= ev, struct mlx5_vdpa_virtqu int err; =20 if (mvq->initialized) { - err =3D query_virtqueue(ndev, mvq, &attr); + err =3D query_virtqueues(ndev, mvq->index, 1, &attr); if (err) return err; } @@ -3854,6 +3987,8 @@ static int mlx5_vdpa_dev_add(struct vdpa_mgmt_dev *v_= mdev, const char *name, ndev->rqt_size =3D 1; } =20 + mlx5_cmd_init_async_ctx(mdev, &mvdev->async_ctx); + ndev->mvdev.mlx_features =3D device_features; mvdev->vdev.dma_dev =3D &mdev->pdev->dev; err =3D mlx5_vdpa_alloc_resources(&ndev->mvdev); @@ -3935,6 +4070,8 @@ static void mlx5_vdpa_dev_del(struct vdpa_mgmt_dev *v= _mdev, struct vdpa_device * mvdev->wq =3D NULL; destroy_workqueue(wq); mgtdev->ndev =3D NULL; + + mlx5_cmd_cleanup_async_ctx(&mvdev->async_ctx); } =20 static const struct vdpa_mgmtdev_ops mdev_ops =3D { --=20 2.45.2 From nobody Sun Feb 8 05:42:13 2026 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2052.outbound.protection.outlook.com [40.107.223.52]) (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 3D73B1BF316 for ; Fri, 2 Aug 2024 07:24:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583494; cv=fail; b=HRWaw3Ph00wIoqoKtL11fi5DCmnye6eS/uIHj6SHU74c5EHBroYIpQ2UVAFBGZXWIrknUbqYH2xFy1Ns+hXToDDCJxi+pNgxYLUgSW2Kh+SzrUHLc+hInQ23gavsXR6kdUsOKR1ivnJPKSvpDF9AZBR51D8CqnGeZNgOqnwDUdo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583494; c=relaxed/simple; bh=AQC6nrmSXuQue3Ae81zOXQbcl5D7ZHr/xGNZcvgcDL8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=eE2BN19BJd/dNCLbwcqIf+lDNoNHjDgKByDbjay/HI+ChIqLnOAtnocUhXOxaAhDs6DA+BiRejERRrHR3FSgDGcCEw+YIfl60KPRFa25y5ENTYZiAtcfIsqq1INGke3AbaN2l/BihjsM3Aq3QUBwKt5PWu08G2B/dJ0mhjuS8Hc= 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=rOcE1IYD; arc=fail smtp.client-ip=40.107.223.52 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="rOcE1IYD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Bzq7fV0mofnLYDMb99bEDGFm/eQ46t6H/n/4cCFcSPvY1tGA8HH9z8chR9LBqg836FY9n/HsuT67oZnDqSZdzNqdOUhZe/jLGlYcnzbiZUnzWnHsF2m7zRSqVELpStQpLwOJcPM+jaJw/4b9MjdxKwAbzsEj1nfSRew3QOJR5K6VECXMf+zXwCl1JGq6v/x23MLmQEauZWlhQUV386DqjcVMZDWJD9BS+wk0DGatqsBJqa89w3zdtn7hKq95Im4p4RAmQFt99z8+co0TreUSfrV3MPlog6BS5BsXJ1yTMlm4KQEfAybaQUM7F8OrXjpMahuSvXHlhlVZF28EuJZyDg== 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=GmD8ZNeHPCAb5iNDNcSObGVC0wf0GlR1gfYLa+WmHGw=; b=GhE+8RDs5H9NjYlB1JjktkLB140ae++VaEp4+KgTkQBuqS/o3Ovqm+uYecqHPWBTF8Zkr+XGwAX3HkBzdX5Lx30dhEizC1YBz/iDV37NYTa/7m+FsAJhzkfxcpIKNWVkqa3Y+fcyrECp8RjeUR7DBoGgcJqsHOdgOhyaff0k1SWaMRHqUa/Te8OHHrQXmJcu1Xn2tjUUdtZTiArZpztlfoHN6HRSByv1klil3nH4/tE5tTsTvL3fZvTGkIhnlX7ANs8hvUnQcyW8TLO+9VCoZE7aYcwhZqVNE0bw6HNC4J8XUO2YktZfi3j1dM3clkaNKPwc/O+TmyX+mXTBznsGpA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=redhat.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) 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=GmD8ZNeHPCAb5iNDNcSObGVC0wf0GlR1gfYLa+WmHGw=; b=rOcE1IYDi4gIY1ZoVXIQTZkRCJB6Frad741dvmx12qKAlunmQ+KpChhBFk342Im1o8yMJfBTVfhWCKWEEOLXdv3rMabYESJ3sQnGeXKJr6WqTV9w+0O54fP0fEbECSY5QIQZY3TsNEKAAOrgx8mSZ9LBZvepSlAsEL3ptvlNRd0ttup/XwVixxW2xsycu0ZN3iNJmLjvjFT9OMiXFzxdBA7mI2iFhyXk7gF+Cy0kfxLGC9mS2LCjVQ7aJzqiScu+4Bmcr8wk40WO15hVW8RzyLE8i8GIt9dEMkYJTs+ALO82CGsDsFAlxX+QPuNyjjowqNM237IUBjVax9BWy7lFqw== Received: from CH5PR03CA0008.namprd03.prod.outlook.com (2603:10b6:610:1f1::26) by DM4PR12MB6541.namprd12.prod.outlook.com (2603:10b6:8:88::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.23; Fri, 2 Aug 2024 07:24:49 +0000 Received: from CH2PEPF00000143.namprd02.prod.outlook.com (2603:10b6:610:1f1:cafe::79) by CH5PR03CA0008.outlook.office365.com (2603:10b6:610:1f1::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.23 via Frontend Transport; Fri, 2 Aug 2024 07:24:49 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CH2PEPF00000143.mail.protection.outlook.com (10.167.244.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.19 via Frontend Transport; Fri, 2 Aug 2024 07:24:49 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:36 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:35 -0700 Received: from dev-l-177.mtl.labs.mlnx (10.127.8.11) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Fri, 2 Aug 2024 00:24:33 -0700 From: Dragos Tatulea To: Dragos Tatulea , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= CC: Si-Wei Liu , Tariq Toukan , , Subject: [PATCH vhost 4/7] vdpa/mlx5: Use async API for vq modify commands Date: Fri, 2 Aug 2024 10:20:21 +0300 Message-ID: <20240802072039.267446-5-dtatulea@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240802072039.267446-1-dtatulea@nvidia.com> References: <20240802072039.267446-1-dtatulea@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: CH2PEPF00000143:EE_|DM4PR12MB6541:EE_ X-MS-Office365-Filtering-Correlation-Id: d9813031-532d-48d6-4d97-08dcb2c43188 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?OJc9a7/6HyeP1j1cCr11SSK7OU/ry9HU1SdLkCrbX/m6GtD55cjWY3UQKOXg?= =?us-ascii?Q?So4MJkHXCbnXJRDvYiCGXoPZJvuuttRCZIHqzpKp0ShDAu/ILeJsbVX20pNQ?= =?us-ascii?Q?RisVjUsaEU9nzeSFqLv4M2WkXln95JU42YmqVbACCKPQa4o/KiExX8I8Y00M?= =?us-ascii?Q?hXxLtApB+nyi1zBDXBC7gadr2ToSYUxihfmQWJjwzWSVXxCFs+kKy86i65Hv?= =?us-ascii?Q?EHP7k3ZN8vDc99dyrrxRWwJnuXOidW3yciRtlFHgW0KFaF+IITBP7IzKT5ye?= =?us-ascii?Q?RxBFiDx1JxBGWdgEXfjSyWiUiOejdjZynqN3oSsKSFRjS4AcEkGXB2UXevYc?= =?us-ascii?Q?MeG8iFO6x2BHyEenoCceWeLQ5sAyiMhwKnT4XrIP0pIKP4p8U5SRAdew+LmS?= =?us-ascii?Q?dLw1FmWGPaKZuGevWVN634hLxEEpPk5htZGO0z6GgXqv9hbbNHAHm9ZI6yoe?= =?us-ascii?Q?kiDKS45ZdNzMQ06YpVbx0Dltds+LrQziOU4hrhCullc+ImCnA7CtCAnn0/fF?= =?us-ascii?Q?7mrSHf0XpwuHw9SSLdDiAqNF6b1hZwn9wIt2vUHYxnI5qaq/Z3poBoc1ov4J?= =?us-ascii?Q?+kqH32uhnfoVuTYw6SYOVhv21DiVv0A8HXrXWF/IF1LQe34kAZdirl7PVkGu?= =?us-ascii?Q?xg60ENMi4Kd+2h/Kerv5yqUX/i39Jobuq8ssiHRTe90pOcrD4eadDbhvU2eI?= =?us-ascii?Q?O0E5KC634wGguXCR0DywHvo5O9QD1+7Wlf5qT+fsypdHAYjx1oYM+KxmlgmC?= =?us-ascii?Q?BR7suBaxH1de0+NBZT4u423NgTdKzQdmJs0MHPf6yiW9qf/+oyLmg+AXVSv7?= =?us-ascii?Q?00TZSf64rKg9uLiDHobYs6sf5O6Yv4MakIlAn99Vnfk/ahsYkfNp0lJga/9s?= =?us-ascii?Q?zL9OczGp/ROSwYTtNS664MhLcp9x7Cv3qDu9xN4IFoTwEict/RgEhfLTlxkX?= =?us-ascii?Q?KIEacRAsX7mosqKbD+JTusOZBiyYmAa/4CaIO1Uf0EApqJYN34v/OSXcJGqA?= =?us-ascii?Q?DpIHwJz1mxKBfNsBbqcbT5EDASXj6w4Tm7dXBvcdiUB8sExuS8t+KZXMjKT5?= =?us-ascii?Q?fK4k2AU2LEBxOgHyiWjSlqe+/7n8ayWmFRaUBbKUs2b7TvaJ0sHjV/YewLuP?= =?us-ascii?Q?+5RT39a1YV+RwgMrvGckn/MiBZvS1dGXNiFElQn0vQe23sEMSCiGTv9BfbO4?= =?us-ascii?Q?GK8zHrRiuujqv0BMF9fymlVaDAaFGcSK+dodqwKqhOm30fzb1zKh4r0Db5GR?= =?us-ascii?Q?3GBRvA5sD0KmHjlH4G49qlQUqpxxwy3LxMsnRSsdweMlwQtJPGEwkiOoBmZ1?= =?us-ascii?Q?SwvKrw2gHJH3RP77L4FH5Tk+euRAUYzY39v1+urZctiFMvxqb3AJUUtazFds?= =?us-ascii?Q?gHjbD7EozEtb6VeqNta+tSVdkO8pDkijObJz/+9ra2yqqfpEPtZyTGHW1GXQ?= =?us-ascii?Q?cklpM0lIZAM4LTHD6mqL+eBoV4e/PXMF?= X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(82310400026)(1800799024)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2024 07:24:49.2555 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d9813031-532d-48d6-4d97-08dcb2c43188 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH2PEPF00000143.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6541 Content-Type: text/plain; charset="utf-8" Switch firmware vq modify command to be issued via the async API to allow future parallelization. The new refactored function applies the modify on a range of vqs and waits for their execution to complete. For now the command is still used in a serial fashion. A later patch will switch to modifying multiple vqs in parallel. Signed-off-by: Dragos Tatulea Reviewed-by: Tariq Toukan Acked-by: Eugenio P=C3=A9rez --- drivers/vdpa/mlx5/net/mlx5_vnet.c | 150 ++++++++++++++++++++---------- 1 file changed, 103 insertions(+), 47 deletions(-) diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5= _vnet.c index be8df9d9f4df..e56a0ee1b725 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -1189,6 +1189,12 @@ struct mlx5_virtqueue_query_mem { u8 out[MLX5_ST_SZ_BYTES(query_virtio_net_q_out)]; }; =20 +struct mlx5_virtqueue_modify_mem { + u8 in[MLX5_ST_SZ_BYTES(modify_virtio_net_q_in)]; + u8 out[MLX5_ST_SZ_BYTES(modify_virtio_net_q_out)]; +}; + + struct mlx5_vdpa_async_virtqueue_cmd { int err; struct mlx5_async_work cb_work; @@ -1202,6 +1208,7 @@ struct mlx5_vdpa_async_virtqueue_cmd { =20 union { struct mlx5_virtqueue_query_mem query; + struct mlx5_virtqueue_modify_mem modify; }; }; =20 @@ -1384,51 +1391,35 @@ static bool modifiable_virtqueue_fields(struct mlx5= _vdpa_virtqueue *mvq) return true; } =20 -static int modify_virtqueue(struct mlx5_vdpa_net *ndev, - struct mlx5_vdpa_virtqueue *mvq, - int state) +static void fill_modify_virtqueue_cmd(struct mlx5_vdpa_net *ndev, + struct mlx5_vdpa_virtqueue *mvq, + int state, + struct mlx5_vdpa_async_virtqueue_cmd *cmd) { - int inlen =3D MLX5_ST_SZ_BYTES(modify_virtio_net_q_in); - u32 out[MLX5_ST_SZ_DW(modify_virtio_net_q_out)] =3D {}; struct mlx5_vdpa_dev *mvdev =3D &ndev->mvdev; struct mlx5_vdpa_mr *desc_mr =3D NULL; struct mlx5_vdpa_mr *vq_mr =3D NULL; - bool state_change =3D false; void *obj_context; void *cmd_hdr; void *vq_ctx; - void *in; - int err; =20 - if (mvq->fw_state =3D=3D MLX5_VIRTIO_NET_Q_OBJECT_NONE) - return 0; - - if (!modifiable_virtqueue_fields(mvq)) - return -EINVAL; - - in =3D kzalloc(inlen, GFP_KERNEL); - if (!in) - return -ENOMEM; + cmd->in =3D &cmd->modify.in; + cmd->inlen =3D sizeof(cmd->modify.in); + cmd->out =3D &cmd->modify.out; + cmd->outlen =3D sizeof(cmd->modify.out); =20 - cmd_hdr =3D MLX5_ADDR_OF(modify_virtio_net_q_in, in, general_obj_in_cmd_h= dr); + cmd_hdr =3D MLX5_ADDR_OF(modify_virtio_net_q_in, cmd->in, general_obj_in_= cmd_hdr); =20 MLX5_SET(general_obj_in_cmd_hdr, cmd_hdr, opcode, MLX5_CMD_OP_MODIFY_GENE= RAL_OBJECT); MLX5_SET(general_obj_in_cmd_hdr, cmd_hdr, obj_type, MLX5_OBJ_TYPE_VIRTIO_= NET_Q); MLX5_SET(general_obj_in_cmd_hdr, cmd_hdr, obj_id, mvq->virtq_id); MLX5_SET(general_obj_in_cmd_hdr, cmd_hdr, uid, ndev->mvdev.res.uid); =20 - obj_context =3D MLX5_ADDR_OF(modify_virtio_net_q_in, in, obj_context); + obj_context =3D MLX5_ADDR_OF(modify_virtio_net_q_in, cmd->in, obj_context= ); vq_ctx =3D MLX5_ADDR_OF(virtio_net_q_object, obj_context, virtio_q_contex= t); =20 - if (mvq->modified_fields & MLX5_VIRTQ_MODIFY_MASK_STATE) { - if (!is_valid_state_change(mvq->fw_state, state, is_resumable(ndev))) { - err =3D -EINVAL; - goto done; - } - + if (mvq->modified_fields & MLX5_VIRTQ_MODIFY_MASK_STATE) MLX5_SET(virtio_net_q_object, obj_context, state, state); - state_change =3D true; - } =20 if (mvq->modified_fields & MLX5_VIRTQ_MODIFY_MASK_VIRTIO_Q_ADDRS) { MLX5_SET64(virtio_q, vq_ctx, desc_addr, mvq->desc_addr); @@ -1474,38 +1465,36 @@ static int modify_virtqueue(struct mlx5_vdpa_net *n= dev, } =20 MLX5_SET64(virtio_net_q_object, obj_context, modify_field_select, mvq->mo= dified_fields); - err =3D mlx5_cmd_exec(ndev->mvdev.mdev, in, inlen, out, sizeof(out)); - if (err) - goto done; +} =20 - if (state_change) - mvq->fw_state =3D state; +static void modify_virtqueue_end(struct mlx5_vdpa_net *ndev, + struct mlx5_vdpa_virtqueue *mvq, + int state) +{ + struct mlx5_vdpa_dev *mvdev =3D &ndev->mvdev; =20 if (mvq->modified_fields & MLX5_VIRTQ_MODIFY_MASK_VIRTIO_Q_MKEY) { + unsigned int asid =3D mvdev->group2asid[MLX5_VDPA_DATAVQ_GROUP]; + struct mlx5_vdpa_mr *vq_mr =3D mvdev->mr[asid]; + mlx5_vdpa_put_mr(mvdev, mvq->vq_mr); mlx5_vdpa_get_mr(mvdev, vq_mr); mvq->vq_mr =3D vq_mr; } =20 if (mvq->modified_fields & MLX5_VIRTQ_MODIFY_MASK_DESC_GROUP_MKEY) { + unsigned int asid =3D mvdev->group2asid[MLX5_VDPA_DATAVQ_DESC_GROUP]; + struct mlx5_vdpa_mr *desc_mr =3D mvdev->mr[asid]; + mlx5_vdpa_put_mr(mvdev, mvq->desc_mr); mlx5_vdpa_get_mr(mvdev, desc_mr); mvq->desc_mr =3D desc_mr; } =20 - mvq->modified_fields =3D 0; - -done: - kfree(in); - return err; -} + if (mvq->modified_fields & MLX5_VIRTQ_MODIFY_MASK_STATE) + mvq->fw_state =3D state; =20 -static int modify_virtqueue_state(struct mlx5_vdpa_net *ndev, - struct mlx5_vdpa_virtqueue *mvq, - unsigned int state) -{ - mvq->modified_fields |=3D MLX5_VIRTQ_MODIFY_MASK_STATE; - return modify_virtqueue(ndev, mvq, state); + mvq->modified_fields =3D 0; } =20 static int counter_set_alloc(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_= virtqueue *mvq) @@ -1658,6 +1647,73 @@ static int setup_vq(struct mlx5_vdpa_net *ndev, return err; } =20 +static int modify_virtqueues(struct mlx5_vdpa_net *ndev, int start_vq, int= num_vqs, int state) +{ + struct mlx5_vdpa_async_virtqueue_cmd *cmds; + struct mlx5_vdpa_dev *mvdev =3D &ndev->mvdev; + int err =3D 0; + + WARN(start_vq + num_vqs > mvdev->max_vqs, "modify vq range invalid [%d, %= d), max_vqs: %u\n", + start_vq, start_vq + num_vqs, mvdev->max_vqs); + + cmds =3D kvcalloc(num_vqs, sizeof(*cmds), GFP_KERNEL); + if (!cmds) + return -ENOMEM; + + for (int i =3D 0; i < num_vqs; i++) { + struct mlx5_vdpa_async_virtqueue_cmd *cmd =3D &cmds[i]; + struct mlx5_vdpa_virtqueue *mvq; + int vq_idx =3D start_vq + i; + + mvq =3D &ndev->vqs[vq_idx]; + + if (!modifiable_virtqueue_fields(mvq)) { + err =3D -EINVAL; + goto done; + } + + if (mvq->fw_state !=3D state) { + if (!is_valid_state_change(mvq->fw_state, state, is_resumable(ndev))) { + err =3D -EINVAL; + goto done; + } + + mvq->modified_fields |=3D MLX5_VIRTQ_MODIFY_MASK_STATE; + } + + fill_modify_virtqueue_cmd(ndev, mvq, state, cmd); + } + + err =3D exec_virtqueue_async_cmds(ndev, cmds, num_vqs); + if (err) { + mlx5_vdpa_err(mvdev, "error issuing modify cmd for vq range [%d, %d)\n", + start_vq, start_vq + num_vqs); + goto done; + } + + for (int i =3D 0; i < num_vqs; i++) { + struct mlx5_vdpa_async_virtqueue_cmd *cmd =3D &cmds[i]; + struct mlx5_vdpa_virtqueue *mvq; + int vq_idx =3D start_vq + i; + + mvq =3D &ndev->vqs[vq_idx]; + + if (cmd->err) { + mlx5_vdpa_err(mvdev, "modify vq %d failed, state: %d -> %d, err: %d\n", + vq_idx, mvq->fw_state, state, err); + if (!err) + err =3D cmd->err; + continue; + } + + modify_virtqueue_end(ndev, mvq, state); + } + +done: + kfree(cmds); + return err; +} + static int suspend_vq(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtque= ue *mvq) { struct mlx5_virtq_attr attr; @@ -1669,7 +1725,7 @@ static int suspend_vq(struct mlx5_vdpa_net *ndev, str= uct mlx5_vdpa_virtqueue *mv if (mvq->fw_state !=3D MLX5_VIRTIO_NET_Q_OBJECT_STATE_RDY) return 0; =20 - err =3D modify_virtqueue_state(ndev, mvq, MLX5_VIRTIO_NET_Q_OBJECT_STATE_= SUSPEND); + err =3D modify_virtqueues(ndev, mvq->index, 1, MLX5_VIRTIO_NET_Q_OBJECT_S= TATE_SUSPEND); if (err) { mlx5_vdpa_err(&ndev->mvdev, "modify to suspend failed, err: %d\n", err); return err; @@ -1716,7 +1772,7 @@ static int resume_vq(struct mlx5_vdpa_net *ndev, stru= ct mlx5_vdpa_virtqueue *mvq /* Due to a FW quirk we need to modify the VQ fields first then change s= tate. * This should be fixed soon. After that, a single command can be used. */ - err =3D modify_virtqueue(ndev, mvq, 0); + err =3D modify_virtqueues(ndev, mvq->index, 1, mvq->fw_state); if (err) { mlx5_vdpa_err(&ndev->mvdev, "modify vq properties failed for vq %u, err: %d\n", @@ -1738,7 +1794,7 @@ static int resume_vq(struct mlx5_vdpa_net *ndev, stru= ct mlx5_vdpa_virtqueue *mvq return -EINVAL; } =20 - err =3D modify_virtqueue_state(ndev, mvq, MLX5_VIRTIO_NET_Q_OBJECT_STATE_= RDY); + err =3D modify_virtqueues(ndev, mvq->index, 1, MLX5_VIRTIO_NET_Q_OBJECT_S= TATE_RDY); if (err) mlx5_vdpa_err(&ndev->mvdev, "modify to resume failed for vq %u, err: %d\= n", mvq->index, err); --=20 2.45.2 From nobody Sun Feb 8 05:42:13 2026 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2059.outbound.protection.outlook.com [40.107.101.59]) (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 9BB151C0DFE for ; Fri, 2 Aug 2024 07:24:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.101.59 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583497; cv=fail; b=BiKIlJAJ9KjDXL13jSkGyNjZImzxZ6KHa8JZ51r1sSVvbFQOTFxMyr4Jbu0ff7oCRt4lWb8SKJvYQwDowfNzwL1tztFWlnw1FfOdVY1Dxvi7JxWiIBxjMflOaaDsvx0qezrNLlag/zmhH+uBKnBmJInJ6vvwx7wVjeyGUg7LIBs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583497; c=relaxed/simple; bh=ZiUTAvRdB/T5M0v/iYfar5K8MOlYIYYVGI4lX1Yh4sY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=f5H6ImX74gIJfspU6PfbZXU3hG24mND5Y9Id4x73/h37aiRT8DiWhHW4QLDEe0YUtPF24A6MQiBIL9eji8ksxjYayjHZpB54uVoLd51b2GbmW21CvCGYoHtNpIOGgdSwktmo+EjfoV1BKTVXwGr8Dzxy76tDfdkY2WiFxWpZMdI= 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=cz+BV79G; arc=fail smtp.client-ip=40.107.101.59 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="cz+BV79G" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=R3/ZqctKHuXr2D2m6ni3vnS71e6L8d1vrm5QFgx2vTslaWdt0bzrEOnYM2u6OVo0vfF+yQMF08iJx7vI+vAbgPtvpYm8lxty+T4vYxnKVnAM0OsL2xFKr9/qXRE2WGNDf/7UHMoTleqa6yflBlkJiHHhAfIdL+QL0gxMasokC58dDI1T+V7DKWUnQyl2xAIMB5kcWFMzBjoc3KHtmTh8m9HIUaa6ojhPfOkmHAa3eFn5zzKqhe5oq9d9N9NkwtQchvwpvQwdcZWPc2Yv2sSEWHi+CQxxJFvQQnpwjvP/qyeD+00cje5uBF0szSjdJsOIzhkUyfJf1+nX9fX7ueu2gQ== 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=9dSnGiN3Qnf8DRC0KPA4mo7fyyvJQWFbY4XjuoOc9Us=; b=sQEgIDCHp6FWvJ2M5eBLWJwll90ff6oYtFFUut7mLvWBl3fW6FYkk6ylAzzv9jjfmnVBeQjqdmcyi1NE6WiLr47z0Uu250CwlfJM7vmhzLdryv6cwKDa57ysBfbE0C44NwMqsXm+Dhni4Ahrp+xYE3wt/QrKQhIe3D6rBhYnkbOAMzijKlWGiaRD7gE18DJ9LgyrrLgyr3Ds2hsGqLdSFO15Y7hpZjs4ELYvdU9lxyt5pdyaOvq4Lryozlu2kUAXoxmGpDv8vlBB36EPbT74nZTKlN75h2bBRpZ6oT9byxGx255XZt5zRqbvvx1pj7l1il7pV9KcMdPdTsFSrI2TrA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=redhat.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) 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=9dSnGiN3Qnf8DRC0KPA4mo7fyyvJQWFbY4XjuoOc9Us=; b=cz+BV79GFsW2nV8/u9iMXrhhtarguXg4sbm3BM/yyrIgZhMBwIbTrA9PM+ODHIuqPU1cTJEx9wK0yG02yUdrGFljlY9PpsfDSEayM2mpIrd4QRGj8xZfGER4Qj2MWA35aHg+nDNpWSkCkh2adjGCWaIlrbsp7kZk/x6NEkjQGoBvnCeqnmZEpSobStIMRgMSY/8AppvjNMEMZgw1Us6GJ68u/ha5/T8peUx6PdECNpkhpRj/6qaJB26cnHQkK+bzr3A/n5g17k6FSqZD1vAFkLZGFxyxGmQOyjDuuoXdZb2LzA6Ge8B5gWek7kEZWxbn3J7RrbWAYFUnGcAol5J1Rg== Received: from CH0PR04CA0050.namprd04.prod.outlook.com (2603:10b6:610:77::25) by DS0PR12MB7746.namprd12.prod.outlook.com (2603:10b6:8:135::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.22; Fri, 2 Aug 2024 07:24:53 +0000 Received: from CH2PEPF00000144.namprd02.prod.outlook.com (2603:10b6:610:77:cafe::e5) by CH0PR04CA0050.outlook.office365.com (2603:10b6:610:77::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.23 via Frontend Transport; Fri, 2 Aug 2024 07:24:53 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CH2PEPF00000144.mail.protection.outlook.com (10.167.244.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.19 via Frontend Transport; Fri, 2 Aug 2024 07:24:52 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:40 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:39 -0700 Received: from dev-l-177.mtl.labs.mlnx (10.127.8.11) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Fri, 2 Aug 2024 00:24:37 -0700 From: Dragos Tatulea To: Dragos Tatulea , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= CC: Si-Wei Liu , Tariq Toukan , , Subject: [PATCH vhost 5/7] vdpa/mlx5: Parallelize device suspend Date: Fri, 2 Aug 2024 10:20:22 +0300 Message-ID: <20240802072039.267446-6-dtatulea@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240802072039.267446-1-dtatulea@nvidia.com> References: <20240802072039.267446-1-dtatulea@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: CH2PEPF00000144:EE_|DS0PR12MB7746:EE_ X-MS-Office365-Filtering-Correlation-Id: 96b8e434-b318-49cd-d211-08dcb2c433ab X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?plJb4wVe6a40rpt+rqU92vQ1QU/T5UPKHkW3m9bJkzq/vZMnV2MX2dI02YI8?= =?us-ascii?Q?/XZd+pZ64uNQFiCFGHHbh0HpKTQvF6PzJrJ6N8EPy78ojoWGSCoDCM2i1nx7?= =?us-ascii?Q?VQ5YfqxZV6F8LCupK6E0dxJ0HqImp85+RN6jCEqep0WW/seqWkZ9Ic7w/3dA?= =?us-ascii?Q?Gd7Nm2vHVlNrmkd5Znw8A56QyHbZD4UEQXK9ASpAr+KJauXhXoB0rLOVEgEG?= =?us-ascii?Q?ljbMEhrl5e8fka+3AeoU+Ls6W1jpINzfw5Kf0gDGYNP0DnEkh6urdYPlPlDx?= =?us-ascii?Q?bSIadM7SlD+UUb4bw9O45OLEP81ruJPHM6lBXitembKWaZHIvRgg4zkz2TFl?= =?us-ascii?Q?itGLsBFZ4hCOAblTxAnx8LFjdYsAA49rhk7J9S6HSOuo9T3uDMNAaTxrEamz?= =?us-ascii?Q?H0KWv1570b9eQeD4kHbPAb7LvEPsl+12f55Ej4es+uFaC+NhS1wKPEujFsIV?= =?us-ascii?Q?mrjKzrYQmPApBr4nLNszLYHD3jW6TlpERgOK8W4YYJFDTVNrLIjqKSXdoRNL?= =?us-ascii?Q?mK7ia77OUs3+nWhIDKa3H9TwmxEwynto33/N+gBe4l41tbe73aJxi1iRsSeO?= =?us-ascii?Q?g+fn3XDMf22SW5FmWILm33dWc/lGV/NCj/LzyEMlHcU8O2RklEd5ZtnyT5Sd?= =?us-ascii?Q?RKYd/mn7oeO24a0z7K4oJXX+ZXRXGAh2rlZvJF70A45QsgArphP9AakHITGh?= =?us-ascii?Q?K28crwkzL7mpgjKlTxL2w6vvYcBBksfUPz33KnykLRlWcmWNPjGSKubXdA1N?= =?us-ascii?Q?yw8PTULcx4kCB0if+6uk78PW2Fklg7xduCZ14tglh5+kpysVTaKM8NKh0Zr1?= =?us-ascii?Q?S3GOwoWG1AoNVtEw8OELw0smknnb2mwIVWeKbA4DrFbUvSiDuTx8cZuYbeKx?= =?us-ascii?Q?3f7X2mD5ZrOR3Wp5TYgaCmL0Wbdu6DwaLi8Mw9jMONDYWaSX4vAA8bkiP+TJ?= =?us-ascii?Q?UW5YSjzHim5BGTrgYP9LR6IhNHLkUzcPDKCmltOc2Qriyot+eFHxTWfgFg65?= =?us-ascii?Q?RfNlo1WybtZPv9R0LszD+TQ3VtCU7sFMOp6/iFwcYx1pWzbTIicH4yYU1Uqr?= =?us-ascii?Q?q+fB9LYb3ChrUKXN6CUEnem3eSZO1xWMdW3BZLXCHFyrOrSu3Q3NN+LTQ8pu?= =?us-ascii?Q?qVLqcUo0k4Q0LO/jZ3C8u9BNq3jUBTCIr1kOulpQGWgWqZRXv1f8SSyycRYF?= =?us-ascii?Q?9xpTuAPP5ANAnizxtn5/8cN1V3C8qS4vR91WjCQ8JiU7ZXfGt7uUWNZ7ScLm?= =?us-ascii?Q?Fr8W3Kpc76YMNvEpJerbSV2YVFtX0erh5pFQNLRE5opIxA3xrTmAwVoUdhiI?= =?us-ascii?Q?lpCOSXwtfvWHrS/ET6KmhbFttSn/718TbmwnRD1m3OGLqFJJpfL62IjnPJ70?= =?us-ascii?Q?a/G8QvcFso54DGyUixYu5Im2r8LTYDKN5LFKuU2J5OsuWFt7++/nxYMKgQ0P?= =?us-ascii?Q?Vp9LCuK6Q31265payabM/F5SFiCrmpwv?= X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(376014)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2024 07:24:52.8437 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 96b8e434-b318-49cd-d211-08dcb2c433ab X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH2PEPF00000144.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB7746 Content-Type: text/plain; charset="utf-8" Currently device suspend works on vqs serially. Building up on previous changes that converted vq operations to the async api, this patch parallelizes the device suspend: 1) Suspend all active vqs parallel. 2) Query suspended vqs in parallel. For 1 vDPA device x 32 VQs (16 VQPs) attached to a large VM (256 GB RAM, 32 CPUs x 2 threads per core), the device suspend time is reduced from ~37 ms to ~13 ms. A later patch will remove the link unregister operation which will make it even faster. Signed-off-by: Dragos Tatulea Reviewed-by: Tariq Toukan Acked-by: Eugenio P=C3=A9rez --- drivers/vdpa/mlx5/net/mlx5_vnet.c | 56 ++++++++++++++++--------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5= _vnet.c index e56a0ee1b725..1887939c5673 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -1714,49 +1714,51 @@ static int modify_virtqueues(struct mlx5_vdpa_net *= ndev, int start_vq, int num_v return err; } =20 -static int suspend_vq(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtque= ue *mvq) +static int suspend_vqs(struct mlx5_vdpa_net *ndev, int start_vq, int num_v= qs) { - struct mlx5_virtq_attr attr; + struct mlx5_vdpa_virtqueue *mvq; + struct mlx5_virtq_attr *attrs; + int vq_idx, i; int err; =20 + if (start_vq >=3D ndev->cur_num_vqs) + return -EINVAL; + + mvq =3D &ndev->vqs[start_vq]; if (!mvq->initialized) return 0; =20 if (mvq->fw_state !=3D MLX5_VIRTIO_NET_Q_OBJECT_STATE_RDY) return 0; =20 - err =3D modify_virtqueues(ndev, mvq->index, 1, MLX5_VIRTIO_NET_Q_OBJECT_S= TATE_SUSPEND); - if (err) { - mlx5_vdpa_err(&ndev->mvdev, "modify to suspend failed, err: %d\n", err); - return err; - } - - err =3D query_virtqueues(ndev, mvq->index, 1, &attr); - if (err) { - mlx5_vdpa_err(&ndev->mvdev, "failed to query virtqueue, err: %d\n", err); + err =3D modify_virtqueues(ndev, start_vq, num_vqs, MLX5_VIRTIO_NET_Q_OBJE= CT_STATE_SUSPEND); + if (err) return err; - } - - mvq->avail_idx =3D attr.available_index; - mvq->used_idx =3D attr.used_index; - - return 0; -} =20 -static int suspend_vqs(struct mlx5_vdpa_net *ndev) -{ - int err =3D 0; - int i; + attrs =3D kcalloc(num_vqs, sizeof(struct mlx5_virtq_attr), GFP_KERNEL); + if (!attrs) + return -ENOMEM; =20 - for (i =3D 0; i < ndev->cur_num_vqs; i++) { - int local_err =3D suspend_vq(ndev, &ndev->vqs[i]); + err =3D query_virtqueues(ndev, start_vq, num_vqs, attrs); + if (err) + goto done; =20 - err =3D local_err ? local_err : err; + for (i =3D 0, vq_idx =3D start_vq; i < num_vqs; i++, vq_idx++) { + mvq =3D &ndev->vqs[vq_idx]; + mvq->avail_idx =3D attrs[i].available_index; + mvq->used_idx =3D attrs[i].used_index; } =20 +done: + kfree(attrs); return err; } =20 +static int suspend_vq(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtque= ue *mvq) +{ + return suspend_vqs(ndev, mvq->index, 1); +} + static int resume_vq(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueu= e *mvq) { int err; @@ -3137,7 +3139,7 @@ static int mlx5_vdpa_change_map(struct mlx5_vdpa_dev = *mvdev, bool teardown =3D !is_resumable(ndev); int err; =20 - suspend_vqs(ndev); + suspend_vqs(ndev, 0, ndev->cur_num_vqs); if (teardown) { err =3D save_channels_info(ndev); if (err) @@ -3690,7 +3692,7 @@ static int mlx5_vdpa_suspend(struct vdpa_device *vdev) =20 down_write(&ndev->reslock); unregister_link_notifier(ndev); - err =3D suspend_vqs(ndev); + err =3D suspend_vqs(ndev, 0, ndev->cur_num_vqs); mlx5_vdpa_cvq_suspend(mvdev); mvdev->suspended =3D true; up_write(&ndev->reslock); --=20 2.45.2 From nobody Sun Feb 8 05:42:13 2026 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2053.outbound.protection.outlook.com [40.107.236.53]) (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 3A5C31C233A for ; Fri, 2 Aug 2024 07:25:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583504; cv=fail; b=iIuK/tOvKSQ2DpHJRtxaFmexUq24SM8Gz6XXhEimMONMB3RhReD0w1gUpQV43n4Qh4tfJpnw44798mwDx7QU5aikLcl5qzxhKEJ+TuPLgjop3/aqsUNAfX1bfK8pwoZ0G+6n8PXlnsUvrs25kf+tFbzPQyVZ+rkiz1OG5YNdMV0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583504; c=relaxed/simple; bh=zOqykgshV8PWrA4TDWUt1QJId7VdK3lgaYQZrudRB14=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pkOshSjgrk1igEWqceP/HLJAHx/bp4EJVN1LfYHXHJMYjl0jqT8K4c2H2y40FpPv/s7Aw/7p5toCDO7WDQm8M7wHYtuYrbMNLQzSXxy3+dFbPsCJ4jmrUnIG16isgUiJ/LX3EY+m17tyhVq+uq/NtXEHwaTRxw4gsfXYivEd3g4= 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=Tq7XZHsX; arc=fail smtp.client-ip=40.107.236.53 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="Tq7XZHsX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eKlLuB5IakCqa+m2rXf5Cz8XFWjlbEqVa8YoeWnMxpsnyaOleIzZfoehmAnEWonsubTXYJpqzAtwpzf7aTGDVn1fV5nctXrZBDhJsv+zKR/U6TC4N3JqFT1L7lYG8XonvsizGrV1m4xaIzhShlcV7Ht7v/XBCutDf6AVE0Z+MLbcotg7oMxuS9t9quCI6tUeD1bWqcYdbKkr3P2SXjtKAA+IRdccC28fdA8/4VdBExY7uN6NyBvfRoGyfX2B+w5HE4cq19oFCPI+v7dF6BWg9u6Tniib3jG+MutCRwKogVW8qFHM1RpK8ts9f5lSbGwzLq6ssP5A7Wf6a1dPY/ad/w== 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=QXmPlIwj6VycoUapHOhFBDEW7WszrIdTIdXKwTgODw4=; b=hUsJiDd2HDpICNxn1m1SOscloF3MCZN58fcsOl4U95zqUl7QcpW70pNOqVUSWYHoSzu+K48D/cMsG5NZ+9FFpP53fUUZssZ8erLDfZyK7scYCEPvZ7jt9bITM3r2jPa1lRqTFWn+NtyJQlcwnngI2njUbk5zDOv5GugOx75RbKx0i42UMdRrx6Ml0heqMzFOYEGnHIYFRocVf3ACFKpftSKea94E/C9peXJgeliJpzge6TIaRuPwKOj86jFp8RTcXCW0tFxbbopCwE4YavkjpvtdqCSVYW2o30/ytq3bhYUrG4WJ+i4RgeaILZ326PtQ7A3sgTLxSfO7BEs4Lcu2dw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=redhat.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) 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=QXmPlIwj6VycoUapHOhFBDEW7WszrIdTIdXKwTgODw4=; b=Tq7XZHsXYyGNuXqTPtApp6jVZpIn9PbiNK7NUU20KwLiM3zh1fk4htBpQXEQrVJPaZHEyJ7Fa8mi3OS+vIFZUr8snHyROCTONDsJvMsgdhSQ7z3BChE/mYhQneXnlyp0CUWlxQBHP0auTPuS44aqmrn0YwJgYDdN3xJU5KNvHprgFyBLZwc5sxFbxcsSI5zpVYWO5miQYyiq1hCnFp0xfCGAU8Oy2kZ8p4sgs9TtGzIgyWvl2s1wpEcO1hW0bKforuOM0fp0U8LEypHeMGZNOZOQg3Yph6TqU7GN+cdd3S/RBAUXa8siWowL65OcrU/0RJh72EwnHxNKR145O0ODGg== Received: from BL1PR13CA0122.namprd13.prod.outlook.com (2603:10b6:208:2bb::7) by CH3PR12MB8971.namprd12.prod.outlook.com (2603:10b6:610:177::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7807.27; Fri, 2 Aug 2024 07:24:58 +0000 Received: from BL6PEPF0001AB4F.namprd04.prod.outlook.com (2603:10b6:208:2bb:cafe::53) by BL1PR13CA0122.outlook.office365.com (2603:10b6:208:2bb::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7849.7 via Frontend Transport; Fri, 2 Aug 2024 07:24:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL6PEPF0001AB4F.mail.protection.outlook.com (10.167.242.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.19 via Frontend Transport; Fri, 2 Aug 2024 07:24:58 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:44 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:43 -0700 Received: from dev-l-177.mtl.labs.mlnx (10.127.8.11) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Fri, 2 Aug 2024 00:24:41 -0700 From: Dragos Tatulea To: Dragos Tatulea , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= CC: Si-Wei Liu , Tariq Toukan , , Subject: [PATCH vhost 6/7] vdpa/mlx5: Parallelize device resume Date: Fri, 2 Aug 2024 10:20:23 +0300 Message-ID: <20240802072039.267446-7-dtatulea@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240802072039.267446-1-dtatulea@nvidia.com> References: <20240802072039.267446-1-dtatulea@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: BL6PEPF0001AB4F:EE_|CH3PR12MB8971:EE_ X-MS-Office365-Filtering-Correlation-Id: 8b3243fa-af5d-4d16-7b83-08dcb2c436f6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|376014|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?AeRqO4wqZ3A41Fx7dISb8yPRIu42unPezNfMDl48ey+iWsK1S5vygdobiLM2?= =?us-ascii?Q?rIzZwCiz2RReQadmCuW+jv9iT8EiSsOlhH2C5v07lgfuXTi3IrJHRpLUmTcZ?= =?us-ascii?Q?g3Gz3bwv6X+MnR4EILhQ0cA6a9OXgEhiGXMu6lYJURP0Oeqa78dvpZKV6rZ6?= =?us-ascii?Q?SXnTc/QyYTGBxRoEZ2wR+hTxKMKvUf29yW1kGsmUrKr2QOJnZspy4Bs9Yr4U?= =?us-ascii?Q?CysRkR2LlTLE7Fi4m+4bdjE4/f8p/yqrmKthwTbgh3QqGn5lGNhuV6Zz4C7I?= =?us-ascii?Q?TFv3Ui6IsBXSazs30sesauIH4o9GKtjDFw/NsheKmx4P3UFrMWolhbvfV49V?= =?us-ascii?Q?JMU4zlLWfnTvYciMTDV22cUSW6cbxEH8qFj4qLYpMGRhaDsMAYMuzFcJeN5E?= =?us-ascii?Q?RuCiltH4X/uy9u01tdrYIwJuORatuoEYYiV2FWysZMUX6Xpvq5q420xiPF+W?= =?us-ascii?Q?UXlPXJRFjYWxJizFmgPaKIUyxmCleK5UY9qmpPhhlvnBB6mHlwOYUmnmBJ56?= =?us-ascii?Q?dKAsIrNiYVlW2DvxvrznbK3mOlR0XKI6NmvA5tZn57717xhPI9UZSX7Rk999?= =?us-ascii?Q?NUYo2jxfoGa6mLNWg831dqjuKcC7im6sJdBg4ZgK1RzvyPxlsxqXCS34Jm99?= =?us-ascii?Q?eiI50EBX3sHTejE75vritVx8fX9xA9PIDVI/F3MVilT6xxXo1egfZlNhzLah?= =?us-ascii?Q?v1xlbcLwIuPvxQibxvCDgDzPyj+soN43UhM1ZolamVZZ6QiTB6yjnzKqgPFN?= =?us-ascii?Q?Sjkw7RxdKRH3WLbPjQpLQG6JIWF+tYfl2bZb2KR/dkiOYOmGvwvumF3/5V9N?= =?us-ascii?Q?uNTiHhxj24MEyvzhnGUHmatbrLDgIybhVsWuD1a8C2N3PwVocKtzfH9m/z9E?= =?us-ascii?Q?W79G3s7O1afVfRv3r+LplYtiszwotvy4yb2orEiHeymWr3x7RGFeClIJ4N8W?= =?us-ascii?Q?EM6ECSZ311sbeP+xIn1MablhpugxHVbNZHp9hkEnI2DVgtlwr8ipF53a3E5k?= =?us-ascii?Q?zm1Rkwzyba3ym21Xy/h1iVq1PDWsbfPs7nVKC52WU9P4+6DOdaUwM8/AZ+cJ?= =?us-ascii?Q?03tWOvzert2LBjxZ8DnVB1krZqRrp/dP/kVlqwBMHGXjg5RzqPdtge20lQqW?= =?us-ascii?Q?QMBjFpwNsNtSxtuixSkGP9U5XhZ/GCG9JBUD+Q+qx5hmgG8SL6H+SREJTBrn?= =?us-ascii?Q?l1dfjJcAy0kTedzU01Wo6bAsuiw7NL80E3elJHD2YwOPjjpA0uCscmC7guj1?= =?us-ascii?Q?WSxYhVATWpfYPBuHgxpLOEG/1z+mH+0XhDl/bnwyo5uu87sJRwFOpgjss0ka?= =?us-ascii?Q?z7gQQzxqjU9Ni7G95rLI+Nl/FQ9Ra9vK/ubtoo3NmpuWGQ6GycWgvbVynALo?= =?us-ascii?Q?jyJV0tAdl2pRkNVwNcsaqy97BJqqT6SKcTt3VR8clgv8Mo2qpyayYPS48jjx?= =?us-ascii?Q?Q2XHkakzMmXUodNuZXFh4onShiw1aDF1?= X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(376014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2024 07:24:58.3193 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8b3243fa-af5d-4d16-7b83-08dcb2c436f6 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB4F.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8971 Content-Type: text/plain; charset="utf-8" Currently device resume works on vqs serially. Building up on previous changes that converted vq operations to the async api, this patch parallelizes the device resume. For 1 vDPA device x 32 VQs (16 VQPs) attached to a large VM (256 GB RAM, 32 CPUs x 2 threads per core), the device resume time is reduced from ~16 ms to ~4.5 ms. Signed-off-by: Dragos Tatulea Reviewed-by: Tariq Toukan Acked-by: Eugenio P=C3=A9rez --- drivers/vdpa/mlx5/net/mlx5_vnet.c | 40 +++++++++++-------------------- 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5= _vnet.c index 1887939c5673..87d355aba380 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -1759,10 +1759,15 @@ static int suspend_vq(struct mlx5_vdpa_net *ndev, s= truct mlx5_vdpa_virtqueue *mv return suspend_vqs(ndev, mvq->index, 1); } =20 -static int resume_vq(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueu= e *mvq) +static int resume_vqs(struct mlx5_vdpa_net *ndev, int start_vq, int num_vq= s) { + struct mlx5_vdpa_virtqueue *mvq; int err; =20 + if (start_vq >=3D ndev->mvdev.max_vqs) + return -EINVAL; + + mvq =3D &ndev->vqs[start_vq]; if (!mvq->initialized) return 0; =20 @@ -1774,13 +1779,9 @@ static int resume_vq(struct mlx5_vdpa_net *ndev, str= uct mlx5_vdpa_virtqueue *mvq /* Due to a FW quirk we need to modify the VQ fields first then change s= tate. * This should be fixed soon. After that, a single command can be used. */ - err =3D modify_virtqueues(ndev, mvq->index, 1, mvq->fw_state); - if (err) { - mlx5_vdpa_err(&ndev->mvdev, - "modify vq properties failed for vq %u, err: %d\n", - mvq->index, err); + err =3D modify_virtqueues(ndev, start_vq, num_vqs, mvq->fw_state); + if (err) return err; - } break; case MLX5_VIRTIO_NET_Q_OBJECT_STATE_SUSPEND: if (!is_resumable(ndev)) { @@ -1796,25 +1797,12 @@ static int resume_vq(struct mlx5_vdpa_net *ndev, st= ruct mlx5_vdpa_virtqueue *mvq return -EINVAL; } =20 - err =3D modify_virtqueues(ndev, mvq->index, 1, MLX5_VIRTIO_NET_Q_OBJECT_S= TATE_RDY); - if (err) - mlx5_vdpa_err(&ndev->mvdev, "modify to resume failed for vq %u, err: %d\= n", - mvq->index, err); - - return err; + return modify_virtqueues(ndev, start_vq, num_vqs, MLX5_VIRTIO_NET_Q_OBJEC= T_STATE_RDY); } =20 -static int resume_vqs(struct mlx5_vdpa_net *ndev) +static int resume_vq(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueu= e *mvq) { - int err =3D 0; - - for (int i =3D 0; i < ndev->cur_num_vqs; i++) { - int local_err =3D resume_vq(ndev, &ndev->vqs[i]); - - err =3D local_err ? local_err : err; - } - - return err; + return resume_vqs(ndev, mvq->index, 1); } =20 static void teardown_vq(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtq= ueue *mvq) @@ -3164,7 +3152,7 @@ static int mlx5_vdpa_change_map(struct mlx5_vdpa_dev = *mvdev, return err; } =20 - resume_vqs(ndev); + resume_vqs(ndev, 0, ndev->cur_num_vqs); =20 return 0; } @@ -3288,7 +3276,7 @@ static void mlx5_vdpa_set_status(struct vdpa_device *= vdev, u8 status) teardown_vq_resources(ndev); =20 if (ndev->setup) { - err =3D resume_vqs(ndev); + err =3D resume_vqs(ndev, 0, ndev->cur_num_vqs); if (err) { mlx5_vdpa_warn(mvdev, "failed to resume VQs\n"); goto err_driver; @@ -3712,7 +3700,7 @@ static int mlx5_vdpa_resume(struct vdpa_device *vdev) =20 down_write(&ndev->reslock); mvdev->suspended =3D false; - err =3D resume_vqs(ndev); + err =3D resume_vqs(ndev, 0, ndev->cur_num_vqs); register_link_notifier(ndev); up_write(&ndev->reslock); =20 --=20 2.45.2 From nobody Sun Feb 8 05:42:13 2026 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2056.outbound.protection.outlook.com [40.107.223.56]) (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 49A8A1C233B for ; Fri, 2 Aug 2024 07:25:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583504; cv=fail; b=ZdxD+7eQ3FLopk2ZwGAqI2SyMXq6vtPJR+Hp/Lqwg3XgRIOL5IboislMt8KdVMwttAaSvKDhZ2kedS0Dd/gMCFXn+G7bpb5aY9CyWPFakaDwTke3UErOfn7vxbZ2i7tOb6RB9XtxdmNFdEb8eW3oU8oBZ3w7KXyqjuio2ZvQX5s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722583504; c=relaxed/simple; bh=JbJ3XIngQVydHEHuuDDFKSmBkibrYiVYeEg45FNsgsQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SOCaV2Xl3M3PnNHHtbPebpT0Bg6R0S/lF52iYRqsNzwv7K/WAY9QYuqQJPVFdD+7SK7GsIlJSBjfuZPiRCWjJGr+kGAz5ItnWXokqIkz50Zq3Hl1Jm8GVJLDAc6KmmR/4mlDFIdBcStfta+1hjPTn/fNa60JupNI4dGQOv5YQ2s= 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=jbEwPkwz; arc=fail smtp.client-ip=40.107.223.56 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="jbEwPkwz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=w1fh9l6u7YTirKsxEiUJXeo6ge0d11VDZ016MbxY3QQB89ZAeWARRgxrfqtxaVT1nXxDEuyweCIkjLYGk4W+qbdIP1VInFut0H+i6Vv3jrhvxJFqoFkjcLhvYy6iYPvNooHU2lZ0T/ITQyt6vzX99dXOvXC+YpuKrpmyt+Dp8tCdRPSfASyFzkOB9WLmHeZdv0nS5u6n1SnUn833FkEKgHPIXhc0lfEJlG4gf8hgWVG5C1EP4CFbTDJ79cXh/I23gzFTf3n/3OQkkn5C6KDwYbypiFz3l/AICQocx21sgXraJQ7L77Ns7YHEe9TtMlHXyrRUNbkuyI8Iz48HJ3wBIg== 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=zK0dXhJnuESlzxascJCuO5HR2ybkRf8OrqjydhvK4qU=; b=iVo5jdNlbUtAYrLORcrDPtrlK4qYeFJ0avwjY2Iv/LGgASDNa0RdCEovreo/EncJqO2tcrO4DF88kwOJvonktWlgwH5aB/xJ2NA+oM9kBaPAfaAddYOElwVFqhjQj9pNQb0ZVKGn2qImV6Tzu5+r6fSiAV21A26Qze0GCh3EbEn0yjqZpNmRtNn3YNue8r7y+Mg3ERAmgAQKlTuyxbBl/LCWodGYd0OFlIeizGN4jV5u4123/10rDhnC7jOPYHUaH5lH+btI4ktRZb2S65na7QaLpb+ForWyIPLn0JKuGQ4Gbc6L4CoumgJScVAIhl3ynqOiyyutxXptkWN9jYThZQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=redhat.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) 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=zK0dXhJnuESlzxascJCuO5HR2ybkRf8OrqjydhvK4qU=; b=jbEwPkwzYq/TjX4MFn6Ez/VNm5oMgC2c8DETcktNB+McW/WGYlrL2/XkiopEurnPIoZP9nY4UiMzkbk6pYQzxMJ5tXuBdtC/M29bbJ/PJ0X+4YUE5RysHIFGaZEyl2YQlLJ2S2kDx8NJlTZ9GIuGRT/bvjNPcw2nY0hhi7Crcqz0KFJv4k4Qkmv1syEdGtaAGqgsJbef+xoIt7VrUv22Zn1HXePrAZsqiW0fcY4dnVjJ4mzAWgw3e51F0VesjajDM1fFuckbVwyJoXeFoOZuUJxi9hNBpOZYOUc9jNuY9o7S6kCG71ZLoHbR66G6ofNPrCiBUz1KUbSBcXngGmaI3g== Received: from MN2PR01CA0062.prod.exchangelabs.com (2603:10b6:208:23f::31) by CH3PR12MB9193.namprd12.prod.outlook.com (2603:10b6:610:195::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.21; Fri, 2 Aug 2024 07:25:00 +0000 Received: from BL6PEPF0001AB4E.namprd04.prod.outlook.com (2603:10b6:208:23f:cafe::c2) by MN2PR01CA0062.outlook.office365.com (2603:10b6:208:23f::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.22 via Frontend Transport; Fri, 2 Aug 2024 07:25:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) 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.20.7828.19 via Frontend Transport; Fri, 2 Aug 2024 07:25:00 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:47 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 2 Aug 2024 00:24:47 -0700 Received: from dev-l-177.mtl.labs.mlnx (10.127.8.11) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Fri, 2 Aug 2024 00:24:44 -0700 From: Dragos Tatulea To: Dragos Tatulea , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= CC: Si-Wei Liu , Tariq Toukan , , Subject: [PATCH vhost 7/7] vdpa/mlx5: Keep notifiers during suspend but ignore Date: Fri, 2 Aug 2024 10:20:24 +0300 Message-ID: <20240802072039.267446-8-dtatulea@nvidia.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240802072039.267446-1-dtatulea@nvidia.com> References: <20240802072039.267446-1-dtatulea@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_|CH3PR12MB9193:EE_ X-MS-Office365-Filtering-Correlation-Id: 2f6198dd-0c99-46b0-d4a0-08dcb2c43838 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700013|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?gCwBu7d3/+X+SchSh5ARRGl5aYGYIpjq5etDLoo3R5X5vOz8ojOl49lMSOHV?= =?us-ascii?Q?Kw3Lx440E02qGSoHaUm74Mt0Jj/6R6gEi5s5bOzyTekFwkKb1haSddbqdtmh?= =?us-ascii?Q?dBIXQSBDtlBSgnEwneQIeIbEmkYnLxUCy3FrP404BxC4NxWLOQglt5BGgbUV?= =?us-ascii?Q?zo8sJX6iXG6YcD2Bqer/fDimREfUMGnokg17HZkAUGL6mZiXQJ2Ix62Fi+an?= =?us-ascii?Q?o0LvCZbDqoPvY9JPD6Er8wl0BoKUkkeYhD5d8dASs0sfnvYS4VfEFrBbrG4W?= =?us-ascii?Q?y+Spc9/PhZ+dyREdX5GNuAnLlER/4svhi1aDXvK1nPgm4r921aSGn/QcMaxH?= =?us-ascii?Q?Y1D9uoey0j4fOllqQVydh0ee6Dh6eTGAiCtdkOxxjmpq5TdgMUcpQ9tpsHfm?= =?us-ascii?Q?iSl2We3XgaN8dXKHgT5opIjPcEJLOnz9nPkuffKmpk/ENX/3N/dXSxgFBk3Z?= =?us-ascii?Q?ocn585iTqZw/MX9fZf4NcCKAiKWb3K2VvqEuY4w98rhTEfQr80LlWBcBcugF?= =?us-ascii?Q?VnEddlqUvRVMrKOIp+MDOaz8lTB5yw9WKDrSG0VEy67MbFv5hkfk7i0n1YiG?= =?us-ascii?Q?Pl1Td1DLagjCnoes+hAF3bjehXw2igCxrKCc0p7MSGQ5O6xKDscCkelQQP0k?= =?us-ascii?Q?BatJh5w3GdNFWQEywxufDqAw6pcqarIbnUb6dQFVtqdOkTE9nFFIZwj0afnk?= =?us-ascii?Q?gl/Vv1ZBVKlH/mNTp0Bh/78k4dWxgN4l3gfhsLFtNjkXU0ooTRM55H7kLVua?= =?us-ascii?Q?EHgx92xDj4Ut6c2P8VMzPywGAsBq0bfB0fGLgYMU663f1lU8GD2Ad/PhNvW1?= =?us-ascii?Q?N4aoOqYdgCjDp8oLqUw+WnGm6W+vyJtrbv+Sy7H2EaoUFQj0l7CRYiMlxlGz?= =?us-ascii?Q?XtFhri4TaQ3SpinN0PpludXKPQqGs9ILS6YJzvUwvEq7PrmfOkioZHnm1Aj0?= =?us-ascii?Q?5LHi1wetuR0jJkB65Nhiuhwq2Tz/yEF5e/Cd6HEMLZM3UZB1t8G1hc91CIrg?= =?us-ascii?Q?NVoaBec88sP1htt0j3LTNNQ8VHRRDKT7ofXdsfmvgej7vbQfe2Y1FyT9FLJV?= =?us-ascii?Q?+aYmzg2ADVREV7gpvdMZwZmDloQf+zpI70hmrK1FyI6Si34YXAyczUoTtbaJ?= =?us-ascii?Q?gXKbnO8HIENIXBQPLtjRP/FNI4PH2OxWIpfiPjOhyfpmzzlZTN4jm+HHrFlt?= =?us-ascii?Q?i8fOYsC2cSdJSkk04dja5i1yVsG8ZrY2LSu/stfkQf9ouKyXljHB908p9JsB?= =?us-ascii?Q?229XPKkVJ2HSrmWjDHn3s/pKw5gj8iOXaZfRZ1lQhmGH3I1pOAUJrKcFbQdj?= =?us-ascii?Q?lli71HyYlHSWw5TNKHis1sPwGVFbnAT9xpem5MOBI/e6kHXk/nzFiGmV7bPM?= =?us-ascii?Q?9ouMcPhxM9BBET1aDZAw/kgojgfShgeGVgtnYQMw1cImgjTVL3sinKMOFtVV?= =?us-ascii?Q?vI8XjJeEGJDdxi25KCBGfZK00gSWiJkd?= X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(36860700013)(376014)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2024 07:25:00.4319 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2f6198dd-0c99-46b0-d4a0-08dcb2c43838 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];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: CH3PR12MB9193 Content-Type: text/plain; charset="utf-8" Unregistering notifiers is a costly operation. Instead of removing the notifiers during device suspend and adding them back at resume, simply ignore the call when the device is suspended. At resume time call queue_link_work() to make sure that the device state is propagated in case there were changes. For 1 vDPA device x 32 VQs (16 VQPs) attached to a large VM (256 GB RAM, 32 CPUs x 2 threads per core), the device suspend time is reduced from ~13 ms to ~2.5 ms. Signed-off-by: Dragos Tatulea Reviewed-by: Tariq Toukan Acked-by: Eugenio P=C3=A9rez --- drivers/vdpa/mlx5/net/mlx5_vnet.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5= _vnet.c index 87d355aba380..af96e49697d0 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -2934,6 +2934,9 @@ static int event_handler(struct notifier_block *nb, u= nsigned long event, void *p struct mlx5_eqe *eqe =3D param; int ret =3D NOTIFY_DONE; =20 + if (ndev->mvdev.suspended) + return NOTIFY_DONE; + if (event =3D=3D MLX5_EVENT_TYPE_PORT_CHANGE) { switch (eqe->sub_type) { case MLX5_PORT_CHANGE_SUBTYPE_DOWN: @@ -3679,7 +3682,6 @@ static int mlx5_vdpa_suspend(struct vdpa_device *vdev) mlx5_vdpa_info(mvdev, "suspending device\n"); =20 down_write(&ndev->reslock); - unregister_link_notifier(ndev); err =3D suspend_vqs(ndev, 0, ndev->cur_num_vqs); mlx5_vdpa_cvq_suspend(mvdev); mvdev->suspended =3D true; @@ -3701,7 +3703,7 @@ static int mlx5_vdpa_resume(struct vdpa_device *vdev) down_write(&ndev->reslock); mvdev->suspended =3D false; err =3D resume_vqs(ndev, 0, ndev->cur_num_vqs); - register_link_notifier(ndev); + queue_link_work(ndev); up_write(&ndev->reslock); =20 return err; --=20 2.45.2