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

[pbsd-mg2] Re: merge into current



Noriyuki Soda <soda@sra.co.jp> writes:
> こういう magic number を symbol に書き直すのは、誰も文句は言わない筈な
> ので (文句を言う奴がいたらアホ)、cvs.netbsd.org のアカウントも来たこと
> ですし、どんどん直してください。お願いします。_o_

この手の問題は直し始めるときりがないのですが、マージ作業が一段落して、カー
ネルがきちんと作れるようになってからぼちぼち始めようと思います。

優先順位としては、まずmagic numberの追放でしょうか。特に、cache命令の
operandはビットパターンで対象となるcacheや操作の内容を指定するので、10進
数で書かれると、2進数に変換してテーブルを参照しないと意味が理解できませ
ん。せめてコメントに書いてあればもう少しましなのですが。

私が最初にR4000にOSを移植した際も、cache命令に関しては自分でビットパター
ンの表を作って、意味が分かるようにシンボルを割り当てました。こんな感じで
す。

#define	InxInv_I		0
#define InxWBInv_D		1
	:

> > # いっそのことページサイズを8KBにしてしまおうかしら......
> 
> むむむ、mipsle とバイナリ互換性を取る余地は残しておきたいっす…
> (つーか、hpcmips で起きる問題は、arc でも出るので、pagesize を変える
>  以外の方法で直してもらうと、個人的にめちゃめちゃ助かるです。^^;)

ページサイズは8KBにしなくても済みました:-)

pmap.cのpmap_enter()の中で、以下のようにPTEの内容にMIPS3_PG_ROPAGEをorし
ている部分があるのですが、MIPS3_PG_ROPAGEにはcache属性が含まれているため、
せっかくpmap_enter_pv()でcache属性をuncachedに指定しても、この部分で指定
が無視されてしまっていました(cachedに戻されていた)。これにより、カーネル
がraw I/Oのためにユーザ空間をマップしたアドレスでvirtual aliasが発生して
も、uncachedにする対策が無効化されていたわけです。

以下のパッチはソースを読んだ限りでは副作用もなく、正しい修正方法だと思い
ますが、まだ実機で十分なテストをしていないので、テスト後にcommitします。

Index: pmap.c
===================================================================
RCS file: /cvsroot/hpcmips/sys/arch/mips/mips/pmap.c,v
retrieving revision 1.3
diff -u -r1.3 pmap.c
--- pmap.c	1999/09/16 01:21:40	1.3
+++ pmap.c	1999/09/17 05:28:28
@@ -1172,7 +1172,7 @@
 	} else {
 		/*
 		 * Assumption: if it is not part of our managed memory
-		 * then it must be device memory which may be volitile.
+		 * then it must be device memory which may be volatile.
 		 */
 #ifdef DEBUG
 		enter_stats.unmanaged++;
@@ -1207,13 +1207,8 @@
 		/* enter entries into kernel pmap */
 		pte = kvtopte(va);
 
-		/*
-		 * XXX more thought... what does ROPAGE mean here?
-		 * is it correc to set all the ROPAGE bits for mips3,
-		 * but just the valid (and not read-only) bit on mips1?
-		 */
 		if (CPUISMIPS3)
-			npte |= vad_to_pfn(pa) | MIPS3_PG_ROPAGE | MIPS3_PG_G;
+			npte |= vad_to_pfn(pa) | MIPS3_PG_G;
 		else
 			npte |= vad_to_pfn(pa) | MIPS1_PG_V | MIPS1_PG_G;
 

篠原