Jens Axboe wrote:
On Sun, May 28 2006, Jeff Garzik wrote:
Mark Lord wrote:
Jeff Garzik wrote:
Jens Axboe wrote:
On Sun, May 28 2006, Mark Lord wrote:
..
int ata_device_resume(struct ata_port *ap, struct ata_device *dev)
{
if (ap->flags & ATA_FLAG_SUSPENDED) {
+ ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 200000);
ap->flags &= ~ATA_FLAG_SUSPENDED;
ata_set_mode(ap);
Sorry for the unresponsiveness, still away and internet connectivity
spotty. Just tested the above, and it works for me! I think Marks
analisys wrt DRQ is completely correct and this validates it.
Does your box work without ATA_DRQ?
Without ATA_DRQ, we're back to the original Linus one-liner,
which Jens said did NOT work for him on Saturday.
Indeed, but nowhere in the ATA Status printks did I ever see the DRQ bit
asserted. It was all 80/50/50.
Mark is right, ATA_BUSY alone does _not_ work for me. I agree it's a
little odd based on the printk output, it must be a timing thing.
Its not a timing thing, because it consumes exactly the same amount of
CPU cycles, and exactly the same amount of IO cycles. You're just
testing a different static constant, that's it.
<shrug> It works and it's merged...
If you and Mark would be kind enough to satisfy my paranoia, please test
the current upstream kernel, without any additional patches, and make
sure it works.
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