Skip site navigation (1)Skip section navigation (2)
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>