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

Re: panic in /sbin/fdisk



HAMAJIMA Katsuomi/濱嶋克臣<hamajima@nagoya.ydc.co.jp> writes:
> L-Routerにハードディスクを接続して使っていますが、/etc/dailyが走ると必
> ずpanicするので調べたら、/sbin/fdiskを実行すると確実にpanicすることが
> 分かりました。
> 
> # /sbin/fdisk
> trap: address error (store) in kernel mode
> status=0xf803, cause=0x14, epc=0x8013ce9c, vaddr=0xc3770a12
> curproc == NULL ksp=0xc410da60
> Stopped at      0x8013ce9c:     sw      v0,0(s1)

	(中略)

> 上の方のアドレスをnmでみてみると
> __bs_rm_4+48 (8019ac80,b00001f0,0,c3770a12) ra 8013a484 sz 40
> wdc_ata_bio_intr+340 (8019ac80,b00001f0,0,c3770a12) ra 80043774 sz 48
> wdcintr+12c (8019ac80,b00001f0,0,c3770a12) ra 80147b78 sz 32
> pciide_pci_intr+54 (8019ac80,b00001f0,0,c3770a12) ra 801405c8 sz 40
> config_connected_call+28 (8019ac80,b00001f0,0,c3770a12) ra 80152ab8 sz 24
> hpcin_intr+44 (8019ac80,b00001f0,0,c3770a12) ra 80153bd0 sz 32
> vrgiu_intr+88 (8019ac80,b00001f0,0,c3770a12) ra 80151348 sz 40
> vrip_intr+c4 (8019ac80,b00001f0,0,c3770a12) ra 8013b714 sz 48
> cpu_intr+cc (8019ac80,b00001f0,0,c3770a12) ra 80126bac sz 40
> でした。

カーネル内部では、address errorはalignされていないアドレスにアクセスした
ときに発生します。vaddr=0xc3770a12で、命令がswなので、正にこれが起きたこ
とを示しています。

問題の原因は、wd(4)がバッファのアドレスがalignされているかどうか全く気に
せずにbus_space_read_multi_4()を使ってPIOしている部分にあると思います。

当座の回避策としては、dev/pci/pciide.cのacer_chip_map()の中で、以下のよ
うに32bit PIOを有効にしている部分を書き換えて、16bit PIOしかしないように
すればよかったと思います。

	sc->sc_wdcdev.cap = WDC_CAPABILITY_DATA16 | WDC_CAPABILITY_DATA32 |
	    WDC_CAPABILITY_MODE;

篠原