[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: -current kernel hang up
- Subject: Re: -current kernel hang up
- From: Hiroki TANIKAWA <tanh@tk.airnet.ne.jp>
- To: port-mac68k-ja@jp.netbsd.org
- Date: Mon, 24 Sep 2001 17:54:54 +0900 (JST)
- Message-Id: <20010924.175454.74755606.tanh@tk.airnet.ne.jp>
- In-Reply-To: <20010826025314R.ie9t-sbgk@asahi-net.or.jp>
- References: <200108221535.f7MFZqX08092@azarin.localnet><20010823012017X.ie9t-sbgk@asahi-net.or.jp><20010826025314R.ie9t-sbgk@asahi-net.or.jp>
- Delivered-To: mailing list port-mac68k-ja@jp.netbsd.org
- Mailing-List: contact port-mac68k-ja-help@jp.netbsd.org; run by ezmlm-idx
谷川です。
もっと早く出そうと思っていたのですが、
色々と手間取ってしまいました。
From: Takeshi Shibagaki<ie9t-sbgk@asahi-net.or.jp>
Date: Sun, 26 Aug 2001 02:53:14 +0900
> > このあたりは見ていないのですが、uvm回りで落ちていたので、MIな
> > ところなのでは? と思っています。
>
> と思ったら違うかも。
>
> db> t
> _cpu_Debugger(400,a8c,c,7c68414,7abf1c) + 6
> _panic(15ebc6,0,7c68414,7abf34,15e46e) + 9c
> _amap_wipeout(7c68414,7d63cd4,0,7d63cd4,7abf5c) + 30
> _amap_unref(7c68414,0,a8c,0) + 20
> _uvm_unmap_detach(7d63454,0) + 54
> _uvmspace_free(79fe10,7c8d38c,2006fc,7abfa8,3483e) + d4
> _uvm_exit(7c8d38c,347ee,79a540,28aea0,3062) + 14
> _reaper(79a540) +4a
> _proc_trampoline() + 2
私のマシンでは libc を make したり、/usr/src を他のマシンから
rsync したりすると落ちていました。
観察した限りでは、make や rsync 等のプロセスが 10MB 程度
メモリを消費すると落ちている感じでした。
どこから手を着ければいいのか分からなかったので、とりあえず config で
options DEBUG
を有効にして kernel を作ってみました。
すると、boot の途中でデバッガに落ちます。
http://mail-index.netbsd.org/source-changes/2001/08/04/0033.html
の変更箇所のようです。
boot device: sd0
root on sd0a dumps on s0b
panic: kernel diagnostic assertion "pv->pv_pmap != pmap_kernel() || pv->pv_va != sva" failed: file "../../../../arch/mac68k/mac68k/pmap.c", line 1383
Stopped in pid 0 (swapper) at _cpt_Debugger+0x6: unlk a6
db> t
_cpu_Debugger(5bf,5b50000,1,18be3c,18bdfc) + 6
_panic(fe268,f1cd2,f3736,f3585,567) + 9c
___assert(f1cd2,f3585,567,f3736,1000) + 18
_pmap_kremove(5b50000,1000,1000,5000,4a84c) + 158
_pagemove(5b50000,5b61000,1000,ff,1) + 80
_allocbuf(8728e4,4200,54fc00,54fc00,18bee4) + a8
_geteblk(4200,ff,1,54fc00,54fe00) + 4a
_readdisklabel(2,e2232,54fc00,509e60) + 3a
_sdgetdisklabel(54fe00) + 54
_sdopen(401,0,6000,0) + 14c
_sdsize(401,502000,37b64,c,d) + 60
_cpu_dumpconf(14147,8da0,8006047a,f9001000,0) + 46
uvm_fault(0x110d2c, 0x18e000, 0, 0x1) -> 0xe
type 8, code [mmu,,ssw]: 505
trap type 8, code = 0x505, v = 0x18effa
kernel program counter = 0xea5ec
kernel: MMU fault trap
Caught exception in ddb.
_main() + 492
_main() + 492
そこで、/sys/arch/mac68k/mac68k/pmap.c の中の pmap_kremove() を
hp300, mvme68k 等の他の m68k アーキテクチャと比較したところ、
1400 行目付近のコード (ここでは #ifdef DEBUG を除いています) において
while (sva < nssva) {
if (pmap_pte_v(pte)) {
/*
* Update statistics
*/
pmap->pm_stats.wired_count--;
pmap->pm_stats.resident_count--;
/*
* Invalidate the PTE.
*/
*pte = PG_NV;
TBIS(va); <---- ここは TBIS(sva); では?
}
pte++;
sva += NBPG;
}
という結論に達したのですが、最近 C のプログラミングをやっていないので
いまいち自信が持てません。
mac68k のこの部分のコードは hp300 から持ってきたようなのですが、
hp300 で pmap_remove(), pmap_remove_mapping() から pmap_kremove() に
コードを移してきたときに変数名を修正し忘れたように見えます。
この変更を施した kernel をちょっと動かした限りでは
落ちなくなっているようです。
---
谷川裕樹 Hiroki TANIKAWA
e-mail: tanh@tk.airnet.ne.jp