Notify the ULP when a IB_CM_TIMEWAIT_EXIT occurs. Signed-off-by: Amir Vadai <[EMAIL PROTECTED]> --- .../fixes/cma_0050_timewait_finished_event.patch | 45 ++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/cma_0050_timewait_finished_event.patch
diff --git a/kernel_patches/fixes/cma_0050_timewait_finished_event.patch b/kernel_patches/fixes/cma_0050_timewait_finished_event.patch new file mode 100644 index 0000000..d987529 --- /dev/null +++ b/kernel_patches/fixes/cma_0050_timewait_finished_event.patch @@ -0,0 +1,45 @@ +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]> + +--- a/include/rdma/rdma_cm.h 2008-06-18 15:04:22.560904000 +0300 ++++ b/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 { +--- a/drivers/infiniband/core/cma.c 2008-06-11 11:24:38.021543000 +0300 ++++ b/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; + -- 1.5.3 _______________________________________________ general mailing list general@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general