]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Aug 2023 16:17:06 +0000 (18:17 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Aug 2023 16:17:06 +0000 (18:17 +0200)
added patches:
lib-mpi-eliminate-unused-umul_ppmm-definitions-for-mips.patch
series

queue-4.14/lib-mpi-eliminate-unused-umul_ppmm-definitions-for-mips.patch [new file with mode: 0644]
queue-4.14/series [new file with mode: 0644]

diff --git a/queue-4.14/lib-mpi-eliminate-unused-umul_ppmm-definitions-for-mips.patch b/queue-4.14/lib-mpi-eliminate-unused-umul_ppmm-definitions-for-mips.patch
new file mode 100644 (file)
index 0000000..36d747a
--- /dev/null
@@ -0,0 +1,110 @@
+From b0c091ae04f6746f541b9be91809e1f4f43e9a65 Mon Sep 17 00:00:00 2001
+From: Nathan Chancellor <natechancellor@gmail.com>
+Date: Mon, 12 Aug 2019 12:32:57 -0700
+Subject: lib/mpi: Eliminate unused umul_ppmm definitions for MIPS
+
+From: Nathan Chancellor <natechancellor@gmail.com>
+
+commit b0c091ae04f6746f541b9be91809e1f4f43e9a65 upstream.
+
+Clang errors out when building this macro:
+
+lib/mpi/generic_mpih-mul1.c:37:24: error: invalid use of a cast in a
+inline asm context requiring an l-value: remove the cast or build with
+-fheinous-gnu-extensions
+                umul_ppmm(prod_high, prod_low, s1_ptr[j], s2_limb);
+                ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+lib/mpi/longlong.h:652:20: note: expanded from macro 'umul_ppmm'
+        : "=l" ((USItype)(w0)), \
+                ~~~~~~~~~~^~~
+lib/mpi/generic_mpih-mul1.c:37:3: error: invalid output constraint '=h'
+in asm
+                umul_ppmm(prod_high, prod_low, s1_ptr[j], s2_limb);
+                ^
+lib/mpi/longlong.h:653:7: note: expanded from macro 'umul_ppmm'
+             "=h" ((USItype)(w1)) \
+             ^
+2 errors generated.
+
+The C version that is used for GCC 4.4 and up works well with clang;
+however, it is not currently being used because Clang masks itself
+as GCC 4.2.1 for compatibility reasons. As Nick points out, we require
+GCC 4.6 and newer in the kernel so we can eliminate all of the
+versioning checks and just use the C version of umul_ppmm for all
+supported compilers.
+
+Link: https://github.com/ClangBuiltLinux/linux/issues/605
+Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
+Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
+Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ lib/mpi/longlong.h |   36 +-----------------------------------
+ 1 file changed, 1 insertion(+), 35 deletions(-)
+
+--- a/lib/mpi/longlong.h
++++ b/lib/mpi/longlong.h
+@@ -639,30 +639,12 @@ do { \
+       **************  MIPS  *****************
+       ***************************************/
+ #if defined(__mips__) && W_TYPE_SIZE == 32
+-#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4)
+ #define umul_ppmm(w1, w0, u, v)                       \
+ do {                                          \
+       UDItype __ll = (UDItype)(u) * (v);      \
+       w1 = __ll >> 32;                        \
+       w0 = __ll;                              \
+ } while (0)
+-#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7
+-#define umul_ppmm(w1, w0, u, v) \
+-      __asm__ ("multu %2,%3" \
+-      : "=l" ((USItype)(w0)), \
+-           "=h" ((USItype)(w1)) \
+-      : "d" ((USItype)(u)), \
+-           "d" ((USItype)(v)))
+-#else
+-#define umul_ppmm(w1, w0, u, v) \
+-      __asm__ ("multu %2,%3\n" \
+-         "mflo %0\n" \
+-         "mfhi %1" \
+-      : "=d" ((USItype)(w0)), \
+-           "=d" ((USItype)(w1)) \
+-      : "d" ((USItype)(u)), \
+-           "d" ((USItype)(v)))
+-#endif
+ #define UMUL_TIME 10
+ #define UDIV_TIME 100
+ #endif /* __mips__ */
+@@ -687,7 +669,7 @@ do {                                                                       \
+                : "d" ((UDItype)(u)),                                  \
+                  "d" ((UDItype)(v)));                                 \
+ } while (0)
+-#elif (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4)
++#else
+ #define umul_ppmm(w1, w0, u, v) \
+ do {                                                                  \
+       typedef unsigned int __ll_UTItype __attribute__((mode(TI)));    \
+@@ -695,22 +677,6 @@ do {                                                                      \
+       w1 = __ll >> 64;                                                \
+       w0 = __ll;                                                      \
+ } while (0)
+-#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7
+-#define umul_ppmm(w1, w0, u, v) \
+-      __asm__ ("dmultu %2,%3" \
+-      : "=l" ((UDItype)(w0)), \
+-           "=h" ((UDItype)(w1)) \
+-      : "d" ((UDItype)(u)), \
+-           "d" ((UDItype)(v)))
+-#else
+-#define umul_ppmm(w1, w0, u, v) \
+-      __asm__ ("dmultu %2,%3\n" \
+-         "mflo %0\n" \
+-         "mfhi %1" \
+-      : "=d" ((UDItype)(w0)), \
+-           "=d" ((UDItype)(w1)) \
+-      : "d" ((UDItype)(u)), \
+-           "d" ((UDItype)(v)))
+ #endif
+ #define UMUL_TIME 20
+ #define UDIV_TIME 140
diff --git a/queue-4.14/series b/queue-4.14/series
new file mode 100644 (file)
index 0000000..2a0e937
--- /dev/null
@@ -0,0 +1 @@
+lib-mpi-eliminate-unused-umul_ppmm-definitions-for-mips.patch