Lines Matching full:slave
332 int i, ix, slave, err; in __propagate_pkey_ev() local
335 for (slave = 0; slave < dev->dev->caps.sqp_demux; slave++) { in __propagate_pkey_ev()
336 if (slave == mlx4_master_func_num(dev->dev)) in __propagate_pkey_ev()
338 if (!mlx4_is_slave_active(dev->dev, slave)) in __propagate_pkey_ev()
347 if (dev->pkeys.virt2phys_pkey[slave][port_num - 1] in __propagate_pkey_ev()
349 err = mlx4_gen_pkey_eqe(dev->dev, slave, port_num); in __propagate_pkey_ev()
350 pr_debug("propagate_pkey_ev: slave %d," in __propagate_pkey_ev()
352 slave, port_num, ix, err); in __propagate_pkey_ev()
412 static int mlx4_ib_demux_sa_handler(struct ib_device *ibdev, int port, int slave, in mlx4_ib_demux_sa_handler() argument
420 ret = mlx4_ib_mcg_demux_handler(ibdev, port, slave, sa_mad); in mlx4_ib_demux_sa_handler()
441 static int find_slave_port_pkey_ix(struct mlx4_ib_dev *dev, int slave, in find_slave_port_pkey_ix() argument
448 if (slave == mlx4_master_func_num(dev->dev)) in find_slave_port_pkey_ix()
454 if (dev->pkeys.virt2phys_pkey[slave][port - 1][i] == unassigned_pkey_ix) in find_slave_port_pkey_ix()
457 pkey_ix = dev->pkeys.virt2phys_pkey[slave][port - 1][i]; in find_slave_port_pkey_ix()
482 int mlx4_ib_send_to_slave(struct mlx4_ib_dev *dev, int slave, u8 port, in mlx4_ib_send_to_slave() argument
505 tun_ctx = dev->sriov.demux[port-1].tun[slave]; in mlx4_ib_send_to_slave()
516 /* compute P_Key index to put in tunnel header for slave */ in mlx4_ib_send_to_slave()
523 ret = find_slave_port_pkey_ix(dev, slave, port, cached_pkey, &pkey_ix); in mlx4_ib_send_to_slave()
528 tun_pkey_ix = dev->pkeys.virt2phys_pkey[slave][port - 1][0]; in mlx4_ib_send_to_slave()
530 dqpn = dev->dev->phys_caps.base_proxy_sqpn + 8 * slave + port + (dest_qpt * 2) - 1; in mlx4_ib_send_to_slave()
532 /* get tunnel tx data buf for slave */ in mlx4_ib_send_to_slave()
579 if (mlx4_get_slave_default_vlan(dev->dev, port, slave, &vlan, in mlx4_ib_send_to_slave()
645 int slave = -1; in mlx4_ib_demux_mad() local
663 err = mlx4_get_slave_from_roce_gid(dev->dev, port, grh->dgid.raw, &slave); in mlx4_ib_demux_mad()
666 err = mlx4_get_slave_from_roce_gid(dev->dev, other_port, grh->dgid.raw, &slave); in mlx4_ib_demux_mad()
669 pr_debug("resolved slave %d from gid %pI6 wire port %d other %d\n", in mlx4_ib_demux_mad()
670 slave, grh->dgid.raw, port, other_port); in mlx4_ib_demux_mad()
677 if (slave >= dev->dev->caps.sqp_demux) { in mlx4_ib_demux_mad()
678 mlx4_ib_warn(ibdev, "slave id: %d is bigger than allowed:%d\n", in mlx4_ib_demux_mad()
679 slave, dev->dev->caps.sqp_demux); in mlx4_ib_demux_mad()
686 err = mlx4_ib_send_to_slave(dev, slave, port, wc->qp->qp_type, wc, grh, mad); in mlx4_ib_demux_mad()
688 pr_debug("failed sending to slave %d via tunnel qp (%d)\n", in mlx4_ib_demux_mad()
689 slave, err); in mlx4_ib_demux_mad()
694 slave = mlx4_master_func_num(dev->dev); in mlx4_ib_demux_mad()
696 /* See if the slave id is encoded in a response mad */ in mlx4_ib_demux_mad()
699 slave = *slave_id; in mlx4_ib_demux_mad()
700 if (slave != 255) /*255 indicates the dom0*/ in mlx4_ib_demux_mad()
706 slave = mlx4_ib_find_real_gid(ibdev, port, grh->dgid.global.interface_id); in mlx4_ib_demux_mad()
707 if (slave < 0) { in mlx4_ib_demux_mad()
717 if (slave != 255 && slave != mlx4_master_func_num(dev->dev)) { in mlx4_ib_demux_mad()
718 if (!mlx4_vf_smi_enabled(dev->dev, slave, port)) in mlx4_ib_demux_mad()
722 … mlx4_ib_warn(ibdev, "demux QP0. rejecting unsolicited mad for slave %d class 0x%x, method 0x%x\n", in mlx4_ib_demux_mad()
723 slave, mad->mad_hdr.mgmt_class, in mlx4_ib_demux_mad()
730 if (mlx4_ib_demux_sa_handler(ibdev, port, slave, in mlx4_ib_demux_mad()
735 if (mlx4_ib_demux_cm_handler(ibdev, port, &slave, mad)) in mlx4_ib_demux_mad()
744 if (slave != mlx4_master_func_num(dev->dev)) { in mlx4_ib_demux_mad()
746 "for slave:%d\n", mad->mad_hdr.mgmt_class, slave); in mlx4_ib_demux_mad()
750 /*make sure that no slave==255 was not handled yet.*/ in mlx4_ib_demux_mad()
751 if (slave >= dev->dev->caps.sqp_demux) { in mlx4_ib_demux_mad()
752 mlx4_ib_warn(ibdev, "slave id: %d is bigger than allowed:%d\n", in mlx4_ib_demux_mad()
753 slave, dev->dev->caps.sqp_demux); in mlx4_ib_demux_mad()
757 err = mlx4_ib_send_to_slave(dev, slave, port, wc->qp->qp_type, wc, grh, mad); in mlx4_ib_demux_mad()
759 pr_debug("failed sending to slave %d via tunnel qp (%d)\n", in mlx4_ib_demux_mad()
760 slave, err); in mlx4_ib_demux_mad()
1300 int slave, struct ib_sa_mad *sa_mad) in mlx4_ib_multiplex_sa_handler() argument
1307 ret = mlx4_ib_mcg_multiplex_handler(ibdev, port, slave, sa_mad); in mlx4_ib_multiplex_sa_handler()
1315 static int is_proxy_qp0(struct mlx4_ib_dev *dev, int qpn, int slave) in is_proxy_qp0() argument
1317 int proxy_start = dev->dev->phys_caps.base_proxy_sqpn + 8 * slave; in is_proxy_qp0()
1323 int mlx4_ib_send_to_wire(struct mlx4_ib_dev *dev, int slave, u8 port, in mlx4_ib_send_to_wire() argument
1350 wire_pkey_ix = dev->pkeys.virt2phys_pkey[slave][port - 1][0]; in mlx4_ib_send_to_wire()
1354 wire_pkey_ix = dev->pkeys.virt2phys_pkey[slave][port - 1][pkey_index]; in mlx4_ib_send_to_wire()
1427 static int get_slave_base_gid_ix(struct mlx4_ib_dev *dev, int slave, int port) in get_slave_base_gid_ix() argument
1430 return slave; in get_slave_base_gid_ix()
1431 return mlx4_get_base_gid_ix(dev->dev, slave, port); in get_slave_base_gid_ix()
1434 static void fill_in_real_sgid_index(struct mlx4_ib_dev *dev, int slave, int port, in fill_in_real_sgid_index() argument
1438 ah_attr->grh.sgid_index = slave; in fill_in_real_sgid_index()
1440 ah_attr->grh.sgid_index += get_slave_base_gid_ix(dev, slave, port); in fill_in_real_sgid_index()
1452 int slave; in mlx4_ib_multiplex_mad() local
1456 /* Get slave that sent this packet */ in mlx4_ib_multiplex_mad()
1464 slave = ((wc->src_qp & ~0x7) - dev->dev->phys_caps.base_proxy_sqpn) / 8; in mlx4_ib_multiplex_mad()
1465 if (slave != ctx->slave) { in mlx4_ib_multiplex_mad()
1467 "belongs to another slave\n", wc->src_qp); in mlx4_ib_multiplex_mad()
1486 "class:%d slave:%d\n", *slave_id, in mlx4_ib_multiplex_mad()
1487 tunnel->mad.mad_hdr.mgmt_class, slave); in mlx4_ib_multiplex_mad()
1490 *slave_id = slave; in mlx4_ib_multiplex_mad()
1499 if (slave != mlx4_master_func_num(dev->dev) && in mlx4_ib_multiplex_mad()
1500 !mlx4_vf_smi_enabled(dev->dev, slave, ctx->port)) in mlx4_ib_multiplex_mad()
1504 if (mlx4_ib_multiplex_sa_handler(ctx->ib_dev, ctx->port, slave, in mlx4_ib_multiplex_mad()
1509 if (mlx4_ib_multiplex_cm_handler(ctx->ib_dev, ctx->port, slave, in mlx4_ib_multiplex_mad()
1520 if (slave != mlx4_master_func_num(dev->dev)) { in mlx4_ib_multiplex_mad()
1522 "for slave:%d\n", tunnel->mad.mad_hdr.mgmt_class, slave); in mlx4_ib_multiplex_mad()
1533 port = mlx4_slave_convert_port(dev->dev, slave, port); in mlx4_ib_multiplex_mad()
1540 fill_in_real_sgid_index(dev, slave, ctx->port, &ah_attr); in mlx4_ib_multiplex_mad()
1544 /* if slave have default vlan use it */ in mlx4_ib_multiplex_mad()
1545 mlx4_get_slave_default_vlan(dev->dev, ctx->port, slave, in mlx4_ib_multiplex_mad()
1548 mlx4_ib_send_to_wire(dev, slave, ctx->port, in mlx4_ib_multiplex_mad()
1549 is_proxy_qp0(dev, wc->src_qp, slave) ? in mlx4_ib_multiplex_mad()
1729 ctx->slave, wc.status, (unsigned long long)wc.wr_id); in mlx4_ib_tunnel_comp_worker()
1779 qp_init_attr.slave = ctx->slave; in create_pv_sqp()
1805 ret = find_slave_port_pkey_ix(to_mdev(ctx->ib_dev), ctx->slave, in create_pv_sqp()
1810 to_mdev(ctx->ib_dev)->pkeys.virt2phys_pkey[ctx->slave][ctx->port - 1][0]; in create_pv_sqp()
1898 ctx->slave, wc.status, (unsigned long long)wc.wr_id); in mlx4_ib_sqp_comp_worker()
1912 static int alloc_pv_object(struct mlx4_ib_dev *dev, int slave, int port, in alloc_pv_object() argument
1921 "for port %d, slave %d\n", port, slave); in alloc_pv_object()
1927 ctx->slave = slave; in alloc_pv_object()
1932 static void free_pv_object(struct mlx4_ib_dev *dev, int slave, int port) in free_pv_object() argument
1934 if (dev->sriov.demux[port - 1].tun[slave]) { in free_pv_object()
1935 kfree(dev->sriov.demux[port - 1].tun[slave]); in free_pv_object()
1936 dev->sriov.demux[port - 1].tun[slave] = NULL; in free_pv_object()
1940 static int create_pv_resources(struct ib_device *ibdev, int slave, int port, in create_pv_resources() argument
2050 static void destroy_pv_resources(struct mlx4_ib_dev *dev, int slave, int port, in destroy_pv_resources() argument
2075 static int mlx4_ib_tunnels_update(struct mlx4_ib_dev *dev, int slave, in mlx4_ib_tunnels_update() argument
2081 clean_vf_mcast(&dev->sriov.demux[port - 1], slave); in mlx4_ib_tunnels_update()
2083 if (slave == mlx4_master_func_num(dev->dev)) in mlx4_ib_tunnels_update()
2084 destroy_pv_resources(dev, slave, port, in mlx4_ib_tunnels_update()
2087 destroy_pv_resources(dev, slave, port, in mlx4_ib_tunnels_update()
2088 dev->sriov.demux[port - 1].tun[slave], 1); in mlx4_ib_tunnels_update()
2093 ret = create_pv_resources(&dev->ib_dev, slave, port, 1, in mlx4_ib_tunnels_update()
2094 dev->sriov.demux[port - 1].tun[slave]); in mlx4_ib_tunnels_update()
2097 if (!ret && slave == mlx4_master_func_num(dev->dev)) in mlx4_ib_tunnels_update()
2098 ret = create_pv_resources(&dev->ib_dev, slave, port, 0, in mlx4_ib_tunnels_update()
2108 mlx4_ib_tunnels_update(dmxw->dev, dmxw->slave, (int) dmxw->port, in mlx4_ib_tunnels_update_work()