AR# 47549

Zynq-7000 SoC、APU - 同じキャッシュ ラインが CPU と ACP の両方からアクセスされると SMP モードでシステム デッドロックが発生することがある

説明

ACP 要求が CPU による複数のフル キャッシュ ライン書き込みと同時に実行される可能性がある場合、非常にまれに SCU でアービトレーション問題が発生し、プロセッサのデッドロック状態になることがあります。この状況は、CPU が SMP モードで動作しており、一貫性のあるメモリ領域に対して処理を実行していて、1 つの CPU がキャッシュ ラインから読み出しを実行しているのとほぼ同時にもう 1 つの CPU が同じキャッシュ ラインに書き込みを実行し、ACP も同じキャッシュ ラインに要求を発行した場合に発生します。

この問題は SMP システムで発生することがありますが、タイミング ウィンドウは非常に小さく、3 つの要求が同じキャッシュ ラインに対して発行される必要があるので、非常にまれです。オペレーティング システムでこの状況を回避できない場合、問題が発生しないように制御ビットを設定できます。

ソリューション

影響:

深刻な問題ではありません。発生することはまれです。詳細は、「影響の詳細」を参照してください。

回避策 :

ソフトウェアでの回避策があります。「回避策の詳細」を参照してください。

対象となるコンフィギュレーション :

ACP ポートと両方の ARM プロセッサを SMP モードで使用するシステム

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

 

ACP 要求が 2 つのプロセッサからのフル キャッシュ ライン書き込みと同時に実行される可能性がある場合、非常にまれに SCU でアービトレーション問題が発生し、プロセッサのデッドロック状態になることがあります。

この問題は、2 つのプロセッサが SMP モードで動作しており、一貫性のあるメモリ領域に対して処理を実行している場合に発生することがあります (ライトバックを共有)。2 つのプロセッサがフル キャッシュ ライン書き込みを実行し、ACP が一貫性のある要求を実行する場合です。この ACP 要求は、一部のプロセッサ要求と問題を引き起こす可能性があります。

次に、デッドロック状態を引き起こす可能性のある状況の例を説明します。

    CPU0 がアドレス A に対してフル キャッシュ ライン書き込みを実行します。もう 1 つの CPU または ACP がこのキャッシュ ラインに既にアクセスしているので、この書き込みは SCU で問題を引き起こす可能性があります。
    CPU0 がアドレス B に対してフル キャッシュ ライン書き込みを実行します。
    CPU0 がアドレス B に対してフル キャッシュ ライン書き込みを実行します。

上記とほぼ同時に、次の処理が実行されます。

    CPU1 がアドレス D に対してフル キャッシュ ライン書き込みを実行します。もう 1 つの CPU または ACP がこのキャッシュ ラインに既にアクセスしているので、この書き込みは SCU で問題を引き起こす可能性があります。
    CPU1 がアドレス C に対してフル キャッシュ ライン書き込みを実行します。
    CPU1 がアドレス B に対して読み出しを実行します。この読み出しは、SCU で上記の CPU0 からの 2 番目の要求と問題を引き起こす可能性があります。

最後に、次の処理が実行されます。

    ACP がアドレス B に対して読み出しまたは書き込み要求を実行します。この要求は、CPU1 からの 3 番目の要求と問題を引き起こす可能性があります。

この状況では、非常にまれな条件下では、すべての要求 (CPU0、CPU1、および ACP) が問題となる可能性があります。SCU の擬似ラウンドロビン アービトレーションが最終的には ACP に留まり、どちらの CPU 要求も ACP 要求も進行されず、システムがデッドロック状態になります。

影響

深刻な影響はありません。発生した場合、システムがデッドロック状態になります。このような状況は非常にまれであり、両方のプロセッサがフル キャッシュ ラインに書き込みを実行し、セマフォなしで ACP と共に同じラインにアクセスする必要があります。さらに、欠陥が発生する可能性のあるアーキテクチャ上のタイミング条件が発生する可能性も限りなく低いため、この問題により実際のシステムで重大な機能上の問題が発生することはないと考えられます。

回避策の詳細

この問題をソフトウェアで回避するには、CP15 c15 0 c0 1 に配置されている診断制御レジスタのビット 21 をセットします。

このビットは、セキュア ステートでのみ、次の読み出し/変更/書き込みコード シーケンスで書き込むことができます。

    MRC p15,0,rt,c15,c0,1
    ORR rt,rt,#0x200000
    MCR p15,0,rt,c15,c0,1

このビットをセットすると、バス インターフェイス ユニットの直接エビクション最適化が無効になり、エラーが発生するのを回避します。

このビットをセットすると、フル キャッシュ ライン書き込みが多量に実行される場合にプロセッサでバンド幅全体を活用できず、システムのパフォーマンスが多少低下する可能性があります。

診断制御レジスタで次の 2 つのビットが既にセットされている場合は、問題は発生しません。

    ビット 23 : 読み出し割り当てモードのディスエーブル
    ビット 22 : 書き込み割り当てモードのディスエーブル

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

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

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