Date: 18 Sep 2003 08:03:28 -0000 From: Antti Louko <alo@iki.fi> To: FreeBSD-gnats-submit@FreeBSD.org Cc: alo@iki.fi Subject: kern/56975: Write to a Compact Flash (CF) card freezes the whole system Message-ID: <20030918080328.39957.qmail@alo.louko.com> Resent-Message-ID: <200309180810.h8I8ADir077078@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>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@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:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030918080328.39957.qmail>
