Skip to content

Commit

Permalink
prov/efa: Handle user_recv_qp_hdr recv
Browse files Browse the repository at this point in the history
Signed-off-by: Shi Jin <[email protected]>
  • Loading branch information
shijin-aws committed Jun 25, 2024
1 parent 1fb2331 commit 8c917fb
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
7 changes: 7 additions & 0 deletions prov/efa/src/rdm/efa_rdm_pke_nonreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,13 @@ void efa_rdm_pke_handle_handshake_recv(struct efa_rdm_pke *pkt_entry)
peer->device_version = efa_rdm_pke_get_handshake_opt_device_version(pkt_entry);
EFA_INFO(FI_LOG_CQ, "Received peer EFA device version: 0x%x\n", peer->device_version);

if (peer->extra_info[0] & EFA_RDM_EXTRA_FEATURE_REQUEST_USER_RECV_QP) {
struct efa_rdm_handshake_opt_user_recv_qp_hdr *user_recv_qp_hdr;
user_recv_qp_hdr = efa_rdm_pke_get_handshake_opt_user_recv_qp_ptr(pkt_entry);
peer->user_recv_qp.qpn = user_recv_qp_hdr->qpn;
peer->user_recv_qp.qkey = user_recv_qp_hdr->qkey;
}

efa_rdm_pke_release_rx(pkt_entry);
}

Expand Down
24 changes: 24 additions & 0 deletions prov/efa/src/rdm/efa_rdm_pke_nonreq.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,30 @@ uint32_t efa_rdm_pke_get_handshake_opt_device_version(struct efa_rdm_pke *pke)
return device_version_hdr->device_version;
}

static inline
struct efa_rdm_handshake_opt_user_recv_qp_hdr *efa_rdm_pke_get_handshake_opt_user_recv_qp_ptr(struct efa_rdm_pke *pke)
{
struct efa_rdm_handshake_hdr *handshake_hdr;
size_t offset;

handshake_hdr = efa_rdm_pke_get_handshake_hdr(pke);
assert(handshake_hdr->type == EFA_RDM_HANDSHAKE_PKT);
assert(handshake_hdr->flags & EFA_RDM_HANDSHAKE_USER_RECV_QP_HDR);

offset = sizeof (struct efa_rdm_handshake_hdr)
+ ((handshake_hdr->nextra_p3 - 3) * sizeof handshake_hdr->extra_info[0]);

if (handshake_hdr->flags & EFA_RDM_PKT_CONNID_HDR)
offset += sizeof (struct efa_rdm_handshake_opt_connid_hdr);
if (handshake_hdr->flags & EFA_RDM_HANDSHAKE_HOST_ID_HDR)
offset += sizeof (struct efa_rdm_handshake_opt_host_id_hdr);
if (handshake_hdr->flags & EFA_RDM_HANDSHAKE_DEVICE_VERSION_HDR)
offset += sizeof (struct efa_rdm_handshake_opt_device_version_hdr);

return (struct efa_rdm_handshake_opt_user_recv_qp_hdr *) (pke->wiredata + offset);
}


ssize_t efa_rdm_pke_init_handshake(struct efa_rdm_pke *pkt_entry,
fi_addr_t addr);

Expand Down

0 comments on commit 8c917fb

Please sign in to comment.