I was missing part of the patch. Here's an updated one that requires no change to mmu.h.
---- Simple stack used checker for the m68knommu architecture. It implements a per-PID proc file system entry. The kernel already memsets the bss, brk, and stack regions to zero. The checker looks for the first non-zero value starting at the end(low part) of the stack. The values returned are the total stack size and used stack size. ---- diff --git a/fs/proc/base.c b/fs/proc/base.c index 8418fcc..e72ece4 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -360,6 +360,30 @@ static int proc_pid_stack(struct seq_file *m, struct pid_namespace *ns, } #endif +#if !defined(CONFIG_MMU) && defined(CONFIG_M68K) +static int proc_pid_stack_usage(struct seq_file *m, struct pid_namespace *ns, + struct pid *pid, struct task_struct *task) +{ + struct mm_struct *mm = get_task_mm(task); + + unsigned long stack_length = mm->start_stack - mm->context.end_brk; + unsigned char *stack_first_data = + (unsigned char *)mm->context.end_brk; + unsigned long stack_used; + + while ((stack_first_data < (unsigned char *)mm->start_stack) + && (*stack_first_data == 0)) + stack_first_data++; + + stack_used = mm->start_stack - (unsigned long)stack_first_data; + + /* est stack size, zero zone */ + seq_printf(m, "%lu %lu\n", stack_length, (unsigned long)stack_used); + + return 0; +} +#endif + #ifdef CONFIG_SCHEDSTATS /* * Provides /proc/PID/schedstat @@ -2615,6 +2639,9 @@ static const struct pid_entry tgid_base_stuff[] = { #ifdef CONFIG_STACKTRACE ONE("stack", S_IRUSR, proc_pid_stack), #endif +#if !defined(CONFIG_MMU) && defined(CONFIG_M68K) + ONE("stackuse", S_IRUGO, proc_pid_stack_usage), +#endif #ifdef CONFIG_SCHEDSTATS INF("schedstat", S_IRUGO, proc_pid_schedstat), #endif @@ -2949,6 +2976,9 @@ static const struct pid_entry tid_base_stuff[] = { #ifdef CONFIG_STACKTRACE ONE("stack", S_IRUSR, proc_pid_stack), #endif +#if !defined(CONFIG_MMU) && defined(CONFIG_M68K) + ONE("stackuse", S_IRUGO, proc_pid_stack_usage), +#endif #ifdef CONFIG_SCHEDSTATS INF("schedstat", S_IRUGO, proc_pid_schedstat), #endif -----Original Message----- From: Greg Ungerer [mailto:g...@snapgear.com] Sent: Tuesday, October 26, 2010 2:37 AM To: uClinux development list Cc: Jate Sujjavanich Subject: Re: [uClinux-dev] [RFC][PATCH] m68knommu stack checker Hi Jate, On 26/10/10 07:27, Jate Sujjavanich wrote: > For us people still running m68knommu: > > I implemented this in arch/m68k*. I patched fs/proc/base.c, and I'm not sure > entirely sure if it's the proper place. > > I believe a stack checker for threads would need to be implemented inside of > libpthreads. > > ---- > Simple stack checker for the m68knommu architecture. It implements a per-PID > proc file system entry. > > The kernel already memsets the bss, brk, and stack regions to zero. The > checker calculates the used stack space by searching for the first non-zero > value. The values returned are the total stack size and used size. > > /root # cat /proc/144/stackuse > 4082 2089 > > Signed-off-by<Jate Sujjavanich jsujjavan...@syntech-fuelmaster.com> > ---- > > diff --git a/arch/m68k/include/asm/mmu.h b/arch/m68k/include/asm/mmu.h > index 8a11a63..cbb0db7 100644 > --- a/arch/m68k/include/asm/mmu.h > +++ b/arch/m68k/include/asm/mmu.h > @@ -7,6 +7,7 @@ typedef unsigned long mm_context_t; > #else > typedef struct { > unsigned long end_brk; > + unsigned long end_stack; This added field never seems to be initialized or set to any value in the following parts of the patch? Even though its value is used... Regards Greg > } mm_context_t; > #endif > > diff --git a/fs/proc/base.c b/fs/proc/base.c > index 8418fcc..f33557a 100644 > --- a/fs/proc/base.c > +++ b/fs/proc/base.c > @@ -360,6 +360,30 @@ static int proc_pid_stack(struct seq_file *m, struct > pid_namespace *ns, > } > #endif > > +#if !defined(CONFIG_MMU)&& defined(CONFIG_M68K) > +static int proc_pid_stack_usage(struct seq_file *m, struct pid_namespace *ns, > + struct pid *pid, struct task_struct *task) > +{ > + struct mm_struct *mm = get_task_mm(task); > + > + unsigned long stack_length = mm->start_stack - mm->context.end_stack; > + unsigned char *stack_first_data = > + (unsigned char *)mm->context.end_stack; > + unsigned long stack_used; > + > + while ((stack_first_data< (unsigned char *)mm->start_stack) > + && (*stack_first_data == 0)) > + stack_first_data++; > + > + stack_used = mm->start_stack - (unsigned long)stack_first_data; > + > + /* est stack size, zero zone */ > + seq_printf(m, "%lu %lu\n", stack_length, (unsigned long)stack_used); > + > + return 0; > +} > +#endif > + > #ifdef CONFIG_SCHEDSTATS > /* > * Provides /proc/PID/schedstat > @@ -2615,6 +2639,9 @@ static const struct pid_entry tgid_base_stuff[] = { > #ifdef CONFIG_STACKTRACE > ONE("stack", S_IRUSR, proc_pid_stack), > #endif > +#if !defined(CONFIG_MMU)&& defined(CONFIG_M68K) > + ONE("stackuse", S_IRUGO, proc_pid_stack_usage), > +#endif > #ifdef CONFIG_SCHEDSTATS > INF("schedstat", S_IRUGO, proc_pid_schedstat), > #endif > @@ -2949,6 +2976,9 @@ static const struct pid_entry tid_base_stuff[] = { > #ifdef CONFIG_STACKTRACE > ONE("stack", S_IRUSR, proc_pid_stack), > #endif > +#if !defined(CONFIG_MMU)&& defined(CONFIG_M68K) > + ONE("stackuse", S_IRUGO, proc_pid_stack_usage), > +#endif > #ifdef CONFIG_SCHEDSTATS > INF("schedstat", S_IRUGO, proc_pid_schedstat), > #endif > _______________________________________________ > 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 > -- ------------------------------------------------------------------------ Greg Ungerer -- Principal Engineer EMAIL: g...@snapgear.com SnapGear Group, McAfee PHONE: +61 7 3435 2888 8 Gardner Close FAX: +61 7 3217 5323 Milton, QLD, 4064, Australia WEB: http://www.SnapGear.com _______________________________________________ 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