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

John Baldwin jhb at freebsd.org
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 
chipsets.
>   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

** DUMP FAILED (ERROR 5) **
Automatic reboot in 15 seconds - press a key on the console to abort
Rebooting...
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-all mailing list