Re: [PATCH for-next 5/9] IB/core, rdmavt, hfi1: Send OPA cap_mask3 in trap

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

 



On Fri, May 26, 2017 at 05:35:37AM -0700, Dennis Dalessandro wrote:
> From: Michael N. Henry <michael.n.henry@xxxxxxxxx>
>
> Provide the ability for IB clients to modify the OPA specific
> capability mask and include this mask in the subsequent trap data.
>
> Reviewed-by: Niranjana Vishwanathapura <niranjana.vishwanathapura@xxxxxxxxx>
> Signed-off-by: Michael N. Henry <michael.n.henry@xxxxxxxxx>
> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@xxxxxxxxx>
> ---
>  drivers/infiniband/hw/hfi1/mad.c   |    7 ++-----
>  drivers/infiniband/hw/hfi1/mad.h   |    2 +-
>  drivers/infiniband/hw/hfi1/verbs.c |    7 ++++++-
>  drivers/infiniband/sw/rdmavt/vt.c  |    9 +++++++--
>  include/rdma/ib_verbs.h            |    3 ++-
>  include/rdma/rdma_vt.h             |    1 +
>  6 files changed, 19 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/infiniband/hw/hfi1/mad.c b/drivers/infiniband/hw/hfi1/mad.c
> index 5977673..70831ad 100644
> --- a/drivers/infiniband/hw/hfi1/mad.c
> +++ b/drivers/infiniband/hw/hfi1/mad.c
> @@ -260,6 +260,7 @@ void hfi1_cap_mask_chg(struct rvt_dev_info *rdi, u8 port_num)
>  	data.issuer_lid = cpu_to_be32(lid);
>  	data.ntc_144.lid = data.issuer_lid;
>  	data.ntc_144.new_cap_mask = cpu_to_be32(ibp->rvp.port_cap_flags);
> +	data.ntc_144.cap_mask3 = cpu_to_be16(ibp->rvp.port_cap3_flags);
>
>  	send_trap(ibp, &data, sizeof(data));
>  }
> @@ -704,11 +705,7 @@ static int __subn_get_opa_portinfo(struct opa_smp *smp, u32 am, u8 *data,
>  	buffer_units |= (dd->vl15_init << 11) & OPA_PI_MASK_BUF_UNIT_VL15_INIT;
>  	pi->buffer_units = cpu_to_be32(buffer_units);
>
> -	pi->opa_cap_mask = cpu_to_be16(OPA_CAP_MASK3_IsSharedSpaceSupported |
> -				       OPA_CAP_MASK3_IsEthOnFabricSupported);
> -	/* Driver does not support mcast/collective configuration */
> -	pi->opa_cap_mask &=
> -		cpu_to_be16(~OPA_CAP_MASK3_IsAddrRangeConfigSupported);
> +	pi->opa_cap_mask = cpu_to_be16(ibp->rvp.port_cap3_flags);
>  	pi->collectivemask_multicastmask = ((HFI1_COLLECTIVE_NR & 0x7)
>  					    << 3 | (HFI1_MCAST_NR & 0x7));
>
> diff --git a/drivers/infiniband/hw/hfi1/mad.h b/drivers/infiniband/hw/hfi1/mad.h
> index 5aa3fd1..a4e2506 100644
> --- a/drivers/infiniband/hw/hfi1/mad.h
> +++ b/drivers/infiniband/hw/hfi1/mad.h
> @@ -115,7 +115,7 @@ struct opa_mad_notice_attr {
>  			__be32	lid;		/* LID where change occurred */
>  			__be32	new_cap_mask;	/* new capability mask */
>  			__be16	reserved2;
> -			__be16	cap_mask;
> +			__be16	cap_mask3;
>  			__be16	change_flags;	/* low 4 bits only */
>  		} __packed ntc_144;
>
> diff --git a/drivers/infiniband/hw/hfi1/verbs.c b/drivers/infiniband/hw/hfi1/verbs.c
> index af54d3f..2881798 100644
> --- a/drivers/infiniband/hw/hfi1/verbs.c
> +++ b/drivers/infiniband/hw/hfi1/verbs.c
> @@ -1537,9 +1537,14 @@ static void init_ibport(struct hfi1_pportdata *ppd)
>  	/* Set the prefix to the default value (see ch. 4.1.1) */
>  	ibp->rvp.gid_prefix = IB_DEFAULT_GID_PREFIX;
>  	ibp->rvp.sm_lid = 0;
> -	/* Below should only set bits defined in OPA PortInfo.CapabilityMask */
> +	/*
> +	 * Below should only set bits defined in OPA PortInfo.CapabilityMask
> +	 * and PortInfo.CapabilityMask3
> +	 */
>  	ibp->rvp.port_cap_flags = IB_PORT_AUTO_MIGR_SUP |
>  		IB_PORT_CAP_MASK_NOTICE_SUP;
> +	ibp->rvp.port_cap3_flags = OPA_CAP_MASK3_IsSharedSpaceSupported |
> +				   OPA_CAP_MASK3_IsEthOnFabricSupported;
>  	ibp->rvp.pma_counter_select[0] = IB_PMA_PORT_XMIT_DATA;
>  	ibp->rvp.pma_counter_select[1] = IB_PMA_PORT_RCV_DATA;
>  	ibp->rvp.pma_counter_select[2] = IB_PMA_PORT_XMIT_PKTS;
> diff --git a/drivers/infiniband/sw/rdmavt/vt.c b/drivers/infiniband/sw/rdmavt/vt.c
> index 0d7c6bb..64bdd44 100644
> --- a/drivers/infiniband/sw/rdmavt/vt.c
> +++ b/drivers/infiniband/sw/rdmavt/vt.c
> @@ -202,8 +202,13 @@ static int rvt_modify_port(struct ib_device *ibdev, u8 port_num,
>  		return -EINVAL;
>
>  	rvp = rdi->ports[port_index];
> -	rvp->port_cap_flags |= props->set_port_cap_mask;
> -	rvp->port_cap_flags &= ~props->clr_port_cap_mask;
> +	if (port_modify_mask & IB_PORT_OPA_MASK_CHG) {
> +		rvp->port_cap3_flags |= props->set_port_cap_mask;
> +		rvp->port_cap3_flags &= ~props->clr_port_cap_mask;
> +	} else {
> +		rvp->port_cap_flags |= props->set_port_cap_mask;
> +		rvp->port_cap_flags &= ~props->clr_port_cap_mask;
> +	}
>
>  	if (props->set_port_cap_mask || props->clr_port_cap_mask)
>  		rdi->driver_f.cap_mask_chg(rdi, port_num);
> diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
> index 785e927..6c4f6da 100644
> --- a/include/rdma/ib_verbs.h
> +++ b/include/rdma/ib_verbs.h
> @@ -576,7 +576,8 @@ struct ib_device_modify {
>  enum ib_port_modify_flags {
>  	IB_PORT_SHUTDOWN		= 1,
>  	IB_PORT_INIT_TYPE		= (1<<2),
> -	IB_PORT_RESET_QKEY_CNTR		= (1<<3)
> +	IB_PORT_RESET_QKEY_CNTR		= (1<<3),
> +	IB_PORT_OPA_MASK_CHG		= (1<<4)

How will this flag be set?

>  };
>
>  struct ib_port_modify {
> diff --git a/include/rdma/rdma_vt.h b/include/rdma/rdma_vt.h
> index d0b9f91..0f18ffd 100644
> --- a/include/rdma/rdma_vt.h
> +++ b/include/rdma/rdma_vt.h
> @@ -75,6 +75,7 @@ struct rvt_ibport {
>  	__be64 mkey;
>  	u64 tid;
>  	u32 port_cap_flags;
> +	u16 port_cap3_flags;
>  	u32 pma_sample_start;
>  	u32 pma_sample_interval;
>  	__be16 pma_counter_select[5];
>
> --
> 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

Attachment: signature.asc
Description: PGP signature


[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