FAILED: patch "[PATCH] xtensa: fix MAKE_PC_FROM_RA second argument" failed to apply to 4.19-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-4.19.y
git checkout FETCH_HEAD
git cherry-pick -x 0e60f0b75884677fb9f4f2ad40d52b43451564d5
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024051320-justifier-trusting-bb69@gregkh' --subject-prefix 'PATCH 4.19.y' HEAD^..
Possible dependencies:
0e60f0b75884 ("xtensa: fix MAKE_PC_FROM_RA second argument") 1b6ceeb99ee0 ("xtensa: stacktrace: include <asm/ftrace.h> for prototype") 11e969bc964a ("xtensa: support coprocessors on SMP") e45d4bfbeb26 ("xtensa: merge SAVE_CP_REGS_TAB and LOAD_CP_REGS_TAB") 0b549f813387 ("xtensa: handle coprocessor exceptions in kernel mode") 6179ef4d460a ("xtensa: use callx0 opcode in fast_coprocessor") 3e554d47dfe3 ("xtensa: clean up declarations in coprocessor.h") fc55402b8438 ("xtensa: clean up exception handler prototypes") db0d07fa192a ("xtensa: clean up function declarations in traps.c") 839769c35477 ("xtensa: fix a7 clobbering in coprocessor context load/store") 967747bbc084 ("uaccess: remove CONFIG_SET_FS")12700c17fc28 ("uaccess: generalize access_ok()")52fe8d125c9a ("arm64: simplify access_ok()")26509034bef1 ("m68k: fix access_ok for coldfire")15f3d81a8c8a ("MIPS: use simpler access_ok()")34737e269803 ("uaccess: add generic __{get,put}_kernel_nofault") 1830a1d6a5b7 ("x86: use more conventional access_ok() definition") 36903abedfe8 ("x86: remove __range_not_ok()")8afafbc955ba ("sparc64: add __{get,put}_kernel_nofault()") 222ca305c9fd ("uaccess: fix integer overflow on access_ok()")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 0e60f0b75884677fb9f4f2ad40d52b43451564d5 Mon Sep 17 00:00:00 2001
From: Max Filippov <[email protected]>
Date: Sat, 17 Feb 2024 05:15:42 -0800
Subject: [PATCH] xtensa: fix MAKE_PC_FROM_RA second argument
Xtensa has two-argument MAKE_PC_FROM_RA macro to convert a0 to an actual return address because when windowed ABI is used call{,x}{4,8,12} opcodes stuff encoded window size into the top 2 bits of the register that becomes a return address in the called function. Second argument of that macro is supposed to be an address having these 2 topmost bits set correctly, but the comment suggested that that could be the stack address. However the stack doesn't have to be in the same 1GByte region as the code, especially in noMMU XIP configurations.
Fix the comment and use either _text or regs->pc as the second argument for the MAKE_PC_FROM_RA macro.
arch/xtensa/include/asm/processor.h +4 -4
@@ -115,9 +115,9 @@#define MAKE_RA_FOR_CALL (ra,ws) (((ra) & 0x3fffffff) | (ws) << 30)/* Convert return address to a valid pc -* Note: We assume that the stack pointer is in the same 1GB ranges as the ra +* Note: 'text' is the address within the same 1GB range as the ra */ -#define MAKE_PC_FROM_RA (ra,sp) (((ra) & 0x3fffffff) | ((sp) & 0xc0000000)) +#define MAKE_PC_FROM_RA (ra, text) (((ra) & 0x3fffffff) | ((unsigned long)(text) & 0xc0000000))#elif defined(__XTENSA_CALL0_ABI__)
@@ -127,9 +127,9 @@#define MAKE_RA_FOR_CALL (ra, ws) (ra)/* Convert return address to a valid pc -* Note: We assume that the stack pointer is in the same 1GB ranges as the ra +* Note: 'text' is not used as 'ra' is always the full address */ -#define MAKE_PC_FROM_RA (ra, sp) (ra) +#define MAKE_PC_FROM_RA (ra, text) (ra)#else #error Unsupported Xtensa ABI
arch/xtensa/include/asm/ptrace.h +1 -1
@@ -87,7 +87,7 @@ struct pt_regs {# define user_mode (regs) (((regs)->ps & 0x00000020)!=0)# define instruction_pointer (regs) ((regs)->pc)# define return_pointer (regs) (MAKE_PC_FROM_RA((regs)->areg[0], \ - (regs)->areg[1])) + (regs)->pc))# ifndef CONFIG_SMP # define profile_pc (regs) instruction_pointer(regs)
arch/xtensa/kernel/process.c +3 -2
@@ -47,6 +47,7 @@#include <asm/asm-offsets.h> #include <asm/regs.h> #include <asm/hw_breakpoint.h> +#include <asm/sections.h> #include <asm/traps.h> extern void ret_from_fork (void );
@@ -380,7 +381,7 @@ unsigned long __get_wchan(struct task_struct *p)int count =0 ; sp = p->thread.sp; - pc =MAKE_PC_FROM_RA (p->thread.ra, p->thread.sp); + pc =MAKE_PC_FROM_RA (p->thread.ra, _text); do { if (sp < stack_page + sizeof(struct task_struct) ||
@@ -392,7 +393,7 @@ unsigned long __get_wchan(struct task_struct *p)/* Stack layout: sp-4: ra, sp-3: sp' */ - pc =MAKE_PC_FROM_RA (SPILL_SLOT (sp,0 ), sp); + pc =MAKE_PC_FROM_RA (SPILL_SLOT (sp,0 ), _text); sp =SPILL_SLOT (sp,1 ); }while (count++ <16 );return 0 ;
arch/xtensa/kernel/stacktrace.c +2 -1
@@ -13,6 +13,7 @@#include <linux/stacktrace.h> #include <asm/ftrace.h> +#include <asm/sections.h> #include <asm/stacktrace.h> #include <asm/traps.h> #include <linux/uaccess.h>
@@ -189,7 +190,7 @@ void walk_stackframe(unsigned long *sp,if (a1 <= (unsigned long )sp)break ; - frame.pc =MAKE_PC_FROM_RA (a0, a1); + frame.pc =MAKE_PC_FROM_RA (a0, _text); frame.sp = a1;if (fn (&frame, data))