この問題は、次の条件すべてに該当する場合に発生します。
- 両方のプロセッサが SMP モードで機能している (ACTLR.SMP=1)。
- プロセッサの 1 つが、少なくとも 1 つの DMB 命令を含む短いループを継続的に実行する。短いループも、さらに次の条件をすべて満たす必要があります。
- もう 1 つのプロセッサがブロードキャストされている CP15 保守操作を実行する。この場合、このプロセッサが CP15 操作のブロードキャストをイネーブルにしている必要がある (ACTLR.FW=1)。
これらの条件すべてが満たされると、短いループにより、DMB 命令が連続してストリーム生成されます。そうすると、短いループを実行しているプロセッサが受信された CP15 操作を実行できなくなり、サービスが拒否される可能性があります。その結果、CP15 ブロードキャスト操作を元々実行していたプロセッサが、このループが割り込まれるまで停止します。
この CP15 ブロードキャスト処理を実行しているプロセッサは、操作を完了できないため、デバッグ モードに入ったり、割り込みを処理したりできません。短いループを実行しているプロセッサに割り込むことができない場合、たとえば、割り込みがディスエーブルになっている場合、または割り込みがこのプロセッサには送信されない場合などは、システムがライブロック状態になる可能性があります。
影響: | 深刻な問題ではありません。この問題のせいで、パフォーマンスの問題が起きる可能性があります。または、DMB を実行しているプロセッサが割り込むことのできない無限ループになっていると、システムがライブロック状態になる可能性があります。ただし、そうなることは稀であり、また回避策もあります。 |
回避策: | この問題は、資料に記載されていない Diagnostic Control レジスタのビット [4] を 1 に設定することにより回避できます。詳細は「回避策の詳細」セクションを参照してください。 |
対象となるコンフィギュレーション: | CPU を使用するシステム。 |
対象となるデバイス リビジョン: | すべて。修正予定はありません。(Xilinx Answer 47916) - 「Zynq-7000 AP SoC デバイス - シリコン リビジョン間の相違点」を参照してください。 |
回避策の詳細:
この問題は、資料に記載されていない Diagnostic Control レジスタのビット [4] を 1 に設定することにより回避できます。このレジスタは、CP15 c15 0 c0 1 としてエンコードされています。このビットは、次の読み出し-変更-書き込みのコード シーケンスを使用し、セキュア モードでのみ書き込むことができます。
MRC p15, 0, rt, c15, c0, 1
ORR rt, rt, #0x10
MCR p15, 0, rt, c15, c0, 1
このビットを設定すると、DMB 命令がデコードされ、DSB のように実行されます。
このソフトウェア上の回避策を使用しても、一般的なコード ベースでプロセッサの全体的なパフォーマンスには影響を及ぼしません。
また、この問題は、次のいずれかの方法で回避することもできます。
Answer Number | アンサータイトル | 問題の発生したバージョン | 修正バージョン |
---|---|---|---|
47916 | Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点 | N/A | N/A |
AR# 52032 | |
---|---|
日付 | 06/13/2018 |
ステータス | アクティブ |
種類 | デザイン アドバイザリ |
デバイス |