Patch "RDMA/hns: Fix missing flush CQE for DWQE" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    RDMA/hns: Fix missing flush CQE for DWQE

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     rdma-hns-fix-missing-flush-cqe-for-dwqe.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 87f97a7e61d78c5c4ec65421d243758217962be1
Author: Chengchang Tang <tangchengchang@xxxxxxxxxx>
Date:   Fri Dec 20 13:52:49 2024 +0800

    RDMA/hns: Fix missing flush CQE for DWQE
    
    [ Upstream commit e3debdd48423d3d75b9d366399228d7225d902cd ]
    
    Flush CQE handler has not been called if QP state gets into errored
    mode in DWQE path. So, the new added outstanding WQEs will never be
    flushed.
    
    It leads to a hung task timeout when using NFS over RDMA:
        __switch_to+0x7c/0xd0
        __schedule+0x350/0x750
        schedule+0x50/0xf0
        schedule_timeout+0x2c8/0x340
        wait_for_common+0xf4/0x2b0
        wait_for_completion+0x20/0x40
        __ib_drain_sq+0x140/0x1d0 [ib_core]
        ib_drain_sq+0x98/0xb0 [ib_core]
        rpcrdma_xprt_disconnect+0x68/0x270 [rpcrdma]
        xprt_rdma_close+0x20/0x60 [rpcrdma]
        xprt_autoclose+0x64/0x1cc [sunrpc]
        process_one_work+0x1d8/0x4e0
        worker_thread+0x154/0x420
        kthread+0x108/0x150
        ret_from_fork+0x10/0x18
    
    Fixes: 01584a5edcc4 ("RDMA/hns: Add support of direct wqe")
    Signed-off-by: Chengchang Tang <tangchengchang@xxxxxxxxxx>
    Signed-off-by: Junxian Huang <huangjunxian6@xxxxxxxxxxxxx>
    Link: https://patch.msgid.link/20241220055249.146943-5-huangjunxian6@xxxxxxxxxxxxx
    Signed-off-by: Leon Romanovsky <leon@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
index 23667cfbf8e7..ab0dca9d199a 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
@@ -673,6 +673,10 @@ static void write_dwqe(struct hns_roce_dev *hr_dev, struct hns_roce_qp *qp,
 #define HNS_ROCE_SL_SHIFT 2
 	struct hns_roce_v2_rc_send_wqe *rc_sq_wqe = wqe;
 
+	if (unlikely(qp->state == IB_QPS_ERR)) {
+		flush_cqe(hr_dev, qp);
+		return;
+	}
 	/* All kinds of DirectWQE have the same header field layout */
 	hr_reg_enable(rc_sq_wqe, RC_SEND_WQE_FLAG);
 	hr_reg_write(rc_sq_wqe, RC_SEND_WQE_DB_SL_L, qp->sl);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux