parisc: Avoid clobbering the C/B bits in the PSW with tophys and tovirt macros
authorJohn David Anglin <dave.anglin@bell.net>
Fri, 23 Feb 2024 15:40:51 +0000 (16:40 +0100)
committerHelge Deller <deller@gmx.de>
Tue, 27 Feb 2024 21:51:44 +0000 (22:51 +0100)
Use add,l to avoid clobbering the C/B bits in the PSW.

Signed-off-by: John David Anglin <dave.anglin@bell.net>
Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v5.10+
arch/parisc/include/asm/assembly.h

index 5937d5edaba1eac5a0c4e4b055c3e77fcbe3bf62..000a28e1c5e8d43aba8ed5185e86c654cf5ad5a0 100644 (file)
         * version takes two arguments: a src and destination register.
         * However, the source and destination registers can not be
         * the same register.
+        *
+        * We use add,l to avoid clobbering the C/B bits in the PSW.
         */
 
        .macro  tophys  grvirt, grphys
-       ldil    L%(__PAGE_OFFSET), \grphys
-       sub     \grvirt, \grphys, \grphys
+       ldil    L%(-__PAGE_OFFSET), \grphys
+       addl    \grvirt, \grphys, \grphys
        .endm
-       
+
        .macro  tovirt  grphys, grvirt
        ldil    L%(__PAGE_OFFSET), \grvirt
-       add     \grphys, \grvirt, \grvirt
+       addl    \grphys, \grvirt, \grvirt
        .endm
 
        .macro  tophys_r1  gr
-       ldil    L%(__PAGE_OFFSET), %r1
-       sub     \gr, %r1, \gr
+       ldil    L%(-__PAGE_OFFSET), %r1
+       addl    \gr, %r1, \gr
        .endm
-       
+
        .macro  tovirt_r1  gr
        ldil    L%(__PAGE_OFFSET), %r1
-       add     \gr, %r1, \gr
+       addl    \gr, %r1, \gr
        .endm
 
        .macro delay value