OSDN Git Service

powerpc: Convert flush_icache_range & friends to C
authorAlastair D'Silva <alastair@d-silva.org>
Mon, 4 Nov 2019 02:32:56 +0000 (13:32 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 7 Nov 2019 12:35:37 +0000 (23:35 +1100)
commit23eb7f560a2a6a1b0dbaaaae8685da75314347e4
tree9dba33b00aa95efa7a9e3db543e95e05b97553d6
parent7a0745c5e03ff1129864bc6d80f5c4417e8d7893
powerpc: Convert flush_icache_range & friends to C

Similar to commit 22e9c88d486a
("powerpc/64: reuse PPC32 static inline flush_dcache_range()")
this patch converts the following ASM symbols to C:
    flush_icache_range()
    __flush_dcache_icache()
    __flush_dcache_icache_phys()

This was done as we discovered a long-standing bug where the length of the
range was truncated due to using a 32 bit shift instead of a 64 bit one.

By converting these functions to C, it becomes easier to maintain.

flush_dcache_icache_phys() retains a critical assembler section as we must
ensure there are no memory accesses while the data MMU is disabled
(authored by Christophe Leroy). Since this has no external callers, it has
also been made static, allowing the compiler to inline it within
flush_dcache_icache_page().

Signed-off-by: Alastair D'Silva <alastair@d-silva.org>
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
[mpe: Minor fixups, don't export __flush_dcache_icache()]
Link: https://lore.kernel.org/r/20191104023305.9581-5-alastair@au1.ibm.com
arch/powerpc/include/asm/cache.h
arch/powerpc/include/asm/cacheflush.h
arch/powerpc/kernel/misc_32.S
arch/powerpc/kernel/misc_64.S
arch/powerpc/mm/mem.c