[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など
の症状は再現しなくなりました。

篠原