[ofa-general] Re: [PATCH] osm: QoS - adding new QoS fields to MultiPathRecord
Sasha Khapyorsky
sashak at voltaire.com
Tue Sep 4 09:32:04 PDT 2007
On 18:17 Tue 04 Sep , Yevgeny Kliteynik wrote:
> Hi Sasha,
>
> Adding QoS class and Service ID to MultiPathRecord
>
> Signed-off-by: Yevgeny Kliteynik <kliteyn at dev.mellanox.co.il>
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
>
>
More information about the general
mailing list