AR# 52031

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

描述

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

解决方案

这个问题需要出现以下情况:

  1. 处理器正在处理的有些写入操作需要很长时间才能完成。典型的情况是在写入操作(STR、STM 等)在 L1 数据高速缓存中漏掉的时候。
  2. 没有在写入操作和条件 3 中提到的数据高速缓存维护操作之间插入内存屏障(DMB 或 DSB)。
  3. 执行数据高速缓存维护操作,可能会因为其 MMU 设置而中止。
  4. 没有在条件 3 中的数据高速缓存维护操作和条件 5 中的数据高速缓存维护操作之间插入内存屏障(DMB 或 DSB)。任何其它类型的代码都可以在这里执行,从中止的高速缓存维护操作之后的中止异常处理程序开始。
  5. 处理器正在执行一个 ISB 指令。
  6. 没有在条件 5 中的 ISB 和条件 7 中的读取或写入操作之间插入内存屏障(DMB 或 DSB)。
  7. 可执行一个读取或写入操作。


在上述条件下,一个内部 “数据侧漏请求”信号可能仍然会保持粘性,导致 ISB 等待数据侧为空,这永远不会发生,因为最后一次读取或写入操作会等待 ISB 完成。

影响:很小。这个问题可能会导致死锁,但它可以通过一种解决方法来避免。
解决方法::该错误的简单解决方法就是在中止异常处理程序开始时添加一个 DSB。
受影响的配置: 使用 CPU 的系统。
受影响的器件修订版本:全部. 无计划修复. 参考 (Xilinx Answer 47916) - Zynq-7000 SoC 芯片版本差异。


修订历史:
05/16/2013 - 初始版本

链接问答记录

主要问答记录

Answer Number 问答标题 问题版本 已解决问题的版本
47916 Zynq-7000 SoC 器件:芯片修订差异 N/A N/A
AR# 52031
日期 05/25/2018
状态 Active
Type 设计咨询
器件