From: Junxian Huang huangjunxian6@hisilicon.com
driver inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IBIJLS
----------------------------------------------------------------------
Only CEQ set the tasklet. AEQ doesn't need to kill the tasklet in exception handler.
Fixes: 8cde9df37098 ("RDMA/hns: Fix soft lockup under heavy CEQE load") Signed-off-by: Junxian Huang huangjunxian6@hisilicon.com Signed-off-by: Xinghai Cen cenxinghai@h-partners.com --- drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c index 43c3c247e82f..332edb76ea9c 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c @@ -7138,14 +7138,16 @@ static int __hns_roce_request_irq(struct hns_roce_dev *hr_dev, int irq_num, return 0;
err_request_failed: - for (j -= 1; j >= 0; j--) + for (j -= 1; j >= 0; j--) { if (j < other_num) { free_irq(hr_dev->irq[j], hr_dev); - } else { - free_irq(eq_table->eq[j - other_num].irq, - &eq_table->eq[j - other_num]); - tasklet_kill(&eq_table->eq[j - other_num].tasklet); + continue; } + free_irq(eq_table->eq[j - other_num].irq, + &eq_table->eq[j - other_num]); + if (j < other_num + comp_num) + tasklet_kill(&eq_table->eq[j - other_num].tasklet); + }
err_kzalloc_failed: for (i -= 1; i >= 0; i--) -- 2.33.0