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,
+int ibv_cmd_create_srq_ex(struct verbs_context *context,
struct verbs_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);
enum ibv_srq_init_attr_mask {
IBV_SRQ_INIT_ATTR_TYPE = 1 << 0,
- IBV_SRQ_INIT_ATTR_XRCD = 1 << 1,
- IBV_SRQ_INIT_ATTR_CQ = 1 << 2,
- IBV_SRQ_INIT_ATTR_RESERVED = 1 << 3
+ IBV_SRQ_INIT_ATTR_PD = 1 << 1
+ IBV_SRQ_INIT_ATTR_XRCD = 1 << 2,
+ IBV_SRQ_INIT_ATTR_CQ = 1 << 3,
+ IBV_SRQ_INIT_ATTR_RESERVED = 1 << 4
};
struct ibv_srq_init_attr_ex {
uint64_t comp_mask;
enum ibv_srq_type srq_type;
+ struct ibv_pd *pd;
struct ibv_xrcd *xrcd;
struct ibv_cq *cq;
};
int (*lib_new_func1) (); New library call func1
*/
uint32_t (*get_srq_num)(struct ibv_srq *srq);
- struct ibv_srq * (*create_srq_ex)(struct ibv_pd *pd,
+ struct ibv_srq * (*create_srq_ex)(struct ibv_context *context,
struct ibv_srq_init_attr_ex *srq_init_attr_ex);
struct ibv_xrcd * (*open_xrcd)(struct ibv_context *context,
int fd, int oflags);
struct ibv_srq_init_attr *srq_init_attr);
static inline struct ibv_srq *
-ibv_create_srq_ex(struct ibv_pd *pd, struct ibv_srq_init_attr_ex *srq_init_attr_ex)
+ibv_create_srq_ex(struct ibv_context *context,
+ struct ibv_srq_init_attr_ex *srq_init_attr_ex)
{
- struct verbs_context *vctx = verbs_get_ctx_op(pd->context, create_srq_ex);
+ struct verbs_context *vctx = verbs_get_ctx_op(context, create_srq_ex);
if (!vctx) {
errno = ENOSYS;
return NULL;
}
- return vctx->create_srq_ex(pd, srq_init_attr_ex);
+ return vctx->create_srq_ex(context, srq_init_attr_ex);
}
/**
return 0;
}
-int ibv_cmd_create_srq_ex(struct ibv_pd *pd,
+int ibv_cmd_create_srq_ex(struct verbs_context *context,
struct verbs_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)
if (attr_ex->comp_mask >= IBV_SRQ_INIT_ATTR_RESERVED)
return ENOSYS;
+ if (!(attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_PD))
+ return EINVAL;
+
cmd->user_handle = (uintptr_t) srq;
- cmd->pd_handle = pd->handle;
+ cmd->pd_handle = attr_ex->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;
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)
+ if (write(context->cmd_fd, cmd, cmd_size) != cmd_size)
return errno;
VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
srq->srq.handle = resp->srq_handle;
- srq->srq.context = pd->context;
+ srq->srq.context = &context->context;
srq->srq.srq_context = attr_ex->srq_context;
srq->srq.pd = pd;
srq->srq.events_completed = 0;