]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
RDMA/hns: Fix the wrong type of return value of the interrupt handler
authorHaoyue Xu <xuhaoyue1@hisilicon.com>
Thu, 14 Jul 2022 13:43:50 +0000 (21:43 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Oct 2024 13:11:02 +0000 (15:11 +0200)
[ Upstream commit d95e0a0c6c9602ff6bb90c1c20987b204493d8e1 ]

The type of return value of the interrupt handler should be irqreturn_t.

Link: https://lore.kernel.org/r/20220714134353.16700-3-liangwenpeng@huawei.com
Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Stable-dep-of: 4321feefa550 ("RDMA/hns: Fix VF triggering PF reset in abnormal interrupt handler")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/hw/hns/hns_roce_hw_v2.c

index 71ba2960e4b0f48d6e2ce36c05fdc5ecd39a1e6d..4c983416020677a564f1f9ac5e2d99007947ac99 100644 (file)
@@ -5674,12 +5674,12 @@ static struct hns_roce_aeqe *next_aeqe_sw_v2(struct hns_roce_eq *eq)
                !!(eq->cons_index & eq->entries)) ? aeqe : NULL;
 }
 
-static int hns_roce_v2_aeq_int(struct hns_roce_dev *hr_dev,
-                              struct hns_roce_eq *eq)
+static irqreturn_t hns_roce_v2_aeq_int(struct hns_roce_dev *hr_dev,
+                                      struct hns_roce_eq *eq)
 {
        struct device *dev = hr_dev->dev;
        struct hns_roce_aeqe *aeqe = next_aeqe_sw_v2(eq);
-       int aeqe_found = 0;
+       irqreturn_t aeqe_found = IRQ_NONE;
        int event_type;
        u32 queue_num;
        int sub_type;
@@ -5739,7 +5739,7 @@ static int hns_roce_v2_aeq_int(struct hns_roce_dev *hr_dev,
                eq->event_type = event_type;
                eq->sub_type = sub_type;
                ++eq->cons_index;
-               aeqe_found = 1;
+               aeqe_found = IRQ_HANDLED;
 
                hns_roce_v2_init_irq_work(hr_dev, eq, queue_num);
 
@@ -5747,7 +5747,8 @@ static int hns_roce_v2_aeq_int(struct hns_roce_dev *hr_dev,
        }
 
        update_eq_db(eq);
-       return aeqe_found;
+
+       return IRQ_RETVAL(aeqe_found);
 }
 
 static struct hns_roce_ceqe *next_ceqe_sw_v2(struct hns_roce_eq *eq)
@@ -5762,11 +5763,11 @@ static struct hns_roce_ceqe *next_ceqe_sw_v2(struct hns_roce_eq *eq)
                (!!(eq->cons_index & eq->entries)) ? ceqe : NULL;
 }
 
-static int hns_roce_v2_ceq_int(struct hns_roce_dev *hr_dev,
-                              struct hns_roce_eq *eq)
+static irqreturn_t hns_roce_v2_ceq_int(struct hns_roce_dev *hr_dev,
+                                      struct hns_roce_eq *eq)
 {
        struct hns_roce_ceqe *ceqe = next_ceqe_sw_v2(eq);
-       int ceqe_found = 0;
+       irqreturn_t ceqe_found = IRQ_NONE;
        u32 cqn;
 
        while (ceqe) {
@@ -5781,21 +5782,21 @@ static int hns_roce_v2_ceq_int(struct hns_roce_dev *hr_dev,
                hns_roce_cq_completion(hr_dev, cqn);
 
                ++eq->cons_index;
-               ceqe_found = 1;
+               ceqe_found = IRQ_HANDLED;
 
                ceqe = next_ceqe_sw_v2(eq);
        }
 
        update_eq_db(eq);
 
-       return ceqe_found;
+       return IRQ_RETVAL(ceqe_found);
 }
 
 static irqreturn_t hns_roce_v2_msix_interrupt_eq(int irq, void *eq_ptr)
 {
        struct hns_roce_eq *eq = eq_ptr;
        struct hns_roce_dev *hr_dev = eq->hr_dev;
-       int int_work;
+       irqreturn_t int_work;
 
        if (eq->type_flag == HNS_ROCE_CEQ)
                /* Completion event interrupt */
@@ -5811,7 +5812,7 @@ static irqreturn_t hns_roce_v2_msix_interrupt_abn(int irq, void *dev_id)
 {
        struct hns_roce_dev *hr_dev = dev_id;
        struct device *dev = hr_dev->dev;
-       int int_work = 0;
+       irqreturn_t int_work = IRQ_NONE;
        u32 int_st;
        u32 int_en;
 
@@ -5839,7 +5840,7 @@ static irqreturn_t hns_roce_v2_msix_interrupt_abn(int irq, void *dev_id)
                int_en |= 1 << HNS_ROCE_V2_VF_ABN_INT_EN_S;
                roce_write(hr_dev, ROCEE_VF_ABN_INT_EN_REG, int_en);
 
-               int_work = 1;
+               int_work = IRQ_HANDLED;
        } else {
                dev_err(dev, "There is no abnormal irq found!\n");
        }