Sean Hi,
SDP needs to be notified when CM exits the TIMEWAIT state.
CM does notify the CMA but CMA doesn't pass it to the upper layer.
Below is a patch for the CMA code. I wasn't sure if it is ok to set
CMA_DISCONNECT in the IB_CM_TIMEWAIT_EXIT instead of doing it in the
IB_CM_DREQ_RECEIVED/IB_CM_DREP_RECEIVED as it is done today. Instead
I changed the check at the beginning of cma_ib_handler() as you can
see in the patch.
Signed-off-by: Amir Vadai <[EMAIL PROTECTED]>
--- include/rdma/rdma_cm.h.orig 2008-06-18 15:04:22.560904000 +0300
+++ include/rdma/rdma_cm.h 2008-06-11 11:55:26.758053000 +0300
@@ -53,7 +53,8 @@ enum rdma_cm_event_type {
RDMA_CM_EVENT_DISCONNECTED,
RDMA_CM_EVENT_DEVICE_REMOVAL,
RDMA_CM_EVENT_MULTICAST_JOIN,
- RDMA_CM_EVENT_MULTICAST_ERROR
+ RDMA_CM_EVENT_MULTICAST_ERROR,
+ RDMA_CM_EVENT_TIMWAIT_EXIT
};
enum rdma_port_space {
--- drivers/infiniband/core/cma.c.orig 2008-06-11 11:24:38.021543000
+0300
+++ drivers/infiniband/core/cma.c 2008-06-18 13:27:08.098747000 +0300
@@ -931,7 +931,8 @@ static int cma_ib_handler(struct ib_cm_i
struct rdma_cm_event event;
int ret = 0;
- if (cma_disable_remove(id_priv, CMA_CONNECT))
+ if ((ib_event->event != IB_CM_TIMEWAIT_EXIT &&
cma_disable_remove(id_priv, CMA_CONNECT)) ||
+ (ib_event->event == IB_CM_TIMEWAIT_EXIT &&
cma_disable_remove(id_priv, CMA_DISCONNECT)))
return 0;
memset(&event, 0, sizeof event);
@@ -967,6 +968,8 @@ static int cma_ib_handler(struct ib_cm_i
event.event = RDMA_CM_EVENT_DISCONNECTED;
break;
case IB_CM_TIMEWAIT_EXIT:
+ event.event = RDMA_CM_EVENT_TIMWAIT_EXIT;
+ break;
case IB_CM_MRA_RECEIVED:
/* ignore event */
goto out;
From amirv Wed Jun 18 15:39:39 2008
Date: Wed, 18 Jun 2008 15:39:39 +0300
From: [EMAIL PROTECTED]
To: cat
Subject: [ofa-general] cma: add support for TIMEWAIT_EXIT event
Message-ID: <[EMAIL PROTECTED]>
User-Agent: nail 11.25 7/29/05
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Sean Hi,
SDP needs to be notified when CM exits the TIMEWAIT state.
CM does notify the CMA but CMA doesn't pass it to the upper layer.
Below is a patch for the CMA code. I wasn't sure if it is ok to set
CMA_DISCONNECT in the IB_CM_TIMEWAIT_EXIT instead of doing it in the
IB_CM_DREQ_RECEIVED/IB_CM_DREP_RECEIVED as it is done today. Instead
I changed the check at the beginning of cma_ib_handler() as you can
see in the patch.
Signed-off-by: Amir Vadai <[EMAIL PROTECTED]>
--- include/rdma/rdma_cm.h.orig 2008-06-18 15:04:22.560904000 +0300
+++ include/rdma/rdma_cm.h 2008-06-11 11:55:26.758053000 +0300
@@ -53,7 +53,8 @@ enum rdma_cm_event_type {
RDMA_CM_EVENT_DISCONNECTED,
RDMA_CM_EVENT_DEVICE_REMOVAL,
RDMA_CM_EVENT_MULTICAST_JOIN,
- RDMA_CM_EVENT_MULTICAST_ERROR
+ RDMA_CM_EVENT_MULTICAST_ERROR,
+ RDMA_CM_EVENT_TIMWAIT_EXIT
};
enum rdma_port_space {
--- drivers/infiniband/core/cma.c.orig 2008-06-11 11:24:38.021543000
+0300
+++ drivers/infiniband/core/cma.c 2008-06-18 13:27:08.098747000 +0300
@@ -931,7 +931,8 @@ static int cma_ib_handler(struct ib_cm_i
struct rdma_cm_event event;
int ret = 0;
- if (cma_disable_remove(id_priv, CMA_CONNECT))
+ if ((ib_event->event != IB_CM_TIMEWAIT_EXIT &&
cma_disable_remove(id_priv, CMA_CONNECT)) ||
+ (ib_event->event == IB_CM_TIMEWAIT_EXIT &&
cma_disable_remove(id_priv, CMA_DISCONNECT)))
return 0;
memset(&event, 0, sizeof event);
@@ -967,6 +968,8 @@ static int cma_ib_handler(struct ib_cm_i
event.event = RDMA_CM_EVENT_DISCONNECTED;
break;
case IB_CM_TIMEWAIT_EXIT:
+ event.event = RDMA_CM_EVENT_TIMWAIT_EXIT;
+ break;
case IB_CM_MRA_RECEIVED:
/* ignore event */
goto out;
--
Amir Vadai
Mellanox Technologies LTD.
SW
Phone: +972 (3) 625 9500 (ext.539)
Mobile: +972 (52) 632 4714
E-mail: [EMAIL PROTECTED]
----------------------------------------------------------------------
Emails belong on computers, trees belong in forests; if you must print
this, do it on recycled paper.
http://www.greenpeace.org/international/
----------------------------------------------------------------------
Disclaimer added by CodeTwo Exchange Rules
http://www.codetwo.com
_______________________________________________
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