summary refs log tree commit diff
path: root/drivers/ata/libata-sff.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2009-02-03 00:15:35 -0800
committerDavid S. Miller <davem@davemloft.net>2009-02-03 00:15:35 -0800
commitb3ff29d2ccfe3af065a9b393699a8fbf2abd1b15 (patch)
tree99e5b423473097756353d038f922b2623f3edd2a /drivers/ata/libata-sff.c
parent1bded710a574f20d41bc9e7fb531301db282d623 (diff)
parentfb53fde9762432d091dac209bdf4f3f850117c55 (diff)
downloadlinux-b3ff29d2ccfe3af065a9b393699a8fbf2abd1b15.tar.gz
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
	drivers/net/Kconfig
Diffstat (limited to 'drivers/ata/libata-sff.c')
-rw-r--r--drivers/ata/libata-sff.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 5a4aad123c42..0b299b0f8172 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -1322,7 +1322,7 @@ fsm_start:
 					 * condition.  Mark hint.
 					 */
 					ata_ehi_push_desc(ehi, "ST-ATA: "
-						"DRQ=1 with device error, "
+						"DRQ=0 without device error, "
 						"dev_stat 0x%X", status);
 					qc->err_mask |= AC_ERR_HSM |
 							AC_ERR_NODEV_HINT;
@@ -1358,6 +1358,16 @@ fsm_start:
 					qc->err_mask |= AC_ERR_HSM;
 				}
 
+				/* There are oddball controllers with
+				 * status register stuck at 0x7f and
+				 * lbal/m/h at zero which makes it
+				 * pass all other presence detection
+				 * mechanisms we have.  Set NODEV_HINT
+				 * for it.  Kernel bz#7241.
+				 */
+				if (status == 0x7f)
+					qc->err_mask |= AC_ERR_NODEV_HINT;
+
 				/* ata_pio_sectors() might change the
 				 * state to HSM_ST_LAST. so, the state
 				 * is changed after ata_pio_sectors().