]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
csky: syscache: Fixup duplicate cache flush
authorGuo Ren <guoren@linux.alibaba.com>
Tue, 4 May 2021 06:08:44 +0000 (14:08 +0800)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 13 Aug 2021 07:31:39 +0000 (09:31 +0200)
BugLink: https://bugs.launchpad.net/bugs/1938340
[ Upstream commit 6ea42c84f33368eb3fe1ec1bff8d7cb1a5c7b07a ]

The current csky logic of sys_cacheflush is wrong, it'll cause
icache flush call dcache flush again. Now fixup it with a
conditional "break & fallthrough".

Fixes: 997153b9a75c ("csky: Add flush_icache_mm to defer flush icache all")
Fixes: 0679d29d3e23 ("csky: fix syscache.c fallthrough warning")
Acked-by: Randy Dunlap <rdunlap@infradead.org>
Co-Developed-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
arch/csky/mm/syscache.c

index 4e51d63850c462e75253a43cb657e31894f847ba..cd847ad62c7ee4ccd45207473d118846afe432f3 100644 (file)
@@ -12,15 +12,17 @@ SYSCALL_DEFINE3(cacheflush,
                int, cache)
 {
        switch (cache) {
-       case ICACHE:
        case BCACHE:
-               flush_icache_mm_range(current->mm,
-                               (unsigned long)addr,
-                               (unsigned long)addr + bytes);
-               fallthrough;
        case DCACHE:
                dcache_wb_range((unsigned long)addr,
                                (unsigned long)addr + bytes);
+               if (cache != BCACHE)
+                       break;
+               fallthrough;
+       case ICACHE:
+               flush_icache_mm_range(current->mm,
+                               (unsigned long)addr,
+                               (unsigned long)addr + bytes);
                break;
        default:
                return -EINVAL;