linux/arch/mips
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
..
alchemy MIPS: Alchemy: Fix missing prototypes 2024-01-22 10:32:36 +01:00
ath25
ath79
bcm47xx MIPS: Fix typos 2024-01-08 10:39:12 +01:00
bcm63xx MIPS: BCM63XX: Fix missing prototypes 2024-01-26 10:33:20 +01:00
bmips MIPS: Explicitly include correct DT includes 2023-07-25 10:42:01 +02:00
boot Just cleanups and fixes 2024-01-17 11:20:50 -08:00
cavium-octeon Just cleanups and fixes 2024-01-17 11:20:50 -08:00
cobalt MIPS: Cobalt: Fix missing prototypes 2024-01-22 10:32:21 +01:00
configs vfs-6.8.netfs 2024-01-19 09:10:23 -08:00
crypto crypto: mips/crc32 - remove redundant setting of alignmask to 0 2023-10-27 18:04:24 +08:00
dec
fw MIPS: fw arc: Fix missing prototypes 2024-01-22 11:12:01 +01:00
generic
include Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
ingenic
jazz vgacon, arch/*: remove unused screen_info definitions 2023-10-17 10:17:02 +02:00
kernel ptrace: Introduce exception_ip arch hook 2024-02-12 23:04:34 +01:00
kvm Generic: 2024-01-17 13:03:37 -08:00
lantiq MIPS: lantiq: register smp_ops on non-smp platforms 2024-01-26 10:36:21 +01:00
lib mips: implement xor_unlock_is_negative_byte 2023-10-18 14:34:17 -07:00
loongson2ef MIPS: Fix typos 2024-01-08 10:39:12 +01:00
loongson32 MIPS: loongson32: Remove dma.h and nand.h 2023-10-06 10:10:13 +02:00
loongson64 MIPS: loongson64: set nid for reserved memblock region 2024-01-27 11:07:57 +01:00
math-emu
mm IOMMU Updates for Linux v6.8 2024-01-18 15:16:57 -08:00
mti-malta vgacon: clean up global screen_info instances 2023-10-17 10:17:02 +02:00
n64
net MIPS: Fix typos 2024-01-08 10:39:12 +01:00
pci Just cleanups and fixes 2024-01-17 11:20:50 -08:00
pic32 MIPS: Fixup explicit DT include clean-up 2023-07-28 11:41:09 +02:00
power mips: suspend: include linux/suspend.h as needed 2023-12-10 17:21:41 -08:00
ralink MIPS: Fix typos 2024-01-08 10:39:12 +01:00
rb532
sgi-ip22
sgi-ip27 MIPS: sgi-ip27: Fix missing prototypes 2024-01-22 11:11:49 +01:00
sgi-ip30 MIPS: sgi-ip30: Fix missing prototypes 2024-01-22 11:12:08 +01:00
sgi-ip32 MIPS: sgi-ip32: Fix missing prototypes 2024-01-22 11:12:19 +01:00
sibyte vgacon: fix mips/sibyte build regression 2023-10-24 08:54:37 +02:00
sni vgacon: clean up global screen_info instances 2023-10-17 10:17:02 +02:00
tools
txx9 MIPS: Fix typos 2024-01-08 10:39:12 +01:00
vdso arch: vdso: consolidate gettime prototypes 2023-11-23 11:32:32 +01:00
Kbuild arch: turn off -Werror for architectures with known warnings 2023-12-10 17:21:33 -08:00
Kbuild.platforms MIPS: AR7: remove platform 2023-10-19 10:39:46 +02:00
Kconfig Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
Kconfig.debug
Makefile Revert MIPS: Loongson: Fix build error when make modules_install 2023-07-25 10:42:01 +02:00
Makefile.postlink kbuild: remove ARCH_POSTLINK from module builds 2023-10-28 21:10:08 +09:00