Somehow hns got missed when I did the bulk conversion. All drivers must use verbs_set_ops. Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxxxx> --- libibverbs/driver.h | 4 ++-- providers/hns/hns_roce_u.c | 37 +++++++++++++++----------------- providers/hns/hns_roce_u.h | 16 ++++---------- providers/hns/hns_roce_u_hw_v1.c | 16 ++++++++------ providers/hns/hns_roce_u_hw_v2.c | 16 ++++++++------ 5 files changed, 41 insertions(+), 48 deletions(-) diff --git a/libibverbs/driver.h b/libibverbs/driver.h index ca618272320dd8..2ba91f24abc8b0 100644 --- a/libibverbs/driver.h +++ b/libibverbs/driver.h @@ -122,7 +122,7 @@ struct verbs_match_ent { }; #define VERBS_PCI_MATCH(_vendor, _device, _data) \ { \ - .driver_data = (_data), \ + .driver_data = (void *)(_data), \ .vendor = (_vendor), \ .device = (_device), \ .kind = VERBS_MATCH_PCI, \ @@ -130,7 +130,7 @@ struct verbs_match_ent { #define VERBS_MODALIAS_MATCH(_mod_str, _data) \ { \ - .driver_data = (_data), \ + .driver_data = (void *)(_data), \ .modalias = (_mod_str), \ .kind = VERBS_MATCH_MODALIAS, \ } diff --git a/providers/hns/hns_roce_u.c b/providers/hns/hns_roce_u.c index f43722caaf99f3..1ec5858ee69901 100644 --- a/providers/hns/hns_roce_u.c +++ b/providers/hns/hns_roce_u.c @@ -61,6 +61,21 @@ static const struct verbs_match_ent hca_table[] = { {} }; +static const struct verbs_context_ops hns_common_ops = { + .alloc_pd = hns_roce_u_alloc_pd, + .cq_event = hns_roce_u_cq_event, + .create_cq = hns_roce_u_create_cq, + .create_qp = hns_roce_u_create_qp, + .dealloc_pd = hns_roce_u_free_pd, + .dereg_mr = hns_roce_u_dereg_mr, + .destroy_cq = hns_roce_u_destroy_cq, + .query_device = hns_roce_u_query_device, + .query_port = hns_roce_u_query_port, + .query_qp = hns_roce_u_query_qp, + .reg_mr = hns_roce_u_reg_mr, + .rereg_mr = hns_roce_u_rereg_mr, +}; + static struct verbs_context *hns_roce_alloc_context(struct ibv_device *ibdev, int cmd_fd) { @@ -113,26 +128,8 @@ static struct verbs_context *hns_roce_alloc_context(struct ibv_device *ibdev, pthread_spin_init(&context->uar_lock, PTHREAD_PROCESS_PRIVATE); - context->ibv_ctx.context.ops.query_device = hns_roce_u_query_device; - context->ibv_ctx.context.ops.query_port = hns_roce_u_query_port; - context->ibv_ctx.context.ops.alloc_pd = hns_roce_u_alloc_pd; - context->ibv_ctx.context.ops.dealloc_pd = hns_roce_u_free_pd; - context->ibv_ctx.context.ops.reg_mr = hns_roce_u_reg_mr; - context->ibv_ctx.context.ops.rereg_mr = hns_roce_u_rereg_mr; - context->ibv_ctx.context.ops.dereg_mr = hns_roce_u_dereg_mr; - - context->ibv_ctx.context.ops.create_cq = hns_roce_u_create_cq; - context->ibv_ctx.context.ops.poll_cq = hr_dev->u_hw->poll_cq; - context->ibv_ctx.context.ops.req_notify_cq = hr_dev->u_hw->arm_cq; - context->ibv_ctx.context.ops.cq_event = hns_roce_u_cq_event; - context->ibv_ctx.context.ops.destroy_cq = hns_roce_u_destroy_cq; - - context->ibv_ctx.context.ops.create_qp = hns_roce_u_create_qp; - context->ibv_ctx.context.ops.query_qp = hns_roce_u_query_qp; - context->ibv_ctx.context.ops.modify_qp = hr_dev->u_hw->modify_qp; - context->ibv_ctx.context.ops.destroy_qp = hr_dev->u_hw->destroy_qp; - context->ibv_ctx.context.ops.post_send = hr_dev->u_hw->post_send; - context->ibv_ctx.context.ops.post_recv = hr_dev->u_hw->post_recv; + verbs_set_ops(&context->ibv_ctx, &hns_common_ops); + verbs_set_ops(&context->ibv_ctx, &hr_dev->u_hw->hw_ops); if (hns_roce_u_query_device(&context->ibv_ctx.context, &dev_attrs)) goto tptr_free; diff --git a/providers/hns/hns_roce_u.h b/providers/hns/hns_roce_u.h index 781b36b59e0f05..bd66c6e778be15 100644 --- a/providers/hns/hns_roce_u.h +++ b/providers/hns/hns_roce_u.h @@ -85,7 +85,7 @@ enum { struct hns_roce_device { struct verbs_device ibv_dev; int page_size; - struct hns_roce_u_hw *u_hw; + const struct hns_roce_u_hw *u_hw; int hw_version; }; @@ -221,15 +221,7 @@ struct hns_roce_qp { struct hns_roce_u_hw { uint32_t hw_version; - int (*poll_cq)(struct ibv_cq *ibvcq, int ne, struct ibv_wc *wc); - int (*arm_cq)(struct ibv_cq *ibvcq, int solicited); - int (*post_send)(struct ibv_qp *ibvqp, struct ibv_send_wr *wr, - struct ibv_send_wr **bad_wr); - int (*post_recv)(struct ibv_qp *ibvqp, struct ibv_recv_wr *wr, - struct ibv_recv_wr **bad_wr); - int (*modify_qp)(struct ibv_qp *qp, struct ibv_qp_attr *attr, - int attr_mask); - int (*destroy_qp)(struct ibv_qp *ibqp); + struct verbs_context_ops hw_ops; }; static inline unsigned long align(unsigned long val, unsigned long align) @@ -300,7 +292,7 @@ void hns_roce_free_buf(struct hns_roce_buf *buf); void hns_roce_init_qp_indices(struct hns_roce_qp *qp); -extern struct hns_roce_u_hw hns_roce_u_hw_v1; -extern struct hns_roce_u_hw hns_roce_u_hw_v2; +extern const struct hns_roce_u_hw hns_roce_u_hw_v1; +extern const struct hns_roce_u_hw hns_roce_u_hw_v2; #endif /* _HNS_ROCE_U_H */ diff --git a/providers/hns/hns_roce_u_hw_v1.c b/providers/hns/hns_roce_u_hw_v1.c index 1d256aa698d004..dbe0a185d154f0 100644 --- a/providers/hns/hns_roce_u_hw_v1.c +++ b/providers/hns/hns_roce_u_hw_v1.c @@ -830,12 +830,14 @@ out: return ret; } -struct hns_roce_u_hw hns_roce_u_hw_v1 = { +const struct hns_roce_u_hw hns_roce_u_hw_v1 = { .hw_version = HNS_ROCE_HW_VER1, - .poll_cq = hns_roce_u_v1_poll_cq, - .arm_cq = hns_roce_u_v1_arm_cq, - .post_send = hns_roce_u_v1_post_send, - .post_recv = hns_roce_u_v1_post_recv, - .modify_qp = hns_roce_u_v1_modify_qp, - .destroy_qp = hns_roce_u_v1_destroy_qp, + .hw_ops = { + .poll_cq = hns_roce_u_v1_poll_cq, + .req_notify_cq = hns_roce_u_v1_arm_cq, + .post_send = hns_roce_u_v1_post_send, + .post_recv = hns_roce_u_v1_post_recv, + .modify_qp = hns_roce_u_v1_modify_qp, + .destroy_qp = hns_roce_u_v1_destroy_qp, + }, }; diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c index 0e75604fca2053..ca59011f955a8f 100644 --- a/providers/hns/hns_roce_u_hw_v2.c +++ b/providers/hns/hns_roce_u_hw_v2.c @@ -1012,12 +1012,14 @@ static int hns_roce_u_v2_destroy_qp(struct ibv_qp *ibqp) return ret; } -struct hns_roce_u_hw hns_roce_u_hw_v2 = { +const struct hns_roce_u_hw hns_roce_u_hw_v2 = { .hw_version = HNS_ROCE_HW_VER2, - .poll_cq = hns_roce_u_v2_poll_cq, - .arm_cq = hns_roce_u_v2_arm_cq, - .post_send = hns_roce_u_v2_post_send, - .post_recv = hns_roce_u_v2_post_recv, - .modify_qp = hns_roce_u_v2_modify_qp, - .destroy_qp = hns_roce_u_v2_destroy_qp, + .hw_ops = { + .poll_cq = hns_roce_u_v2_poll_cq, + .req_notify_cq = hns_roce_u_v2_arm_cq, + .post_send = hns_roce_u_v2_post_send, + .post_recv = hns_roce_u_v2_post_recv, + .modify_qp = hns_roce_u_v2_modify_qp, + .destroy_qp = hns_roce_u_v2_destroy_qp, + }, }; -- 2.17.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html