diff options
author | Will Deacon <[email protected]> | 2015-10-06 18:46:23 +0100 |
---|---|---|
committer | Catalin Marinas <[email protected]> | 2015-10-07 11:45:27 +0100 |
commit | 8e63d38876691756f9bc6930850f1fb77809be1b (patch) | |
tree | 74f5a739675a90c71d1f07e937c2e3f512781b7e /arch/arm64/include/asm/cacheflush.h | |
parent | fa7aae8a4257e6be7051420dac1f150c1eef721b (diff) |
arm64: flush: use local TLB and I-cache invalidation
There are a number of places where a single CPU is running with a
private page-table and we need to perform maintenance on the TLB and
I-cache in order to ensure correctness, but do not require the operation
to be broadcast to other CPUs.
This patch adds local variants of tlb_flush_all and __flush_icache_all
to support these use-cases and updates the callers respectively.
__local_flush_icache_all also implies an isb, since it is intended to be
used synchronously.
Reviewed-by: Catalin Marinas <[email protected]>
Acked-by: David Daney <[email protected]>
Acked-by: Ard Biesheuvel <[email protected]>
Signed-off-by: Will Deacon <[email protected]>
Signed-off-by: Catalin Marinas <[email protected]>
Diffstat (limited to 'arch/arm64/include/asm/cacheflush.h')
-rw-r--r-- | arch/arm64/include/asm/cacheflush.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/arm64/include/asm/cacheflush.h b/arch/arm64/include/asm/cacheflush.h index c75b8d027eb1..54efedaf331f 100644 --- a/arch/arm64/include/asm/cacheflush.h +++ b/arch/arm64/include/asm/cacheflush.h @@ -115,6 +115,13 @@ extern void copy_to_user_page(struct vm_area_struct *, struct page *, #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 extern void flush_dcache_page(struct page *); +static inline void __local_flush_icache_all(void) +{ + asm("ic iallu"); + dsb(nsh); + isb(); +} + static inline void __flush_icache_all(void) { asm("ic ialluis"); |