From: Sean Hefty Date: Mon, 17 Sep 2012 22:30:20 +0000 (-0700) Subject: refresh (create temporary patch) X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=56a9027114ba756562b82ff5ae88c73cae5b3f37;p=~shefty%2Flibibverbs.git refresh (create temporary patch) --- diff --git a/meta b/meta index 08e9bcf..5c3177a 100644 --- 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 index 0000000..4b579c1 --- /dev/null +++ b/patches/refresh-temp @@ -0,0 +1,259 @@ +Bottom: 48f7567ae9fafe6c83c69f1b3525476432737303 +Top: 62a0292970f2baa979fcc96c47646bd72f41624f +Author: Sean Hefty +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)