mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jens Remus <jremus@linux.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>,
	jpoimboe@kernel.org, rostedt@kernel.org,
	Indu Bhagat <indu.bhagat@oracle.com>
Cc: linux-kernel@vger.kernel.org, Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>
Subject: Re: [PATCH 11/12] unwind: Implement compat fp unwind
Date: Mon, 20 Oct 2025 11:16:45 +0200	[thread overview]
Message-ID: <cc6f34bb-7d05-4260-bc02-299fef2bcb01@linux.ibm.com> (raw)
In-Reply-To: <bd9bac99-208c-426d-b828-e23188d93226@linux.ibm.com>

Hello Peter!

On 10/17/2025 5:47 PM, Jens Remus wrote:
> while rebasing the unwind user sframe series on top of this series and
> https://lore.kernel.org/linux-trace-kernel/20251007214008.080852573@kernel.org/
> I ran into the following issue:
> 
> On 9/24/2025 9:59 AM, Peter Zijlstra wrote:
> 
>> --- a/include/linux/unwind_user_types.h
>> +++ b/include/linux/unwind_user_types.h
>> @@ -36,6 +36,7 @@ struct unwind_user_state {
>>  	unsigned long				ip;
>>  	unsigned long				sp;
>>  	unsigned long				fp;
>> +	unsigned int				ws;
> 
> Factoring out the word size (ws) from the CFA, FP, and RA offsets is
> clever.  Wondering though whether that would be an issue for unwind user
> sframe.  Do all architectures guarantee that those offsets are aligned
> to the native word size?
> 
>>  	enum unwind_user_type			current_type;
>>  	unsigned int				available_types;
>>  	bool					done;
> 
>> --- a/kernel/unwind/user.c
>> +++ b/kernel/unwind/user.c
> 
>> @@ -29,21 +44,21 @@ static int unwind_user_next_fp(struct un
>>  	}
>>  
>>  	/* Get the Canonical Frame Address (CFA) */
>> -	cfa += frame->cfa_off;
>> +	cfa += state->ws * frame->cfa_off;
> 
> In SFrame the CFA, FP, and RA offsets are unscaled.  Would it be ok, if
> unwind user sframe would factor state->ws from those offset values?  What
> if they were not aligned?  unwind user sframe would then have to fail.

Sorry that I did not immediately think about the most obvious solution
tho above issues:  to not factor out the word size from the frame CFA,
FP, and RA offsets.  What do you think about making the following
changes to this and giyour subsequent patch?  That would work nicely
with unwind user sframe.


diff --git a/kernel/unwind/user.c b/kernel/unwind/user.c
--- a/kernel/unwind/user.c
+++ b/kernel/unwind/user.c
@@ -8,19 +8,15 @@
 #include <linux/unwind_user.h>
 #include <linux/uaccess.h>
 
-static const struct unwind_user_frame fp_frame = {
-	ARCH_INIT_USER_FP_FRAME
-};
-
 #define for_each_user_frame(state) \
 	for (unwind_user_start(state); !(state)->done; unwind_user_next(state))
 
 static inline int
-get_user_word(unsigned long *word, unsigned long base, int off, int size)
+get_user_word(unsigned long *word, unsigned long base, int off, unsigned int ws)
 {
-	unsigned long __user *addr = (void __user *)base + (off * size);
+	unsigned long __user *addr = (void __user *)base + off;
 #ifdef CONFIG_COMPAT
-	if (size == sizeof(int)) {
+	if (ws == sizeof(int)) {
 		unsigned int data;
 		int ret = get_user(data, (unsigned int __user *)addr);
 		*word = data;
@@ -32,6 +28,9 @@ get_user_word(unsigned long *word, unsigned long base, int off, int size)
 
 static int unwind_user_next_fp(struct unwind_user_state *state)
 {
+	const struct unwind_user_frame fp_frame = {
+		ARCH_INIT_USER_FP_FRAME(state->ws)
+	};
 	const struct unwind_user_frame *frame = &fp_frame;
 	unsigned long cfa, fp, ra;
 
@@ -44,7 +43,7 @@ static int unwind_user_next_fp(struct unwind_user_state *state)
 	}
 
 	/* Get the Canonical Frame Address (CFA) */
-	cfa += state->ws * frame->cfa_off;
+	cfa += frame->cfa_off;
 
 	/* stack going in wrong direction? */
 	if (cfa <= state->sp)


diff --git a/arch/x86/include/asm/unwind_user.h b/arch/x86/include/asm/unwind_user.h
--- a/arch/x86/include/asm/unwind_user.h
+++ b/arch/x86/include/asm/unwind_user.h
@@ -2,10 +2,10 @@
 #ifndef _ASM_X86_UNWIND_USER_H
 #define _ASM_X86_UNWIND_USER_H
 
-#define ARCH_INIT_USER_FP_FRAME				\
-	.cfa_off	=  2,				\
-	.ra_off		= -1,				\
-	.fp_off		= -2,				\
+#define ARCH_INIT_USER_FP_FRAME(ws)			\
+	.cfa_off	=  2*(ws),			\
+	.ra_off		= -1*(ws),			\
+	.fp_off		= -2*(ws),			\
 	.use_fp		= true,
 
 #endif /* _ASM_X86_UNWIND_USER_H */


Thanks and regards,
Jens
-- 
Jens Remus
Linux on Z Development (D3303)
+49-7031-16-1128 Office
jremus@de.ibm.com

IBM

IBM Deutschland Research & Development GmbH; Vorsitzender des Aufsichtsrats: Wolfgang Wendt; Geschäftsführung: David Faller; Sitz der Gesellschaft: Böblingen; Registergericht: Amtsgericht Stuttgart, HRB 243294
IBM Data Privacy Statement: https://www.ibm.com/privacy/


  reply	other threads:[~2025-10-20  9:17 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-24  7:59 [PATCH 00/12] Various fixes and x86 support Peter Zijlstra
2025-09-24  7:59 ` [PATCH 01/12] task_work: Fix NMI race condition Peter Zijlstra
2025-10-01 15:31   ` Steven Rostedt
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  7:59 ` [PATCH 02/12] unwind: Shorten lines Peter Zijlstra
2025-10-01 15:32   ` Steven Rostedt
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  7:59 ` [PATCH 03/12] unwind: Add required include files Peter Zijlstra
2025-10-01 15:32   ` Steven Rostedt
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  7:59 ` [PATCH 04/12] unwind: Simplify unwind_reset_info() Peter Zijlstra
2025-10-01 15:33   ` Steven Rostedt
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  7:59 ` [PATCH 05/12] unwind: Add comment to unwind_deferred_task_exit() Peter Zijlstra
2025-10-01 15:35   ` Steven Rostedt
2025-10-20 10:16     ` Peter Zijlstra
2025-10-22 15:16       ` Steven Rostedt
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  7:59 ` [PATCH 06/12] unwind: Fix unwind_deferred_request() vs NMI Peter Zijlstra
2025-10-01 15:37   ` Steven Rostedt
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  7:59 ` [PATCH 07/12] unwind: Clarify calling context Peter Zijlstra
2025-10-01 15:38   ` Steven Rostedt
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  7:59 ` [PATCH 08/12] unwind: Simplify unwind_user_faultable() Peter Zijlstra
2025-10-01 15:40   ` Steven Rostedt
2025-10-20 10:17     ` Peter Zijlstra
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  7:59 ` [PATCH 09/12] unwind: Make unwind_task_info::unwind_mask consistent Peter Zijlstra
2025-10-01 15:47   ` Steven Rostedt
2025-10-20 10:20     ` Peter Zijlstra
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  7:59 ` [PATCH 10/12] unwind: Simplify unwind_user_next_fp() alignment check Peter Zijlstra
2025-10-01 15:55   ` Steven Rostedt
2025-10-20 10:28     ` Peter Zijlstra
2025-10-22 15:20       ` Steven Rostedt
2025-10-23  9:53         ` Peter Zijlstra
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  7:59 ` [PATCH 11/12] unwind: Implement compat fp unwind Peter Zijlstra
2025-10-17 15:47   ` Jens Remus
2025-10-20  9:16     ` Jens Remus [this message]
2025-10-20 10:39       ` Peter Zijlstra
2025-10-20 10:48         ` Peter Zijlstra
2025-10-22 15:23           ` Steven Rostedt
2025-10-24 13:45             ` Peter Zijlstra
2025-10-22 14:55         ` Jens Remus
2025-10-24 13:40           ` Peter Zijlstra
2025-10-20 10:38     ` Peter Zijlstra
2025-10-22 18:31   ` Steven Rostedt
2025-10-24 14:10     ` Peter Zijlstra
2025-10-24 14:16       ` Peter Zijlstra
2025-10-29  9:36   ` [tip: perf/core] " tip-bot2 for Peter Zijlstra
2025-09-24  8:00 ` [PATCH 12/12] unwind_user/x86: Enable frame pointer unwinding on x86 Peter Zijlstra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cc6f34bb-7d05-4260-bc02-299fef2bcb01@linux.ibm.com \
    --to=jremus@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=indu.bhagat@oracle.com \
    --cc=jpoimboe@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®