Make it possible to get the per-task stack usage through /proc on a NOMMU
system.  The MMU-mode routine can't be used because walk_page_range() doesn't
work on NOMMU.

It can be tested to show the stack usages of non-kernel-thread processes:

        # grep "Stack usage:" /proc/*/status | grep -v "0 kB"
        /proc/1/status:Stack usage:     2 kB
        /proc/57/status:Stack usage:    3 kB
        /proc/58/status:Stack usage:    1 kB
        /proc/59/status:Stack usage:    3 kB
        /proc/60/status:Stack usage:    5 kB
        /proc/self/status:Stack usage:  1 kB

I've only tested it with ELF-FDPIC, though it should work with FLAT too.

Signed-off-by: David Howells <dhowe...@redhat.com>
Signed-off-by: Mike Frysinger <vap...@gentoo.org>
Cc: Stefani Seibold <stef...@seibold.net>
Cc: Paul Mundt <let...@linux-sh.org>
Cc: Robin Getz <rg...@blackfin.uclinux.org>
---

 fs/proc/array.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)


diff --git a/fs/proc/array.c b/fs/proc/array.c
index 4badde1..c67251e 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -387,8 +387,7 @@ static inline unsigned long get_stack_usage_in_bytes(struct 
vm_area_struct *vma,
        return ss.usage;
 }
 
-static inline void task_show_stack_usage(struct seq_file *m,
-                                               struct task_struct *task)
+static void task_show_stack_usage(struct seq_file *m, struct task_struct *task)
 {
        struct vm_area_struct   *vma;
        struct mm_struct        *mm = get_task_mm(task);
@@ -404,9 +403,24 @@ static inline void task_show_stack_usage(struct seq_file 
*m,
                mmput(mm);
        }
 }
-#else
+#else /* CONFIG_MMU */
+/*
+ * Calculate the size of a NOMMU process's stack
+ */
 static void task_show_stack_usage(struct seq_file *m, struct task_struct *task)
 {
+       unsigned long sp, base, usage;
+
+       base = task->stack_start;
+       sp = KSTK_ESP(task);
+
+#ifdef CONFIG_STACK_GROWSUP
+       usage = sp - base;
+#else
+       usage = base - sp;
+#endif
+
+       seq_printf(m, "Stack usage:\t%lu kB\n", (usage + 1023) >> 10);
 }
 #endif         /* CONFIG_MMU */
 

_______________________________________________
uClinux-dev mailing list
uClinux-dev@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-dev@uclinux.org
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

Reply via email to