Hi Hal,

On 11:16 Wed 22 Jul     , Hal Rosenstock wrote:
> 
> +/*
> + * sort_switches - reorder switch array
> + */
> +static void sort_switches(lash_t *p_lash, mesh_t *mesh)
> +{
> +     int i, j;
> +     int num_switches = p_lash->num_switches;
> +     sort_ctx_t sort_ctx;
> +     comp_t *index;
> +     int *reverse;
> +     switch_t *s;
> +     switch_t **switches;
> +
> +     index = malloc(num_switches * sizeof(comp_t));
> +     reverse = malloc(num_switches * sizeof(int));
> +     switches = malloc(num_switches * sizeof(switch_t *));
> +     if (!index || !reverse || !switches) {
> +             OSM_LOG(&p_lash->p_osm->log, OSM_LOG_ERROR,
> +                     "Failed memory allocation - switches not sorted!\n");
> +             goto Exit;
> +     }
> +
> +     sort_ctx.mesh = mesh;
> +     sort_ctx.p_lash = p_lash;
> +     
> +     for (i = 0; i < num_switches; i++) {
> +             index[i].index = i;
> +             index[i].ctx = &sort_ctx;
> +     }
> +
> +     qsort(index, num_switches, sizeof(comp_t), compare_switch);
> +
> +     for (i = 0; i < num_switches; i++)
> +             reverse[index[i].index] = i;
> +
> +     for (i = 0; i < num_switches; i++) {
> +             s = p_lash->switches[index[i].index];
> +             switches[i] = s;
> +             s->id = i;
> +             for (j = 0; j < s->node->num_links; j++)
> +                     s->node->links[j]->switch_id =
> +                             reverse[s->node->links[j]->switch_id];

Isn't it the same as:

        s->node->links[j]->switch_id =
            index[s->node->links[j]->switch_id].index;

(and then reverse array is obsolete)?

Sasha

> +     }
> +
> +     for (i = 0; i < num_switches; i++)
> +             p_lash->switches[i] = switches[i];
> +
> +Exit:
> +     if (switches)
> +             free(switches);
> +     if (index)
> +             free(index);
> +     if (reverse)
> +             free(reverse);
> +}
> +
> +/*
>   * osm_mesh_delete - free per mesh resources
>   */
>  static void mesh_delete(mesh_t *mesh)
> @@ -1470,6 +1561,8 @@ int osm_do_mesh_analysis(lash_t *p_lash)
>               if (reorder_links(p_lash, mesh))
>                       goto err;
>  
> +             sort_switches(p_lash, mesh);
> +
>               p = buf;
>               p += sprintf(p, "found ");
>               for (i = 0; i < mesh->dimension; i++)
> 
_______________________________________________
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