From: Masami Hiramatsu <mhiramat@redhat.com>
To: Robin Holt <holt@sgi.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
systemtap@sources.redhat.com,
Harvey Harrison <harvey.harrison@gmail.com>,
Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
Jan Blunck <jblunck@suse.de>,
Christoph Hellwig <hch@infradead.org>
Subject: Re: [PATCH -rc] [BUGFIX] x86: fix kernel_trap_sp()
Date: Tue, 12 May 2009 10:20:46 -0400 [thread overview]
Message-ID: <4A0985BE.7000403@redhat.com> (raw)
In-Reply-To: <20090512112300.GL7601@sgi.com>
Robin Holt wrote:
> On Mon, May 11, 2009 at 03:24:07PM -0700, Linus Torvalds wrote:
>>
>> On Mon, 11 May 2009, Masami Hiramatsu wrote:
>>> Use ®s->sp instead of regs for getting the top of stack in kernel mode.
>>> (on x86-64, regs->sp always points the top of stack)
>> Ack.
>>
>> That said, we have only _one_ use of this "kernel_trap_sp()" in the whole
>> kernel, and that use is actually fairly odd too, in that it does it
>> _before_ checking that it's in kernel mode.
>>
>> Admittedly it will then only _use_ the value after it has checked that
>> things are in kernel mode, but it all boils down to "ok, that's pretty
>> odd".
>>
>> So how about fixing that, and also fixing the naming of the function. Call
>> it "kernel_stack_pointer()" to match its more widely used sibling function
>> "user_stack_pointer()".
>>
>> IOW, something like this?
>>
>> Linus
>>
>> ---
>> arch/x86/include/asm/ptrace.h | 7 ++++---
>> arch/x86/oprofile/backtrace.c | 2 +-
>> 2 files changed, 5 insertions(+), 4 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h
>> index e304b66..624f133 100644
>> --- a/arch/x86/include/asm/ptrace.h
>> +++ b/arch/x86/include/asm/ptrace.h
>> @@ -187,14 +187,15 @@ static inline int v8086_mode(struct pt_regs *regs)
>>
>> /*
>> * X86_32 CPUs don't save ss and esp if the CPU is already in kernel mode
>> - * when it traps. So regs will be the current sp.
>> + * when it traps. The previous stack will be directly underneath the saved
>> + * registers, and 'sp/ss' won't even have been saved. Thus the '®s->sp'.
>> *
>> * This is valid only for kernel mode traps.
>> */
>> -static inline unsigned long kernel_trap_sp(struct pt_regs *regs)
>> +static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
>
> Why not have it return an unsigned long *?
>> {
>> #ifdef CONFIG_X86_32
>> - return (unsigned long)regs;
>> + return (unsigned long)(®s->sp);
>> #else
>> return regs->sp;
Perhaps, you might forget that this line needs a cast :-).
Anyway, IMHO, it does not come from coding, but meaning.
kernel/user_stack_pointer() just return
"the value of stack pointer register", not a "stack pointer".
Thank you,
>> #endif
>> diff --git a/arch/x86/oprofile/backtrace.c b/arch/x86/oprofile/backtrace.c
>> index 04df67f..044897b 100644
>> --- a/arch/x86/oprofile/backtrace.c
>> +++ b/arch/x86/oprofile/backtrace.c
>> @@ -76,9 +76,9 @@ void
>> x86_backtrace(struct pt_regs * const regs, unsigned int depth)
>> {
>> struct frame_head *head = (struct frame_head *)frame_pointer(regs);
>> - unsigned long stack = kernel_trap_sp(regs);
>>
>> if (!user_mode_vm(regs)) {
>> + unsigned long stack = kernel_stack_pointer(regs);
>
> Make this an unsigned long *?
>
>> if (depth)
>> dump_trace(NULL, regs, (unsigned long *)stack, 0,
>
> Then get rid of the cast?
>
> Robin
--
Masami Hiramatsu
Software Engineer
Hitachi Computer Products (America) Inc.
Software Solutions Division
e-mail: mhiramat@redhat.com
next prev parent reply other threads:[~2009-05-12 14:20 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-11 21:03 [PATCH -rc] [BUGFIX] x86: fix kernel_trap_sp() Masami Hiramatsu
2009-05-11 21:51 ` [tip:x86/urgent] x86, 32-bit: " tip-bot for Masami Hiramatsu
2009-05-11 22:24 ` [PATCH -rc] [BUGFIX] x86: " Linus Torvalds
2009-05-11 22:40 ` Ingo Molnar
2009-05-11 22:52 ` Linus Torvalds
2009-05-12 11:23 ` Robin Holt
2009-05-12 14:20 ` Masami Hiramatsu [this message]
2009-05-12 14:36 ` Linus Torvalds
2009-05-11 22:39 ` [tip:x86/urgent] x86, 32-bit: " tip-bot for Masami Hiramatsu
2009-05-11 22:42 ` tip-bot for Masami Hiramatsu
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=4A0985BE.7000403@redhat.com \
--to=mhiramat@redhat.com \
--cc=harvey.harrison@gmail.com \
--cc=hch@infradead.org \
--cc=holt@sgi.com \
--cc=jblunck@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=systemtap@sources.redhat.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.