Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Add linux/cacheflush.h

Many architectures do not include asm-generic/cacheflush.h, so turn
the includes on their head and add linux/cacheflush.h which includes
asm/cacheflush.h.

Move the flush_dcache_folio() declaration from asm-generic/cacheflush.h
to linux/cacheflush.h and change linux/highmem.h to include
linux/cacheflush.h instead of asm/cacheflush.h so that all necessary
places will see flush_dcache_folio().

More functions should have their default implementations moved in the
future, but those are for follow-on patches. This fixes csky, sparc and
sparc64 which were missed in the commit which added flush_dcache_folio().

Fixes: 08b0b0059bf1 ("mm: Add flush_dcache_folio()")
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>

+19 -20
-1
arch/arc/include/asm/cacheflush.h
··· 36 36 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 37 37 38 38 void flush_dcache_page(struct page *page); 39 - void flush_dcache_folio(struct folio *folio); 40 39 41 40 void dma_cache_wback_inv(phys_addr_t start, unsigned long sz); 42 41 void dma_cache_inv(phys_addr_t start, unsigned long sz);
-1
arch/arm/include/asm/cacheflush.h
··· 290 290 */ 291 291 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 292 292 extern void flush_dcache_page(struct page *); 293 - void flush_dcache_folio(struct folio *folio); 294 293 295 294 #define ARCH_IMPLEMENTS_FLUSH_KERNEL_VMAP_RANGE 1 296 295 static inline void flush_kernel_vmap_range(void *addr, int size)
-1
arch/m68k/include/asm/cacheflush_mm.h
··· 250 250 251 251 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 252 252 #define flush_dcache_page(page) __flush_page_to_ram(page_address(page)) 253 - void flush_dcache_folio(struct folio *folio); 254 253 #define flush_dcache_mmap_lock(mapping) do { } while (0) 255 254 #define flush_dcache_mmap_unlock(mapping) do { } while (0) 256 255 #define flush_icache_page(vma, page) __flush_page_to_ram(page_address(page))
-2
arch/mips/include/asm/cacheflush.h
··· 61 61 SetPageDcacheDirty(page); 62 62 } 63 63 64 - void flush_dcache_folio(struct folio *folio); 65 - 66 64 #define flush_dcache_mmap_lock(mapping) do { } while (0) 67 65 #define flush_dcache_mmap_unlock(mapping) do { } while (0) 68 66
-1
arch/nds32/include/asm/cacheflush.h
··· 27 27 28 28 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 29 29 void flush_dcache_page(struct page *page); 30 - void flush_dcache_folio(struct folio *folio); 31 30 void copy_to_user_page(struct vm_area_struct *vma, struct page *page, 32 31 unsigned long vaddr, void *dst, void *src, int len); 33 32 void copy_from_user_page(struct vm_area_struct *vma, struct page *page,
-1
arch/nios2/include/asm/cacheflush.h
··· 29 29 unsigned long pfn); 30 30 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 31 31 void flush_dcache_page(struct page *page); 32 - void flush_dcache_folio(struct folio *folio); 33 32 34 33 extern void flush_icache_range(unsigned long start, unsigned long end); 35 34 extern void flush_icache_page(struct vm_area_struct *vma, struct page *page);
-1
arch/parisc/include/asm/cacheflush.h
··· 50 50 51 51 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 52 52 void flush_dcache_page(struct page *page); 53 - void flush_dcache_folio(struct folio *folio); 54 53 55 54 #define flush_dcache_mmap_lock(mapping) xa_lock_irq(&mapping->i_pages) 56 55 #define flush_dcache_mmap_unlock(mapping) xa_unlock_irq(&mapping->i_pages)
-1
arch/sh/include/asm/cacheflush.h
··· 43 43 unsigned long start, unsigned long end); 44 44 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 45 45 void flush_dcache_page(struct page *page); 46 - void flush_dcache_folio(struct folio *folio); 47 46 extern void flush_icache_range(unsigned long start, unsigned long end); 48 47 #define flush_icache_user_range flush_icache_range 49 48 extern void flush_icache_page(struct vm_area_struct *vma,
-3
arch/xtensa/include/asm/cacheflush.h
··· 121 121 122 122 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 123 123 void flush_dcache_page(struct page *); 124 - void flush_dcache_folio(struct folio *); 125 124 126 125 void local_flush_cache_range(struct vm_area_struct *vma, 127 126 unsigned long start, unsigned long end); ··· 137 138 #define flush_cache_vunmap(start,end) do { } while (0) 138 139 139 140 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 140 - #define ARCH_IMPLEMENTS_FLUSH_DCACHE_FOLIO 141 141 #define flush_dcache_page(page) do { } while (0) 142 - static inline void flush_dcache_folio(struct folio *folio) { } 143 142 144 143 #define flush_icache_range local_flush_icache_range 145 144 #define flush_cache_page(vma, addr, pfn) do { } while (0)
-6
include/asm-generic/cacheflush.h
··· 50 50 { 51 51 } 52 52 53 - static inline void flush_dcache_folio(struct folio *folio) { } 54 53 #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 55 - #define ARCH_IMPLEMENTS_FLUSH_DCACHE_FOLIO 56 - #endif 57 - 58 - #ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_FOLIO 59 - void flush_dcache_folio(struct folio *folio); 60 54 #endif 61 55 62 56 #ifndef flush_dcache_mmap_lock
+18
include/linux/cacheflush.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + #ifndef _LINUX_CACHEFLUSH_H 3 + #define _LINUX_CACHEFLUSH_H 4 + 5 + #include <asm/cacheflush.h> 6 + 7 + #if ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 8 + #ifndef ARCH_IMPLEMENTS_FLUSH_DCACHE_FOLIO 9 + void flush_dcache_folio(struct folio *folio); 10 + #endif 11 + #else 12 + static inline void flush_dcache_folio(struct folio *folio) 13 + { 14 + } 15 + #define ARCH_IMPLEMENTS_FLUSH_DCACHE_FOLIO 0 16 + #endif /* ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE */ 17 + 18 + #endif /* _LINUX_CACHEFLUSH_H */
+1 -2
include/linux/highmem.h
··· 5 5 #include <linux/fs.h> 6 6 #include <linux/kernel.h> 7 7 #include <linux/bug.h> 8 + #include <linux/cacheflush.h> 8 9 #include <linux/mm.h> 9 10 #include <linux/uaccess.h> 10 11 #include <linux/hardirq.h> 11 - 12 - #include <asm/cacheflush.h> 13 12 14 13 #include "highmem-internal.h" 15 14