libata: don't consider 0xff as port empty if SStatus is available
authorTejun Heo <htejun@gmail.com>
Wed, 23 May 2007 09:22:15 +0000 (11:22 +0200)
committerJeff Garzik <jeff@garzik.org>
Fri, 25 May 2007 00:34:48 +0000 (20:34 -0400)
Some SATA controllers (sata_sil) use 0xff to indicate port not ready
status, not port empty.  As libata interprets 0xff as port empty, this
causes unnecessary reset failure and retry.  Don't consider 0xff as
port empty if SStatus is available and indicates that port is online.

Signed-off-by: tejun Heo <htejun@gmail.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Indan Zupancic <indan@nul.nu>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/libata-core.c

index a6de57e020473293c2a043ebdcefc4ab01a6a5bd..5788a9dd0445ca3f414ac7c5bd6d029fd65a33c7 100644 (file)
@@ -3022,7 +3022,7 @@ int ata_wait_ready(struct ata_port *ap, unsigned long deadline)
 
                if (!(status & ATA_BUSY))
                        return 0;
-               if (status == 0xff)
+               if (!ata_port_online(ap) && status == 0xff)
                        return -ENODEV;
                if (time_after(now, deadline))
                        return -EBUSY;