On Sat, 27 May 2006, Jens Axboe wrote: > > hardware, since the current suspend resumes to silicon defaults rather > > than BIOS defaults (and ata_piix doesn't have a controller reset). > > 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... > > 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); Btw, it might not be enough to wait for ATA_BUSY to clear. I think you should wait for ATA_DRDY to be set too. What does it say if you change that "ata_busy_wait()" to u8 status = ata_wait_idle(ap); if (!ata_ok(status)) printk("ATA status %02x\n", status); instead? That should print out the status (unless it works, which it apparently won't do for you without the msleep), and maybe give us some clues about what the f* is going on with the device status thing. Linus - : 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