Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b61e512 authored by Stefan Roese's avatar Stefan Roese Committed by Tejun Heo
Browse files

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: default avatarStefan Roese <sr@denx.de>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 0d3e45bc
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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);