cvs commit: src/sys/dev/ata ata-all.h ata-chipset.c ata-dma.c ata-lowlevel.c

John Baldwin jhb at
Mon Feb 11 15:52:01 PST 2008

On Thursday 13 December 2007 06:47:36 am SXren Schmidt wrote:
> sos         2007-12-13 11:47:36 UTC
>   FreeBSD src repository
>   Modified files:
>     sys/dev/ata          ata-all.h ata-chipset.c ata-dma.c 
>                          ata-lowlevel.c 
>   Log:
>   Implement a workaround of the datacorruption problem on serverworks HT1000 
>   The HT1000 DMA engine seems to not always like 64K transfers and sometimes 
barfs data all over memory leading to instant chrash and burn.
>   Also fix 48bit adressing issues, apparently newer chips needs 16bit writes 
and not the usual fifo thing.
>   HW donated by: Travis Mikalson at TerraNovaNet

I'm not sure how best to fix it, but it seems that this broke crash dumps on 
the HT1000 chipset:

exit1() at exit1+0x39d
sys_exit() at sys_exit+0xe
ia32_syscall() at ia32_syscall+0x256
Xint0x80_syscall() at Xint0x80_syscall+0x5d
Uptime: 5d0h51m55s
Physical memory: 4084 MB
Dumping 325 MB:ata2: FAILURE - oversized DMA transfer attempt 65536 > 64512
ad4: setting up DMA failed

Automatic reboot in 15 seconds - press a key on the console to abort
cpu_reset: Restarting BSP

I'm guessing that the atadev->max_iosize is still set to 64k somehow (DMA 
default) for the ata disk when it does the check in ad_strategy(), but I'm 
not sure how as for the HT1000 chipset at least ch->dma->max_iosize is set to 
63k in the controller allocate routine which should be run before the child 
disk devices are probed and attached AFAICT.

John Baldwin

More information about the cvs-src mailing list