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

Re: -current sun4c weirdness



<200104121542.f3CFgSg02108@mirage.ceres.dti.ne.jp>の記事において
私は書きました。

> > dumping to dev 7,1 offset 196807
> > dump 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 succeeded
> > rebooting
> 
> >  メモリは 32MB で 4MB SIMM 8 枚ですから、16+16 で 16MB 分が
> > ダンプされない、ってことでしょうか?

> ですね。

この件いろいろ見てたんですが、これは sparc/machdep.c の dumpsys() で

	/* print out how many MBs we have dumped */
	if (i && (i % (1024*1024)) == 0)
		printf("%d ", i / (1024*1024));

と 1M 毎に経過を表示させるようになっているけど、
最初の memory bank についてはその直前で

	if (maddr == 0) {
		/* Skip first page at physical address 0 */
		maddr += NBPG;
		i += NBPG;
		blkno += btodb(NBPG);
	}

と NBPG (==4096 or 8192) だけ飛ばしてて、かつ dump は 32kbytes ずつ
行われるので dumped bytes が 1M の倍数にならないだけでした。
dump 自体はされてるようです。

options DEBUG したときの

 pv_link: proc halt, va=0xf0221000: unexpected uncached mapping at 0xf25b0000

の表示に関しては、やはり 

> ちゃんと読み切れてないんですが、 sparc/pmap.c で
> pv_table_map() が全物理メモリを記録するようになってて、
> かつ pv_list は vm_physmem[] を使うようになってるのに、
> pmap_page_upload() では最初の bank を kernel text end 以降しか
> uvm_page_physload() に登録してないからという気がしてます。

の推測で正しいようで、 pmap.c:pmap_page_upload() の
uvm_page_physload() で start, end については kernel text/data/bss を
含めたすべての物理メモリを渡して、 avail_start, avail_end の
ほうだけ空いてるメモリだけを渡すようにすると kernel text/data/bss に
対する pmap_enter() も警告なしに動くようになりました。

#関係ないけど、 uvm_page_physload() で start, end と
#avail_start, avail_end とを正しく区別して指定してる port って
#ほとんどないような。 (uvm(9) 参照)

が、結局これは

> 例の core dump とは関係あるのかないのか…

この件とは関係ありませんでした。うーん。
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp