Lines Matching defs:mpi
63 struct mlx5_ib_multiport_info *mpi;
82 struct mlx5_ib_dev *mlx5_ib_get_ibdev_from_mpi(struct mlx5_ib_multiport_info *mpi)
87 dev = mpi->ibdev;
283 struct mlx5_ib_multiport_info *mpi;
298 mpi = ibdev->port[ib_port_num - 1].mp.mpi;
299 if (mpi && !mpi->unaffiliate) {
300 mdev = mpi->mdev;
304 if (!mpi->is_master)
305 mpi->mdev_refcnt++;
316 struct mlx5_ib_multiport_info *mpi;
325 mpi = ibdev->port[port_num - 1].mp.mpi;
326 if (mpi->is_master)
329 mpi->mdev_refcnt--;
330 if (mpi->unaffiliate)
331 complete(&mpi->unref_comp);
2672 ibdev = mlx5_ib_get_ibdev_from_mpi(work->mpi);
2743 work->mpi = container_of(nb, struct mlx5_ib_multiport_info, mdev_events);
3169 struct mlx5_ib_multiport_info *mpi)
3171 u32 port_num = mlx5_core_native_port_num(mpi->mdev) - 1;
3182 mlx5_core_mp_event_replay(mpi->mdev,
3189 if (!mpi->ibdev) {
3194 mpi->ibdev = NULL;
3197 if (mpi->mdev_events.notifier_call)
3198 mlx5_notifier_unregister(mpi->mdev, &mpi->mdev_events);
3199 mpi->mdev_events.notifier_call = NULL;
3203 comps = mpi->mdev_refcnt;
3205 mpi->unaffiliate = true;
3206 init_completion(&mpi->unref_comp);
3210 wait_for_completion(&mpi->unref_comp);
3213 mpi->unaffiliate = false;
3216 port->mp.mpi = NULL;
3220 err = mlx5_nic_vport_unaffiliate_multiport(mpi->mdev);
3234 struct mlx5_ib_multiport_info *mpi)
3236 u32 port_num = mlx5_core_native_port_num(mpi->mdev) - 1;
3243 if (ibdev->port[port_num].mp.mpi) {
3250 ibdev->port[port_num].mp.mpi = mpi;
3251 mpi->ibdev = ibdev;
3252 mpi->mdev_events.notifier_call = NULL;
3255 err = mlx5_nic_vport_affiliate_multiport(ibdev->mdev, mpi->mdev);
3261 mpi->mdev_events.notifier_call = mlx5_ib_event_slave_port;
3262 mlx5_notifier_register(mpi->mdev, &mpi->mdev_events);
3266 key = mpi->mdev->priv.adev_idx;
3267 mlx5_core_mp_event_replay(mpi->mdev,
3277 mlx5_ib_unbind_slave_port(ibdev, mpi);
3286 struct mlx5_ib_multiport_info *mpi;
3308 mpi = kzalloc(sizeof(*mpi), GFP_KERNEL);
3309 if (!mpi) {
3315 mpi->is_master = true;
3316 mpi->mdev = dev->mdev;
3317 mpi->sys_image_guid = dev->sys_image_guid;
3318 dev->port[i].mp.mpi = mpi;
3319 mpi->ibdev = dev;
3320 mpi = NULL;
3324 list_for_each_entry(mpi, &mlx5_ib_unaffiliated_port_list,
3326 if (dev->sys_image_guid == mpi->sys_image_guid &&
3327 (mlx5_core_native_port_num(mpi->mdev) - 1) == i) {
3328 bound = mlx5_ib_bind_slave_port(dev, mpi);
3332 dev_dbg(mpi->mdev->device,
3335 list_del(&mpi->list);
3361 if (dev->port[i].mp.mpi) {
3364 kfree(dev->port[i].mp.mpi);
3365 dev->port[i].mp.mpi = NULL;
3369 list_add_tail(&dev->port[i].mp.mpi->list,
3372 dev->port[i].mp.mpi);
4329 struct mlx5_ib_multiport_info *mpi;
4334 mpi = kzalloc(sizeof(*mpi), GFP_KERNEL);
4335 if (!mpi)
4338 mpi->mdev = mdev;
4340 &mpi->sys_image_guid);
4342 kfree(mpi);
4348 if (dev->sys_image_guid == mpi->sys_image_guid)
4349 bound = mlx5_ib_bind_slave_port(dev, mpi);
4353 mpi->ibdev->ib_active = true;
4359 list_add_tail(&mpi->list, &mlx5_ib_unaffiliated_port_list);
4365 auxiliary_set_drvdata(adev, mpi);
4371 struct mlx5_ib_multiport_info *mpi;
4373 mpi = auxiliary_get_drvdata(adev);
4375 if (mpi->ibdev)
4376 mlx5_ib_unbind_slave_port(mpi->ibdev, mpi);
4378 list_del(&mpi->list);
4380 kfree(mpi);