Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15:Update
libfabric
prov-verbs-Add-support-of-different-CQ-formats-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File prov-verbs-Add-support-of-different-CQ-formats-for-the-verbs-RDM.patch of Package libfabric
commit 6bd4cc3213d4e30087f2d024e6daf7b8b049767c Author: Dmitry Gladkov <dmitry.gladkov@intel.com> Date: Fri Dec 22 17:20:20 2017 +0300 prov/verbs: Add support of different CQ formats for the verbs/RDM Signed-off-by: Dmitry Gladkov <dmitry.gladkov@intel.com> diff --git prov/verbs/src/ep_rdm/verbs_cq_ep_rdm.c prov/verbs/src/ep_rdm/verbs_cq_ep_rdm.c index 5b4065fbc1cb..3612851b876b 100644 --- prov/verbs/src/ep_rdm/verbs_cq_ep_rdm.c +++ prov/verbs/src/ep_rdm/verbs_cq_ep_rdm.c @@ -51,7 +51,6 @@ static ssize_t fi_ibv_rdm_tagged_cq_readfrom(struct fid_cq *cq, void *buf, { struct fi_ibv_rdm_cq *_cq = container_of(cq, struct fi_ibv_rdm_cq, cq_fid); - struct fi_cq_tagged_entry *entry = buf; struct fi_ibv_rdm_request *cq_entry; size_t ret = 0; @@ -66,13 +65,7 @@ static ssize_t fi_ibv_rdm_tagged_cq_readfrom(struct fid_cq *cq, void *buf, src_addr[ret] = _cq->ep->av->conn_to_addr(_cq->ep, cq_entry->minfo.conn); - entry[ret].op_context = cq_entry->context; - entry[ret].flags = (cq_entry->comp_flags & ~FI_COMPLETION); - entry[ret].len = cq_entry->len; - entry[ret].buf = (cq_entry->comp_flags & FI_TRANSMIT) ? - cq_entry->src_addr : cq_entry->dest_buf; - entry[ret].data = cq_entry->imm; - entry[ret].tag = cq_entry->minfo.tag; + _cq->read_entry(cq_entry, ret, buf); if (cq_entry->state.eager == FI_IBV_STATE_EAGER_READY_TO_FREE) { FI_IBV_RDM_DBG_REQUEST("to_pool: ", cq_entry, @@ -116,7 +109,6 @@ ssize_t fi_ibv_rdm_cq_sreadfrom(struct fid_cq *cq, void *buf, size_t count, ((timeout < 0) ? SIZE_MAX : (fi_gettime_ms() + timeout)); size_t counter = 0; ssize_t ret = 0; - struct fi_cq_tagged_entry *cqe_buf = buf; struct fi_ibv_rdm_cq *_cq = container_of(cq, struct fi_ibv_rdm_cq, cq_fid); switch (_cq->wait_cond) { @@ -130,7 +122,9 @@ ssize_t fi_ibv_rdm_cq_sreadfrom(struct fid_cq *cq, void *buf, size_t count, } do { - ret = fi_ibv_rdm_tagged_cq_readfrom(cq, &cqe_buf[counter], + ret = fi_ibv_rdm_tagged_cq_readfrom(cq, + ((char *)buf + + (counter * _cq->entry_size)), threshold - counter, src_addr); counter += (ret > 0) ? ret : 0; @@ -260,6 +254,50 @@ static struct fi_ops fi_ibv_rdm_cq_fi_ops = { .ops_open = fi_no_ops_open, }; +static void fi_ibv_rdm_cq_read_context_entry(struct fi_ibv_rdm_request *cq_entry, + int i, void *buf) +{ + struct fi_cq_entry *entry = buf; + + entry[i].op_context = cq_entry->context; + } + + static void fi_ibv_rdm_cq_read_msg_entry(struct fi_ibv_rdm_request *cq_entry, + int i, void *buf) + { + struct fi_cq_msg_entry *entry = buf; + + entry[i].op_context = cq_entry->context; + entry[i].flags = (cq_entry->comp_flags & ~FI_COMPLETION); + entry[i].len = cq_entry->len; + } + + static void fi_ibv_rdm_cq_read_data_entry(struct fi_ibv_rdm_request *cq_entry, + int i, void *buf) + { + struct fi_cq_data_entry *entry = buf; + + entry[i].op_context = cq_entry->context; + entry[i].flags = (cq_entry->comp_flags & ~FI_COMPLETION); + entry[i].len = cq_entry->len; + entry[i].buf = (cq_entry->comp_flags & FI_TRANSMIT) ? + cq_entry->src_addr : cq_entry->dest_buf; + entry[i].data = cq_entry->imm; + } + + static void fi_ibv_rdm_cq_read_tagged_entry(struct fi_ibv_rdm_request *cq_entry, + int i, void *buf) + { + struct fi_cq_tagged_entry *entry = buf; + + entry[i].op_context = cq_entry->context; + entry[i].flags = (cq_entry->comp_flags & ~FI_COMPLETION); + entry[i].len = cq_entry->len; + entry[i].buf = (cq_entry->comp_flags & FI_TRANSMIT) ? + cq_entry->src_addr : cq_entry->dest_buf; + entry[i].data = cq_entry->imm; + entry[i].tag = cq_entry->minfo.tag; + } int fi_ibv_rdm_cq_open(struct fid_domain *domain, struct fi_cq_attr *attr, struct fid_cq **cq, void *context) @@ -296,12 +334,22 @@ int fi_ibv_rdm_cq_open(struct fid_domain *domain, struct fi_cq_attr *attr, _cq->cq_fid.ops = &fi_ibv_rdm_cq_ops; switch (attr->format) { - case FI_CQ_FORMAT_UNSPEC: case FI_CQ_FORMAT_CONTEXT: + _cq->entry_size = sizeof(struct fi_cq_entry); + _cq->read_entry = fi_ibv_rdm_cq_read_context_entry; + break; case FI_CQ_FORMAT_MSG: + _cq->entry_size = sizeof(struct fi_cq_msg_entry); + _cq->read_entry = fi_ibv_rdm_cq_read_msg_entry; + break; case FI_CQ_FORMAT_DATA: + _cq->entry_size = sizeof(struct fi_cq_data_entry); + _cq->read_entry = fi_ibv_rdm_cq_read_data_entry; + break; + case FI_CQ_FORMAT_UNSPEC: case FI_CQ_FORMAT_TAGGED: _cq->entry_size = sizeof(struct fi_cq_tagged_entry); + _cq->read_entry = fi_ibv_rdm_cq_read_tagged_entry; break; default: ret = -FI_ENOSYS; diff --git prov/verbs/src/ep_rdm/verbs_rdm.h prov/verbs/src/ep_rdm/verbs_rdm.h index 6230c975c7bc..71aabea3c0b2 100644 --- prov/verbs/src/ep_rdm/verbs_rdm.h +++ prov/verbs/src/ep_rdm/verbs_rdm.h @@ -309,7 +309,6 @@ struct fi_ibv_rdm_ep { int use_odp; int scq_depth; int rcq_depth; - int cqread_bunch_size; int is_closing; int recv_preposted_threshold; diff --git prov/verbs/src/fi_verbs.h prov/verbs/src/fi_verbs.h index 43f112551c69..06becb78079c 100644 --- prov/verbs/src/fi_verbs.h +++ prov/verbs/src/fi_verbs.h @@ -257,16 +257,21 @@ struct fi_ibv_cq { struct util_buf_pool *wce_pool; }; +struct fi_ibv_rdm_request; +typedef void (*fi_ibv_rdm_cq_read_entry)(struct fi_ibv_rdm_request *cq_entry, + int index, void *buf); + struct fi_ibv_rdm_cq { - struct fid_cq cq_fid; - struct fi_ibv_domain *domain; - struct fi_ibv_rdm_ep *ep; - struct dlist_entry request_cq; - struct dlist_entry request_errcq; - uint64_t flags; - size_t entry_size; - int read_bunch_size; - enum fi_cq_wait_cond wait_cond; + struct fid_cq cq_fid; + struct fi_ibv_domain *domain; + struct fi_ibv_rdm_ep *ep; + struct dlist_entry request_cq; + struct dlist_entry request_errcq; + uint64_t flags; + size_t entry_size; + fi_ibv_rdm_cq_read_entry read_entry; + int read_bunch_size; + enum fi_cq_wait_cond wait_cond; }; int fi_ibv_cq_open(struct fid_domain *domain, struct fi_cq_attr *attr,
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor