mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-23 07:23:12 +02:00
RDMA/mlx5: Fix vport loopback forcing for MPV device
[ Upstream commit 08aae7860450c89eebbc6fd4d38416e53c7a33d2 ]
Previously loopback for MPV was supposed to be permanently enabled,
however other driver flows were able to over-ride that configuration and
disable it.
Add force_lb parameter that indicates that loopback should always be
enabled which prevents all other driver flows from disabling it.
Fixes: a9a9e68954
("RDMA/mlx5: Fix vport loopback for MPV device")
Link: https://patch.msgid.link/r/cfc6b1f0f99f8100b087483cc14da6025317f901.1755088808.git.leon@kernel.org
Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
f891dce0d3
commit
ca61e32fcf
|
@ -1691,7 +1691,8 @@ static void deallocate_uars(struct mlx5_ib_dev *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mlx5_ib_enable_lb_mp(struct mlx5_core_dev *master,
|
static int mlx5_ib_enable_lb_mp(struct mlx5_core_dev *master,
|
||||||
struct mlx5_core_dev *slave)
|
struct mlx5_core_dev *slave,
|
||||||
|
struct mlx5_ib_lb_state *lb_state)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -1703,6 +1704,7 @@ static int mlx5_ib_enable_lb_mp(struct mlx5_core_dev *master,
|
||||||
if (err)
|
if (err)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
lb_state->force_enable = true;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
@ -1711,16 +1713,22 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mlx5_ib_disable_lb_mp(struct mlx5_core_dev *master,
|
static void mlx5_ib_disable_lb_mp(struct mlx5_core_dev *master,
|
||||||
struct mlx5_core_dev *slave)
|
struct mlx5_core_dev *slave,
|
||||||
|
struct mlx5_ib_lb_state *lb_state)
|
||||||
{
|
{
|
||||||
mlx5_nic_vport_update_local_lb(slave, false);
|
mlx5_nic_vport_update_local_lb(slave, false);
|
||||||
mlx5_nic_vport_update_local_lb(master, false);
|
mlx5_nic_vport_update_local_lb(master, false);
|
||||||
|
|
||||||
|
lb_state->force_enable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mlx5_ib_enable_lb(struct mlx5_ib_dev *dev, bool td, bool qp)
|
int mlx5_ib_enable_lb(struct mlx5_ib_dev *dev, bool td, bool qp)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
|
if (dev->lb.force_enable)
|
||||||
|
return 0;
|
||||||
|
|
||||||
mutex_lock(&dev->lb.mutex);
|
mutex_lock(&dev->lb.mutex);
|
||||||
if (td)
|
if (td)
|
||||||
dev->lb.user_td++;
|
dev->lb.user_td++;
|
||||||
|
@ -1742,6 +1750,9 @@ int mlx5_ib_enable_lb(struct mlx5_ib_dev *dev, bool td, bool qp)
|
||||||
|
|
||||||
void mlx5_ib_disable_lb(struct mlx5_ib_dev *dev, bool td, bool qp)
|
void mlx5_ib_disable_lb(struct mlx5_ib_dev *dev, bool td, bool qp)
|
||||||
{
|
{
|
||||||
|
if (dev->lb.force_enable)
|
||||||
|
return;
|
||||||
|
|
||||||
mutex_lock(&dev->lb.mutex);
|
mutex_lock(&dev->lb.mutex);
|
||||||
if (td)
|
if (td)
|
||||||
dev->lb.user_td--;
|
dev->lb.user_td--;
|
||||||
|
@ -3251,7 +3262,7 @@ static void mlx5_ib_unbind_slave_port(struct mlx5_ib_dev *ibdev,
|
||||||
|
|
||||||
lockdep_assert_held(&mlx5_ib_multiport_mutex);
|
lockdep_assert_held(&mlx5_ib_multiport_mutex);
|
||||||
|
|
||||||
mlx5_ib_disable_lb_mp(ibdev->mdev, mpi->mdev);
|
mlx5_ib_disable_lb_mp(ibdev->mdev, mpi->mdev, &ibdev->lb);
|
||||||
|
|
||||||
mlx5_core_mp_event_replay(ibdev->mdev,
|
mlx5_core_mp_event_replay(ibdev->mdev,
|
||||||
MLX5_DRIVER_EVENT_AFFILIATION_REMOVED,
|
MLX5_DRIVER_EVENT_AFFILIATION_REMOVED,
|
||||||
|
@ -3348,7 +3359,7 @@ static bool mlx5_ib_bind_slave_port(struct mlx5_ib_dev *ibdev,
|
||||||
MLX5_DRIVER_EVENT_AFFILIATION_DONE,
|
MLX5_DRIVER_EVENT_AFFILIATION_DONE,
|
||||||
&key);
|
&key);
|
||||||
|
|
||||||
err = mlx5_ib_enable_lb_mp(ibdev->mdev, mpi->mdev);
|
err = mlx5_ib_enable_lb_mp(ibdev->mdev, mpi->mdev, &ibdev->lb);
|
||||||
if (err)
|
if (err)
|
||||||
goto unbind;
|
goto unbind;
|
||||||
|
|
||||||
|
|
|
@ -1065,6 +1065,7 @@ struct mlx5_ib_lb_state {
|
||||||
u32 user_td;
|
u32 user_td;
|
||||||
int qps;
|
int qps;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
bool force_enable;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlx5_ib_pf_eq {
|
struct mlx5_ib_pf_eq {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user