79 lines
2.8 KiB
Diff
79 lines
2.8 KiB
Diff
From 91356ee2e31410460f681a78ec9a2dd33fa38c32 Mon Sep 17 00:00:00 2001
|
|
From: Kamal Heib <kheib@redhat.com>
|
|
Date: Mon, 20 Apr 2026 14:56:34 -0400
|
|
Subject: [PATCH] net/mlx5: Refactor HCA cap 2 setting
|
|
|
|
JIRA: https://redhat.atlassian.net/browse/RHEL-169055
|
|
|
|
commit 075e85a1261e4653c2068e68a8c91da6c7bc4e60
|
|
Author: Mark Bloch <mbloch@nvidia.com>
|
|
Date: Thu Oct 23 12:16:59 2025 +0300
|
|
|
|
net/mlx5: Refactor HCA cap 2 setting
|
|
|
|
Refactor HCA capability 2 setting logic to be more structured and
|
|
conditional. Move the sw_vhca_id_valid setting inside proper conditional
|
|
checks and prepare the function for additional capability settings.
|
|
|
|
The refactoring:
|
|
- Always copy current capabilities to set_hca_cap buffer.
|
|
- Apply sw_vhca_id_valid setting only when conditions are met.
|
|
- Improve code readability and maintainability.
|
|
|
|
This cleanup prepares the handle_hca_cap_2() function for the upcoming
|
|
balance ID capability setting.
|
|
|
|
Signed-off-by: Mark Bloch <mbloch@nvidia.com>
|
|
Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
|
|
Reviewed-by: Shay Drori <shayd@nvidia.com>
|
|
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
|
|
Link: https://patch.msgid.link/1761211020-925651-5-git-send-email-tariqt@nvidia.com
|
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
|
|
Signed-off-by: Kamal Heib <kheib@redhat.com>
|
|
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
|
|
index 81930a461e62..4f2969a56ff2 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
|
|
@@ -553,6 +553,7 @@ EXPORT_SYMBOL(mlx5_is_roce_on);
|
|
|
|
static int handle_hca_cap_2(struct mlx5_core_dev *dev, void *set_ctx)
|
|
{
|
|
+ bool do_set = false;
|
|
void *set_hca_cap;
|
|
int err;
|
|
|
|
@@ -563,17 +564,22 @@ static int handle_hca_cap_2(struct mlx5_core_dev *dev, void *set_ctx)
|
|
if (err)
|
|
return err;
|
|
|
|
- if (!MLX5_CAP_GEN_2_MAX(dev, sw_vhca_id_valid) ||
|
|
- !(dev->priv.sw_vhca_id > 0))
|
|
- return 0;
|
|
-
|
|
set_hca_cap = MLX5_ADDR_OF(set_hca_cap_in, set_ctx,
|
|
capability);
|
|
memcpy(set_hca_cap, dev->caps.hca[MLX5_CAP_GENERAL_2]->cur,
|
|
MLX5_ST_SZ_BYTES(cmd_hca_cap_2));
|
|
- MLX5_SET(cmd_hca_cap_2, set_hca_cap, sw_vhca_id_valid, 1);
|
|
|
|
- return set_caps(dev, set_ctx, MLX5_CAP_GENERAL_2);
|
|
+ if (MLX5_CAP_GEN_2_MAX(dev, sw_vhca_id_valid) &&
|
|
+ dev->priv.sw_vhca_id > 0) {
|
|
+ MLX5_SET(cmd_hca_cap_2, set_hca_cap, sw_vhca_id_valid, 1);
|
|
+ do_set = true;
|
|
+ }
|
|
+
|
|
+ /* some FW versions that support querying MLX5_CAP_GENERAL_2
|
|
+ * capabilities but don't support setting them.
|
|
+ * Skip unnecessary update to hca_cap_2 when no changes were introduced
|
|
+ */
|
|
+ return do_set ? set_caps(dev, set_ctx, MLX5_CAP_GENERAL_2) : 0;
|
|
}
|
|
|
|
static int handle_hca_cap(struct mlx5_core_dev *dev, void *set_ctx)
|
|
--
|
|
2.50.1 (Apple Git-155)
|
|
|