]> git.openfabrics.org - ~shefty/libibverbs.git/commitdiff
Refresh of srq_ex
authorSean Hefty <sean.hefty@intel.com>
Tue, 18 Sep 2012 04:18:26 +0000 (21:18 -0700)
committerSean Hefty <sean.hefty@intel.com>
Tue, 18 Sep 2012 04:18:26 +0000 (21:18 -0700)
src/verbs.c

index d08ee79059cadb929d4915704d5061cabbd696eb..0964ccc5440f12b85508a5787cb17da26343c1b2 100644 (file)
@@ -382,41 +382,25 @@ void __ibv_ack_cq_events(struct ibv_cq *cq, unsigned int nevents)
 }
 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;
@@ -442,6 +426,17 @@ struct ibv_srq *__ibv_create_srq_ex(struct ibv_pd *pd,
 }
 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)