Commit e05feab2 authored by Patrisious Haddad's avatar Patrisious Haddad Committed by Leon Romanovsky
Browse files

RDMA/mlx5: Enforce same type port association for multiport RoCE



Different core device types such as PFs and VFs shouldn't be affiliated
together since they have different capabilities, fix that by enforcing
type check before doing the affiliation.

Fixes: 32f69e4b ("{net, IB}/mlx5: Manage port association for multiport RoCE")
Reviewed-by: default avatarMark Bloch <mbloch@nvidia.com>
Signed-off-by: default avatarPatrisious Haddad <phaddad@nvidia.com>
Link: https://patch.msgid.link/88699500f690dff1c1852c1ddb71f8a1cc8b956e.1733233480.git.leonro@nvidia.com


Reviewed-by: default avatarMateusz Polchlopek <mateusz.polchlopek@intel.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent d0257e08
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -3639,7 +3639,8 @@ static int mlx5_ib_init_multiport_master(struct mlx5_ib_dev *dev)
		list_for_each_entry(mpi, &mlx5_ib_unaffiliated_port_list,
				    list) {
			if (dev->sys_image_guid == mpi->sys_image_guid &&
			    (mlx5_core_native_port_num(mpi->mdev) - 1) == i) {
			    (mlx5_core_native_port_num(mpi->mdev) - 1) == i &&
			    mlx5_core_same_coredev_type(dev->mdev, mpi->mdev)) {
				bound = mlx5_ib_bind_slave_port(dev, mpi);
			}

@@ -4785,7 +4786,8 @@ static int mlx5r_mp_probe(struct auxiliary_device *adev,

	mutex_lock(&mlx5_ib_multiport_mutex);
	list_for_each_entry(dev, &mlx5_ib_dev_list, ib_dev_list) {
		if (dev->sys_image_guid == mpi->sys_image_guid)
		if (dev->sys_image_guid == mpi->sys_image_guid &&
		    mlx5_core_same_coredev_type(dev->mdev, mpi->mdev))
			bound = mlx5_ib_bind_slave_port(dev, mpi);

		if (bound) {
+6 −0
Original line number Diff line number Diff line
@@ -1202,6 +1202,12 @@ static inline bool mlx5_core_is_vf(const struct mlx5_core_dev *dev)
	return dev->coredev_type == MLX5_COREDEV_VF;
}

static inline bool mlx5_core_same_coredev_type(const struct mlx5_core_dev *dev1,
					       const struct mlx5_core_dev *dev2)
{
	return dev1->coredev_type == dev2->coredev_type;
}

static inline bool mlx5_core_is_ecpf(const struct mlx5_core_dev *dev)
{
	return dev->caps.embedded_cpu;