Zynq-7000 SoC,APU - 数据缓存维护操作中止,然后是ISB,中间没有任何DSB,可能会导致死锁

描述

在某些情况下,在这些事件之间没有发生DSB的情况下,ISB中止并遵循的数据高速缓存维护操作可能导致处理器死锁。

该问题需要满足以下条件:

  1. 某些写操作正由处理器处理,需要很长时间才能完成。典型情况是在L1数据高速缓存中错过了写操作(STR,STM等)。
  2. 在条件3中提到的写操作和数据高速缓存维护操作之间没有插入存储器屏障(DMB或DSB)。
  3. 执行数据高速缓存维护操作,由于其MMU设置而中止。
  4. 在条件3中的数据高速缓存维护操作和条件5中的ISB之间没有插入内存屏障(DMB或DSB)。此处可以执行任何其他类型的代码,从中止的高速缓存维护操作之后的中止异常处理程序开始。
  5. ISB指令正由处理器执行。
  6. 在条件5中的ISB与条件7中的读或写操作之间没有插入存储器屏障(DMB或DSB)。
  7. 执行读或写操作。


在上述条件下,内部“数据端漏极请求”信号可能保持粘滞状态,导致ISB等待数据端为空,这种情况从未发生,因为上次读取或写入操作等待ISB完成。

影响: 次要。这个问题可能导致陷入僵局;但是,它可以通过解决方法来预防。
解决方法: 这个错误的简单解决方法是在中止异常处理程序的开头添加一个DSB。
受影响的配置: 使用CPU的系统。
受影响的器件版本: 所有。没有计划修复。请参阅(Xilinx答复47916) - Zynq-7000 SoC芯片版本差异。


修订记录
05/16/2013 - 初始版本

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-31 13:11:27 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它