diff options
| -rw-r--r-- | arch/x86_64/Kconfig.debug | 9 | ||||
| -rw-r--r-- | include/asm-x86_64/thread_info.h | 13 |
2 files changed, 22 insertions, 0 deletions
diff --git a/arch/x86_64/Kconfig.debug b/arch/x86_64/Kconfig.debug index 087a04868b25..1d92ab56c0f9 100644 --- a/arch/x86_64/Kconfig.debug +++ b/arch/x86_64/Kconfig.debug | |||
| @@ -42,6 +42,15 @@ config DEBUG_STACKOVERFLOW | |||
| 42 | This option will cause messages to be printed if free stack space | 42 | This option will cause messages to be printed if free stack space |
| 43 | drops below a certain limit. | 43 | drops below a certain limit. |
| 44 | 44 | ||
| 45 | config DEBUG_STACK_USAGE | ||
| 46 | bool "Stack utilization instrumentation" | ||
| 47 | depends on DEBUG_KERNEL | ||
| 48 | help | ||
| 49 | Enables the display of the minimum amount of free stack which each | ||
| 50 | task has ever had available in the sysrq-T and sysrq-P debug output. | ||
| 51 | |||
| 52 | This option will slow down process creation somewhat. | ||
| 53 | |||
| 45 | #config X86_REMOTE_DEBUG | 54 | #config X86_REMOTE_DEBUG |
| 46 | # bool "kgdb debugging stub" | 55 | # bool "kgdb debugging stub" |
| 47 | 56 | ||
diff --git a/include/asm-x86_64/thread_info.h b/include/asm-x86_64/thread_info.h index b5e88216fd80..2029b00351f3 100644 --- a/include/asm-x86_64/thread_info.h +++ b/include/asm-x86_64/thread_info.h | |||
| @@ -73,8 +73,21 @@ static inline struct thread_info *stack_thread_info(void) | |||
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | /* thread information allocation */ | 75 | /* thread information allocation */ |
| 76 | #ifdef CONFIG_DEBUG_STACK_USAGE | ||
| 77 | #define alloc_thread_info(tsk) \ | ||
| 78 | ({ \ | ||
| 79 | struct thread_info *ret; \ | ||
| 80 | \ | ||
| 81 | ret = ((struct thread_info *) __get_free_pages(GFP_KERNEL,THREAD_ORDER)); \ | ||
| 82 | if (ret) \ | ||
| 83 | memset(ret, 0, THREAD_SIZE); \ | ||
| 84 | ret; \ | ||
| 85 | }) | ||
| 86 | #else | ||
| 76 | #define alloc_thread_info(tsk) \ | 87 | #define alloc_thread_info(tsk) \ |
| 77 | ((struct thread_info *) __get_free_pages(GFP_KERNEL,THREAD_ORDER)) | 88 | ((struct thread_info *) __get_free_pages(GFP_KERNEL,THREAD_ORDER)) |
| 89 | #endif | ||
| 90 | |||
| 78 | #define free_thread_info(ti) free_pages((unsigned long) (ti), THREAD_ORDER) | 91 | #define free_thread_info(ti) free_pages((unsigned long) (ti), THREAD_ORDER) |
| 79 | 92 | ||
| 80 | #else /* !__ASSEMBLY__ */ | 93 | #else /* !__ASSEMBLY__ */ |
