On Tue, Apr 06, 2021 at 04:17:27PM -0500, Tatyana Nikolova wrote: > +struct irdma_qp_uk_ops { > + enum irdma_status_code (*iw_inline_rdma_write)(struct irdma_qp_uk *qp, > + struct irdma_post_sq_info *info, > + bool post_sq); > + enum irdma_status_code (*iw_inline_send)(struct irdma_qp_uk *qp, > + struct irdma_post_sq_info *info, > + bool post_sq); > + enum irdma_status_code (*iw_mw_bind)(struct irdma_qp_uk *qp, > + struct irdma_post_sq_info *info, > + bool post_sq); > + enum irdma_status_code (*iw_post_nop)(struct irdma_qp_uk *qp, __u64 wr_id, > + bool signaled, bool post_sq); > + enum irdma_status_code (*iw_post_receive)(struct irdma_qp_uk *qp, > + struct irdma_post_rq_info *info); > + void (*iw_qp_post_wr)(struct irdma_qp_uk *qp); > + void (*iw_qp_ring_push_db)(struct irdma_qp_uk *qp, __u32 wqe_index); > + enum irdma_status_code (*iw_rdma_read)(struct irdma_qp_uk *qp, > + struct irdma_post_sq_info *info, > + bool inv_stag, bool post_sq); > + enum irdma_status_code (*iw_rdma_write)(struct irdma_qp_uk *qp, > + struct irdma_post_sq_info *info, > + bool post_sq); > + enum irdma_status_code (*iw_send)(struct irdma_qp_uk *qp, > + struct irdma_post_sq_info *info, > + bool post_sq); > + enum irdma_status_code (*iw_stag_local_invalidate)(struct irdma_qp_uk *qp, > + struct irdma_post_sq_info *info, > + bool post_sq); > +}; > + > +struct irdma_wqe_uk_ops { > + void (*iw_copy_inline_data)(__u8 *dest, __u8 *src, __u32 len, __u8 polarity); > + __u16 (*iw_inline_data_size_to_quanta)(__u32 data_size); > + void (*iw_set_fragment)(__le64 *wqe, __u32 offset, struct irdma_sge *sge, > + __u8 valid); > + void (*iw_set_mw_bind_wqe)(__le64 *wqe, > + struct irdma_bind_window *op_info); > +}; > + > +struct irdma_cq_ops { > + void (*iw_cq_clean)(void *q, struct irdma_cq_uk *cq); > + enum irdma_status_code (*iw_cq_poll_cmpl)(struct irdma_cq_uk *cq, > + struct irdma_cq_poll_info *info); > + enum irdma_status_code (*iw_cq_post_entries)(struct irdma_cq_uk *cq, > + __u8 count); > + void (*iw_cq_request_notification)(struct irdma_cq_uk *cq, > + enum irdma_cmpl_notify cq_notify); > + void (*iw_cq_resize)(struct irdma_cq_uk *cq, void *cq_base, int size); > + void (*iw_cq_set_resized_cnt)(struct irdma_cq_uk *qp, __u16 cnt); > +}; > + > +struct irdma_dev_uk; > + > +struct irdma_device_uk_ops { > + enum irdma_status_code (*iw_cq_uk_init)(struct irdma_cq_uk *cq, > + struct irdma_cq_uk_init_info *info); > + enum irdma_status_code (*iw_qp_uk_init)(struct irdma_qp_uk *qp, > + struct irdma_qp_uk_init_info *info); > +}; Is there a reason for all of these internal function pointers when there is only one implementation? This looks like data path too, making it even more puzzling Jason