查看捉虫日记 0014: RMI XLS 启动时间偏长的源代码
←
捉虫日记 0014: RMI XLS 启动时间偏长
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== 现象 == 环境: * RMI XLS 416 评估板 * 内核版本 2.6.34-rc5 * 基于 SDK 1.7.0 (内核版本 2.6.27) 升级 内核启动正常,mount 文件系统后,用户态进程初始化太慢,Level 3 的所有进程全起来大概要 10 分钟左右,抓狂。。。 <br><br> == 分析 == 查了最近一次对代码所作的修改,发现主要集中在三处,一个是对 RMI XLS416 之 COP2 异常的处理(将原 do_cpu 之 CU2 异常处理修改为与 mainline 一致),一个是编译参数的改变(由 -march=r8000 改为 -march=xlr),还有一个就是对 TLB Refill Handler 生成函数逻辑的修改。 原 TLB Refill Handler 生成逻辑为: <pre> @@ -335,6 +342,8 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l, case CPU_ALCHEMY: tlbw(p); break; + case CPU_PHOENIX: + tlbw(p); case CPU_NEVADA: uasm_i_nop(p); /* QED specifies 2 nops hazard */ </pre> 咋一看在 tlbw(p); 后少了条 break,于是在 reviewer 指出后,顺手就加上了,编译通过,启动没问题,于是很轻率地就改了过来。哪知这一改,启动时间成倍加长 <br><br> == 解决 == <pre> case CPU_PHOENIX: uasm_i_nop(p); /* QED specifies 2 nops hazard */ /* * This branch uses up a mtc0 hazard nop slot and saves * a nop after the tlbw instruction. */ uasm_il_bgezl(p, r, 0, label_tlbw_hazard); tlbw(p); uasm_l_tlbw_hazard(l, *p); break; </pre> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br><br><br> <br><br> <br><br> <br><br>
返回到
捉虫日记 0014: RMI XLS 启动时间偏长
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面