parisc,metag: Implement CONFIG_DEBUG_STACK_USAGE option
Subsystems (2)
PATCH 1/1 parisc,metag: Implement CONFIG_DEBUG_STACK_USAGE option
On parisc and metag the stack grows upwards, so for those we need to scan the stack downwards in order to calculate how much stack a process has used.
Tested on a 64bit parisc kernel.
Signed-off-by Helge Deller <[email protected]>
include/linux/sched.h +8 -0
@@ -2859,10 +2859,18 @@ static inline unsigned long stack_not_used(struct task_struct *p)unsigned long *n =end_of_stack (p);do {/* Skip over canary */ +# ifdef CONFIG_STACK_GROWSUP + n--; +# else n++; +# endif }while (!*n); +# ifdef CONFIG_STACK_GROWSUP +return (unsigned long )end_of_stack (p) - (unsigned long )n; +# else return (unsigned long )n - (unsigned long )end_of_stack (p); +# endif }#endif extern void set_task_stack_end_magic (struct task_struct *tsk);
lib/Kconfig.debug +1 -1
@@ -546,7 +546,7 @@ config DEBUG_KMEMLEAK_DEFAULT_OFF config DEBUG_STACK_USAGE bool "Stack utilization instrumentation" - depends on DEBUG_KERNEL && !IA64 && !PARISC && !METAG + depends on DEBUG_KERNEL && !IA64 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.
Hi Helge,
Quoted 7 lines · Helge Deller
On parisc and metag the stack grows upwards, so for those we need to scan the stack downwards in order to calculate how much stack a process has used.
Tested on a 64bit parisc kernel.
Signed-off-by Helge Deller <[email protected]>
Looks good, and works on metag too!
Tested-by James Hogan <[email protected]>
Acked-by James Hogan <[email protected]>
Cheers
James
Quoted 37 lines
include/linux/sched.h +8
-0@@ -2859,10 +2859,18 @@ static inline unsigned long stack_not_used(struct task_struct *p)unsigned long *n =end_of_stack (p);do {/* Skip over canary */ +# ifdef CONFIG_STACK_GROWSUP + n--; +# else n++; +# endif }while (!*n); +# ifdef CONFIG_STACK_GROWSUP +return (unsigned long )end_of_stack (p) - (unsigned long )n; +# else return (unsigned long )n - (unsigned long )end_of_stack (p); +# endif }#endif extern void set_task_stack_end_magic (struct task_struct *tsk);lib/Kconfig.debug +1
-1@@ -546,7 +546,7 @@ config DEBUG_KMEMLEAK_DEFAULT_OFF config DEBUG_STACK_USAGE bool "Stack utilization instrumentation" - depends on DEBUG_KERNEL && !IA64 && !PARISC && !METAG + depends on DEBUG_KERNEL && !IA64 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.