[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

acardide?



今年に入ってからのソースで acardide って動いていますか?
NetBSD 全般の話題のようなきもするけど acardide なんて macppc
ぐらいでしか使っていそうにないのでここで聞いてみます。
# どーせ筒井さんへの私信みたいなもんだし。:-)

私のところでは、ちょっと find . >/dev/null などすると、1〜2秒ぐらいで

panic: pool_get(buf1k): \ (実際には1行)
free list modified: magic=0; page 0xe5da0000; item addr 0xe5da0408

となります。

一晩調べた限りでは、0xe5da0008 からの 1KB のバッファーに DMA で
読み込む時に 0xe5da041f まで読み込んでしまい、0xe5da0408 の magic
を壊しているように見えます。
実際 PIO だけなら panic しません。

0x...0008 というのが気になって、

*** sys/kern/vfs_bio.c	Sat Jan 24 09:00:00 2004
--- sys/kern/vfs_bio.c	Sun Jan 25 19:29:29 2004
***************
*** 371,377 ****
  		pa = (size <= PAGE_SIZE && smallmem)
  			? &pool_allocator_nointr
  			: &bufmempool_allocator;
! 		pool_init(pp, size, 0, 0, PR_IMMEDRELEASE, name, pa);
  		pool_setlowat(pp, 1);
  	}
  
--- 371,377 ----
  		pa = (size <= PAGE_SIZE && smallmem)
  			? &pool_allocator_nointr
  			: &bufmempool_allocator;
! 		pool_init(pp, size, 32, 0, PR_IMMEDRELEASE, name, pa);
  		pool_setlowat(pp, 1);
  	}
  
としてみると落ちなくはなるので、32バイト境界でないと正しく DMA できない
ような感じ。


一応、使っているのはこういうカードです。
acardide0 at pci0 dev 13 function 0
acardide0: Acard ATP860-A Ultra66 IDE Controller (rev. 0x01)
acardide0: bus-master DMA support present
acardide0: primary channel wired to native-PCI mode
acardide0: using irq 23 for native-PCI interrupt
atabus0 at acardide0 channel 0
acardide0: secondary channel wired to native-PCI mode
atabus1 at acardide0 channel 1
...
wd0 at atabus0 drive 0: <IC35L120AVVA07-0>
wd0: drive supports 16-sector PIO transfers, LBA addressing
wd0: 115 GB, 239340 cyl, 16 head, 63 sec, 512 bytes/sect x 241254720 sectors
wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
wd0(acardide0:0:0): using PIO mode 4, DMA mode 2, Ultra-DMA mode 4 (Ultra/66)
(using DMA data transfers)