| From 528ef83754ef1b7ae093cda59de88c4898c7814f Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 23 Feb 2024 16:40:51 +0100 |
| Subject: parisc: Avoid clobbering the C/B bits in the PSW with tophys and |
| tovirt macros |
| |
| From: John David Anglin <dave.anglin@bell.net> |
| |
| [ Upstream commit 4603fbaa76b5e703b38ac8cc718102834eb6e330 ] |
| |
| 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+ |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/parisc/include/asm/assembly.h | 18 ++++++++++-------- |
| 1 file changed, 10 insertions(+), 8 deletions(-) |
| |
| diff --git a/arch/parisc/include/asm/assembly.h b/arch/parisc/include/asm/assembly.h |
| index 5937d5edaba1e..000a28e1c5e8d 100644 |
| --- a/arch/parisc/include/asm/assembly.h |
| +++ b/arch/parisc/include/asm/assembly.h |
| @@ -97,26 +97,28 @@ |
| * 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 |
| -- |
| 2.43.0 |
| |