From: Sasha Levin Date: Thu, 16 Jan 2020 23:05:15 +0000 (-0500) Subject: fixes for 4.19 X-Git-Tag: v4.14.166~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c29d99af778154356545946d1275ba87f4e78fb3;p=thirdparty%2Fkernel%2Fstable-queue.git fixes for 4.19 Signed-off-by: Sasha Levin --- diff --git a/queue-4.19/dmaengine-k3dma-avoid-null-pointer-traversal.patch b/queue-4.19/dmaengine-k3dma-avoid-null-pointer-traversal.patch new file mode 100644 index 00000000000..237150bf0ce --- /dev/null +++ b/queue-4.19/dmaengine-k3dma-avoid-null-pointer-traversal.patch @@ -0,0 +1,66 @@ +From 706bde323022a04ebf06a225d18a38c4f08da7c9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 18 Dec 2019 19:09:06 +0000 +Subject: dmaengine: k3dma: Avoid null pointer traversal + +From: John Stultz + +[ Upstream commit 2f42e05b942fe2fbfb9bbc6e34e1dd8c3ce4f3a4 ] + +In some cases we seem to submit two transactions in a row, which +causes us to lose track of the first. If we then cancel the +request, we may still get an interrupt, which traverses a null +ds_run value. + +So try to avoid starting a new transaction if the ds_run value +is set. + +While this patch avoids the null pointer crash, I've had some +reports of the k3dma driver still getting confused, which +suggests the ds_run/ds_done value handling still isn't quite +right. However, I've not run into an issue recently with it +so I think this patch is worth pushing upstream to avoid the +crash. + +Signed-off-by: John Stultz +[add ss tag] +Link: https://lore.kernel.org/r/20191218190906.6641-1-john.stultz@linaro.org +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + drivers/dma/k3dma.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c +index 6bfa217ed6d0..ba3c3791f9dc 100644 +--- a/drivers/dma/k3dma.c ++++ b/drivers/dma/k3dma.c +@@ -222,9 +222,11 @@ static irqreturn_t k3_dma_int_handler(int irq, void *dev_id) + c = p->vchan; + if (c && (tc1 & BIT(i))) { + spin_lock_irqsave(&c->vc.lock, flags); +- vchan_cookie_complete(&p->ds_run->vd); +- p->ds_done = p->ds_run; +- p->ds_run = NULL; ++ if (p->ds_run != NULL) { ++ vchan_cookie_complete(&p->ds_run->vd); ++ p->ds_done = p->ds_run; ++ p->ds_run = NULL; ++ } + spin_unlock_irqrestore(&c->vc.lock, flags); + } + if (c && (tc2 & BIT(i))) { +@@ -264,6 +266,10 @@ static int k3_dma_start_txd(struct k3_dma_chan *c) + if (BIT(c->phy->idx) & k3_dma_get_chan_stat(d)) + return -EAGAIN; + ++ /* Avoid losing track of ds_run if a transaction is in flight */ ++ if (c->phy->ds_run) ++ return -EAGAIN; ++ + if (vd) { + struct k3_dma_desc_sw *ds = + container_of(vd, struct k3_dma_desc_sw, vd); +-- +2.20.1 + diff --git a/queue-4.19/drm-arm-mali-make-malidp_mw_connector_helper_funcs-s.patch b/queue-4.19/drm-arm-mali-make-malidp_mw_connector_helper_funcs-s.patch new file mode 100644 index 00000000000..4d06bf77f3b --- /dev/null +++ b/queue-4.19/drm-arm-mali-make-malidp_mw_connector_helper_funcs-s.patch @@ -0,0 +1,39 @@ +From bee159361dc4810ee79f50eb15402a1bf26fd4f0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 17 Dec 2019 11:53:09 +0000 +Subject: drm/arm/mali: make malidp_mw_connector_helper_funcs static + +From: Ben Dooks (Codethink) + +[ Upstream commit ac2917b01992c098b8d4e6837115e3ca347fdd90 ] + +The malidp_mw_connector_helper_funcs is not referenced by name +outside of the file it is in, so make it static to avoid the +following warning: + +drivers/gpu/drm/arm/malidp_mw.c:59:41: warning: symbol 'malidp_mw_connector_helper_funcs' was not declared. Should it be static? + +Signed-off-by: Ben Dooks (Codethink) +Signed-off-by: Liviu Dudau +Link: https://patchwork.freedesktop.org/patch/msgid/20191217115309.2133503-1-ben.dooks@codethink.co.uk +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/arm/malidp_mw.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/arm/malidp_mw.c b/drivers/gpu/drm/arm/malidp_mw.c +index 91472e5e0c8b..7266d3c8b8f4 100644 +--- a/drivers/gpu/drm/arm/malidp_mw.c ++++ b/drivers/gpu/drm/arm/malidp_mw.c +@@ -55,7 +55,7 @@ malidp_mw_connector_mode_valid(struct drm_connector *connector, + return MODE_OK; + } + +-const struct drm_connector_helper_funcs malidp_mw_connector_helper_funcs = { ++static const struct drm_connector_helper_funcs malidp_mw_connector_helper_funcs = { + .get_modes = malidp_mw_connector_get_modes, + .mode_valid = malidp_mw_connector_mode_valid, + }; +-- +2.20.1 + diff --git a/queue-4.19/gpio-mpc8xxx-add-platform-device-to-gpiochip-parent.patch b/queue-4.19/gpio-mpc8xxx-add-platform-device-to-gpiochip-parent.patch new file mode 100644 index 00000000000..965bebc961b --- /dev/null +++ b/queue-4.19/gpio-mpc8xxx-add-platform-device-to-gpiochip-parent.patch @@ -0,0 +1,42 @@ +From 41a5466ca508a6824c1fea6b2167f0a0e21e462e Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 26 Nov 2019 06:51:11 +0000 +Subject: gpio: mpc8xxx: Add platform device to gpiochip->parent +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Johnson CH Chen (陳昭勳) + +[ Upstream commit 322f6a3182d42df18059a89c53b09d33919f755e ] + +Dear Linus Walleij, + +In old kernels, some APIs still try to use parent->of_node from struct gpio_chip, +and it could be resulted in kernel panic because parent is NULL. Adding platform +device to gpiochip->parent can fix this problem. + +Signed-off-by: Johnson Chen +Link: https://patchwork.kernel.org/patch/11234609 +Link: https://lore.kernel.org/r/HK0PR01MB3521489269F76467DFD7843FFA450@HK0PR01MB3521.apcprd01.prod.exchangelabs.com +Signed-off-by: Linus Walleij +Signed-off-by: Sasha Levin +--- + drivers/gpio/gpio-mpc8xxx.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c +index 3f10f9599f2c..1899d172590b 100644 +--- a/drivers/gpio/gpio-mpc8xxx.c ++++ b/drivers/gpio/gpio-mpc8xxx.c +@@ -317,6 +317,7 @@ static int mpc8xxx_probe(struct platform_device *pdev) + return -ENOMEM; + + gc = &mpc8xxx_gc->gc; ++ gc->parent = &pdev->dev; + + if (of_property_read_bool(np, "little-endian")) { + ret = bgpio_init(gc, &pdev->dev, 4, +-- +2.20.1 + diff --git a/queue-4.19/hexagon-parenthesize-registers-in-asm-predicates.patch b/queue-4.19/hexagon-parenthesize-registers-in-asm-predicates.patch new file mode 100644 index 00000000000..e7276be99de --- /dev/null +++ b/queue-4.19/hexagon-parenthesize-registers-in-asm-predicates.patch @@ -0,0 +1,254 @@ +From 4f73ae3f66248a2e62c973541c8e092c3cd36006 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 4 Jan 2020 12:59:59 -0800 +Subject: hexagon: parenthesize registers in asm predicates + +From: Nick Desaulniers + +[ Upstream commit 780a0cfda9006a9a22d6473c2d4c527f5c68eb2e ] + +Hexagon requires that register predicates in assembly be parenthesized. + +Link: https://github.com/ClangBuiltLinux/linux/issues/754 +Link: http://lkml.kernel.org/r/20191209222956.239798-3-ndesaulniers@google.com +Signed-off-by: Nick Desaulniers +Suggested-by: Sid Manning +Acked-by: Brian Cain +Cc: Lee Jones +Cc: Andy Shevchenko +Cc: Tuowen Zhao +Cc: Mika Westerberg +Cc: Luis Chamberlain +Cc: Greg Kroah-Hartman +Cc: Alexios Zavras +Cc: Allison Randal +Cc: Will Deacon +Cc: Richard Fontana +Cc: Thomas Gleixner +Cc: Peter Zijlstra +Cc: Boqun Feng +Cc: Ingo Molnar +Cc: Geert Uytterhoeven +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + arch/hexagon/include/asm/atomic.h | 8 ++++---- + arch/hexagon/include/asm/bitops.h | 8 ++++---- + arch/hexagon/include/asm/cmpxchg.h | 2 +- + arch/hexagon/include/asm/futex.h | 6 +++--- + arch/hexagon/include/asm/spinlock.h | 20 ++++++++++---------- + arch/hexagon/kernel/vm_entry.S | 2 +- + 6 files changed, 23 insertions(+), 23 deletions(-) + +diff --git a/arch/hexagon/include/asm/atomic.h b/arch/hexagon/include/asm/atomic.h +index 311b9894ccc8..15cca7f1fded 100644 +--- a/arch/hexagon/include/asm/atomic.h ++++ b/arch/hexagon/include/asm/atomic.h +@@ -105,7 +105,7 @@ static inline void atomic_##op(int i, atomic_t *v) \ + "1: %0 = memw_locked(%1);\n" \ + " %0 = "#op "(%0,%2);\n" \ + " memw_locked(%1,P3)=%0;\n" \ +- " if !P3 jump 1b;\n" \ ++ " if (!P3) jump 1b;\n" \ + : "=&r" (output) \ + : "r" (&v->counter), "r" (i) \ + : "memory", "p3" \ +@@ -121,7 +121,7 @@ static inline int atomic_##op##_return(int i, atomic_t *v) \ + "1: %0 = memw_locked(%1);\n" \ + " %0 = "#op "(%0,%2);\n" \ + " memw_locked(%1,P3)=%0;\n" \ +- " if !P3 jump 1b;\n" \ ++ " if (!P3) jump 1b;\n" \ + : "=&r" (output) \ + : "r" (&v->counter), "r" (i) \ + : "memory", "p3" \ +@@ -138,7 +138,7 @@ static inline int atomic_fetch_##op(int i, atomic_t *v) \ + "1: %0 = memw_locked(%2);\n" \ + " %1 = "#op "(%0,%3);\n" \ + " memw_locked(%2,P3)=%1;\n" \ +- " if !P3 jump 1b;\n" \ ++ " if (!P3) jump 1b;\n" \ + : "=&r" (output), "=&r" (val) \ + : "r" (&v->counter), "r" (i) \ + : "memory", "p3" \ +@@ -187,7 +187,7 @@ static inline int atomic_fetch_add_unless(atomic_t *v, int a, int u) + " }" + " memw_locked(%2, p3) = %1;" + " {" +- " if !p3 jump 1b;" ++ " if (!p3) jump 1b;" + " }" + "2:" + : "=&r" (__oldval), "=&r" (tmp) +diff --git a/arch/hexagon/include/asm/bitops.h b/arch/hexagon/include/asm/bitops.h +index 2691a1857d20..634306cda006 100644 +--- a/arch/hexagon/include/asm/bitops.h ++++ b/arch/hexagon/include/asm/bitops.h +@@ -52,7 +52,7 @@ static inline int test_and_clear_bit(int nr, volatile void *addr) + "1: R12 = memw_locked(R10);\n" + " { P0 = tstbit(R12,R11); R12 = clrbit(R12,R11); }\n" + " memw_locked(R10,P1) = R12;\n" +- " {if !P1 jump 1b; %0 = mux(P0,#1,#0);}\n" ++ " {if (!P1) jump 1b; %0 = mux(P0,#1,#0);}\n" + : "=&r" (oldval) + : "r" (addr), "r" (nr) + : "r10", "r11", "r12", "p0", "p1", "memory" +@@ -76,7 +76,7 @@ static inline int test_and_set_bit(int nr, volatile void *addr) + "1: R12 = memw_locked(R10);\n" + " { P0 = tstbit(R12,R11); R12 = setbit(R12,R11); }\n" + " memw_locked(R10,P1) = R12;\n" +- " {if !P1 jump 1b; %0 = mux(P0,#1,#0);}\n" ++ " {if (!P1) jump 1b; %0 = mux(P0,#1,#0);}\n" + : "=&r" (oldval) + : "r" (addr), "r" (nr) + : "r10", "r11", "r12", "p0", "p1", "memory" +@@ -102,7 +102,7 @@ static inline int test_and_change_bit(int nr, volatile void *addr) + "1: R12 = memw_locked(R10);\n" + " { P0 = tstbit(R12,R11); R12 = togglebit(R12,R11); }\n" + " memw_locked(R10,P1) = R12;\n" +- " {if !P1 jump 1b; %0 = mux(P0,#1,#0);}\n" ++ " {if (!P1) jump 1b; %0 = mux(P0,#1,#0);}\n" + : "=&r" (oldval) + : "r" (addr), "r" (nr) + : "r10", "r11", "r12", "p0", "p1", "memory" +@@ -237,7 +237,7 @@ static inline int ffs(int x) + int r; + + asm("{ P0 = cmp.eq(%1,#0); %0 = ct0(%1);}\n" +- "{ if P0 %0 = #0; if !P0 %0 = add(%0,#1);}\n" ++ "{ if (P0) %0 = #0; if (!P0) %0 = add(%0,#1);}\n" + : "=&r" (r) + : "r" (x) + : "p0"); +diff --git a/arch/hexagon/include/asm/cmpxchg.h b/arch/hexagon/include/asm/cmpxchg.h +index a6e34e2acbba..db258424059f 100644 +--- a/arch/hexagon/include/asm/cmpxchg.h ++++ b/arch/hexagon/include/asm/cmpxchg.h +@@ -44,7 +44,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, + __asm__ __volatile__ ( + "1: %0 = memw_locked(%1);\n" /* load into retval */ + " memw_locked(%1,P0) = %2;\n" /* store into memory */ +- " if !P0 jump 1b;\n" ++ " if (!P0) jump 1b;\n" + : "=&r" (retval) + : "r" (ptr), "r" (x) + : "memory", "p0" +diff --git a/arch/hexagon/include/asm/futex.h b/arch/hexagon/include/asm/futex.h +index c889f5993ecd..e8e5e47afb37 100644 +--- a/arch/hexagon/include/asm/futex.h ++++ b/arch/hexagon/include/asm/futex.h +@@ -16,7 +16,7 @@ + /* For example: %1 = %4 */ \ + insn \ + "2: memw_locked(%3,p2) = %1;\n" \ +- " if !p2 jump 1b;\n" \ ++ " if (!p2) jump 1b;\n" \ + " %1 = #0;\n" \ + "3:\n" \ + ".section .fixup,\"ax\"\n" \ +@@ -84,10 +84,10 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, u32 oldval, + "1: %1 = memw_locked(%3)\n" + " {\n" + " p2 = cmp.eq(%1,%4)\n" +- " if !p2.new jump:NT 3f\n" ++ " if (!p2.new) jump:NT 3f\n" + " }\n" + "2: memw_locked(%3,p2) = %5\n" +- " if !p2 jump 1b\n" ++ " if (!p2) jump 1b\n" + "3:\n" + ".section .fixup,\"ax\"\n" + "4: %0 = #%6\n" +diff --git a/arch/hexagon/include/asm/spinlock.h b/arch/hexagon/include/asm/spinlock.h +index 48020863f53a..e090f6a151c2 100644 +--- a/arch/hexagon/include/asm/spinlock.h ++++ b/arch/hexagon/include/asm/spinlock.h +@@ -44,9 +44,9 @@ static inline void arch_read_lock(arch_rwlock_t *lock) + __asm__ __volatile__( + "1: R6 = memw_locked(%0);\n" + " { P3 = cmp.ge(R6,#0); R6 = add(R6,#1);}\n" +- " { if !P3 jump 1b; }\n" ++ " { if (!P3) jump 1b; }\n" + " memw_locked(%0,P3) = R6;\n" +- " { if !P3 jump 1b; }\n" ++ " { if (!P3) jump 1b; }\n" + : + : "r" (&lock->lock) + : "memory", "r6", "p3" +@@ -60,7 +60,7 @@ static inline void arch_read_unlock(arch_rwlock_t *lock) + "1: R6 = memw_locked(%0);\n" + " R6 = add(R6,#-1);\n" + " memw_locked(%0,P3) = R6\n" +- " if !P3 jump 1b;\n" ++ " if (!P3) jump 1b;\n" + : + : "r" (&lock->lock) + : "memory", "r6", "p3" +@@ -75,7 +75,7 @@ static inline int arch_read_trylock(arch_rwlock_t *lock) + __asm__ __volatile__( + " R6 = memw_locked(%1);\n" + " { %0 = #0; P3 = cmp.ge(R6,#0); R6 = add(R6,#1);}\n" +- " { if !P3 jump 1f; }\n" ++ " { if (!P3) jump 1f; }\n" + " memw_locked(%1,P3) = R6;\n" + " { %0 = P3 }\n" + "1:\n" +@@ -92,9 +92,9 @@ static inline void arch_write_lock(arch_rwlock_t *lock) + __asm__ __volatile__( + "1: R6 = memw_locked(%0)\n" + " { P3 = cmp.eq(R6,#0); R6 = #-1;}\n" +- " { if !P3 jump 1b; }\n" ++ " { if (!P3) jump 1b; }\n" + " memw_locked(%0,P3) = R6;\n" +- " { if !P3 jump 1b; }\n" ++ " { if (!P3) jump 1b; }\n" + : + : "r" (&lock->lock) + : "memory", "r6", "p3" +@@ -108,7 +108,7 @@ static inline int arch_write_trylock(arch_rwlock_t *lock) + __asm__ __volatile__( + " R6 = memw_locked(%1)\n" + " { %0 = #0; P3 = cmp.eq(R6,#0); R6 = #-1;}\n" +- " { if !P3 jump 1f; }\n" ++ " { if (!P3) jump 1f; }\n" + " memw_locked(%1,P3) = R6;\n" + " %0 = P3;\n" + "1:\n" +@@ -131,9 +131,9 @@ static inline void arch_spin_lock(arch_spinlock_t *lock) + __asm__ __volatile__( + "1: R6 = memw_locked(%0);\n" + " P3 = cmp.eq(R6,#0);\n" +- " { if !P3 jump 1b; R6 = #1; }\n" ++ " { if (!P3) jump 1b; R6 = #1; }\n" + " memw_locked(%0,P3) = R6;\n" +- " { if !P3 jump 1b; }\n" ++ " { if (!P3) jump 1b; }\n" + : + : "r" (&lock->lock) + : "memory", "r6", "p3" +@@ -153,7 +153,7 @@ static inline unsigned int arch_spin_trylock(arch_spinlock_t *lock) + __asm__ __volatile__( + " R6 = memw_locked(%1);\n" + " P3 = cmp.eq(R6,#0);\n" +- " { if !P3 jump 1f; R6 = #1; %0 = #0; }\n" ++ " { if (!P3) jump 1f; R6 = #1; %0 = #0; }\n" + " memw_locked(%1,P3) = R6;\n" + " %0 = P3;\n" + "1:\n" +diff --git a/arch/hexagon/kernel/vm_entry.S b/arch/hexagon/kernel/vm_entry.S +index 67c6ccc14770..9f4a73ff7203 100644 +--- a/arch/hexagon/kernel/vm_entry.S ++++ b/arch/hexagon/kernel/vm_entry.S +@@ -382,7 +382,7 @@ ret_from_fork: + R26.L = #LO(do_work_pending); + R0 = #VM_INT_DISABLE; + } +- if P0 jump check_work_pending ++ if (P0) jump check_work_pending + { + R0 = R25; + callr R24 +-- +2.20.1 + diff --git a/queue-4.19/hexagon-work-around-compiler-crash.patch b/queue-4.19/hexagon-work-around-compiler-crash.patch new file mode 100644 index 00000000000..d8cbb6d9fba --- /dev/null +++ b/queue-4.19/hexagon-work-around-compiler-crash.patch @@ -0,0 +1,52 @@ +From 70016da08e386aed8b5da4f6f1f7bdf72be51c15 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 4 Jan 2020 13:00:02 -0800 +Subject: hexagon: work around compiler crash + +From: Nick Desaulniers + +[ Upstream commit 63e80314ab7cf4783526d2e44ee57a90514911c9 ] + +Clang cannot translate the string "r30" into a valid register yet. + +Link: https://github.com/ClangBuiltLinux/linux/issues/755 +Link: http://lkml.kernel.org/r/20191028155722.23419-1-ndesaulniers@google.com +Signed-off-by: Nick Desaulniers +Suggested-by: Sid Manning +Reviewed-by: Brian Cain +Cc: Allison Randal +Cc: Greg Kroah-Hartman +Cc: Richard Fontana +Cc: Thomas Gleixner +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + arch/hexagon/kernel/stacktrace.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/arch/hexagon/kernel/stacktrace.c b/arch/hexagon/kernel/stacktrace.c +index 41866a06adf7..ec4ef682923d 100644 +--- a/arch/hexagon/kernel/stacktrace.c ++++ b/arch/hexagon/kernel/stacktrace.c +@@ -24,8 +24,6 @@ + #include + #include + +-register unsigned long current_frame_pointer asm("r30"); +- + struct stackframe { + unsigned long fp; + unsigned long rets; +@@ -43,7 +41,7 @@ void save_stack_trace(struct stack_trace *trace) + + low = (unsigned long)task_stack_page(current); + high = low + THREAD_SIZE; +- fp = current_frame_pointer; ++ fp = (unsigned long)__builtin_frame_address(0); + + while (fp >= low && fp <= (high - sizeof(*frame))) { + frame = (struct stackframe *)fp; +-- +2.20.1 + diff --git a/queue-4.19/ioat-ioat_alloc_ring-failure-handling.patch b/queue-4.19/ioat-ioat_alloc_ring-failure-handling.patch new file mode 100644 index 00000000000..6d291249a22 --- /dev/null +++ b/queue-4.19/ioat-ioat_alloc_ring-failure-handling.patch @@ -0,0 +1,45 @@ +From 065d6811470b62f6a5ef4c20967d02175202949d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 25 Dec 2019 17:55:30 +0000 +Subject: ioat: ioat_alloc_ring() failure handling. + +From: Alexander.Barabash@dell.com + +[ Upstream commit b0b5ce1010ffc50015eaec72b0028aaae3f526bb ] + +If dma_alloc_coherent() returns NULL in ioat_alloc_ring(), ring +allocation must not proceed. + +Until now, if the first call to dma_alloc_coherent() in +ioat_alloc_ring() returned NULL, the processing could proceed, failing +with NULL-pointer dereferencing further down the line. + +Signed-off-by: Alexander Barabash +Acked-by: Dave Jiang +Link: https://lore.kernel.org/r/75e9c0e84c3345d693c606c64f8b9ab5@x13pwhopdag1307.AMER.DELL.COM +Signed-off-by: Vinod Koul +Signed-off-by: Sasha Levin +--- + drivers/dma/ioat/dma.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c +index 23fb2fa04000..b94cece58b98 100644 +--- a/drivers/dma/ioat/dma.c ++++ b/drivers/dma/ioat/dma.c +@@ -388,10 +388,11 @@ ioat_alloc_ring(struct dma_chan *c, int order, gfp_t flags) + + descs->virt = dma_alloc_coherent(to_dev(ioat_chan), + SZ_2M, &descs->hw, flags); +- if (!descs->virt && (i > 0)) { ++ if (!descs->virt) { + int idx; + + for (idx = 0; idx < i; idx++) { ++ descs = &ioat_chan->descs[idx]; + dma_free_coherent(to_dev(ioat_chan), SZ_2M, + descs->virt, descs->hw); + descs->virt = NULL; +-- +2.20.1 + diff --git a/queue-4.19/mips-cacheinfo-report-shared-cpu-map.patch b/queue-4.19/mips-cacheinfo-report-shared-cpu-map.patch new file mode 100644 index 00000000000..8a06af9c7e7 --- /dev/null +++ b/queue-4.19/mips-cacheinfo-report-shared-cpu-map.patch @@ -0,0 +1,83 @@ +From 0c53df605ccefae2d178784806efeebc2d3a305b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 24 Nov 2019 16:07:31 +0200 +Subject: mips: cacheinfo: report shared CPU map + +From: Vladimir Kondratiev + +[ Upstream commit 3b1313eb32c499d46dc4c3e896d19d9564c879c4 ] + +Report L1 caches as shared per core; L2 - per cluster. + +This fixes "perf" that went crazy if shared_cpu_map attribute not +reported on sysfs, in form of + +/sys/devices/system/cpu/cpu*/cache/index*/shared_cpu_list +/sys/devices/system/cpu/cpu*/cache/index*/shared_cpu_map + +Signed-off-by: Vladimir Kondratiev +Signed-off-by: Paul Burton +Cc: Ralf Baechle +Cc: James Hogan +Cc: linux-mips@vger.kernel.org +Cc: linux-kernel@vger.kernel.org +Signed-off-by: Sasha Levin +--- + arch/mips/kernel/cacheinfo.c | 27 ++++++++++++++++++++++++++- + 1 file changed, 26 insertions(+), 1 deletion(-) + +diff --git a/arch/mips/kernel/cacheinfo.c b/arch/mips/kernel/cacheinfo.c +index 428ef2189203..3ea95568ece4 100644 +--- a/arch/mips/kernel/cacheinfo.c ++++ b/arch/mips/kernel/cacheinfo.c +@@ -61,6 +61,25 @@ static int __init_cache_level(unsigned int cpu) + return 0; + } + ++static void fill_cpumask_siblings(int cpu, cpumask_t *cpu_map) ++{ ++ int cpu1; ++ ++ for_each_possible_cpu(cpu1) ++ if (cpus_are_siblings(cpu, cpu1)) ++ cpumask_set_cpu(cpu1, cpu_map); ++} ++ ++static void fill_cpumask_cluster(int cpu, cpumask_t *cpu_map) ++{ ++ int cpu1; ++ int cluster = cpu_cluster(&cpu_data[cpu]); ++ ++ for_each_possible_cpu(cpu1) ++ if (cpu_cluster(&cpu_data[cpu1]) == cluster) ++ cpumask_set_cpu(cpu1, cpu_map); ++} ++ + static int __populate_cache_leaves(unsigned int cpu) + { + struct cpuinfo_mips *c = ¤t_cpu_data; +@@ -68,14 +87,20 @@ static int __populate_cache_leaves(unsigned int cpu) + struct cacheinfo *this_leaf = this_cpu_ci->info_list; + + if (c->icache.waysize) { ++ /* L1 caches are per core */ ++ fill_cpumask_siblings(cpu, &this_leaf->shared_cpu_map); + populate_cache(dcache, this_leaf, 1, CACHE_TYPE_DATA); ++ fill_cpumask_siblings(cpu, &this_leaf->shared_cpu_map); + populate_cache(icache, this_leaf, 1, CACHE_TYPE_INST); + } else { + populate_cache(dcache, this_leaf, 1, CACHE_TYPE_UNIFIED); + } + +- if (c->scache.waysize) ++ if (c->scache.waysize) { ++ /* L2 cache is per cluster */ ++ fill_cpumask_cluster(cpu, &this_leaf->shared_cpu_map); + populate_cache(scache, this_leaf, 2, CACHE_TYPE_UNIFIED); ++ } + + if (c->tcache.waysize) + populate_cache(tcache, this_leaf, 3, CACHE_TYPE_UNIFIED); +-- +2.20.1 + diff --git a/queue-4.19/mips-prevent-link-failure-with-kcov-instrumentation.patch b/queue-4.19/mips-prevent-link-failure-with-kcov-instrumentation.patch new file mode 100644 index 00000000000..7d9bbf20f2d --- /dev/null +++ b/queue-4.19/mips-prevent-link-failure-with-kcov-instrumentation.patch @@ -0,0 +1,39 @@ +From 3bd6d881f7d0e32cd91c16a007d6a4f688eec9ac Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 9 Dec 2019 14:37:07 +0200 +Subject: MIPS: Prevent link failure with kcov instrumentation + +From: Jouni Hogander + +[ Upstream commit a4a3893114a41e365274d5fab5d9ff5acc235ff0 ] + +__sanitizer_cov_trace_pc() is not linked in and causing link +failure if KCOV_INSTRUMENT is enabled. Fix this by disabling +instrumentation for compressed image. + +Signed-off-by: Jouni Hogander +Signed-off-by: Paul Burton +Cc: Lukas Bulwahn +Cc: linux-mips@vger.kernel.org +Signed-off-by: Sasha Levin +--- + arch/mips/boot/compressed/Makefile | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile +index 172801ed35b8..d859f079b771 100644 +--- a/arch/mips/boot/compressed/Makefile ++++ b/arch/mips/boot/compressed/Makefile +@@ -29,6 +29,9 @@ KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ + -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \ + -DKERNEL_ENTRY=$(VMLINUX_ENTRY_ADDRESS) + ++# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. ++KCOV_INSTRUMENT := n ++ + # decompressor objects (linked with vmlinuz) + vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o + +-- +2.20.1 + diff --git a/queue-4.19/ocfs2-call-journal-flush-to-mark-journal-as-empty-af.patch b/queue-4.19/ocfs2-call-journal-flush-to-mark-journal-as-empty-af.patch new file mode 100644 index 00000000000..c67ba37a3a9 --- /dev/null +++ b/queue-4.19/ocfs2-call-journal-flush-to-mark-journal-as-empty-af.patch @@ -0,0 +1,138 @@ +From ae2f1a36508da9a402ee587846b1182c18a794c2 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 4 Jan 2020 13:00:18 -0800 +Subject: ocfs2: call journal flush to mark journal as empty after journal + recovery when mount + +From: Kai Li + +[ Upstream commit 397eac17f86f404f5ba31d8c3e39ec3124b39fd3 ] + +If journal is dirty when mount, it will be replayed but jbd2 sb log tail +cannot be updated to mark a new start because journal->j_flag has +already been set with JBD2_ABORT first in journal_init_common. + +When a new transaction is committed, it will be recored in block 1 +first(journal->j_tail is set to 1 in journal_reset). If emergency +restart happens again before journal super block is updated +unfortunately, the new recorded trans will not be replayed in the next +mount. + +The following steps describe this procedure in detail. +1. mount and touch some files +2. these transactions are committed to journal area but not checkpointed +3. emergency restart +4. mount again and its journals are replayed +5. journal super block's first s_start is 1, but its s_seq is not updated +6. touch a new file and its trans is committed but not checkpointed +7. emergency restart again +8. mount and journal is dirty, but trans committed in 6 will not be +replayed. + +This exception happens easily when this lun is used by only one node. +If it is used by multi-nodes, other node will replay its journal and its +journal super block will be updated after recovery like what this patch +does. + +ocfs2_recover_node->ocfs2_replay_journal. + +The following jbd2 journal can be generated by touching a new file after +journal is replayed, and seq 15 is the first valid commit, but first seq +is 13 in journal super block. + +logdump: + Block 0: Journal Superblock + Seq: 0 Type: 4 (JBD2_SUPERBLOCK_V2) + Blocksize: 4096 Total Blocks: 32768 First Block: 1 + First Commit ID: 13 Start Log Blknum: 1 + Error: 0 + Feature Compat: 0 + Feature Incompat: 2 block64 + Feature RO compat: 0 + Journal UUID: 4ED3822C54294467A4F8E87D2BA4BC36 + FS Share Cnt: 1 Dynamic Superblk Blknum: 0 + Per Txn Block Limit Journal: 0 Data: 0 + + Block 1: Journal Commit Block + Seq: 14 Type: 2 (JBD2_COMMIT_BLOCK) + + Block 2: Journal Descriptor + Seq: 15 Type: 1 (JBD2_DESCRIPTOR_BLOCK) + No. Blocknum Flags + 0. 587 none + UUID: 00000000000000000000000000000000 + 1. 8257792 JBD2_FLAG_SAME_UUID + 2. 619 JBD2_FLAG_SAME_UUID + 3. 24772864 JBD2_FLAG_SAME_UUID + 4. 8257802 JBD2_FLAG_SAME_UUID + 5. 513 JBD2_FLAG_SAME_UUID JBD2_FLAG_LAST_TAG + ... + Block 7: Inode + Inode: 8257802 Mode: 0640 Generation: 57157641 (0x3682809) + FS Generation: 2839773110 (0xa9437fb6) + CRC32: 00000000 ECC: 0000 + Type: Regular Attr: 0x0 Flags: Valid + Dynamic Features: (0x1) InlineData + User: 0 (root) Group: 0 (root) Size: 7 + Links: 1 Clusters: 0 + ctime: 0x5de5d870 0x11104c61 -- Tue Dec 3 11:37:20.286280801 2019 + atime: 0x5de5d870 0x113181a1 -- Tue Dec 3 11:37:20.288457121 2019 + mtime: 0x5de5d870 0x11104c61 -- Tue Dec 3 11:37:20.286280801 2019 + dtime: 0x0 -- Thu Jan 1 08:00:00 1970 + ... + Block 9: Journal Commit Block + Seq: 15 Type: 2 (JBD2_COMMIT_BLOCK) + +The following is journal recovery log when recovering the upper jbd2 +journal when mount again. + +syslog: + ocfs2: File system on device (252,1) was not unmounted cleanly, recovering it. + fs/jbd2/recovery.c:(do_one_pass, 449): Starting recovery pass 0 + fs/jbd2/recovery.c:(do_one_pass, 449): Starting recovery pass 1 + fs/jbd2/recovery.c:(do_one_pass, 449): Starting recovery pass 2 + fs/jbd2/recovery.c:(jbd2_journal_recover, 278): JBD2: recovery, exit status 0, recovered transactions 13 to 13 + +Due to first commit seq 13 recorded in journal super is not consistent +with the value recorded in block 1(seq is 14), journal recovery will be +terminated before seq 15 even though it is an unbroken commit, inode +8257802 is a new file and it will be lost. + +Link: http://lkml.kernel.org/r/20191217020140.2197-1-li.kai4@h3c.com +Signed-off-by: Kai Li +Reviewed-by: Joseph Qi +Reviewed-by: Changwei Ge +Cc: Mark Fasheh +Cc: Joel Becker +Cc: Junxiao Bi +Cc: Gang He +Cc: Jun Piao +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + fs/ocfs2/journal.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c +index fc1f209e5db0..c27d8ef47392 100644 +--- a/fs/ocfs2/journal.c ++++ b/fs/ocfs2/journal.c +@@ -1080,6 +1080,14 @@ int ocfs2_journal_load(struct ocfs2_journal *journal, int local, int replayed) + + ocfs2_clear_journal_error(osb->sb, journal->j_journal, osb->slot_num); + ++ if (replayed) { ++ jbd2_journal_lock_updates(journal->j_journal); ++ status = jbd2_journal_flush(journal->j_journal); ++ jbd2_journal_unlock_updates(journal->j_journal); ++ if (status < 0) ++ mlog_errno(status); ++ } ++ + status = ocfs2_journal_toggle_dirty(osb, 1, replayed); + if (status < 0) { + mlog_errno(status); +-- +2.20.1 + diff --git a/queue-4.19/rseq-selftests-turn-off-timeout-setting.patch b/queue-4.19/rseq-selftests-turn-off-timeout-setting.patch new file mode 100644 index 00000000000..d7a51284759 --- /dev/null +++ b/queue-4.19/rseq-selftests-turn-off-timeout-setting.patch @@ -0,0 +1,38 @@ +From a2b513adfb60b81912a902f04a04616c44fe7075 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 11 Dec 2019 11:28:57 -0500 +Subject: rseq/selftests: Turn off timeout setting + +From: Mathieu Desnoyers + +[ Upstream commit af9cb29c5488381083b0b5ccdfb3cd931063384a ] + +As the rseq selftests can run for a long period of time, disable the +timeout that the general selftests have. + +Signed-off-by: Mathieu Desnoyers +Cc: Shuah Khan +Cc: Thomas Gleixner +Cc: Peter Zijlstra (Intel) +Cc: "Paul E. McKenney" +Cc: Boqun Feng +Cc: "H . Peter Anvin" +Cc: Paul Turner +Cc: Dmitry Vyukov +Signed-off-by: Shuah Khan +Signed-off-by: Sasha Levin +--- + tools/testing/selftests/rseq/settings | 1 + + 1 file changed, 1 insertion(+) + create mode 100644 tools/testing/selftests/rseq/settings + +diff --git a/tools/testing/selftests/rseq/settings b/tools/testing/selftests/rseq/settings +new file mode 100644 +index 000000000000..e7b9417537fb +--- /dev/null ++++ b/tools/testing/selftests/rseq/settings +@@ -0,0 +1 @@ ++timeout=0 +-- +2.20.1 + diff --git a/queue-4.19/scsi-libcxgbi-fix-null-pointer-dereference-in-cxgbi_.patch b/queue-4.19/scsi-libcxgbi-fix-null-pointer-dereference-in-cxgbi_.patch new file mode 100644 index 00000000000..53b4758d034 --- /dev/null +++ b/queue-4.19/scsi-libcxgbi-fix-null-pointer-dereference-in-cxgbi_.patch @@ -0,0 +1,38 @@ +From c0e472fc03b1baa76efde8d85288984338eaf8eb Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 18 Dec 2019 19:15:31 +0530 +Subject: scsi: libcxgbi: fix NULL pointer dereference in + cxgbi_device_destroy() + +From: Varun Prakash + +[ Upstream commit 71482fde704efdd8c3abe0faf34d922c61e8d76b ] + +If cxgb4i_ddp_init() fails then cdev->cdev2ppm will be NULL, so add a check +for NULL pointer before dereferencing it. + +Link: https://lore.kernel.org/r/1576676731-3068-1-git-send-email-varun@chelsio.com +Signed-off-by: Varun Prakash +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/cxgbi/libcxgbi.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c +index cd2c247d6d0c..559d8bda4cca 100644 +--- a/drivers/scsi/cxgbi/libcxgbi.c ++++ b/drivers/scsi/cxgbi/libcxgbi.c +@@ -121,7 +121,8 @@ static inline void cxgbi_device_destroy(struct cxgbi_device *cdev) + "cdev 0x%p, p# %u.\n", cdev, cdev->nports); + cxgbi_hbas_remove(cdev); + cxgbi_device_portmap_cleanup(cdev); +- cxgbi_ppm_release(cdev->cdev2ppm(cdev)); ++ if (cdev->cdev2ppm) ++ cxgbi_ppm_release(cdev->cdev2ppm(cdev)); + if (cdev->pmap.max_connect) + cxgbi_free_big_mem(cdev->pmap.port_csk); + kfree(cdev); +-- +2.20.1 + diff --git a/queue-4.19/selftests-firmware-fix-it-to-do-root-uid-check-and-s.patch b/queue-4.19/selftests-firmware-fix-it-to-do-root-uid-check-and-s.patch new file mode 100644 index 00000000000..8d0d25e500b --- /dev/null +++ b/queue-4.19/selftests-firmware-fix-it-to-do-root-uid-check-and-s.patch @@ -0,0 +1,59 @@ +From 9f84bc07714669a8a22a736988f54a981061cd3a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 12 Dec 2019 18:56:06 -0700 +Subject: selftests: firmware: Fix it to do root uid check and skip + +From: Shuah Khan + +[ Upstream commit c65e41538b04e0d64a673828745a00cb68a24371 ] + +firmware attempts to load test modules that require root access +and fail. Fix it to check for root uid and exit with skip code +instead. + +Before this fix: + +selftests: firmware: fw_run_tests.sh +modprobe: ERROR: could not insert 'test_firmware': Operation not permitted +You must have the following enabled in your kernel: +CONFIG_TEST_FIRMWARE=y +CONFIG_FW_LOADER=y +CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +not ok 1 selftests: firmware: fw_run_tests.sh # SKIP + +With this fix: + +selftests: firmware: fw_run_tests.sh +skip all tests: must be run as root +not ok 1 selftests: firmware: fw_run_tests.sh # SKIP + +Signed-off-by: Shuah Khan +Reviwed-by: Greg Kroah-Hartman +Signed-off-by: Shuah Khan +Signed-off-by: Sasha Levin +--- + tools/testing/selftests/firmware/fw_lib.sh | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/tools/testing/selftests/firmware/fw_lib.sh b/tools/testing/selftests/firmware/fw_lib.sh +index 1cbb12e284a6..8a853ace55a2 100755 +--- a/tools/testing/selftests/firmware/fw_lib.sh ++++ b/tools/testing/selftests/firmware/fw_lib.sh +@@ -28,6 +28,12 @@ test_modprobe() + + check_mods() + { ++ local uid=$(id -u) ++ if [ $uid -ne 0 ]; then ++ echo "skip all tests: must be run as root" >&2 ++ exit $ksft_skip ++ fi ++ + trap "test_modprobe" EXIT + if [ ! -d $DIR ]; then + modprobe test_firmware +-- +2.20.1 + diff --git a/queue-4.19/series b/queue-4.19/series index 6c2221e36d2..f0b8612d5ee 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -70,3 +70,15 @@ rtlwifi-remove-unnecessary-null-check-in-rtl_regd_init.patch f2fs-fix-potential-overflow.patch rtc-msm6242-fix-reading-of-10-hour-digit.patch rtc-brcmstb-waketimer-add-missed-clk_disable_unprepare.patch +gpio-mpc8xxx-add-platform-device-to-gpiochip-parent.patch +scsi-libcxgbi-fix-null-pointer-dereference-in-cxgbi_.patch +selftests-firmware-fix-it-to-do-root-uid-check-and-s.patch +rseq-selftests-turn-off-timeout-setting.patch +mips-cacheinfo-report-shared-cpu-map.patch +mips-prevent-link-failure-with-kcov-instrumentation.patch +drm-arm-mali-make-malidp_mw_connector_helper_funcs-s.patch +dmaengine-k3dma-avoid-null-pointer-traversal.patch +ioat-ioat_alloc_ring-failure-handling.patch +hexagon-parenthesize-registers-in-asm-predicates.patch +hexagon-work-around-compiler-crash.patch +ocfs2-call-journal-flush-to-mark-journal-as-empty-af.patch