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.]
This commit is contained in:
parent
432d19fe4b
commit
867423adde
|
@ -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 @@ static const struct wd_quirk {
|
|||
*/
|
||||
{ "ST3160023A*",
|
||||
WD_QUIRK_FORCE_LBA48 },
|
||||
{ "ST3160827A*",
|
||||
WD_QUIRK_FORCE_LBA48 },
|
||||
{ "ST3200822A*",
|
||||
WD_QUIRK_FORCE_LBA48 },
|
||||
{ "ST3250823A*",
|
||||
|
|
Loading…
Reference in New Issue