kern/56975: Write to a Compact Flash (CF) card freezes the whole
system
Antti Louko
alo at iki.fi
Thu Sep 18 01:10:15 PDT 2003
>Number: 56975
>Category: kern
>Synopsis: Write to a Compact Flash (CF) card freezes the whole system
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Sep 18 01:10:13 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator: Antti Louko
>Release: FreeBSD 5.1-RELEASE i386
>Organization:
>Environment:
System: FreeBSD xxxx.louko.com 5.1-RELEASE FreeBSD 5.1-RELEASE #26: Tue Sep 16 08:18:42 EEST 2003 root at xxxx.louko.com:/usr/src/sys/i386/compile/LEX2 i386
VIA Eden processor and chipset combo VIA VT8601A, VT82C686B.
>Description:
The machine has a CF slot on the motherboard and the problem occurs
when writing to the CF with either dd to raw disk or through file
system. The system quite soon freezes completely.
>How-To-Repeat:
Insert CF.
dd if=/dev/zero bs=32k of=/dev/ad2
>Fix:
It appears that chipset/CF combo doesn't like any IO operations
immediately after s status inquiry. The following path fixes the
problem. It seemed best to put the delay just after the INB and thus
get it in all exit paths of the function.
*** dev/ata/ata-all.c.orig Sun May 18 19:43:08 2003
--- dev/ata/ata-all.c Tue Sep 16 08:14:56 2003
***************
*** 978,983 ****
--- 978,984 ----
DELAY(1);
while (timeout < 5000000) { /* timeout 5 secs */
atadev->channel->status = ATA_IDX_INB(atadev->channel, ATA_STATUS);
+ DELAY(1);
/* if drive fails status, reselect the drive just to be sure */
if (atadev->channel->status == 0xff) {
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list