Re: [PATCH rdma-next 5/5] IB: Query port through the core instead of directly calling the driver handler

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

 



On Thu, Jan 19, 2017 at 07:41:02AM +0200, Leon Romanovsky wrote:
> From: Or Gerlitz <ogerlitz@xxxxxxxxxxxx>
> 
> Change the drivers to call ib_query_port in their get port
> immutable handler instead of their own query port handler.
> 
> Doing this required to set the core cap flags of this device
> before the ib_query_port call is made, since the IB core might
> need these caps to serve the port query.
> 
> Drivers are ensured by the IB core that the port attributes passed
> to the port query verb implementation are zero, and hence we
> removed the zeroing from the drivers.
> 
> This patch doesn't add any new functionality.
> 
> Signed-off-by: Or Gerlitz <ogerlitz@xxxxxxxxxxxx>
> Reviewed-by: Matan Barak <matanb@xxxxxxxxxxxx>
> Signed-off-by: Leon Romanovsky <leon@xxxxxxxxxx>
> ---
>  drivers/infiniband/hw/cxgb3/iwch_provider.c     |  7 ++++---
>  drivers/infiniband/hw/cxgb4/provider.c          |  8 ++++----
>  drivers/infiniband/hw/hfi1/verbs.c              |  1 +
>  drivers/infiniband/hw/hns/hns_roce_main.c       |  7 ++++---
>  drivers/infiniband/hw/i40iw/i40iw_verbs.c       |  8 ++++----
>  drivers/infiniband/hw/mlx4/alias_GUID.c         |  1 +
>  drivers/infiniband/hw/mlx4/main.c               | 18 +++++++++---------
>  drivers/infiniband/hw/mlx4/sysfs.c              |  1 +
>  drivers/infiniband/hw/mlx5/mad.c                |  2 +-
>  drivers/infiniband/hw/mlx5/main.c               | 11 +++++++----
>  drivers/infiniband/hw/mthca/mthca_provider.c    |  9 +++++----
>  drivers/infiniband/hw/nes/nes_verbs.c           |  5 +++--
>  drivers/infiniband/hw/ocrdma/ocrdma_main.c      |  9 +++++----
>  drivers/infiniband/hw/ocrdma/ocrdma_verbs.c     |  1 +
>  drivers/infiniband/hw/qedr/verbs.c              |  9 +++++----
>  drivers/infiniband/hw/qib/qib_verbs.c           |  1 +
>  drivers/infiniband/hw/usnic/usnic_ib_main.c     |  5 +++--
>  drivers/infiniband/hw/usnic/usnic_ib_verbs.c    |  2 +-
>  drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c  |  5 +++--
>  drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c |  4 ++--
>  drivers/infiniband/sw/rdmavt/vt.c               |  7 ++++---
>  drivers/infiniband/sw/rxe/rxe_verbs.c           |  6 ++++--
>  22 files changed, 73 insertions(+), 54 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c
> index 9d5fe18..9e39252 100644
> --- a/drivers/infiniband/hw/cxgb3/iwch_provider.c
> +++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c
> @@ -1133,7 +1133,7 @@ static int iwch_query_port(struct ib_device *ibdev,
>  	dev = to_iwch_dev(ibdev);
>  	netdev = dev->rdev.port_info.lldevs[port-1];
>  
> -	memset(props, 0, sizeof(struct ib_port_attr));
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  	props->max_mtu = IB_MTU_4096;
>  	if (netdev->mtu >= 4096)
>  		props->active_mtu = IB_MTU_4096;
> @@ -1338,13 +1338,14 @@ static int iwch_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	struct ib_port_attr attr;
>  	int err;
>  
> -	err = iwch_query_port(ibdev, port_num, &attr);
> +	immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
>  	if (err)
>  		return err;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
> -	immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
>  
>  	return 0;
>  }
> diff --git a/drivers/infiniband/hw/cxgb4/provider.c b/drivers/infiniband/hw/cxgb4/provider.c
> index 49b51b7..5b00b50a 100644
> --- a/drivers/infiniband/hw/cxgb4/provider.c
> +++ b/drivers/infiniband/hw/cxgb4/provider.c
> @@ -358,8 +358,7 @@ static int c4iw_query_port(struct ib_device *ibdev, u8 port,
>  
>  	dev = to_c4iw_dev(ibdev);
>  	netdev = dev->rdev.lldi.ports[port-1];
> -
> -	memset(props, 0, sizeof(struct ib_port_attr));
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  	props->max_mtu = IB_MTU_4096;
>  	if (netdev->mtu >= 4096)
>  		props->active_mtu = IB_MTU_4096;
> @@ -505,13 +504,14 @@ static int c4iw_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	struct ib_port_attr attr;
>  	int err;
>  
> -	err = c4iw_query_port(ibdev, port_num, &attr);
> +	immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
>  	if (err)
>  		return err;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
> -	immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
>  
>  	return 0;
>  }
> diff --git a/drivers/infiniband/hw/hfi1/verbs.c b/drivers/infiniband/hw/hfi1/verbs.c
> index 95ed4d6..f2d4e04 100644
> --- a/drivers/infiniband/hw/hfi1/verbs.c
> +++ b/drivers/infiniband/hw/hfi1/verbs.c
> @@ -1384,6 +1384,7 @@ static int query_port(struct rvt_dev_info *rdi, u8 port_num,
>  	struct hfi1_pportdata *ppd = &dd->pport[port_num - 1];
>  	u16 lid = ppd->lid;
>  
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  	props->lid = lid ? lid : 0;
>  	props->lmc = ppd->lmc;
>  	/* OPA logical states match IB logical states */
> diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c
> index 4953d9c..7be8158 100644
> --- a/drivers/infiniband/hw/hns/hns_roce_main.c
> +++ b/drivers/infiniband/hw/hns/hns_roce_main.c
> @@ -249,7 +249,7 @@ static int hns_roce_query_port(struct ib_device *ib_dev, u8 port_num,
>  	assert(port_num > 0);
>  	port = port_num - 1;
>  
> -	memset(props, 0, sizeof(*props));
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  
>  	props->max_mtu = hr_dev->caps.max_mtu;
>  	props->gid_tbl_len = hr_dev->caps.gid_table_len[port];
> @@ -400,14 +400,15 @@ static int hns_roce_port_immutable(struct ib_device *ib_dev, u8 port_num,
>  	struct ib_port_attr attr;
>  	int ret;
>  
> -	ret = hns_roce_query_port(ib_dev, port_num, &attr);
> +	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE;
> +
> +	ret = ib_query_port(ib_dev, port_num, &attr);
>  	if (ret)
>  		return ret;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
>  
> -	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE;
>  	immutable->max_mad_size = IB_MGMT_MAD_SIZE;
>  
>  	return 0;
> diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.c b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
> index 29e97df..3e83048 100644
> --- a/drivers/infiniband/hw/i40iw/i40iw_verbs.c
> +++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
> @@ -97,8 +97,7 @@ static int i40iw_query_port(struct ib_device *ibdev,
>  	struct i40iw_device *iwdev = to_iwdev(ibdev);
>  	struct net_device *netdev = iwdev->netdev;
>  
> -	memset(props, 0, sizeof(*props));
> -
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  	props->max_mtu = IB_MTU_4096;
>  	if (netdev->mtu >= 4096)
>  		props->active_mtu = IB_MTU_4096;
> @@ -2506,14 +2505,15 @@ static int i40iw_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	struct ib_port_attr attr;
>  	int err;
>  
> -	err = i40iw_query_port(ibdev, port_num, &attr);
> +	immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
>  
>  	if (err)
>  		return err;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
> -	immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
>  
>  	return 0;
>  }
> diff --git a/drivers/infiniband/hw/mlx4/alias_GUID.c b/drivers/infiniband/hw/mlx4/alias_GUID.c
> index 06020c5..4648374 100644
> --- a/drivers/infiniband/hw/mlx4/alias_GUID.c
> +++ b/drivers/infiniband/hw/mlx4/alias_GUID.c
> @@ -499,6 +499,7 @@ static int set_guid_rec(struct ib_device *ibdev,
>  	struct list_head *head =
>  		&dev->sriov.alias_guid.ports_guid[port - 1].cb_list;
>  
> +	memset(&attr, 0, sizeof(struct ib_port_attr));
>  	err = __mlx4_ib_query_port(ibdev, port, &attr, 1);

So why not call ib_query_port here as opposed to driver handler? As stated in your subject line.

>  	if (err) {
>  		pr_debug("mlx4_ib_query_port failed (err: %d), port: %d\n",
> diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
> index 7019b94..646dcbf 100644
> --- a/drivers/infiniband/hw/mlx4/main.c
> +++ b/drivers/infiniband/hw/mlx4/main.c
> @@ -741,7 +741,7 @@ int __mlx4_ib_query_port(struct ib_device *ibdev, u8 port,
>  {
>  	int err;
>  
> -	memset(props, 0, sizeof *props);
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  
>  	err = mlx4_ib_port_link_layer(ibdev, port) == IB_LINK_LAYER_INFINIBAND ?
>  		ib_link_query_port(ibdev, port, props, netw_view) :
> @@ -1014,7 +1014,7 @@ static int mlx4_ib_modify_port(struct ib_device *ibdev, u8 port, int mask,
>  
>  	mutex_lock(&mdev->cap_mask_mutex);
>  
> -	err = mlx4_ib_query_port(ibdev, port, &attr);
> +	err = ib_query_port(ibdev, port, &attr);
>  	if (err)
>  		goto out;
>  
> @@ -2527,13 +2527,6 @@ static int mlx4_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	struct mlx4_ib_dev *mdev = to_mdev(ibdev);
>  	int err;
>  
> -	err = mlx4_ib_query_port(ibdev, port_num, &attr);
> -	if (err)
> -		return err;
> -
> -	immutable->pkey_tbl_len = attr.pkey_tbl_len;
> -	immutable->gid_tbl_len = attr.gid_tbl_len;
> -
>  	if (mlx4_ib_port_link_layer(ibdev, port_num) == IB_LINK_LAYER_INFINIBAND) {
>  		immutable->core_cap_flags = RDMA_CORE_PORT_IBA_IB;
>  		immutable->max_mad_size = IB_MGMT_MAD_SIZE;
> @@ -2549,6 +2542,13 @@ static int mlx4_port_immutable(struct ib_device *ibdev, u8 port_num,
>  			immutable->max_mad_size = IB_MGMT_MAD_SIZE;
>  	}
>  
> +	err = ib_query_port(ibdev, port_num, &attr);
> +	if (err)
> +		return err;
> +
> +	immutable->pkey_tbl_len = attr.pkey_tbl_len;
> +	immutable->gid_tbl_len = attr.gid_tbl_len;
> +
>  	return 0;
>  }
>  
> diff --git a/drivers/infiniband/hw/mlx4/sysfs.c b/drivers/infiniband/hw/mlx4/sysfs.c
> index 69fb5ba..5835165 100644
> --- a/drivers/infiniband/hw/mlx4/sysfs.c
> +++ b/drivers/infiniband/hw/mlx4/sysfs.c
> @@ -226,6 +226,7 @@ static int add_port_entries(struct mlx4_ib_dev *device, int port_num)
>  	int ret = 0 ;
>  	struct ib_port_attr attr;
>  
> +	memset(&attr, 0, sizeof(struct ib_port_attr));
>  	/* get the physical gid and pkey table sizes.*/
>  	ret = __mlx4_ib_query_port(&device->ib_dev, port_num, &attr, 1);

Ditto as previous comment.


>  	if (ret)
> diff --git a/drivers/infiniband/hw/mlx5/mad.c b/drivers/infiniband/hw/mlx5/mad.c
> index 39e5848..4e58b8f 100644
> --- a/drivers/infiniband/hw/mlx5/mad.c
> +++ b/drivers/infiniband/hw/mlx5/mad.c
> @@ -515,7 +515,7 @@ int mlx5_query_mad_ifc_port(struct ib_device *ibdev, u8 port,
>  	if (!in_mad || !out_mad)
>  		goto out;
>  
> -	memset(props, 0, sizeof(*props));
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  
>  	init_query_mad(in_mad);
>  	in_mad->attr_id  = IB_SMP_ATTR_PORT_INFO;
> diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
> index 4e8e78f..176417b 100644
> --- a/drivers/infiniband/hw/mlx5/main.c
> +++ b/drivers/infiniband/hw/mlx5/main.c
> @@ -174,7 +174,7 @@ static int mlx5_query_port_roce(struct ib_device *device, u8 port_num,
>  	enum ib_mtu ndev_ib_mtu;
>  	u16 qkey_viol_cntr;
>  
> -	memset(props, 0, sizeof(*props));
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  
>  	props->port_cap_flags  |= IB_PORT_CM_SUP;
>  	props->port_cap_flags  |= IB_PORT_IP_BASED_GIDS;
> @@ -830,7 +830,7 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port,
>  		goto out;
>  	}
>  
> -	memset(props, 0, sizeof(*props));
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  
>  	err = mlx5_query_hca_vport_context(mdev, 0, port, 0, rep);
>  	if (err)
> @@ -978,7 +978,7 @@ static int mlx5_ib_modify_port(struct ib_device *ibdev, u8 port, int mask,
>  
>  	mutex_lock(&dev->cap_mask_mutex);
>  
> -	err = mlx5_ib_query_port(ibdev, port, &attr);
> +	err = ib_query_port(ibdev, port, &attr);
>  	if (err)
>  		goto out;
>  
> @@ -2564,6 +2564,7 @@ static int get_port_caps(struct mlx5_ib_dev *dev)
>  	}
>  
>  	for (port = 1; port <= MLX5_CAP_GEN(dev->mdev, num_ports); port++) {
> +		memset(pprops, 0, sizeof(struct ib_port_attr));
>  		err = mlx5_ib_query_port(&dev->ib_dev, port, pprops);
>  		if (err) {
>  			mlx5_ib_warn(dev, "query_port %d failed %d\n",
> @@ -2883,7 +2884,9 @@ static int mlx5_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	enum rdma_link_layer ll = mlx5_ib_port_link_layer(ibdev, port_num);
>  	int err;
>  
> -	err = mlx5_ib_query_port(ibdev, port_num, &attr);
> +	immutable->core_cap_flags = get_core_cap_flags(ibdev);
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
>  	if (err)
>  		return err;
>  
> diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c
> index d317087..ce16318 100644
> --- a/drivers/infiniband/hw/mthca/mthca_provider.c
> +++ b/drivers/infiniband/hw/mthca/mthca_provider.c
> @@ -146,7 +146,7 @@ static int mthca_query_port(struct ib_device *ibdev,
>  	if (!in_mad || !out_mad)
>  		goto out;
>  
> -	memset(props, 0, sizeof *props);
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  
>  	init_query_mad(in_mad);
>  	in_mad->attr_id  = IB_SMP_ATTR_PORT_INFO;
> @@ -212,7 +212,7 @@ static int mthca_modify_port(struct ib_device *ibdev,
>  	if (mutex_lock_interruptible(&to_mdev(ibdev)->cap_mask_mutex))
>  		return -ERESTARTSYS;
>  
> -	err = mthca_query_port(ibdev, port, &attr);
> +	err = ib_query_port(ibdev, port, &attr);
>  	if (err)
>  		goto out;
>  
> @@ -1166,13 +1166,14 @@ static int mthca_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	struct ib_port_attr attr;
>  	int err;
>  
> -	err = mthca_query_port(ibdev, port_num, &attr);
> +	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_IB;
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
>  	if (err)
>  		return err;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
> -	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_IB;
>  	immutable->max_mad_size = IB_MGMT_MAD_SIZE;
>  
>  	return 0;
> diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
> index aff9fb1..b7179f4 100644
> --- a/drivers/infiniband/hw/nes/nes_verbs.c
> +++ b/drivers/infiniband/hw/nes/nes_verbs.c
> @@ -475,7 +475,7 @@ static int nes_query_port(struct ib_device *ibdev, u8 port, struct ib_port_attr
>  	struct nes_vnic *nesvnic = to_nesvnic(ibdev);
>  	struct net_device *netdev = nesvnic->netdev;
>  
> -	memset(props, 0, sizeof(*props));
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  
>  	props->max_mtu = IB_MTU_4096;
>  
> @@ -3670,13 +3670,14 @@ static int nes_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	struct ib_port_attr attr;
>  	int err;
>  
> +	immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
> +
>  	err = nes_query_port(ibdev, port_num, &attr);
>  	if (err)
>  		return err;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
> -	immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
>  
>  	return 0;
>  }
> diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
> index 8960715..3e43bdc 100644
> --- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
> +++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
> @@ -93,15 +93,16 @@ static int ocrdma_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	int err;
>  
>  	dev = get_ocrdma_dev(ibdev);
> -	err = ocrdma_query_port(ibdev, port_num, &attr);
> +	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE;
> +	if (ocrdma_is_udp_encap_supported(dev))
> +		immutable->core_cap_flags |= RDMA_CORE_CAP_PROT_ROCE_UDP_ENCAP;
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
>  	if (err)
>  		return err;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
> -	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE;
> -	if (ocrdma_is_udp_encap_supported(dev))
> -		immutable->core_cap_flags |= RDMA_CORE_CAP_PROT_ROCE_UDP_ENCAP;
>  	immutable->max_mad_size = IB_MGMT_MAD_SIZE;
>  
>  	return 0;
> diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
> index 6af44f8..013d15c 100644
> --- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
> +++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
> @@ -210,6 +210,7 @@ int ocrdma_query_port(struct ib_device *ibdev,
>  	struct ocrdma_dev *dev;
>  	struct net_device *netdev;
>  
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  	dev = get_ocrdma_dev(ibdev);
>  	if (port > 1) {
>  		pr_err("%s(%d) invalid_port=0x%x\n", __func__,
> diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
> index 57c8de2..91a16d3 100644
> --- a/drivers/infiniband/hw/qedr/verbs.c
> +++ b/drivers/infiniband/hw/qedr/verbs.c
> @@ -238,8 +238,8 @@ int qedr_query_port(struct ib_device *ibdev, u8 port, struct ib_port_attr *attr)
>  	}
>  
>  	rdma_port = dev->ops->rdma_query_port(dev->rdma_ctx);
> -	memset(attr, 0, sizeof(*attr));
>  
> +	/* *attr being zeroed by the caller, avoid zeroing it here */
>  	if (rdma_port->port_state == QED_RDMA_PORT_UP) {
>  		attr->state = IB_PORT_ACTIVE;
>  		attr->phys_state = 5;
> @@ -3549,14 +3549,15 @@ int qedr_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	struct ib_port_attr attr;
>  	int err;
>  
> -	err = qedr_query_port(ibdev, port_num, &attr);
> +	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE |
> +				    RDMA_CORE_PORT_IBA_ROCE_UDP_ENCAP;
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
>  	if (err)
>  		return err;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
> -	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE |
> -				    RDMA_CORE_PORT_IBA_ROCE_UDP_ENCAP;
>  	immutable->max_mad_size = IB_MGMT_MAD_SIZE;
>  
>  	return 0;
> diff --git a/drivers/infiniband/hw/qib/qib_verbs.c b/drivers/infiniband/hw/qib/qib_verbs.c
> index 4b54c0d..9161574 100644
> --- a/drivers/infiniband/hw/qib/qib_verbs.c
> +++ b/drivers/infiniband/hw/qib/qib_verbs.c
> @@ -1303,6 +1303,7 @@ static int qib_query_port(struct rvt_dev_info *rdi, u8 port_num,
>  	enum ib_mtu mtu;
>  	u16 lid = ppd->lid;
>  
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  	props->lid = lid ? lid : be16_to_cpu(IB_LID_PERMISSIVE);
>  	props->lmc = ppd->lmc;
>  	props->state = dd->f_iblink_state(ppd->lastibcstat);
> diff --git a/drivers/infiniband/hw/usnic/usnic_ib_main.c b/drivers/infiniband/hw/usnic/usnic_ib_main.c
> index dde0b23..4f5a45d 100644
> --- a/drivers/infiniband/hw/usnic/usnic_ib_main.c
> +++ b/drivers/infiniband/hw/usnic/usnic_ib_main.c
> @@ -321,11 +321,12 @@ static int usnic_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	struct ib_port_attr attr;
>  	int err;
>  
> -	err = usnic_ib_query_port(ibdev, port_num, &attr);
> +	immutable->core_cap_flags = RDMA_CORE_PORT_USNIC;
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
>  	if (err)
>  		return err;
>  
> -	immutable->core_cap_flags = RDMA_CORE_PORT_USNIC;
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
>  
> diff --git a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
> index 74819a7..0ba274f 100644
> --- a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
> +++ b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
> @@ -330,7 +330,7 @@ int usnic_ib_query_port(struct ib_device *ibdev, u8 port,
>  
>  	mutex_lock(&us_ibdev->usdev_lock);
>  	__ethtool_get_link_ksettings(us_ibdev->netdev, &cmd);
> -	memset(props, 0, sizeof(*props));
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  
>  	props->lid = 0;
>  	props->lmc = 1;
> diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
> index 231a1ce..b8b0081 100644
> --- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
> +++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c
> @@ -132,13 +132,14 @@ static int pvrdma_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	struct ib_port_attr attr;
>  	int err;
>  
> -	err = pvrdma_query_port(ibdev, port_num, &attr);
> +	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE;
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
>  	if (err)
>  		return err;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
> -	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE;
>  	immutable->max_mad_size = IB_MGMT_MAD_SIZE;
>  	return 0;
>  }
> diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c
> index 5489137..b3a982b 100644
> --- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c
> +++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c
> @@ -135,7 +135,7 @@ int pvrdma_query_port(struct ib_device *ibdev, u8 port,
>  		return err;
>  	}
>  
> -	memset(props, 0, sizeof(*props));
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  
>  	props->state = pvrdma_port_state_to_ib(resp->attrs.state);
>  	props->max_mtu = pvrdma_mtu_to_ib(resp->attrs.max_mtu);
> @@ -275,7 +275,7 @@ int pvrdma_modify_port(struct ib_device *ibdev, u8 port, int mask,
>  	}
>  
>  	mutex_lock(&vdev->port_mutex);
> -	ret = pvrdma_query_port(ibdev, port, &attr);
> +	ret = ib_query_port(ibdev, port, &attr);
>  	if (ret)
>  		goto out;
>  
> diff --git a/drivers/infiniband/sw/rdmavt/vt.c b/drivers/infiniband/sw/rdmavt/vt.c
> index d430c2f..1165639 100644
> --- a/drivers/infiniband/sw/rdmavt/vt.c
> +++ b/drivers/infiniband/sw/rdmavt/vt.c
> @@ -165,7 +165,7 @@ static int rvt_query_port(struct ib_device *ibdev, u8 port_num,
>  		return -EINVAL;
>  
>  	rvp = rdi->ports[port_index];
> -	memset(props, 0, sizeof(*props));
> +	/* props being zeroed by the caller, avoid zeroing it here */
>  	props->sm_lid = rvp->sm_lid;
>  	props->sm_sl = rvp->sm_sl;
>  	props->port_cap_flags = rvp->port_cap_flags;
> @@ -326,13 +326,14 @@ static int rvt_get_port_immutable(struct ib_device *ibdev, u8 port_num,
>  	if (port_index < 0)
>  		return -EINVAL;
>  
> -	err = rvt_query_port(ibdev, port_num, &attr);
> +	immutable->core_cap_flags = rdi->dparms.core_cap_flags;
> +
> +	err = ib_query_port(ibdev, port_num, &attr);
>  	if (err)
>  		return err;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
> -	immutable->core_cap_flags = rdi->dparms.core_cap_flags;
>  	immutable->max_mad_size = rdi->dparms.max_mad_size;
>  
>  	return 0;
> diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
> index beb7021..371ef3b 100644
> --- a/drivers/infiniband/sw/rxe/rxe_verbs.c
> +++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
> @@ -86,6 +86,7 @@ static int rxe_query_port(struct ib_device *dev,
>  
>  	port = &rxe->port;
>  
> +	/* *attr being zeroed by the caller, avoid zeroing it here */
>  	*attr = port->attr;
>  
>  	mutex_lock(&rxe->usdev_lock);
> @@ -261,13 +262,14 @@ static int rxe_port_immutable(struct ib_device *dev, u8 port_num,
>  	int err;
>  	struct ib_port_attr attr;
>  
> -	err = rxe_query_port(dev, port_num, &attr);
> +	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE_UDP_ENCAP;
> +
> +	err = ib_query_port(dev, port_num, &attr);
>  	if (err)
>  		return err;
>  
>  	immutable->pkey_tbl_len = attr.pkey_tbl_len;
>  	immutable->gid_tbl_len = attr.gid_tbl_len;
> -	immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE_UDP_ENCAP;
>  	immutable->max_mad_size = IB_MGMT_MAD_SIZE;
>  
>  	return 0;
> -- 
> 2.10.2
> 
> --
> 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
--
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



[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