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,
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,
int sq_sig_all;
};
-enum ibv_qp_init_attr_mask {
- IBV_QP_INIT_ATTR_XRCD = 1 << 0,
- IBV_QP_INIT_ATTR_RESERVED = 1 << 1
-};
-
-struct ibv_qp_init_attr_ex {
- void *qp_context;
- struct ibv_cq *send_cq;
- struct ibv_cq *recv_cq;
- struct ibv_srq *srq;
- struct ibv_qp_cap cap;
- enum ibv_qp_type qp_type;
- int sq_sig_all;
-
- uint64_t comp_mask;
- struct ibv_xrcd *xrcd;
-};
-
enum ibv_qp_attr_mask {
IBV_QP_STATE = 1 << 0,
IBV_QP_CUR_STATE = 1 << 1,
uint32_t remote_qpn;
uint32_t remote_qkey;
} ud;
- struct {
- uint64_t reserved[3];
- uint32_t reserved2;
- uint32_t remote_srqn;
- } xrc;
} wr;
};
int mw_access_flags;
};
-enum ibv_srq_mask {
- 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 {
struct ibv_context *context;
void *srq_context;
pthread_mutex_t mutex;
pthread_cond_t cond;
uint32_t events_completed;
-
- uint64_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 {
- IBV_QP_XRCD = 1 << 0,
- IBV_QP_RESERVED = 1 << 1
};
struct ibv_qp {
pthread_mutex_t mutex;
pthread_cond_t cond;
uint32_t events_completed;
-
- uint64_t comp_mask;
- struct ibv_xrcd *xrcd;
};
struct ibv_comp_channel {
int (*drv_new_func1) (); new corresponding provider call of func1
int (*lib_new_func1) (); New library call func1
*/
- struct ibv_qp * (*create_qp_ex)(struct ibv_pd *pd,
- struct ibv_qp_init_attr_ex *attr_ex);
- 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);
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.
struct ibv_qp *ibv_create_qp(struct ibv_pd *pd,
struct ibv_qp_init_attr *qp_init_attr);
-struct ibv_qp *ibv_create_qp_ex(struct ibv_pd *pd,
- struct ibv_qp_init_attr_ex *qp_init_attr_ex);
-
/**
* ibv_modify_qp - Modify a queue pair.
*/
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;
-
- if (attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_SRQ_TYPE) {
- cmd->srq_type = attr_ex->srq_type;
- switch (attr_ex->srq_type) {
- case IBV_SRQT_XRC:
- cmd->xrcd_handle = attr_ex->xrcd->handle;
- cmd->cq_handle = attr_ex->cq->handle;
- break;
- default:
- break;
- }
- } else {
- cmd->srq_type = IBV_SRQT_BASIC;
- }
-
- 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,