linux/arch
Mathieu Desnoyers 8690bbcf3b Introduce cpu_dcache_is_aliasing() across all architectures
Introduce a generic way to query whether the data cache is virtually
aliased on all architectures. Its purpose is to ensure that subsystems
which are incompatible with virtually aliased data caches (e.g. FS_DAX)
can reliably query this.

For data cache aliasing, there are three scenarios dependending on the
architecture. Here is a breakdown based on my understanding:

A) The data cache is always aliasing:

* arc
* csky
* m68k (note: shared memory mappings are incoherent ? SHMLBA is missing there.)
* sh
* parisc

B) The data cache aliasing is statically known or depends on querying CPU
   state at runtime:

* arm (cache_is_vivt() || cache_is_vipt_aliasing())
* mips (cpu_has_dc_aliases)
* nios2 (NIOS2_DCACHE_SIZE > PAGE_SIZE)
* sparc32 (vac_cache_size > PAGE_SIZE)
* sparc64 (L1DCACHE_SIZE > PAGE_SIZE)
* xtensa (DCACHE_WAY_SIZE > PAGE_SIZE)

C) The data cache is never aliasing:

* alpha
* arm64 (aarch64)
* hexagon
* loongarch (but with incoherent write buffers, which are disabled since
             commit d23b7795 ("LoongArch: Change SHMLBA from SZ_64K to PAGE_SIZE"))
* microblaze
* openrisc
* powerpc
* riscv
* s390
* um
* x86

Require architectures in A) and B) to select ARCH_HAS_CPU_CACHE_ALIASING and
implement "cpu_dcache_is_aliasing()".

Architectures in C) don't select ARCH_HAS_CPU_CACHE_ALIASING, and thus
cpu_dcache_is_aliasing() simply evaluates to "false".

Note that this leaves "cpu_icache_is_aliasing()" to be implemented as future
work. This would be useful to gate features like XIP on architectures
which have aliasing CPU dcache-icache but not CPU dcache-dcache.

Use "cpu_dcache" and "cpu_cache" rather than just "dcache" and "cache"
to clarify that we really mean "CPU data cache" and "CPU cache" to
eliminate any possible confusion with VFS "dentry cache" and "page
cache".

Link: https://lore.kernel.org/lkml/20030910210416.GA24258@mail.jlokier.co.uk/
Link: https://lkml.kernel.org/r/20240215144633.96437-9-mathieu.desnoyers@efficios.com
Fixes: d92576f116 ("dax: does not work correctly with virtual aliasing caches")
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Vishal Verma <vishal.l.verma@intel.com>
Cc: Dave Jiang <dave.jiang@intel.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Alasdair Kergon <agk@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: kernel test robot <lkp@intel.com>
Cc: Michael Sclafani <dm-devel@lists.linux.dev>
Cc: Mike Snitzer <snitzer@kernel.org>
Cc: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-02-22 15:27:19 -08:00
..
alpha RTC for 6.8 2024-01-18 17:25:39 -08:00
arc Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
arm Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
arm64 arm64/mm: automatically fold contpte mappings 2024-02-22 15:27:19 -08:00
csky Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
hexagon
loongarch work around gcc bugs with 'asm goto' with outputs 2024-02-09 15:57:48 -08:00
m68k Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
microblaze Microblaze patches for 6.8-rc1 2024-01-17 11:27:23 -08:00
mips Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
nios2 Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
openrisc
parisc Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
powerpc mm/mmu_gather: add tlb_remove_tlb_entries() 2024-02-22 15:27:17 -08:00
riscv riscv/pgtable: define PFN_PTE_SHIFT 2024-02-22 10:24:50 -08:00
s390 mm/mmu_gather: add __tlb_remove_folio_pages() 2024-02-22 15:27:17 -08:00
sh Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
sparc Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
um work around gcc bugs with 'asm goto' with outputs 2024-02-09 15:57:48 -08:00
x86 x86/mm: convert pte_next_pfn() to pte_advance_pfn() 2024-02-22 15:27:18 -08:00
xtensa Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
.gitignore
Kconfig scs: add CONFIG_MMU dependency for vfree_atomic() 2024-01-25 23:52:21 -08:00