> -----Original Message----- > From: linux-rdma-owner@xxxxxxxxxxxxxxx <linux-rdma- > owner@xxxxxxxxxxxxxxx> On Behalf Of Kamal Heib > Sent: Monday, November 5, 2018 5:35 AM > To: Doug Ledford <dledford@xxxxxxxxxx>; Jason Gunthorpe <jgg@xxxxxxxx> > Cc: linux-rdma@xxxxxxxxxxxxxxx; kamalheib1@xxxxxxxxx > Subject: [PATCH rdma-next v3 00/20] RDMA: Add support for ib_device_ops > > This patchset introduce a new structure that will contain all the infiniband > device operations, the structure will be used by the providers to initialize > their supported operations. This patchset also includes the required changes > in the core and ulps to start using it. > > Changes from v2: > * Sort the operations based on logical groups. > * Add patch 18 for fixing rvt_create_ah prototype. > * Add patch 19 for initialize ib_device_ops struct. > > Changes from V1: > * Rebase. > * Constify the ib_device_ops. > * Remove vertical white spaces. > * Clang-format ib_device_ops struct. > * Return the descriptive comments into ib_device_ops struct. > * Move the assignment of the ib_device operations to the last patch in > the patchset. > * Remove the existing method assignment at the same time of initializing > the ib_device_ops. > > Thanks, > Kamal > > Kamal Heib (20): > RDMA/core: Introduce ib_device_ops > RDMA/bnxt_re: Initialize ib_device_ops struct > RDMA/cxgb3: Initialize ib_device_ops struct > RDMA/cxgb4: Initialize ib_device_ops struct > RDMA/hfi1: Initialize ib_device_ops struct > RDMA/hns: Initialize ib_device_ops struct > RDMA/i40iw: Initialize ib_device_ops struct > RDMA/mlx4: Initialize ib_device_ops struct > RDMA/mlx5: Initialize ib_device_ops struct > RDMA/mthca: Initialize ib_device_ops struct > RDMA/nes: Initialize ib_device_ops struct > RDMA/ocrdma: Initialize ib_device_ops struct > RDMA/qedr: Initialize ib_device_ops struct > RDMA/qib: Initialize ib_device_ops struct > RDMA/usnic: Initialize ib_device_ops struct > RDMA/vmw_pvrdma: Initialize ib_device_ops struct > RDMA/rxe: Initialize ib_device_ops struct > RDMA/rdmavt: Fix rvt_create_ah prototype > RDMA/rdmavt: Initialize ib_device_ops struct > RDMA: Start use ib_device_ops > > drivers/infiniband/core/cache.c | 12 +- > drivers/infiniband/core/core_priv.h | 12 +- > drivers/infiniband/core/cq.c | 6 +- > drivers/infiniband/core/device.c | 136 ++++- > drivers/infiniband/core/fmr_pool.c | 4 +- > drivers/infiniband/core/mad.c | 24 +- > drivers/infiniband/core/nldev.c | 4 +- > drivers/infiniband/core/opa_smi.h | 4 +- > drivers/infiniband/core/rdma_core.c | 6 +- > drivers/infiniband/core/security.c | 8 +- > drivers/infiniband/core/smi.h | 4 +- > drivers/infiniband/core/sysfs.c | 28 +- > drivers/infiniband/core/ucm.c | 2 +- > drivers/infiniband/core/uverbs_cmd.c | 64 +-- > drivers/infiniband/core/uverbs_main.c | 14 +- > drivers/infiniband/core/uverbs_std_types.c | 2 +- > .../infiniband/core/uverbs_std_types_counters.c | 10 +- > drivers/infiniband/core/uverbs_std_types_cq.c | 4 +- > drivers/infiniband/core/uverbs_std_types_dm.c | 6 +- > .../infiniband/core/uverbs_std_types_flow_action.c | 14 +- > drivers/infiniband/core/uverbs_std_types_mr.c | 4 +- > drivers/infiniband/core/verbs.c | 149 +++--- > drivers/infiniband/hw/bnxt_re/main.c | 107 ++-- > drivers/infiniband/hw/cxgb3/iwch_provider.c | 75 +-- > drivers/infiniband/hw/cxgb4/provider.c | 86 ++-- > drivers/infiniband/hw/hfi1/verbs.c | 23 +- > drivers/infiniband/hw/hns/hns_roce_device.h | 1 + > drivers/infiniband/hw/hns/hns_roce_hw_v1.c | 13 + > drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 13 + > drivers/infiniband/hw/hns/hns_roce_main.c | 112 +++-- > drivers/infiniband/hw/i40iw/i40iw_cm.c | 2 +- > drivers/infiniband/hw/i40iw/i40iw_verbs.c | 76 +-- > drivers/infiniband/hw/mlx4/alias_GUID.c | 2 +- > drivers/infiniband/hw/mlx4/main.c | 191 ++++--- > drivers/infiniband/hw/mlx5/main.c | 237 +++++---- > drivers/infiniband/hw/mthca/mthca_provider.c | 151 ++++-- > drivers/infiniband/hw/nes/nes_cm.c | 2 +- > drivers/infiniband/hw/nes/nes_verbs.c | 77 +-- > drivers/infiniband/hw/ocrdma/ocrdma_main.c | 102 ++-- > drivers/infiniband/hw/qedr/main.c | 114 +++-- > drivers/infiniband/hw/qib/qib_verbs.c | 10 +- > drivers/infiniband/hw/usnic/usnic_ib_main.c | 71 +-- > drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c | 92 ++-- > drivers/infiniband/sw/rdmavt/ah.c | 4 +- > drivers/infiniband/sw/rdmavt/ah.h | 3 +- > drivers/infiniband/sw/rdmavt/vt.c | 312 +++--------- > drivers/infiniband/sw/rxe/rxe_verbs.c | 102 ++-- > drivers/infiniband/ulp/ipoib/ipoib_main.c | 12 +- > drivers/infiniband/ulp/iser/iser_memory.c | 4 +- > drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c | 8 +- > drivers/infiniband/ulp/srp/ib_srp.c | 6 +- > fs/cifs/smbdirect.c | 2 +- > include/rdma/ib_verbs.h | 546 ++++++++++----------- > net/rds/ib.c | 4 +- > net/sunrpc/xprtrdma/fmr_ops.c | 2 +- > 55 files changed, 1654 insertions(+), 1425 deletions(-) > > -- > 2.14.5 Sorry for the late comment for Jason's point in v2 series to have one giant structure. With one giant structure, fill_res_entry() provider callback function of rdma_restrack_root doesn't deserve to be inside a logically well separate structure rdma_restrack_root. We should take out fill_res_entry() and put into ib_device_ops. But I like the approach of rdma_restrack_root which keeps all logical entities together. And with that good example I continue to propose same logical separate for rest of the callbacks too. With that non hot control path routines can possibly stay outside of ib_device apart from code readability.