<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.jackslab.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=MIPS_Linux_%E5%86%85%E6%A0%B8%E9%A1%B5%E8%A1%A8%E9%9A%90%E6%80%A7_Bug_%E5%88%86%E6%9E%90%E4%B8%8E%E4%BF%AE%E5%A4%8D</id>
		<title>MIPS Linux 内核页表隐性 Bug 分析与修复 - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=MIPS_Linux_%E5%86%85%E6%A0%B8%E9%A1%B5%E8%A1%A8%E9%9A%90%E6%80%A7_Bug_%E5%88%86%E6%9E%90%E4%B8%8E%E4%BF%AE%E5%A4%8D"/>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=MIPS_Linux_%E5%86%85%E6%A0%B8%E9%A1%B5%E8%A1%A8%E9%9A%90%E6%80%A7_Bug_%E5%88%86%E6%9E%90%E4%B8%8E%E4%BF%AE%E5%A4%8D&amp;action=history"/>
		<updated>2026-09-11T05:35:15Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.19.2</generator>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=MIPS_Linux_%E5%86%85%E6%A0%B8%E9%A1%B5%E8%A1%A8%E9%9A%90%E6%80%A7_Bug_%E5%88%86%E6%9E%90%E4%B8%8E%E4%BF%AE%E5%A4%8D&amp;diff=3145&amp;oldid=prev</id>
		<title>2014年11月11日 (二) 05:45 Comcat</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=MIPS_Linux_%E5%86%85%E6%A0%B8%E9%A1%B5%E8%A1%A8%E9%9A%90%E6%80%A7_Bug_%E5%88%86%E6%9E%90%E4%B8%8E%E4%BF%AE%E5%A4%8D&amp;diff=3145&amp;oldid=prev"/>
				<updated>2014-11-11T05:45:37Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←上一版本&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;2014年11月11日 (二) 05:45的版本&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第87行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第87行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;32 bit 模式下， PGD 索引位与PT 索引位部分重叠并不会导致灾难性的后果，只是会造成核心分配给PT的页过多，浪费空间。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;32 bit 模式下， PGD 索引位与PT 索引位部分重叠并不会导致灾难性的后果，只是会造成核心分配给PT的页过多，浪费空间。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;测了一下，改动后的 kernel，启动后 nr_page_table_pages 为 63 左右，而原有kernel 在101左右，多分配了 (101-63)*16KB 作为 PageTable。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;测了一下，改动后的 kernel，启动后 nr_page_table_pages 为 63 左右，而原有kernel 在101左右，多分配了 (101-63)*16KB 作为 PageTable。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;另外我写了一个测试程序，使用mmap 映射一个40MB左右的文件在地址 0x2ac94000　附近，然后随机访问该文件中的数据 1亿次，新旧对比，原 kernel 要多分配 13*16KB 作为 PageTable（cat /proc/vmstat）。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;另外我写了一个测试程序，使用mmap 映射一个40MB左右的文件在地址 0x2ac94000　附近，然后随机访问该文件中的数据 1亿次，新旧对比，原 kernel 要多分配 13*16KB 作为 PageTable（cat /proc/vmstat）。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;后记：该问题已经提交到linux-mips mail list，最新内核的 PGDIR_SHIFT 定义已经修改为： (2 * PAGE_SHIFT + PTE_ORDER - PTE_T_LOG2)（原来写死为 22），现在可以根据 PAGE_ SHIFT 动态调整了。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;后记：该问题已经提交到linux-mips mail list，最新内核的 PGDIR_SHIFT 定义已经修改为： (2 * PAGE_SHIFT + PTE_ORDER - PTE_T_LOG2)（原来写死为 22），现在可以根据 PAGE_ SHIFT 动态调整了。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=MIPS_Linux_%E5%86%85%E6%A0%B8%E9%A1%B5%E8%A1%A8%E9%9A%90%E6%80%A7_Bug_%E5%88%86%E6%9E%90%E4%B8%8E%E4%BF%AE%E5%A4%8D&amp;diff=3144&amp;oldid=prev</id>
		<title>2014年11月11日 (二) 05:45 Comcat</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=MIPS_Linux_%E5%86%85%E6%A0%B8%E9%A1%B5%E8%A1%A8%E9%9A%90%E6%80%A7_Bug_%E5%88%86%E6%9E%90%E4%B8%8E%E4%BF%AE%E5%A4%8D&amp;diff=3144&amp;oldid=prev"/>
				<updated>2014-11-11T05:45:17Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←上一版本&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;2014年11月11日 (二) 05:45的版本&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第63行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第63行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;----------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;22~4 共 19 位对应导致 TLB miss 之虚地址的31~13（VA[31:13]），因此如下指令&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;22~4 共 19 位对应导致 TLB miss 之虚地址的31~13（VA[31:13]），因此如下指令&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=MIPS_Linux_%E5%86%85%E6%A0%B8%E9%A1%B5%E8%A1%A8%E9%9A%90%E6%80%A7_Bug_%E5%88%86%E6%9E%90%E4%B8%8E%E4%BF%AE%E5%A4%8D&amp;diff=3143&amp;oldid=prev</id>
		<title>Comcat：以“32 bit kernel， 16KB 页大小，龙芯2E平台  tlb_refill_handler为：  &lt;source lang=c&gt; lui       k1, %hi(pgd_current) mfc0   k0, C0_BADVADDR lw       k1, %lo(pg...”为内容创建页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=MIPS_Linux_%E5%86%85%E6%A0%B8%E9%A1%B5%E8%A1%A8%E9%9A%90%E6%80%A7_Bug_%E5%88%86%E6%9E%90%E4%B8%8E%E4%BF%AE%E5%A4%8D&amp;diff=3143&amp;oldid=prev"/>
				<updated>2014-11-11T05:44:58Z</updated>
		
		<summary type="html">&lt;p&gt;以“32 bit kernel， 16KB 页大小，龙芯2E平台  tlb_refill_handler为：  &amp;lt;source lang=c&amp;gt; lui       k1, %hi(pgd_current) mfc0   k0, C0_BADVADDR lw       k1, %lo(pg...”为内容创建页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;32 bit kernel， 16KB 页大小，龙芯2E平台&lt;br /&gt;
&lt;br /&gt;
tlb_refill_handler为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
lui       k1, %hi(pgd_current)&lt;br /&gt;
mfc0   k0, C0_BADVADDR&lt;br /&gt;
lw       k1, %lo(pgd_current)(k1)&lt;br /&gt;
srl     k0, k0, PGDIR_SHIFT&lt;br /&gt;
sll       k0, k0, PGD_T_LOG2&lt;br /&gt;
addu   k1, k1, k0&lt;br /&gt;
&lt;br /&gt;
mfc0   k0, C0_CONTEXT&lt;br /&gt;
lw       k1, 0(k1)&lt;br /&gt;
srl     k0, k0, 3&lt;br /&gt;
andi     k0, k0, (PTRS_PER_PTE/2-1) &amp;lt;&amp;lt; (PTE_T_LOG2 + 1)&lt;br /&gt;
addu   k1, k1, k0&lt;br /&gt;
&lt;br /&gt;
lw       k0, 0(k1)&lt;br /&gt;
lw       k1, sizeof(pte_t)(k1)&lt;br /&gt;
srl     k0, k0, 6&lt;br /&gt;
mtc0   k0, C0_ENTRYLO0&lt;br /&gt;
srl     k1, k1, 6&lt;br /&gt;
mtc0   k1, C0_ENTRYLO1&lt;br /&gt;
tlbwr&lt;br /&gt;
eret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
相应的，直接从正在运行的 kernel 里获取的 tlb_refill_handler 为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
    0:   52801b3c   lui k1,0x8052&lt;br /&gt;
    4:   00401a40   mfc0   k0,$8       /* 从 BadVaddr 获取转换失败的 VA */&lt;br /&gt;
    8:   18007b8f   lw k1,24(k1)       /* 读取 PGD 所在基地址 */&lt;br /&gt;
    c:   82d51a00   srl k0,k0,0x16     /* VA 右移22位 */&lt;br /&gt;
    10:   80d01a00   sll k0,k0,0x2&lt;br /&gt;
    14:   21d87a03   addu   k1,k1,k0&lt;br /&gt;
&lt;br /&gt;
    18:   00201a40   mfc0   k0,$4       /* 读取 Context 值 */&lt;br /&gt;
    1c:   00007b8f   lw k1,0(k1)&lt;br /&gt;
    20:   c2d01a00   srl k0,k0,0x3         &lt;br /&gt;
    24:   f83f5a33   andi   k0,k0,0x3ff8&lt;br /&gt;
    28:   21d87a03   addu   k1,k1,k0&lt;br /&gt;
&lt;br /&gt;
    2c:   00007a8f   lw k0,0(k1)&lt;br /&gt;
    30:   04007b8f   lw k1,4(k1)&lt;br /&gt;
    34:   82d11a00   srl k0,k0,0x6&lt;br /&gt;
    38:   00109a40   mtc0   k0,$2&lt;br /&gt;
    3c:   82d91b00   srl k1,k1,0x6&lt;br /&gt;
    40:   00189b40   mtc0   k1,$3&lt;br /&gt;
    44:   06000042   tlbwr&lt;br /&gt;
    48:   18000042   eret&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Context 之格式为：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
63                       23 22            4 3      0&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
|                          |     BadVPN2   |   0   | &lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
22~4 共 19 位对应导致 TLB miss 之虚地址的31~13（VA[31:13]），因此如下指令&lt;br /&gt;
&lt;br /&gt;
    20:   c2d01a00   srl k0,k0,0x3         &lt;br /&gt;
    24:   f83f5a33   andi   k0,k0,0x3ff8     /* 获取 VA[25:15] 共11位，低3位为0 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
其意图旨在获取 VA[25:15]，并以 2^3=8 字节为单位索引PageTable，实际的索引范围为 2^12 = 4K ，这个与每页容纳的项数相一致(16K/4=4k)。实质上使用 VA[25:14]索引 PageTable，因每次取一对，故而VA[14] 不用。&lt;br /&gt;
&lt;br /&gt;
VA[13:0] 页内位移，没有问题。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
但使用 VA[31:22] 索引 PGD 就让人困惑了。32bit kernel 中定义 PGDIR_SHIFT 始终为 22 ，不管页大小为何，这个在4KB页大小下，是正好的，但在16KB下，由于使用 VA[25:15] 索引PageTable，因此用于索引 PGD 的域与索引 PT 的域重叠了4位（25~22）！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
如果有2个虚址，VA1[22] = 1，VA2[23] = 1 ，当 TLB miss 时，当前内核的 tlb_miss_handler 是向2个不同的 PGD 入口找寻 PTE 的，尽管按照地址划分他们应该在同一个 PGD 入口才是。&lt;br /&gt;
&lt;br /&gt;
关于地址的划分，应该从低位往高位切分才是，即：首先切取PAGE_SIZE所需位，然后根据PAGE_SIZE，确定索引 PT 的位数。如4KB，则为4K/4=1K, 10 位，16KB则为12 位，64KB 则为14位。&lt;br /&gt;
&lt;br /&gt;
余下的高位作为索引PGD 的位数才是。因此应该是 6 | 12 | 14 才对。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
32 bit 模式下， PGD 索引位与PT 索引位部分重叠并不会导致灾难性的后果，只是会造成核心分配给PT的页过多，浪费空间。&lt;br /&gt;
&lt;br /&gt;
测了一下，改动后的 kernel，启动后 nr_page_table_pages 为 63 左右，而原有kernel 在101左右，多分配了 (101-63)*16KB 作为 PageTable。&lt;br /&gt;
&lt;br /&gt;
另外我写了一个测试程序，使用mmap 映射一个40MB左右的文件在地址 0x2ac94000　附近，然后随机访问该文件中的数据 1亿次，新旧对比，原 kernel 要多分配 13*16KB 作为 PageTable（cat /proc/vmstat）。&lt;br /&gt;
&lt;br /&gt;
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－&lt;br /&gt;
&lt;br /&gt;
后记：该问题已经提交到linux-mips mail list，最新内核的 PGDIR_SHIFT 定义已经修改为： (2 * PAGE_SHIFT + PTE_ORDER - PTE_T_LOG2)（原来写死为 22），现在可以根据 PAGE_ SHIFT 动态调整了。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	</feed>