]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
RDMA/hns: Fix log flood after cmd_mbox failure
authorLianfa Weng <wenglianfa@huawei.com>
Wed, 20 May 2026 05:57:59 +0000 (13:57 +0800)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 25 May 2026 14:39:04 +0000 (11:39 -0300)
hns_roce_cmd_mbox() is the command interface between driver and
hardware. When hardware is abnormal, the unlimited error printings
after hns_roce_cmd_mbox() failure will cause log flood and even
system crash.

Replace ibdev_err() and ibdev_warn() with their ratelimited versions
in the error handling path after hns_roce_cmd_mbox() (and its wrappers
hns_roce_create_hw_ctx/hns_roce_destroy_hw_ctx) fails.

Fixes: 9a4435375cd1 ("IB/hns: Add driver files for hns RoCE driver")
Link: https://patch.msgid.link/r/20260520055759.2354037-4-huangjunxian6@hisilicon.com
Signed-off-by: Lianfa Weng <wenglianfa@huawei.com>
Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/hns/hns_roce_cq.c
drivers/infiniband/hw/hns/hns_roce_hw_v2.c
drivers/infiniband/hw/hns/hns_roce_mr.c
drivers/infiniband/hw/hns/hns_roce_srq.c

index 24de651f735e0368669e0041919c8ccf05d1c78e..1dd0efb5620de1e54729455874013e269575ced7 100644 (file)
@@ -174,9 +174,9 @@ static int hns_roce_create_cqc(struct hns_roce_dev *hr_dev,
        ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_CQC,
                                     hr_cq->cqn);
        if (ret)
-               ibdev_err(ibdev,
-                         "failed to send create cmd for CQ(0x%lx), ret = %d.\n",
-                         hr_cq->cqn, ret);
+               ibdev_err_ratelimited(ibdev,
+                                     "failed to send create cmd for CQ(0x%lx), ret = %d.\n",
+                                     hr_cq->cqn, ret);
 
        hns_roce_free_cmd_mailbox(hr_dev, mailbox);
 
index 4afd7d6ae3caa284980d150a967c854991b366aa..332a4816f2ca423d948a300ee5bba3c4709ff869 100644 (file)
@@ -6193,9 +6193,9 @@ static int hns_roce_v2_modify_srq(struct ib_srq *ibsrq,
                                        HNS_ROCE_CMD_MODIFY_SRQC, srq->srqn);
                hns_roce_free_cmd_mailbox(hr_dev, mailbox);
                if (ret)
-                       ibdev_err(&hr_dev->ib_dev,
-                                 "failed to handle cmd of modifying SRQ, ret = %d.\n",
-                                 ret);
+                       ibdev_err_ratelimited(&hr_dev->ib_dev,
+                                             "failed to handle cmd of modifying SRQ, ret = %d.\n",
+                                             ret);
        }
 
 out:
@@ -6221,9 +6221,9 @@ static int hns_roce_v2_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr)
        ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma,
                                HNS_ROCE_CMD_QUERY_SRQC, srq->srqn);
        if (ret) {
-               ibdev_err(&hr_dev->ib_dev,
-                         "failed to process cmd of querying SRQ, ret = %d.\n",
-                         ret);
+               ibdev_err_ratelimited(&hr_dev->ib_dev,
+                                     "failed to process cmd of querying SRQ, ret = %d.\n",
+                                     ret);
                goto out;
        }
 
@@ -6329,9 +6329,9 @@ static int hns_roce_v2_query_mpt(struct hns_roce_dev *hr_dev, u32 key,
        ret = hns_roce_cmd_mbox(hr_dev, 0, mailbox->dma, HNS_ROCE_CMD_QUERY_MPT,
                                key_to_hw_index(key));
        if (ret) {
-               ibdev_err(&hr_dev->ib_dev,
-                         "failed to process cmd when querying MPT, ret = %d.\n",
-                         ret);
+               ibdev_err_ratelimited(&hr_dev->ib_dev,
+                                     "failed to process cmd when querying MPT, ret = %d.\n",
+                                     ret);
                goto err_mailbox;
        }
 
index 896af1828a38de67bccb4c7295aa836637297a12..e8a9e7d8f267bdfcc99f2dcb4a68bb5eb9b1751c 100644 (file)
@@ -173,7 +173,7 @@ static int hns_roce_mr_enable(struct hns_roce_dev *hr_dev,
        ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_MPT,
                                     mtpt_idx & (hr_dev->caps.num_mtpts - 1));
        if (ret) {
-               dev_err(dev, "failed to create mpt, ret = %d.\n", ret);
+               dev_err_ratelimited(dev, "failed to create mpt, ret = %d.\n", ret);
                goto err_page;
        }
 
@@ -315,7 +315,7 @@ struct ib_mr *hns_roce_rereg_user_mr(struct ib_mr *ibmr, int flags, u64 start,
        ret = hns_roce_destroy_hw_ctx(hr_dev, HNS_ROCE_CMD_DESTROY_MPT,
                                      mtpt_idx);
        if (ret)
-               ibdev_warn(ib_dev, "failed to destroy MPT, ret = %d.\n", ret);
+               ibdev_warn_ratelimited(ib_dev, "failed to destroy MPT, ret = %d.\n", ret);
 
        mr->enabled = 0;
        mr->iova = virt_addr;
@@ -346,7 +346,7 @@ struct ib_mr *hns_roce_rereg_user_mr(struct ib_mr *ibmr, int flags, u64 start,
        ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_MPT,
                                     mtpt_idx);
        if (ret) {
-               ibdev_err(ib_dev, "failed to create MPT, ret = %d.\n", ret);
+               ibdev_err_ratelimited(ib_dev, "failed to create MPT, ret = %d.\n", ret);
                goto free_cmd_mbox;
        }
 
index 8644c3916367b241ea3f08d768cb10ff4661488e..00552a08f21ae2490b8d372f5d2d163bbf7aca78 100644 (file)
@@ -103,7 +103,7 @@ static int hns_roce_create_srqc(struct hns_roce_dev *hr_dev,
        ret = hns_roce_create_hw_ctx(hr_dev, mailbox, HNS_ROCE_CMD_CREATE_SRQ,
                                     srq->srqn);
        if (ret)
-               ibdev_err(ibdev, "failed to config SRQC, ret = %d.\n", ret);
+               ibdev_err_ratelimited(ibdev, "failed to config SRQC, ret = %d.\n", ret);
 
 err_mbox:
        hns_roce_free_cmd_mailbox(hr_dev, mailbox);