AR# 52032

Zynq-7000 SoC、APU - DMB 命令を含む短いループにより CP15 ブロードキャスト操作を実行しようとする別のプロセッサのサービスが拒否される

説明

DMB 命令を含む短いループ コードにより、CP15 ブロードキャスト操作を実行しようとする別のプロセッサのサービスが拒否されます。

ソリューション

この問題は、次の条件すべてに該当する場合に発生します。

- 両方のプロセッサが SMP モードで機能している (ACTLR.SMP=1)。
- プロセッサの 1 つが、少なくとも 1 つの DMB 命令を含む短いループを継続的に実行する。短いループも、さらに次の条件をすべて満たす必要があります。

  •        各 DMB の間で実行される DMB 以外の命令が 10 を超えない。
  •        条件なしのロードまたはストア、または条件コード チェックをパスする条件付きのロードまたはストアが、各 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 のように実行されます。

このソフトウェア上の回避策を使用しても、一般的なコード ベースでプロセッサの全体的なパフォーマンスには影響を及ぼしません。

また、この問題は、次のいずれかの方法で回避することもできます。

  • 条件なしのロードまたはストア命令を各 DMB 間のループに挿入する。
  • プロセッサが連続 DMB 命令を避けられるように、ループに NOP などの追加命令を挿入する。
  • 短いループを実行しているプロセッサで普通の割り込み処理ができるようにしておく。

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
47916 Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点 N/A N/A
AR# 52032
日付 06/13/2018
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス