[ofw] [PATCH] opensm/libvendor-ibal - Support OSMV_QUERY_MULTIPATH_REC queries

Smith, Stan stan.smith at intel.com
Thu May 20 15:03:56 PDT 2010


Support OSMV_QUERY_MULTIPATH_REC queries.

signed-off-by: stan smith <stan.smith at intel.com>

--- a/ulp/opensm/user/libvendor/osm_vendor_mlx_sa.c     Thu May 20 14:58:29 2010
+++ b/ulp/opensm/user/libvendor/osm_vendor_mlx_sa.c     Thu May 20 14:41:42 2010
@@ -827,6 +827,46 @@
                sa_mad_data.p_attr = p_user_query->p_attr;
                break;

+#ifdef DUAL_SIDED_RMPP
+       case OSMV_QUERY_MULTIPATH_REC:
+               OSM_LOG(p_log, OSM_LOG_DEBUG, "DBG:001 MULTIPATH_REC\n");
+               /* Validate sgid/dgid counts against SA client limit */
+               p_mpr_req = (osmv_multipath_req_t *) p_query_req->p_query_input;
+               if (p_mpr_req->sgid_count + p_mpr_req->dgid_count >
+                   IB_MULTIPATH_MAX_GIDS) {
+                       OSM_LOG(p_log, OSM_LOG_ERROR, "DBG:001 MULTIPATH_REC "
+                               "SGID count %d DGID count %d max count %d\n",
+                               p_mpr_req->sgid_count, p_mpr_req->dgid_count,
+                               IB_MULTIPATH_MAX_GIDS);
+                       CL_ASSERT(0);
+                       return IB_ERROR;
+               }
+               memset(&u.multipath_rec, 0, sizeof(ib_multipath_rec_t));
+               sa_mad_data.method = IB_MAD_METHOD_GETMULTI;
+               sa_mad_data.attr_id = IB_MAD_ATTR_MULTIPATH_RECORD;
+               sa_mad_data.attr_offset =
+                   ib_get_attr_offset(sizeof(ib_multipath_rec_t));
+               sa_mad_data.p_attr = &u.multipath_rec;
+               sa_mad_data.comp_mask = p_mpr_req->comp_mask;
+               u.multipath_rec.num_path = p_mpr_req->num_path;
+               if (p_mpr_req->reversible)
+                       u.multipath_rec.num_path |= 0x80;
+               else
+                       u.multipath_rec.num_path &= ~0x80;
+               u.multipath_rec.pkey = p_mpr_req->pkey;
+               ib_multipath_rec_set_sl(&u.multipath_rec, p_mpr_req->sl);
+               ib_multipath_rec_set_qos_class(&u.multipath_rec, 0);
+               u.multipath_rec.independence = p_mpr_req->independence;
+               u.multipath_rec.sgid_count = p_mpr_req->sgid_count;
+               u.multipath_rec.dgid_count = p_mpr_req->dgid_count;
+               j = 0;
+               for (i = 0; i < p_mpr_req->sgid_count; i++, j++)
+                       u.multipath_rec.gids[j] = p_mpr_req->gids[j];
+               for (i = 0; i < p_mpr_req->dgid_count; i++, j++)
+                       u.multipath_rec.gids[j] = p_mpr_req->gids[j];
+               break;
+#endif
+
        default:
                osm_log(p_log, OSM_LOG_ERROR,
                        "osmv_query_sa DBG:001 %s", "UNKNOWN\n");



More information about the ofw mailing list