由於 Linux BSP 預設未在 SMP 模式中啟用快取和 TLB 維護廣播(暫存器 ACTLR 的位 0'0」),因此可能會看到快取一致性問題。
如需此位的描述,請參閱 ARM A9 MPCore 技術參考手冊[2]中廣播的第 1.7.3 節維護作業:
所有在同一一致性領域以 SMP 模式運作的處理器,都可以傳送並接收 TLB 與快取記憶體維護作業。ARM 架構參考手冊提供廣播作業的詳細資訊。A9-MP 叢集中的 Cortex-A9 處理器在 SMP 模式 (ACTLR) 中運作時,會廣播可廣播的維護作業。SMP=1)以及啟用維護操作廣播時 (ACTLR)。FW=1)。Cortex-A9 處理器在 SMP 模式 ACTLR 中運作時,可接收並執行廣播維護作業。SMP=1。
建議同時 設定 ACTLR。FW 與 ACTLR。SMP 至 1。我們可以在 proc-v7 中修改 Linux 代碼來設定位。S 檔案如下:
#ifdef CONFIG_SMP
ALT_SMP(mrc p15,0,r0,c1,c0,1)
ALT_UP (mov r0,#(1 << 6)) @ 偽造以供 UP 使用
已啟用 tst r0、#(1 << 6) @ SMP/nAMP 模式?
orreq r0, r0, #(1 << 6) @ 啟用 SMP/nAMP 模式
orreq r0, r0, r10 @ 啟用 CPU 特定 SMP 位
orr r0、r0、#(1) @Add此行可啟用 ACTLR[0]
mcreq p15, 0, r0, c1, c0, 1
#endif