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

Re: panic in /sbin/fdisk



濱嶋です。

Tue, 19 Nov 2002 11:34:49 +0900 に
Takao Shinohara <shin@sm.sony.co.jp> さんが書かれた
<10211190234.AA20313@lachesis.sm.sony.co.jp> を引用しています

> 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)
> 
> カーネル内部では、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;

WDC_CAPABILITY_DATA32 を削って

  sc->sc_wdcdev.cap = WDC_CAPABILITY_DATA16 | WDC_CAPABILITY_MODE;

にしたら、fdiskを実行してもpanicしなくなりました。これで安心して
/etc/dailyを実行できます。ありがとうございました。