Lines Matching defs:mpi
59 struct mlx5_ib_multiport_info *mpi;
84 struct mlx5_ib_dev *mlx5_ib_get_ibdev_from_mpi(struct mlx5_ib_multiport_info *mpi)
89 dev = mpi->ibdev;
276 struct mlx5_ib_multiport_info *mpi;
291 mpi = ibdev->port[ib_port_num - 1].mp.mpi;
292 if (mpi && !mpi->unaffiliate) {
293 mdev = mpi->mdev;
297 if (!mpi->is_master)
298 mpi->mdev_refcnt++;
309 struct mlx5_ib_multiport_info *mpi;
318 mpi = ibdev->port[port_num - 1].mp.mpi;
319 if (mpi->is_master)
322 mpi->mdev_refcnt--;
323 if (mpi->unaffiliate)
324 complete(&mpi->unref_comp);
2862 ibdev = mlx5_ib_get_ibdev_from_mpi(work->mpi);
2933 work->mpi = container_of(nb, struct mlx5_ib_multiport_info, mdev_events);
3417 struct mlx5_ib_multiport_info *mpi)
3419 u8 port_num = mlx5_core_native_port_num(mpi->mdev) - 1;
3430 if (!mpi->ibdev) {
3435 mpi->ibdev = NULL;
3438 if (mpi->mdev_events.notifier_call)
3439 mlx5_notifier_unregister(mpi->mdev, &mpi->mdev_events);
3440 mpi->mdev_events.notifier_call = NULL;
3444 comps = mpi->mdev_refcnt;
3446 mpi->unaffiliate = true;
3447 init_completion(&mpi->unref_comp);
3451 wait_for_completion(&mpi->unref_comp);
3454 mpi->unaffiliate = false;
3457 port->mp.mpi = NULL;
3461 err = mlx5_nic_vport_unaffiliate_multiport(mpi->mdev);
3475 struct mlx5_ib_multiport_info *mpi)
3477 u8 port_num = mlx5_core_native_port_num(mpi->mdev) - 1;
3483 if (ibdev->port[port_num].mp.mpi) {
3490 ibdev->port[port_num].mp.mpi = mpi;
3491 mpi->ibdev = ibdev;
3492 mpi->mdev_events.notifier_call = NULL;
3495 err = mlx5_nic_vport_affiliate_multiport(ibdev->mdev, mpi->mdev);
3499 err = get_port_caps(ibdev, mlx5_core_native_port_num(mpi->mdev));
3510 mpi->mdev_events.notifier_call = mlx5_ib_event_slave_port;
3511 mlx5_notifier_register(mpi->mdev, &mpi->mdev_events);
3518 mlx5_ib_unbind_slave_port(ibdev, mpi);
3527 struct mlx5_ib_multiport_info *mpi;
3549 mpi = kzalloc(sizeof(*mpi), GFP_KERNEL);
3550 if (!mpi) {
3556 mpi->is_master = true;
3557 mpi->mdev = dev->mdev;
3558 mpi->sys_image_guid = dev->sys_image_guid;
3559 dev->port[i].mp.mpi = mpi;
3560 mpi->ibdev = dev;
3561 mpi = NULL;
3565 list_for_each_entry(mpi, &mlx5_ib_unaffiliated_port_list,
3567 if (dev->sys_image_guid == mpi->sys_image_guid &&
3568 (mlx5_core_native_port_num(mpi->mdev) - 1) == i) {
3569 bound = mlx5_ib_bind_slave_port(dev, mpi);
3573 dev_dbg(mpi->mdev->device,
3576 list_del(&mpi->list);
3604 if (dev->port[i].mp.mpi) {
3607 kfree(dev->port[i].mp.mpi);
3608 dev->port[i].mp.mpi = NULL;
3611 list_add_tail(&dev->port[i].mp.mpi->list,
3613 mlx5_ib_unbind_slave_port(dev, dev->port[i].mp.mpi);
4749 struct mlx5_ib_multiport_info *mpi;
4754 mpi = kzalloc(sizeof(*mpi), GFP_KERNEL);
4755 if (!mpi)
4758 mpi->mdev = mdev;
4761 &mpi->sys_image_guid);
4763 kfree(mpi);
4769 if (dev->sys_image_guid == mpi->sys_image_guid)
4770 bound = mlx5_ib_bind_slave_port(dev, mpi);
4774 mpi->ibdev->ib_active = true;
4780 list_add_tail(&mpi->list, &mlx5_ib_unaffiliated_port_list);
4786 return mpi;
4835 struct mlx5_ib_multiport_info *mpi;
4844 mpi = context;
4846 if (mpi->ibdev)
4847 mlx5_ib_unbind_slave_port(mpi->ibdev, mpi);
4848 list_del(&mpi->list);
4850 kfree(mpi);