Jens Axboe wrote:
Definitely, and we need to cover a lot more controllers than just piix
and ahci. Being the selfish bastard that I am, I didn't care much about
other devices...
For 2.6.17 that's practical in any case: ata_piix is the only upstream
driver with a suspend method.
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index fa476e7..28878f4 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -4297,6 +4297,7 @@ static int ata_start_drive(struct ata_po
int ata_device_resume(struct ata_port *ap, struct ata_device *dev)
{
if (ap->flags & ATA_FLAG_SUSPENDED) {
+ ata_busy_wait(ap, ATA_BUSY, 200000);
ap->flags &= ~ATA_FLAG_SUSPENDED;
ata_set_mode(ap);
}
@@ -4846,6 +4847,7 @@ int ata_pci_device_suspend(struct pci_de
int ata_pci_device_resume(struct pci_dev *pdev)
{
+ msleep(500);
pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev);
pci_enable_device(pdev);
Does it work if you move msleep() below pci_restore_state()?
" " " " below pci_enable_device()?
I think the delay makes more sense after you wake up the controller...
The fact that the above patch works most likely indicates the device,
not the controller, needs the delay.
Jeff
-
: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html