AR# 47586

Zynq-7000 SoC、APU - 中止されたメモリ領域に対して投機的キャッシュ可能な読み出しを実行すると、内部排他モニターがクリアされ、ライブロック状態になることがある

説明

キャッシュ可能読み出し中に外部中止が受信されると、中止されたラインがデータ キャッシュで無効として割り当てられ、データ キャッシュでそのラインが割り当てられると内部排他モニターがクリアされます。そのため、プログラムにより DSB 命令を含む LDREX/STREX ループが実行され、LDREX/STREX シーケンス中に中止応答が受信され続けると、LDREX/STREX シーケンスは正しく完了しません。

この問題は、キャッシュ可能メモリ要求への応答として外部中止を生成する可能性のあるシステムで発生します。この問題を回避するには、分岐予測をオンにするか、LDREX/STREX シーケンスから DSB を削除します。

ソリューション

影響:

深刻な問題ではありません。

回避策:

この問題を回避するには、分岐予測をオンにするか、LDREX/STREX シーケンスから DSB を削除します。

対象となる構成:

プロセッサの 1 つまたは両方を使用するシステム

対象となるデバイス リビジョン:すべて。修正の予定はありません。(Xilinx Answer 47916) - 「Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点」を参照してください。



Cortex-A9 では、キャッシュ可能読み出し中に外部中止が受信されると、中止されたラインがデータ キャッシュで無効として割り当てられ、データ キャッシュでそのラインが割り当てられると内部排他モニターがクリアされます。そのため、プログラムにより DSB 命令を含む LDREX/STREX ループが実行され、LDREX/STREX シーケンス中に中止応答が受信され続けると、LDREX/STREX シーケンスが正しく完了せず、プロセッサがライブロック状態になることがあります。

たとえば、次のようなコード シーケンスで問題が発生する可能性があります。

loop LDREX ... DSB STREX CMP BNE loop ...LDR (中止する領域に対して)

LDREX/STREX ループの最初の反復が正しく完了せず、 BNE が予測され、LDR が投機的に実行されて、プロセッサが次を実行し続けます。

LDR to aborting region (この投機的 LDR は LDREX および DSB の前にあるように見える) LDREX DSB STREX 

L1 キャッシュで LDR がミスとなり、中止されているので有効として割り当てられることはありません。

LDREX が実行され、排他モニターが設定されます。

DSB が実行されます。LDR が完了するまで待機しますが、中止されるので、データ キャッシュで無効として割り当てられ、排他モニターがクリアされます。STREX が実行されますが、排他モニターがクリアされているので、STREX は正しく実行されません。

BNE が再び予測される場合があり、そのため LDR が投機的に再び実行され、正しく実行されなかった LDREX/STREX シーケンスにループバックします。

影響の詳細

この問題は、キャッシュ可能メモリ要求への応答として外部中止を生成する可能性のあるシステムで発生します。LDREX/STREX シーケンス中に内部排他モニターが継続的にクリアされる状態になると、プロセッサがライブロック状態になることがあります。

実際には、いくつかの条件によりエラーが発生するのが回避されるので、この状態はほとんど発生しません。

  • LDREX/STREX コード シーケンスには通常 DSB は含まれないので、LDREX/STREX シーケンス中の各反復でシステムが中止応答を返すことはほとんどありません。
  • 割り込みなどのその他の要因によりタイミングが変更され、プロセッサはライブロック状態から回復できます。
  • 分岐予測はイネーブルになっていることが多く、通常ループを数回繰り返すとループの最終分岐が正しく予測され、投機的 LDR が発行されるのが回避され、次の LDREX/STREX シーケンスは正しく実行されます。

回避策の詳細

この問題の回避策は 2 つあります。

  • 分岐予測をオンにします。
  • LDREX/STREX シーケンスから DSB を削除します。DSB が必要な場合は、LDREX/STREX シーケンスの前に配置し、LDREX/STREX シーケンスを ARM アーキテクチャの推奨事項に従ってインプリメントすることをお勧めします。

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

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

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