When driver receives an AE for FIN receive indication, it closes the connection without changing the state of the connection in the hardware to closing. By changing the state to closing, hardware will do normal close sequence.
Signed-off-by: Faisal Latif <faisal.la...@intel.com> --- kernel_patches/fixes/nes_0042_fin.patch | 36 +++++++++++++++++++++++++++++++ 1 files changed, 36 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/nes_0042_fin.patch diff --git a/kernel_patches/fixes/nes_0042_fin.patch b/kernel_patches/fixes/nes_0042_fin.patch new file mode 100644 index 0000000..96a20ba --- /dev/null +++ b/kernel_patches/fixes/nes_0042_fin.patch @@ -0,0 +1,36 @@ +diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +index 6b034f0..c4adf70 100644 +--- a/drivers/infiniband/hw/nes/nes_hw.c ++++ b/drivers/infiniband/hw/nes/nes_hw.c +@@ -3468,8 +3468,19 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev, + case NES_AEQE_AEID_LLP_FIN_RECEIVED: + if (nesqp->term_flags) + return; /* Ignore it, wait for close complete */ +- + if (atomic_inc_return(&nesqp->close_timer_started) == 1) { ++ if ((tcp_state == NES_AEQE_TCP_STATE_CLOSE_WAIT) && ++ (nesqp->ibqp_state == IB_QPS_RTS)) { ++ spin_lock_irqsave(&nesqp->lock, flags); ++ nesqp->hw_iwarp_state = iwarp_state; ++ nesqp->hw_tcp_state = tcp_state; ++ nesqp->last_aeq = async_event_id; ++ next_iwarp_state = NES_CQP_QP_IWARP_STATE_CLOSING; ++ nesqp->hw_iwarp_state = NES_AEQE_IWARP_STATE_CLOSING; ++ spin_unlock_irqrestore(&nesqp->lock, flags); ++ nes_hw_modify_qp(nesdev, nesqp, next_iwarp_state, 0, 0); ++ nes_cm_disconn(nesqp); ++ } + nesqp->cm_id->add_ref(nesqp->cm_id); + schedule_nes_timer(nesqp->cm_node, (struct sk_buff *)nesqp, + NES_TIMER_TYPE_CLOSE, 1, 0); +@@ -3479,7 +3490,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev, + nesqp->hwqp.qp_id, atomic_read(&nesqp->refcount), + async_event_id, nesqp->last_aeq, tcp_state); + } +- + break; + case NES_AEQE_AEID_LLP_CLOSE_COMPLETE: + if (nesqp->term_flags) { +-- +1.6.0 + -- 1.6.0 _______________________________________________ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg