]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 2 Apr 2022 13:55:35 +0000 (15:55 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 2 Apr 2022 13:55:35 +0000 (15:55 +0200)
added patches:
powerpc-fix-build-errors-with-newer-binutils.patch
powerpc-lib-sstep-fix-build-errors-with-newer-binutils.patch
powerpc-lib-sstep-fix-sthcx-instruction.patch

queue-5.4/powerpc-fix-build-errors-with-newer-binutils.patch [new file with mode: 0644]
queue-5.4/powerpc-lib-sstep-fix-build-errors-with-newer-binutils.patch [new file with mode: 0644]
queue-5.4/powerpc-lib-sstep-fix-sthcx-instruction.patch [new file with mode: 0644]
queue-5.4/series

diff --git a/queue-5.4/powerpc-fix-build-errors-with-newer-binutils.patch b/queue-5.4/powerpc-fix-build-errors-with-newer-binutils.patch
new file mode 100644 (file)
index 0000000..05c0aef
--- /dev/null
@@ -0,0 +1,164 @@
+From 8667d0d64dd1f84fd41b5897fd87fa9113ae05e3 Mon Sep 17 00:00:00 2001
+From: Anders Roxell <anders.roxell@linaro.org>
+Date: Thu, 24 Feb 2022 17:22:14 +0100
+Subject: powerpc: Fix build errors with newer binutils
+
+From: Anders Roxell <anders.roxell@linaro.org>
+
+commit 8667d0d64dd1f84fd41b5897fd87fa9113ae05e3 upstream.
+
+Building tinyconfig with gcc (Debian 11.2.0-16) and assembler (Debian
+2.37.90.20220207) the following build error shows up:
+
+  {standard input}: Assembler messages:
+  {standard input}:1190: Error: unrecognized opcode: `stbcix'
+  {standard input}:1433: Error: unrecognized opcode: `lwzcix'
+  {standard input}:1453: Error: unrecognized opcode: `stbcix'
+  {standard input}:1460: Error: unrecognized opcode: `stwcix'
+  {standard input}:1596: Error: unrecognized opcode: `stbcix'
+  ...
+
+Rework to add assembler directives [1] around the instruction. Going
+through them one by one shows that the changes should be safe.  Like
+__get_user_atomic_128_aligned() is only called in p9_hmi_special_emu(),
+which according to the name is specific to power9.  And __raw_rm_read*()
+are only called in things that are powernv or book3s_hv specific.
+
+[1] https://sourceware.org/binutils/docs/as/PowerPC_002dPseudo.html#PowerPC_002dPseudo
+
+Cc: stable@vger.kernel.org
+Co-developed-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
+Reviewed-by: Segher Boessenkool <segher@kernel.crashing.org>
+[mpe: Make commit subject more descriptive]
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220224162215.3406642-2-anders.roxell@linaro.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/include/asm/io.h        |   40 ++++++++++++++++++++++++++++-------
+ arch/powerpc/include/asm/uaccess.h   |    3 ++
+ arch/powerpc/platforms/powernv/rng.c |    6 ++++-
+ 3 files changed, 40 insertions(+), 9 deletions(-)
+
+--- a/arch/powerpc/include/asm/io.h
++++ b/arch/powerpc/include/asm/io.h
+@@ -345,25 +345,37 @@ static inline void __raw_writeq_be(unsig
+  */
+ static inline void __raw_rm_writeb(u8 val, volatile void __iomem *paddr)
+ {
+-      __asm__ __volatile__("stbcix %0,0,%1"
++      __asm__ __volatile__(".machine push;   \
++                            .machine power6; \
++                            stbcix %0,0,%1;  \
++                            .machine pop;"
+               : : "r" (val), "r" (paddr) : "memory");
+ }
+ static inline void __raw_rm_writew(u16 val, volatile void __iomem *paddr)
+ {
+-      __asm__ __volatile__("sthcix %0,0,%1"
++      __asm__ __volatile__(".machine push;   \
++                            .machine power6; \
++                            sthcix %0,0,%1;  \
++                            .machine pop;"
+               : : "r" (val), "r" (paddr) : "memory");
+ }
+ static inline void __raw_rm_writel(u32 val, volatile void __iomem *paddr)
+ {
+-      __asm__ __volatile__("stwcix %0,0,%1"
++      __asm__ __volatile__(".machine push;   \
++                            .machine power6; \
++                            stwcix %0,0,%1;  \
++                            .machine pop;"
+               : : "r" (val), "r" (paddr) : "memory");
+ }
+ static inline void __raw_rm_writeq(u64 val, volatile void __iomem *paddr)
+ {
+-      __asm__ __volatile__("stdcix %0,0,%1"
++      __asm__ __volatile__(".machine push;   \
++                            .machine power6; \
++                            stdcix %0,0,%1;  \
++                            .machine pop;"
+               : : "r" (val), "r" (paddr) : "memory");
+ }
+@@ -375,7 +387,10 @@ static inline void __raw_rm_writeq_be(u6
+ static inline u8 __raw_rm_readb(volatile void __iomem *paddr)
+ {
+       u8 ret;
+-      __asm__ __volatile__("lbzcix %0,0, %1"
++      __asm__ __volatile__(".machine push;   \
++                            .machine power6; \
++                            lbzcix %0,0, %1; \
++                            .machine pop;"
+                            : "=r" (ret) : "r" (paddr) : "memory");
+       return ret;
+ }
+@@ -383,7 +398,10 @@ static inline u8 __raw_rm_readb(volatile
+ static inline u16 __raw_rm_readw(volatile void __iomem *paddr)
+ {
+       u16 ret;
+-      __asm__ __volatile__("lhzcix %0,0, %1"
++      __asm__ __volatile__(".machine push;   \
++                            .machine power6; \
++                            lhzcix %0,0, %1; \
++                            .machine pop;"
+                            : "=r" (ret) : "r" (paddr) : "memory");
+       return ret;
+ }
+@@ -391,7 +409,10 @@ static inline u16 __raw_rm_readw(volatil
+ static inline u32 __raw_rm_readl(volatile void __iomem *paddr)
+ {
+       u32 ret;
+-      __asm__ __volatile__("lwzcix %0,0, %1"
++      __asm__ __volatile__(".machine push;   \
++                            .machine power6; \
++                            lwzcix %0,0, %1; \
++                            .machine pop;"
+                            : "=r" (ret) : "r" (paddr) : "memory");
+       return ret;
+ }
+@@ -399,7 +420,10 @@ static inline u32 __raw_rm_readl(volatil
+ static inline u64 __raw_rm_readq(volatile void __iomem *paddr)
+ {
+       u64 ret;
+-      __asm__ __volatile__("ldcix %0,0, %1"
++      __asm__ __volatile__(".machine push;   \
++                            .machine power6; \
++                            ldcix %0,0, %1;  \
++                            .machine pop;"
+                            : "=r" (ret) : "r" (paddr) : "memory");
+       return ret;
+ }
+--- a/arch/powerpc/include/asm/uaccess.h
++++ b/arch/powerpc/include/asm/uaccess.h
+@@ -191,8 +191,11 @@ extern long __get_user_bad(void);
+  */
+ #define __get_user_atomic_128_aligned(kaddr, uaddr, err)              \
+       __asm__ __volatile__(                           \
++              ".machine push\n"                       \
++              ".machine altivec\n"                    \
+               "1:     lvx  0,0,%1     # get user\n"   \
+               "       stvx 0,0,%2     # put kernel\n" \
++              ".machine pop\n"                        \
+               "2:\n"                                  \
+               ".section .fixup,\"ax\"\n"              \
+               "3:     li %0,%3\n"                     \
+--- a/arch/powerpc/platforms/powernv/rng.c
++++ b/arch/powerpc/platforms/powernv/rng.c
+@@ -43,7 +43,11 @@ static unsigned long rng_whiten(struct p
+       unsigned long parity;
+       /* Calculate the parity of the value */
+-      asm ("popcntd %0,%1" : "=r" (parity) : "r" (val));
++      asm (".machine push;   \
++            .machine power7; \
++            popcntd %0,%1;   \
++            .machine pop;"
++           : "=r" (parity) : "r" (val));
+       /* xor our value with the previous mask */
+       val ^= rng->mask;
diff --git a/queue-5.4/powerpc-lib-sstep-fix-build-errors-with-newer-binutils.patch b/queue-5.4/powerpc-lib-sstep-fix-build-errors-with-newer-binutils.patch
new file mode 100644 (file)
index 0000000..2270d59
--- /dev/null
@@ -0,0 +1,61 @@
+From 8219d31effa7be5dbc7ff915d7970672e028c701 Mon Sep 17 00:00:00 2001
+From: Anders Roxell <anders.roxell@linaro.org>
+Date: Thu, 24 Feb 2022 17:22:15 +0100
+Subject: powerpc/lib/sstep: Fix build errors with newer binutils
+
+From: Anders Roxell <anders.roxell@linaro.org>
+
+commit 8219d31effa7be5dbc7ff915d7970672e028c701 upstream.
+
+Building tinyconfig with gcc (Debian 11.2.0-16) and assembler (Debian
+2.37.90.20220207) the following build error shows up:
+
+  {standard input}: Assembler messages:
+  {standard input}:10576: Error: unrecognized opcode: `stbcx.'
+  {standard input}:10680: Error: unrecognized opcode: `lharx'
+  {standard input}:10694: Error: unrecognized opcode: `lbarx'
+
+Rework to add assembler directives [1] around the instruction.  The
+problem with this might be that we can trick a power6 into
+single-stepping through an stbcx. for instance, and it will execute that
+in kernel mode.
+
+[1] https://sourceware.org/binutils/docs/as/PowerPC_002dPseudo.html#PowerPC_002dPseudo
+
+Fixes: 350779a29f11 ("powerpc: Handle most loads and stores in instruction emulation code")
+Cc: stable@vger.kernel.org # v4.14+
+Co-developed-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
+Reviewed-by: Segher Boessenkool <segher@kernel.crashing.org>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220224162215.3406642-3-anders.roxell@linaro.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/lib/sstep.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/arch/powerpc/lib/sstep.c
++++ b/arch/powerpc/lib/sstep.c
+@@ -906,7 +906,10 @@ NOKPROBE_SYMBOL(emulate_dcbz);
+ #define __put_user_asmx(x, addr, err, op, cr)         \
+       __asm__ __volatile__(                           \
++              ".machine push\n"                       \
++              ".machine power8\n"                     \
+               "1:     " op " %2,0,%3\n"               \
++              ".machine pop\n"                        \
+               "       mfcr    %1\n"                   \
+               "2:\n"                                  \
+               ".section .fixup,\"ax\"\n"              \
+@@ -919,7 +922,10 @@ NOKPROBE_SYMBOL(emulate_dcbz);
+ #define __get_user_asmx(x, addr, err, op)             \
+       __asm__ __volatile__(                           \
++              ".machine push\n"                       \
++              ".machine power8\n"                     \
+               "1:     "op" %1,0,%2\n"                 \
++              ".machine pop\n"                        \
+               "2:\n"                                  \
+               ".section .fixup,\"ax\"\n"              \
+               "3:     li      %0,%3\n"                \
diff --git a/queue-5.4/powerpc-lib-sstep-fix-sthcx-instruction.patch b/queue-5.4/powerpc-lib-sstep-fix-sthcx-instruction.patch
new file mode 100644 (file)
index 0000000..0cf10b3
--- /dev/null
@@ -0,0 +1,35 @@
+From a633cb1edddaa643fadc70abc88f89a408fa834a Mon Sep 17 00:00:00 2001
+From: Anders Roxell <anders.roxell@linaro.org>
+Date: Thu, 24 Feb 2022 17:22:13 +0100
+Subject: powerpc/lib/sstep: Fix 'sthcx' instruction
+
+From: Anders Roxell <anders.roxell@linaro.org>
+
+commit a633cb1edddaa643fadc70abc88f89a408fa834a upstream.
+
+Looks like there been a copy paste mistake when added the instruction
+'stbcx' twice and one was probably meant to be 'sthcx'. Changing to
+'sthcx' from 'stbcx'.
+
+Fixes: 350779a29f11 ("powerpc: Handle most loads and stores in instruction emulation code")
+Cc: stable@vger.kernel.org # v4.14+
+Reported-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220224162215.3406642-1-anders.roxell@linaro.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/lib/sstep.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/powerpc/lib/sstep.c
++++ b/arch/powerpc/lib/sstep.c
+@@ -2912,7 +2912,7 @@ int emulate_loadstore(struct pt_regs *re
+                       __put_user_asmx(op->val, ea, err, "stbcx.", cr);
+                       break;
+               case 2:
+-                      __put_user_asmx(op->val, ea, err, "stbcx.", cr);
++                      __put_user_asmx(op->val, ea, err, "sthcx.", cr);
+                       break;
+ #endif
+               case 4:
index 797209fdfe2e636c89b8b1f4674bdaf9dcb5cfd6..b4342e02dfdb88282b887734a765d494051cf1bc 100644 (file)
@@ -314,3 +314,6 @@ media-hdpvr-initialize-dev-worker-at-hdpvr_register_.patch
 tracing-have-trace_define_enum-affect-trace-event-ty.patch
 mmc-host-return-an-error-when-enable_sdio_irq-ops-is.patch
 alsa-hda-realtek-add-alc256-samsung-headphone-fixup.patch
+powerpc-lib-sstep-fix-sthcx-instruction.patch
+powerpc-lib-sstep-fix-build-errors-with-newer-binutils.patch
+powerpc-fix-build-errors-with-newer-binutils.patch