]> git.openfabrics.org - ~emulex/for-vlad/compat-rdma.git/commitdiff
compat-rdma/nes: Fixes
authorTatyana Nikolova <Tatyana.E.Nikolova@intel.com>
Wed, 30 May 2012 19:00:43 +0000 (14:00 -0500)
committerVladimir Sokolovsky <vlad@mellanox.com>
Thu, 31 May 2012 07:26:46 +0000 (10:26 +0300)
Fixes for NES driver which have been accepted upstream.

Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>
patches/nes-0001-Fix-for-mpa-reject.patch [new file with mode: 0644]
patches/nes-0002-Fix-for-terminate-timer.patch [new file with mode: 0644]
patches/nes-0003-Fix-for-ibqp-event-handler.patch [new file with mode: 0644]
patches/nes-0004-Fix-for-ord-size.patch [new file with mode: 0644]

diff --git a/patches/nes-0001-Fix-for-mpa-reject.patch b/patches/nes-0001-Fix-for-mpa-reject.patch
new file mode 100644 (file)
index 0000000..e29a67c
--- /dev/null
@@ -0,0 +1,31 @@
+Set a reject flag, when sending MPA reject message to inform the peer
+that the application has rejected the connection.
+
+Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>
+Signed-off-by: Faisal Latif <Faisal.Latif@intel.com>
+---
+
+diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
+index 47713f2..53c7e32 100644
+--- a/drivers/infiniband/hw/nes/nes_cm.c
++++ b/drivers/infiniband/hw/nes/nes_cm.c
+@@ -233,6 +233,7 @@ static int send_mpa_reject(struct nes_cm_node *cm_node)
+       u8 *start_ptr = &start_addr;
+       u8 **start_buff = &start_ptr;
+       u16 buff_len = 0;
++      struct ietf_mpa_v1 *mpa_frame;
+
+       skb = dev_alloc_skb(MAX_CM_BUFFER);
+       if (!skb) {
+@@ -242,6 +243,8 @@ static int send_mpa_reject(struct nes_cm_node *cm_node)
+
+       /* send an MPA reject frame */
+       cm_build_mpa_frame(cm_node, start_buff, &buff_len, NULL, MPA_KEY_REPLY);
++      mpa_frame = (struct ietf_mpa_v1 *)*start_buff;
++      mpa_frame->flags |= IETF_MPA_FLAGS_REJECT;
+       form_cm_frame(skb, cm_node, NULL, 0, *start_buff, buff_len, SET_ACK | SET_FIN);
+
+       cm_node->state = NES_CM_STATE_FIN_WAIT1;
+--
+1.7.1
+
diff --git a/patches/nes-0002-Fix-for-terminate-timer.patch b/patches/nes-0002-Fix-for-terminate-timer.patch
new file mode 100644 (file)
index 0000000..f45c178
--- /dev/null
@@ -0,0 +1,37 @@
+Fix for reset which happens right after sending a terminate message.
+Terminate timer is not deleted when the connection is closed.
+
+Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>
+Signed-off-by: Faisal Latif <Faisal.Latif@intel.com>
+---
+
+diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
+index fc050aa..793ccd6 100644
+--- a/drivers/infiniband/hw/nes/nes_cm.c
++++ b/drivers/infiniband/hw/nes/nes_cm.c
+@@ -2841,6 +2841,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
+               issue_disconn = 1;
+               issue_close = 1;
+               nesqp->cm_id = NULL;
++              del_timer(&nesqp->terminate_timer);
+               if (nesqp->flush_issued == 0) {
+                       nesqp->flush_issued = 1;
+                       issue_flush = 1;
+diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c
+index 355786c..5bcd645 100644
+--- a/drivers/infiniband/hw/nes/nes_hw.c
++++ b/drivers/infiniband/hw/nes/nes_hw.c
+@@ -3619,10 +3619,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
+                       }
+                       break;
+               case NES_AEQE_AEID_LLP_CLOSE_COMPLETE:
+-                      if (nesqp->term_flags) {
+-                              nes_terminate_done(nesqp, 0);
+-                              return;
+-                      }
+                       spin_lock_irqsave(&nesqp->lock, flags);
+                       nesqp->hw_iwarp_state = iwarp_state;
+                       nesqp->hw_tcp_state = tcp_state;
+--
+1.7.1
+
diff --git a/patches/nes-0003-Fix-for-ibqp-event-handler.patch b/patches/nes-0003-Fix-for-ibqp-event-handler.patch
new file mode 100644 (file)
index 0000000..27ada7e
--- /dev/null
@@ -0,0 +1,25 @@
+Fix for ibqp event handler in the case it was NULL (not initialized by ULP).
+
+Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>
+Signed-off-by: Donald Wood <Donald.E.Wood@intel.com>
+---
+ drivers/infiniband/hw/nes/nes_cm.c |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
+index da2c67d..a9899b1 100644
+--- a/drivers/infiniband/hw/nes/nes_cm.c
++++ b/drivers/infiniband/hw/nes/nes_cm.c
+@@ -2878,7 +2878,8 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp)
+                       ibevent.device = nesqp->ibqp.device;
+                       ibevent.event = nesqp->terminate_eventtype;
+                       ibevent.element.qp = &nesqp->ibqp;
+-                      nesqp->ibqp.event_handler(&ibevent, nesqp->ibqp.qp_context);
++                      if (nesqp->ibqp.event_handler)
++                              nesqp->ibqp.event_handler(&ibevent, nesqp->ibqp.qp_context);
+               }
+       }
+
+--
+1.7.1
+
diff --git a/patches/nes-0004-Fix-for-ord-size.patch b/patches/nes-0004-Fix-for-ord-size.patch
new file mode 100644 (file)
index 0000000..774d077
--- /dev/null
@@ -0,0 +1,26 @@
+Set ORD size to be at least one in order to accommodate RDMA READ Request message.
+
+Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>
+Signed-off-by: Donald Wood <Donald.E.Wood@intel.com>
+---
+ drivers/infiniband/hw/nes/nes_cm.c |    4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
+index da2c67d..7cdcefd 100644
+--- a/drivers/infiniband/hw/nes/nes_cm.c
++++ b/drivers/infiniband/hw/nes/nes_cm.c
+@@ -3315,6 +3315,10 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
+
+       nesqp->private_data_len = conn_param->private_data_len;
+       nesqp->nesqp_context->ird_ord_sizes |= cpu_to_le32((u32)conn_param->ord);
++      /* space for rdma0 read msg*/
++      if (conn_param->ord == 0)
++              nesqp->nesqp_context->ird_ord_sizes |= cpu_to_le32(1);
++
+       nes_debug(NES_DBG_CM, "requested ord = 0x%08X.\n", (u32)conn_param->ord);
+       nes_debug(NES_DBG_CM, "mpa private data len =%u\n",
+                 conn_param->private_data_len);
+--
+1.7.1
+