RE: [PATCH rdma-next v3 02/10] RDMA: Introduce and use rdma_device_to_ibdev()

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

 




> -----Original Message-----
> From: linux-rdma-owner@xxxxxxxxxxxxxxx <linux-rdma-
> owner@xxxxxxxxxxxxxxx> On Behalf Of Jason Gunthorpe
> Sent: Friday, January 11, 2019 4:48 PM
> To: Leon Romanovsky <leon@xxxxxxxxxx>
> Cc: Doug Ledford <dledford@xxxxxxxxxx>; Leon Romanovsky
> <leonro@xxxxxxxxxxxx>; RDMA mailing list <linux-rdma@xxxxxxxxxxxxxxx>;
> Parav Pandit <parav@xxxxxxxxxxxx>
> Subject: Re: [PATCH rdma-next v3 02/10] RDMA: Introduce and use
> rdma_device_to_ibdev()
> 
> On Tue, Dec 18, 2018 at 02:15:56PM +0200, Leon Romanovsky wrote:
> > From: Parav Pandit <parav@xxxxxxxxxxxx>
> >
> > Introduce and use rdma_device_to_ibdev() API for those drivers which
> > are registering one sysfs group and also use in ib_core.
> >
> > In subsequent patch, device->provider_ibdev one-to-one mapping is no
> > longer holds true during accessing sysfs entries.
> > Therefore, introduce an API rdma_device_to_ibdev() that provides such
> > information.
> >
> > Signed-off-by: Parav Pandit <parav@xxxxxxxxxxxx>
> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx>
> >  drivers/infiniband/core/sysfs.c              | 12 ++++-----
> >  drivers/infiniband/hw/bnxt_re/main.c         |  6 +++--
> >  drivers/infiniband/hw/cxgb3/iwch_provider.c  | 14 ++++++-----
> >  drivers/infiniband/hw/cxgb4/provider.c       | 14 ++++++-----
> >  drivers/infiniband/hw/hfi1/sysfs.c           | 16 ++++++------
> >  drivers/infiniband/hw/i40iw/i40iw_verbs.c    |  5 ++--
> >  drivers/infiniband/hw/mlx4/main.c            |  7 +++---
> >  drivers/infiniband/hw/mlx5/main.c            | 13 ++++++----
> >  drivers/infiniband/hw/mthca/mthca_provider.c |  9 ++++---
> >  drivers/infiniband/hw/nes/nes_verbs.c        |  2 +-
> >  drivers/infiniband/hw/ocrdma/ocrdma_main.c   |  6 +++--
> >  drivers/infiniband/hw/qedr/main.c            |  3 ++-
> >  drivers/infiniband/hw/qib/qib_sysfs.c        | 18 +++++++-------
> >  drivers/infiniband/hw/usnic/usnic_ib_sysfs.c | 26 +++++++++-----------
> >  drivers/infiniband/sw/rxe/rxe_verbs.c        |  4 +--
> >  include/rdma/ib_verbs.h                      | 22 +++++++++++++++++
> >  16 files changed, 105 insertions(+), 72 deletions(-)
> >
> > diff --git a/drivers/infiniband/core/sysfs.c
> > b/drivers/infiniband/core/sysfs.c index 9b6eef793475..043e2d9c6d73
> > 100644
> > +++ b/drivers/infiniband/core/sysfs.c
> > @@ -1189,7 +1189,7 @@ static int add_port(struct ib_device *device,
> > int port_num,  static ssize_t node_type_show(struct device *device,
> >  			      struct device_attribute *attr, char *buf)  {
> > -	struct ib_device *dev = container_of(device, struct ib_device, dev);
> > +	struct ib_device *dev = rdma_device_to_ibdev(device);
> >
> >  	switch (dev->node_type) {
> >  	case RDMA_NODE_IB_CA:	  return sprintf(buf, "%d: CA\n", dev-
> >node_type);
> > @@ -1206,7 +1206,7 @@ static DEVICE_ATTR_RO(node_type);  static
> > ssize_t sys_image_guid_show(struct device *device,
> >  				   struct device_attribute *dev_attr, char
> *buf)  {
> > -	struct ib_device *dev = container_of(device, struct ib_device, dev);
> > +	struct ib_device *dev = rdma_device_to_ibdev(device);
> >
> >  	return sprintf(buf, "%04x:%04x:%04x:%04x\n",
> >  		       be16_to_cpu(((__be16 *) &dev-
> >attrs.sys_image_guid)[0]), @@
> > -1219,7 +1219,7 @@ static DEVICE_ATTR_RO(sys_image_guid);  static
> > ssize_t node_guid_show(struct device *device,
> >  			      struct device_attribute *attr, char *buf)  {
> > -	struct ib_device *dev = container_of(device, struct ib_device, dev);
> > +	struct ib_device *dev = rdma_device_to_ibdev(device);
> >
> >  	return sprintf(buf, "%04x:%04x:%04x:%04x\n",
> >  		       be16_to_cpu(((__be16 *) &dev->node_guid)[0]), @@ -
> 1232,7
> > +1232,7 @@ static DEVICE_ATTR_RO(node_guid);  static ssize_t
> > node_desc_show(struct device *device,
> >  			      struct device_attribute *attr, char *buf)  {
> > -	struct ib_device *dev = container_of(device, struct ib_device, dev);
> > +	struct ib_device *dev = rdma_device_to_ibdev(device);
> >
> >  	return sprintf(buf, "%.64s\n", dev->node_desc);  } @@ -1241,7
> > +1241,7 @@ static ssize_t node_desc_store(struct device *device,
> >  			       struct device_attribute *attr,
> >  			       const char *buf, size_t count)  {
> > -	struct ib_device *dev = container_of(device, struct ib_device, dev);
> > +	struct ib_device *dev = rdma_device_to_ibdev(device);
> >  	struct ib_device_modify desc = {};
> >  	int ret;
> >
> > @@ -1260,7 +1260,7 @@ static DEVICE_ATTR_RW(node_desc);  static
> > ssize_t fw_ver_show(struct device *device, struct device_attribute *attr,
> >  			   char *buf)
> >  {
> > -	struct ib_device *dev = container_of(device, struct ib_device, dev);
> > +	struct ib_device *dev = rdma_device_to_ibdev(device);
> >
> >  	ib_get_device_fw_str(dev, buf);
> >  	strlcat(buf, "\n", IB_FW_VERSION_NAME_MAX); diff --git
> > a/drivers/infiniband/hw/bnxt_re/main.c
> > b/drivers/infiniband/hw/bnxt_re/main.c
> > index 31cbef57a19b..56ad4882f381 100644
> > +++ b/drivers/infiniband/hw/bnxt_re/main.c
> > @@ -538,7 +538,8 @@ static struct bnxt_en_dev
> > *bnxt_re_dev_probe(struct net_device *netdev)  static ssize_t
> hw_rev_show(struct device *device, struct device_attribute *attr,
> >  			   char *buf)
> >  {
> > -	struct bnxt_re_dev *rdev = to_bnxt_re_dev(device, ibdev.dev);
> > +	struct bnxt_re_dev *rdev =
> > +		rdma_device_to_drv_device(device, struct bnxt_re_dev,
> ibdev);
> >
> >  	return scnprintf(buf, PAGE_SIZE, "0x%x\n",
> > rdev->en_dev->pdev->vendor);  } @@ -547,7 +548,8 @@ static
> > DEVICE_ATTR_RO(hw_rev);  static ssize_t hca_type_show(struct device
> > *device,
> >  			     struct device_attribute *attr, char *buf)  {
> > -	struct bnxt_re_dev *rdev = to_bnxt_re_dev(device, ibdev.dev);
> > +	struct bnxt_re_dev *rdev =
> > +		rdma_device_to_drv_device(device, struct bnxt_re_dev,
> ibdev);
> >
> >  	return scnprintf(buf, PAGE_SIZE, "%s\n", rdev->ibdev.node_desc);  }
> > diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c
> > b/drivers/infiniband/hw/cxgb3/iwch_provider.c
> > index 7a1dc83ba588..a44d431a158a 100644
> > +++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
> > @@ -1130,8 +1130,9 @@ static int iwch_query_port(struct ib_device
> > *ibdev,  static ssize_t hw_rev_show(struct device *dev,
> >  			   struct device_attribute *attr, char *buf)  {
> > -	struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev,
> > -						 ibdev.dev);
> > +	struct iwch_dev *iwch_dev =
> > +			rdma_device_to_drv_device(dev, struct iwch_dev,
> ibdev);
> > +
> >  	pr_debug("%s dev 0x%p\n", __func__, dev);
> >  	return sprintf(buf, "%d\n", iwch_dev->rdev.t3cdev_p->type);  } @@
> > -1140,8 +1141,8 @@ static DEVICE_ATTR_RO(hw_rev);  static ssize_t
> > hca_type_show(struct device *dev,
> >  			     struct device_attribute *attr, char *buf)  {
> > -	struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev,
> > -						 ibdev.dev);
> > +	struct iwch_dev *iwch_dev =
> > +			rdma_device_to_drv_device(dev, struct iwch_dev,
> ibdev);
> >  	struct ethtool_drvinfo info;
> >  	struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev;
> >
> > @@ -1154,8 +1155,9 @@ static DEVICE_ATTR_RO(hca_type);  static ssize_t
> > board_id_show(struct device *dev,
> >  			     struct device_attribute *attr, char *buf)  {
> > -	struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev,
> > -						 ibdev.dev);
> > +	struct iwch_dev *iwch_dev =
> > +			rdma_device_to_drv_device(dev, struct iwch_dev,
> ibdev);
> > +
> >  	pr_debug("%s dev 0x%p\n", __func__, dev);
> >  	return sprintf(buf, "%x.%x\n", iwch_dev->rdev.rnic_info.pdev-
> >vendor,
> >  		       iwch_dev->rdev.rnic_info.pdev->device);
> > diff --git a/drivers/infiniband/hw/cxgb4/provider.c
> > b/drivers/infiniband/hw/cxgb4/provider.c
> > index 586b0c37481f..fd547e9cf21b 100644
> > +++ b/drivers/infiniband/hw/cxgb4/provider.c
> > @@ -376,8 +376,9 @@ static int c4iw_query_port(struct ib_device
> > *ibdev, u8 port,  static ssize_t hw_rev_show(struct device *dev,
> >  			   struct device_attribute *attr, char *buf)  {
> > -	struct c4iw_dev *c4iw_dev = container_of(dev, struct c4iw_dev,
> > -						 ibdev.dev);
> > +	struct c4iw_dev *c4iw_dev =
> > +			rdma_device_to_drv_device(dev, struct c4iw_dev,
> ibdev);
> > +
> >  	pr_debug("dev 0x%p\n", dev);
> >  	return sprintf(buf, "%d\n",
> >  		       CHELSIO_CHIP_RELEASE(c4iw_dev-
> >rdev.lldi.adapter_type));
> > @@ -387,8 +388,8 @@ static DEVICE_ATTR_RO(hw_rev);  static ssize_t
> > hca_type_show(struct device *dev,
> >  			     struct device_attribute *attr, char *buf)  {
> > -	struct c4iw_dev *c4iw_dev = container_of(dev, struct c4iw_dev,
> > -						 ibdev.dev);
> > +	struct c4iw_dev *c4iw_dev =
> > +			rdma_device_to_drv_device(dev, struct c4iw_dev,
> ibdev);
> >  	struct ethtool_drvinfo info;
> >  	struct net_device *lldev = c4iw_dev->rdev.lldi.ports[0];
> >
> > @@ -401,8 +402,9 @@ static DEVICE_ATTR_RO(hca_type);  static ssize_t
> > board_id_show(struct device *dev, struct device_attribute *attr,
> >  			     char *buf)
> >  {
> > -	struct c4iw_dev *c4iw_dev = container_of(dev, struct c4iw_dev,
> > -						 ibdev.dev);
> > +	struct c4iw_dev *c4iw_dev =
> > +			rdma_device_to_drv_device(dev, struct c4iw_dev,
> ibdev);
> > +
> >  	pr_debug("dev 0x%p\n", dev);
> >  	return sprintf(buf, "%x.%x\n", c4iw_dev->rdev.lldi.pdev->vendor,
> >  		       c4iw_dev->rdev.lldi.pdev->device);
> > diff --git a/drivers/infiniband/hw/hfi1/sysfs.c
> > b/drivers/infiniband/hw/hfi1/sysfs.c
> > index 2be513d4c9da..90f62c4bddba 100644
> > +++ b/drivers/infiniband/hw/hfi1/sysfs.c
> > @@ -498,7 +498,7 @@ static ssize_t hw_rev_show(struct device *device,
> struct device_attribute *attr,
> >  			   char *buf)
> >  {
> >  	struct hfi1_ibdev *dev =
> > -		container_of(device, struct hfi1_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct hfi1_ibdev,
> rdi.ibdev);
> >
> >  	return sprintf(buf, "%x\n", dd_from_dev(dev)->minrev);  } @@ -508,7
> > +508,7 @@ static ssize_t board_id_show(struct device *device,
> >  			     struct device_attribute *attr, char *buf)  {
> >  	struct hfi1_ibdev *dev =
> > -		container_of(device, struct hfi1_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct hfi1_ibdev,
> rdi.ibdev);
> >  	struct hfi1_devdata *dd = dd_from_dev(dev);
> >  	int ret;
> >
> > @@ -524,7 +524,7 @@ static ssize_t boardversion_show(struct device
> *device,
> >  				 struct device_attribute *attr, char *buf)  {
> >  	struct hfi1_ibdev *dev =
> > -		container_of(device, struct hfi1_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct hfi1_ibdev,
> rdi.ibdev);
> >  	struct hfi1_devdata *dd = dd_from_dev(dev);
> >
> >  	/* The string printed here is already newline-terminated. */ @@
> > -536,7 +536,7 @@ static ssize_t nctxts_show(struct device *device,
> >  			   struct device_attribute *attr, char *buf)  {
> >  	struct hfi1_ibdev *dev =
> > -		container_of(device, struct hfi1_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct hfi1_ibdev,
> rdi.ibdev);
> >  	struct hfi1_devdata *dd = dd_from_dev(dev);
> >
> >  	/*
> > @@ -555,7 +555,7 @@ static ssize_t nfreectxts_show(struct device *device,
> >  			       struct device_attribute *attr, char *buf)  {
> >  	struct hfi1_ibdev *dev =
> > -		container_of(device, struct hfi1_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct hfi1_ibdev,
> rdi.ibdev);
> >  	struct hfi1_devdata *dd = dd_from_dev(dev);
> >
> >  	/* Return the number of free user ports (contexts) available. */ @@
> > -567,7 +567,7 @@ static ssize_t serial_show(struct device *device,
> >  			   struct device_attribute *attr, char *buf)  {
> >  	struct hfi1_ibdev *dev =
> > -		container_of(device, struct hfi1_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct hfi1_ibdev,
> rdi.ibdev);
> >  	struct hfi1_devdata *dd = dd_from_dev(dev);
> >
> >  	return scnprintf(buf, PAGE_SIZE, "%s", dd->serial); @@ -579,7 +579,7
> > @@ static ssize_t chip_reset_store(struct device *device,
> >  				size_t count)
> >  {
> >  	struct hfi1_ibdev *dev =
> > -		container_of(device, struct hfi1_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct hfi1_ibdev,
> rdi.ibdev);
> >  	struct hfi1_devdata *dd = dd_from_dev(dev);
> >  	int ret;
> >
> > @@ -609,7 +609,7 @@ static ssize_t tempsense_show(struct device
> *device,
> >  			      struct device_attribute *attr, char *buf)  {
> >  	struct hfi1_ibdev *dev =
> > -		container_of(device, struct hfi1_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct hfi1_ibdev,
> rdi.ibdev);
> >  	struct hfi1_devdata *dd = dd_from_dev(dev);
> >  	struct hfi1_temp temp;
> >  	int ret;
> > diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.c
> > b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
> > index 9e42ac2db3ca..54ade0cfce50 100644
> > +++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
> > @@ -2140,9 +2140,8 @@ static int i40iw_dereg_mr(struct ib_mr *ib_mr)
> > static ssize_t hw_rev_show(struct device *dev,
> >  			   struct device_attribute *attr, char *buf)  {
> > -	struct i40iw_ib_device *iwibdev = container_of(dev,
> > -						       struct i40iw_ib_device,
> > -						       ibdev.dev);
> > +	struct i40iw_ib_device *iwibdev =
> > +		rdma_device_to_drv_device(dev, struct i40iw_ib_device,
> ibdev);
> >  	u32 hw_rev = iwibdev->iwdev->sc_dev.hw_rev;
> >
> >  	return sprintf(buf, "%x\n", hw_rev); diff --git
> > a/drivers/infiniband/hw/mlx4/main.c
> > b/drivers/infiniband/hw/mlx4/main.c
> > index 1f15ec3e2b83..5dbf1030098b 100644
> > +++ b/drivers/infiniband/hw/mlx4/main.c
> > @@ -2043,7 +2043,7 @@ static ssize_t hca_type_show(struct device
> *device,
> >  			     struct device_attribute *attr, char *buf)  {
> >  	struct mlx4_ib_dev *dev =
> > -		container_of(device, struct mlx4_ib_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mlx4_ib_dev,
> ib_dev);
> >  	return sprintf(buf, "MT%d\n", dev->dev->persist->pdev->device);  }
> > static DEVICE_ATTR_RO(hca_type); @@ -2052,7 +2052,7 @@ static ssize_t
> > hw_rev_show(struct device *device,
> >  			   struct device_attribute *attr, char *buf)  {
> >  	struct mlx4_ib_dev *dev =
> > -		container_of(device, struct mlx4_ib_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mlx4_ib_dev,
> ib_dev);
> >  	return sprintf(buf, "%x\n", dev->dev->rev_id);  }  static
> > DEVICE_ATTR_RO(hw_rev); @@ -2061,7 +2061,8 @@ static ssize_t
> > board_id_show(struct device *device,
> >  			     struct device_attribute *attr, char *buf)  {
> >  	struct mlx4_ib_dev *dev =
> > -		container_of(device, struct mlx4_ib_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mlx4_ib_dev,
> ib_dev);
> > +
> >  	return sprintf(buf, "%.*s\n", MLX4_BOARD_ID_LEN,
> >  		       dev->dev->board_id);
> >  }
> > diff --git a/drivers/infiniband/hw/mlx5/main.c
> > b/drivers/infiniband/hw/mlx5/main.c
> > index b2fd5c0fb761..4430f8ad9e67 100644
> > +++ b/drivers/infiniband/hw/mlx5/main.c
> > @@ -4106,7 +4106,7 @@ static ssize_t fw_pages_show(struct device
> *device,
> >  			     struct device_attribute *attr, char *buf)  {
> >  	struct mlx5_ib_dev *dev =
> > -		container_of(device, struct mlx5_ib_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mlx5_ib_dev,
> ib_dev);
> >
> >  	return sprintf(buf, "%d\n", dev->mdev->priv.fw_pages);  } @@ -
> 4116,7
> > +4116,7 @@ static ssize_t reg_pages_show(struct device *device,
> >  			      struct device_attribute *attr, char *buf)  {
> >  	struct mlx5_ib_dev *dev =
> > -		container_of(device, struct mlx5_ib_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mlx5_ib_dev,
> ib_dev);
> >
> >  	return sprintf(buf, "%d\n",
> > atomic_read(&dev->mdev->priv.reg_pages));
> >  }
> > @@ -4126,7 +4126,8 @@ static ssize_t hca_type_show(struct device
> *device,
> >  			     struct device_attribute *attr, char *buf)  {
> >  	struct mlx5_ib_dev *dev =
> > -		container_of(device, struct mlx5_ib_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mlx5_ib_dev,
> ib_dev);
> > +
> >  	return sprintf(buf, "MT%d\n", dev->mdev->pdev->device);  }  static
> > DEVICE_ATTR_RO(hca_type); @@ -4135,7 +4136,8 @@ static ssize_t
> > hw_rev_show(struct device *device,
> >  			   struct device_attribute *attr, char *buf)  {
> >  	struct mlx5_ib_dev *dev =
> > -		container_of(device, struct mlx5_ib_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mlx5_ib_dev,
> ib_dev);
> > +
> >  	return sprintf(buf, "%x\n", dev->mdev->rev_id);  }  static
> > DEVICE_ATTR_RO(hw_rev); @@ -4144,7 +4146,8 @@ static ssize_t
> > board_id_show(struct device *device,
> >  			     struct device_attribute *attr, char *buf)  {
> >  	struct mlx5_ib_dev *dev =
> > -		container_of(device, struct mlx5_ib_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mlx5_ib_dev,
> ib_dev);
> > +
> >  	return sprintf(buf, "%.*s\n", MLX5_BOARD_ID_LEN,
> >  		       dev->mdev->board_id);
> >  }
> > diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c
> > b/drivers/infiniband/hw/mthca/mthca_provider.c
> > index c697ec54ea5f..2153ec032749 100644
> > +++ b/drivers/infiniband/hw/mthca/mthca_provider.c
> > @@ -1080,7 +1080,8 @@ static ssize_t hw_rev_show(struct device *device,
> >  			   struct device_attribute *attr, char *buf)  {
> >  	struct mthca_dev *dev =
> > -		container_of(device, struct mthca_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mthca_dev,
> ib_dev);
> > +
> >  	return sprintf(buf, "%x\n", dev->rev_id);  }  static
> > DEVICE_ATTR_RO(hw_rev); @@ -1089,7 +1090,8 @@ static ssize_t
> > hca_type_show(struct device *device,
> >  			     struct device_attribute *attr, char *buf)  {
> >  	struct mthca_dev *dev =
> > -		container_of(device, struct mthca_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mthca_dev,
> ib_dev);
> > +
> >  	switch (dev->pdev->device) {
> >  	case PCI_DEVICE_ID_MELLANOX_TAVOR:
> >  		return sprintf(buf, "MT23108\n");
> > @@ -1110,7 +1112,8 @@ static ssize_t board_id_show(struct device
> *device,
> >  			     struct device_attribute *attr, char *buf)  {
> >  	struct mthca_dev *dev =
> > -		container_of(device, struct mthca_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct mthca_dev,
> ib_dev);
> > +
> >  	return sprintf(buf, "%.*s\n", MTHCA_BOARD_ID_LEN, dev-
> >board_id);  }
> > static DEVICE_ATTR_RO(board_id); diff --git
> > a/drivers/infiniband/hw/nes/nes_verbs.c
> > b/drivers/infiniband/hw/nes/nes_verbs.c
> > index f9d510431900..599e30a4c678 100644
> > +++ b/drivers/infiniband/hw/nes/nes_verbs.c
> > @@ -2560,7 +2560,7 @@ static ssize_t hw_rev_show(struct device *dev,
> >  			   struct device_attribute *attr, char *buf)  {
> >  	struct nes_ib_device *nesibdev =
> > -			container_of(dev, struct nes_ib_device, ibdev.dev);
> > +		rdma_device_to_drv_device(dev, struct nes_ib_device,
> ibdev);
> >  	struct nes_vnic *nesvnic = nesibdev->nesvnic;
> >
> >  	nes_debug(NES_DBG_INIT, "\n");
> > diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
> > b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
> > index 1f393842453a..0e8380ef3511 100644
> > +++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
> > @@ -118,7 +118,8 @@ static void get_dev_fw_str(struct ib_device
> > *device, char *str)  static ssize_t hw_rev_show(struct device *device,
> >  			   struct device_attribute *attr, char *buf)  {
> > -	struct ocrdma_dev *dev = dev_get_drvdata(device);
> > +	struct ocrdma_dev *dev =
> > +		rdma_device_to_drv_device(device, struct ocrdma_dev,
> ibdev);
> >
> >  	return scnprintf(buf, PAGE_SIZE, "0x%x\n",
> > dev->nic_info.pdev->vendor);  } @@ -127,7 +128,8 @@ static
> > DEVICE_ATTR_RO(hw_rev);  static ssize_t hca_type_show(struct device
> > *device,
> >  			     struct device_attribute *attr, char *buf)  {
> > -	struct ocrdma_dev *dev = dev_get_drvdata(device);
> > +	struct ocrdma_dev *dev =
> > +		rdma_device_to_drv_device(device, struct ocrdma_dev,
> ibdev);
> >
> >  	return scnprintf(buf, PAGE_SIZE, "%s\n", &dev->model_number[0]);  }
> > diff --git a/drivers/infiniband/hw/qedr/main.c
> > b/drivers/infiniband/hw/qedr/main.c
> > index 75940e2a8791..88be4144ccc7 100644
> > +++ b/drivers/infiniband/hw/qedr/main.c
> > @@ -137,7 +137,8 @@ static int qedr_iw_port_immutable(struct ib_device
> > *ibdev, u8 port_num,  static ssize_t hw_rev_show(struct device *device,
> struct device_attribute *attr,
> >  			   char *buf)
> >  {
> > -	struct qedr_dev *dev = dev_get_drvdata(device);
> > +	struct qedr_dev *dev =
> > +		rdma_device_to_drv_device(device, struct qedr_dev, ibdev);
> >
> >  	return scnprintf(buf, PAGE_SIZE, "0x%x\n", dev->pdev->vendor);  }
> > diff --git a/drivers/infiniband/hw/qib/qib_sysfs.c
> > b/drivers/infiniband/hw/qib/qib_sysfs.c
> > index 1cf4ca3f23e3..905206a0c2d5 100644
> > +++ b/drivers/infiniband/hw/qib/qib_sysfs.c
> > @@ -555,7 +555,7 @@ static ssize_t hw_rev_show(struct device *device,
> struct device_attribute *attr,
> >  			   char *buf)
> >  {
> >  	struct qib_ibdev *dev =
> > -		container_of(device, struct qib_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct qib_ibdev,
> rdi.ibdev);
> >
> >  	return sprintf(buf, "%x\n", dd_from_dev(dev)->minrev);  } @@ -565,7
> > +565,7 @@ static ssize_t hca_type_show(struct device *device,
> >  			     struct device_attribute *attr, char *buf)  {
> >  	struct qib_ibdev *dev =
> > -		container_of(device, struct qib_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct qib_ibdev,
> rdi.ibdev);
> >  	struct qib_devdata *dd = dd_from_dev(dev);
> >  	int ret;
> >
> > @@ -590,7 +590,7 @@ static ssize_t boardversion_show(struct device
> *device,
> >  				 struct device_attribute *attr, char *buf)  {
> >  	struct qib_ibdev *dev =
> > -		container_of(device, struct qib_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct qib_ibdev,
> rdi.ibdev);
> >  	struct qib_devdata *dd = dd_from_dev(dev);
> >
> >  	/* The string printed here is already newline-terminated. */ @@
> > -602,7 +602,7 @@ static ssize_t localbus_info_show(struct device *device,
> >  				  struct device_attribute *attr, char *buf)  {
> >  	struct qib_ibdev *dev =
> > -		container_of(device, struct qib_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct qib_ibdev,
> rdi.ibdev);
> >  	struct qib_devdata *dd = dd_from_dev(dev);
> >
> >  	/* The string printed here is already newline-terminated. */ @@
> > -614,7 +614,7 @@ static ssize_t nctxts_show(struct device *device,
> >  			   struct device_attribute *attr, char *buf)  {
> >  	struct qib_ibdev *dev =
> > -		container_of(device, struct qib_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct qib_ibdev,
> rdi.ibdev);
> >  	struct qib_devdata *dd = dd_from_dev(dev);
> >
> >  	/* Return the number of user ports (contexts) available. */ @@
> > -630,7 +630,7 @@ static ssize_t nfreectxts_show(struct device *device,
> >  			       struct device_attribute *attr, char *buf)  {
> >  	struct qib_ibdev *dev =
> > -		container_of(device, struct qib_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct qib_ibdev,
> rdi.ibdev);
> >  	struct qib_devdata *dd = dd_from_dev(dev);
> >
> >  	/* Return the number of free user ports (contexts) available. */ @@
> > -642,7 +642,7 @@ static ssize_t serial_show(struct device *device,
> >  			   struct device_attribute *attr, char *buf)  {
> >  	struct qib_ibdev *dev =
> > -		container_of(device, struct qib_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct qib_ibdev,
> rdi.ibdev);
> >  	struct qib_devdata *dd = dd_from_dev(dev);
> >
> >  	buf[sizeof(dd->serial)] = '\0';
> > @@ -657,7 +657,7 @@ static ssize_t chip_reset_store(struct device
> *device,
> >  				size_t count)
> >  {
> >  	struct qib_ibdev *dev =
> > -		container_of(device, struct qib_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct qib_ibdev,
> rdi.ibdev);
> >  	struct qib_devdata *dd = dd_from_dev(dev);
> >  	int ret;
> >
> > @@ -679,7 +679,7 @@ static ssize_t tempsense_show(struct device
> *device,
> >  			      struct device_attribute *attr, char *buf)  {
> >  	struct qib_ibdev *dev =
> > -		container_of(device, struct qib_ibdev, rdi.ibdev.dev);
> > +		rdma_device_to_drv_device(device, struct qib_ibdev,
> rdi.ibdev);
> >  	struct qib_devdata *dd = dd_from_dev(dev);
> >  	int ret;
> >  	int idx;
> > diff --git a/drivers/infiniband/hw/usnic/usnic_ib_sysfs.c
> > b/drivers/infiniband/hw/usnic/usnic_ib_sysfs.c
> > index a7e4b2ccfaf8..c85d48ae7442 100644
> > +++ b/drivers/infiniband/hw/usnic/usnic_ib_sysfs.c
> > @@ -50,7 +50,7 @@ static ssize_t board_id_show(struct device *device,
> >  			     struct device_attribute *attr, char *buf)  {
> >  	struct usnic_ib_dev *us_ibdev =
> > -		container_of(device, struct usnic_ib_dev, ib_dev.dev);
> > +		rdma_device_to_drv_device(device, struct usnic_ib_dev,
> ib_dev);
> >  	unsigned short subsystem_device_id;
> >
> >  	mutex_lock(&us_ibdev->usdev_lock);
> > @@ -67,14 +67,13 @@ static DEVICE_ATTR_RO(board_id);  static ssize_t
> > config_show(struct device *device, struct device_attribute *attr, char
> > *buf)  {
> > -	struct usnic_ib_dev *us_ibdev;
> > +	struct usnic_ib_dev *us_ibdev =
> > +		rdma_device_to_drv_device(device, struct usnic_ib_dev,
> ib_dev);
> >  	char *ptr;
> >  	unsigned left;
> >  	unsigned n;
> >  	enum usnic_vnic_res_type res_type;
> >
> > -	us_ibdev = container_of(device, struct usnic_ib_dev, ib_dev.dev);
> > -
> >  	/* Buffer space limit is 1 page */
> >  	ptr = buf;
> >  	left = PAGE_SIZE;
> > @@ -130,9 +129,8 @@ static DEVICE_ATTR_RO(config);  static ssize_t
> > iface_show(struct device *device, struct device_attribute *attr, char
> > *buf)  {
> > -	struct usnic_ib_dev *us_ibdev;
> > -
> > -	us_ibdev = container_of(device, struct usnic_ib_dev, ib_dev.dev);
> > +	struct usnic_ib_dev *us_ibdev =
> > +		rdma_device_to_drv_device(device, struct usnic_ib_dev,
> ib_dev);
> >
> >  	return scnprintf(buf, PAGE_SIZE, "%s\n",
> >  			netdev_name(us_ibdev->netdev));
> > @@ -142,9 +140,8 @@ static DEVICE_ATTR_RO(iface);  static ssize_t
> > max_vf_show(struct device *device, struct device_attribute *attr, char
> > *buf)  {
> > -	struct usnic_ib_dev *us_ibdev;
> > -
> > -	us_ibdev = container_of(device, struct usnic_ib_dev, ib_dev.dev);
> > +	struct usnic_ib_dev *us_ibdev =
> > +		rdma_device_to_drv_device(device, struct usnic_ib_dev,
> ib_dev);
> >
> >  	return scnprintf(buf, PAGE_SIZE, "%u\n",
> >  			kref_read(&us_ibdev->vf_cnt));
> > @@ -154,10 +151,10 @@ static DEVICE_ATTR_RO(max_vf);  static ssize_t
> > qp_per_vf_show(struct device *device, struct device_attribute *attr,
> > char *buf)  {
> > -	struct usnic_ib_dev *us_ibdev;
> > +	struct usnic_ib_dev *us_ibdev =
> > +		rdma_device_to_drv_device(device, struct usnic_ib_dev,
> ib_dev);
> >  	int qp_per_vf;
> >
> > -	us_ibdev = container_of(device, struct usnic_ib_dev, ib_dev.dev);
> >  	qp_per_vf = max(us_ibdev->vf_res_cnt[USNIC_VNIC_RES_TYPE_WQ],
> >  			us_ibdev->vf_res_cnt[USNIC_VNIC_RES_TYPE_RQ]);
> >
> > @@ -169,9 +166,8 @@ static DEVICE_ATTR_RO(qp_per_vf);  static ssize_t
> > cq_per_vf_show(struct device *device, struct device_attribute *attr,
> > char *buf)  {
> > -	struct usnic_ib_dev *us_ibdev;
> > -
> > -	us_ibdev = container_of(device, struct usnic_ib_dev, ib_dev.dev);
> > +	struct usnic_ib_dev *us_ibdev =
> > +		rdma_device_to_drv_device(device, struct usnic_ib_dev,
> ib_dev);
> >
> >  	return scnprintf(buf, PAGE_SIZE, "%d\n",
> >  			us_ibdev->vf_res_cnt[USNIC_VNIC_RES_TYPE_CQ]);
> > diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c
> > b/drivers/infiniband/sw/rxe/rxe_verbs.c
> > index ecd0824b7eac..a8f5c6131bdc 100644
> > +++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
> > @@ -1128,8 +1128,8 @@ static int rxe_detach_mcast(struct ib_qp *ibqp,
> > union ib_gid *mgid, u16 mlid)  static ssize_t parent_show(struct device
> *device,
> >  			   struct device_attribute *attr, char *buf)  {
> > -	struct rxe_dev *rxe = container_of(device, struct rxe_dev,
> > -					   ib_dev.dev);
> > +	struct rxe_dev *rxe =
> > +		rdma_device_to_drv_device(device, struct rxe_dev, ib_dev);
> >
> >  	return snprintf(buf, 16, "%s\n", rxe_parent_name(rxe, 1));  } diff
> > --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index
> > 0ec15d673d92..5531a13d06b1 100644
> > +++ b/include/rdma/ib_verbs.h
> > @@ -4225,4 +4225,26 @@ rdma_set_device_sysfs_group(struct ib_device
> *dev,
> >  	dev->groups[1] = group;
> >  }
> >
> > +/**
> > + * rdma_device_to_ibdev - Get ib_device pointer from device pointer
> > + *
> > + * @device:	device pointer for which ib_device pointer to retrieve
> > + *
> > + * rdma_device_to_ibdev() retrieves ib_device pointer from device.
> > + *
> > + * NOTE: New drivers should not make use of this API; This API is
> > +only for
> > + * existing drivers who have exposed sysfs entries using
> > + * rdma_set_device_sysfs_group().
> 
> Comment belongs rdma_device_to_drv_device
> 
> > + */
> > +static inline struct ib_device *rdma_device_to_ibdev(struct device
> > +*device) {
> > +	return dev_get_drvdata(device);
> 
> This should use container_of like the majority of the call sites it is replacing.
> 
> I made these changes and applied this as these wrappers are a helpful stand
> alone improvement.
> 
Ok. thanks. If you took this patch, than same patch should have below change as well, which I cleaned up in a later patch.

index 8872453..d014717 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -296,8 +296,6 @@ struct ib_device *ib_alloc_device(size_t size)
        device->dev.class = &ib_class;
        device_initialize(&device->dev);

-   dev_set_drvdata(&device->dev, device);
-

> Can you check again that this got all the required driver call sites on the
> latest tree?
> 
Yes. I checked in for-next branch in https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git.
This patch is fine.




[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