[openib-general] [PATCH] IB/core: fix SM LID/LID change with client reregister set

Michael S. Tsirkin mst at mellanox.co.il
Tue Aug 15 07:20:50 PDT 2006


Hi, Roland!
Please consider the following patch for 2.6.18 - this fixes a regression
from 2.6.17 for us.

After commit 12bbb2b7be7f5564952ebe0196623e97464b8ac5, when
SM LID change or LID change MAD also has a client reregistration bit
set, only CLIENT_REREGISTER event is generated.

As a result, the sa_query module and the cache module don't update
the port information, and ULPs (e.g. IPoIB) stop working.
This is the regression we observe as compared to 2.6.17.

Rather than generate multiple events (which would have negative performance
impact), let us simply let cache and sa query respond to reregister event
in the same way as to LID and SM change events.

---

IB/core: fix SM LID/LID change with client reregister set

If PortInfo set (e.g. LID change) MAD has the reregister bit set,
IB_EVENT_LID_CHANGE event is no longer generated.
So sa_query and cache must respond to IB_EVENT_CLIENT_REREGISTER event
in the same way as to IB_EVENT_LID_CHANGE.

Signed-off-by: Jack Morgenstein <jackm at mellanox.co.il>
Signed-off-by: Michael S. Tsirkin <mst at mellanox.co.il>

Index: ofed_1_1/drivers/infiniband/core/cache.c
===================================================================
--- ofed_1_1.orig/drivers/infiniband/core/cache.c	2006-08-03 14:30:20.000000000 +0300
+++ ofed_1_1/drivers/infiniband/core/cache.c	2006-08-15 16:31:36.880294000 +0300
@@ -301,7 +301,8 @@ static void ib_cache_event(struct ib_eve
 	    event->event == IB_EVENT_PORT_ACTIVE ||
 	    event->event == IB_EVENT_LID_CHANGE  ||
 	    event->event == IB_EVENT_PKEY_CHANGE ||
-	    event->event == IB_EVENT_SM_CHANGE) {
+	    event->event == IB_EVENT_SM_CHANGE   ||
+	    event->event == IB_EVENT_CLIENT_REREGISTER) {
 		work = kmalloc(sizeof *work, GFP_ATOMIC);
 		if (work) {
 			INIT_WORK(&work->work, ib_cache_task, work);
Index: ofed_1_1/drivers/infiniband/core/sa_query.c
===================================================================
--- ofed_1_1.orig/drivers/infiniband/core/sa_query.c	2006-08-03 14:30:20.000000000 +0300
+++ ofed_1_1/drivers/infiniband/core/sa_query.c	2006-08-15 16:32:35.100728000 +0300
@@ -405,7 +405,8 @@ static void ib_sa_event(struct ib_event_
 	    event->event == IB_EVENT_PORT_ACTIVE ||
 	    event->event == IB_EVENT_LID_CHANGE  ||
 	    event->event == IB_EVENT_PKEY_CHANGE ||
-	    event->event == IB_EVENT_SM_CHANGE) {
+	    event->event == IB_EVENT_SM_CHANGE   ||
+	    event->event == IB_EVENT_CLIENT_REREGISTER) {
 		struct ib_sa_device *sa_dev;
 		sa_dev = container_of(handler, typeof(*sa_dev), event_handler);
 

-- 
MST




More information about the general mailing list