modify_qp() closes qp and AE handling also attempts to close qp causing system to crash. Now we check the state of QP before processing the AE.
Signed-off-by: Faisal Latif <[email protected]> --- kernel_patches/fixes/nes_0034_disconnect.patch | 30 ++++++++++++++++++++++++ 1 files changed, 30 insertions(+), 0 deletions(-) create mode 100644 kernel_patches/fixes/nes_0034_disconnect.patch diff --git a/kernel_patches/fixes/nes_0034_disconnect.patch b/kernel_patches/fixes/nes_0034_disconnect.patch new file mode 100644 index 0000000..ecc6901 --- /dev/null +++ b/kernel_patches/fixes/nes_0034_disconnect.patch @@ -0,0 +1,30 @@ +diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c +index 5e83962..4f917ee 100644 +--- a/drivers/infiniband/hw/nes/nes_hw.c ++++ b/drivers/infiniband/hw/nes/nes_hw.c +@@ -3421,6 +3421,7 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev, + struct nes_adapter *nesadapter = nesdev->nesadapter; + u32 aeq_info; + u32 next_iwarp_state = 0; ++ u32 aeqe_cq_id; + u16 async_event_id; + u8 tcp_state; + u8 iwarp_state; +@@ -3448,6 +3449,14 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev, + le32_to_cpu(aeqe->aeqe_words[NES_AEQE_COMP_QP_CQ_ID_IDX]), aeqe, + nes_tcp_state_str[tcp_state], nes_iwarp_state_str[iwarp_state]); + ++ aeqe_cq_id = le32_to_cpu(aeqe->aeqe_words[NES_AEQE_COMP_QP_CQ_ID_IDX]); ++ if (aeq_info & NES_AEQE_QP) { ++ if ((!nes_is_resource_allocated(nesadapter, nesadapter->allocated_qps, ++ aeqe_cq_id)) || ++ (atomic_read(&nesqp->close_timer_started))) ++ return; ++ } ++ + switch (async_event_id) { + case NES_AEQE_AEID_LLP_FIN_RECEIVED: + if (nesqp->term_flags) +-- +1.6.0 + -- 1.6.0 _______________________________________________ ewg mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg
