Zynq-7000 SoC,APU - 数据缓存维护操作中止,然后是ISB,中间没有任何DSB,可能会导致死锁
描述
在某些情况下,在这些事件之间没有发生DSB的情况下,ISB中止并遵循的数据高速缓存维护操作可能导致处理器死锁。解
该问题需要满足以下条件:
- 某些写操作正由处理器处理,需要很长时间才能完成。典型情况是在L1数据高速缓存中错过了写操作(STR,STM等)。
- 在条件3中提到的写操作和数据高速缓存维护操作之间没有插入存储器屏障(DMB或DSB)。
- 执行数据高速缓存维护操作,由于其MMU设置而中止。
- 在条件3中的数据高速缓存维护操作和条件5中的ISB之间没有插入内存屏障(DMB或DSB)。此处可以执行任何其他类型的代码,从中止的高速缓存维护操作之后的中止异常处理程序开始。
- ISB指令正由处理器执行。
- 在条件5中的ISB与条件7中的读或写操作之间没有插入存储器屏障(DMB或DSB)。
- 执行读或写操作。
在上述条件下,内部“数据端漏极请求”信号可能保持粘滞状态,导致ISB等待数据端为空,这种情况从未发生,因为上次读取或写入操作等待ISB完成。
影响: | 次要。这个问题可能导致陷入僵局;但是,它可以通过解决方法来预防。 |
解决方法: | 这个错误的简单解决方法是在中止异常处理程序的开头添加一个DSB。 |
受影响的配置: | 使用CPU的系统。 |
受影响的器件版本: | 所有。没有计划修复。请参阅(Xilinx答复47916) - Zynq-7000 SoC芯片版本差异。 |
修订记录
05/16/2013 - 初始版本
添加评论