diff --git a/prov/verbs/src/ep_rdm/verbs_cq_ep_rdm.c b/prov/verbs/src/ep_rdm/verbs_cq_ep_rdm.c index 443d694ae93..ac2b1167c02 100644 --- a/prov/verbs/src/ep_rdm/verbs_cq_ep_rdm.c +++ b/prov/verbs/src/ep_rdm/verbs_cq_ep_rdm.c @@ -67,7 +67,7 @@ static ssize_t fi_ibv_rdm_tagged_cq_readfrom(struct fid_cq *cq, void *buf, src_addr[ret] = (fi_addr_t) (uintptr_t) cq_entry->minfo.conn; entry[ret].op_context = cq_entry->context; - entry[ret].flags = fi_ibv_rdm_comp_queue.flags; + entry[ret].flags = cq_entry->comp_flags; entry[ret].len = cq_entry->len; entry[ret].data = cq_entry->imm; entry[ret].tag = cq_entry->minfo.tag; @@ -186,7 +186,7 @@ fi_ibv_rdm_cq_readerr(struct fid_cq *cq, struct fi_cq_err_entry *entry, if (err_request) { entry->op_context = err_request->context; - entry->flags = 0; /* TODO: */ + entry->flags = err_request->comp_flags; entry->len = err_request->len; entry->buf = err_request->unexp_rbuf; entry->data = err_request->imm; diff --git a/prov/verbs/src/ep_rdm/verbs_rdm.h b/prov/verbs/src/ep_rdm/verbs_rdm.h index 8055849cae3..e8d62e98b6f 100644 --- a/prov/verbs/src/ep_rdm/verbs_rdm.h +++ b/prov/verbs/src/ep_rdm/verbs_rdm.h @@ -161,6 +161,7 @@ struct fi_ibv_rdm_tagged_request { */ size_t iov_count; size_t len; + uint64_t comp_flags; struct fi_context *context; uint32_t imm; diff --git a/prov/verbs/src/ep_rdm/verbs_tagged_ep_rdm_states.c b/prov/verbs/src/ep_rdm/verbs_tagged_ep_rdm_states.c index 8700b2ba09f..b9a63eee2a7 100644 --- a/prov/verbs/src/ep_rdm/verbs_tagged_ep_rdm_states.c +++ b/prov/verbs/src/ep_rdm/verbs_tagged_ep_rdm_states.c @@ -101,6 +101,7 @@ fi_ibv_rdm_tagged_init_send_request(struct fi_ibv_rdm_tagged_request *request, } request->len = p->data_len; + request->comp_flags = FI_TAGGED | FI_SEND; request->imm = p->imm; request->context = p->context; request->state.eager = FI_IBV_STATE_EAGER_BEGIN; @@ -417,6 +418,7 @@ fi_ibv_rdm_copy_unexp_request(struct fi_ibv_rdm_tagged_request *request, request->minfo.conn = unexp->minfo.conn; request->minfo.tag = unexp->minfo.tag; request->len = unexp->len; + request->comp_flags = unexp->comp_flags; request->unexp_rbuf = unexp->unexp_rbuf; request->state = unexp->state; @@ -453,6 +455,7 @@ fi_ibv_rdm_tagged_init_recv_request(struct fi_ibv_rdm_tagged_request *request, request->context->internal[0] = (void *)request; request->dest_buf = p->dest_addr; request->len = p->data_len; + request->comp_flags = FI_TAGGED | FI_RECV; request->state.eager = FI_IBV_STATE_EAGER_RECV_WAIT4PKT; request->state.rndv = FI_IBV_STATE_RNDV_NOT_USED; request->state.err = FI_SUCCESS; @@ -611,6 +614,7 @@ fi_ibv_rdm_tagged_init_unexp_recv_request( request->minfo.conn = p->conn; request->len = p->arrived_len - sizeof(struct fi_ibv_rdm_header); + request->comp_flags = FI_TAGGED | FI_RECV; assert(request->len <= p->ep->rndv_threshold); @@ -637,6 +641,7 @@ fi_ibv_rdm_tagged_init_unexp_recv_request( request->rndv.remote_addr = (void *)h->src_addr; request->rndv.rkey = h->mem_key; request->len = h->len; + request->comp_flags = FI_TAGGED | FI_RECV; request->imm = p->imm_data; request->state.eager = FI_IBV_STATE_EAGER_RECV_WAIT4RECV; request->state.rndv = FI_IBV_STATE_RNDV_RECV_WAIT4RES; @@ -984,9 +989,11 @@ fi_ibv_rdm_rma_init_request(struct fi_ibv_rdm_tagged_request *request, if (p->op_code == IBV_WR_RDMA_READ) { request->dest_buf = (void*)p->lbuf; + request->comp_flags = FI_RMA | FI_READ; } else { assert(p->op_code == IBV_WR_RDMA_WRITE); request->src_addr = (void*)p->lbuf; + request->comp_flags = FI_RMA | FI_WRITE; } request->len = p->data_len; @@ -1019,6 +1026,7 @@ fi_ibv_rdm_rma_inject_request(struct fi_ibv_rdm_tagged_request *request, request->minfo.conn = p->conn; request->len = p->data_len; + request->comp_flags = 0; /* inject does not generate completion */ request->sbuf = NULL; wr.sg_list = &sge;