ahci: Add check for device presence (PCIe hot unplug) in ahci_stop_engine()
PATCH 1/1 ahci: Add check for device presence (PCIe hot unplug) in ahci_stop_engine()
Exit directly with ENODEV, if the AHCI controller is not available anymore. Otherwise a delay of 500ms for each port is added to the remove function while trying to issue a command on the non-existent controller.
Signed-off-by Stefan Roese <[email protected]>
Cc Tejun Heo <[email protected]>
--- drivers/ata/libahci.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/ata/libahci.c +10 -0
@@ -665,6 +665,16 @@ int ahci_stop_engine(struct ata_port *ap)if ((tmp & (PORT_CMD_START |PORT_CMD_LIST_ON )) ==0 )return 0 ; +/* +* Don't try to issue commands but return with ENODEV if the +* AHCI controller not available anymore (e.g. due to PCIe hot +* unplugging). Otherwise a 500ms delay for each port is added. +*/ +if (tmp ==0xffffffff ) { +dev_err (ap->host->dev,"AHCI controller unavailable!\n" ); +return -ENODEV ; + } +/* setting HBA to idle */ tmp &= ~PORT_CMD_START ;writel (tmp, port_mmio +PORT_CMD );
Signature · 1 line
2.16.1
Tejun Heo
AppliedQuoted 6 lines · Stefan Roese
Exit directly with ENODEV, if the AHCI controller is not available anymore. Otherwise a delay of 500ms for each port is added to the remove function while trying to issue a command on the non-existent controller.
Signed-off-by Stefan Roese <[email protected]>Cc Tejun Heo <[email protected]>
Applied to libata/for-4.16-fixes.
Thanks.
Signature · 1 line
tejun