MIPS CP0 Hazards问题--从Release1到Release2

来源:互联网 发布:网络基础知识ppt 编辑:程序博客网 时间:2024/06/05 11:35
关于的CP0 Hazards,官方定义是:
Each instruction in the program sees the results of the previous instruction.
There are some deviations to this model. These deviations are referred to as hazards.

举个关中断的例子:
    mfc0  v0, CP0_STATUS
    ori   v0, v0, M_SR_IE
    xori  v0, v0, M_SR_IE
    mtc0    v0, CP0_STATUS
   
    lw       t0,schedule_checkfuntionnum
    beqz        t0,Schedule_Check_End
    nop
    ...
   
我们期望下面这条lw语句是在关中断的上下文运行,但是mtc0写入cp0_status寄存器不能在一下pipeline step马上有效。
就是说lw指令到底执行阶段是中断还可能开这的。

为了解决类似的CP0 Hazards问题。需要在mtc0这种可能会导致CP0 Hazards的指令后面插入一些指令。
在MIP Release1通常插入一些SSNOP来解决。到了MIPS Release2提供了EHB这类的指令来解决。
在MIPS Release2 CPU中如果软件还是Releas1中使用SSNOP,可能会有问题。
因为PipeLine越来越长,原来固定加的几个SSNOP可能不够用。而EHB指令会让PipeLine停止取指,直到instruction buffer为空。

从Release1升级到Release2,与arch和kernel相关的代码N多都重修订。

----------
这个问题间接引发了一个alloc_skb()的内存改写bug,查到吐血,妈了个逼的。
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1549) | 评论(0) | 转发(0) |
0

上一篇:(转)关于上班的一些事儿

下一篇:MIPS架构培训之MMU原理

相关热门文章
  • SHTML是什么_SSI有什么用...
  • 卡尔曼滤波的原理说明...
  • shell中字符串操作
  • 关于java中的“错误:找不到或...
  • linux设备驱动归纳总结...
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~