Sasha Khapyorsky wrote:
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?

Right.
Actually, this error is here because ib_multipath_rec_service_id() was
originally returning Service ID in host order, and then I changed it to
network order. No particular reason - couldn't decide which one to choose.
What do you think?

-- Yevgeny

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