[PATCH] x86_64: x86_64 stack usage debugging
Applies to git & 2.6.17-rc6 after CONFIG_DEBUG_STACKOVERFLOW patch uses same stack-zeroing mechanism as on i386 to discover maximum stack excursions. Signed-off-by: Eric Sandeen <sandeen@sgi.com> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
4961f10e22
commit
8501a2fbe7
2 changed files with 22 additions and 0 deletions
|
@ -42,6 +42,15 @@ config DEBUG_STACKOVERFLOW
|
||||||
This option will cause messages to be printed if free stack space
|
This option will cause messages to be printed if free stack space
|
||||||
drops below a certain limit.
|
drops below a certain limit.
|
||||||
|
|
||||||
|
config DEBUG_STACK_USAGE
|
||||||
|
bool "Stack utilization instrumentation"
|
||||||
|
depends on DEBUG_KERNEL
|
||||||
|
help
|
||||||
|
Enables the display of the minimum amount of free stack which each
|
||||||
|
task has ever had available in the sysrq-T and sysrq-P debug output.
|
||||||
|
|
||||||
|
This option will slow down process creation somewhat.
|
||||||
|
|
||||||
#config X86_REMOTE_DEBUG
|
#config X86_REMOTE_DEBUG
|
||||||
# bool "kgdb debugging stub"
|
# bool "kgdb debugging stub"
|
||||||
|
|
||||||
|
|
|
@ -73,8 +73,21 @@ static inline struct thread_info *stack_thread_info(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* thread information allocation */
|
/* thread information allocation */
|
||||||
|
#ifdef CONFIG_DEBUG_STACK_USAGE
|
||||||
|
#define alloc_thread_info(tsk) \
|
||||||
|
({ \
|
||||||
|
struct thread_info *ret; \
|
||||||
|
\
|
||||||
|
ret = ((struct thread_info *) __get_free_pages(GFP_KERNEL,THREAD_ORDER)); \
|
||||||
|
if (ret) \
|
||||||
|
memset(ret, 0, THREAD_SIZE); \
|
||||||
|
ret; \
|
||||||
|
})
|
||||||
|
#else
|
||||||
#define alloc_thread_info(tsk) \
|
#define alloc_thread_info(tsk) \
|
||||||
((struct thread_info *) __get_free_pages(GFP_KERNEL,THREAD_ORDER))
|
((struct thread_info *) __get_free_pages(GFP_KERNEL,THREAD_ORDER))
|
||||||
|
#endif
|
||||||
|
|
||||||
#define free_thread_info(ti) free_pages((unsigned long) (ti), THREAD_ORDER)
|
#define free_thread_info(ti) free_pages((unsigned long) (ti), THREAD_ORDER)
|
||||||
|
|
||||||
#else /* !__ASSEMBLY__ */
|
#else /* !__ASSEMBLY__ */
|
||||||
|
|
Loading…
Reference in a new issue