[ofa-general] Re: [PATCH] opensm/ftree: simplify root guids setup.
Yevgeny Kliteynik
kliteyn at dev.mellanox.co.il
Mon Feb 9 14:46:39 PST 2009
Hi Sasha,
Sasha Khapyorsky wrote:
> Eliminate root_guid_list storage - parse it directly to bfs list.
Looks good, thanks.
-- Yevgeny
> Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
> ---
> opensm/opensm/osm_ucast_ftree.c | 101 +++++++++++++-------------------------
> 1 files changed, 35 insertions(+), 66 deletions(-)
>
> diff --git a/opensm/opensm/osm_ucast_ftree.c b/opensm/opensm/osm_ucast_ftree.c
> index 10096c7..35f2ea1 100644
> --- a/opensm/opensm/osm_ucast_ftree.c
> +++ b/opensm/opensm/osm_ucast_ftree.c
> @@ -100,11 +100,6 @@ struct ftree_fabric_t_;
> typedef uint8_t ftree_tuple_t[FTREE_TUPLE_LEN];
> typedef uint64_t ftree_tuple_key_t;
>
> -struct guid_list_item {
> - cl_list_item_t list;
> - uint64_t guid;
> -};
> -
> /***************************************************
> **
> ** ftree_sw_table_element_t definition
> @@ -203,7 +198,6 @@ typedef struct ftree_fabric_t_ {
> cl_qmap_t hca_tbl;
> cl_qmap_t sw_tbl;
> cl_qmap_t sw_by_tuple_tbl;
> - cl_qlist_t root_guid_list;
> cl_qmap_t cn_guid_tbl;
> unsigned cn_num;
> uint8_t leaf_switch_rank;
> @@ -886,8 +880,6 @@ static ftree_fabric_t *__osm_ftree_fabric_create()
> cl_qmap_init(&p_ftree->sw_by_tuple_tbl);
> cl_qmap_init(&p_ftree->cn_guid_tbl);
>
> - cl_qlist_init(&p_ftree->root_guid_list);
> -
> return p_ftree;
> }
>
> @@ -953,10 +945,6 @@ static void __osm_ftree_fabric_clear(ftree_fabric_t * p_ftree)
> }
> cl_qmap_remove_all(&p_ftree->cn_guid_tbl);
>
> - /* remove all the elements of root_guid_list */
> - while (!cl_is_qlist_empty(&p_ftree->root_guid_list))
> - free(cl_qlist_remove_head(&p_ftree->root_guid_list));
> -
> /* free the leaf switches array */
> if ((p_ftree->leaf_switches_num > 0) && (p_ftree->leaf_switches))
> free(p_ftree->leaf_switches);
> @@ -3045,16 +3033,41 @@ Exit:
>
> /***************************************************
> ***************************************************/
> +struct rank_root_cxt {
> + ftree_fabric_t *fabric;
> + cl_list_t *list;
> +};
> +
> +static int rank_root_sw_by_guid(void *cxt, uint64_t guid, char *p)
> +{
> + struct rank_root_cxt *c = cxt;
> + ftree_sw_t *sw;
> +
> + sw = __osm_ftree_fabric_get_sw_by_guid(c->fabric, cl_hton64(guid));
> + if (!sw) {
> + /* the specified root guid wasn't found in the fabric */
> + OSM_LOG(&c->fabric->p_osm->log, OSM_LOG_ERROR, "ERR AB24: "
> + "Root switch GUID 0x%" PRIx64 " not found\n", guid);
> + return 0;
> + }
> +
> + OSM_LOG(&c->fabric->p_osm->log, OSM_LOG_DEBUG,
> + "Ranking root switch with GUID 0x%" PRIx64 "\n", guid);
> + sw->rank = 0;
> + cl_list_insert_tail(c->list, sw);
> +
> + return 0;
> +}
>
> static int __osm_ftree_fabric_rank_from_roots(IN ftree_fabric_t * p_ftree)
> {
> + struct rank_root_cxt context;
> osm_node_t *p_osm_node;
> osm_node_t *p_remote_osm_node;
> osm_physp_t *p_osm_physp;
> ftree_sw_t *p_sw;
> ftree_sw_t *p_remote_sw;
> cl_list_t ranking_bfs_list;
> - struct guid_list_item *item;
> int res = 0;
> unsigned num_roots;
> unsigned max_rank = 0;
> @@ -3064,25 +3077,16 @@ static int __osm_ftree_fabric_rank_from_roots(IN ftree_fabric_t * p_ftree)
> cl_list_init(&ranking_bfs_list, 10);
>
> /* Rank all the roots and add them to list */
> - for (item = (void *)cl_qlist_head(&p_ftree->root_guid_list);
> - item != (void *)cl_qlist_end(&p_ftree->root_guid_list);
> - item = (void *)cl_qlist_next(&item->list)) {
> - p_sw =
> - __osm_ftree_fabric_get_sw_by_guid(p_ftree,
> - cl_hton64(item->guid));
> - if (!p_sw) {
> - /* the specified root guid wasn't found in the fabric */
> - OSM_LOG(&p_ftree->p_osm->log, OSM_LOG_ERROR, "ERR AB24: "
> - "Root switch GUID 0x%" PRIx64 " not found\n",
> - item->guid);
> - continue;
> - }
> + OSM_LOG(&p_ftree->p_osm->log, OSM_LOG_DEBUG,
> + "Fetching root nodes from file %s\n",
> + p_ftree->p_osm->subn.opt.root_guid_file);
>
> - OSM_LOG(&p_ftree->p_osm->log, OSM_LOG_DEBUG,
> - "Ranking root switch with GUID 0x%" PRIx64 "\n",
> - item->guid);
> - p_sw->rank = 0;
> - cl_list_insert_tail(&ranking_bfs_list, p_sw);
> + context.fabric = p_ftree;
> + context.list = &ranking_bfs_list;
> + if (parse_node_map(p_ftree->p_osm->subn.opt.root_guid_file,
> + rank_root_sw_by_guid, &context)) {
> + res = -1;
> + goto Exit;
> }
>
> num_roots = cl_list_count(&ranking_bfs_list);
> @@ -3314,21 +3318,6 @@ Exit:
>
> /***************************************************
> ***************************************************/
> -static int add_guid_item_to_list(void *cxt, uint64_t guid, char *p)
> -{
> - cl_qlist_t *list = cxt;
> - struct guid_list_item *item;
> -
> - item = malloc(sizeof(*item));
> - if (!item)
> - return -1;
> -
> - item->guid = guid;
> - cl_qlist_insert_tail(list, &item->list);
> -
> - return 0;
> -}
> -
> static int add_guid_item_to_map(void *cxt, uint64_t guid, char *p)
> {
> cl_qmap_t *map = cxt;
> @@ -3350,26 +3339,6 @@ static int __osm_ftree_fabric_read_guid_files(IN ftree_fabric_t * p_ftree)
>
> OSM_LOG_ENTER(&p_ftree->p_osm->log);
>
> - if (__osm_ftree_fabric_roots_provided(p_ftree)) {
> - OSM_LOG(&p_ftree->p_osm->log, OSM_LOG_DEBUG,
> - "Fetching root nodes from file %s\n",
> - p_ftree->p_osm->subn.opt.root_guid_file);
> -
> - if (parse_node_map(p_ftree->p_osm->subn.opt.root_guid_file,
> - add_guid_item_to_list,
> - &p_ftree->root_guid_list)) {
> - status = -1;
> - goto Exit;
> - }
> -
> - if (!cl_qlist_count(&p_ftree->root_guid_list)) {
> - OSM_LOG(&p_ftree->p_osm->log, OSM_LOG_ERROR, "ERR AB22: "
> - "Root guids file has no valid guids\n");
> - status = -1;
> - goto Exit;
> - }
> - }
> -
> if (__osm_ftree_fabric_cns_provided(p_ftree)) {
> OSM_LOG(&p_ftree->p_osm->log, OSM_LOG_DEBUG,
> "Fetching compute nodes from file %s\n",
More information about the general
mailing list