AR# 52034

Zynq-7000 SoC、APU -キャッシュ不可で共有可能な通常メモリ領域への書き込み要求が 2 回実行され、ソフトウェア同期化問題が発生することがある

説明

Cortex-A9 マイクロアーキテクチャの特有のタイミング条件により、キャッシュ不可で共有可能の通常メモリ領域に対する書き込み要求が 2 回実行され、AXI バスに書き込み要求が 2 回送信されることがあります。

ソリューション

この問題は、書き込み要求の後に、同じ自然にアライメントされたダブルワード メモリ領域に対して、DMB なしで別の書き込み要求が発行された場合に発生する可能性があります。2 番目の書き込み要求は、最初のストアとまったく同じバイトに実行されるべきではありません。書き込みの繰り返しは、同期化の目的で使用される場合を除き、システムの全体的な動作に影響を与えることは通常ありません。

通常のメモリ領域への書き込み要求は、次の場合にキャッシュ不可として処理されます。

  • データ キャッシュがディスエーブルのときに書き込み要求が発生する。
  • 書き込み要求が、通常メモリ キャッシュ不可またはキャッシュ可能ライトスルーとしてマークされているメモリ領域に対して発行される。
  • 書き込み要求が、通常メモリ キャッシュ可能ライトバックまたは共有可能としてマークされているメモリ領域に対して発行され、CPU が AMP モードである。

この動作は、セマフォなど、制御情報が通信変数を使用してメモリ内のいくつかのプロセッシング エレメントの間を渡される複数マスター システムに影響する可能性があります。そのようなシステムでは、通信変数の獲得に排他ロード/排他ストア、通信変数をクリアするのに非排他ストアが使用されることがよくあります。この問題のため、通信変数のクリアが 2 回発生し、2 つのマスターにより通信変数が獲得され、共有データが破損する可能性があります。

次に、これが発生する可能性のある状況を示します。


MOV       r1,#0x40     ; address is double-word aligned, mapped
; in Normal Non-cacheable Shareablememory
Loop: LDREX      r5, [r1,#0x0] ; read the communication variable
CMP       r5, #0       ; check if 0
STREXEQ   r5, r0, [r1] ; attempt to store new value
CMPEQ     r5, #0       ; test if store succeeded
BNE       Loop         ; retry if not
DMB                    ; ensures that all subsequent accesses
                       ; are observed when gaining of the
                       ; communication variable has been observed
; loads and stores in the critical region can now be performed
MOV       r2,#0
MOV       r0, #0
DMB                    ; ensure all previous accesses are observed
                       ; before the communication variable is cleared
STR       r0, [r1]     ; clear the communication variable with normal store
STR       r2, [r1,#0x4]
; previous STR might merge and be sent again, which might
; cause undesired release of the communication variable.


この状況は、通信変数がバイト、ハーフワード、またはワードの場合は有効です。

回避策の詳細:

いくつかの回避策があります。

1) 通信変数をクリアした後に DMB を追加します。

STR    r0, [r1]     ; clear the communication variable
DMB                 ; ensure the previous STR is complete


IRQ または FIQ ハンドラーでも、開始時に DMB を実行して、通信変数のクリアが完了することを確実にする必要があります。

20 通信変数と同じ自然にアライメントされた 64 ビット メモリ ロケーションを使用するデータがほかにないことを確認します。

ALIGN 64
communication_variable DCD    0
communication_variable DCD    0
                       LDR    r1,= communication_variable


3) 通信変数をクリアするのに、非排他ストアではなく、排他ストアを使用します。

 

影響: 深刻な問題ではありません。
回避策:いくつかの回避策があります。「回避策の詳細」を参照してください。
対象となる構成:CPU を使用するシステム
対象となるデバイス リビジョン:すべて。修正予定はありません。(Xilinx Answer 47916) - 「Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点」を参照してください。


改訂履歴

2013/05/16 - 初版

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

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

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