Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions kernel-headers/rdma/ib_user_ioctl_cmds.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ enum uverbs_default_objects {
UVERBS_OBJECT_ASYNC_EVENT,
UVERBS_OBJECT_DMAH,
UVERBS_OBJECT_DMABUF,
UVERBS_OBJECT_COMP_CNTR,
};

enum {
Expand All @@ -75,6 +76,7 @@ enum uverbs_methods_device {
UVERBS_METHOD_QUERY_GID_TABLE,
UVERBS_METHOD_QUERY_GID_ENTRY,
UVERBS_METHOD_QUERY_PORT_SPEED,
UVERBS_METHOD_QUERY_COMP_CNTR_CAPS,
};

enum uverbs_attrs_invoke_write_cmd_attr_ids {
Expand All @@ -93,6 +95,12 @@ enum uverbs_attrs_query_port_speed_cmd_attr_ids {
UVERBS_ATTR_QUERY_PORT_SPEED_RESP,
};

enum uverbs_attrs_query_comp_cntr_caps_attr_ids {
UVERBS_ATTR_QUERY_COMP_CNTR_CAPS_MAX_COUNTERS,
UVERBS_ATTR_QUERY_COMP_CNTR_CAPS_MAX_VALUE,
UVERBS_ATTR_QUERY_COMP_CNTR_CAPS_SUPPORTED_QP_ATTACH_OPS,
};

enum uverbs_attrs_get_context_attr_ids {
UVERBS_ATTR_GET_CONTEXT_NUM_COMP_VECTORS,
UVERBS_ATTR_GET_CONTEXT_CORE_SUPPORT,
Expand Down Expand Up @@ -169,9 +177,16 @@ enum uverbs_attrs_destroy_qp_cmd_attr_ids {
UVERBS_ATTR_DESTROY_QP_RESP,
};

enum uverbs_attrs_qp_attach_comp_cntr_cmd_attr_ids {
UVERBS_ATTR_QP_ATTACH_COMP_CNTR_HANDLE,
UVERBS_ATTR_QP_ATTACH_COMP_CNTR_CNTR_HANDLE,
UVERBS_ATTR_QP_ATTACH_COMP_CNTR_OP_MASK,
};

enum uverbs_methods_qp {
UVERBS_METHOD_QP_CREATE,
UVERBS_METHOD_QP_DESTROY,
UVERBS_METHOD_QP_ATTACH_COMP_CNTR,
};

enum uverbs_attrs_create_srq_cmd_attr_ids {
Expand All @@ -189,6 +204,7 @@ enum uverbs_attrs_create_srq_cmd_attr_ids {
UVERBS_ATTR_CREATE_SRQ_RESP_MAX_WR,
UVERBS_ATTR_CREATE_SRQ_RESP_MAX_SGE,
UVERBS_ATTR_CREATE_SRQ_RESP_SRQ_NUM,
UVERBS_ATTR_CREATE_SRQ_BUF_UMEM,
};

enum uverbs_attrs_destroy_srq_cmd_attr_ids {
Expand Down Expand Up @@ -438,4 +454,32 @@ enum uverbs_attrs_query_gid_entry_cmd_attr_ids {
UVERBS_ATTR_QUERY_GID_ENTRY_RESP_ENTRY,
};

enum uverbs_methods_comp_cntr {
UVERBS_METHOD_COMP_CNTR_CREATE,
UVERBS_METHOD_COMP_CNTR_DESTROY,
UVERBS_METHOD_COMP_CNTR_MODIFY,
UVERBS_METHOD_COMP_CNTR_READ,
};

enum uverbs_attrs_create_comp_cntr_cmd_attr_ids {
UVERBS_ATTR_CREATE_COMP_CNTR_HANDLE,
};

enum uverbs_attrs_destroy_comp_cntr_cmd_attr_ids {
UVERBS_ATTR_DESTROY_COMP_CNTR_HANDLE,
};

enum uverbs_attrs_modify_comp_cntr_cmd_attr_ids {
UVERBS_ATTR_MODIFY_COMP_CNTR_HANDLE,
UVERBS_ATTR_MODIFY_COMP_CNTR_ENTRY,
UVERBS_ATTR_MODIFY_COMP_CNTR_OP,
UVERBS_ATTR_MODIFY_COMP_CNTR_VALUE,
};

enum uverbs_attrs_read_comp_cntr_cmd_attr_ids {
UVERBS_ATTR_READ_COMP_CNTR_HANDLE,
UVERBS_ATTR_READ_COMP_CNTR_ENTRY,
UVERBS_ATTR_READ_COMP_CNTR_RESP_VALUE,
};

#endif
23 changes: 23 additions & 0 deletions kernel-headers/rdma/irdma-abi.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#define IRDMA_ABI_H

#include <linux/types.h>
#include <rdma/ib_user_ioctl_cmds.h>

/* irdma must support legacy GEN_1 i40iw kernel
* and user-space whose last ABI ver is 5
Expand Down Expand Up @@ -131,4 +132,26 @@ struct irdma_create_ah_resp {
__u32 ah_id;
__u8 rsvd[4];
};
enum irdma_ib_create_cq_attrs {
IRDMA_IB_ATTR_CREATE_CQ_SHADOW_BUF_UMEM = UVERBS_ID_DRIVER_NS_WITH_UHW,
};

enum irdma_ib_create_srq_attrs {
IRDMA_IB_ATTR_CREATE_SRQ_SHADOW_BUF_UMEM = UVERBS_ID_DRIVER_NS_WITH_UHW,
};

enum irdma_ib_reg_mr_attrs {
IRDMA_IB_ATTR_REG_MR_TYPE = UVERBS_ID_DRIVER_NS_WITH_UHW,
IRDMA_IB_ATTR_REG_MR_CQ_PAGES,
IRDMA_IB_ATTR_REG_MR_RQ_PAGES,
IRDMA_IB_ATTR_REG_MR_SQ_PAGES,
};

enum irdma_ib_reg_dmabuf_mr_attrs {
IRDMA_IB_ATTR_REG_DMABUF_MR_TYPE = UVERBS_ID_DRIVER_NS_WITH_UHW,
IRDMA_IB_ATTR_REG_DMABUF_MR_CQ_PAGES,
IRDMA_IB_ATTR_REG_DMABUF_MR_RQ_PAGES,
IRDMA_IB_ATTR_REG_DMABUF_MR_SQ_PAGES,
};

#endif /* IRDMA_ABI_H */
25 changes: 25 additions & 0 deletions libibverbs/cmd_srq.c
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,31 @@ int ibv_cmd_create_srq_ex(struct ibv_context *context,
return ibv_icmd_create_srq(attr_ex->pd, srq, NULL, attr_ex, cmdb);
}

int ibv_cmd_create_srq_ex2(struct ibv_context *context,
struct verbs_srq *srq,
struct ibv_srq_init_attr_ex *attr_ex,
struct ibv_create_xsrq *cmd, size_t cmd_size,
struct ib_uverbs_create_srq_resp *resp, size_t resp_size,
struct ibv_command_buffer *driver)
{
DECLARE_CMD_BUFFER_LINK_COMPAT(cmdb, UVERBS_OBJECT_SRQ,
UVERBS_METHOD_SRQ_CREATE, driver,
cmd, cmd_size, resp, resp_size);

if (attr_ex->comp_mask >= IBV_SRQ_INIT_ATTR_RESERVED) {
errno = EOPNOTSUPP;
return errno;
}

if (!(attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_PD)) {
errno = EINVAL;
return errno;
}

return ibv_icmd_create_srq(attr_ex->pd, srq, NULL, attr_ex, cmdb);
}


int ibv_cmd_destroy_srq(struct ibv_srq *srq)
{
DECLARE_FBCMD_BUFFER(cmdb, UVERBS_OBJECT_SRQ, UVERBS_METHOD_SRQ_DESTROY, 2,
Expand Down
6 changes: 6 additions & 0 deletions libibverbs/driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -674,6 +674,12 @@ int ibv_cmd_create_srq_ex(struct ibv_context *context,
struct ibv_srq_init_attr_ex *attr_ex,
struct ibv_create_xsrq *cmd, size_t cmd_size,
struct ib_uverbs_create_srq_resp *resp, size_t resp_size);
int ibv_cmd_create_srq_ex2(struct ibv_context *context,
struct verbs_srq *srq,
struct ibv_srq_init_attr_ex *attr_ex,
struct ibv_create_xsrq *cmd, size_t cmd_size,
struct ib_uverbs_create_srq_resp *resp, size_t resp_size,
struct ibv_command_buffer *driver_filter);
int ibv_cmd_modify_srq(struct ibv_srq *srq,
struct ibv_srq_attr *srq_attr,
int srq_attr_mask,
Expand Down
1 change: 1 addition & 0 deletions libibverbs/libibverbs.map.in
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ IBVERBS_PRIVATE_@IBVERBS_PABI_VERSION@ {
ibv_cmd_create_rwq_ind_table;
ibv_cmd_create_srq;
ibv_cmd_create_srq_ex;
ibv_cmd_create_srq_ex2;
ibv_cmd_create_wq;
ibv_cmd_dealloc_mw;
ibv_cmd_dealloc_pd;
Expand Down
4 changes: 4 additions & 0 deletions providers/irdma/abi.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,9 @@ DECLARE_DRV_CMD(irdma_ucreate_ah, IB_USER_VERBS_CMD_CREATE_AH,
empty, irdma_create_ah_resp);
DECLARE_DRV_CMD(irdma_ucreate_srq, IB_USER_VERBS_CMD_CREATE_SRQ,
irdma_create_srq_req, irdma_create_srq_resp);
DECLARE_DRV_CMD(irdma_ucreate_qp_ex, IB_USER_VERBS_EX_CMD_CREATE_QP,
irdma_create_qp_req, irdma_create_qp_resp);
DECLARE_DRV_CMD(irdma_ucreate_srq_ex, IB_USER_VERBS_CMD_CREATE_XSRQ,
irdma_create_srq_req, irdma_create_srq_resp);

#endif /* PROVIDER_IRDMA_ABI_H */
3 changes: 3 additions & 0 deletions providers/irdma/umain.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ static const struct verbs_context_ops irdma_uctx_srq_ops = {
static const struct verbs_context_ops irdma_uctx_ops = {
.alloc_mw = irdma_ualloc_mw,
.alloc_pd = irdma_ualloc_pd,
.alloc_parent_domain = irdma_ualloc_parent_domain,
.alloc_buf = irdma_ualloc_buf,
.free_buf = irdma_ufree_buf,
.attach_mcast = irdma_uattach_mcast,
.bind_mw = irdma_ubind_mw,
.cq_event = irdma_cq_event,
Expand Down
25 changes: 24 additions & 1 deletion providers/irdma/umain.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,16 @@ struct irdma_upd {
void *arm_cq_page;
void *arm_cq;
uint32_t pd_id;
bool is_parent_domain;
};

struct irdma_parent_domain {
struct irdma_upd base_pd;
struct ibv_dmabuf_heap *dmabuf_heap;
};

struct irdma_buf {
struct ibv_buf ibv_buf;
};

struct irdma_uvcontext {
Expand All @@ -72,13 +82,16 @@ struct irdma_usrq {
struct verbs_mr vmr;
pthread_spinlock_t lock;
struct irdma_srq_uk srq;
struct irdma_buf srq_buf;
size_t buf_size;
};

struct irdma_ucq {
struct verbs_cq verbs_cq;
struct verbs_mr vmr;
struct verbs_mr vmr_shadow_area;
struct irdma_buf cq_buf;
struct irdma_buf shadow_buf;
pthread_spinlock_t lock;
size_t buf_size;
bool is_armed;
Expand All @@ -95,10 +108,11 @@ struct irdma_ucq {
};

struct irdma_uqp {
struct ibv_qp ibv_qp;
struct verbs_qp verbs_qp;
struct irdma_ucq *send_cq;
struct irdma_ucq *recv_cq;
struct verbs_mr vmr;
struct irdma_buf sq_buf;
size_t buf_size;
uint32_t irdma_drv_opt;
pthread_spinlock_t lock;
Expand All @@ -124,7 +138,11 @@ int irdma_uquery_device_ex(struct ibv_context *context,
int irdma_uquery_port(struct ibv_context *context, uint8_t port,
struct ibv_port_attr *attr);
struct ibv_pd *irdma_ualloc_pd(struct ibv_context *context);
struct ibv_pd *irdma_ualloc_parent_domain(struct ibv_context *context,
struct ibv_parent_domain_init_attr *attr);
int irdma_ufree_pd(struct ibv_pd *pd);
void *irdma_ualloc_buf(struct ibv_pd *pd, size_t size, struct ibv_buf **buf);
void irdma_ufree_buf(struct ibv_buf *buf);
struct ibv_mr *irdma_ureg_mr(struct ibv_pd *pd, void *addr, size_t length,
uint64_t hca_va, int access);
struct ibv_mr *irdma_ureg_mr_dmabuf(struct ibv_pd *pd, uint64_t offset,
Expand Down Expand Up @@ -179,4 +197,9 @@ void irdma_async_event(struct ibv_context *context,
void irdma_set_hw_attrs(struct irdma_hw_attrs *attrs);
void *irdma_mmap(int fd, off_t offset);
void irdma_munmap(void *map);
static inline struct irdma_parent_domain *to_iparent_domain(struct ibv_pd *pd)
{
struct irdma_upd *upd = container_of(pd, struct irdma_upd, ibv_pd);
return container_of(upd, struct irdma_parent_domain, base_pd);
}
#endif /* IRDMA_UMAIN_H */
Loading