parisc: Ensure page alignment in flush functions
authorHelge Deller <deller@gmx.de>
Wed, 15 Mar 2023 18:25:15 +0000 (19:25 +0100)
committerHelge Deller <deller@gmx.de>
Wed, 3 May 2023 15:43:26 +0000 (17:43 +0200)
Matthew Wilcox noticed, that if ARCH_HAS_FLUSH_ON_KUNMAP is defined
(which is the case for PA-RISC), __kunmap_local() calls
kunmap_flush_on_unmap(), which may call the parisc flush functions with
a non-page-aligned address and thus the page might not be fully flushed.

This patch ensures that flush_kernel_dcache_page_asm() and
flush_kernel_dcache_page_asm() will always operate on page-aligned
addresses.

Signed-off-by: Helge Deller <deller@gmx.de>
Cc: <stable@vger.kernel.org> # v6.0+
arch/parisc/kernel/pacache.S

index 9a0018f1f42cba9bb3e0e7dfd5c59ef2b6af70b0..541370d145594eafa6168f5e3387a409e7d195c8 100644 (file)
@@ -889,6 +889,7 @@ ENDPROC_CFI(flush_icache_page_asm)
 ENTRY_CFI(flush_kernel_dcache_page_asm)
 88:    ldil            L%dcache_stride, %r1
        ldw             R%dcache_stride(%r1), %r23
+       depi_safe       0, 31,PAGE_SHIFT, %r26  /* Clear any offset bits */
 
 #ifdef CONFIG_64BIT
        depdi,z         1, 63-PAGE_SHIFT,1, %r25
@@ -925,6 +926,7 @@ ENDPROC_CFI(flush_kernel_dcache_page_asm)
 ENTRY_CFI(purge_kernel_dcache_page_asm)
 88:    ldil            L%dcache_stride, %r1
        ldw             R%dcache_stride(%r1), %r23
+       depi_safe       0, 31,PAGE_SHIFT, %r26  /* Clear any offset bits */
 
 #ifdef CONFIG_64BIT
        depdi,z         1, 63-PAGE_SHIFT,1, %r25