aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/cacheflush.c13
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