AR# 55326

Zynq-7000 SoC, APU - 页面一级缓存最后一行的 branch-to-self 指令可能导致服务拒绝。

描述

从一个页面的最后一个 L1 高速缓存行执行分支至自循环,可能会导致处理器内连续的请求流,这可能会阻碍其它处理器所执行的 CP15 广播操作。

解决方案

请注意,由于执行 CP15 广播操作的处理器无法完成该操作,因此它无法进入任何调试模式,也无法采取任何中断措施。如果不能中断执行分支至自循环的处理器(例如,如果它已禁用其中断,或者如果所有中断都已路由至其它处理器),该问题可能会引起系统活锁。

影响: 很小。该问题可能会影响系统性能,最糟糕时,如果不能中断执行分支至自循环的处理器,可能会导致系统活锁。
解决方法::中断由 CPU 生成的连续请求流,可参阅解决方法详细信息。
受影响的配置: 使用 CPU 的系统。
受影响的器件修订版本:全部. 无计划修复. 参考 (Xilinx Answer 47916) - Zynq-7000 SoC 芯片版本差异。
第三方 Errata:Arm Errata 799769


解决方法详情

要解决该问题,您可以中断在执行分支至自循环的处理器中生成的连续请求流。在等待外部事件发生时,软件通常会执行一个分支至自循环,例如多处理器环境中的锁定释放。推荐的解决方法是按照《ARM 架构参考手册》的建议,用包含 WFE 或 WFI 指令的循环替换分支至自循环。其它解决方法(例如在循环中添加 NOP 或将分支至自指令移至除该页最后一个缓存行以外的任何位置)也可避免该问题。

如果无法对执行分支至自循环的软件进行修改,推荐的解决方法是强制执行循环的处理器定期采取中断措施,其可起到看门狗的作用。有几种方法可产生周期性中断,这些方法可能是系统专用的。可能的备选方案是由本地定时器、全局定时器或性能监控单元周期计数器溢值产生的中断。

链接问答记录

主要问答记录

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