diff options
| author | Pengpeng Hou <pengpeng@iscas.ac.cn> | 2026-06-16 23:10:28 +0800 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2026-07-17 15:50:05 +0200 |
| commit | 82aa033fef523ab4f0165afbc1c1fb0dadb89f94 (patch) | |
| tree | d7a919c36f2be3f80b6ac6ca1c4f32492142f5d9 /drivers/misc | |
| parent | 18189e5d84aa0b3bc89189cba13b9105634cb6fb (diff) | |
| download | linux-next-82aa033fef523ab4f0165afbc1c1fb0dadb89f94.tar.gz linux-next-82aa033fef523ab4f0165afbc1c1fb0dadb89f94.zip | |
misc: rp1: clear chained IRQ handlers on teardown
rp1_probe() installs a chained handler for each parent MSI-X vector and
stores the rp1 device pointer as handler data. rp1_unregister_interrupts()
then disposes the child IRQ mappings, removes the IRQ domain, and frees
the PCI IRQ vectors without first removing those chained handlers.
If a teardown path runs after the handlers have been installed, a later
parent IRQ can still call rp1_chained_handle_irq() with stale handler
data and a removed IRQ domain. Clear the chained handlers before
disposing mappings and freeing the vectors.
Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
Reviewed-by: Andrea della Porta <andrea.porta@suse.com>
Link: https://patch.msgid.link/20260616151028.69890-1-pengpeng@iscas.ac.cn
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc')
| -rw-r--r-- | drivers/misc/rp1/rp1_pci.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/misc/rp1/rp1_pci.c b/drivers/misc/rp1/rp1_pci.c index 81685e3f3296..a1f20d88be5d 100644 --- a/drivers/misc/rp1/rp1_pci.c +++ b/drivers/misc/rp1/rp1_pci.c @@ -166,6 +166,9 @@ static void rp1_unregister_interrupts(struct pci_dev *pdev) struct rp1_dev *rp1 = pci_get_drvdata(pdev); int irq, i; + for (i = 0; i < RP1_INT_END; i++) + irq_set_chained_handler_and_data(pci_irq_vector(pdev, i), NULL, NULL); + if (rp1->domain) { for (i = 0; i < RP1_INT_END; i++) { irq = irq_find_mapping(rp1->domain, i); |
