捉虫日记 0014: RMI XLS 启动时间偏长

来自Jack's Lab
跳转到: 导航, 搜索

1 现象

环境:

  • RMI XLS 416 评估板
  • 内核版本 2.6.34-rc5
  • 基于 SDK 1.7.0 (内核版本 2.6.27) 升级


内核启动正常,mount 文件系统后,用户态进程初始化太慢,Level 3 的所有进程全起来大概要 10 分钟左右,抓狂。。。



2 分析

查了最近一次对代码所作的修改,发现主要集中在三处,一个是对 RMI XLS416 之 COP2 异常的处理(将原 do_cpu 之 CU2 异常处理修改为与 mainline 一致),一个是编译参数的改变(由 -march=r8000 改为 -march=xlr),还有一个就是对 TLB Refill Handler 生成函数逻辑的修改。


原 TLB Refill Handler 生成逻辑为:

@@ -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 */


咋一看在 tlbw(p); 后少了条 break,于是在 reviewer 指出后,顺手就加上了,编译通过,启动没问题,于是很轻率地就改了过来。哪知这一改,启动时间成倍加长



3 解决

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;





















个人工具
名字空间

变换
操作
导航
工具箱