摘要
清除 CPU 資料和/或指示快取。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_cache_flush(const void* addr, size_t size, uint32_t options);
說明
zx_cache_flush()
會清除指定虛擬位址範圍內記憶體的 CPU 快取。如果無法讀取該記憶體範圍,則執行緒可能類似於讀取資料時發生的錯誤。
options 是位元 OR:
ZX_CACHE_FLUSH_DATA
清除 (寫入) 資料快取,因此這個 CPU 先前的寫入作業會顯示在主記憶體中。
ZX_CACHE_FLUSH_INVALIDATE
(只有在與ZX_CACHE_FLUSH_DATA
合併使用時才有效)清除 (寫回) 資料快取,然後使資料快取失效,這樣一來,這個 CPU 上先前的寫入作業會顯示在主記憶體中,日後的讀取作業也會出現在主要記憶體的外部變更。
ZX_CACHE_FLUSH_INSN
將指令快取與資料快取同步處理,讓指令擷取可以看見先前在這個 CPU 上的寫入作業。如果與
ZX_CACHE_FLUSH_DATA
合併使用,主記憶體和指示擷取都能看到先前的寫入內容。
至少一個 ZX_CACHE_FLUSH_DATA
和 ZX_CACHE_FLUSH_INSN
必須包含在選項中。
權限
TODO(https://fxbug.dev/42107318)
傳回值
zx_cache_flush()
會在成功時傳回 ZX_OK
;失敗時則傳回錯誤代碼。
錯誤
ZX_ERR_INVALID_ARGS
選項無效。