diff options
Diffstat (limited to 'drivers/ata/libahci.c')
| -rw-r--r-- | drivers/ata/libahci.c | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index a0de7a38430c..7adcf3caabd0 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -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);  | 

