]> git.baikalelectronics.ru Git - kernel.git/commit
scsi: hisi_sas: Free irq vectors in order for v3 HW
authorQi Liu <liuqi115@huawei.com>
Thu, 24 Feb 2022 11:51:26 +0000 (19:51 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 28 Feb 2022 02:46:40 +0000 (21:46 -0500)
commite3641cf429931d33180dc0671f08e7f0c11d4541
tree2b51ccbaede19f893c2bbb465c5cd83dff7c26b2
parent5d2f5a406b799040955ebc97428cea4056f18824
scsi: hisi_sas: Free irq vectors in order for v3 HW

If the driver probe fails to request the channel IRQ or fatal IRQ, the
driver will free the IRQ vectors before freeing the IRQs in free_irq(),
and this will cause a kernel BUG like this:

------------[ cut here ]------------
kernel BUG at drivers/pci/msi.c:369!
Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
Call trace:
   free_msi_irqs+0x118/0x13c
   pci_disable_msi+0xfc/0x120
   pci_free_irq_vectors+0x24/0x3c
   hisi_sas_v3_probe+0x360/0x9d0 [hisi_sas_v3_hw]
   local_pci_probe+0x44/0xb0
   work_for_cpu_fn+0x20/0x34
   process_one_work+0x1d0/0x340
   worker_thread+0x2e0/0x460
   kthread+0x180/0x190
   ret_from_fork+0x10/0x20
---[ end trace b88990335b610c11 ]---

So we use devm_add_action() to control the order in which we free the
vectors.

Link: https://lore.kernel.org/r/1645703489-87194-4-git-send-email-john.garry@huawei.com
Signed-off-by: Qi Liu <liuqi115@huawei.com>
Signed-off-by: John Garry <john.garry@huawei.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c