}
default_symver(__ibv_ack_cq_events, ibv_ack_cq_events);
-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->srq_context;
- srq->pd = pd;
- srq->events_completed = 0;
- pthread_mutex_init(&srq->mutex, NULL);
- pthread_cond_init(&srq->cond, NULL);
- }
-
- return srq;
-}
-default_symver(__ibv_create_srq, ibv_create_srq);
-
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 (!context_ex->create_srq_ex ||
- srq_init_attr_ex->comp_mask >= IBV_SRQ_INIT_ATTR_RESERVED) {
- errno = ENOSYS;
- return NULL;
+ 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);
}
- srq = context_ex->create_srq_ex(pd, srq_init_attr_ex);
if (srq) {
srq->context = pd->context;
srq->srq_context = srq_init_attr_ex->srq_context;
}
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_init_attr_ex srq_init_attr_ex;
+
+ memcpy(&srq_init_attr_ex, srq_init_attr, sizeof *srq_init_attr);
+ srq_init_attr_ex.comp_mask = 0;
+ return ibv_create_srq_ex(pd, &srq_init_attr_ex);
+}
+default_symver(__ibv_create_srq, ibv_create_srq);
+
int __ibv_modify_srq(struct ibv_srq *srq,
struct ibv_srq_attr *srq_attr,
int srq_attr_mask)