diff options
| author | Farhan Ali <[email protected]> | 2025-10-22 16:47:26 +0000 |
|---|---|---|
| committer | Heiko Carstens <[email protected]> | 2025-10-24 13:25:43 +0000 |
| commit | b45873c3f09153d1ad9b3a7bf9e5c0b0387fd2ea (patch) | |
| tree | befd5648a15c4e54a3f57ae93789ce433e51b2a6 /lib/mpi/mpi-mod.c | |
| parent | s390: Update defconfigs (diff) | |
| download | kernel-b45873c3f09153d1ad9b3a7bf9e5c0b0387fd2ea.tar.gz kernel-b45873c3f09153d1ad9b3a7bf9e5c0b0387fd2ea.zip | |
s390/pci: Restore IRQ unconditionally for the zPCI device
Commit c1e18c17bda6 ("s390/pci: add zpci_set_irq()/zpci_clear_irq()"),
introduced the zpci_set_irq() and zpci_clear_irq(), to be used while
resetting a zPCI device.
Commit da995d538d3a ("s390/pci: implement reset_slot for hotplug
slot"), mentions zpci_clear_irq() being called in the path for
zpci_hot_reset_device(). But that is not the case anymore and these
functions are not called outside of this file. Instead
zpci_hot_reset_device() relies on zpci_disable_device() also clearing
the IRQs, but misses to reset the zdev->irqs_registered flag.
However after a CLP disable/enable reset, the device's IRQ are
unregistered, but the flag zdev->irq_registered does not get cleared. It
creates an inconsistent state and so arch_restore_msi_irqs() doesn't
correctly restore the device's IRQ. This becomes a problem when a PCI
driver tries to restore the state of the device through
pci_restore_state(). Restore IRQ unconditionally for the device and remove
the irq_registered flag as its redundant.
Fixes: c1e18c17bda6 ("s390/pci: add zpci_set_irq()/zpci_clear_irq()")
Cc: [email protected]
Reviewed-by: Niklas Schnelle <[email protected]>
Reviewed-by: Matthew Rosato <[email protected]>
Signed-off-by: Farhan Ali <[email protected]>
Signed-off-by: Heiko Carstens <[email protected]>
Diffstat (limited to 'lib/mpi/mpi-mod.c')
0 files changed, 0 insertions, 0 deletions
