On 5/23/2016 4:14 AM, Erez Shitrit wrote: > Change struct ib_class_port_info to conform to IB Spec 1.3 > That in order to get specific capability mask from ClassPortInfo mad. > >>From the IB Spec, ClassPortInfo section: > "CapabilityMask2 Bits 0-26: Additional class-specific capabilities... > RespTimeValue the rest 5 bits" > > The new struct now has one field for capabilitymask2 (previously was the > reserved field) and the resp_time field. > > And it fixes up qib and srpt, use of the field repurposed to be used as > capabilitymask2: > IB/qib: Change pma_get_classportinfo > IB/srpt: Adjust the use of ib_class_port_info > > Signed-off-by: Erez Shitrit <erezsh@xxxxxxxxxxxx> > Reviewed-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> > --- > drivers/infiniband/hw/qib/qib_mad.c | 4 +-- > drivers/infiniband/ulp/srpt/ib_srpt.c | 2 +- > include/rdma/ib_mad.h | 57 +++++++++++++++++++++++++++++++++-- > 3 files changed, 58 insertions(+), 5 deletions(-) > > diff --git a/drivers/infiniband/hw/qib/qib_mad.c b/drivers/infiniband/hw/qib/qib_mad.c > index 0bd1837..a872865 100644 > --- a/drivers/infiniband/hw/qib/qib_mad.c > +++ b/drivers/infiniband/hw/qib/qib_mad.c > @@ -1172,11 +1172,11 @@ static int pma_get_classportinfo(struct ib_pma_mad *pmp, > * Set the most significant bit of CM2 to indicate support for > * congestion statistics > */ > - p->reserved[0] = dd->psxmitwait_supported << 7; > + ib_set_cpi_capmask2(p, dd->psxmitwait_supported << 7); Is this really equivalent to what it's replacing ? Which CapabilityMask2 is being usurped for non standard use by qib (to indicate proprietary/vendor CC counter support) ? -- Hal > /* > * Expected response time is 4.096 usec. * 2^18 == 1.073741824 sec. > */ > - p->resp_time_value = 18; > + ib_set_cpi_resp_time(p, 18); > > return reply((struct ib_smp *) pmp); > } > diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c > index 2843f1a..887ebad 100644 > --- a/drivers/infiniband/ulp/srpt/ib_srpt.c > +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c > @@ -254,8 +254,8 @@ static void srpt_get_class_port_info(struct ib_dm_mad *mad) > memset(cif, 0, sizeof(*cif)); > cif->base_version = 1; > cif->class_version = 1; > - cif->resp_time_value = 20; > > + ib_set_cpi_resp_time(cif, 20); > mad->mad_hdr.status = 0; > } > > diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h > index 37dd534c..2c379b5 100644 > --- a/include/rdma/ib_mad.h > +++ b/include/rdma/ib_mad.h > @@ -239,12 +239,14 @@ struct ib_vendor_mad { > > #define IB_MGMT_CLASSPORTINFO_ATTR_ID cpu_to_be16(0x0001) > > +#define IB_CLASS_PORT_INFO_RESP_TIME_MASK 0x1F > + > struct ib_class_port_info { > u8 base_version; > u8 class_version; > __be16 capability_mask; > - u8 reserved[3]; > - u8 resp_time_value; > + /* 27 bits for cap_mask2, 5 bits for resp_time */ > + __be32 cap_mask2_resp_time; > u8 redirect_gid[16]; > __be32 redirect_tcslfl; > __be16 redirect_lid; > @@ -259,6 +261,57 @@ struct ib_class_port_info { > __be32 trap_qkey; > }; > > +/** > + * ib_get_cpi_resp_time - Returns the resp_time value from > + * cap_mask2_resp_time in ib_class_port_info. > + * @cpi: A struct ib_class_port_info mad. > + */ > +static inline u8 ib_get_cpi_resp_time(struct ib_class_port_info *cpi) > +{ > + return (u8)(be32_to_cpu(cpi->cap_mask2_resp_time) & > + IB_CLASS_PORT_INFO_RESP_TIME_MASK); > +} > + > +/** > + * ib_set_cpi_resptime - Sets the response time in an > + * ib_class_port_info mad. > + * @cpi: A struct ib_class_port_info. > + * @rtime: The response time to set. > + */ > +static inline void ib_set_cpi_resp_time(struct ib_class_port_info *cpi, > + u8 rtime) > +{ > + cpi->cap_mask2_resp_time = > + (cpi->cap_mask2_resp_time & > + cpu_to_be32(~IB_CLASS_PORT_INFO_RESP_TIME_MASK)) | > + cpu_to_be32(rtime & IB_CLASS_PORT_INFO_RESP_TIME_MASK); > +} > + > +/** > + * ib_get_cpi_capmask2 - Returns the capmask2 value from > + * cap_mask2_resp_time in ib_class_port_info. > + * @cpi: A struct ib_class_port_info mad. > + */ > +static inline u32 ib_get_cpi_capmask2(struct ib_class_port_info *cpi) > +{ > + return (be32_to_cpu(cpi->cap_mask2_resp_time) >> 5); > +} > + > +/** > + * ib_set_cpi_capmask2 - Sets the capmask2 in an > + * ib_class_port_info mad. > + * @cpi: A struct ib_class_port_info. > + * @capmask2: The capmask2 to set. > + */ > +static inline void ib_set_cpi_capmask2(struct ib_class_port_info *cpi, > + u32 capmask2) > +{ > + cpi->cap_mask2_resp_time = > + (cpi->cap_mask2_resp_time & > + cpu_to_be32(IB_CLASS_PORT_INFO_RESP_TIME_MASK)) | > + cpu_to_be32(capmask2 << 5); > +} > + > struct ib_mad_notice_attr { > u8 generic_type; > u8 prod_type_msb; > -- 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