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

pmap oddity



pmap.c に、以下のような部分があります。

	/*
	 * Find suitably aligned memory for HTAB.
	 */
	for (mp = avail; mp->size; mp++) {
		s = mp->size % HTABSIZE;
		if (mp->size < s + HTABSIZE)
			continue;
		ptable = (pte_t *)(mp->start + s);

この s = ... の行(のあたり)、何をしたいんでしょうか?
前後関係からすると、align したページテーブルを作ろうとしているので、

--- pmap.c~	Tue Feb  2 17:36:35 1999
+++ pmap.c	Tue Feb  2 17:37:26 1999
@@ -414,7 +414,7 @@
 	 * Find suitably aligned memory for HTAB.
 	 */
 	for (mp = avail; mp->size; mp++) {
-		s = mp->size % HTABSIZE;
+		s = roundup(mp->start, HTABSIZE) - mp->start;
 		if (mp->size < s + HTABSIZE)
 			continue;
 		ptable = (pte_t *)(mp->start + s);

が正しいように思えます。

# なぜあのままで動くのかなあ…。