Lines Matching refs:slave

298 static void rem_slave_vlans(struct mlx4_dev *dev, int slave);
299 static inline int mlx4_grant_resource(struct mlx4_dev *dev, int slave, in mlx4_grant_resource() argument
310 if (slave > dev->persist->num_vfs) in mlx4_grant_resource()
316 (dev->persist->num_vfs + 1) + slave] : in mlx4_grant_resource()
317 res_alloc->allocated[slave]; in mlx4_grant_resource()
322 guaranteed = res_alloc->guaranteed[slave]; in mlx4_grant_resource()
324 if (allocated + count > res_alloc->quota[slave]) { in mlx4_grant_resource()
326 slave, port, resource_str(res_type), count, in mlx4_grant_resource()
327 allocated, res_alloc->quota[slave]); in mlx4_grant_resource()
347 slave, port, resource_str(res_type), free, in mlx4_grant_resource()
355 (dev->persist->num_vfs + 1) + slave] += count; in mlx4_grant_resource()
359 res_alloc->allocated[slave] += count; in mlx4_grant_resource()
370 static inline void mlx4_release_resource(struct mlx4_dev *dev, int slave, in mlx4_release_resource() argument
379 if (slave > dev->persist->num_vfs) in mlx4_release_resource()
386 (dev->persist->num_vfs + 1) + slave] : in mlx4_release_resource()
387 res_alloc->allocated[slave]; in mlx4_release_resource()
388 guaranteed = res_alloc->guaranteed[slave]; in mlx4_release_resource()
402 (dev->persist->num_vfs + 1) + slave] -= count; in mlx4_release_resource()
406 res_alloc->allocated[slave] -= count; in mlx4_release_resource()
672 static void update_pkey_index(struct mlx4_dev *dev, int slave, in update_pkey_index() argument
683 new_index = priv->virt2phys_pkey[slave][port - 1][orig_index]; in update_pkey_index()
688 u8 slave) in update_gid() argument
699 mlx4_get_base_gid_ix(dev, slave, port) | 0x80; in update_gid()
701 qp_ctx->pri_path.mgid_index = slave | 0x80; in update_gid()
708 mlx4_get_base_gid_ix(dev, slave, port); in update_gid()
711 qp_ctx->pri_path.mgid_index = slave & 0x7F; in update_gid()
718 mlx4_get_base_gid_ix(dev, slave, port); in update_gid()
721 qp_ctx->alt_path.mgid_index = slave & 0x7F; in update_gid()
728 u8 slave, int port);
732 u8 slave, u32 qpn) in update_vport_qp_param() argument
742 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port]; in update_vport_qp_param()
745 err = handle_counter(dev, qpc, slave, port); in update_vport_qp_param()
826 static int get_res(struct mlx4_dev *dev, int slave, u64 res_id, in get_res() argument
845 if (r->owner != slave) { in get_res()
863 u64 res_id, int *slave) in mlx4_get_slave_from_resource_id() argument
876 *slave = r->owner; in mlx4_get_slave_from_resource_id()
884 static void put_res(struct mlx4_dev *dev, int slave, u64 res_id, in put_res() argument
896 static int counter_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd,
899 static int handle_existing_counter(struct mlx4_dev *dev, u8 slave, int port, in handle_existing_counter() argument
911 if (!r || r->owner != slave) in handle_existing_counter()
922 struct mlx4_qp_context *qpc, u8 slave, in handle_unexisting_counter() argument
934 &tracker->slave_list[slave].res_list[RES_COUNTER], in handle_unexisting_counter()
946 err = counter_alloc_res(dev, slave, RES_OP_RESERVE, 0, 0, &counter_idx, in handle_unexisting_counter()
952 __func__, slave, err); in handle_unexisting_counter()
956 __func__, slave, qpc->pri_path.counter_index); in handle_unexisting_counter()
964 u8 slave, int port) in handle_counter() argument
967 return handle_existing_counter(dev, slave, port, in handle_counter()
970 return handle_unexisting_counter(dev, qpc, slave, port); in handle_counter()
1109 static struct res_common *alloc_tr(u64 id, enum mlx4_resource type, int slave, in alloc_tr() argument
1149 ret->owner = slave; in alloc_tr()
1154 int mlx4_calc_vf_counters(struct mlx4_dev *dev, int slave, int port, in mlx4_calc_vf_counters() argument
1173 &tracker->slave_list[slave].res_list[RES_COUNTER], in mlx4_calc_vf_counters()
1201 static int add_res_range(struct mlx4_dev *dev, int slave, u64 base, int count, in add_res_range() argument
1216 res_arr[i] = alloc_tr(base + i, type, slave, extra); in add_res_range()
1236 &tracker->slave_list[slave].res_list[type]); in add_res_range()
1388 static int rem_res_range(struct mlx4_dev *dev, int slave, u64 base, int count, in rem_res_range() argument
1404 if (r->owner != slave) { in rem_res_range()
1427 static int qp_res_start_move_to(struct mlx4_dev *dev, int slave, int qpn, in qp_res_start_move_to() argument
1440 else if (r->com.owner != slave) in qp_res_start_move_to()
1492 static int mr_res_start_move_to(struct mlx4_dev *dev, int slave, int index, in mr_res_start_move_to() argument
1504 else if (r->com.owner != slave) in mr_res_start_move_to()
1545 static int eq_res_start_move_to(struct mlx4_dev *dev, int slave, int index, in eq_res_start_move_to() argument
1557 else if (r->com.owner != slave) in eq_res_start_move_to()
1593 static int cq_res_start_move_to(struct mlx4_dev *dev, int slave, int cqn, in cq_res_start_move_to() argument
1605 } else if (r->com.owner != slave) { in cq_res_start_move_to()
1633 static int srq_res_start_move_to(struct mlx4_dev *dev, int slave, int index, in srq_res_start_move_to() argument
1645 } else if (r->com.owner != slave) { in srq_res_start_move_to()
1669 static void res_abort_move(struct mlx4_dev *dev, int slave, in res_abort_move() argument
1678 if (r && (r->owner == slave)) in res_abort_move()
1683 static void res_end_move(struct mlx4_dev *dev, int slave, in res_end_move() argument
1692 if (r && (r->owner == slave)) in res_end_move()
1697 static int valid_reserved(struct mlx4_dev *dev, int slave, int qpn) in valid_reserved() argument
1700 (mlx4_is_master(dev) || mlx4_is_guest_proxy(dev, slave, qpn)); in valid_reserved()
1708 static int qp_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in qp_alloc_res() argument
1726 err = mlx4_grant_resource(dev, slave, RES_QP, count, 0); in qp_alloc_res()
1732 mlx4_release_resource(dev, slave, RES_QP, count, 0); in qp_alloc_res()
1736 err = add_res_range(dev, slave, base, count, RES_QP, 0); in qp_alloc_res()
1738 mlx4_release_resource(dev, slave, RES_QP, count, 0); in qp_alloc_res()
1746 if (valid_reserved(dev, slave, qpn)) { in qp_alloc_res()
1747 err = add_res_range(dev, slave, qpn, 1, RES_QP, 0); in qp_alloc_res()
1752 err = qp_res_start_move_to(dev, slave, qpn, RES_QP_MAPPED, in qp_alloc_res()
1760 res_abort_move(dev, slave, RES_QP, qpn); in qp_alloc_res()
1765 res_end_move(dev, slave, RES_QP, qpn); in qp_alloc_res()
1775 static int mtt_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mtt_alloc_res() argument
1787 err = mlx4_grant_resource(dev, slave, RES_MTT, 1 << order, 0); in mtt_alloc_res()
1793 mlx4_release_resource(dev, slave, RES_MTT, 1 << order, 0); in mtt_alloc_res()
1797 err = add_res_range(dev, slave, base, 1, RES_MTT, order); in mtt_alloc_res()
1799 mlx4_release_resource(dev, slave, RES_MTT, 1 << order, 0); in mtt_alloc_res()
1808 static int mpt_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mpt_alloc_res() argument
1818 err = mlx4_grant_resource(dev, slave, RES_MPT, 1, 0); in mpt_alloc_res()
1824 mlx4_release_resource(dev, slave, RES_MPT, 1, 0); in mpt_alloc_res()
1829 err = add_res_range(dev, slave, id, 1, RES_MPT, index); in mpt_alloc_res()
1831 mlx4_release_resource(dev, slave, RES_MPT, 1, 0); in mpt_alloc_res()
1840 err = mr_res_start_move_to(dev, slave, id, in mpt_alloc_res()
1847 res_abort_move(dev, slave, RES_MPT, id); in mpt_alloc_res()
1851 res_end_move(dev, slave, RES_MPT, id); in mpt_alloc_res()
1857 static int cq_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in cq_alloc_res() argument
1865 err = mlx4_grant_resource(dev, slave, RES_CQ, 1, 0); in cq_alloc_res()
1871 mlx4_release_resource(dev, slave, RES_CQ, 1, 0); in cq_alloc_res()
1875 err = add_res_range(dev, slave, cqn, 1, RES_CQ, 0); in cq_alloc_res()
1877 mlx4_release_resource(dev, slave, RES_CQ, 1, 0); in cq_alloc_res()
1892 static int srq_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in srq_alloc_res() argument
1900 err = mlx4_grant_resource(dev, slave, RES_SRQ, 1, 0); in srq_alloc_res()
1906 mlx4_release_resource(dev, slave, RES_SRQ, 1, 0); in srq_alloc_res()
1910 err = add_res_range(dev, slave, srqn, 1, RES_SRQ, 0); in srq_alloc_res()
1912 mlx4_release_resource(dev, slave, RES_SRQ, 1, 0); in srq_alloc_res()
1927 static int mac_find_smac_ix_in_slave(struct mlx4_dev *dev, int slave, int port, in mac_find_smac_ix_in_slave() argument
1933 &tracker->slave_list[slave].res_list[RES_MAC]; in mac_find_smac_ix_in_slave()
1945 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
1950 &tracker->slave_list[slave].res_list[RES_MAC]; in mac_add_to_slave()
1961 if (mlx4_grant_resource(dev, slave, RES_MAC, 1, port)) in mac_add_to_slave()
1965 mlx4_release_resource(dev, slave, RES_MAC, 1, port); in mac_add_to_slave()
1973 &tracker->slave_list[slave].res_list[RES_MAC]); in mac_add_to_slave()
1977 static void mac_del_from_slave(struct mlx4_dev *dev, int slave, u64 mac, in mac_del_from_slave() argument
1983 &tracker->slave_list[slave].res_list[RES_MAC]; in mac_del_from_slave()
1990 mlx4_release_resource(dev, slave, RES_MAC, 1, port); in mac_del_from_slave()
1998 static void rem_slave_macs(struct mlx4_dev *dev, int slave) in rem_slave_macs() argument
2003 &tracker->slave_list[slave].res_list[RES_MAC]; in rem_slave_macs()
2012 mlx4_release_resource(dev, slave, RES_MAC, 1, res->port); in rem_slave_macs()
2017 static int mac_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mac_alloc_res() argument
2030 dev, slave, port); in mac_alloc_res()
2044 err = mac_add_to_slave(dev, slave, mac, port, smac_index); in mac_alloc_res()
2051 static int vlan_add_to_slave(struct mlx4_dev *dev, int slave, u16 vlan, in vlan_add_to_slave() argument
2057 &tracker->slave_list[slave].res_list[RES_VLAN]; in vlan_add_to_slave()
2068 if (mlx4_grant_resource(dev, slave, RES_VLAN, 1, port)) in vlan_add_to_slave()
2072 mlx4_release_resource(dev, slave, RES_VLAN, 1, port); in vlan_add_to_slave()
2080 &tracker->slave_list[slave].res_list[RES_VLAN]); in vlan_add_to_slave()
2085 static void vlan_del_from_slave(struct mlx4_dev *dev, int slave, u16 vlan, in vlan_del_from_slave() argument
2091 &tracker->slave_list[slave].res_list[RES_VLAN]; in vlan_del_from_slave()
2098 mlx4_release_resource(dev, slave, RES_VLAN, in vlan_del_from_slave()
2107 static void rem_slave_vlans(struct mlx4_dev *dev, int slave) in rem_slave_vlans() argument
2112 &tracker->slave_list[slave].res_list[RES_VLAN]; in rem_slave_vlans()
2121 mlx4_release_resource(dev, slave, RES_VLAN, 1, res->port); in rem_slave_vlans()
2126 static int vlan_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in vlan_alloc_res() argument
2142 dev, slave, port); in vlan_alloc_res()
2148 slave_state[slave].old_vlan_api = true; in vlan_alloc_res()
2157 err = vlan_add_to_slave(dev, slave, vlan, port, vlan_index); in vlan_alloc_res()
2164 static int counter_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in counter_alloc_res() argument
2173 err = mlx4_grant_resource(dev, slave, RES_COUNTER, 1, 0); in counter_alloc_res()
2179 mlx4_release_resource(dev, slave, RES_COUNTER, 1, 0); in counter_alloc_res()
2183 err = add_res_range(dev, slave, index, 1, RES_COUNTER, port); in counter_alloc_res()
2186 mlx4_release_resource(dev, slave, RES_COUNTER, 1, 0); in counter_alloc_res()
2194 static int xrcdn_alloc_res(struct mlx4_dev *dev, int slave, int op, int cmd, in xrcdn_alloc_res() argument
2207 err = add_res_range(dev, slave, xrcdn, 1, RES_XRCD, 0); in xrcdn_alloc_res()
2216 int mlx4_ALLOC_RES_wrapper(struct mlx4_dev *dev, int slave, in mlx4_ALLOC_RES_wrapper() argument
2227 err = qp_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2232 err = mtt_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2237 err = mpt_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2242 err = cq_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2247 err = srq_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2252 err = mac_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2258 err = vlan_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2264 err = counter_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2269 err = xrcdn_alloc_res(dev, slave, vhcr->op_modifier, alop, in mlx4_ALLOC_RES_wrapper()
2281 static int qp_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in qp_free_res() argument
2293 err = rem_res_range(dev, slave, base, count, RES_QP, 0); in qp_free_res()
2296 mlx4_release_resource(dev, slave, RES_QP, count, 0); in qp_free_res()
2301 err = qp_res_start_move_to(dev, slave, qpn, RES_QP_RESERVED, in qp_free_res()
2309 res_end_move(dev, slave, RES_QP, qpn); in qp_free_res()
2311 if (valid_reserved(dev, slave, qpn)) in qp_free_res()
2312 err = rem_res_range(dev, slave, qpn, 1, RES_QP, 0); in qp_free_res()
2321 static int mtt_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mtt_free_res() argument
2333 err = rem_res_range(dev, slave, base, 1, RES_MTT, order); in mtt_free_res()
2335 mlx4_release_resource(dev, slave, RES_MTT, 1 << order, 0); in mtt_free_res()
2341 static int mpt_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mpt_free_res() argument
2353 err = get_res(dev, slave, id, RES_MPT, &mpt); in mpt_free_res()
2357 put_res(dev, slave, id, RES_MPT); in mpt_free_res()
2359 err = rem_res_range(dev, slave, id, 1, RES_MPT, 0); in mpt_free_res()
2362 mlx4_release_resource(dev, slave, RES_MPT, 1, 0); in mpt_free_res()
2368 err = mr_res_start_move_to(dev, slave, id, in mpt_free_res()
2374 res_end_move(dev, slave, RES_MPT, id); in mpt_free_res()
2384 static int cq_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in cq_free_res() argument
2393 err = rem_res_range(dev, slave, cqn, 1, RES_CQ, 0); in cq_free_res()
2397 mlx4_release_resource(dev, slave, RES_CQ, 1, 0); in cq_free_res()
2409 static int srq_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in srq_free_res() argument
2418 err = rem_res_range(dev, slave, srqn, 1, RES_SRQ, 0); in srq_free_res()
2422 mlx4_release_resource(dev, slave, RES_SRQ, 1, 0); in srq_free_res()
2434 static int mac_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in mac_free_res() argument
2444 dev, slave, port); in mac_free_res()
2448 mac_del_from_slave(dev, slave, in_param, port); in mac_free_res()
2460 static int vlan_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in vlan_free_res() argument
2468 dev, slave, port); in vlan_free_res()
2474 if (slave_state[slave].old_vlan_api) in vlan_free_res()
2478 vlan_del_from_slave(dev, slave, in_param, port); in vlan_free_res()
2489 static int counter_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in counter_free_res() argument
2502 err = rem_res_range(dev, slave, index, 1, RES_COUNTER, 0); in counter_free_res()
2507 mlx4_release_resource(dev, slave, RES_COUNTER, 1, 0); in counter_free_res()
2512 static int xrcdn_free_res(struct mlx4_dev *dev, int slave, int op, int cmd, in xrcdn_free_res() argument
2522 err = rem_res_range(dev, slave, xrcdn, 1, RES_XRCD, 0); in xrcdn_free_res()
2531 int mlx4_FREE_RES_wrapper(struct mlx4_dev *dev, int slave, in mlx4_FREE_RES_wrapper() argument
2542 err = qp_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2547 err = mtt_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2552 err = mpt_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2557 err = cq_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2562 err = srq_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2567 err = mac_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2573 err = vlan_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2579 err = counter_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2584 err = xrcdn_free_res(dev, slave, vhcr->op_modifier, alop, in mlx4_FREE_RES_wrapper()
2666 static int check_mtt_range(struct mlx4_dev *dev, int slave, int start, in check_mtt_range() argument
2677 int mlx4_SW2HW_MPT_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SW2HW_MPT_wrapper() argument
2694 err = mr_res_start_move_to(dev, slave, id, RES_MPT_HW, &mpt); in mlx4_SW2HW_MPT_wrapper()
2707 if (pd_slave != 0 && --pd_slave != slave) { in mlx4_SW2HW_MPT_wrapper()
2727 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in mlx4_SW2HW_MPT_wrapper()
2731 err = check_mtt_range(dev, slave, mtt_base, in mlx4_SW2HW_MPT_wrapper()
2739 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SW2HW_MPT_wrapper()
2745 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_MPT_wrapper()
2748 res_end_move(dev, slave, RES_MPT, id); in mlx4_SW2HW_MPT_wrapper()
2753 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_MPT_wrapper()
2755 res_abort_move(dev, slave, RES_MPT, id); in mlx4_SW2HW_MPT_wrapper()
2760 int mlx4_HW2SW_MPT_wrapper(struct mlx4_dev *dev, int slave, in mlx4_HW2SW_MPT_wrapper() argument
2772 err = mr_res_start_move_to(dev, slave, id, RES_MPT_MAPPED, &mpt); in mlx4_HW2SW_MPT_wrapper()
2776 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_HW2SW_MPT_wrapper()
2783 res_end_move(dev, slave, RES_MPT, id); in mlx4_HW2SW_MPT_wrapper()
2787 res_abort_move(dev, slave, RES_MPT, id); in mlx4_HW2SW_MPT_wrapper()
2792 int mlx4_QUERY_MPT_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QUERY_MPT_wrapper() argument
2804 err = get_res(dev, slave, id, RES_MPT, &mpt); in mlx4_QUERY_MPT_wrapper()
2830 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_QUERY_MPT_wrapper()
2838 put_res(dev, slave, id, RES_MPT); in mlx4_QUERY_MPT_wrapper()
2870 static int adjust_qp_sched_queue(struct mlx4_dev *dev, int slave,
2874 int mlx4_RST2INIT_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_RST2INIT_QP_wrapper() argument
2896 err = adjust_qp_sched_queue(dev, slave, qpc, inbox); in mlx4_RST2INIT_QP_wrapper()
2900 err = qp_res_start_move_to(dev, slave, qpn, RES_QP_HW, &qp, 0); in mlx4_RST2INIT_QP_wrapper()
2913 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in mlx4_RST2INIT_QP_wrapper()
2917 err = check_mtt_range(dev, slave, mtt_base, mtt_size, mtt); in mlx4_RST2INIT_QP_wrapper()
2921 err = get_res(dev, slave, rcqn, RES_CQ, &rcq); in mlx4_RST2INIT_QP_wrapper()
2926 err = get_res(dev, slave, scqn, RES_CQ, &scq); in mlx4_RST2INIT_QP_wrapper()
2933 err = get_res(dev, slave, srqn, RES_SRQ, &srq); in mlx4_RST2INIT_QP_wrapper()
2939 update_pkey_index(dev, slave, inbox); in mlx4_RST2INIT_QP_wrapper()
2940 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_RST2INIT_QP_wrapper()
2951 put_res(dev, slave, scqn, RES_CQ); in mlx4_RST2INIT_QP_wrapper()
2955 put_res(dev, slave, srqn, RES_SRQ); in mlx4_RST2INIT_QP_wrapper()
2958 put_res(dev, slave, rcqn, RES_CQ); in mlx4_RST2INIT_QP_wrapper()
2959 put_res(dev, slave, mtt_base, RES_MTT); in mlx4_RST2INIT_QP_wrapper()
2960 res_end_move(dev, slave, RES_QP, qpn); in mlx4_RST2INIT_QP_wrapper()
2966 put_res(dev, slave, srqn, RES_SRQ); in mlx4_RST2INIT_QP_wrapper()
2969 put_res(dev, slave, scqn, RES_CQ); in mlx4_RST2INIT_QP_wrapper()
2971 put_res(dev, slave, rcqn, RES_CQ); in mlx4_RST2INIT_QP_wrapper()
2973 put_res(dev, slave, mtt_base, RES_MTT); in mlx4_RST2INIT_QP_wrapper()
2975 res_abort_move(dev, slave, RES_QP, qpn); in mlx4_RST2INIT_QP_wrapper()
3012 int mlx4_SW2HW_EQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SW2HW_EQ_wrapper() argument
3020 int res_id = (slave << 10) | eqn; in mlx4_SW2HW_EQ_wrapper()
3027 err = add_res_range(dev, slave, res_id, 1, RES_EQ, 0); in mlx4_SW2HW_EQ_wrapper()
3030 err = eq_res_start_move_to(dev, slave, res_id, RES_EQ_HW, &eq); in mlx4_SW2HW_EQ_wrapper()
3034 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in mlx4_SW2HW_EQ_wrapper()
3038 err = check_mtt_range(dev, slave, mtt_base, mtt_size, mtt); in mlx4_SW2HW_EQ_wrapper()
3042 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SW2HW_EQ_wrapper()
3048 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_EQ_wrapper()
3049 res_end_move(dev, slave, RES_EQ, res_id); in mlx4_SW2HW_EQ_wrapper()
3053 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_EQ_wrapper()
3055 res_abort_move(dev, slave, RES_EQ, res_id); in mlx4_SW2HW_EQ_wrapper()
3057 rem_res_range(dev, slave, res_id, 1, RES_EQ, 0); in mlx4_SW2HW_EQ_wrapper()
3061 int mlx4_CONFIG_DEV_wrapper(struct mlx4_dev *dev, int slave, in mlx4_CONFIG_DEV_wrapper() argument
3073 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_CONFIG_DEV_wrapper()
3078 static int get_containing_mtt(struct mlx4_dev *dev, int slave, int start, in get_containing_mtt() argument
3087 list_for_each_entry(mtt, &tracker->slave_list[slave].res_list[RES_MTT], in get_containing_mtt()
3089 if (!check_mtt_range(dev, slave, start, len, mtt)) { in get_containing_mtt()
3105 enum qp_transition transition, u8 slave) in verify_qp_parameters() argument
3118 if (slave != mlx4_master_func_num(dev)) { in verify_qp_parameters()
3135 if (slave != mlx4_master_func_num(dev)) { in verify_qp_parameters()
3139 num_gids = mlx4_get_slave_num_gids(dev, slave, port); in verify_qp_parameters()
3148 num_gids = mlx4_get_slave_num_gids(dev, slave, port); in verify_qp_parameters()
3165 slave != mlx4_master_func_num(dev) && in verify_qp_parameters()
3167 !mlx4_vf_smi_enabled(dev, slave, port)) { in verify_qp_parameters()
3170 __func__, slave, port); in verify_qp_parameters()
3182 int mlx4_WRITE_MTT_wrapper(struct mlx4_dev *dev, int slave, in mlx4_WRITE_MTT_wrapper() argument
3197 err = get_containing_mtt(dev, slave, start, npages, &rmtt); in mlx4_WRITE_MTT_wrapper()
3215 put_res(dev, slave, rmtt->com.res_id, RES_MTT); in mlx4_WRITE_MTT_wrapper()
3220 int mlx4_HW2SW_EQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_HW2SW_EQ_wrapper() argument
3227 int res_id = eqn | (slave << 10); in mlx4_HW2SW_EQ_wrapper()
3231 err = eq_res_start_move_to(dev, slave, res_id, RES_EQ_RESERVED, &eq); in mlx4_HW2SW_EQ_wrapper()
3235 err = get_res(dev, slave, eq->mtt->com.res_id, RES_MTT, NULL); in mlx4_HW2SW_EQ_wrapper()
3239 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_HW2SW_EQ_wrapper()
3244 put_res(dev, slave, eq->mtt->com.res_id, RES_MTT); in mlx4_HW2SW_EQ_wrapper()
3245 res_end_move(dev, slave, RES_EQ, res_id); in mlx4_HW2SW_EQ_wrapper()
3246 rem_res_range(dev, slave, res_id, 1, RES_EQ, 0); in mlx4_HW2SW_EQ_wrapper()
3251 put_res(dev, slave, eq->mtt->com.res_id, RES_MTT); in mlx4_HW2SW_EQ_wrapper()
3253 res_abort_move(dev, slave, RES_EQ, res_id); in mlx4_HW2SW_EQ_wrapper()
3258 int mlx4_GEN_EQE(struct mlx4_dev *dev, int slave, struct mlx4_eqe *eqe) in mlx4_GEN_EQE() argument
3272 if (slave < 0 || slave > dev->persist->num_vfs || in mlx4_GEN_EQE()
3273 slave == dev->caps.function || in mlx4_GEN_EQE()
3274 !priv->mfunc.master.slave_state[slave].active) in mlx4_GEN_EQE()
3277 event_eq = &priv->mfunc.master.slave_state[slave].event_eq[eqe->type]; in mlx4_GEN_EQE()
3283 mutex_lock(&priv->mfunc.master.gen_eqe_mutex[slave]); in mlx4_GEN_EQE()
3284 res_id = (slave << 10) | event_eq->eqn; in mlx4_GEN_EQE()
3285 err = get_res(dev, slave, res_id, RES_EQ, &req); in mlx4_GEN_EQE()
3307 in_modifier = (slave & 0xff) | ((event_eq->eqn & 0x3ff) << 16); in mlx4_GEN_EQE()
3313 put_res(dev, slave, res_id, RES_EQ); in mlx4_GEN_EQE()
3314 mutex_unlock(&priv->mfunc.master.gen_eqe_mutex[slave]); in mlx4_GEN_EQE()
3319 put_res(dev, slave, res_id, RES_EQ); in mlx4_GEN_EQE()
3322 mutex_unlock(&priv->mfunc.master.gen_eqe_mutex[slave]); in mlx4_GEN_EQE()
3326 int mlx4_QUERY_EQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QUERY_EQ_wrapper() argument
3333 int res_id = eqn | (slave << 10); in mlx4_QUERY_EQ_wrapper()
3337 err = get_res(dev, slave, res_id, RES_EQ, &eq); in mlx4_QUERY_EQ_wrapper()
3346 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_QUERY_EQ_wrapper()
3349 put_res(dev, slave, res_id, RES_EQ); in mlx4_QUERY_EQ_wrapper()
3353 int mlx4_SW2HW_CQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SW2HW_CQ_wrapper() argument
3366 err = cq_res_start_move_to(dev, slave, cqn, RES_CQ_HW, &cq); in mlx4_SW2HW_CQ_wrapper()
3369 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in mlx4_SW2HW_CQ_wrapper()
3372 err = check_mtt_range(dev, slave, mtt_base, cq_get_mtt_size(cqc), mtt); in mlx4_SW2HW_CQ_wrapper()
3375 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SW2HW_CQ_wrapper()
3380 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_CQ_wrapper()
3381 res_end_move(dev, slave, RES_CQ, cqn); in mlx4_SW2HW_CQ_wrapper()
3385 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_CQ_wrapper()
3387 res_abort_move(dev, slave, RES_CQ, cqn); in mlx4_SW2HW_CQ_wrapper()
3391 int mlx4_HW2SW_CQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_HW2SW_CQ_wrapper() argument
3401 err = cq_res_start_move_to(dev, slave, cqn, RES_CQ_ALLOCATED, &cq); in mlx4_HW2SW_CQ_wrapper()
3404 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_HW2SW_CQ_wrapper()
3408 res_end_move(dev, slave, RES_CQ, cqn); in mlx4_HW2SW_CQ_wrapper()
3412 res_abort_move(dev, slave, RES_CQ, cqn); in mlx4_HW2SW_CQ_wrapper()
3416 int mlx4_QUERY_CQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QUERY_CQ_wrapper() argument
3426 err = get_res(dev, slave, cqn, RES_CQ, &cq); in mlx4_QUERY_CQ_wrapper()
3433 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_QUERY_CQ_wrapper()
3435 put_res(dev, slave, cqn, RES_CQ); in mlx4_QUERY_CQ_wrapper()
3440 static int handle_resize(struct mlx4_dev *dev, int slave, in handle_resize() argument
3453 err = get_res(dev, slave, cq->mtt->com.res_id, RES_MTT, &orig_mtt); in handle_resize()
3462 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in handle_resize()
3466 err = check_mtt_range(dev, slave, mtt_base, cq_get_mtt_size(cqc), mtt); in handle_resize()
3469 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in handle_resize()
3473 put_res(dev, slave, orig_mtt->com.res_id, RES_MTT); in handle_resize()
3476 put_res(dev, slave, mtt->com.res_id, RES_MTT); in handle_resize()
3480 put_res(dev, slave, mtt->com.res_id, RES_MTT); in handle_resize()
3482 put_res(dev, slave, orig_mtt->com.res_id, RES_MTT); in handle_resize()
3488 int mlx4_MODIFY_CQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_MODIFY_CQ_wrapper() argument
3498 err = get_res(dev, slave, cqn, RES_CQ, &cq); in mlx4_MODIFY_CQ_wrapper()
3506 err = handle_resize(dev, slave, vhcr, inbox, outbox, cmd, cq); in mlx4_MODIFY_CQ_wrapper()
3510 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_MODIFY_CQ_wrapper()
3512 put_res(dev, slave, cqn, RES_CQ); in mlx4_MODIFY_CQ_wrapper()
3529 int mlx4_SW2HW_SRQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SW2HW_SRQ_wrapper() argument
3545 err = srq_res_start_move_to(dev, slave, srqn, RES_SRQ_HW, &srq); in mlx4_SW2HW_SRQ_wrapper()
3548 err = get_res(dev, slave, mtt_base, RES_MTT, &mtt); in mlx4_SW2HW_SRQ_wrapper()
3551 err = check_mtt_range(dev, slave, mtt_base, srq_get_mtt_size(srqc), in mlx4_SW2HW_SRQ_wrapper()
3556 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SW2HW_SRQ_wrapper()
3562 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_SRQ_wrapper()
3563 res_end_move(dev, slave, RES_SRQ, srqn); in mlx4_SW2HW_SRQ_wrapper()
3567 put_res(dev, slave, mtt->com.res_id, RES_MTT); in mlx4_SW2HW_SRQ_wrapper()
3569 res_abort_move(dev, slave, RES_SRQ, srqn); in mlx4_SW2HW_SRQ_wrapper()
3574 int mlx4_HW2SW_SRQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_HW2SW_SRQ_wrapper() argument
3584 err = srq_res_start_move_to(dev, slave, srqn, RES_SRQ_ALLOCATED, &srq); in mlx4_HW2SW_SRQ_wrapper()
3587 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_HW2SW_SRQ_wrapper()
3593 res_end_move(dev, slave, RES_SRQ, srqn); in mlx4_HW2SW_SRQ_wrapper()
3598 res_abort_move(dev, slave, RES_SRQ, srqn); in mlx4_HW2SW_SRQ_wrapper()
3603 int mlx4_QUERY_SRQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QUERY_SRQ_wrapper() argument
3613 err = get_res(dev, slave, srqn, RES_SRQ, &srq); in mlx4_QUERY_SRQ_wrapper()
3620 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_QUERY_SRQ_wrapper()
3622 put_res(dev, slave, srqn, RES_SRQ); in mlx4_QUERY_SRQ_wrapper()
3626 int mlx4_ARM_SRQ_wrapper(struct mlx4_dev *dev, int slave, in mlx4_ARM_SRQ_wrapper() argument
3636 err = get_res(dev, slave, srqn, RES_SRQ, &srq); in mlx4_ARM_SRQ_wrapper()
3645 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_ARM_SRQ_wrapper()
3647 put_res(dev, slave, srqn, RES_SRQ); in mlx4_ARM_SRQ_wrapper()
3651 int mlx4_GEN_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_GEN_QP_wrapper() argument
3661 err = get_res(dev, slave, qpn, RES_QP, &qp); in mlx4_GEN_QP_wrapper()
3669 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_GEN_QP_wrapper()
3671 put_res(dev, slave, qpn, RES_QP); in mlx4_GEN_QP_wrapper()
3675 int mlx4_INIT2INIT_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_INIT2INIT_QP_wrapper() argument
3683 update_pkey_index(dev, slave, inbox); in mlx4_INIT2INIT_QP_wrapper()
3684 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_INIT2INIT_QP_wrapper()
3687 static int adjust_qp_sched_queue(struct mlx4_dev *dev, int slave, in adjust_qp_sched_queue() argument
3694 dev, slave, (qpc->pri_path.sched_queue >> 6 & 1) + 1) - 1; in adjust_qp_sched_queue()
3709 dev, slave, (qpc->alt_path.sched_queue >> 6 & 1) in adjust_qp_sched_queue()
3720 static int roce_verify_mac(struct mlx4_dev *dev, int slave, in roce_verify_mac() argument
3733 if (mac_find_smac_ix_in_slave(dev, slave, port, smac_ix, &mac)) in roce_verify_mac()
3739 int mlx4_INIT2RTR_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_INIT2RTR_QP_wrapper() argument
3757 err = adjust_qp_sched_queue(dev, slave, qpc, inbox); in mlx4_INIT2RTR_QP_wrapper()
3760 err = verify_qp_parameters(dev, vhcr, inbox, QP_TRANS_INIT2RTR, slave); in mlx4_INIT2RTR_QP_wrapper()
3764 if (roce_verify_mac(dev, slave, qpc, inbox)) in mlx4_INIT2RTR_QP_wrapper()
3767 update_pkey_index(dev, slave, inbox); in mlx4_INIT2RTR_QP_wrapper()
3768 update_gid(dev, inbox, (u8)slave); in mlx4_INIT2RTR_QP_wrapper()
3772 err = get_res(dev, slave, qpn, RES_QP, &qp); in mlx4_INIT2RTR_QP_wrapper()
3780 err = update_vport_qp_param(dev, inbox, slave, qpn); in mlx4_INIT2RTR_QP_wrapper()
3784 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_INIT2RTR_QP_wrapper()
3799 put_res(dev, slave, qpn, RES_QP); in mlx4_INIT2RTR_QP_wrapper()
3803 int mlx4_RTR2RTS_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_RTR2RTS_QP_wrapper() argument
3812 err = adjust_qp_sched_queue(dev, slave, context, inbox); in mlx4_RTR2RTS_QP_wrapper()
3815 err = verify_qp_parameters(dev, vhcr, inbox, QP_TRANS_RTR2RTS, slave); in mlx4_RTR2RTS_QP_wrapper()
3819 update_pkey_index(dev, slave, inbox); in mlx4_RTR2RTS_QP_wrapper()
3820 update_gid(dev, inbox, (u8)slave); in mlx4_RTR2RTS_QP_wrapper()
3822 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_RTR2RTS_QP_wrapper()
3825 int mlx4_RTS2RTS_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_RTS2RTS_QP_wrapper() argument
3834 err = adjust_qp_sched_queue(dev, slave, context, inbox); in mlx4_RTS2RTS_QP_wrapper()
3837 err = verify_qp_parameters(dev, vhcr, inbox, QP_TRANS_RTS2RTS, slave); in mlx4_RTS2RTS_QP_wrapper()
3841 update_pkey_index(dev, slave, inbox); in mlx4_RTS2RTS_QP_wrapper()
3842 update_gid(dev, inbox, (u8)slave); in mlx4_RTS2RTS_QP_wrapper()
3844 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_RTS2RTS_QP_wrapper()
3848 int mlx4_SQERR2RTS_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SQERR2RTS_QP_wrapper() argument
3855 int err = adjust_qp_sched_queue(dev, slave, context, inbox); in mlx4_SQERR2RTS_QP_wrapper()
3859 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SQERR2RTS_QP_wrapper()
3862 int mlx4_SQD2SQD_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SQD2SQD_QP_wrapper() argument
3871 err = adjust_qp_sched_queue(dev, slave, context, inbox); in mlx4_SQD2SQD_QP_wrapper()
3874 err = verify_qp_parameters(dev, vhcr, inbox, QP_TRANS_SQD2SQD, slave); in mlx4_SQD2SQD_QP_wrapper()
3879 update_gid(dev, inbox, (u8)slave); in mlx4_SQD2SQD_QP_wrapper()
3880 update_pkey_index(dev, slave, inbox); in mlx4_SQD2SQD_QP_wrapper()
3881 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SQD2SQD_QP_wrapper()
3884 int mlx4_SQD2RTS_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_SQD2RTS_QP_wrapper() argument
3893 err = adjust_qp_sched_queue(dev, slave, context, inbox); in mlx4_SQD2RTS_QP_wrapper()
3896 err = verify_qp_parameters(dev, vhcr, inbox, QP_TRANS_SQD2RTS, slave); in mlx4_SQD2RTS_QP_wrapper()
3901 update_gid(dev, inbox, (u8)slave); in mlx4_SQD2RTS_QP_wrapper()
3902 update_pkey_index(dev, slave, inbox); in mlx4_SQD2RTS_QP_wrapper()
3903 return mlx4_GEN_QP_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_SQD2RTS_QP_wrapper()
3906 int mlx4_2RST_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_2RST_QP_wrapper() argument
3916 err = qp_res_start_move_to(dev, slave, qpn, RES_QP_MAPPED, &qp, 0); in mlx4_2RST_QP_wrapper()
3919 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_2RST_QP_wrapper()
3928 res_end_move(dev, slave, RES_QP, qpn); in mlx4_2RST_QP_wrapper()
3932 res_abort_move(dev, slave, RES_QP, qpn); in mlx4_2RST_QP_wrapper()
3937 static struct res_gid *find_gid(struct mlx4_dev *dev, int slave, in find_gid() argument
3949 static int add_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp, in add_mcg_res() argument
3961 if (find_gid(dev, slave, rqp, gid)) { in add_mcg_res()
3977 static int rem_mcg_res(struct mlx4_dev *dev, int slave, struct res_qp *rqp, in rem_mcg_res() argument
3985 res = find_gid(dev, slave, rqp, gid); in rem_mcg_res()
3999 static int qp_attach(struct mlx4_dev *dev, int slave, struct mlx4_qp *qp, in qp_attach() argument
4005 int port = mlx4_slave_convert_port(dev, slave, gid[5]); in qp_attach()
4014 int port = mlx4_slave_convert_port(dev, slave, gid[5]); in qp_attach()
4040 static int mlx4_adjust_port(struct mlx4_dev *dev, int slave, in mlx4_adjust_port() argument
4050 real_port = mlx4_slave_convert_port(dev, slave, gid[5]); in mlx4_adjust_port()
4059 int mlx4_QP_ATTACH_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QP_ATTACH_wrapper() argument
4078 err = get_res(dev, slave, qpn, RES_QP, &rqp); in mlx4_QP_ATTACH_wrapper()
4084 err = qp_attach(dev, slave, &qp, gid, block_loopback, prot, in mlx4_QP_ATTACH_wrapper()
4090 err = add_mcg_res(dev, slave, rqp, gid, prot, type, reg_id); in mlx4_QP_ATTACH_wrapper()
4094 err = mlx4_adjust_port(dev, slave, gid, prot); in mlx4_QP_ATTACH_wrapper()
4098 err = rem_mcg_res(dev, slave, rqp, gid, prot, type, &reg_id); in mlx4_QP_ATTACH_wrapper()
4107 put_res(dev, slave, qpn, RES_QP); in mlx4_QP_ATTACH_wrapper()
4113 put_res(dev, slave, qpn, RES_QP); in mlx4_QP_ATTACH_wrapper()
4121 static int validate_eth_header_mac(int slave, struct _rule_hw *eth_header, in validate_eth_header_mac() argument
4136 eth_header->eth.dst_mac, slave); in validate_eth_header_mac()
4162 static int add_eth_header(struct mlx4_dev *dev, int slave, in add_eth_header() argument
4221 int mlx4_UPDATE_QP_wrapper(struct mlx4_dev *dev, int slave, in mlx4_UPDATE_QP_wrapper() argument
4249 slave); in mlx4_UPDATE_QP_wrapper()
4254 err = get_res(dev, slave, qpn, RES_QP, &rqp); in mlx4_UPDATE_QP_wrapper()
4256 mlx4_err(dev, "Updating qpn 0x%x for slave %d rejected\n", qpn, slave); in mlx4_UPDATE_QP_wrapper()
4264 err = mac_find_smac_ix_in_slave(dev, slave, port, in mlx4_UPDATE_QP_wrapper()
4284 put_res(dev, slave, qpn, RES_QP); in mlx4_UPDATE_QP_wrapper()
4288 int mlx4_QP_FLOW_STEERING_ATTACH_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QP_FLOW_STEERING_ATTACH_wrapper() argument
4297 struct list_head *rlist = &tracker->slave_list[slave].res_list[RES_MAC]; in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4310 err = mlx4_slave_convert_port(dev, slave, ctrl->port); in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4315 err = get_res(dev, slave, qpn, RES_QP, &rqp); in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4326 if (slave == dev->caps.function) in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4331 if (validate_eth_header_mac(slave, rule_header, rlist)) { in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4342 if (add_eth_header(dev, slave, inbox, rlist, header_id)) { in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4363 err = add_res_range(dev, slave, vhcr->out_param, 1, RES_FS_RULE, qpn); in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4374 put_res(dev, slave, qpn, RES_QP); in mlx4_QP_FLOW_STEERING_ATTACH_wrapper()
4378 int mlx4_QP_FLOW_STEERING_DETACH_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QP_FLOW_STEERING_DETACH_wrapper() argument
4392 err = get_res(dev, slave, vhcr->in_param, RES_FS_RULE, &rrule); in mlx4_QP_FLOW_STEERING_DETACH_wrapper()
4396 put_res(dev, slave, vhcr->in_param, RES_FS_RULE); in mlx4_QP_FLOW_STEERING_DETACH_wrapper()
4397 err = get_res(dev, slave, rrule->qpn, RES_QP, &rqp); in mlx4_QP_FLOW_STEERING_DETACH_wrapper()
4401 err = rem_res_range(dev, slave, vhcr->in_param, 1, RES_FS_RULE, 0); in mlx4_QP_FLOW_STEERING_DETACH_wrapper()
4413 put_res(dev, slave, rrule->qpn, RES_QP); in mlx4_QP_FLOW_STEERING_DETACH_wrapper()
4421 int mlx4_QUERY_IF_STAT_wrapper(struct mlx4_dev *dev, int slave, in mlx4_QUERY_IF_STAT_wrapper() argument
4430 err = get_res(dev, slave, index, RES_COUNTER, NULL); in mlx4_QUERY_IF_STAT_wrapper()
4434 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); in mlx4_QUERY_IF_STAT_wrapper()
4435 put_res(dev, slave, index, RES_COUNTER); in mlx4_QUERY_IF_STAT_wrapper()
4439 static void detach_qp(struct mlx4_dev *dev, int slave, struct res_qp *rqp) in detach_qp() argument
4461 static int _move_all_busy(struct mlx4_dev *dev, int slave, in _move_all_busy() argument
4467 struct list_head *rlist = &tracker->slave_list[slave].res_list[type]; in _move_all_busy()
4475 if (r->owner == slave) { in _move_all_busy()
4497 static int move_all_busy(struct mlx4_dev *dev, int slave, in move_all_busy() argument
4505 busy = _move_all_busy(dev, slave, type, 0); in move_all_busy()
4513 busy = _move_all_busy(dev, slave, type, 1); in move_all_busy()
4517 static void rem_slave_qps(struct mlx4_dev *dev, int slave) in rem_slave_qps() argument
4522 &tracker->slave_list[slave].res_list[RES_QP]; in rem_slave_qps()
4530 err = move_all_busy(dev, slave, RES_QP); in rem_slave_qps()
4533 slave); in rem_slave_qps()
4538 if (qp->com.owner == slave) { in rem_slave_qps()
4540 detach_qp(dev, slave, qp); in rem_slave_qps()
4550 if (!valid_reserved(dev, slave, qpn)) { in rem_slave_qps()
4552 mlx4_release_resource(dev, slave, in rem_slave_qps()
4559 if (!valid_reserved(dev, slave, qpn)) in rem_slave_qps()
4564 in_param = slave; in rem_slave_qps()
4572 slave, qp->local_qpn); in rem_slave_qps()
4590 static void rem_slave_srqs(struct mlx4_dev *dev, int slave) in rem_slave_srqs() argument
4595 &tracker->slave_list[slave].res_list[RES_SRQ]; in rem_slave_srqs()
4604 err = move_all_busy(dev, slave, RES_SRQ); in rem_slave_srqs()
4607 slave); in rem_slave_srqs()
4612 if (srq->com.owner == slave) { in rem_slave_srqs()
4624 mlx4_release_resource(dev, slave, in rem_slave_srqs()
4631 in_param = slave; in rem_slave_srqs()
4638 slave, srqn); in rem_slave_srqs()
4656 static void rem_slave_cqs(struct mlx4_dev *dev, int slave) in rem_slave_cqs() argument
4661 &tracker->slave_list[slave].res_list[RES_CQ]; in rem_slave_cqs()
4670 err = move_all_busy(dev, slave, RES_CQ); in rem_slave_cqs()
4673 slave); in rem_slave_cqs()
4678 if (cq->com.owner == slave && !atomic_read(&cq->ref_count)) { in rem_slave_cqs()
4690 mlx4_release_resource(dev, slave, in rem_slave_cqs()
4697 in_param = slave; in rem_slave_cqs()
4704 slave, cqn); in rem_slave_cqs()
4719 static void rem_slave_mrs(struct mlx4_dev *dev, int slave) in rem_slave_mrs() argument
4724 &tracker->slave_list[slave].res_list[RES_MPT]; in rem_slave_mrs()
4733 err = move_all_busy(dev, slave, RES_MPT); in rem_slave_mrs()
4736 slave); in rem_slave_mrs()
4741 if (mpt->com.owner == slave) { in rem_slave_mrs()
4753 mlx4_release_resource(dev, slave, in rem_slave_mrs()
4765 in_param = slave; in rem_slave_mrs()
4772 slave, mptn); in rem_slave_mrs()
4787 static void rem_slave_mtts(struct mlx4_dev *dev, int slave) in rem_slave_mtts() argument
4793 &tracker->slave_list[slave].res_list[RES_MTT]; in rem_slave_mtts()
4801 err = move_all_busy(dev, slave, RES_MTT); in rem_slave_mtts()
4804 slave); in rem_slave_mtts()
4809 if (mtt->com.owner == slave) { in rem_slave_mtts()
4822 mlx4_release_resource(dev, slave, RES_MTT, in rem_slave_mtts()
4838 static void rem_slave_fs_rule(struct mlx4_dev *dev, int slave) in rem_slave_fs_rule() argument
4844 &tracker->slave_list[slave].res_list[RES_FS_RULE]; in rem_slave_fs_rule()
4851 err = move_all_busy(dev, slave, RES_FS_RULE); in rem_slave_fs_rule()
4854 slave); in rem_slave_fs_rule()
4859 if (fs_rule->com.owner == slave) { in rem_slave_fs_rule()
4890 static void rem_slave_eqs(struct mlx4_dev *dev, int slave) in rem_slave_eqs() argument
4895 &tracker->slave_list[slave].res_list[RES_EQ]; in rem_slave_eqs()
4903 err = move_all_busy(dev, slave, RES_EQ); in rem_slave_eqs()
4906 slave); in rem_slave_eqs()
4911 if (eq->com.owner == slave) { in rem_slave_eqs()
4927 err = mlx4_cmd(dev, slave, eqn & 0x3ff, in rem_slave_eqs()
4933 slave, eqn & 0x3ff); in rem_slave_eqs()
4948 static void rem_slave_counters(struct mlx4_dev *dev, int slave) in rem_slave_counters() argument
4953 &tracker->slave_list[slave].res_list[RES_COUNTER]; in rem_slave_counters()
4960 err = move_all_busy(dev, slave, RES_COUNTER); in rem_slave_counters()
4963 slave); in rem_slave_counters()
4975 if (counter->com.owner == slave) { in rem_slave_counters()
4987 mlx4_release_resource(dev, slave, RES_COUNTER, 1, 0); in rem_slave_counters()
4994 static void rem_slave_xrcdns(struct mlx4_dev *dev, int slave) in rem_slave_xrcdns() argument
4999 &tracker->slave_list[slave].res_list[RES_XRCD]; in rem_slave_xrcdns()
5005 err = move_all_busy(dev, slave, RES_XRCD); in rem_slave_xrcdns()
5008 slave); in rem_slave_xrcdns()
5012 if (xrcd->com.owner == slave) { in rem_slave_xrcdns()
5023 void mlx4_delete_all_resources_for_slave(struct mlx4_dev *dev, int slave) in mlx4_delete_all_resources_for_slave() argument
5026 mlx4_reset_roce_gids(dev, slave); in mlx4_delete_all_resources_for_slave()
5027 mutex_lock(&priv->mfunc.master.res_tracker.slave_list[slave].mutex); in mlx4_delete_all_resources_for_slave()
5028 rem_slave_vlans(dev, slave); in mlx4_delete_all_resources_for_slave()
5029 rem_slave_macs(dev, slave); in mlx4_delete_all_resources_for_slave()
5030 rem_slave_fs_rule(dev, slave); in mlx4_delete_all_resources_for_slave()
5031 rem_slave_qps(dev, slave); in mlx4_delete_all_resources_for_slave()
5032 rem_slave_srqs(dev, slave); in mlx4_delete_all_resources_for_slave()
5033 rem_slave_cqs(dev, slave); in mlx4_delete_all_resources_for_slave()
5034 rem_slave_mrs(dev, slave); in mlx4_delete_all_resources_for_slave()
5035 rem_slave_eqs(dev, slave); in mlx4_delete_all_resources_for_slave()
5036 rem_slave_mtts(dev, slave); in mlx4_delete_all_resources_for_slave()
5037 rem_slave_counters(dev, slave); in mlx4_delete_all_resources_for_slave()
5038 rem_slave_xrcdns(dev, slave); in mlx4_delete_all_resources_for_slave()
5039 mutex_unlock(&priv->mfunc.master.res_tracker.slave_list[slave].mutex); in mlx4_delete_all_resources_for_slave()
5052 &tracker->slave_list[work->slave].res_list[RES_QP]; in mlx4_vf_immed_vlan_work_handler()
5077 work->slave); in mlx4_vf_immed_vlan_work_handler()
5105 if (qp->com.owner == work->slave) { in mlx4_vf_immed_vlan_work_handler()
5159 work->slave, port, qp->local_qpn, err); in mlx4_vf_immed_vlan_work_handler()
5170 errors, work->slave, work->port); in mlx4_vf_immed_vlan_work_handler()