On 18:17 Tue 04 Sep     , Yevgeny Kliteynik wrote:
> Hi Sasha,
> 
> Adding QoS class and Service ID to MultiPathRecord
> 
> Signed-off-by: Yevgeny Kliteynik <[EMAIL PROTECTED]>

Applied. Thanks.

The nit is below.

> ---
>  opensm/include/iba/ib_types.h           |  181 
> +++++++++++++++++++++++++++++--
>  opensm/libvendor/osm_vendor_ibumad_sa.c |    3 +-
>  opensm/opensm/osm_helper.c              |   13 ++-
>  3 files changed, 180 insertions(+), 17 deletions(-)
> 
> diff --git a/opensm/include/iba/ib_types.h b/opensm/include/iba/ib_types.h
> index 0a096f9..13e2f38 100644
> --- a/opensm/include/iba/ib_types.h
> +++ b/opensm/include/iba/ib_types.h
> @@ -1658,6 +1658,17 @@ static inline boolean_t OSM_API ib_class_is_rmpp(IN 
> const uint8_t class_code)
>  */
>  #define IB_PATH_REC_SL_MASK                          0x000F
> 
> +/****d* IBA Base: Constants/IB_MULTIPATH_REC_SL_MASK
> +* NAME
> +*    IB_MILTIPATH_REC_SL_MASK
> +*
> +* DESCRIPTION
> +*    Mask for the sl field for MultiPath record
> +*
> +* SOURCE
> +*/
> +#define IB_MULTIPATH_REC_SL_MASK                     0x000F
> +
>  /****d* IBA Base: Constants/IB_PATH_REC_QOS_CLASS_MASK
>  * NAME
>  *    IB_PATH_REC_QOS_CLASS_MASK
> @@ -1669,6 +1680,17 @@ static inline boolean_t OSM_API ib_class_is_rmpp(IN 
> const uint8_t class_code)
>  */
>  #define IB_PATH_REC_QOS_CLASS_MASK                   0xFFF0
> 
> +/****d* IBA Base: Constants/IB_MULTIPATH_REC_QOS_CLASS_MASK
> +* NAME
> +*    IB_MULTIPATH_REC_QOS_CLASS_MASK
> +*
> +* DESCRIPTION
> +*    Mask for the QoS class field for MultiPath record
> +*
> +* SOURCE
> +*/
> +#define IB_MULTIPATH_REC_QOS_CLASS_MASK                      0xFFF0
> +
>  /****d* IBA Base: Constants/IB_PATH_REC_SELECTOR_MASK
>  * NAME
>  *    IB_PATH_REC_SELECTOR_MASK
> @@ -2589,7 +2611,7 @@ typedef struct _ib_path_rec {
>  #define IB_MPR_COMPMASK_REVERSIBLE   (CL_HTON64(((uint64_t)1)<<5))
>  #define IB_MPR_COMPMASK_NUMBPATH     (CL_HTON64(((uint64_t)1)<<6))
>  #define IB_MPR_COMPMASK_PKEY         (CL_HTON64(((uint64_t)1)<<7))
> -#define IB_MPR_COMPMASK_RESV1                (CL_HTON64(((uint64_t)1)<<8))
> +#define IB_MPR_COMPMASK_QOS_CLASS    (CL_HTON64(((uint64_t)1)<<8))
>  #define IB_MPR_COMPMASK_SL           (CL_HTON64(((uint64_t)1)<<9))
>  #define IB_MPR_COMPMASK_MTUSELEC     (CL_HTON64(((uint64_t)1)<<10))
>  #define IB_MPR_COMPMASK_MTU          (CL_HTON64(((uint64_t)1)<<11))
> @@ -2597,12 +2619,12 @@ typedef struct _ib_path_rec {
>  #define IB_MPR_COMPMASK_RATE         (CL_HTON64(((uint64_t)1)<<13))
>  #define IB_MPR_COMPMASK_PKTLIFETIMESELEC (CL_HTON64(((uint64_t)1)<<14))
>  #define IB_MPR_COMPMASK_PKTLIFETIME  (CL_HTON64(((uint64_t)1)<<15))
> -#define IB_MPR_COMPMASK_RESV2                (CL_HTON64(((uint64_t)1)<<16))
> +#define IB_MPR_COMPMASK_SERVICEID_MSB        (CL_HTON64(((uint64_t)1)<<16))
>  #define IB_MPR_COMPMASK_INDEPSELEC   (CL_HTON64(((uint64_t)1)<<17))
>  #define IB_MPR_COMPMASK_RESV3                (CL_HTON64(((uint64_t)1)<<18))
>  #define IB_MPR_COMPMASK_SGIDCOUNT    (CL_HTON64(((uint64_t)1)<<19))
>  #define IB_MPR_COMPMASK_DGIDCOUNT    (CL_HTON64(((uint64_t)1)<<20))
> -#define IB_MPR_COMPMASK_RESV4                (CL_HTON64(((uint64_t)1)<<21))
> +#define IB_MPR_COMPMASK_SERVICEID_LSB        (CL_HTON64(((uint64_t)1)<<21))
> 
>  /* SMInfo Record Component Masks */
>  #define IB_SMIR_COMPMASK_LID         (CL_HTON64(((uint64_t)1)<<0))
> @@ -5861,16 +5883,15 @@ typedef struct _ib_multipath_rec_t {
>       uint8_t tclass;
>       uint8_t num_path;
>       ib_net16_t pkey;
> -     uint8_t resv0;
> -     uint8_t sl;
> +     ib_net16_t qos_class_sl;
>       uint8_t mtu;
>       uint8_t rate;
>       uint8_t pkt_life;
> -     uint8_t resv1;
> +     uint8_t service_id_8msb;
>       uint8_t independence;   /* formerly resv2 */
>       uint8_t sgid_count;
>       uint8_t dgid_count;
> -     uint8_t resv3[7];
> +     uint8_t service_id_56lsb[7];
>       ib_gid_t gids[IB_MULTIPATH_MAX_GIDS];
>  } PACK_SUFFIX ib_multipath_rec_t;
>  #include <complib/cl_packoff.h>
> @@ -5890,8 +5911,8 @@ typedef struct _ib_multipath_rec_t {
>  *       pkey
>  *               Partition key (P_Key) to use on this path.
>  *
> -*       sl
> -*               Service level to use on this path.
> +*       qos_class_sl
> +*               QoS class and service level to use on this path.
>  *
>  *       mtu
>  *               MTU and MTU selector fields to use on this path
> @@ -5901,6 +5922,12 @@ typedef struct _ib_multipath_rec_t {
>  *       pkt_life
>  *               Packet lifetime
>  *
> +*    service_id_8msb
> +*            8 most significant bits of Service ID
> +*
> +*    service_id_56lsb
> +*            56 least significant bits of Service ID
> +*
>  *       preference
>  *               Indicates the relative merit of this path versus other path
>  *               records returned from the SA.  Lower numbers are better.
> @@ -5937,6 +5964,41 @@ ib_multipath_rec_num_path(IN const ib_multipath_rec_t 
> * const p_rec)
>  *       ib_multipath_rec_t
>  *********/
> 
> +/****f* IBA Base: Types/ib_multipath_rec_set_sl
> +* NAME
> +*    ib_multipath_rec_set_sl
> +*
> +* DESCRIPTION
> +*    Set path service level.
> +*
> +* SYNOPSIS
> +*/
> +static inline void   OSM_API
> +ib_multipath_rec_set_sl(
> +     IN ib_multipath_rec_t* const p_rec,
> +     IN const uint8_t sl )
> +{
> +     p_rec->qos_class_sl =
> +             (p_rec->qos_class_sl & 
> CL_HTON16(IB_MULTIPATH_REC_QOS_CLASS_MASK)) |
> +                     cl_hton16(sl & IB_MULTIPATH_REC_SL_MASK);
> +}
> +/*
> +* PARAMETERS
> +*    p_rec
> +*            [in] Pointer to the MultiPath record object.
> +*
> +*    sl
> +*            [in] Service level to set.
> +*
> +* RETURN VALUES
> +*    None
> +*
> +* NOTES
> +*
> +* SEE ALSO
> +*    ib_multipath_rec_t
> +*********/
> +
>  /****f* IBA Base: Types/ib_multipath_rec_sl
>  * NAME
>  *       ib_multipath_rec_sl
> @@ -5949,7 +6011,7 @@ ib_multipath_rec_num_path(IN const ib_multipath_rec_t * 
> const p_rec)
>  static inline uint8_t OSM_API
>  ib_multipath_rec_sl(IN const ib_multipath_rec_t * const p_rec)
>  {
> -     return ((uint8_t) ((cl_ntoh16(p_rec->sl)) & 0xF));
> +     return ((uint8_t) ((cl_ntoh16(p_rec->qos_class_sl)) & 
> IB_MULTIPATH_REC_SL_MASK));
>  }
> 
>  /*
> @@ -5966,6 +6028,70 @@ ib_multipath_rec_sl(IN const ib_multipath_rec_t * 
> const p_rec)
>  *       ib_multipath_rec_t
>  *********/
> 
> +/****f* IBA Base: Types/ib_multipath_rec_set_qos_class
> +* NAME
> +*    ib_multipath_rec_set_qos_class
> +*
> +* DESCRIPTION
> +*    Set path QoS class.
> +*
> +* SYNOPSIS
> +*/
> +static inline void   OSM_API
> +ib_multipath_rec_set_qos_class(
> +     IN ib_multipath_rec_t* const p_rec,
> +     IN const uint16_t qos_class )
> +{
> +     p_rec->qos_class_sl =
> +             (p_rec->qos_class_sl & CL_HTON16(IB_MULTIPATH_REC_SL_MASK)) |
> +                     cl_hton16(qos_class << 4);
> +}
> +/*
> +* PARAMETERS
> +*    p_rec
> +*            [in] Pointer to the MultiPath record object.
> +*
> +*    qos_class
> +*            [in] QoS class to set.
> +*
> +* RETURN VALUES
> +*    None
> +*
> +* NOTES
> +*
> +* SEE ALSO
> +*    ib_multipath_rec_t
> +*********/
> +
> +/****f* IBA Base: Types/ib_multipath_rec_qos_class
> +* NAME
> +*    ib_multipath_rec_qos_class
> +*
> +* DESCRIPTION
> +*    Get QoS class.
> +*
> +* SYNOPSIS
> +*/
> +static inline uint16_t       OSM_API
> +ib_multipath_rec_qos_class(
> +     IN      const   ib_multipath_rec_t* const       p_rec )
> +{
> +     return (cl_ntoh16( p_rec->qos_class_sl ) >> 4);
> +}
> +/*
> +* PARAMETERS
> +*    p_rec
> +*            [in] Pointer to the MultiPath record object.
> +*
> +* RETURN VALUES
> +*    QoS class of the MultiPath record.
> +*
> +* NOTES
> +*
> +* SEE ALSO
> +*    ib_multipath_rec_t
> +*********/
> +
>  /****f* IBA Base: Types/ib_multipath_rec_mtu
>  * NAME
>  *       ib_multipath_rec_mtu
> @@ -6164,6 +6290,41 @@ ib_multipath_rec_pkt_life_sel(IN const 
> ib_multipath_rec_t * const p_rec)
>  *       ib_multipath_rec_t
>  *********/
> 
> +/****f* IBA Base: Types/ib_multipath_rec_service_id
> +* NAME
> +*    ib_multipath_rec_service_id
> +*
> +* DESCRIPTION
> +*    Get multipath service id.
> +*
> +* SYNOPSIS
> +*/
> +static inline uint64_t OSM_API
> +ib_multipath_rec_service_id(IN const ib_multipath_rec_t * const p_rec)
> +{
> +     union {
> +             ib_net64_t sid;
> +             uint8_t sid_arr[8];
> +     } sid_union;
> +     sid_union.sid_arr[0] = p_rec->service_id_8msb;
> +     memcpy(&sid_union.sid_arr[1], p_rec->service_id_56lsb, 7);
> +     return sid_union.sid;
> +}
> +
> +/*
> +* PARAMETERS
> +*    p_rec
> +*            [in] Pointer to the multipath record object.
> +*
> +* RETURN VALUES
> +*    Service ID
> +*
> +* NOTES
> +*
> +* SEE ALSO
> +*    ib_multipath_rec_t
> +*********/
> +
>  #define IB_NUM_PKEY_ELEMENTS_IN_BLOCK                32
>  /****s* IBA Base: Types/ib_pkey_table_t
>  * NAME
> diff --git a/opensm/libvendor/osm_vendor_ibumad_sa.c 
> b/opensm/libvendor/osm_vendor_ibumad_sa.c
> index 42a6d3a..a878c71 100644
> --- a/opensm/libvendor/osm_vendor_ibumad_sa.c
> +++ b/opensm/libvendor/osm_vendor_ibumad_sa.c
> @@ -840,7 +840,8 @@ osmv_query_sa(IN osm_bind_handle_t h_bind,
>               else
>                       multipath_rec.num_path &= ~0x80;
>               multipath_rec.pkey = p_mpr_req->pkey;
> -             multipath_rec.sl = p_mpr_req->sl;
> +             ib_multipath_rec_set_sl(&multipath_rec, p_mpr_req->sl);
> +             ib_multipath_rec_set_qos_class(&multipath_rec, 0);
>               multipath_rec.independence = p_mpr_req->independence;
>               multipath_rec.sgid_count = p_mpr_req->sgid_count;
>               multipath_rec.dgid_count = p_mpr_req->dgid_count;
> diff --git a/opensm/opensm/osm_helper.c b/opensm/opensm/osm_helper.c
> index 5dd3955..cf8cfab 100644
> --- a/opensm/opensm/osm_helper.c
> +++ b/opensm/opensm/osm_helper.c
> @@ -1131,29 +1131,30 @@ osm_dump_multipath_record(IN osm_log_t * const p_log,
>                       "\t\t\t\ttclass..................0x%X\n"
>                       "\t\t\t\tnum_path_revers.........0x%X\n"
>                       "\t\t\t\tpkey....................0x%X\n"
> -                     "\t\t\t\tresv0...................0x%X\n"
> +                     "\t\t\t\tqos_class...............0x%X\n"
>                       "\t\t\t\tsl......................0x%X\n"
>                       "\t\t\t\tmtu.....................0x%X\n"
>                       "\t\t\t\trate....................0x%X\n"
>                       "\t\t\t\tpkt_life................0x%X\n"
> -                     "\t\t\t\tresv1...................0x%X\n"
>                       "\t\t\t\tindependence............0x%X\n"
>                       "\t\t\t\tsgid_count..............0x%X\n"
>                       "\t\t\t\tdgid_count..............0x%X\n"
> +                     "\t\t\t\tservice_id..............0x%016" PRIx64 "\n"
>                       "%s\n"
>                       "",
>                       cl_ntoh32(p_mpr->hop_flow_raw),
>                       p_mpr->tclass,
>                       p_mpr->num_path,
>                       cl_ntoh16(p_mpr->pkey),
> -                     p_mpr->resv0,
> -                     cl_ntoh16(p_mpr->sl),
> +                     ib_multipath_rec_qos_class(p_mpr),
> +                     ib_multipath_rec_sl(p_mpr),
>                       p_mpr->mtu,
>                       p_mpr->rate,
>                       p_mpr->pkt_life,
> -                     p_mpr->resv1,
>                       p_mpr->independence,
> -                     p_mpr->sgid_count, p_mpr->dgid_count, buf_line);
> +                     p_mpr->sgid_count, p_mpr->dgid_count,
> +                     ib_multipath_rec_service_id(p_mpr),

It returns serveice_id in network byte order. Should cl_ntoh64() be
here?

Sasha

> +                     buf_line);
>       }
>  }
> 
> -- 
> 1.5.1.4
> 
> 
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to