From: Mikulas Patocka mpatocka@redhat.com
[ Upstream commit 7ae04ba36b381bffe2471eff3a93edced843240f]
ARCH_DMA_MINALIGN was defined as 16 - this is too small - it may be possible that two unrelated 16-byte allocations share a cache line. If one of these allocations is written using DMA and the other is written using cached write, the value that was written with DMA may be corrupted.
This commit changes ARCH_DMA_MINALIGN to be 128 on PA20 and 32 on PA1.1 - that's the largest possible cache line size.
As different parisc microarchitectures have different cache line size, we define arch_slab_minalign(), cache_line_size() and dma_get_cache_alignment() so that the kernel may tune slab cache parameters dynamically, based on the detected cache line size.
Signed-off-by: Mikulas Patocka mpatocka@redhat.com Cc: stable@vger.kernel.org Signed-off-by: Helge Deller deller@gmx.de Signed-off-by: Mingli Yu mingli.yu@windriver.com --- arch/parisc/Kconfig | 1 + arch/parisc/include/asm/cache.h | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 6ac0c4b98e28..9888e0b3f675 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig @@ -15,6 +15,7 @@ config PARISC select ARCH_SPLIT_ARG64 if !64BIT select ARCH_SUPPORTS_HUGETLBFS if PA20 select ARCH_SUPPORTS_MEMORY_FAILURE + select ARCH_HAS_CACHE_LINE_SIZE select DMA_OPS select RTC_CLASS select RTC_DRV_GENERIC diff --git a/arch/parisc/include/asm/cache.h b/arch/parisc/include/asm/cache.h index d53e9e27dba0..99e26c686f7f 100644 --- a/arch/parisc/include/asm/cache.h +++ b/arch/parisc/include/asm/cache.h @@ -20,7 +20,16 @@
#define SMP_CACHE_BYTES L1_CACHE_BYTES
-#define ARCH_DMA_MINALIGN L1_CACHE_BYTES +#ifdef CONFIG_PA20 +#define ARCH_DMA_MINALIGN 128 +#else +#define ARCH_DMA_MINALIGN 32 +#endif +#define ARCH_KMALLOC_MINALIGN 16 /* ldcw requires 16-byte alignment */ + +#define arch_slab_minalign() ((unsigned)dcache_stride) +#define cache_line_size() dcache_stride +#define dma_get_cache_alignment cache_line_size
#define __read_mostly __section(".data..read_mostly")
[ Sasha's backport helper bot ]
Hi,
Found matching upstream commit: 7ae04ba36b381bffe2471eff3a93edced843240f
WARNING: Author mismatch between patch and found commit: Backport author: mingli.yu@eng.windriver.com Commit author: Mikulas Patocka mpatocka@redhat.com
Status in newer kernel trees: 6.12.y | Present (exact SHA1) 6.11.y | Present (exact SHA1) 6.6.y | Present (different SHA1: 642a0b7453da) 6.1.y | Present (different SHA1: 00baca74fb58) 5.15.y | Not found
Note: The patch differs from the upstream commit: --- 1: 7ae04ba36b381 ! 1: 398696f6c5132 parisc: fix a possible DMA corruption @@ Metadata ## Commit message ## parisc: fix a possible DMA corruption
+ [ Upstream commit 7ae04ba36b381bffe2471eff3a93edced843240f] + ARCH_DMA_MINALIGN was defined as 16 - this is too small - it may be possible that two unrelated 16-byte allocations share a cache line. If one of these allocations is written using DMA and the other is written @@ Commit message Signed-off-by: Mikulas Patocka mpatocka@redhat.com Cc: stable@vger.kernel.org Signed-off-by: Helge Deller deller@gmx.de + Signed-off-by: Mingli Yu mingli.yu@windriver.com
## arch/parisc/Kconfig ## @@ arch/parisc/Kconfig: config PARISC + select ARCH_SPLIT_ARG64 if !64BIT select ARCH_SUPPORTS_HUGETLBFS if PA20 select ARCH_SUPPORTS_MEMORY_FAILURE - select ARCH_STACKWALK + select ARCH_HAS_CACHE_LINE_SIZE - select ARCH_HAS_DEBUG_VM_PGTABLE - select HAVE_RELIABLE_STACKTRACE select DMA_OPS + select RTC_CLASS + select RTC_DRV_GENERIC
## arch/parisc/include/asm/cache.h ## @@ ---
Results of testing on various branches:
| Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-5.15.y | Success | Success |
linux-stable-mirror@lists.linaro.org