]> git.openfabrics.org - ~shefty/libibverbs.git/commitdiff
refresh (create temporary patch)
authorSean Hefty <sean.hefty@intel.com>
Mon, 17 Sep 2012 22:30:20 +0000 (15:30 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 17 Sep 2012 22:30:20 +0000 (15:30 -0700)
meta
patches/refresh-temp [new file with mode: 0644]

diff --git a/meta b/meta
index 08e9bcfd20519522247ce6e18cc68ed7a9d27ebf..5c3177a9e039ea9ded39d8e7237bfea227e47921 100644 (file)
--- a/meta
+++ b/meta
@@ -1,10 +1,11 @@
 Version: 1
-Previous: db0bbd5e5aa2ec6331dfc6f29b51fac1c08a1e56
-Head: 456fb4085091e52f7c7806a0f094b56819d6a7df
+Previous: 24ffb47a5f6f6d66398febcb47e44730980c05f8
+Head: 4c2ed3ffbc930649ad2a969a9089dfd5b02ddd63
 Applied:
   verbs-ext: 6fbf2b29ca68fc10b7ee47dc0c09f54db0b32320
   compat-ex: fb8aa3e0b8ed628564d7d774907fd17a72a23522
   xrcd: 71fa003681345f671bdef05c9548263252e949de
   srq_ex: 456fb4085091e52f7c7806a0f094b56819d6a7df
+  refresh-temp: 4c2ed3ffbc930649ad2a969a9089dfd5b02ddd63
 Unapplied:
 Hidden:
diff --git a/patches/refresh-temp b/patches/refresh-temp
new file mode 100644 (file)
index 0000000..4b579c1
--- /dev/null
@@ -0,0 +1,259 @@
+Bottom: 48f7567ae9fafe6c83c69f1b3525476432737303
+Top:    62a0292970f2baa979fcc96c47646bd72f41624f
+Author: Sean Hefty <sean.hefty@intel.com>
+Date:   2012-09-17 15:30:20 -0700
+
+Refresh of srq_ex
+
+---
+
+diff --git a/include/infiniband/driver.h b/include/infiniband/driver.h
+index 193b0dd..03225cd 100644
+--- a/include/infiniband/driver.h
++++ b/include/infiniband/driver.h
+@@ -105,6 +105,10 @@ int ibv_cmd_create_srq(struct ibv_pd *pd,
+                      struct ibv_srq *srq, struct ibv_srq_init_attr *attr,
+                      struct ibv_create_srq *cmd, size_t cmd_size,
+                      struct ibv_create_srq_resp *resp, size_t resp_size);
++int ibv_cmd_create_srq_ex(struct ibv_pd *pd,
++                        struct ibv_srq *srq, struct ibv_srq_init_attr_ex *attr_ex,
++                        struct ibv_create_srq_ex *cmd, size_t cmd_size,
++                        struct ibv_create_srq_resp *resp, size_t resp_size);
+ int ibv_cmd_modify_srq(struct ibv_srq *srq,
+                      struct ibv_srq_attr *srq_attr,
+                      int srq_attr_mask,
+diff --git a/include/infiniband/kern-abi.h b/include/infiniband/kern-abi.h
+index d7c673f..3d72fa7 100644
+--- a/include/infiniband/kern-abi.h
++++ b/include/infiniband/kern-abi.h
+@@ -88,6 +88,7 @@ enum {
+       IB_USER_VERBS_CMD_POST_SRQ_RECV,
+       IB_USER_VERBS_CMD_OPEN_XRCD,
+       IB_USER_VERBS_CMD_CLOSE_XRCD,
++      IB_USER_VERBS_CMD_CREATE_XSRQ
+ };
+ /*
+@@ -730,11 +731,28 @@ struct ibv_create_srq {
+       __u64 driver_data[0];
+ };
++struct ibv_create_xsrq {
++      __u32 command;
++      __u16 in_words;
++      __u16 out_words;
++      __u64 response;
++      __u64 user_handle;
++      __u32 srq_type;
++      __u32 pd_handle;
++      __u32 max_wr;
++      __u32 max_sge;
++      __u32 srq_limit;
++      __u32 reserved;
++      __u32 xrcd_handle;
++      __u32 cq_handle;
++      __u64 driver_data[0];
++};
++
+ struct ibv_create_srq_resp {
+       __u32 srq_handle;
+       __u32 max_wr;
+       __u32 max_sge;
+-      __u32 reserved;
++      __u32 srqn;
+ };
+ struct ibv_modify_srq {
+@@ -829,6 +847,7 @@ enum {
+       IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL_V2 = -1,
+       IB_USER_VERBS_CMD_OPEN_XRCD_V2 = -1,
+       IB_USER_VERBS_CMD_CLOSE_XRCD_V2 = -1,
++      IB_USER_VERBS_CMD_CREATE_XSRQ_V2 = -1
+ };
+ struct ibv_destroy_cq_v1 {
+diff --git a/include/infiniband/verbs.h b/include/infiniband/verbs.h
+index 6e02c9a..58d6927 100644
+--- a/include/infiniband/verbs.h
++++ b/include/infiniband/verbs.h
+@@ -437,6 +437,28 @@ struct ibv_srq_init_attr {
+       struct ibv_srq_attr     attr;
+ };
++enum ibv_srq_type {
++      IBV_SRQT_BASIC,
++      IBV_SRQT_XRC
++};
++
++enum ibv_srq_init_attr_mask {
++      IBV_SRQ_INIT_ATTR_SRQ_TYPE      = 1 << 0,
++      IBV_SRQ_INIT_ATTR_XRCD          = 1 << 1,
++      IBV_SRQ_INIT_ATTR_CQ            = 1 << 2,
++      IBV_SRQ_INIT_ATTR_RESERVED      = 1 << 3
++};
++
++struct ibv_srq_init_attr_ex {
++      void                   *srq_context;
++      struct ibv_srq_attr     attr;
++
++      uint64_t                comp_mask;
++      enum ibv_srq_type       srq_type;
++      struct ibv_xrcd        *xrcd;
++      struct ibv_cq          *cq;
++};
++
+ enum ibv_qp_type {
+       IBV_QPT_RC = 2,
+       IBV_QPT_UC,
+@@ -596,7 +618,11 @@ struct ibv_mw_bind {
+ };
+ enum ibv_srq_mask {
+-      IBV_SRQ_RESERVED                = 1 << 0
++      IBV_SRQ_TYPE            = 1 << 0,
++      IBV_SRQ_XRCD            = 1 << 1,
++      IBV_SRQ_CQ              = 1 << 2,
++      IBV_SRQ_NUM             = 1 << 3,
++      IBV_SRQ_RESERVED        = 1 << 4
+ };
+ struct ibv_srq {
+@@ -610,6 +636,10 @@ struct ibv_srq {
+       uint32_t                events_completed;
+       uint32_t                comp_mask;
++      enum ibv_srq_type       srq_type;
++      struct ibv_xrcd        *xrcd;
++      struct ibv_cq          *cq;
++      uint32_t                srq_num;
+ };
+ enum ibv_qp_mask {
+@@ -790,6 +820,8 @@ struct verbs_context {
+       int (*drv_new_func1) ();        new corresponding provider call of func1
+       int (*lib_new_func1) ();        New library call func1
+       */
++      struct ibv_srq *        (*create_srq_ex)(struct ibv_pd *pd,
++                                               struct ibv_srq_init_attr_ex *srq_init_attr_ex);
+       struct ibv_xrcd *       (*open_xrcd)(struct ibv_context *context,
+                                            int fd, int oflags);
+       int                     (*close_xrcd)(struct ibv_xrcd *xrcd);
+@@ -1052,6 +1084,9 @@ static inline int ibv_req_notify_cq(struct ibv_cq *cq, int solicited_only)
+ struct ibv_srq *ibv_create_srq(struct ibv_pd *pd,
+                              struct ibv_srq_init_attr *srq_init_attr);
++struct ibv_srq *ibv_create_srq_ex(struct ibv_pd *pd,
++                                struct ibv_srq_init_attr_ex *srq_init_attr_ex);
++
+ /**
+  * ibv_modify_srq - Modifies the attributes for the specified SRQ.
+  * @srq: The SRQ to modify.
+diff --git a/src/cmd.c b/src/cmd.c
+index 4a98c64..1c4bfb3 100644
+--- a/src/cmd.c
++++ b/src/cmd.c
+@@ -481,6 +481,44 @@ int ibv_cmd_create_srq(struct ibv_pd *pd,
+       return 0;
+ }
++int ibv_cmd_create_srq_ex(struct ibv_pd *pd,
++                        struct ibv_srq *srq, struct ibv_srq_init_attr_ex *attr_ex,
++                        struct ibv_create_xsrq *cmd, size_t cmd_size,
++                        struct ibv_create_srq_resp *resp, size_t resp_size)
++{
++      IBV_INIT_CMD_RESP(cmd, cmd_size, CREATE_XSRQ, resp, resp_size);
++      cmd->user_handle = (uintptr_t) srq;
++      cmd->pd_handle   = pd->handle;
++      cmd->max_wr      = attr_ex->attr.max_wr;
++      cmd->max_sge     = attr_ex->attr.max_sge;
++      cmd->srq_limit   = attr_ex->attr.srq_limit;
++
++      cmd->srq_type = (attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_SRQ_TYPE) ?
++                      attr_ex->srq_type : IBV_SRQT_BASIC;
++      if (attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_XRCD)
++              cmd->xrcd_handle = attr_ex->xrcd->handle;
++      if (attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_CQ)
++              cmd->cq_handle   = attr_ex->cq->handle;
++
++      if (write(pd->context->cmd_fd, cmd, cmd_size) != cmd_size)
++      return errno;
++
++      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;
++      }
++
++      attr_ex->attr.max_wr = resp->max_wr;
++      attr_ex->attr.max_sge = resp->max_sge;
++
++      return 0;
++}
++
++
+ static int ibv_cmd_modify_srq_v3(struct ibv_srq *srq,
+                                struct ibv_srq_attr *srq_attr,
+                                int srq_attr_mask,
+diff --git a/src/libibverbs.map b/src/libibverbs.map
+index f21bffe..92bfabd 100644
+--- a/src/libibverbs.map
++++ b/src/libibverbs.map
+@@ -102,5 +102,7 @@ IBVERBS_1.1 {
+               ibv_close_xrcd;
+               ibv_cmd_open_xrcd;
+               ibv_cmd_close_xrcd;
++              ibv_create_srq_ex;
++              ibv_cmd_create_srq_ex;
+               
+ } IBVERBS_1.0;
+diff --git a/src/verbs.c b/src/verbs.c
+index ea99ab0..2031f6e 100644
+--- a/src/verbs.c
++++ b/src/verbs.c
+@@ -404,6 +404,43 @@ struct ibv_srq *__ibv_create_srq(struct ibv_pd *pd,
+ }
+ 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) {
++              errno = ENOSYS;
++              return NULL;
++      }
++
++      srq = context_ex->create_srq_ex(pd, srq_init_attr_ex);
++      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);
++
++              srq->comp_mask |= IBV_SRQ_INIT_ATTR_SRQ_TYPE;
++              srq->srq_type = (attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_SRQ_TYPE) ?
++                              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->xrcd = srq_init_attr_ex->cq;
++              }
++      }
++
++      return srq;
++}
++default_symver(__ibv_create_srq_ex, ibv_create_srq_ex);
++
+ int __ibv_modify_srq(struct ibv_srq *srq,
+                    struct ibv_srq_attr *srq_attr,
+                    int srq_attr_mask)