// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB /* * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved. * Copyright (c) 2015 System Fabric Works, Inc. All rights reserved.
*/
if (rdma_ah_get_ah_flags(attr) & IB_AH_GRH) { if (grh->sgid_index > port->attr.gid_tbl_len) { if (obj_is_ah)
rxe_dbg_ah(ah, "invalid sgid index = %d\n",
grh->sgid_index); else
rxe_dbg_qp(qp, "invalid sgid index = %d\n",
grh->sgid_index); return -EINVAL;
}
type = rdma_gid_attr_network_type(grh->sgid_attr); if (type < RDMA_NETWORK_IPV4 ||
type > RDMA_NETWORK_IPV6) { if (obj_is_ah)
rxe_dbg_ah(ah, "invalid network type for rdma_rxe = %d\n",
type); else
rxe_dbg_qp(qp, "invalid network type for rdma_rxe = %d\n",
type); return -EINVAL;
}
}
switch (ibtype) { case RDMA_NETWORK_IPV4:
type = RXE_NETWORK_TYPE_IPV4; break; case RDMA_NETWORK_IPV6:
type = RXE_NETWORK_TYPE_IPV6; break; default: /* not reached - checked in rxe_av_chk_attr */
type = 0; break;
}
if (qp_type(pkt->qp) == IB_QPT_RC || qp_type(pkt->qp) == IB_QPT_UC) return &pkt->qp->pri_av;
if (!pkt->wqe) return NULL;
ah_num = pkt->wqe->wr.wr.ud.ah_num; if (ah_num) { /* only new user provider or kernel client */
ah = rxe_pool_get_index(&pkt->rxe->ah_pool, ah_num); if (!ah) {
rxe_dbg_qp(pkt->qp, "Unable to find AH matching ah_num\n"); return NULL;
}
if (rxe_ah_pd(ah) != pkt->qp->pd) {
rxe_dbg_qp(pkt->qp, "PDs don't match for AH and QP\n");
rxe_put(ah); return NULL;
}
if (ahp)
*ahp = ah; else
rxe_put(ah);
return &ah->av;
}
/* only old user provider for UD sends*/ return &pkt->wqe->wr.wr.ud.av;
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.