diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/cacheflush.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/util/cacheflush.c b/util/cacheflush.c index 06c2333a60..a08906155a 100644 --- a/util/cacheflush.c +++ b/util/cacheflush.c @@ -237,11 +237,18 @@ static void __attribute__((constructor)) init_cache_info(void) #ifdef CONFIG_DARWIN /* Apple does not expose CTR_EL0, so we must use system interfaces. */ -extern void sys_icache_invalidate(void *start, size_t len); -extern void sys_dcache_flush(void *start, size_t len); +#include <libkern/OSCacheControl.h> + void flush_idcache_range(uintptr_t rx, uintptr_t rw, size_t len) { - sys_dcache_flush((void *)rw, len); + if (rx == rw) { + /* + * sys_icache_invalidate() syncs the dcache and icache, + * so no need to call sys_dcache_flush(). + */ + } else { + sys_dcache_flush((void *)rw, len); + } sys_icache_invalidate((void *)rx, len); } #else |