6.1 ata panic if dma enabled

Rong-En Fan grafan at gmail.com
Thu Mar 16 17:34:59 UTC 2006

On 3/16/06, Scott Long <scottl at samsco.org> wrote:
> Rong-En Fan wrote:
> > Hi,
> >
> > Recently, we upgrade a 4.11 box to 6.1-BETA2 by reinstall+newfs everything.
> > After that,  we found that if hw.ata.ata_dma=1 at boot, then as soon as it
> > starts fsck -p, it panics. It happens only if ad0 is setted to UDMA66 or above.
> > My current solution is set hw.ata.ata_dma=0 in loader.conf and manually
> > turn DMA on ad0 to UDMA33 and rest ad4~ad7 to UDMA100. In the days of
> > 4.x, there is something wrong with DMA on ad0, but it will fall back to
> > PIO4 automatically without problem. We have been tried to 1) change the
> > cable 2) change from primary ata controller to the second, 3) upgrade to
> > RELENG_6 as of March 11, but all these are failed. There is no options in
> > bios to turn off DMA for the onboard ATA controller.
> Please review the release notes from the 6.1-BETA2 announcement.  Fixes
> went into 6.1 shortly after BETA2 was released, and are in BETA3 and BETA4.

Upgrade to today's RELENG_6, it is the same. I'm not quite if
this is hardware problem. But however, why can't ata fall back
to PIO4 is DMA write error, just like 4.x does?

ata0-master: pio=PIO4 wdma=WDMA2 udma=UDMA100 cable=80 wire
ad0: setting PIO4 on 82C686B chip
ad0: setting UDMA100 on 82C686B chip
ad0: 38166MB <Seagate ST340016A 3.10> at ata0-master UDMA100
ad0: 78165360 sectors [19158C/16H/255S] 16 sectors/interrupt 1 depth queue

/dev/ad0s1d: clean, 624587 free (28411 frags, 74522 blocks, 1.9% fragmentation)
/dev/ad0s1e: clean, 826458 free (466 frags, 103249 blocks, 0.0% fragmentation)
ad0: WARNING - WRITE_DMA UDMA ICRC error (retrying request) LBA=191
ad0: WARNING - WRITE_DMA UDMA ICRC error (retrying request) LBA=191
error=84<ICRC,ABORTED> LBA=191
g_vfs_done():ad0s1a[WRITE(offset=65536, length=2048)]error = 5
mount: /dev/ad0s1a: Input/output error
Mounting root filesystem rw failed, startup aborted
Boot interrupted
Enter root password, or ^D to go multi-user

then I just continue..., finally it panics

kernel trap 12 with interrupts disabled

Fatal trap 12: page fault while in kernel mode
fault virtual address   = 0x24
fault code              = supervisor read, page not present
instruction pointer     = 0x20:0xc04eeee5
stack pointer           = 0x28:0xe4cfb4f0
frame pointer           = 0x28:0xe4cfb500
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, def32 1, gran 1
processor eflags        = resume, IOPL = 0
current process         = 168 (cp)
[thread pid 168 tid 100044 ]
Stopped at      turnstile_broadcast+0x9:        movl    0x24(%eax),%eax
db> bt
Tracing pid 168 tid 100044 td 0xc48de180
turnstile_broadcast(0) at turnstile_broadcast+0x9
_mtx_unlock_sleep(c068aca0,0,0,0) at _mtx_unlock_sleep+0x6c
softdep_sync_metadata(c495d660) at softdep_sync_metadata+0x7d4
ffs_syncvnode(c495d660,1) at ffs_syncvnode+0x43d
ffs_truncate(c495d660,200,0,880,c4695d00,c48de180) at ffs_truncate+0x77e
ufs_direnter(c495d660,c49e1880,e4cfb92c,e4cfbbd0,0) at ufs_direnter+0x85d
ufs_makeinode(81a4,c495d660,e4cfbbbc,e4cfbbd0) at ufs_makeinode+0x30f
ufs_create(e4cfba84) at ufs_create+0x37
VOP_CREATE_APV(c0671100,e4cfba84) at VOP_CREATE_APV+0x3c
VOP_CREATE(c495d660,e4cfbbbc,e4cfbbd0,e4cfbae0) at VOP_CREATE+0x34
vn_open_cred(e4cfbba8,e4cfbcc4,1a4,c4695d00,4) at vn_open_cred+0x20c
vn_open(e4cfbba8,e4cfbcc4,1a4,4) at vn_open+0x29
kern_open(c48de180,804c1c8,0,602,21b6) at kern_open+0xd4
open(c48de180,e4cfbcf0) at open+0x22
syscall(3b,3b,3b,8060100,bfbfeec4) at syscall+0x337
Xint0x80_syscall() at Xint0x80_syscall+0x1f
--- syscall (5, FreeBSD ELF32, open), eip = 0x28137ccf, esp =
0xbfbfec7c, ebp = 0xbfbfecc8 ---

Rong-En Fan

More information about the freebsd-stable mailing list