Lines Matching refs:slave

295 static void rem_slave_vlans(struct mlx4_dev *dev, int slave);
296 static inline int mlx4_grant_resource(struct mlx4_dev *dev, int slave, in mlx4_grant_resource() argument
307 if (slave > dev->persist->num_vfs) in mlx4_grant_resource()
313 (dev->persist->num_vfs + 1) + slave] : in mlx4_grant_resource()
314 res_alloc->allocated[slave]; in mlx4_grant_resource()
319 guaranteed = res_alloc->guaranteed[slave]; in mlx4_grant_resource()
321 if (allocated + count > res_alloc->quota[slave]) { in mlx4_grant_resource()
323 slave, port, resource_str(res_type), count, in mlx4_grant_resource()
324 allocated, res_alloc->quota[slave]); in mlx4_grant_resource()
344 slave, port, resource_str(res_type), free, in mlx4_grant_resource()
352 (dev->persist->num_vfs + 1) + slave] += count; in mlx4_grant_resource()
356 res_alloc->allocated[slave] += count; in mlx4_grant_resource()
367 static inline void mlx4_release_resource(struct mlx4_dev *dev, int slave, in mlx4_release_resource() argument
376 if (slave > dev->persist->num_vfs) in mlx4_release_resource()
383 (dev->persist->num_vfs + 1) + slave] : in mlx4_release_resource()
384 res_alloc->allocated[slave]; in mlx4_release_resource()
385 guaranteed = res_alloc->guaranteed[slave]; in mlx4_release_resource()
399 (dev->persist->num_vfs + 1) + slave] -= count; in mlx4_release_resource()
403 res_alloc->allocated[slave] -= count; in mlx4_release_resource()
648 static void update_pkey_index(struct mlx4_dev *dev, int slave, in update_pkey_index() argument
659 new_index = priv->virt2phys_pkey[slave][port - 1][orig_index]; in update_pkey_index()
664 u8 slave) in update_gid() argument
675 mlx4_get_base_gid_ix(dev, slave, port) | 0x80; in update_gid()
677 qp_ctx->pri_path.mgid_index = slave | 0x80; in update_gid()
684 mlx4_get_base_gid_ix(dev, slave, port); in update_gid()
687 qp_ctx->pri_path.mgid_index = slave & 0x7F; in update_gid()
694 mlx4_get_base_gid_ix(dev, slave, port); in update_gid()
697 qp_ctx->alt_path.mgid_index = slave & 0x7F; in update_gid()
705 u8 slave, u32 qpn) in update_vport_qp_param() argument
715 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port]; in update_vport_qp_param()
792 static int get_res(struct mlx4_dev *dev, int slave, u64 res_id, in get_res() argument
811 if (r->owner != slave) { in get_res()
829 u64 res_id, int *slave) in mlx4_get_slave_from_resource_id() argument
842 *slave = r->owner; in mlx4_get_slave_from_resource_id()
850 static void put_res(struct mlx4_dev *dev, int slave, u64 res_id, in put_res() argument
997 static struct res_common *alloc_tr(u64 id, enum mlx4_resource type, int slave, in alloc_tr() argument
1037 ret->owner = slave; in alloc_tr()
1042 static int add_res_range(struct mlx4_dev *dev, int slave, u64 base, int count, in add_res_range() argument
1057 res_arr[i] = alloc_tr(base + i, type, slave, extra); in add_res_range()
1077 &tracker->slave_list[slave].res_list[type]); in add_res_range()
1227 static int rem_res_range(struct mlx4_dev *dev, int slave, u64 base, int count, in rem_res_range() argument
1243 if (r->owner != slave) { in rem_res_range()
1266 static int qp_res_start_move_to(struct mlx4_dev *dev, int slave, int qpn, in qp_res_start_move_to() argument
1279 else if (r->com.owner != slave) in qp_res_start_move_to()
1331 static int mr_res_start_move_to(struct mlx4_dev *dev, int slave, int index, in mr_res_start_move_to() argument
1343 else if (r->com.owner != slave) in mr_res_start_move_to()
1384 static int eq_res_start_move_to(struct mlx4_dev *dev, int slave, int index, in eq_res_start_move_to() argument
1396 else if (r->com.owner != slave) in eq_res_start_move_to()
1432 static int cq_res_start_move_to(struct mlx4_dev *dev, int slave, int cqn, in cq_res_start_move_to() argument
1444 } else if (r->com.owner != slave) { in cq_res_start_move_to()
1472 static int srq_res_start_move_to(struct mlx4_dev *dev, int slave, int index, in srq_res_start_move_to() argument
1484 } else if (r->com.owner != slave) { in srq_res_start_move_to()
1508 static void res_abort_move(struct mlx4_dev *dev, int slave, in res_abort_move() argument
1517 if (r && (r->owner == slave)) in res_abort_move()
1522 static void res_end_move(struct mlx4_dev *dev, int slave, in res_end_move() argument
1531 if (r && (r->owner == slave)) in res_end_move()
1536 static int valid_reserved(struct mlx4_dev *dev, int slave, int qpn) in valid_reserved() argument
1539 (mlx4_is_master(dev) || mlx4_is_guest_proxy(dev, slave, qpn)); in valid_reserved()
1547 static int qp_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in qp_alloc_res() argument
1565 err = mlx4_grant_resource(dev, slave, RES_QP, count, 0); in qp_alloc_res()
1571 mlx4_release_resource(dev, slave, RES_QP, count, 0); in qp_alloc_res()
1575 err = add_res_range(dev, slave, base, count, RES_QP, 0); in qp_alloc_res()
1577 mlx4_release_resource(dev, slave, RES_QP, count, 0); in qp_alloc_res()
1585 if (valid_reserved(dev, slave, qpn)) { in qp_alloc_res()
1586 err = add_res_range(dev, slave, qpn, 1, RES_QP, 0); in qp_alloc_res()
1591 err = qp_res_start_move_to(dev, slave, qpn, RES_QP_MAPPED, in qp_alloc_res()
1599 res_abort_move(dev, slave, RES_QP, qpn); in qp_alloc_res()
1604 res_end_move(dev, slave, RES_QP, qpn); in qp_alloc_res()
1614 static int mtt_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mtt_alloc_res() argument
1626 err = mlx4_grant_resource(dev, slave, RES_MTT, 1 << order, 0); in mtt_alloc_res()
1632 mlx4_release_resource(dev, slave, RES_MTT, 1 << order, 0); in mtt_alloc_res()
1636 err = add_res_range(dev, slave, base, 1, RES_MTT, order); in mtt_alloc_res()
1638 mlx4_release_resource(dev, slave, RES_MTT, 1 << order, 0); in mtt_alloc_res()
1647 static int mpt_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mpt_alloc_res() argument
1657 err = mlx4_grant_resource(dev, slave, RES_MPT, 1, 0); in mpt_alloc_res()
1663 mlx4_release_resource(dev, slave, RES_MPT, 1, 0); in mpt_alloc_res()
1668 err = add_res_range(dev, slave, id, 1, RES_MPT, index); in mpt_alloc_res()
1670 mlx4_release_resource(dev, slave, RES_MPT, 1, 0); in mpt_alloc_res()
1679 err = mr_res_start_move_to(dev, slave, id, in mpt_alloc_res()
1686 res_abort_move(dev, slave, RES_MPT, id); in mpt_alloc_res()
1690 res_end_move(dev, slave, RES_MPT, id); in mpt_alloc_res()
1696 static int cq_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in cq_alloc_res() argument
1704 err = mlx4_grant_resource(dev, slave, RES_CQ, 1, 0); in cq_alloc_res()
1710 mlx4_release_resource(dev, slave, RES_CQ, 1, 0); in cq_alloc_res()
1714 err = add_res_range(dev, slave, cqn, 1, RES_CQ, 0); in cq_alloc_res()
1716 mlx4_release_resource(dev, slave, RES_CQ, 1, 0); in cq_alloc_res()
1731 static int srq_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in srq_alloc_res() argument
1739 err = mlx4_grant_resource(dev, slave, RES_SRQ, 1, 0); in srq_alloc_res()
1745 mlx4_release_resource(dev, slave, RES_SRQ, 1, 0); in srq_alloc_res()
1749 err = add_res_range(dev, slave, srqn, 1, RES_SRQ, 0); in srq_alloc_res()
1751 mlx4_release_resource(dev, slave, RES_SRQ, 1, 0); in srq_alloc_res()
1766 static int mac_find_smac_ix_in_slave(struct mlx4_dev *dev, int slave, int port, in mac_find_smac_ix_in_slave() argument
1772 &tracker->slave_list[slave].res_list[RES_MAC]; in mac_find_smac_ix_in_slave()
1784 static int mac_add_to_slave(struct mlx4_dev *dev, int slave, u64 mac, int port, u8 smac_index) in mac_add_to_slave() argument
1789 &tracker->slave_list[slave].res_list[RES_MAC]; in mac_add_to_slave()
1800 if (mlx4_grant_resource(dev, slave, RES_MAC, 1, port)) in mac_add_to_slave()
1804 mlx4_release_resource(dev, slave, RES_MAC, 1, port); in mac_add_to_slave()
1812 &tracker->slave_list[slave].res_list[RES_MAC]); in mac_add_to_slave()
1816 static void mac_del_from_slave(struct mlx4_dev *dev, int slave, u64 mac, in mac_del_from_slave() argument
1822 &tracker->slave_list[slave].res_list[RES_MAC]; in mac_del_from_slave()
1829 mlx4_release_resource(dev, slave, RES_MAC, 1, port); in mac_del_from_slave()
1837 static void rem_slave_macs(struct mlx4_dev *dev, int slave) in rem_slave_macs() argument
1842 &tracker->slave_list[slave].res_list[RES_MAC]; in rem_slave_macs()
1851 mlx4_release_resource(dev, slave, RES_MAC, 1, res->port); in rem_slave_macs()
1856 static int mac_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mac_alloc_res() argument
1869 dev, slave, port); in mac_alloc_res()
1883 err = mac_add_to_slave(dev, slave, mac, port, smac_index); in mac_alloc_res()
1890 static int vlan_add_to_slave(struct mlx4_dev *dev, int slave, u16 vlan, in vlan_add_to_slave() argument
1896 &tracker->slave_list[slave].res_list[RES_VLAN]; in vlan_add_to_slave()
1907 if (mlx4_grant_resource(dev, slave, RES_VLAN, 1, port)) in vlan_add_to_slave()
1911 mlx4_release_resource(dev, slave, RES_VLAN, 1, port); in vlan_add_to_slave()
1919 &tracker->slave_list[slave].res_list[RES_VLAN]); in vlan_add_to_slave()
1924 static void vlan_del_from_slave(struct mlx4_dev *dev, int slave, u16 vlan, in vlan_del_from_slave() argument
1930 &tracker->slave_list[slave].res_list[RES_VLAN]; in vlan_del_from_slave()
1937 mlx4_release_resource(dev, slave, RES_VLAN, in vlan_del_from_slave()
1946 static void rem_slave_vlans(struct mlx4_dev *dev, int slave) in rem_slave_vlans() argument
1951 &tracker->slave_list[slave].res_list[RES_VLAN]; in rem_slave_vlans()
1960 mlx4_release_resource(dev, slave, RES_VLAN, 1, res->port); in rem_slave_vlans()
1965 static int vlan_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in vlan_alloc_res() argument
1981 dev, slave, port); in vlan_alloc_res()
1987 slave_state[slave].old_vlan_api = true; in vlan_alloc_res()
1996 err = vlan_add_to_slave(dev, slave, vlan, port, vlan_index); in vlan_alloc_res()
2003 static int counter_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in counter_alloc_res() argument
2012 err = mlx4_grant_resource(dev, slave, RES_COUNTER, 1, 0); in counter_alloc_res()
2018 mlx4_release_resource(dev, slave, RES_COUNTER, 1, 0); in counter_alloc_res()
2022 err = add_res_range(dev, slave, index, 1, RES_COUNTER, 0); in counter_alloc_res()
2025 mlx4_release_resource(dev, slave, RES_COUNTER, 1, 0); in counter_alloc_res()
2033 static int xrcdn_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in xrcdn_alloc_res() argument
2046 err = add_res_range(dev, slave, xrcdn, 1, RES_XRCD, 0); in xrcdn_alloc_res()
2055 int mlx4_ALLOC_RES_wrapper(struct mlx4_dev *dev, int slave, in mlx4_ALLOC_RES_wrapper() argument
2066 err = qp_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2071 err = mtt_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2076 err = mpt_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2081 err = cq_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2086 err = srq_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2091 err = mac_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2097 err = vlan_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2103 err = counter_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2108 err = xrcdn_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2120 static int qp_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in qp_free_res() argument
2132 err = rem_res_range(dev, slave, base, count, RES_QP, 0); in qp_free_res()
2135 mlx4_release_resource(dev, slave, RES_QP, count, 0); in qp_free_res()
2140 err = qp_res_start_move_to(dev, slave, qpn, RES_QP_RESERVED, in qp_free_res()
2148 res_end_move(dev, slave, RES_QP, qpn); in qp_free_res()
2150 if (valid_reserved(dev, slave, qpn)) in qp_free_res()
2151 err = rem_res_range(dev, slave, qpn, 1, RES_QP, 0); in qp_free_res()
2160 static int mtt_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mtt_free_res() argument
2172 err = rem_res_range(dev, slave, base, 1, RES_MTT, order); in mtt_free_res()
2174 mlx4_release_resource(dev, slave, RES_MTT, 1 << order, 0); in mtt_free_res()
2180 static int mpt_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mpt_free_res() argument
2192 err = get_res(dev, slave, id, RES_MPT, &mpt); in mpt_free_res()
2196 put_res(dev, slave, id, RES_MPT); in mpt_free_res()
2198 err = rem_res_range(dev, slave, id, 1, RES_MPT, 0); in mpt_free_res()
2201 mlx4_release_resource(dev, slave, RES_MPT, 1, 0); in mpt_free_res()
2207 err = mr_res_start_move_to(dev, slave, id, in mpt_free_res()
2213 res_end_move(dev, slave, RES_MPT, id); in mpt_free_res()
2223 static int cq_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in cq_free_res() argument
2232 err = rem_res_range(dev, slave, cqn, 1, RES_CQ, 0); in cq_free_res()
2236 mlx4_release_resource(dev, slave, RES_CQ, 1, 0); in cq_free_res()
2248 static int srq_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in srq_free_res() argument
2257 err = rem_res_range(dev, slave, srqn, 1, RES_SRQ, 0); in srq_free_res()
2261 mlx4_release_resource(dev, slave, RES_SRQ, 1, 0); in srq_free_res()
2273 static int mac_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mac_free_res() argument
2283 dev, slave, port); in mac_free_res()
2287 mac_del_from_slave(dev, slave, in_param, port); in mac_free_res()
2299 static int vlan_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in vlan_free_res() argument
2307 dev, slave, port); in vlan_free_res()
2313 if (slave_state[slave].old_vlan_api) in vlan_free_res()
2317 vlan_del_from_slave(dev, slave, in_param, port); in vlan_free_res()
2328 static int counter_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in counter_free_res() argument
2338 err = rem_res_range(dev, slave, index, 1, RES_COUNTER, 0); in counter_free_res()
2343 mlx4_release_resource(dev, slave, RES_COUNTER, 1, 0); in counter_free_res()
2348 static int xrcdn_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in xrcdn_free_res() argument
2358 err = rem_res_range(dev, slave, xrcdn, 1, RES_XRCD, 0); in xrcdn_free_res()
2367 int mlx4_FREE_RES_wrapper(struct mlx4_dev *dev, int slave, in mlx4_FREE_RES_wrapper() argument
2378 err = qp_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2383 err = mtt_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2388 err = mpt_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2393 err = cq_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2398 err = srq_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2403 err = mac_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2409 err = vlan_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2415 err = counter_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2420 err = xrcdn_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2502 static int check_mtt_range(struct mlx4_dev *dev, int slave, int start, in check_mtt_range() argument
2513 int mlx4_SW2HW_MPT_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SW2HW_MPT_wrapper() argument
2530 err = mr_res_start_move_to(dev, slave, id, RES_MPT_HW, &mpt); in mlx4_SW2HW_MPT_wrapper()
2543 if (pd_slave != 0 && --pd_slave != slave) { in mlx4_SW2HW_MPT_wrapper()
2563 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in mlx4_SW2HW_MPT_wrapper()
2567 err = check_mtt_range(dev, slave, mtt_base, in mlx4_SW2HW_MPT_wrapper()
2575 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SW2HW_MPT_wrapper()
2581 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_MPT_wrapper()
2584 res_end_move(dev, slave, RES_MPT, id); in mlx4_SW2HW_MPT_wrapper()
2589 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_MPT_wrapper()
2591 res_abort_move(dev, slave, RES_MPT, id); in mlx4_SW2HW_MPT_wrapper()
2596 int mlx4_HW2SW_MPT_wrapper(struct mlx4_dev *dev, int slave, in mlx4_HW2SW_MPT_wrapper() argument
2608 err = mr_res_start_move_to(dev, slave, id, RES_MPT_MAPPED, &mpt); in mlx4_HW2SW_MPT_wrapper()
2612 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_HW2SW_MPT_wrapper()
2619 res_end_move(dev, slave, RES_MPT, id); in mlx4_HW2SW_MPT_wrapper()
2623 res_abort_move(dev, slave, RES_MPT, id); in mlx4_HW2SW_MPT_wrapper()
2628 int mlx4_QUERY_MPT_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QUERY_MPT_wrapper() argument
2640 err = get_res(dev, slave, id, RES_MPT, &mpt); in mlx4_QUERY_MPT_wrapper()
2666 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_QUERY_MPT_wrapper()
2674 put_res(dev, slave, id, RES_MPT); in mlx4_QUERY_MPT_wrapper()
2706 int mlx4_RST2INIT_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_RST2INIT_QP_wrapper() argument
2728 err = qp_res_start_move_to(dev, slave, qpn, RES_QP_HW, &qp, 0); in mlx4_RST2INIT_QP_wrapper()
2741 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in mlx4_RST2INIT_QP_wrapper()
2745 err = check_mtt_range(dev, slave, mtt_base, mtt_size, mtt); in mlx4_RST2INIT_QP_wrapper()
2749 err = get_res(dev, slave, rcqn, RES_CQ, &rcq); in mlx4_RST2INIT_QP_wrapper()
2754 err = get_res(dev, slave, scqn, RES_CQ, &scq); in mlx4_RST2INIT_QP_wrapper()
2761 err = get_res(dev, slave, srqn, RES_SRQ, &srq); in mlx4_RST2INIT_QP_wrapper()
2767 update_pkey_index(dev, slave, inbox); in mlx4_RST2INIT_QP_wrapper()
2768 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_RST2INIT_QP_wrapper()
2779 put_res(dev, slave, scqn, RES_CQ); in mlx4_RST2INIT_QP_wrapper()
2783 put_res(dev, slave, srqn, RES_SRQ); in mlx4_RST2INIT_QP_wrapper()
2786 put_res(dev, slave, rcqn, RES_CQ); in mlx4_RST2INIT_QP_wrapper()
2787 put_res(dev, slave, mtt_base, RES_MTT); in mlx4_RST2INIT_QP_wrapper()
2788 res_end_move(dev, slave, RES_QP, qpn); in mlx4_RST2INIT_QP_wrapper()
2794 put_res(dev, slave, srqn, RES_SRQ); in mlx4_RST2INIT_QP_wrapper()
2797 put_res(dev, slave, scqn, RES_CQ); in mlx4_RST2INIT_QP_wrapper()
2799 put_res(dev, slave, rcqn, RES_CQ); in mlx4_RST2INIT_QP_wrapper()
2801 put_res(dev, slave, mtt_base, RES_MTT); in mlx4_RST2INIT_QP_wrapper()
2803 res_abort_move(dev, slave, RES_QP, qpn); in mlx4_RST2INIT_QP_wrapper()
2840 int mlx4_SW2HW_EQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SW2HW_EQ_wrapper() argument
2848 int res_id = (slave << 10) | eqn; in mlx4_SW2HW_EQ_wrapper()
2855 err = add_res_range(dev, slave, res_id, 1, RES_EQ, 0); in mlx4_SW2HW_EQ_wrapper()
2858 err = eq_res_start_move_to(dev, slave, res_id, RES_EQ_HW, &eq); in mlx4_SW2HW_EQ_wrapper()
2862 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in mlx4_SW2HW_EQ_wrapper()
2866 err = check_mtt_range(dev, slave, mtt_base, mtt_size, mtt); in mlx4_SW2HW_EQ_wrapper()
2870 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SW2HW_EQ_wrapper()
2876 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_EQ_wrapper()
2877 res_end_move(dev, slave, RES_EQ, res_id); in mlx4_SW2HW_EQ_wrapper()
2881 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_EQ_wrapper()
2883 res_abort_move(dev, slave, RES_EQ, res_id); in mlx4_SW2HW_EQ_wrapper()
2885 rem_res_range(dev, slave, res_id, 1, RES_EQ, 0); in mlx4_SW2HW_EQ_wrapper()
2889 int mlx4_CONFIG_DEV_wrapper(struct mlx4_dev *dev, int slave, in mlx4_CONFIG_DEV_wrapper() argument
2901 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_CONFIG_DEV_wrapper()
2906 static int get_containing_mtt(struct mlx4_dev *dev, int slave, int start, in get_containing_mtt() argument
2915 list_for_each_entry(mtt, &tracker->slave_list[slave].res_list[RES_MTT], in get_containing_mtt()
2917 if (!check_mtt_range(dev, slave, start, len, mtt)) { in get_containing_mtt()
2933 enum qp_transition transition, u8 slave) in verify_qp_parameters() argument
2946 if (slave != mlx4_master_func_num(dev)) { in verify_qp_parameters()
2963 if (slave != mlx4_master_func_num(dev)) in verify_qp_parameters()
2967 num_gids = mlx4_get_slave_num_gids(dev, slave, port); in verify_qp_parameters()
2976 num_gids = mlx4_get_slave_num_gids(dev, slave, port); in verify_qp_parameters()
2992 slave != mlx4_master_func_num(dev) && in verify_qp_parameters()
2994 !mlx4_vf_smi_enabled(dev, slave, port)) { in verify_qp_parameters()
2997 __func__, slave, port); in verify_qp_parameters()
3009 int mlx4_WRITE_MTT_wrapper(struct mlx4_dev *dev, int slave, in mlx4_WRITE_MTT_wrapper() argument
3024 err = get_containing_mtt(dev, slave, start, npages, &rmtt); in mlx4_WRITE_MTT_wrapper()
3042 put_res(dev, slave, rmtt->com.res_id, RES_MTT); in mlx4_WRITE_MTT_wrapper()
3047 int mlx4_HW2SW_EQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_HW2SW_EQ_wrapper() argument
3054 int res_id = eqn | (slave << 10); in mlx4_HW2SW_EQ_wrapper()
3058 err = eq_res_start_move_to(dev, slave, res_id, RES_EQ_RESERVED, &eq); in mlx4_HW2SW_EQ_wrapper()
3062 err = get_res(dev, slave, eq->mtt->com.res_id, RES_MTT, NULL); in mlx4_HW2SW_EQ_wrapper()
3066 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_HW2SW_EQ_wrapper()
3071 put_res(dev, slave, eq->mtt->com.res_id, RES_MTT); in mlx4_HW2SW_EQ_wrapper()
3072 res_end_move(dev, slave, RES_EQ, res_id); in mlx4_HW2SW_EQ_wrapper()
3073 rem_res_range(dev, slave, res_id, 1, RES_EQ, 0); in mlx4_HW2SW_EQ_wrapper()
3078 put_res(dev, slave, eq->mtt->com.res_id, RES_MTT); in mlx4_HW2SW_EQ_wrapper()
3080 res_abort_move(dev, slave, RES_EQ, res_id); in mlx4_HW2SW_EQ_wrapper()
3085 int mlx4_GEN_EQE(struct mlx4_dev *dev, int slave, struct mlx4_eqe *eqe) in mlx4_GEN_EQE() argument
3099 if (slave < 0 || slave > dev->persist->num_vfs || in mlx4_GEN_EQE()
3100 slave == dev->caps.function || in mlx4_GEN_EQE()
3101 !priv->mfunc.master.slave_state[slave].active) in mlx4_GEN_EQE()
3104 event_eq = &priv->mfunc.master.slave_state[slave].event_eq[eqe->type]; in mlx4_GEN_EQE()
3110 mutex_lock(&priv->mfunc.master.gen_eqe_mutex[slave]); in mlx4_GEN_EQE()
3111 res_id = (slave << 10) | event_eq->eqn; in mlx4_GEN_EQE()
3112 err = get_res(dev, slave, res_id, RES_EQ, &req); in mlx4_GEN_EQE()
3134 in_modifier = (slave & 0xff) | ((event_eq->eqn & 0x3ff) << 16); in mlx4_GEN_EQE()
3140 put_res(dev, slave, res_id, RES_EQ); in mlx4_GEN_EQE()
3141 mutex_unlock(&priv->mfunc.master.gen_eqe_mutex[slave]); in mlx4_GEN_EQE()
3146 put_res(dev, slave, res_id, RES_EQ); in mlx4_GEN_EQE()
3149 mutex_unlock(&priv->mfunc.master.gen_eqe_mutex[slave]); in mlx4_GEN_EQE()
3153 int mlx4_QUERY_EQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QUERY_EQ_wrapper() argument
3160 int res_id = eqn | (slave << 10); in mlx4_QUERY_EQ_wrapper()
3164 err = get_res(dev, slave, res_id, RES_EQ, &eq); in mlx4_QUERY_EQ_wrapper()
3173 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_QUERY_EQ_wrapper()
3176 put_res(dev, slave, res_id, RES_EQ); in mlx4_QUERY_EQ_wrapper()
3180 int mlx4_SW2HW_CQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SW2HW_CQ_wrapper() argument
3193 err = cq_res_start_move_to(dev, slave, cqn, RES_CQ_HW, &cq); in mlx4_SW2HW_CQ_wrapper()
3196 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in mlx4_SW2HW_CQ_wrapper()
3199 err = check_mtt_range(dev, slave, mtt_base, cq_get_mtt_size(cqc), mtt); in mlx4_SW2HW_CQ_wrapper()
3202 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SW2HW_CQ_wrapper()
3207 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_CQ_wrapper()
3208 res_end_move(dev, slave, RES_CQ, cqn); in mlx4_SW2HW_CQ_wrapper()
3212 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_CQ_wrapper()
3214 res_abort_move(dev, slave, RES_CQ, cqn); in mlx4_SW2HW_CQ_wrapper()
3218 int mlx4_HW2SW_CQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_HW2SW_CQ_wrapper() argument
3228 err = cq_res_start_move_to(dev, slave, cqn, RES_CQ_ALLOCATED, &cq); in mlx4_HW2SW_CQ_wrapper()
3231 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_HW2SW_CQ_wrapper()
3235 res_end_move(dev, slave, RES_CQ, cqn); in mlx4_HW2SW_CQ_wrapper()
3239 res_abort_move(dev, slave, RES_CQ, cqn); in mlx4_HW2SW_CQ_wrapper()
3243 int mlx4_QUERY_CQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QUERY_CQ_wrapper() argument
3253 err = get_res(dev, slave, cqn, RES_CQ, &cq); in mlx4_QUERY_CQ_wrapper()
3260 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_QUERY_CQ_wrapper()
3262 put_res(dev, slave, cqn, RES_CQ); in mlx4_QUERY_CQ_wrapper()
3267 static int handle_resize(struct mlx4_dev *dev, int slave, in handle_resize() argument
3280 err = get_res(dev, slave, cq->mtt->com.res_id, RES_MTT, &orig_mtt); in handle_resize()
3289 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in handle_resize()
3293 err = check_mtt_range(dev, slave, mtt_base, cq_get_mtt_size(cqc), mtt); in handle_resize()
3296 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in handle_resize()
3300 put_res(dev, slave, orig_mtt->com.res_id, RES_MTT); in handle_resize()
3303 put_res(dev, slave, mtt->com.res_id, RES_MTT); in handle_resize()
3307 put_res(dev, slave, mtt->com.res_id, RES_MTT); in handle_resize()
3309 put_res(dev, slave, orig_mtt->com.res_id, RES_MTT); in handle_resize()
3315 int mlx4_MODIFY_CQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_MODIFY_CQ_wrapper() argument
3325 err = get_res(dev, slave, cqn, RES_CQ, &cq); in mlx4_MODIFY_CQ_wrapper()
3333 err = handle_resize(dev, slave, vhcr, inbox, outbox, cmd, cq); in mlx4_MODIFY_CQ_wrapper()
3337 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_MODIFY_CQ_wrapper()
3339 put_res(dev, slave, cqn, RES_CQ); in mlx4_MODIFY_CQ_wrapper()
3356 int mlx4_SW2HW_SRQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SW2HW_SRQ_wrapper() argument
3372 err = srq_res_start_move_to(dev, slave, srqn, RES_SRQ_HW, &srq); in mlx4_SW2HW_SRQ_wrapper()
3375 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in mlx4_SW2HW_SRQ_wrapper()
3378 err = check_mtt_range(dev, slave, mtt_base, srq_get_mtt_size(srqc), in mlx4_SW2HW_SRQ_wrapper()
3383 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SW2HW_SRQ_wrapper()
3389 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_SRQ_wrapper()
3390 res_end_move(dev, slave, RES_SRQ, srqn); in mlx4_SW2HW_SRQ_wrapper()
3394 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_SRQ_wrapper()
3396 res_abort_move(dev, slave, RES_SRQ, srqn); in mlx4_SW2HW_SRQ_wrapper()
3401 int mlx4_HW2SW_SRQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_HW2SW_SRQ_wrapper() argument
3411 err = srq_res_start_move_to(dev, slave, srqn, RES_SRQ_ALLOCATED, &srq); in mlx4_HW2SW_SRQ_wrapper()
3414 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_HW2SW_SRQ_wrapper()
3420 res_end_move(dev, slave, RES_SRQ, srqn); in mlx4_HW2SW_SRQ_wrapper()
3425 res_abort_move(dev, slave, RES_SRQ, srqn); in mlx4_HW2SW_SRQ_wrapper()
3430 int mlx4_QUERY_SRQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QUERY_SRQ_wrapper() argument
3440 err = get_res(dev, slave, srqn, RES_SRQ, &srq); in mlx4_QUERY_SRQ_wrapper()
3447 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_QUERY_SRQ_wrapper()
3449 put_res(dev, slave, srqn, RES_SRQ); in mlx4_QUERY_SRQ_wrapper()
3453 int mlx4_ARM_SRQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_ARM_SRQ_wrapper() argument
3463 err = get_res(dev, slave, srqn, RES_SRQ, &srq); in mlx4_ARM_SRQ_wrapper()
3472 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_ARM_SRQ_wrapper()
3474 put_res(dev, slave, srqn, RES_SRQ); in mlx4_ARM_SRQ_wrapper()
3478 int mlx4_GEN_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_GEN_QP_wrapper() argument
3488 err = get_res(dev, slave, qpn, RES_QP, &qp); in mlx4_GEN_QP_wrapper()
3496 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_GEN_QP_wrapper()
3498 put_res(dev, slave, qpn, RES_QP); in mlx4_GEN_QP_wrapper()
3502 int mlx4_INIT2INIT_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_INIT2INIT_QP_wrapper() argument
3510 update_pkey_index(dev, slave, inbox); in mlx4_INIT2INIT_QP_wrapper()
3511 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_INIT2INIT_QP_wrapper()
3514 static int adjust_qp_sched_queue(struct mlx4_dev *dev, int slave, in adjust_qp_sched_queue() argument
3521 dev, slave, (qpc->pri_path.sched_queue >> 6 & 1) + 1) - 1; in adjust_qp_sched_queue()
3536 dev, slave, (qpc->alt_path.sched_queue >> 6 & 1) in adjust_qp_sched_queue()
3547 static int roce_verify_mac(struct mlx4_dev *dev, int slave, in roce_verify_mac() argument
3560 if (mac_find_smac_ix_in_slave(dev, slave, port, smac_ix, &mac)) in roce_verify_mac()
3566 int mlx4_INIT2RTR_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_INIT2RTR_QP_wrapper() argument
3584 err = adjust_qp_sched_queue(dev, slave, qpc, inbox); in mlx4_INIT2RTR_QP_wrapper()
3587 err = verify_qp_parameters(dev, vhcr, inbox, QP_TRANS_INIT2RTR, slave); in mlx4_INIT2RTR_QP_wrapper()
3591 if (roce_verify_mac(dev, slave, qpc, inbox)) in mlx4_INIT2RTR_QP_wrapper()
3594 update_pkey_index(dev, slave, inbox); in mlx4_INIT2RTR_QP_wrapper()
3595 update_gid(dev, inbox, (u8)slave); in mlx4_INIT2RTR_QP_wrapper()
3598 err = update_vport_qp_param(dev, inbox, slave, qpn); in mlx4_INIT2RTR_QP_wrapper()
3602 err = get_res(dev, slave, qpn, RES_QP, &qp); in mlx4_INIT2RTR_QP_wrapper()
3610 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_INIT2RTR_QP_wrapper()
3625 put_res(dev, slave, qpn, RES_QP); in mlx4_INIT2RTR_QP_wrapper()
3629 int mlx4_RTR2RTS_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_RTR2RTS_QP_wrapper() argument
3638 err = adjust_qp_sched_queue(dev, slave, context, inbox); in mlx4_RTR2RTS_QP_wrapper()
3641 err = verify_qp_parameters(dev, vhcr, inbox, QP_TRANS_RTR2RTS, slave); in mlx4_RTR2RTS_QP_wrapper()
3645 update_pkey_index(dev, slave, inbox); in mlx4_RTR2RTS_QP_wrapper()
3646 update_gid(dev, inbox, (u8)slave); in mlx4_RTR2RTS_QP_wrapper()
3648 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_RTR2RTS_QP_wrapper()
3651 int mlx4_RTS2RTS_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_RTS2RTS_QP_wrapper() argument
3660 err = adjust_qp_sched_queue(dev, slave, context, inbox); in mlx4_RTS2RTS_QP_wrapper()
3663 err = verify_qp_parameters(dev, vhcr, inbox, QP_TRANS_RTS2RTS, slave); in mlx4_RTS2RTS_QP_wrapper()
3667 update_pkey_index(dev, slave, inbox); in mlx4_RTS2RTS_QP_wrapper()
3668 update_gid(dev, inbox, (u8)slave); in mlx4_RTS2RTS_QP_wrapper()
3670 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_RTS2RTS_QP_wrapper()
3674 int mlx4_SQERR2RTS_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SQERR2RTS_QP_wrapper() argument
3681 int err = adjust_qp_sched_queue(dev, slave, context, inbox); in mlx4_SQERR2RTS_QP_wrapper()
3685 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SQERR2RTS_QP_wrapper()
3688 int mlx4_SQD2SQD_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SQD2SQD_QP_wrapper() argument
3697 err = adjust_qp_sched_queue(dev, slave, context, inbox); in mlx4_SQD2SQD_QP_wrapper()
3700 err = verify_qp_parameters(dev, vhcr, inbox, QP_TRANS_SQD2SQD, slave); in mlx4_SQD2SQD_QP_wrapper()
3705 update_gid(dev, inbox, (u8)slave); in mlx4_SQD2SQD_QP_wrapper()
3706 update_pkey_index(dev, slave, inbox); in mlx4_SQD2SQD_QP_wrapper()
3707 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SQD2SQD_QP_wrapper()
3710 int mlx4_SQD2RTS_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SQD2RTS_QP_wrapper() argument
3719 err = adjust_qp_sched_queue(dev, slave, context, inbox); in mlx4_SQD2RTS_QP_wrapper()
3722 err = verify_qp_parameters(dev, vhcr, inbox, QP_TRANS_SQD2RTS, slave); in mlx4_SQD2RTS_QP_wrapper()
3727 update_gid(dev, inbox, (u8)slave); in mlx4_SQD2RTS_QP_wrapper()
3728 update_pkey_index(dev, slave, inbox); in mlx4_SQD2RTS_QP_wrapper()
3729 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SQD2RTS_QP_wrapper()
3732 int mlx4_2RST_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_2RST_QP_wrapper() argument
3742 err = qp_res_start_move_to(dev, slave, qpn, RES_QP_MAPPED, &qp, 0); in mlx4_2RST_QP_wrapper()
3745 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_2RST_QP_wrapper()
3754 res_end_move(dev, slave, RES_QP, qpn); in mlx4_2RST_QP_wrapper()
3758 res_abort_move(dev, slave, RES_QP, qpn); in mlx4_2RST_QP_wrapper()
3763 static struct res_gid *find_gid(struct mlx4_dev *dev, int slave, in find_gid() argument
3775 static int add_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp, in add_mcg_res() argument
3787 if (find_gid(dev, slave, rqp, gid)) { in add_mcg_res()
3803 static int rem_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp, in rem_mcg_res() argument
3811 res = find_gid(dev, slave, rqp, gid); in rem_mcg_res()
3825 static int qp_attach(struct mlx4_dev *dev, int slave, struct mlx4_qp *qp, in qp_attach() argument
3831 int port = mlx4_slave_convert_port(dev, slave, gid[5]); in qp_attach()
3840 int port = mlx4_slave_convert_port(dev, slave, gid[5]); in qp_attach()
3866 static int mlx4_adjust_port(struct mlx4_dev *dev, int slave, in mlx4_adjust_port() argument
3876 real_port = mlx4_slave_convert_port(dev, slave, gid[5]); in mlx4_adjust_port()
3885 int mlx4_QP_ATTACH_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QP_ATTACH_wrapper() argument
3904 err = get_res(dev, slave, qpn, RES_QP, &rqp); in mlx4_QP_ATTACH_wrapper()
3910 err = qp_attach(dev, slave, &qp, gid, block_loopback, prot, in mlx4_QP_ATTACH_wrapper()
3916 err = add_mcg_res(dev, slave, rqp, gid, prot, type, reg_id); in mlx4_QP_ATTACH_wrapper()
3920 err = mlx4_adjust_port(dev, slave, gid, prot); in mlx4_QP_ATTACH_wrapper()
3924 err = rem_mcg_res(dev, slave, rqp, gid, prot, type, &reg_id); in mlx4_QP_ATTACH_wrapper()
3933 put_res(dev, slave, qpn, RES_QP); in mlx4_QP_ATTACH_wrapper()
3939 put_res(dev, slave, qpn, RES_QP); in mlx4_QP_ATTACH_wrapper()
3947 static int validate_eth_header_mac(int slave, struct _rule_hw *eth_header, in validate_eth_header_mac() argument
3962 eth_header->eth.dst_mac, slave); in validate_eth_header_mac()
3972 static int add_eth_header(struct mlx4_dev *dev, int slave, in add_eth_header() argument
4029 int mlx4_UPDATE_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_UPDATE_QP_wrapper() argument
4052 err = get_res(dev, slave, qpn, RES_QP, &rqp); in mlx4_UPDATE_QP_wrapper()
4054 mlx4_err(dev, "Updating qpn 0x%x for slave %d rejected\n", qpn, slave); in mlx4_UPDATE_QP_wrapper()
4062 err = mac_find_smac_ix_in_slave(dev, slave, port, in mlx4_UPDATE_QP_wrapper()
4082 put_res(dev, slave, qpn, RES_QP); in mlx4_UPDATE_QP_wrapper()
4086 int mlx4_QP_FLOW_STEERING_ATTACH_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QP_FLOW_STEERING_ATTACH_wrapper() argument
4095 struct list_head *rlist = &tracker->slave_list[slave].res_list[RES_MAC]; in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4108 ctrl->port = mlx4_slave_convert_port(dev, slave, ctrl->port); in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4112 err = get_res(dev, slave, qpn, RES_QP, &rqp); in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4122 if (validate_eth_header_mac(slave, rule_header, rlist)) { in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4133 if (add_eth_header(dev, slave, inbox, rlist, header_id)) { in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4153 err = add_res_range(dev, slave, vhcr->out_param, 1, RES_FS_RULE, qpn); in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4164 put_res(dev, slave, qpn, RES_QP); in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4168 int mlx4_QP_FLOW_STEERING_DETACH_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QP_FLOW_STEERING_DETACH_wrapper() argument
4182 err = get_res(dev, slave, vhcr->in_param, RES_FS_RULE, &rrule); in mlx4_QP_FLOW_STEERING_DETACH_wrapper()
4186 put_res(dev, slave, vhcr->in_param, RES_FS_RULE); in mlx4_QP_FLOW_STEERING_DETACH_wrapper()
4187 err = get_res(dev, slave, rrule->qpn, RES_QP, &rqp); in mlx4_QP_FLOW_STEERING_DETACH_wrapper()
4191 err = rem_res_range(dev, slave, vhcr->in_param, 1, RES_FS_RULE, 0); in mlx4_QP_FLOW_STEERING_DETACH_wrapper()
4203 put_res(dev, slave, rrule->qpn, RES_QP); in mlx4_QP_FLOW_STEERING_DETACH_wrapper()
4211 int mlx4_QUERY_IF_STAT_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QUERY_IF_STAT_wrapper() argument
4220 err = get_res(dev, slave, index, RES_COUNTER, NULL); in mlx4_QUERY_IF_STAT_wrapper()
4224 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_QUERY_IF_STAT_wrapper()
4225 put_res(dev, slave, index, RES_COUNTER); in mlx4_QUERY_IF_STAT_wrapper()
4229 static void detach_qp(struct mlx4_dev *dev, int slave, struct res_qp *rqp) in detach_qp() argument
4251 static int _move_all_busy(struct mlx4_dev *dev, int slave, in _move_all_busy() argument
4257 struct list_head *rlist = &tracker->slave_list[slave].res_list[type]; in _move_all_busy()
4265 if (r->owner == slave) { in _move_all_busy()
4287 static int move_all_busy(struct mlx4_dev *dev, int slave, in move_all_busy() argument
4295 busy = _move_all_busy(dev, slave, type, 0); in move_all_busy()
4303 busy = _move_all_busy(dev, slave, type, 1); in move_all_busy()
4307 static void rem_slave_qps(struct mlx4_dev *dev, int slave) in rem_slave_qps() argument
4312 &tracker->slave_list[slave].res_list[RES_QP]; in rem_slave_qps()
4320 err = move_all_busy(dev, slave, RES_QP); in rem_slave_qps()
4323 slave); in rem_slave_qps()
4328 if (qp->com.owner == slave) { in rem_slave_qps()
4330 detach_qp(dev, slave, qp); in rem_slave_qps()
4340 if (!valid_reserved(dev, slave, qpn)) { in rem_slave_qps()
4342 mlx4_release_resource(dev, slave, in rem_slave_qps()
4349 if (!valid_reserved(dev, slave, qpn)) in rem_slave_qps()
4354 in_param = slave; in rem_slave_qps()
4362 slave, qp->local_qpn); in rem_slave_qps()
4380 static void rem_slave_srqs(struct mlx4_dev *dev, int slave) in rem_slave_srqs() argument
4385 &tracker->slave_list[slave].res_list[RES_SRQ]; in rem_slave_srqs()
4394 err = move_all_busy(dev, slave, RES_SRQ); in rem_slave_srqs()
4397 slave); in rem_slave_srqs()
4402 if (srq->com.owner == slave) { in rem_slave_srqs()
4414 mlx4_release_resource(dev, slave, in rem_slave_srqs()
4421 in_param = slave; in rem_slave_srqs()
4428 slave, srqn); in rem_slave_srqs()
4446 static void rem_slave_cqs(struct mlx4_dev *dev, int slave) in rem_slave_cqs() argument
4451 &tracker->slave_list[slave].res_list[RES_CQ]; in rem_slave_cqs()
4460 err = move_all_busy(dev, slave, RES_CQ); in rem_slave_cqs()
4463 slave); in rem_slave_cqs()
4468 if (cq->com.owner == slave && !atomic_read(&cq->ref_count)) { in rem_slave_cqs()
4480 mlx4_release_resource(dev, slave, in rem_slave_cqs()
4487 in_param = slave; in rem_slave_cqs()
4494 slave, cqn); in rem_slave_cqs()
4509 static void rem_slave_mrs(struct mlx4_dev *dev, int slave) in rem_slave_mrs() argument
4514 &tracker->slave_list[slave].res_list[RES_MPT]; in rem_slave_mrs()
4523 err = move_all_busy(dev, slave, RES_MPT); in rem_slave_mrs()
4526 slave); in rem_slave_mrs()
4531 if (mpt->com.owner == slave) { in rem_slave_mrs()
4543 mlx4_release_resource(dev, slave, in rem_slave_mrs()
4555 in_param = slave; in rem_slave_mrs()
4562 slave, mptn); in rem_slave_mrs()
4577 static void rem_slave_mtts(struct mlx4_dev *dev, int slave) in rem_slave_mtts() argument
4583 &tracker->slave_list[slave].res_list[RES_MTT]; in rem_slave_mtts()
4591 err = move_all_busy(dev, slave, RES_MTT); in rem_slave_mtts()
4594 slave); in rem_slave_mtts()
4599 if (mtt->com.owner == slave) { in rem_slave_mtts()
4612 mlx4_release_resource(dev, slave, RES_MTT, in rem_slave_mtts()
4628 static void rem_slave_fs_rule(struct mlx4_dev *dev, int slave) in rem_slave_fs_rule() argument
4634 &tracker->slave_list[slave].res_list[RES_FS_RULE]; in rem_slave_fs_rule()
4641 err = move_all_busy(dev, slave, RES_FS_RULE); in rem_slave_fs_rule()
4644 slave); in rem_slave_fs_rule()
4649 if (fs_rule->com.owner == slave) { in rem_slave_fs_rule()
4680 static void rem_slave_eqs(struct mlx4_dev *dev, int slave) in rem_slave_eqs() argument
4685 &tracker->slave_list[slave].res_list[RES_EQ]; in rem_slave_eqs()
4693 err = move_all_busy(dev, slave, RES_EQ); in rem_slave_eqs()
4696 slave); in rem_slave_eqs()
4701 if (eq->com.owner == slave) { in rem_slave_eqs()
4717 err = mlx4_cmd(dev, slave, eqn & 0x3ff, in rem_slave_eqs()
4723 slave, eqn & 0x3ff); in rem_slave_eqs()
4738 static void rem_slave_counters(struct mlx4_dev *dev, int slave) in rem_slave_counters() argument
4743 &tracker->slave_list[slave].res_list[RES_COUNTER]; in rem_slave_counters()
4749 err = move_all_busy(dev, slave, RES_COUNTER); in rem_slave_counters()
4752 slave); in rem_slave_counters()
4756 if (counter->com.owner == slave) { in rem_slave_counters()
4763 mlx4_release_resource(dev, slave, RES_COUNTER, 1, 0); in rem_slave_counters()
4769 static void rem_slave_xrcdns(struct mlx4_dev *dev, int slave) in rem_slave_xrcdns() argument
4774 &tracker->slave_list[slave].res_list[RES_XRCD]; in rem_slave_xrcdns()
4780 err = move_all_busy(dev, slave, RES_XRCD); in rem_slave_xrcdns()
4783 slave); in rem_slave_xrcdns()
4787 if (xrcd->com.owner == slave) { in rem_slave_xrcdns()
4798 void mlx4_delete_all_resources_for_slave(struct mlx4_dev *dev, int slave) in mlx4_delete_all_resources_for_slave() argument
4801 mlx4_reset_roce_gids(dev, slave); in mlx4_delete_all_resources_for_slave()
4802 mutex_lock(&priv->mfunc.master.res_tracker.slave_list[slave].mutex); in mlx4_delete_all_resources_for_slave()
4803 rem_slave_vlans(dev, slave); in mlx4_delete_all_resources_for_slave()
4804 rem_slave_macs(dev, slave); in mlx4_delete_all_resources_for_slave()
4805 rem_slave_fs_rule(dev, slave); in mlx4_delete_all_resources_for_slave()
4806 rem_slave_qps(dev, slave); in mlx4_delete_all_resources_for_slave()
4807 rem_slave_srqs(dev, slave); in mlx4_delete_all_resources_for_slave()
4808 rem_slave_cqs(dev, slave); in mlx4_delete_all_resources_for_slave()
4809 rem_slave_mrs(dev, slave); in mlx4_delete_all_resources_for_slave()
4810 rem_slave_eqs(dev, slave); in mlx4_delete_all_resources_for_slave()
4811 rem_slave_mtts(dev, slave); in mlx4_delete_all_resources_for_slave()
4812 rem_slave_counters(dev, slave); in mlx4_delete_all_resources_for_slave()
4813 rem_slave_xrcdns(dev, slave); in mlx4_delete_all_resources_for_slave()
4814 mutex_unlock(&priv->mfunc.master.res_tracker.slave_list[slave].mutex); in mlx4_delete_all_resources_for_slave()
4827 &tracker->slave_list[work->slave].res_list[RES_QP]; in mlx4_vf_immed_vlan_work_handler()
4852 work->slave); in mlx4_vf_immed_vlan_work_handler()
4880 if (qp->com.owner == work->slave) { in mlx4_vf_immed_vlan_work_handler()
4934 work->slave, port, qp->local_qpn, err); in mlx4_vf_immed_vlan_work_handler()
4945 errors, work->slave, work->port); in mlx4_vf_immed_vlan_work_handler()