Re: [PATCH rdma-next 00/18] RDMA: Add support for ib_device_ops

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Oct 09, 2018 at 07:06:56PM +0000, Parav Pandit wrote:
> 
> 
> > -----Original Message-----
> > From: linux-rdma-owner@xxxxxxxxxxxxxxx <linux-rdma-
> > owner@xxxxxxxxxxxxxxx> On Behalf Of Kamal Heib
> > Sent: Tuesday, October 9, 2018 1:45 PM
> > To: Doug Ledford <dledford@xxxxxxxxxx>; Jason Gunthorpe <jgg@xxxxxxxx>
> > Cc: linux-rdma@xxxxxxxxxxxxxxx; kamalheib1@xxxxxxxxx
> > Subject: [PATCH rdma-next 00/18] 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.
> > 
> > Thanks,
> > Kamal
> > 
> > Kamal Heib (18):
> >   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: 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                    |  26 +--
> >  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               |  97 +++++----
> >  drivers/infiniband/hw/cxgb3/iwch_provider.c        |  64 +++---
> >  drivers/infiniband/hw/cxgb4/provider.c             |  74 +++----
> >  drivers/infiniband/hw/hfi1/verbs.c                 |  19 +-
> >  drivers/infiniband/hw/hns/hns_roce_device.h        |   1 +
> >  drivers/infiniband/hw/hns/hns_roce_hw_v1.c         |  11 ++
> >  drivers/infiniband/hw/hns/hns_roce_hw_v2.c         |  11 ++
> >  drivers/infiniband/hw/hns/hns_roce_main.c          |  91 ++++-----
> >  drivers/infiniband/hw/i40iw/i40iw_cm.c             |   2 +-
> >  drivers/infiniband/hw/i40iw/i40iw_verbs.c          |  66 ++++---
> >  drivers/infiniband/hw/mlx4/alias_GUID.c            |   2 +-
> >  drivers/infiniband/hw/mlx4/main.c                  | 166 +++++++++-------
> >  drivers/infiniband/hw/mlx5/main.c                  | 220 ++++++++++++---------
> >  drivers/infiniband/hw/mthca/mthca_provider.c       | 139 ++++++++-----
> >  drivers/infiniband/hw/nes/nes_cm.c                 |   2 +-
> >  drivers/infiniband/hw/nes/nes_verbs.c              |  66 ++++---
> >  drivers/infiniband/hw/ocrdma/ocrdma_main.c         |  92 ++++-----
> >  drivers/infiniband/hw/qedr/main.c                  | 103 +++++-----
> >  drivers/infiniband/hw/qib/qib_verbs.c              |   8 +-
> >  drivers/infiniband/hw/usnic/usnic_ib_main.c        |  61 +++---
> >  drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c     |  82 ++++----
> >  drivers/infiniband/sw/rdmavt/vt.c                  |  90 ++++-----
> >  drivers/infiniband/sw/rxe/rxe_verbs.c              |  90 +++++----
> >  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 +-
> >  include/rdma/ib_verbs.h                            | 212 ++++++++------------
> >  net/sunrpc/xprtrdma/fmr_ops.c                      |   2 +-
> >  50 files changed, 1257 insertions(+), 1057 deletions(-)
> > 
> > --
> > 2.14.4
> 
> I am not sure if this change is needed.

The idea behind this change is to make some order in the IB device structure by moving all the IB 
device operations to one place under the new ib_device_ops structure.

> But if an ops structure is defined, there should be logical useful group should exist for the ops.
> 
> Such as
> 1. datapath_ops (post_send, post_recv, poll_cq, req_notify_cq), which can fall in same cacheline.
> 2. resource_ops(create, destroy, query, modify of qp, cq, mr, ah, srq)
> 3. gid_ops(query, add, del)
> 4. vf_ops(config_get, config_set, stats)
> 5. stats_ops(alloc, free, get)
> This aligns to other part of kernel, one example is netdev ops (rtnl, ndo, dcbnl, vf).
> 
> 

Basiclly, I'm fine with the idea of creating different operations groups based on common logic, but
I'm not sure if the netdevice operations is a good example because it includes operations for VF,
stats, tunnel, fcoe, fdb and etc.

Thanks,
Kamal



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux