VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
srq->handle = resp->srq_handle;
- srq->context = pd->context;
- if (cmd->srq_type == IBV_SRQT_XRC) {
- srq->comp_mask |= IBV_SRQ_NUM;
- srq->srq_num = resp->srqn;
- }
+ srq->context = pd->context;
+ srq->srq_context = srq_init_attr_ex->srq_context;
+ srq->pd = pd;
+ srq->events_completed = 0;
+ pthread_mutex_init(&srq->mutex, NULL);
+ pthread_cond_init(&srq->cond, NULL);
srq->comp_mask |= IBV_SRQ_INIT_ATTR_TYPE;
srq->srq_type = (srq_init_attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_TYPE) ?
srq_init_attr_ex->srq_type : IBV_SRQT_BASIC;
+ if (srq->srq_type == IBV_SRQT_XRC) {
+ srq->comp_mask |= IBV_SRQ_NUM;
+ srq->srq_num = resp->srqn;
+ }
if (srq_init_attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_XRCD) {
srq->comp_mask |= IBV_SRQ_XRCD;
srq->xrcd = srq_init_attr_ex->xrcd;
}
default_symver(__ibv_ack_cq_events, ibv_ack_cq_events);
-struct ibv_srq *__ibv_create_srq_ex(struct ibv_pd *pd,
- struct ibv_srq_init_attr_ex *srq_init_attr_ex)
-{
- struct verbs_context *context_ex = verbs_get_ctx(pd->context);
- struct ibv_srq *srq;
-
- if (srq_init_attr_ex->comp_mask) {
- if (!context_ex->create_srq_ex ||
- srq_init_attr_ex->comp_mask >= IBV_SRQ_INIT_ATTR_RESERVED) {
- errno = ENOSYS;
- return NULL;
- }
-
- srq = context_ex->create_srq_ex(pd, srq_init_attr_ex);
- } else {
- srq = pd->context->ops.create_srq(pd, (struct ibv_srq_init_attr *)
- srq_init_attr_ex);
- }
-
- if (srq) {
- srq->context = pd->context;
- srq->srq_context = srq_init_attr_ex->srq_context;
- srq->pd = pd;
- srq->events_completed = 0;
- pthread_mutex_init(&srq->mutex, NULL);
- pthread_cond_init(&srq->cond, NULL);
-
- srq->comp_mask |= IBV_SRQ_INIT_ATTR_TYPE;
- srq->srq_type = (srq_init_attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_TYPE) ?
- srq_init_attr_ex->srq_type : IBV_SRQT_BASIC;
- if (srq_init_attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_XRCD) {
- srq->comp_mask |= IBV_SRQ_XRCD;
- srq->xrcd = srq_init_attr_ex->xrcd;
- }
- if (srq_init_attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_CQ) {
- srq->comp_mask |= IBV_SRQ_CQ;
- srq->cq = srq_init_attr_ex->cq;
- }
- }
-
- return srq;
-}
-default_symver(__ibv_create_srq_ex, ibv_create_srq_ex);
-
struct ibv_srq *__ibv_create_srq(struct ibv_pd *pd,
struct ibv_srq_init_attr *srq_init_attr)
{
struct ibv_srq *srq;
+ if (!pd->context->ops.create_srq)
+ return NULL;
+
srq = pd->context->ops.create_srq(pd, srq_init_attr);
if (srq) {
srq->context = pd->context;
- srq->srq_context = srq_init_attr_ex->srq_context;
+ srq->srq_context = srq_init_attr->srq_context;
srq->pd = pd;
srq->events_completed = 0;
pthread_mutex_init(&srq->mutex, NULL);