Re: [PATCH V5 for-next 1/4] IB/core: Introduce capabilitymask2 field in ClassPortInfo mad

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

 



On Mon, May 23, 2016 at 2:33 PM, Hal Rosenstock <hal@xxxxxxxxxxxxxxxxxx> wrote:
> 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 ?

Yes. the previous code sets the msb bit in the first byte of the
capmask2 (where it was with 3 bytes) , no other setting for capmask2
in that flow, so it is the same.

>
> 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
--
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