]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Dec 2021 12:46:56 +0000 (13:46 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Dec 2021 12:46:56 +0000 (13:46 +0100)
added patches:
arm-8800-1-use-choice-for-kernel-unwinders.patch
arm-8805-2-remove-unneeded-naked-function-usage.patch
input-touchscreen-avoid-bitwise-vs-logical-or-warning.patch
mwifiex-remove-unnecessary-braces-from-hostcmd_set_seq_no_bss_info.patch
net-lan78xx-avoid-unnecessary-self-assignment.patch

queue-4.14/arm-8800-1-use-choice-for-kernel-unwinders.patch [new file with mode: 0644]
queue-4.14/arm-8805-2-remove-unneeded-naked-function-usage.patch [new file with mode: 0644]
queue-4.14/input-touchscreen-avoid-bitwise-vs-logical-or-warning.patch [new file with mode: 0644]
queue-4.14/mwifiex-remove-unnecessary-braces-from-hostcmd_set_seq_no_bss_info.patch [new file with mode: 0644]
queue-4.14/net-lan78xx-avoid-unnecessary-self-assignment.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/arm-8800-1-use-choice-for-kernel-unwinders.patch b/queue-4.14/arm-8800-1-use-choice-for-kernel-unwinders.patch
new file mode 100644 (file)
index 0000000..bfbd89a
--- /dev/null
@@ -0,0 +1,128 @@
+From f9b58e8c7d031b0daa5c9a9ee27f5a4028ba53ac Mon Sep 17 00:00:00 2001
+From: Stefan Agner <stefan@agner.ch>
+Date: Sun, 30 Sep 2018 23:02:33 +0100
+Subject: ARM: 8800/1: use choice for kernel unwinders
+
+From: Stefan Agner <stefan@agner.ch>
+
+commit f9b58e8c7d031b0daa5c9a9ee27f5a4028ba53ac upstream.
+
+While in theory multiple unwinders could be compiled in, it does
+not make sense in practise. Use a choice to make the unwinder
+selection mutually exclusive and mandatory.
+
+Already before this commit it has not been possible to deselect
+FRAME_POINTER. Remove the obsolete comment.
+
+Furthermore, to produce a meaningful backtrace with FRAME_POINTER
+enabled the kernel needs a specific function prologue:
+    mov    ip, sp
+    stmfd    sp!, {fp, ip, lr, pc}
+    sub    fp, ip, #4
+
+To get to the required prologue gcc uses apcs and no-sched-prolog.
+This compiler options are not available on clang, and clang is not
+able to generate the required prologue. Make the FRAME_POINTER
+config symbol depending on !clang.
+
+Suggested-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Stefan Agner <stefan@agner.ch>
+Reviewed-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm/Kconfig.debug |   44 ++++++++++++++++++++++++++++----------------
+ lib/Kconfig.debug      |    6 +++---
+ 2 files changed, 31 insertions(+), 19 deletions(-)
+
+--- a/arch/arm/Kconfig.debug
++++ b/arch/arm/Kconfig.debug
+@@ -16,30 +16,42 @@ config ARM_PTDUMP
+         kernel.
+         If in doubt, say "N"
+-# RMK wants arm kernels compiled with frame pointers or stack unwinding.
+-# If you know what you are doing and are willing to live without stack
+-# traces, you can get a slightly smaller kernel by setting this option to
+-# n, but then RMK will have to kill you ;).
+-config FRAME_POINTER
+-      bool
+-      depends on !THUMB2_KERNEL
+-      default y if !ARM_UNWIND || FUNCTION_GRAPH_TRACER
++choice
++      prompt "Choose kernel unwinder"
++      default UNWINDER_ARM if AEABI && !FUNCTION_GRAPH_TRACER
++      default UNWINDER_FRAME_POINTER if !AEABI || FUNCTION_GRAPH_TRACER
+       help
+-        If you say N here, the resulting kernel will be slightly smaller and
+-        faster. However, if neither FRAME_POINTER nor ARM_UNWIND are enabled,
+-        when a problem occurs with the kernel, the information that is
+-        reported is severely limited.
++        This determines which method will be used for unwinding kernel stack
++        traces for panics, oopses, bugs, warnings, perf, /proc/<pid>/stack,
++        livepatch, lockdep, and more.
+-config ARM_UNWIND
+-      bool "Enable stack unwinding support (EXPERIMENTAL)"
++config UNWINDER_FRAME_POINTER
++      bool "Frame pointer unwinder"
++      depends on !THUMB2_KERNEL && !CC_IS_CLANG
++      select ARCH_WANT_FRAME_POINTERS
++      select FRAME_POINTER
++      help
++        This option enables the frame pointer unwinder for unwinding
++        kernel stack traces.
++
++config UNWINDER_ARM
++      bool "ARM EABI stack unwinder"
+       depends on AEABI
+-      default y
++      select ARM_UNWIND
+       help
+         This option enables stack unwinding support in the kernel
+         using the information automatically generated by the
+         compiler. The resulting kernel image is slightly bigger but
+         the performance is not affected. Currently, this feature
+-        only works with EABI compilers. If unsure say Y.
++        only works with EABI compilers.
++
++endchoice
++
++config ARM_UNWIND
++      bool
++
++config FRAME_POINTER
++      bool
+ config OLD_MCOUNT
+       bool
+--- a/lib/Kconfig.debug
++++ b/lib/Kconfig.debug
+@@ -1131,7 +1131,7 @@ config LOCKDEP
+       bool
+       depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
+       select STACKTRACE
+-      select FRAME_POINTER if !MIPS && !PPC && !ARM_UNWIND && !S390 && !MICROBLAZE && !ARC && !SCORE && !X86
++      select FRAME_POINTER if !MIPS && !PPC && !ARM && !S390 && !MICROBLAZE && !ARC && !SCORE && !X86
+       select KALLSYMS
+       select KALLSYMS_ALL
+@@ -1566,7 +1566,7 @@ config FAULT_INJECTION_STACKTRACE_FILTER
+       depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
+       depends on !X86_64
+       select STACKTRACE
+-      select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC && !SCORE && !X86
++      select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !SCORE && !X86
+       help
+         Provide stacktrace filter for fault-injection capabilities
+@@ -1575,7 +1575,7 @@ config LATENCYTOP
+       depends on DEBUG_KERNEL
+       depends on STACKTRACE_SUPPORT
+       depends on PROC_FS
+-      select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC && !X86
++      select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86
+       select KALLSYMS
+       select KALLSYMS_ALL
+       select STACKTRACE
diff --git a/queue-4.14/arm-8805-2-remove-unneeded-naked-function-usage.patch b/queue-4.14/arm-8805-2-remove-unneeded-naked-function-usage.patch
new file mode 100644 (file)
index 0000000..00e8fb8
--- /dev/null
@@ -0,0 +1,528 @@
+From b99afae1390140f5b0039e6b37a7380de31ae874 Mon Sep 17 00:00:00 2001
+From: Nicolas Pitre <nicolas.pitre@linaro.org>
+Date: Wed, 7 Nov 2018 17:49:00 +0100
+Subject: ARM: 8805/2: remove unneeded naked function usage
+
+From: Nicolas Pitre <nicolas.pitre@linaro.org>
+
+commit b99afae1390140f5b0039e6b37a7380de31ae874 upstream.
+
+The naked attribute is known to confuse some old gcc versions when
+function arguments aren't explicitly listed as inline assembly operands
+despite the gcc documentation. That resulted in commit 9a40ac86152c
+("ARM: 6164/1: Add kto and kfrom to input operands list.").
+
+Yet that commit has problems of its own by having assembly operand
+constraints completely wrong. If the generated code has been OK since
+then, it is due to luck rather than correctness. So this patch also
+provides proper assembly operand constraints, and removes two instances
+of redundant register usages in the implementation while at it.
+
+Inspection of the generated code with this patch doesn't show any
+obvious quality degradation either, so not relying on __naked at all
+will make the code less fragile, and avoid some issues with clang.
+
+The only remaining __naked instances (excluding the kprobes test cases)
+are exynos_pm_power_up_setup(), tc2_pm_power_up_setup() and
+
+cci_enable_port_for_self(. But in the first two cases, only the function
+address is used by the compiler with no chance of inlining it by
+mistake, and the third case is called from assembly code only. And the
+fact that no stack is available when the corresponding code is executed
+does warrant the __naked usage in those cases.
+
+Signed-off-by: Nicolas Pitre <nico@linaro.org>
+Reviewed-by: Stefan Agner <stefan@agner.ch>
+Tested-by: Stefan Agner <stefan@agner.ch>
+Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm/mm/copypage-fa.c       |   35 ++++++--------
+ arch/arm/mm/copypage-feroceon.c |   98 +++++++++++++++++++---------------------
+ arch/arm/mm/copypage-v4mc.c     |   19 +++----
+ arch/arm/mm/copypage-v4wb.c     |   41 ++++++++--------
+ arch/arm/mm/copypage-v4wt.c     |   37 +++++++--------
+ arch/arm/mm/copypage-xsc3.c     |   71 ++++++++++++----------------
+ arch/arm/mm/copypage-xscale.c   |   71 ++++++++++++++--------------
+ 7 files changed, 178 insertions(+), 194 deletions(-)
+
+--- a/arch/arm/mm/copypage-fa.c
++++ b/arch/arm/mm/copypage-fa.c
+@@ -17,26 +17,25 @@
+ /*
+  * Faraday optimised copy_user_page
+  */
+-static void __naked
+-fa_copy_user_page(void *kto, const void *kfrom)
++static void fa_copy_user_page(void *kto, const void *kfrom)
+ {
+-      asm("\
+-      stmfd   sp!, {r4, lr}                   @ 2\n\
+-      mov     r2, %0                          @ 1\n\
+-1:    ldmia   r1!, {r3, r4, ip, lr}           @ 4\n\
+-      stmia   r0, {r3, r4, ip, lr}            @ 4\n\
+-      mcr     p15, 0, r0, c7, c14, 1          @ 1   clean and invalidate D line\n\
+-      add     r0, r0, #16                     @ 1\n\
+-      ldmia   r1!, {r3, r4, ip, lr}           @ 4\n\
+-      stmia   r0, {r3, r4, ip, lr}            @ 4\n\
+-      mcr     p15, 0, r0, c7, c14, 1          @ 1   clean and invalidate D line\n\
+-      add     r0, r0, #16                     @ 1\n\
+-      subs    r2, r2, #1                      @ 1\n\
++      int tmp;
++
++      asm volatile ("\
++1:    ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
++      stmia   %0, {r3, r4, ip, lr}            @ 4\n\
++      mcr     p15, 0, %0, c7, c14, 1          @ 1   clean and invalidate D line\n\
++      add     %0, %0, #16                     @ 1\n\
++      ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
++      stmia   %0, {r3, r4, ip, lr}            @ 4\n\
++      mcr     p15, 0, %0, c7, c14, 1          @ 1   clean and invalidate D line\n\
++      add     %0, %0, #16                     @ 1\n\
++      subs    %2, %2, #1                      @ 1\n\
+       bne     1b                              @ 1\n\
+-      mcr     p15, 0, r2, c7, c10, 4          @ 1   drain WB\n\
+-      ldmfd   sp!, {r4, pc}                   @ 3"
+-      :
+-      : "I" (PAGE_SIZE / 32));
++      mcr     p15, 0, %2, c7, c10, 4          @ 1   drain WB"
++      : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)
++      : "2" (PAGE_SIZE / 32)
++      : "r3", "r4", "ip", "lr");
+ }
+ void fa_copy_user_highpage(struct page *to, struct page *from,
+--- a/arch/arm/mm/copypage-feroceon.c
++++ b/arch/arm/mm/copypage-feroceon.c
+@@ -13,58 +13,56 @@
+ #include <linux/init.h>
+ #include <linux/highmem.h>
+-static void __naked
+-feroceon_copy_user_page(void *kto, const void *kfrom)
++static void feroceon_copy_user_page(void *kto, const void *kfrom)
+ {
+-      asm("\
+-      stmfd   sp!, {r4-r9, lr}                \n\
+-      mov     ip, %2                          \n\
+-1:    mov     lr, r1                          \n\
+-      ldmia   r1!, {r2 - r9}                  \n\
+-      pld     [lr, #32]                       \n\
+-      pld     [lr, #64]                       \n\
+-      pld     [lr, #96]                       \n\
+-      pld     [lr, #128]                      \n\
+-      pld     [lr, #160]                      \n\
+-      pld     [lr, #192]                      \n\
+-      pld     [lr, #224]                      \n\
+-      stmia   r0, {r2 - r9}                   \n\
+-      ldmia   r1!, {r2 - r9}                  \n\
+-      mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D line\n\
+-      add     r0, r0, #32                     \n\
+-      stmia   r0, {r2 - r9}                   \n\
+-      ldmia   r1!, {r2 - r9}                  \n\
+-      mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D line\n\
+-      add     r0, r0, #32                     \n\
+-      stmia   r0, {r2 - r9}                   \n\
+-      ldmia   r1!, {r2 - r9}                  \n\
+-      mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D line\n\
+-      add     r0, r0, #32                     \n\
+-      stmia   r0, {r2 - r9}                   \n\
+-      ldmia   r1!, {r2 - r9}                  \n\
+-      mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D line\n\
+-      add     r0, r0, #32                     \n\
+-      stmia   r0, {r2 - r9}                   \n\
+-      ldmia   r1!, {r2 - r9}                  \n\
+-      mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D line\n\
+-      add     r0, r0, #32                     \n\
+-      stmia   r0, {r2 - r9}                   \n\
+-      ldmia   r1!, {r2 - r9}                  \n\
+-      mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D line\n\
+-      add     r0, r0, #32                     \n\
+-      stmia   r0, {r2 - r9}                   \n\
+-      ldmia   r1!, {r2 - r9}                  \n\
+-      mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D line\n\
+-      add     r0, r0, #32                     \n\
+-      stmia   r0, {r2 - r9}                   \n\
+-      subs    ip, ip, #(32 * 8)               \n\
+-      mcr     p15, 0, r0, c7, c14, 1          @ clean and invalidate D line\n\
+-      add     r0, r0, #32                     \n\
++      int tmp;
++
++      asm volatile ("\
++1:    ldmia   %1!, {r2 - r7, ip, lr}          \n\
++      pld     [%1, #0]                        \n\
++      pld     [%1, #32]                       \n\
++      pld     [%1, #64]                       \n\
++      pld     [%1, #96]                       \n\
++      pld     [%1, #128]                      \n\
++      pld     [%1, #160]                      \n\
++      pld     [%1, #192]                      \n\
++      stmia   %0, {r2 - r7, ip, lr}           \n\
++      ldmia   %1!, {r2 - r7, ip, lr}          \n\
++      mcr     p15, 0, %0, c7, c14, 1          @ clean and invalidate D line\n\
++      add     %0, %0, #32                     \n\
++      stmia   %0, {r2 - r7, ip, lr}           \n\
++      ldmia   %1!, {r2 - r7, ip, lr}          \n\
++      mcr     p15, 0, %0, c7, c14, 1          @ clean and invalidate D line\n\
++      add     %0, %0, #32                     \n\
++      stmia   %0, {r2 - r7, ip, lr}           \n\
++      ldmia   %1!, {r2 - r7, ip, lr}          \n\
++      mcr     p15, 0, %0, c7, c14, 1          @ clean and invalidate D line\n\
++      add     %0, %0, #32                     \n\
++      stmia   %0, {r2 - r7, ip, lr}           \n\
++      ldmia   %1!, {r2 - r7, ip, lr}          \n\
++      mcr     p15, 0, %0, c7, c14, 1          @ clean and invalidate D line\n\
++      add     %0, %0, #32                     \n\
++      stmia   %0, {r2 - r7, ip, lr}           \n\
++      ldmia   %1!, {r2 - r7, ip, lr}          \n\
++      mcr     p15, 0, %0, c7, c14, 1          @ clean and invalidate D line\n\
++      add     %0, %0, #32                     \n\
++      stmia   %0, {r2 - r7, ip, lr}           \n\
++      ldmia   %1!, {r2 - r7, ip, lr}          \n\
++      mcr     p15, 0, %0, c7, c14, 1          @ clean and invalidate D line\n\
++      add     %0, %0, #32                     \n\
++      stmia   %0, {r2 - r7, ip, lr}           \n\
++      ldmia   %1!, {r2 - r7, ip, lr}          \n\
++      mcr     p15, 0, %0, c7, c14, 1          @ clean and invalidate D line\n\
++      add     %0, %0, #32                     \n\
++      stmia   %0, {r2 - r7, ip, lr}           \n\
++      subs    %2, %2, #(32 * 8)               \n\
++      mcr     p15, 0, %0, c7, c14, 1          @ clean and invalidate D line\n\
++      add     %0, %0, #32                     \n\
+       bne     1b                              \n\
+-      mcr     p15, 0, ip, c7, c10, 4          @ drain WB\n\
+-      ldmfd   sp!, {r4-r9, pc}"
+-      :
+-      : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE));
++      mcr     p15, 0, %2, c7, c10, 4          @ drain WB"
++      : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)
++      : "2" (PAGE_SIZE)
++      : "r2", "r3", "r4", "r5", "r6", "r7", "ip", "lr");
+ }
+ void feroceon_copy_user_highpage(struct page *to, struct page *from,
+--- a/arch/arm/mm/copypage-v4mc.c
++++ b/arch/arm/mm/copypage-v4mc.c
+@@ -40,12 +40,11 @@ static DEFINE_RAW_SPINLOCK(minicache_loc
+  * instruction.  If your processor does not supply this, you have to write your
+  * own copy_user_highpage that does the right thing.
+  */
+-static void __naked
+-mc_copy_user_page(void *from, void *to)
++static void mc_copy_user_page(void *from, void *to)
+ {
+-      asm volatile(
+-      "stmfd  sp!, {r4, lr}                   @ 2\n\
+-      mov     r4, %2                          @ 1\n\
++      int tmp;
++
++      asm volatile ("\
+       ldmia   %0!, {r2, r3, ip, lr}           @ 4\n\
+ 1:    mcr     p15, 0, %1, c7, c6, 1           @ 1   invalidate D line\n\
+       stmia   %1!, {r2, r3, ip, lr}           @ 4\n\
+@@ -55,13 +54,13 @@ mc_copy_user_page(void *from, void *to)
+       mcr     p15, 0, %1, c7, c6, 1           @ 1   invalidate D line\n\
+       stmia   %1!, {r2, r3, ip, lr}           @ 4\n\
+       ldmia   %0!, {r2, r3, ip, lr}           @ 4\n\
+-      subs    r4, r4, #1                      @ 1\n\
++      subs    %2, %2, #1                      @ 1\n\
+       stmia   %1!, {r2, r3, ip, lr}           @ 4\n\
+       ldmneia %0!, {r2, r3, ip, lr}           @ 4\n\
+-      bne     1b                              @ 1\n\
+-      ldmfd   sp!, {r4, pc}                   @ 3"
+-      :
+-      : "r" (from), "r" (to), "I" (PAGE_SIZE / 64));
++      bne     1b                              @ "
++      : "+&r" (from), "+&r" (to), "=&r" (tmp)
++      : "2" (PAGE_SIZE / 64)
++      : "r2", "r3", "ip", "lr");
+ }
+ void v4_mc_copy_user_highpage(struct page *to, struct page *from,
+--- a/arch/arm/mm/copypage-v4wb.c
++++ b/arch/arm/mm/copypage-v4wb.c
+@@ -22,29 +22,28 @@
+  * instruction.  If your processor does not supply this, you have to write your
+  * own copy_user_highpage that does the right thing.
+  */
+-static void __naked
+-v4wb_copy_user_page(void *kto, const void *kfrom)
++static void v4wb_copy_user_page(void *kto, const void *kfrom)
+ {
+-      asm("\
+-      stmfd   sp!, {r4, lr}                   @ 2\n\
+-      mov     r2, %2                          @ 1\n\
+-      ldmia   r1!, {r3, r4, ip, lr}           @ 4\n\
+-1:    mcr     p15, 0, r0, c7, c6, 1           @ 1   invalidate D line\n\
+-      stmia   r0!, {r3, r4, ip, lr}           @ 4\n\
+-      ldmia   r1!, {r3, r4, ip, lr}           @ 4+1\n\
+-      stmia   r0!, {r3, r4, ip, lr}           @ 4\n\
+-      ldmia   r1!, {r3, r4, ip, lr}           @ 4\n\
+-      mcr     p15, 0, r0, c7, c6, 1           @ 1   invalidate D line\n\
+-      stmia   r0!, {r3, r4, ip, lr}           @ 4\n\
+-      ldmia   r1!, {r3, r4, ip, lr}           @ 4\n\
+-      subs    r2, r2, #1                      @ 1\n\
+-      stmia   r0!, {r3, r4, ip, lr}           @ 4\n\
+-      ldmneia r1!, {r3, r4, ip, lr}           @ 4\n\
++      int tmp;
++
++      asm volatile ("\
++      ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
++1:    mcr     p15, 0, %0, c7, c6, 1           @ 1   invalidate D line\n\
++      stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
++      ldmia   %1!, {r3, r4, ip, lr}           @ 4+1\n\
++      stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
++      ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
++      mcr     p15, 0, %0, c7, c6, 1           @ 1   invalidate D line\n\
++      stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
++      ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
++      subs    %2, %2, #1                      @ 1\n\
++      stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
++      ldmneia %1!, {r3, r4, ip, lr}           @ 4\n\
+       bne     1b                              @ 1\n\
+-      mcr     p15, 0, r1, c7, c10, 4          @ 1   drain WB\n\
+-      ldmfd    sp!, {r4, pc}                  @ 3"
+-      :
+-      : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64));
++      mcr     p15, 0, %1, c7, c10, 4          @ 1   drain WB"
++      : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)
++      : "2" (PAGE_SIZE / 64)
++      : "r3", "r4", "ip", "lr");
+ }
+ void v4wb_copy_user_highpage(struct page *to, struct page *from,
+--- a/arch/arm/mm/copypage-v4wt.c
++++ b/arch/arm/mm/copypage-v4wt.c
+@@ -20,27 +20,26 @@
+  * dirty data in the cache.  However, we do have to ensure that
+  * subsequent reads are up to date.
+  */
+-static void __naked
+-v4wt_copy_user_page(void *kto, const void *kfrom)
++static void v4wt_copy_user_page(void *kto, const void *kfrom)
+ {
+-      asm("\
+-      stmfd   sp!, {r4, lr}                   @ 2\n\
+-      mov     r2, %2                          @ 1\n\
+-      ldmia   r1!, {r3, r4, ip, lr}           @ 4\n\
+-1:    stmia   r0!, {r3, r4, ip, lr}           @ 4\n\
+-      ldmia   r1!, {r3, r4, ip, lr}           @ 4+1\n\
+-      stmia   r0!, {r3, r4, ip, lr}           @ 4\n\
+-      ldmia   r1!, {r3, r4, ip, lr}           @ 4\n\
+-      stmia   r0!, {r3, r4, ip, lr}           @ 4\n\
+-      ldmia   r1!, {r3, r4, ip, lr}           @ 4\n\
+-      subs    r2, r2, #1                      @ 1\n\
+-      stmia   r0!, {r3, r4, ip, lr}           @ 4\n\
+-      ldmneia r1!, {r3, r4, ip, lr}           @ 4\n\
++      int tmp;
++
++      asm volatile ("\
++      ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
++1:    stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
++      ldmia   %1!, {r3, r4, ip, lr}           @ 4+1\n\
++      stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
++      ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
++      stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
++      ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
++      subs    %2, %2, #1                      @ 1\n\
++      stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
++      ldmneia %1!, {r3, r4, ip, lr}           @ 4\n\
+       bne     1b                              @ 1\n\
+-      mcr     p15, 0, r2, c7, c7, 0           @ flush ID cache\n\
+-      ldmfd   sp!, {r4, pc}                   @ 3"
+-      :
+-      : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64));
++      mcr     p15, 0, %2, c7, c7, 0           @ flush ID cache"
++      : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)
++      : "2" (PAGE_SIZE / 64)
++      : "r3", "r4", "ip", "lr");
+ }
+ void v4wt_copy_user_highpage(struct page *to, struct page *from,
+--- a/arch/arm/mm/copypage-xsc3.c
++++ b/arch/arm/mm/copypage-xsc3.c
+@@ -21,53 +21,46 @@
+ /*
+  * XSC3 optimised copy_user_highpage
+- *  r0 = destination
+- *  r1 = source
+  *
+  * The source page may have some clean entries in the cache already, but we
+  * can safely ignore them - break_cow() will flush them out of the cache
+  * if we eventually end up using our copied page.
+  *
+  */
+-static void __naked
+-xsc3_mc_copy_user_page(void *kto, const void *kfrom)
++static void xsc3_mc_copy_user_page(void *kto, const void *kfrom)
+ {
+-      asm("\
+-      stmfd   sp!, {r4, r5, lr}               \n\
+-      mov     lr, %2                          \n\
+-                                              \n\
+-      pld     [r1, #0]                        \n\
+-      pld     [r1, #32]                       \n\
+-1:    pld     [r1, #64]                       \n\
+-      pld     [r1, #96]                       \n\
++      int tmp;
++
++      asm volatile ("\
++      pld     [%1, #0]                        \n\
++      pld     [%1, #32]                       \n\
++1:    pld     [%1, #64]                       \n\
++      pld     [%1, #96]                       \n\
+                                               \n\
+-2:    ldrd    r2, [r1], #8                    \n\
+-      mov     ip, r0                          \n\
+-      ldrd    r4, [r1], #8                    \n\
+-      mcr     p15, 0, ip, c7, c6, 1           @ invalidate\n\
+-      strd    r2, [r0], #8                    \n\
+-      ldrd    r2, [r1], #8                    \n\
+-      strd    r4, [r0], #8                    \n\
+-      ldrd    r4, [r1], #8                    \n\
+-      strd    r2, [r0], #8                    \n\
+-      strd    r4, [r0], #8                    \n\
+-      ldrd    r2, [r1], #8                    \n\
+-      mov     ip, r0                          \n\
+-      ldrd    r4, [r1], #8                    \n\
+-      mcr     p15, 0, ip, c7, c6, 1           @ invalidate\n\
+-      strd    r2, [r0], #8                    \n\
+-      ldrd    r2, [r1], #8                    \n\
+-      subs    lr, lr, #1                      \n\
+-      strd    r4, [r0], #8                    \n\
+-      ldrd    r4, [r1], #8                    \n\
+-      strd    r2, [r0], #8                    \n\
+-      strd    r4, [r0], #8                    \n\
++2:    ldrd    r2, [%1], #8                    \n\
++      ldrd    r4, [%1], #8                    \n\
++      mcr     p15, 0, %0, c7, c6, 1           @ invalidate\n\
++      strd    r2, [%0], #8                    \n\
++      ldrd    r2, [%1], #8                    \n\
++      strd    r4, [%0], #8                    \n\
++      ldrd    r4, [%1], #8                    \n\
++      strd    r2, [%0], #8                    \n\
++      strd    r4, [%0], #8                    \n\
++      ldrd    r2, [%1], #8                    \n\
++      ldrd    r4, [%1], #8                    \n\
++      mcr     p15, 0, %0, c7, c6, 1           @ invalidate\n\
++      strd    r2, [%0], #8                    \n\
++      ldrd    r2, [%1], #8                    \n\
++      subs    %2, %2, #1                      \n\
++      strd    r4, [%0], #8                    \n\
++      ldrd    r4, [%1], #8                    \n\
++      strd    r2, [%0], #8                    \n\
++      strd    r4, [%0], #8                    \n\
+       bgt     1b                              \n\
+-      beq     2b                              \n\
+-                                              \n\
+-      ldmfd   sp!, {r4, r5, pc}"
+-      :
+-      : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64 - 1));
++      beq     2b                              "
++      : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)
++      : "2" (PAGE_SIZE / 64 - 1)
++      : "r2", "r3", "r4", "r5");
+ }
+ void xsc3_mc_copy_user_highpage(struct page *to, struct page *from,
+@@ -85,8 +78,6 @@ void xsc3_mc_copy_user_highpage(struct p
+ /*
+  * XScale optimised clear_user_page
+- *  r0 = destination
+- *  r1 = virtual user address of ultimate destination page
+  */
+ void xsc3_mc_clear_user_highpage(struct page *page, unsigned long vaddr)
+ {
+--- a/arch/arm/mm/copypage-xscale.c
++++ b/arch/arm/mm/copypage-xscale.c
+@@ -36,52 +36,51 @@ static DEFINE_RAW_SPINLOCK(minicache_loc
+  * Dcache aliasing issue.  The writes will be forwarded to the write buffer,
+  * and merged as appropriate.
+  */
+-static void __naked
+-mc_copy_user_page(void *from, void *to)
++static void mc_copy_user_page(void *from, void *to)
+ {
++      int tmp;
++
+       /*
+        * Strangely enough, best performance is achieved
+        * when prefetching destination as well.  (NP)
+        */
+-      asm volatile(
+-      "stmfd  sp!, {r4, r5, lr}               \n\
+-      mov     lr, %2                          \n\
+-      pld     [r0, #0]                        \n\
+-      pld     [r0, #32]                       \n\
+-      pld     [r1, #0]                        \n\
+-      pld     [r1, #32]                       \n\
+-1:    pld     [r0, #64]                       \n\
+-      pld     [r0, #96]                       \n\
+-      pld     [r1, #64]                       \n\
+-      pld     [r1, #96]                       \n\
+-2:    ldrd    r2, [r0], #8                    \n\
+-      ldrd    r4, [r0], #8                    \n\
+-      mov     ip, r1                          \n\
+-      strd    r2, [r1], #8                    \n\
+-      ldrd    r2, [r0], #8                    \n\
+-      strd    r4, [r1], #8                    \n\
+-      ldrd    r4, [r0], #8                    \n\
+-      strd    r2, [r1], #8                    \n\
+-      strd    r4, [r1], #8                    \n\
++      asm volatile ("\
++      pld     [%0, #0]                        \n\
++      pld     [%0, #32]                       \n\
++      pld     [%1, #0]                        \n\
++      pld     [%1, #32]                       \n\
++1:    pld     [%0, #64]                       \n\
++      pld     [%0, #96]                       \n\
++      pld     [%1, #64]                       \n\
++      pld     [%1, #96]                       \n\
++2:    ldrd    r2, [%0], #8                    \n\
++      ldrd    r4, [%0], #8                    \n\
++      mov     ip, %1                          \n\
++      strd    r2, [%1], #8                    \n\
++      ldrd    r2, [%0], #8                    \n\
++      strd    r4, [%1], #8                    \n\
++      ldrd    r4, [%0], #8                    \n\
++      strd    r2, [%1], #8                    \n\
++      strd    r4, [%1], #8                    \n\
+       mcr     p15, 0, ip, c7, c10, 1          @ clean D line\n\
+-      ldrd    r2, [r0], #8                    \n\
++      ldrd    r2, [%0], #8                    \n\
+       mcr     p15, 0, ip, c7, c6, 1           @ invalidate D line\n\
+-      ldrd    r4, [r0], #8                    \n\
+-      mov     ip, r1                          \n\
+-      strd    r2, [r1], #8                    \n\
+-      ldrd    r2, [r0], #8                    \n\
+-      strd    r4, [r1], #8                    \n\
+-      ldrd    r4, [r0], #8                    \n\
+-      strd    r2, [r1], #8                    \n\
+-      strd    r4, [r1], #8                    \n\
++      ldrd    r4, [%0], #8                    \n\
++      mov     ip, %1                          \n\
++      strd    r2, [%1], #8                    \n\
++      ldrd    r2, [%0], #8                    \n\
++      strd    r4, [%1], #8                    \n\
++      ldrd    r4, [%0], #8                    \n\
++      strd    r2, [%1], #8                    \n\
++      strd    r4, [%1], #8                    \n\
+       mcr     p15, 0, ip, c7, c10, 1          @ clean D line\n\
+-      subs    lr, lr, #1                      \n\
++      subs    %2, %2, #1                      \n\
+       mcr     p15, 0, ip, c7, c6, 1           @ invalidate D line\n\
+       bgt     1b                              \n\
+-      beq     2b                              \n\
+-      ldmfd   sp!, {r4, r5, pc}               "
+-      :
+-      : "r" (from), "r" (to), "I" (PAGE_SIZE / 64 - 1));
++      beq     2b                              "
++      : "+&r" (from), "+&r" (to), "=&r" (tmp)
++      : "2" (PAGE_SIZE / 64 - 1)
++      : "r2", "r3", "r4", "r5", "ip");
+ }
+ void xscale_mc_copy_user_highpage(struct page *to, struct page *from,
diff --git a/queue-4.14/input-touchscreen-avoid-bitwise-vs-logical-or-warning.patch b/queue-4.14/input-touchscreen-avoid-bitwise-vs-logical-or-warning.patch
new file mode 100644 (file)
index 0000000..91008dc
--- /dev/null
@@ -0,0 +1,78 @@
+From a02dcde595f7cbd240ccd64de96034ad91cffc40 Mon Sep 17 00:00:00 2001
+From: Nathan Chancellor <nathan@kernel.org>
+Date: Fri, 15 Oct 2021 13:13:06 -0700
+Subject: Input: touchscreen - avoid bitwise vs logical OR warning
+
+From: Nathan Chancellor <nathan@kernel.org>
+
+commit a02dcde595f7cbd240ccd64de96034ad91cffc40 upstream.
+
+A new warning in clang points out a few places in this driver where a
+bitwise OR is being used with boolean types:
+
+drivers/input/touchscreen.c:81:17: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
+        data_present = touchscreen_get_prop_u32(dev, "touchscreen-min-x",
+                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This use of a bitwise OR is intentional, as bitwise operations do not
+short circuit, which allows all the calls to touchscreen_get_prop_u32()
+to happen so that the last parameter is initialized while coalescing the
+results of the calls to make a decision after they are all evaluated.
+
+To make this clearer to the compiler, use the '|=' operator to assign
+the result of each touchscreen_get_prop_u32() call to data_present,
+which keeps the meaning of the code the same but makes it obvious that
+every one of these calls is expected to happen.
+
+Signed-off-by: Nathan Chancellor <nathan@kernel.org>
+Reported-by: Nick Desaulniers <ndesaulniers@google.com>
+Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
+Link: https://lore.kernel.org/r/20211014205757.3474635-1-nathan@kernel.org
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/input/touchscreen/of_touchscreen.c |   18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+--- a/drivers/input/touchscreen/of_touchscreen.c
++++ b/drivers/input/touchscreen/of_touchscreen.c
+@@ -79,8 +79,8 @@ void touchscreen_parse_properties(struct
+       data_present = touchscreen_get_prop_u32(dev, "touchscreen-size-x",
+                                               input_abs_get_max(input,
+                                                                 axis) + 1,
+-                                              &maximum) |
+-                     touchscreen_get_prop_u32(dev, "touchscreen-fuzz-x",
++                                              &maximum);
++      data_present |= touchscreen_get_prop_u32(dev, "touchscreen-fuzz-x",
+                                               input_abs_get_fuzz(input, axis),
+                                               &fuzz);
+       if (data_present)
+@@ -90,8 +90,8 @@ void touchscreen_parse_properties(struct
+       data_present = touchscreen_get_prop_u32(dev, "touchscreen-size-y",
+                                               input_abs_get_max(input,
+                                                                 axis) + 1,
+-                                              &maximum) |
+-                     touchscreen_get_prop_u32(dev, "touchscreen-fuzz-y",
++                                              &maximum);
++      data_present |= touchscreen_get_prop_u32(dev, "touchscreen-fuzz-y",
+                                               input_abs_get_fuzz(input, axis),
+                                               &fuzz);
+       if (data_present)
+@@ -101,11 +101,11 @@ void touchscreen_parse_properties(struct
+       data_present = touchscreen_get_prop_u32(dev,
+                                               "touchscreen-max-pressure",
+                                               input_abs_get_max(input, axis),
+-                                              &maximum) |
+-                     touchscreen_get_prop_u32(dev,
+-                                              "touchscreen-fuzz-pressure",
+-                                              input_abs_get_fuzz(input, axis),
+-                                              &fuzz);
++                                              &maximum);
++      data_present |= touchscreen_get_prop_u32(dev,
++                                               "touchscreen-fuzz-pressure",
++                                               input_abs_get_fuzz(input, axis),
++                                               &fuzz);
+       if (data_present)
+               touchscreen_set_params(input, axis, maximum, fuzz);
diff --git a/queue-4.14/mwifiex-remove-unnecessary-braces-from-hostcmd_set_seq_no_bss_info.patch b/queue-4.14/mwifiex-remove-unnecessary-braces-from-hostcmd_set_seq_no_bss_info.patch
new file mode 100644 (file)
index 0000000..55ae5aa
--- /dev/null
@@ -0,0 +1,72 @@
+From 6a953dc4dbd1c7057fb765a24f37a5e953c85fb0 Mon Sep 17 00:00:00 2001
+From: Nathan Chancellor <natechancellor@gmail.com>
+Date: Tue, 1 Sep 2020 00:08:34 -0700
+Subject: mwifiex: Remove unnecessary braces from HostCmd_SET_SEQ_NO_BSS_INFO
+
+From: Nathan Chancellor <natechancellor@gmail.com>
+
+commit 6a953dc4dbd1c7057fb765a24f37a5e953c85fb0 upstream.
+
+A new warning in clang points out when macro expansion might result in a
+GNU C statement expression. There is an instance of this in the mwifiex
+driver:
+
+drivers/net/wireless/marvell/mwifiex/cmdevt.c:217:34: warning: '}' and
+')' tokens terminating statement expression appear in different macro
+expansion contexts [-Wcompound-token-split-by-macro]
+        host_cmd->seq_num = cpu_to_le16(HostCmd_SET_SEQ_NO_BSS_INFO
+                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
+drivers/net/wireless/marvell/mwifiex/fw.h:519:46: note: expanded from
+macro 'HostCmd_SET_SEQ_NO_BSS_INFO'
+        (((type) & 0x000f) << 12);                  }
+                                                    ^
+
+This does not appear to be a real issue. Removing the braces and
+replacing them with parentheses will fix the warning and not change the
+meaning of the code.
+
+Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver")
+Link: https://github.com/ClangBuiltLinux/linux/issues/1146
+Reported-by: Andy Lavr <andy.lavr@gmail.com>
+Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
+Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+Link: https://lore.kernel.org/r/20200901070834.1015754-1-natechancellor@gmail.com
+Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/wireless/marvell/mwifiex/cmdevt.c |    4 ++--
+ drivers/net/wireless/marvell/mwifiex/fw.h     |    8 ++++----
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
++++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+@@ -323,9 +323,9 @@ static int mwifiex_dnld_sleep_confirm_cm
+       adapter->seq_num++;
+       sleep_cfm_buf->seq_num =
+-              cpu_to_le16((HostCmd_SET_SEQ_NO_BSS_INFO
++              cpu_to_le16(HostCmd_SET_SEQ_NO_BSS_INFO
+                                       (adapter->seq_num, priv->bss_num,
+-                                       priv->bss_type)));
++                                       priv->bss_type));
+       mwifiex_dbg(adapter, CMD,
+                   "cmd: DNLD_CMD: %#x, act %#x, len %d, seqno %#x\n",
+--- a/drivers/net/wireless/marvell/mwifiex/fw.h
++++ b/drivers/net/wireless/marvell/mwifiex/fw.h
+@@ -498,10 +498,10 @@ enum mwifiex_channel_flags {
+ #define RF_ANTENNA_AUTO                 0xFFFF
+-#define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) {   \
+-      (((seq) & 0x00ff) |                             \
+-       (((num) & 0x000f) << 8)) |                     \
+-      (((type) & 0x000f) << 12);                  }
++#define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) \
++      ((((seq) & 0x00ff) |                        \
++       (((num) & 0x000f) << 8)) |                 \
++      (((type) & 0x000f) << 12))
+ #define HostCmd_GET_SEQ_NO(seq)       \
+       ((seq) & HostCmd_SEQ_NUM_MASK)
diff --git a/queue-4.14/net-lan78xx-avoid-unnecessary-self-assignment.patch b/queue-4.14/net-lan78xx-avoid-unnecessary-self-assignment.patch
new file mode 100644 (file)
index 0000000..faae24e
--- /dev/null
@@ -0,0 +1,45 @@
+From 94e7c844990f0db92418586b107be135b4963b66 Mon Sep 17 00:00:00 2001
+From: Nathan Chancellor <natechancellor@gmail.com>
+Date: Thu, 20 Sep 2018 15:48:30 -0700
+Subject: net: lan78xx: Avoid unnecessary self assignment
+
+From: Nathan Chancellor <natechancellor@gmail.com>
+
+commit 94e7c844990f0db92418586b107be135b4963b66 upstream.
+
+Clang warns when a variable is assigned to itself.
+
+drivers/net/usb/lan78xx.c:940:11: warning: explicitly assigning value of
+variable of type 'u32' (aka 'unsigned int') to itself [-Wself-assign]
+                        offset = offset;
+                        ~~~~~~ ^ ~~~~~~
+1 warning generated.
+
+Reorder the if statement to acheive the same result and avoid a self
+assignment warning.
+
+Link: https://github.com/ClangBuiltLinux/linux/issues/129
+Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/usb/lan78xx.c |    6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/usb/lan78xx.c
++++ b/drivers/net/usb/lan78xx.c
+@@ -920,11 +920,9 @@ static int lan78xx_read_otp(struct lan78
+       ret = lan78xx_read_raw_otp(dev, 0, 1, &sig);
+       if (ret == 0) {
+-              if (sig == OTP_INDICATOR_1)
+-                      offset = offset;
+-              else if (sig == OTP_INDICATOR_2)
++              if (sig == OTP_INDICATOR_2)
+                       offset += 0x100;
+-              else
++              else if (sig != OTP_INDICATOR_1)
+                       ret = -EINVAL;
+               if (!ret)
+                       ret = lan78xx_read_raw_otp(dev, offset, length, data);
index b9e1d12ee2da40fb92e8b12898db868dfe8e36a6..ae028b3b8bdc9ff0a4a021251254ed51b3323cb1 100644 (file)
@@ -33,3 +33,8 @@ firmware-arm_scpi-fix-string-overflow-in-scpi-genpd-driver.patch
 arm-dts-imx6ull-pinfunc-fix-csi_data07__esai_tx0-pad-name.patch
 fuse-annotate-lock-in-fuse_reverse_inval_entry.patch
 scsi-scsi_debug-sanity-check-block-descriptor-length-in-resp_mode_select.patch
+net-lan78xx-avoid-unnecessary-self-assignment.patch
+arm-8805-2-remove-unneeded-naked-function-usage.patch
+mwifiex-remove-unnecessary-braces-from-hostcmd_set_seq_no_bss_info.patch
+arm-8800-1-use-choice-for-kernel-unwinders.patch
+input-touchscreen-avoid-bitwise-vs-logical-or-warning.patch