[openib-general] RE: [PATCH] Opensm - lid assignment issues

Yael Kalka yael at mellanox.co.il
Wed Nov 16 23:00:33 PST 2005


Hello Hal,
I see that you haven't applied this patch yet.
Just making sure it is not lost between the mails...
Thanks,
Yael

-----Original Message-----
From: Yael Kalka [mailto:yael at mellanox.co.il]
Sent: Sunday, November 13, 2005 12:18 PM
To: halr at voltaire.com
Cc: openib-general at openib.org; eitan at mellanox.co.il; yael at mellanox.co.il
Subject: [PATCH] Opensm - lid assignment issues


Hi Hal,

During some windows tests we've discovered that there is still another
problem in the lid_mgr. The problem happend when 2  HCAs had the same
lid - opensm entered an infinite loop.
The following patch fixes this.

Thanks,
Yael

Signed-off-by:  Yael Kalka <yael at mellanox.co.il>

Index: opensm/osm_lid_mgr.c
===================================================================
--- opensm/osm_lid_mgr.c	(revision 4032)
+++ opensm/osm_lid_mgr.c	(working copy)
@@ -550,6 +550,9 @@ __osm_lid_mgr_init_sweep(
       {
               /* This port will use its local lid, and consume the
entire required lid range.
                  Thus we can skip that range. */
+              /* If the disc_max_lid is greater then lid - we can skip
right to it, 
+                 since we've done all neccessary checks on the lids in
between. */
+              if (disc_max_lid > lid)
         lid = disc_max_lid;
       }
     }
@@ -593,7 +596,14 @@ __osm_lid_mgr_init_sweep(
   {
     p_range =
       (osm_lid_mgr_range_t *)cl_malloc(sizeof(osm_lid_mgr_range_t));
-    p_range->min_lid = 1;
+    /* 
+       The p_range can be NULL in one of 2 cases:
+       1. If max_defined_lid == 0. In this case, we want the entire
range.
+       2. If all lids discovered in the loop where mapped. In this case
+          no free range exists, and we want to define it after the last

+          mapped lid.
+    */
+    p_range->min_lid = lid;
   }
   p_range->max_lid = p_mgr->p_subn->max_unicast_lid_ho - 1;
   cl_qlist_insert_tail( &p_mgr->free_ranges, &p_range->item );




More information about the general mailing list