<?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=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008%3A_Cache_aliases_issue_%282%29</id>
		<title>捉虫日记 0008: Cache aliases issue (2) - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008%3A_Cache_aliases_issue_%282%29"/>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;action=history"/>
		<updated>2026-09-11T05:48:47Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.19.2</generator>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=18591&amp;oldid=prev</id>
		<title>Comcat：/* 保守的 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=18591&amp;oldid=prev"/>
				<updated>2025-12-04T06:15:51Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;保守的&lt;/span&gt;&lt;/span&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;2025年12月4日 (四) 06:15的版本&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第133行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第133行：&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;/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;关于如何如此 flush 的原因，可参考这个文档的描述： [http://wiki.jackslab.org/images/Mips.cache.arch.pdf MIPS Cache 结构和代码分析 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;文档，涵盖 MIPS Cache 的方方面面，2008&lt;/del&gt;-05-30]&lt;/div&gt;&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;关于如何如此 flush 的原因，可参考这个文档的描述： [http://wiki.jackslab.org/images/Mips.cache.arch.pdf MIPS Cache 结构和代码分析 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;2008&lt;/ins&gt;-05-30]&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;=== 激进的 ===&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;/table&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=18590&amp;oldid=prev</id>
		<title>Comcat：/* 保守的 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=18590&amp;oldid=prev"/>
				<updated>2025-12-04T06:15:32Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;保守的&lt;/span&gt;&lt;/span&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;2025年12月4日 (四) 06:15的版本&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第133行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第133行：&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;/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;关于如何如此 flush 的原因，可参考这个文档的描述： http://&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;www&lt;/del&gt;.jackslab.org/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;people&lt;/del&gt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;comcat/mydoc/mips&lt;/del&gt;.cache.arch.pdf&lt;/div&gt;&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;关于如何如此 flush 的原因，可参考这个文档的描述： &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[&lt;/ins&gt;http://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;wiki&lt;/ins&gt;.jackslab.org/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;images&lt;/ins&gt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Mips&lt;/ins&gt;.cache.arch.pdf &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;MIPS Cache 结构和代码分析 文档，涵盖 MIPS Cache 的方方面面，2008-05-30]&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;=== 激进的 ===&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;/table&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=18568&amp;oldid=prev</id>
		<title>Comcat：/* 激进的 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=18568&amp;oldid=prev"/>
				<updated>2025-12-04T03:32:34Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;激进的&lt;/span&gt;&lt;/span&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;2025年12月4日 (四) 03:32的版本&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第158行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第158行：&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;&amp;lt;br&amp;gt;&amp;lt;br&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;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&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 class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/del&gt;&lt;/div&gt;&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;&amp;#160;&lt;/div&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 class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/del&gt;&lt;/div&gt;&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 class=&quot;diffchange diffchange-inline&quot;&gt;== Reference ==&lt;/ins&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;&amp;#160;&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 class=&quot;diffchange diffchange-inline&quot;&gt;* [[GNU/Linux 内核移植捉虫笔记 (Linux Kernel Debug Notes)]]&lt;/ins&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;&amp;#160;&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;br&amp;gt;&amp;lt;br&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;br&amp;gt;&amp;lt;br&amp;gt;&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=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=18566&amp;oldid=prev</id>
		<title>Comcat：/* 保守的 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=18566&amp;oldid=prev"/>
				<updated>2025-12-04T03:29:47Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;保守的&lt;/span&gt;&lt;/span&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;2025年12月4日 (四) 03:29的版本&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第70行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第70行：&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;改进的做法有点流氓 :) 引入了 cpu_use_kmap_coherent，让他们都走 else，然后对 else 中的程序块做了额外的 Cache flush 以消除因 Cache Aliases 引起的数据不一致问题：&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;改进的做法有点流氓 :) 引入了 cpu_use_kmap_coherent，让他们都走 else，然后对 else 中的程序块做了额外的 Cache flush 以消除因 Cache Aliases 引起的数据不一致问题：&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;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&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;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source lang=cpp&lt;/ins&gt;&amp;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;--- a/arch/mips/mm/init.c&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;--- a/arch/mips/mm/init.c&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;+++ b/arch/mips/mm/init.c&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;+++ b/arch/mips/mm/init.c&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第130行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第130行：&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;-#define cpu_has_dc_aliases 0&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;-#define cpu_has_dc_aliases 0&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;+#define cpu_use_kmap_coherent 0&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;+#define cpu_use_kmap_coherent 0&lt;/div&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;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&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;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source&lt;/ins&gt;&amp;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;/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;关于如何如此 flush 的原因，可参考这个文档的描述： http://www.jackslab.org/people/comcat/mydoc/mips.cache.arch.pdf&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;关于如何如此 flush 的原因，可参考这个文档的描述： http://www.jackslab.org/people/comcat/mydoc/mips.cache.arch.pdf&lt;/div&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;=== 激进的 ===&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;/table&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=18565&amp;oldid=prev</id>
		<title>Comcat：/* Solution */</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=18565&amp;oldid=prev"/>
				<updated>2025-12-04T03:29:21Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Solution&lt;/span&gt;&lt;/span&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;2025年12月4日 (四) 03:29的版本&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第14行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第14行：&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;kmap_coherent 就在这三个函数中被调用，且他们都会根据 cpu_has_dc_aliases 的值判断是否用 kmap_coherent，若其值为 0，则这些函数就会走另一条路径：&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;kmap_coherent 就在这三个函数中被调用，且他们都会根据 cpu_has_dc_aliases 的值判断是否用 kmap_coherent，若其值为 0，则这些函数就会走另一条路径：&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;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&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;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source lang=cpp&lt;/ins&gt;&amp;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;void copy_user_highpage(struct page *to, struct page *from,&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;void copy_user_highpage(struct page *to, struct page *from,&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;unsigned long vaddr, struct vm_area_struct *vma)&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;unsigned long vaddr, struct vm_area_struct *vma)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第64行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第64行：&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;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; memcpy(dst, src, len);&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;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; memcpy(dst, src, len);&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;}&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;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&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;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source&lt;/ins&gt;&amp;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;/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;/table&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=2292&amp;oldid=prev</id>
		<title>Comcat：以“== Solution ==  === 保守的 ===  参照 [Documentation/cachetlb.txt] 的指引，和引入 kmap_coherent 的 patch，发现焦点集中在 3 个函数中：  &lt;pre&gt;...”为内容创建页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=%E6%8D%89%E8%99%AB%E6%97%A5%E8%AE%B0_0008:_Cache_aliases_issue_(2)&amp;diff=2292&amp;oldid=prev"/>
				<updated>2014-05-19T08:24:47Z</updated>
		
		<summary type="html">&lt;p&gt;以“== Solution ==  === 保守的 ===  参照 [Documentation/cachetlb.txt] 的指引，和引入 kmap_coherent 的 patch，发现焦点集中在 3 个函数中：  &amp;lt;pre&amp;gt;...”为内容创建页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Solution ==&lt;br /&gt;
&lt;br /&gt;
=== 保守的 ===&lt;br /&gt;
&lt;br /&gt;
参照 [Documentation/cachetlb.txt] 的指引，和引入 kmap_coherent 的 patch，发现焦点集中在 3 个函数中：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
copy_to_user_page()&lt;br /&gt;
copy_from_user_page()&lt;br /&gt;
copy_user_highpage()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
kmap_coherent 就在这三个函数中被调用，且他们都会根据 cpu_has_dc_aliases 的值判断是否用 kmap_coherent，若其值为 0，则这些函数就会走另一条路径：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void copy_user_highpage(struct page *to, struct page *from,&lt;br /&gt;
unsigned long vaddr, struct vm_area_struct *vma)&lt;br /&gt;
{&lt;br /&gt;
    void *vfrom, *vto;&lt;br /&gt;
    vto = kmap_atomic(to, KM_USER1);&lt;br /&gt;
    if (cpu_has_dc_aliases) {&lt;br /&gt;
        vfrom = kmap_coherent(from, vaddr);&lt;br /&gt;
        copy_page(vto, vfrom);&lt;br /&gt;
        kunmap_coherent(from);&lt;br /&gt;
    } else {&lt;br /&gt;
    vfrom = kmap_atomic(from, KM_USER0);&lt;br /&gt;
      copy_page(vto, vfrom);&lt;br /&gt;
      kunmap_atomic(vfrom, KM_USER0);&lt;br /&gt;
    }  &lt;br /&gt;
&lt;br /&gt;
    if (((vma-&amp;gt;vm_flags &amp;amp; VM_EXEC) &amp;amp;&amp;amp; !cpu_has_ic_fills_f_dc) ||&lt;br /&gt;
          pages_do_alias((unsigned long)vto, vaddr &amp;amp; PAGE_MASK))&lt;br /&gt;
        flush_data_cache_page((unsigned long)vto);&lt;br /&gt;
    kunmap_atomic(vto, KM_USER1);&lt;br /&gt;
    /* Make sure this page is cleared on other CPU's too before using it *&lt;br /&gt;
    smp_wmb();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void copy_to_user_page(struct vm_area_struct *vma,&lt;br /&gt;
            struct page *page, unsigned long vaddr, void *dst, const void *src,&lt;br /&gt;
            unsigned long len)&lt;br /&gt;
{&lt;br /&gt;
    if (cpu_has_dc_aliases) {&lt;br /&gt;
        void *vto = kmap_coherent(page, vaddr) + (vaddr &amp;amp; ~PAGE_MASK);&lt;br /&gt;
        memcpy(vto, src, len);&lt;br /&gt;
        kunmap_coherent(page);&lt;br /&gt;
    } else&lt;br /&gt;
        memcpy(dst, src, len);&lt;br /&gt;
    if ((vma-&amp;gt;vm_flags &amp;amp; VM_EXEC) &amp;amp;&amp;amp; !cpu_has_ic_fills_f_dc)&lt;br /&gt;
    flush_cache_page(vma, vaddr, page_to_pfn(page))&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void copy_from_user_page(struct vm_area_struct *vma,&lt;br /&gt;
                struct page *page, unsigned long vaddr, void *dst, const void *src,&lt;br /&gt;
                unsigned long len)&lt;br /&gt;
{&lt;br /&gt;
    if (cpu_has_dc_aliases) {&lt;br /&gt;
        void *vfrom =&lt;br /&gt;
            kmap_coherent(page, vaddr) + (vaddr &amp;amp; ~PAGE_MASK);&lt;br /&gt;
        memcpy(dst, vfrom, len);&lt;br /&gt;
        kunmap_coherent(page);&lt;br /&gt;
    } else&lt;br /&gt;
        memcpy(dst, src, len);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
改进的做法有点流氓 :) 引入了 cpu_use_kmap_coherent，让他们都走 else，然后对 else 中的程序块做了额外的 Cache flush 以消除因 Cache Aliases 引起的数据不一致问题：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- a/arch/mips/mm/init.c&lt;br /&gt;
+++ b/arch/mips/mm/init.c&lt;br /&gt;
@@ -207,11 +207,13 @@&lt;br /&gt;
void *vfrom, *vto;&lt;br /&gt;
vto = kmap_atomic(to, KM_USER1);&lt;br /&gt;
- if (cpu_has_dc_aliases) {&lt;br /&gt;
+ if (cpu_has_dc_aliases &amp;amp;&amp;amp; cpu_use_kmap_coherent) {&lt;br /&gt;
vfrom = kmap_coherent(from, vaddr);&lt;br /&gt;
copy_page(vto, vfrom);&lt;br /&gt;
kunmap_coherent(from);&lt;br /&gt;
} else {&lt;br /&gt;
vfrom = kmap_atomic(from, KM_USER0);&lt;br /&gt;
+ if(pages_do_alias((unsigned long)vfrom, vaddr &amp;amp; PAGE_MASK))&lt;br /&gt;
+ flush_cache_page(vma, vaddr, page_to_pfn(from));&lt;br /&gt;
copy_page(vto, vfrom);&lt;br /&gt;
kunmap_atomic(vfrom, KM_USER0);&lt;br /&gt;
@@ -230,13 +231,14 @@&lt;br /&gt;
struct page *page, unsigned long vaddr, void *dst, const void *src,&lt;br /&gt;
unsigned long len)&lt;br /&gt;
{&lt;br /&gt;
- if (cpu_has_dc_aliases) {&lt;br /&gt;
+ if (cpu_has_dc_aliases &amp;amp;&amp;amp; cpu_use_kmap_coherent) {&lt;br /&gt;
void *vto = kmap_coherent(page, vaddr) + (vaddr &amp;amp; ~PAGE_MASK);&lt;br /&gt;
memcpy(vto, src, len);&lt;br /&gt;
kunmap_coherent(page);&lt;br /&gt;
} else&lt;br /&gt;
memcpy(dst, src, len);&lt;br /&gt;
- if ((vma-&amp;gt;vm_flags &amp;amp; VM_EXEC) &amp;amp;&amp;amp; !cpu_has_ic_fills_f_dc)&lt;br /&gt;
+ if ((vma-&amp;gt;vm_flags &amp;amp; VM_EXEC) &amp;amp;&amp;amp; !cpu_has_ic_fills_f_dc ||&lt;br /&gt;
+ pages_do_alias((unsigned long)dst, vaddr &amp;amp; PAGE_MASK))&lt;br /&gt;
flush_cache_page(vma, vaddr, page_to_pfn(page));&lt;br /&gt;
}&lt;br /&gt;
@@ -246,13 +248,16 @@&lt;br /&gt;
struct page *page, unsigned long vaddr, void *dst, const void *src,&lt;br /&gt;
unsigned long len)&lt;br /&gt;
{&lt;br /&gt;
- if (cpu_has_dc_aliases) {&lt;br /&gt;
+ if (cpu_has_dc_aliases &amp;amp;&amp;amp; cpu_use_kmap_coherent) {&lt;br /&gt;
    void *vfrom =&lt;br /&gt;
        kmap_coherent(page, vaddr) + (vaddr &amp;amp; ~PAGE_MASK);&lt;br /&gt;
    memcpy(dst, vfrom, len);&lt;br /&gt;
    kunmap_coherent(page);&lt;br /&gt;
- } else&lt;br /&gt;
+ } else {&lt;br /&gt;
+ if(pages_do_alias((unsigned long)src, vaddr &amp;amp; PAGE_MASK))&lt;br /&gt;
+ flush_cache_page(vma, vaddr, page_to_pfn(page));&lt;br /&gt;
    memcpy(dst, src, len);&lt;br /&gt;
+ }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
EXPORT_SYMBOL(copy_from_user_page);&lt;br /&gt;
&lt;br /&gt;
--- a/include/asm-mips/mach-bcm56218/cpu-feature-overrides.h&lt;br /&gt;
+++ b/include/asm-mips/mach-bcm56218/cpu-feature-overrides.h&lt;br /&gt;
@@ -11,6 +11,6 @@&lt;br /&gt;
#define __ASM_MACH_BCM56218_CPU_FEATURE_OVERRIDES_H&lt;br /&gt;
#define cpu_has_llsc 1&lt;br /&gt;
-#define cpu_has_dc_aliases 0&lt;br /&gt;
+#define cpu_use_kmap_coherent 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
关于如何如此 flush 的原因，可参考这个文档的描述： http://www.jackslab.org/people/comcat/mydoc/mips.cache.arch.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 激进的 ===&lt;br /&gt;
&lt;br /&gt;
此后轻松的盯了 kmap_coherent() 近一天，最后浮出水面的石头几乎让人崩溃，怀疑了很多不该怀疑的，可从来没有怀疑过 broadcom 的这个 MIPS 实现，它的 KSEG2 高端有一段地址空间，居然不经过 TLB，而 kmap_coherent 恰恰是用位于这个区间的地址来做 fixed map 的，经测试在清空所有 TLB 项的情形下，访问这段区域不会出现异常，且始终返回 0 值，感觉就像固定映射到了一个外设的内部 RAM（我称之为 black hole），要命的是 broadcom 没有任何的文档描述。下面这张图是以页为步进单位，多次访问得出：&lt;br /&gt;
&lt;br /&gt;
[[文件:Bcm-cache-alias.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FIXADDR_TOP 往下 8 页左右，即是 kmap_coherent 用来作临时固定映射的。知道的这一点，修正的手段也就很容易了，只要把 FIXADDR_TOP 往下移到 Black Hole 区以下即可，最终的修正比较简洁：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- a/include/asm-mips/fixmap.h.orig&lt;br /&gt;
+++ b/include/asm-mips/fixmap.h&lt;br /&gt;
@@ -79,6 +79,7 @@&lt;br /&gt;
*/&lt;br /&gt;
-#if defined(CONFIG_CPU_TX39XX) || defined(CONFIG_CPU_TX49XX)&lt;br /&gt;
+#if defined(CONFIG_CPU_TX39XX) || defined(CONFIG_CPU_TX49XX) || defined (CONFIG_BCM5621X)&lt;br /&gt;
#define FIXADDR_TOP ((unsigned long)(long)(int)(0xff000000 - 0x20000))&lt;br /&gt;
#else&lt;br /&gt;
#define FIXADDR_TOP ((unsigned long)(long)(int)0xfffe0000)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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>