* [PATCH] update v2 fix X86_64 procfs provide stack information for threads
@ 2009-11-03 9:22 Stefani Seibold
2009-11-04 15:27 ` [tip:x86/urgent] x86, fs: Fix x86 procfs stack information for threads on 64-bit tip-bot for Stefani Seibold
0 siblings, 1 reply; 2+ messages in thread
From: Stefani Seibold @ 2009-11-03 9:22 UTC (permalink / raw)
To: linux-kernel, Andrew Morton, Americo Wang, Alexey Dobriyan,
H. Peter Anvin, ThomasGleixner, Ingo Molnar
This patch fix two issues in the procfs stack information on X86_64
linux.
The 32 bit loader compat_do_execve did not store stack start (this was
figured out by alexey).
The stack information on a X64_64 kernel always show 0 kbyte stack
usage, because of a miss implemented KSTK_ESP macro which always return
-1. The new implementation returns now the right value.
The patch is against 2.6.32-rc5-git5.
Please apply this patch!
Greetings,
Stefani
Signed-off-by: Stefani Seibold <stefani@seibold.net>
---
arch/x86/include/asm/processor.h | 2 +-
arch/x86/kernel/process_64.c | 6 ++++++
fs/compat.c | 2 ++
3 files changed, 9 insertions(+), 1 deletion(-)
--- x/linux-2.6.32-rc5/fs/compat.c 2009-10-16 02:41:50.000000000 +0200
+++ linux-2.6.32-rc5/fs/compat.c 2009-11-03 08:38:48.975196941 +0100
@@ -1532,6 +1532,8 @@
if (retval < 0)
goto out;
+ current->stack_start = current->mm->start_stack;
+
/* execve succeeded */
current->fs->in_exec = 0;
current->in_execve = 0;
--- x/linux-2.6.32-rc5/arch/x86/include/asm/processor.h 2009-10-16 02:41:50.000000000 +0200
+++ linux-2.6.32-rc5/arch/x86/include/asm/processor.h 2009-11-03 10:15:12.094769885 +0100
@@ -1000,7 +1000,7 @@
#define thread_saved_pc(t) (*(unsigned long *)((t)->thread.sp - 8))
#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.sp0 - 1)
-#define KSTK_ESP(tsk) -1 /* sorry. doesn't work for syscall. */
+extern unsigned long KSTK_ESP(struct task_struct *task);
#endif /* CONFIG_X86_64 */
extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
--- x/linux-2.6.32-rc5/arch/x86/kernel/process_64.c 2009-10-16 02:41:50.000000000 +0200
+++ linux-2.6.32-rc5/arch/x86/kernel/process_64.c 2009-11-03 10:11:11.202957393 +0100
@@ -664,3 +664,9 @@
return do_arch_prctl(current, code, addr);
}
+unsigned long KSTK_ESP(struct task_struct *task)
+{
+ return (test_tsk_thread_flag(task, TIF_IA32)) ? \
+ (task_pt_regs(task)->sp) : \
+ ((task)->thread.usersp);
+}
^ permalink raw reply [flat|nested] 2+ messages in thread* [tip:x86/urgent] x86, fs: Fix x86 procfs stack information for threads on 64-bit
2009-11-03 9:22 [PATCH] update v2 fix X86_64 procfs provide stack information for threads Stefani Seibold
@ 2009-11-04 15:27 ` tip-bot for Stefani Seibold
0 siblings, 0 replies; 2+ messages in thread
From: tip-bot for Stefani Seibold @ 2009-11-04 15:27 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, stefani, viro, xiyou.wangcong, akpm,
tglx, mingo, adobriyan
Commit-ID: 89240ba059ca468ae7a8346edf7f95082458c2fc
Gitweb: http://git.kernel.org/tip/89240ba059ca468ae7a8346edf7f95082458c2fc
Author: Stefani Seibold <stefani@seibold.net>
AuthorDate: Tue, 3 Nov 2009 10:22:40 +0100
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Wed, 4 Nov 2009 13:25:03 +0100
x86, fs: Fix x86 procfs stack information for threads on 64-bit
This patch fixes two issues in the procfs stack information on
x86-64 linux.
The 32 bit loader compat_do_execve did not store stack
start. (this was figured out by Alexey Dobriyan).
The stack information on a x64_64 kernel always shows 0 kbyte
stack usage, because of a missing implementation of the KSTK_ESP
macro which always returned -1.
The new implementation now returns the right value.
Signed-off-by: Stefani Seibold <stefani@seibold.net>
Cc: Americo Wang <xiyou.wangcong@gmail.com>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
LKML-Reference: <1257240160.4889.24.camel@wall-e>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
arch/x86/include/asm/processor.h | 2 +-
arch/x86/kernel/process_64.c | 5 +++++
fs/compat.c | 2 ++
3 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index c3429e8..c978648 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -1000,7 +1000,7 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
#define thread_saved_pc(t) (*(unsigned long *)((t)->thread.sp - 8))
#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.sp0 - 1)
-#define KSTK_ESP(tsk) -1 /* sorry. doesn't work for syscall. */
+extern unsigned long KSTK_ESP(struct task_struct *task);
#endif /* CONFIG_X86_64 */
extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index ad535b6..eb62cbc 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -664,3 +664,8 @@ long sys_arch_prctl(int code, unsigned long addr)
return do_arch_prctl(current, code, addr);
}
+unsigned long KSTK_ESP(struct task_struct *task)
+{
+ return (test_tsk_thread_flag(task, TIF_IA32)) ?
+ (task_pt_regs(task)->sp) : ((task)->thread.usersp);
+}
diff --git a/fs/compat.c b/fs/compat.c
index d576b55..6c19040 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -1532,6 +1532,8 @@ int compat_do_execve(char * filename,
if (retval < 0)
goto out;
+ current->stack_start = current->mm->start_stack;
+
/* execve succeeded */
current->fs->in_exec = 0;
current->in_execve = 0;
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-11-04 15:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-03 9:22 [PATCH] update v2 fix X86_64 procfs provide stack information for threads Stefani Seibold
2009-11-04 15:27 ` [tip:x86/urgent] x86, fs: Fix x86 procfs stack information for threads on 64-bit tip-bot for Stefani Seibold
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.