From: Greg Kroah-Hartman Date: Mon, 18 Dec 2023 11:06:37 +0000 (+0100) Subject: 5.4-stable patches X-Git-Tag: v5.15.144~15 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=89748823dc6107cc32b17d74ff76c8c36b0b79d8;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: mmc-block-be-sure-to-wait-while-busy-in-cqe-error-recovery.patch powerpc-ftrace-create-a-dummy-stackframe-to-fix-stack-unwind.patch powerpc-ftrace-fix-stack-teardown-in-ftrace_no_trace.patch --- diff --git a/queue-5.4/mmc-block-be-sure-to-wait-while-busy-in-cqe-error-recovery.patch b/queue-5.4/mmc-block-be-sure-to-wait-while-busy-in-cqe-error-recovery.patch new file mode 100644 index 00000000000..23908faaea8 --- /dev/null +++ b/queue-5.4/mmc-block-be-sure-to-wait-while-busy-in-cqe-error-recovery.patch @@ -0,0 +1,72 @@ +From c616696a902987352426fdaeec1b0b3240949e6b Mon Sep 17 00:00:00 2001 +From: Adrian Hunter +Date: Fri, 3 Nov 2023 10:47:17 +0200 +Subject: mmc: block: Be sure to wait while busy in CQE error recovery + +From: Adrian Hunter + +commit c616696a902987352426fdaeec1b0b3240949e6b upstream. + +STOP command does not guarantee to wait while busy, but subsequent command +MMC_CMDQ_TASK_MGMT to discard the queue will fail if the card is busy, so +be sure to wait by employing mmc_poll_for_busy(). + +Fixes: 72a5af554df8 ("mmc: core: Add support for handling CQE requests") +Cc: stable@vger.kernel.org +Signed-off-by: Adrian Hunter +Reviewed-by: Avri Altman +Reviewed-by: Christian Loehle +Link: https://lore.kernel.org/r/20231103084720.6886-4-adrian.hunter@intel.com +Signed-off-by: Ulf Hansson +Tested-by: Adrian Hunter +Signed-off-by: Adrian Hunter +Signed-off-by: Greg Kroah-Hartman +--- + drivers/mmc/core/core.c | 2 ++ + drivers/mmc/core/mmc_ops.c | 5 +++-- + drivers/mmc/core/mmc_ops.h | 2 ++ + 3 files changed, 7 insertions(+), 2 deletions(-) + +--- a/drivers/mmc/core/core.c ++++ b/drivers/mmc/core/core.c +@@ -570,6 +570,8 @@ int mmc_cqe_recovery(struct mmc_host *ho + cmd.busy_timeout = MMC_CQE_RECOVERY_TIMEOUT; + mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES); + ++ mmc_poll_for_busy(host->card, MMC_CQE_RECOVERY_TIMEOUT, true, true); ++ + memset(&cmd, 0, sizeof(cmd)); + cmd.opcode = MMC_CMDQ_TASK_MGMT; + cmd.arg = 1; /* Discard entire queue */ +--- a/drivers/mmc/core/mmc_ops.c ++++ b/drivers/mmc/core/mmc_ops.c +@@ -450,8 +450,8 @@ int mmc_switch_status(struct mmc_card *c + return __mmc_switch_status(card, true); + } + +-static int mmc_poll_for_busy(struct mmc_card *card, unsigned int timeout_ms, +- bool send_status, bool retry_crc_err) ++int mmc_poll_for_busy(struct mmc_card *card, unsigned int timeout_ms, ++ bool send_status, bool retry_crc_err) + { + struct mmc_host *host = card->host; + int err; +@@ -504,6 +504,7 @@ static int mmc_poll_for_busy(struct mmc_ + + return 0; + } ++EXPORT_SYMBOL_GPL(mmc_poll_for_busy); + + /** + * __mmc_switch - modify EXT_CSD register +--- a/drivers/mmc/core/mmc_ops.h ++++ b/drivers/mmc/core/mmc_ops.h +@@ -31,6 +31,8 @@ int mmc_can_ext_csd(struct mmc_card *car + int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd); + int mmc_switch_status(struct mmc_card *card); + int __mmc_switch_status(struct mmc_card *card, bool crc_err_fatal); ++int mmc_poll_for_busy(struct mmc_card *card, unsigned int timeout_ms, ++ bool send_status, bool retry_crc_err); + int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value, + unsigned int timeout_ms, unsigned char timing, + bool use_busy_signal, bool send_status, bool retry_crc_err); diff --git a/queue-5.4/powerpc-ftrace-create-a-dummy-stackframe-to-fix-stack-unwind.patch b/queue-5.4/powerpc-ftrace-create-a-dummy-stackframe-to-fix-stack-unwind.patch new file mode 100644 index 00000000000..e32897d0b92 --- /dev/null +++ b/queue-5.4/powerpc-ftrace-create-a-dummy-stackframe-to-fix-stack-unwind.patch @@ -0,0 +1,136 @@ +From stable+bounces-6807-greg=kroah.com@vger.kernel.org Fri Dec 15 12:17:59 2023 +From: Naveen N Rao +Date: Fri, 15 Dec 2023 16:44:32 +0530 +Subject: powerpc/ftrace: Create a dummy stackframe to fix stack unwind +To: +Cc: Greg KH , Michael Ellerman +Message-ID: <20231215111433.2362641-1-naveen@kernel.org> + +From: Naveen N Rao + +commit 41a506ef71eb38d94fe133f565c87c3e06ccc072 upstream. + +With ppc64 -mprofile-kernel and ppc32 -pg, profiling instructions to +call into ftrace are emitted right at function entry. The instruction +sequence used is minimal to reduce overhead. Crucially, a stackframe is +not created for the function being traced. This breaks stack unwinding +since the function being traced does not have a stackframe for itself. +As such, it never shows up in the backtrace: + +/sys/kernel/debug/tracing # echo 1 > /proc/sys/kernel/stack_tracer_enabled +/sys/kernel/debug/tracing # cat stack_trace + Depth Size Location (17 entries) + ----- ---- -------- + 0) 4144 32 ftrace_call+0x4/0x44 + 1) 4112 432 get_page_from_freelist+0x26c/0x1ad0 + 2) 3680 496 __alloc_pages+0x290/0x1280 + 3) 3184 336 __folio_alloc+0x34/0x90 + 4) 2848 176 vma_alloc_folio+0xd8/0x540 + 5) 2672 272 __handle_mm_fault+0x700/0x1cc0 + 6) 2400 208 handle_mm_fault+0xf0/0x3f0 + 7) 2192 80 ___do_page_fault+0x3e4/0xbe0 + 8) 2112 160 do_page_fault+0x30/0xc0 + 9) 1952 256 data_access_common_virt+0x210/0x220 + 10) 1696 400 0xc00000000f16b100 + 11) 1296 384 load_elf_binary+0x804/0x1b80 + 12) 912 208 bprm_execve+0x2d8/0x7e0 + 13) 704 64 do_execveat_common+0x1d0/0x2f0 + 14) 640 160 sys_execve+0x54/0x70 + 15) 480 64 system_call_exception+0x138/0x350 + 16) 416 416 system_call_common+0x160/0x2c4 + +Fix this by having ftrace create a dummy stackframe for the function +being traced. With this, backtraces now capture the function being +traced: + +/sys/kernel/debug/tracing # cat stack_trace + Depth Size Location (17 entries) + ----- ---- -------- + 0) 3888 32 _raw_spin_trylock+0x8/0x70 + 1) 3856 576 get_page_from_freelist+0x26c/0x1ad0 + 2) 3280 64 __alloc_pages+0x290/0x1280 + 3) 3216 336 __folio_alloc+0x34/0x90 + 4) 2880 176 vma_alloc_folio+0xd8/0x540 + 5) 2704 416 __handle_mm_fault+0x700/0x1cc0 + 6) 2288 96 handle_mm_fault+0xf0/0x3f0 + 7) 2192 48 ___do_page_fault+0x3e4/0xbe0 + 8) 2144 192 do_page_fault+0x30/0xc0 + 9) 1952 608 data_access_common_virt+0x210/0x220 + 10) 1344 16 0xc0000000334bbb50 + 11) 1328 416 load_elf_binary+0x804/0x1b80 + 12) 912 64 bprm_execve+0x2d8/0x7e0 + 13) 848 176 do_execveat_common+0x1d0/0x2f0 + 14) 672 192 sys_execve+0x54/0x70 + 15) 480 64 system_call_exception+0x138/0x350 + 16) 416 416 system_call_common+0x160/0x2c4 + +This results in two additional stores in the ftrace entry code, but +produces reliable backtraces. + +Fixes: 153086644fd1 ("powerpc/ftrace: Add support for -mprofile-kernel ftrace ABI") +Cc: stable@vger.kernel.org +Signed-off-by: Naveen N Rao +Signed-off-by: Michael Ellerman +Link: https://msgid.link/20230621051349.759567-1-naveen@kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + arch/powerpc/kernel/trace/ftrace_64_mprofile.S | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +--- a/arch/powerpc/kernel/trace/ftrace_64_mprofile.S ++++ b/arch/powerpc/kernel/trace/ftrace_64_mprofile.S +@@ -36,6 +36,9 @@ _GLOBAL(ftrace_regs_caller) + /* Save the original return address in A's stack frame */ + std r0,LRSAVE(r1) + ++ /* Create a minimal stack frame for representing B */ ++ stdu r1, -STACK_FRAME_MIN_SIZE(r1) ++ + /* Create our stack frame + pt_regs */ + stdu r1,-SWITCH_FRAME_SIZE(r1) + +@@ -65,6 +68,8 @@ _GLOBAL(ftrace_regs_caller) + mflr r7 + /* Save it as pt_regs->nip */ + std r7, _NIP(r1) ++ /* Also save it in B's stackframe header for proper unwind */ ++ std r7, LRSAVE+SWITCH_FRAME_SIZE(r1) + /* Save the read LR in pt_regs->link */ + std r0, _LINK(r1) + +@@ -121,7 +126,7 @@ ftrace_regs_call: + ld r2, 24(r1) + + /* Pop our stack frame */ +- addi r1, r1, SWITCH_FRAME_SIZE ++ addi r1, r1, SWITCH_FRAME_SIZE+STACK_FRAME_MIN_SIZE + + #ifdef CONFIG_LIVEPATCH + /* Based on the cmpd above, if the NIP was altered handle livepatch */ +@@ -153,6 +158,9 @@ _GLOBAL(ftrace_caller) + /* Save the original return address in A's stack frame */ + std r0, LRSAVE(r1) + ++ /* Create a minimal stack frame for representing B */ ++ stdu r1, -STACK_FRAME_MIN_SIZE(r1) ++ + /* Create our stack frame + pt_regs */ + stdu r1, -SWITCH_FRAME_SIZE(r1) + +@@ -166,6 +174,7 @@ _GLOBAL(ftrace_caller) + /* Get the _mcount() call site out of LR */ + mflr r7 + std r7, _NIP(r1) ++ std r7, LRSAVE+SWITCH_FRAME_SIZE(r1) + + /* Save callee's TOC in the ABI compliant location */ + std r2, 24(r1) +@@ -200,7 +209,7 @@ ftrace_call: + ld r2, 24(r1) + + /* Pop our stack frame */ +- addi r1, r1, SWITCH_FRAME_SIZE ++ addi r1, r1, SWITCH_FRAME_SIZE+STACK_FRAME_MIN_SIZE + + /* Reload original LR */ + ld r0, LRSAVE(r1) diff --git a/queue-5.4/powerpc-ftrace-fix-stack-teardown-in-ftrace_no_trace.patch b/queue-5.4/powerpc-ftrace-fix-stack-teardown-in-ftrace_no_trace.patch new file mode 100644 index 00000000000..0b6b8d01a6f --- /dev/null +++ b/queue-5.4/powerpc-ftrace-fix-stack-teardown-in-ftrace_no_trace.patch @@ -0,0 +1,50 @@ +From stable+bounces-6808-greg=kroah.com@vger.kernel.org Fri Dec 15 12:18:31 2023 +From: Naveen N Rao +Date: Fri, 15 Dec 2023 16:44:33 +0530 +Subject: powerpc/ftrace: Fix stack teardown in ftrace_no_trace +To: +Cc: Greg KH , Michael Ellerman +Message-ID: <20231215111433.2362641-2-naveen@kernel.org> + +From: Naveen N Rao + +commit 4b3338aaa74d7d4ec5b6734dc298f0db94ec83d2 upstream. + +Commit 41a506ef71eb ("powerpc/ftrace: Create a dummy stackframe to fix +stack unwind") added use of a new stack frame on ftrace entry to fix +stack unwind. However, the commit missed updating the offset used while +tearing down the ftrace stack when ftrace is disabled. Fix the same. + +In addition, the commit missed saving the correct stack pointer in +pt_regs. Update the same. + +Fixes: 41a506ef71eb ("powerpc/ftrace: Create a dummy stackframe to fix stack unwind") +Cc: stable@vger.kernel.org # v6.5+ +Signed-off-by: Naveen N Rao +Signed-off-by: Michael Ellerman +Link: https://msgid.link/20231130065947.2188860-1-naveen@kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + arch/powerpc/kernel/trace/ftrace_64_mprofile.S | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/arch/powerpc/kernel/trace/ftrace_64_mprofile.S ++++ b/arch/powerpc/kernel/trace/ftrace_64_mprofile.S +@@ -55,7 +55,7 @@ _GLOBAL(ftrace_regs_caller) + SAVE_10GPRS(22, r1) + + /* Save previous stack pointer (r1) */ +- addi r8, r1, SWITCH_FRAME_SIZE ++ addi r8, r1, SWITCH_FRAME_SIZE+STACK_FRAME_MIN_SIZE + std r8, GPR1(r1) + + /* Load special regs for save below */ +@@ -150,7 +150,7 @@ ftrace_no_trace: + mflr r3 + mtctr r3 + REST_GPR(3, r1) +- addi r1, r1, SWITCH_FRAME_SIZE ++ addi r1, r1, SWITCH_FRAME_SIZE+STACK_FRAME_MIN_SIZE + mtlr r0 + bctr + diff --git a/queue-5.4/series b/queue-5.4/series index 1a03bdab942..d5f39b8a12a 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -35,3 +35,6 @@ ext4-prevent-the-normalized-size-from-exceeding-ext_max_blocks.patch arm64-mm-always-make-sw-dirty-ptes-hw-dirty-in-pte_modify.patch team-fix-use-after-free-when-an-option-instance-allocation-fails.patch ring-buffer-fix-memory-leak-of-free-page.patch +mmc-block-be-sure-to-wait-while-busy-in-cqe-error-recovery.patch +powerpc-ftrace-create-a-dummy-stackframe-to-fix-stack-unwind.patch +powerpc-ftrace-fix-stack-teardown-in-ftrace_no_trace.patch