]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
LoongArch: Add flush_icache_all()/local_flush_icache_all()
authorYouling Tang <tangyouling@kylinos.cn>
Wed, 22 Apr 2026 07:45:12 +0000 (15:45 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Wed, 22 Apr 2026 07:45:12 +0000 (15:45 +0800)
LoongArch maintains ICache/DCache coherency by hardware, so we just need
"ibar 0" to avoid instruction hazard here.

Signed-off-by: Youling Tang <tangyouling@kylinos.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/include/asm/cacheflush.h
arch/loongarch/mm/cache.c

index f8754d08a31ab07490717c31b9253871668b9a76..190651be9546149b5bc79da99247fb161371ca8f 100644 (file)
@@ -32,8 +32,22 @@ static inline unsigned int cpu_last_level_cache_line_size(void)
 }
 
 asmlinkage void __flush_cache_all(void);
-void local_flush_icache_range(unsigned long start, unsigned long end);
 
+/*
+ * LoongArch maintains ICache/DCache coherency by hardware,
+ * we just need "ibar" to avoid instruction hazard here.
+ */
+static inline void local_flush_icache_all(void)
+{
+       asm volatile ("ibar\t0\n"::);
+}
+
+static inline void local_flush_icache_range(unsigned long start, unsigned long end)
+{
+       asm volatile ("ibar\t0\n"::);
+}
+
+#define flush_icache_all       local_flush_icache_all
 #define flush_icache_range     local_flush_icache_range
 #define flush_icache_user_range        local_flush_icache_range
 
index 496916845ff764d83b75db520cad5d220d241f76..06dc570eb429e0735e104a7ad5b3cf494d7ae04b 100644 (file)
@@ -31,16 +31,6 @@ void cache_error_setup(void)
        set_merr_handler(0x0, &except_vec_cex, 0x80);
 }
 
-/*
- * LoongArch maintains ICache/DCache coherency by hardware,
- * we just need "ibar" to avoid instruction hazard here.
- */
-void local_flush_icache_range(unsigned long start, unsigned long end)
-{
-       asm volatile ("\tibar 0\n"::);
-}
-EXPORT_SYMBOL(local_flush_icache_range);
-
 static void flush_cache_leaf(unsigned int leaf)
 {
        int i, j, nr_nodes;