Message ID | 1461070287-13469-2-git-send-email-erezsh@mellanox.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Tue, Apr 19, 2016 at 03:51:24PM +0300, 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 that contains both of cap_mask2 (which was > reserved and resp_time which now is 27 bits for cap_mask2 and 5 bits for > resp_time in the new field) > > More changes to adjust the new structure: > IB/qib: Change pma_get_classportinfo > IB/srpt: Adjust the use of ib_class_port_info > > Signed-off-by: Erez Shitrit <erezsh@mellanox.com> > Reviewed-by: Leon Romanovsky <leonro@mellanox.com> > --- > drivers/infiniband/hw/qib/qib_mad.c | 6 ++++-- > drivers/infiniband/ulp/srpt/ib_srpt.c | 5 ++++- > include/rdma/ib_mad.h | 4 ++-- > 3 files changed, 10 insertions(+), 5 deletions(-) > > diff --git a/drivers/infiniband/hw/qib/qib_mad.c b/drivers/infiniband/hw/qib/qib_mad.c > index 0bd1837..c5d029d 100644 > --- a/drivers/infiniband/hw/qib/qib_mad.c > +++ b/drivers/infiniband/hw/qib/qib_mad.c > @@ -1158,6 +1158,7 @@ static int pma_get_classportinfo(struct ib_pma_mad *pmp, > struct ib_class_port_info *p = > (struct ib_class_port_info *)pmp->data; > struct qib_devdata *dd = dd_from_ibdev(ibdev); > + char *p_cap_mask2; > > memset(pmp->data, 0, sizeof(pmp->data)); > > @@ -1172,11 +1173,12 @@ 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; > + p_cap_mask2 = (char *)&p->cap_mask2_resp_time; > + p_cap_mask2[0] = dd->psxmitwait_supported << 7; > /* > * Expected response time is 4.096 usec. * 2^18 == 1.073741824 sec. > */ > - p->resp_time_value = 18; > + p_cap_mask2[3] = 18; Does this get the endianess right? To me it would be cleaner to use a temp u32 set the values and then byteswap into the MAD. Ira > > 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 0bd3cb2..d12b602 100644 > --- a/drivers/infiniband/ulp/srpt/ib_srpt.c > +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c > @@ -249,12 +249,15 @@ static void srpt_set_ioc(u8 *c_list, u32 slot, u8 value) > static void srpt_get_class_port_info(struct ib_dm_mad *mad) > { > struct ib_class_port_info *cif; > + char *p_cap_mask2; > > cif = (struct ib_class_port_info *)mad->data; > memset(cif, 0, sizeof(*cif)); > cif->base_version = 1; > cif->class_version = 1; > - cif->resp_time_value = 20; > + > + p_cap_mask2 = (char *)&cif->cap_mask2_resp_time; > + p_cap_mask2[3] = 20; > > mad->mad_hdr.status = 0; > } > diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h > index 37dd534c..2aaf1cb 100644 > --- a/include/rdma/ib_mad.h > +++ b/include/rdma/ib_mad.h > @@ -243,8 +243,8 @@ 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; > -- > 1.7.11.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-rdma" in > the body of a message to majordomo@vger.kernel.org > 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/infiniband/hw/qib/qib_mad.c b/drivers/infiniband/hw/qib/qib_mad.c index 0bd1837..c5d029d 100644 --- a/drivers/infiniband/hw/qib/qib_mad.c +++ b/drivers/infiniband/hw/qib/qib_mad.c @@ -1158,6 +1158,7 @@ static int pma_get_classportinfo(struct ib_pma_mad *pmp, struct ib_class_port_info *p = (struct ib_class_port_info *)pmp->data; struct qib_devdata *dd = dd_from_ibdev(ibdev); + char *p_cap_mask2; memset(pmp->data, 0, sizeof(pmp->data)); @@ -1172,11 +1173,12 @@ 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; + p_cap_mask2 = (char *)&p->cap_mask2_resp_time; + p_cap_mask2[0] = dd->psxmitwait_supported << 7; /* * Expected response time is 4.096 usec. * 2^18 == 1.073741824 sec. */ - p->resp_time_value = 18; + p_cap_mask2[3] = 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 0bd3cb2..d12b602 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c @@ -249,12 +249,15 @@ static void srpt_set_ioc(u8 *c_list, u32 slot, u8 value) static void srpt_get_class_port_info(struct ib_dm_mad *mad) { struct ib_class_port_info *cif; + char *p_cap_mask2; cif = (struct ib_class_port_info *)mad->data; memset(cif, 0, sizeof(*cif)); cif->base_version = 1; cif->class_version = 1; - cif->resp_time_value = 20; + + p_cap_mask2 = (char *)&cif->cap_mask2_resp_time; + p_cap_mask2[3] = 20; mad->mad_hdr.status = 0; } diff --git a/include/rdma/ib_mad.h b/include/rdma/ib_mad.h index 37dd534c..2aaf1cb 100644 --- a/include/rdma/ib_mad.h +++ b/include/rdma/ib_mad.h @@ -243,8 +243,8 @@ 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;