Lines Matching refs:ah_attr

57 			       struct rdma_ah_attr *ah_attr);
388 struct rdma_ah_attr *ah_attr) in rdma_check_ah_attr() argument
390 if (!rdma_is_port_valid(device, ah_attr->port_num)) in rdma_check_ah_attr()
393 if ((rdma_is_grh_required(device, ah_attr->port_num) || in rdma_check_ah_attr()
394 ah_attr->type == RDMA_AH_ATTR_TYPE_ROCE) && in rdma_check_ah_attr()
395 !(ah_attr->ah_flags & IB_AH_GRH)) in rdma_check_ah_attr()
398 if (ah_attr->grh.sgid_attr) { in rdma_check_ah_attr()
403 if (ah_attr->grh.sgid_attr->index != ah_attr->grh.sgid_index || in rdma_check_ah_attr()
404 ah_attr->grh.sgid_attr->port_num != ah_attr->port_num) in rdma_check_ah_attr()
415 struct rdma_ah_attr *ah_attr, in rdma_fill_sgid_attr() argument
422 *old_sgid_attr = ah_attr->grh.sgid_attr; in rdma_fill_sgid_attr()
424 ret = rdma_check_ah_attr(device, ah_attr); in rdma_fill_sgid_attr()
428 if (!(ah_attr->ah_flags & IB_AH_GRH)) in rdma_fill_sgid_attr()
431 grh = rdma_ah_retrieve_grh(ah_attr); in rdma_fill_sgid_attr()
436 rdma_get_gid_attr(device, ah_attr->port_num, grh->sgid_index); in rdma_fill_sgid_attr()
445 static void rdma_unfill_sgid_attr(struct rdma_ah_attr *ah_attr, in rdma_unfill_sgid_attr() argument
452 if (ah_attr->grh.sgid_attr == old_sgid_attr) in rdma_unfill_sgid_attr()
460 rdma_destroy_ah_attr(ah_attr); in rdma_unfill_sgid_attr()
464 rdma_update_sgid_attr(struct rdma_ah_attr *ah_attr, in rdma_update_sgid_attr() argument
469 if (ah_attr->ah_flags & IB_AH_GRH) { in rdma_update_sgid_attr()
470 rdma_hold_gid_attr(ah_attr->grh.sgid_attr); in rdma_update_sgid_attr()
471 return ah_attr->grh.sgid_attr; in rdma_update_sgid_attr()
477 struct rdma_ah_attr *ah_attr, in _rdma_create_ah() argument
485 ah = pd->device->create_ah(pd, ah_attr, udata); in _rdma_create_ah()
491 ah->type = ah_attr->type; in _rdma_create_ah()
492 ah->sgid_attr = rdma_update_sgid_attr(ah_attr, NULL); in _rdma_create_ah()
510 struct ib_ah *rdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr) in rdma_create_ah() argument
516 ret = rdma_fill_sgid_attr(pd->device, ah_attr, &old_sgid_attr); in rdma_create_ah()
520 ah = _rdma_create_ah(pd, ah_attr, NULL); in rdma_create_ah()
522 rdma_unfill_sgid_attr(ah_attr, old_sgid_attr); in rdma_create_ah()
541 struct rdma_ah_attr *ah_attr, in rdma_create_user_ah() argument
548 err = rdma_fill_sgid_attr(pd->device, ah_attr, &old_sgid_attr); in rdma_create_user_ah()
552 if (ah_attr->type == RDMA_AH_ATTR_TYPE_ROCE) { in rdma_create_user_ah()
553 err = ib_resolve_eth_dmac(pd->device, ah_attr); in rdma_create_user_ah()
560 ah = _rdma_create_ah(pd, ah_attr, udata); in rdma_create_user_ah()
563 rdma_unfill_sgid_attr(ah_attr, old_sgid_attr); in rdma_create_user_ah()
694 struct rdma_ah_attr *ah_attr) in ib_resolve_unicast_gid_dmac() argument
696 struct ib_global_route *grh = rdma_ah_retrieve_grh(ah_attr); in ib_resolve_unicast_gid_dmac()
707 ah_attr->roce.dmac); in ib_resolve_unicast_gid_dmac()
712 ah_attr->roce.dmac, in ib_resolve_unicast_gid_dmac()
733 struct rdma_ah_attr *ah_attr) in ib_init_ah_attr_from_wc() argument
746 memset(ah_attr, 0, sizeof *ah_attr); in ib_init_ah_attr_from_wc()
747 ah_attr->type = rdma_ah_find_type(device, port_num); in ib_init_ah_attr_from_wc()
760 rdma_ah_set_sl(ah_attr, wc->sl); in ib_init_ah_attr_from_wc()
761 rdma_ah_set_port_num(ah_attr, port_num); in ib_init_ah_attr_from_wc()
777 rdma_move_grh_sgid_attr(ah_attr, in ib_init_ah_attr_from_wc()
784 ret = ib_resolve_unicast_gid_dmac(device, ah_attr); in ib_init_ah_attr_from_wc()
786 rdma_destroy_ah_attr(ah_attr); in ib_init_ah_attr_from_wc()
790 rdma_ah_set_dlid(ah_attr, wc->slid); in ib_init_ah_attr_from_wc()
791 rdma_ah_set_path_bits(ah_attr, wc->dlid_path_bits); in ib_init_ah_attr_from_wc()
806 rdma_move_grh_sgid_attr(ah_attr, in ib_init_ah_attr_from_wc()
852 void rdma_destroy_ah_attr(struct rdma_ah_attr *ah_attr) in rdma_destroy_ah_attr() argument
854 if (ah_attr->grh.sgid_attr) { in rdma_destroy_ah_attr()
855 rdma_put_gid_attr(ah_attr->grh.sgid_attr); in rdma_destroy_ah_attr()
856 ah_attr->grh.sgid_attr = NULL; in rdma_destroy_ah_attr()
864 struct rdma_ah_attr ah_attr; in ib_create_ah_from_wc() local
868 ret = ib_init_ah_attr_from_wc(pd->device, port_num, wc, grh, &ah_attr); in ib_create_ah_from_wc()
872 ah = rdma_create_ah(pd, &ah_attr); in ib_create_ah_from_wc()
874 rdma_destroy_ah_attr(&ah_attr); in ib_create_ah_from_wc()
879 int rdma_modify_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr) in rdma_modify_ah() argument
884 if (ah->type != ah_attr->type) in rdma_modify_ah()
887 ret = rdma_fill_sgid_attr(ah->device, ah_attr, &old_sgid_attr); in rdma_modify_ah()
892 ah->device->modify_ah(ah, ah_attr) : in rdma_modify_ah()
895 ah->sgid_attr = rdma_update_sgid_attr(ah_attr, ah->sgid_attr); in rdma_modify_ah()
896 rdma_unfill_sgid_attr(ah_attr, old_sgid_attr); in rdma_modify_ah()
901 int rdma_query_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr) in rdma_query_ah() argument
903 ah_attr->grh.sgid_attr = NULL; in rdma_query_ah()
906 ah->device->query_ah(ah, ah_attr) : in rdma_query_ah()
1548 struct rdma_ah_attr *ah_attr) in ib_resolve_eth_dmac() argument
1552 if (rdma_is_multicast_addr((struct in6_addr *)ah_attr->grh.dgid.raw)) { in ib_resolve_eth_dmac()
1553 if (ipv6_addr_v4mapped((struct in6_addr *)ah_attr->grh.dgid.raw)) { in ib_resolve_eth_dmac()
1556 memcpy(&addr, ah_attr->grh.dgid.raw + 12, 4); in ib_resolve_eth_dmac()
1557 ip_eth_mc_map(addr, (char *)ah_attr->roce.dmac); in ib_resolve_eth_dmac()
1559 ipv6_eth_mc_map((struct in6_addr *)ah_attr->grh.dgid.raw, in ib_resolve_eth_dmac()
1560 (char *)ah_attr->roce.dmac); in ib_resolve_eth_dmac()
1563 ret = ib_resolve_unicast_gid_dmac(device, ah_attr); in ib_resolve_eth_dmac()
1588 ret = rdma_fill_sgid_attr(qp->device, &attr->ah_attr, in _ib_modify_qp()
1623 attr->ah_attr.type == RDMA_AH_ATTR_TYPE_ROCE && in _ib_modify_qp()
1625 ret = ib_resolve_eth_dmac(qp->device, &attr->ah_attr); in _ib_modify_qp()
1652 rdma_update_sgid_attr(&attr->ah_attr, qp->av_sgid_attr); in _ib_modify_qp()
1662 rdma_unfill_sgid_attr(&attr->ah_attr, old_sgid_attr_av); in _ib_modify_qp()
1752 qp_attr->ah_attr.grh.sgid_attr = NULL; in ib_query_qp()