[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Tohru Nishimura: CVS commit: syssrc]
Shuichiro URATA <ur@a-r.org> writes:
> 先ほどsend-prしておきましたが、これで症状変わったりしませんか?
>
> *** locore_mips3.S.orig Sun Apr 16 20:09:41 2000
> --- locore_mips3.S Sun Apr 16 20:50:18 2000
> ***************
> *** 2251,2257 ****
> mtc0 s0, MIPS_COP_0_TLB_INDEX # TLB entry #1
> or a2, MIPS3_PG_G
> dmtc0 a2, MIPS_COP_0_TLB_LO0 # lo0: upte[1] | PG_G
> ! dmtc0 zero, MIPS_COP_0_TLB_LO1 # lo1: none
> nop
> nop
> tlbwi # set TLB entry #1
> --- 2251,2258 ----
> mtc0 s0, MIPS_COP_0_TLB_INDEX # TLB entry #1
> or a2, MIPS3_PG_G
> dmtc0 a2, MIPS_COP_0_TLB_LO0 # lo0: upte[1] | PG_G
> ! li a2, MIPS3_PG_G
> ! dmtc0 a2, MIPS_COP_0_TLB_LO1 # lo1: none
> nop
> nop
> tlbwi # set TLB entry #1
ご指摘のとおり、この部分はバグなのですが、hpcmipsで発生している症状は直
接この部分とは関係がないようです。
上記の部分はuser構造体が奇数ページから始まる場合に通ると思います。ところ
が、カーネルでuser構造体を割り当てている部分にデバッグ用のprintf()を入れ
て、奇数ページから始まっていたら表示するようにしてみたのですが、なかなか
そういう割り当てはしないようです。つまり、バグのある部分を通らなくてもハ
ングアップ等の現象が発生しているらしいということです。
私の再現環境では、ハングアップの代わりににpanicしてddbに落ちるというマシ
ンがあったので、もう少し調べてみました。すると、以下のように、TLBの
pagemaskの値が不正(0すなわち1Kbyte)なエントリが存在します。(sz=XXXが
pagemaskレジスタの値です。)
trap: reserved instruction in kernel mode
trap: TLB miss (load or instr. fetch) in kernel mode
status=0x2, cause=0x908, epc=0x80174398, vaddr=0x0
pid=260 cmd=cc usp=0x7ffef750 ksp=0xc2b99b30
Stopped in cc at vrrtc_intr+0x1c: sh v0,286(v1)
db> machine tlb
TLB 0 Hi 0xc2b98000 Lo0=0x00a32000 DG attr 3 Lo1=0x00fed000 DG attr 3 sz=1800
TLB* 1 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB* 2 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB* 3 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB* 4 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB* 5 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB* 6 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB* 7 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB 8 Hi 0x100060fe Lo0=0x009dd000 D attr 3 Lo1=0x0098a000 D attr 3 sz=1800
TLB 9 Hi 0xc003d801 Lo0=0x01737000 DG attr 3 Lo1=0x0183f000 DG attr 3 sz=0
TLB*10 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*11 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*12 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB 13 Hi 0xc000c000 Lo0=0x004f2000 DG attr 3 Lo1=0x004f4000 DG attr 3 sz=0
TLB*14 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*15 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*16 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*17 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*18 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*19 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB 20 Hi 0xc0002801 Lo0=0x00303000 DG attr 3 Lo1=0x00304000 DG attr 3 sz=0
TLB*21 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*22 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*23 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*24 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB 25 Hi 0xc003d001 Lo0=0x01737000 DG attr 3 Lo1=0x0183f000 DG attr 3 sz=0
TLB*26 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*27 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*28 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB 29 Hi 0xc000c801 Lo0=0x004f2000 DG attr 3 Lo1=0x004f4000 DG attr 3 sz=0
TLB*30 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
TLB*31 Hi 0x80000000 Lo0=0x00000000 attr 0 Lo1=0x00000000 attr 0 sz=0
db>
mips3_TBIAP(),mips3_TBIA()のなかで、無条件にpagemaskレジスタに0を書き込
んでいるのが原因だと思います。
mtc0 zero, MIPS_COP_0_TLB_PG_MASK # zero out pageMask
この部分をコメントアウトしたところ、私の環境ではハングアップやpanicなど
の症状は再現しなくなりました。
篠原