From 9c13ff9bcc25be819880928fe047f6504d854f9b Mon Sep 17 00:00:00 2001 From: Tatyana Nikolova Date: Wed, 30 May 2012 14:00:43 -0500 Subject: [PATCH] compat-rdma/nes: Fixes Fixes for NES driver which have been accepted upstream. Signed-off-by: Tatyana Nikolova --- patches/nes-0001-Fix-for-mpa-reject.patch | 31 ++++++++++++++++ .../nes-0002-Fix-for-terminate-timer.patch | 37 +++++++++++++++++++ .../nes-0003-Fix-for-ibqp-event-handler.patch | 25 +++++++++++++ patches/nes-0004-Fix-for-ord-size.patch | 26 +++++++++++++ 4 files changed, 119 insertions(+) create mode 100644 patches/nes-0001-Fix-for-mpa-reject.patch create mode 100644 patches/nes-0002-Fix-for-terminate-timer.patch create mode 100644 patches/nes-0003-Fix-for-ibqp-event-handler.patch create mode 100644 patches/nes-0004-Fix-for-ord-size.patch diff --git a/patches/nes-0001-Fix-for-mpa-reject.patch b/patches/nes-0001-Fix-for-mpa-reject.patch new file mode 100644 index 0000000..e29a67c --- /dev/null +++ b/patches/nes-0001-Fix-for-mpa-reject.patch @@ -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 +Signed-off-by: Faisal Latif +--- + +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 index 0000000..f45c178 --- /dev/null +++ b/patches/nes-0002-Fix-for-terminate-timer.patch @@ -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 +Signed-off-by: Faisal Latif +--- + +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 index 0000000..27ada7e --- /dev/null +++ b/patches/nes-0003-Fix-for-ibqp-event-handler.patch @@ -0,0 +1,25 @@ +Fix for ibqp event handler in the case it was NULL (not initialized by ULP). + +Signed-off-by: Tatyana Nikolova +Signed-off-by: Donald Wood +--- + 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 index 0000000..774d077 --- /dev/null +++ b/patches/nes-0004-Fix-for-ord-size.patch @@ -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 +Signed-off-by: Donald Wood +--- + 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 + -- 2.41.0