Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/ata Force LBA48 access to ST3160827AS drives. Witho...



details:   https://anonhg.NetBSD.org/src/rev/df3c0ddc7bf3
branches:  trunk
changeset: 582614:df3c0ddc7bf3
user:      dsainty <dsainty%NetBSD.org@localhost>
date:      Sat Jul 02 04:29:01 2005 +0000

description:
Force LBA48 access to ST3160827AS drives.  Without this change the entire
system hangs whenever a read or write request to sector 0xfffffff occurs.

The hang appears to happen when:

status = bus_space_read_1(wdr->cmd_iot, wdr->cmd_iohs[wd_status], 0);

is executed in __wdcwait(), and it is not possible to enter the debugger or
make the system respond at all after this point.

Whilst not necessarily the most prudent solution to handling the large number
of drives that exhibit this problem, it is currently the popular workaround.

[An alternative approach is to just always drop to LBA48 if the request
happens to pass by sector 0xfffffff and the drive reported as larger than
0xfffffff sectors.  My understanding is that the 32 bit addressing below
0x10000000 is purely there as a performance booster, not to resolve a
compatibility issue.]

diffstat:

 sys/dev/ata/wd.c |  6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diffs (27 lines):

diff -r ca0c6ced299d -r df3c0ddc7bf3 sys/dev/ata/wd.c
--- a/sys/dev/ata/wd.c  Sat Jul 02 04:05:09 2005 +0000
+++ b/sys/dev/ata/wd.c  Sat Jul 02 04:29:01 2005 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: wd.c,v 1.304 2005/06/19 18:26:40 bouyer Exp $ */
+/*     $NetBSD: wd.c,v 1.305 2005/07/02 04:29:01 dsainty Exp $ */
 
 /*
  * Copyright (c) 1998, 2001 Manuel Bouyer.  All rights reserved.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.304 2005/06/19 18:26:40 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.305 2005/07/02 04:29:01 dsainty Exp $");
 
 #ifndef ATADEBUG
 #define ATADEBUG
@@ -237,6 +237,8 @@
         */
        { "ST3160023A*",
          WD_QUIRK_FORCE_LBA48 },
+       { "ST3160827A*",
+         WD_QUIRK_FORCE_LBA48 },
        { "ST3200822A*",
          WD_QUIRK_FORCE_LBA48 },
        { "ST3250823A*",



Home | Main Index | Thread Index | Old Index