137 lines
5.5 KiB
Diff
137 lines
5.5 KiB
Diff
From 3c2408d24b13ce27a3265d9cf94bac7817af07f0 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/mlx5e: Enhance function structures for self loopback
|
|
prevention application
|
|
|
|
JIRA: https://redhat.atlassian.net/browse/RHEL-169055
|
|
|
|
commit 091400a5d411ee7398095ba832361eb12b345f3d
|
|
Author: Tariq Toukan <tariqt@nvidia.com>
|
|
Date: Thu Oct 30 15:32:33 2025 +0200
|
|
|
|
net/mlx5e: Enhance function structures for self loopback prevention application
|
|
|
|
The re-application of self loopback prevention attributes in TIRs is
|
|
necessary in old firmwares (where tis_tir_td_order cap is cleared) after
|
|
recreation of SQs.
|
|
|
|
However, this is not needed in new firmware with tis_tir_td_order=1.
|
|
|
|
As a preparation patch, enhance the function structures to differentiate
|
|
between an explicit loopback prevention configuration apply, and the
|
|
re-apply operation required by old firmware.
|
|
|
|
Loopback selftests should now call mlx5e_modify_tirs_lb() directly, as
|
|
their use case is not related to the firmware limitation.
|
|
|
|
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
|
|
Reviewed-by: Carolina Jubran <cjubran@nvidia.com>
|
|
Reviewed-by: Simon Horman <horms@kernel.org>
|
|
Link: https://patch.msgid.link/1761831159-1013140-2-git-send-email-tariqt@nvidia.com
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
|
|
Signed-off-by: Kamal Heib <kheib@redhat.com>
|
|
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
|
|
index 208870fe79c1..85f940869968 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
|
|
@@ -1152,7 +1152,9 @@ extern const struct ethtool_ops mlx5e_ethtool_ops;
|
|
int mlx5e_create_mkey(struct mlx5_core_dev *mdev, u32 pdn, u32 *mkey);
|
|
int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev, bool create_tises);
|
|
void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev);
|
|
-int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb,
|
|
+int mlx5e_modify_tirs_lb(struct mlx5_core_dev *mdev, bool enable_uc_lb,
|
|
+ bool enable_mc_lb);
|
|
+int mlx5e_refresh_tirs(struct mlx5_core_dev *mdev, bool enable_uc_lb,
|
|
bool enable_mc_lb);
|
|
void mlx5e_mkey_set_relaxed_ordering(struct mlx5_core_dev *mdev, void *mkc);
|
|
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_common.c b/drivers/net/ethernet/mellanox/mlx5/core/en_common.c
|
|
index 30424ccad584..376a018b2db1 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_common.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_common.c
|
|
@@ -247,10 +247,9 @@ void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev)
|
|
memset(res, 0, sizeof(*res));
|
|
}
|
|
|
|
-int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb,
|
|
- bool enable_mc_lb)
|
|
+int mlx5e_modify_tirs_lb(struct mlx5_core_dev *mdev, bool enable_uc_lb,
|
|
+ bool enable_mc_lb)
|
|
{
|
|
- struct mlx5_core_dev *mdev = priv->mdev;
|
|
struct mlx5e_tir *tir;
|
|
u8 lb_flags = 0;
|
|
int err = 0;
|
|
@@ -285,7 +284,16 @@ int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb,
|
|
|
|
kvfree(in);
|
|
if (err)
|
|
- netdev_err(priv->netdev, "refresh tir(0x%x) failed, %d\n", tirn, err);
|
|
+ mlx5_core_err(mdev,
|
|
+ "modify tir(0x%x) enable_lb uc(%d) mc(%d) failed, %d\n",
|
|
+ tirn,
|
|
+ enable_uc_lb, enable_mc_lb, err);
|
|
|
|
return err;
|
|
}
|
|
+
|
|
+int mlx5e_refresh_tirs(struct mlx5_core_dev *mdev, bool enable_uc_lb,
|
|
+ bool enable_mc_lb)
|
|
+{
|
|
+ return mlx5e_modify_tirs_lb(mdev, enable_uc_lb, enable_mc_lb);
|
|
+}
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
|
|
index 2390975c1252..b08aa2c7c837 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
|
|
@@ -6089,7 +6089,7 @@ static void mlx5e_nic_disable(struct mlx5e_priv *priv)
|
|
|
|
static int mlx5e_update_nic_rx(struct mlx5e_priv *priv)
|
|
{
|
|
- return mlx5e_refresh_tirs(priv, false, false);
|
|
+ return mlx5e_refresh_tirs(priv->mdev, false, false);
|
|
}
|
|
|
|
static const struct mlx5e_profile mlx5e_nic_profile = {
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c b/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c
|
|
index 2f7a543feca6..fcad464bc4d5 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c
|
|
@@ -214,7 +214,7 @@ static int mlx5e_test_loopback_setup(struct mlx5e_priv *priv,
|
|
return err;
|
|
}
|
|
|
|
- err = mlx5e_refresh_tirs(priv, true, false);
|
|
+ err = mlx5e_modify_tirs_lb(priv->mdev, true, false);
|
|
if (err)
|
|
goto out;
|
|
|
|
@@ -243,7 +243,7 @@ static void mlx5e_test_loopback_cleanup(struct mlx5e_priv *priv,
|
|
mlx5_nic_vport_update_local_lb(priv->mdev, false);
|
|
|
|
dev_remove_pack(&lbtp->pt);
|
|
- mlx5e_refresh_tirs(priv, false, false);
|
|
+ mlx5e_modify_tirs_lb(priv->mdev, false, false);
|
|
}
|
|
|
|
static int mlx5e_cond_loopback(struct mlx5e_priv *priv)
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
|
|
index dd8daf5af7a6..a5ff11922d8d 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
|
|
@@ -331,7 +331,7 @@ void mlx5i_destroy_underlay_qp(struct mlx5_core_dev *mdev, u32 qpn)
|
|
|
|
int mlx5i_update_nic_rx(struct mlx5e_priv *priv)
|
|
{
|
|
- return mlx5e_refresh_tirs(priv, true, true);
|
|
+ return mlx5e_refresh_tirs(priv->mdev, true, true);
|
|
}
|
|
|
|
int mlx5i_create_tis(struct mlx5_core_dev *mdev, u32 underlay_qpn, u32 *tisn)
|
|
--
|
|
2.50.1 (Apple Git-155)
|
|
|