context->devx_uid);
 }
 
+static int mlx5_ib_enable_lb_mp(struct mlx5_core_dev *master,
+                               struct mlx5_core_dev *slave)
+{
+       int err;
+
+       err = mlx5_nic_vport_update_local_lb(master, true);
+       if (err)
+               return err;
+
+       err = mlx5_nic_vport_update_local_lb(slave, true);
+       if (err)
+               goto out;
+
+       return 0;
+
+out:
+       mlx5_nic_vport_update_local_lb(master, false);
+       return err;
+}
+
+static void mlx5_ib_disable_lb_mp(struct mlx5_core_dev *master,
+                                 struct mlx5_core_dev *slave)
+{
+       mlx5_nic_vport_update_local_lb(slave, false);
+       mlx5_nic_vport_update_local_lb(master, false);
+}
+
 int mlx5_ib_enable_lb(struct mlx5_ib_dev *dev, bool td, bool qp)
 {
        int err = 0;
 
        lockdep_assert_held(&mlx5_ib_multiport_mutex);
 
+       mlx5_ib_disable_lb_mp(ibdev->mdev, mpi->mdev);
+
        mlx5_core_mp_event_replay(ibdev->mdev,
                                  MLX5_DRIVER_EVENT_AFFILIATION_REMOVED,
                                  NULL);
                                  MLX5_DRIVER_EVENT_AFFILIATION_DONE,
                                  &key);
 
+       err = mlx5_ib_enable_lb_mp(ibdev->mdev, mpi->mdev);
+       if (err)
+               goto unbind;
+
        return true;
 
 unbind: