lkml.org 
[lkml]   [2009]   [Nov]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: [PATCH] proc: remove /proc/*/status "Stack usage:"
From
Date
Am Sonntag, den 01.11.2009, 16:15 +0300 schrieb Alexey Dobriyan:
> We have /proc/*/pagemap to determine how much stack was consumed.
> Leave "threadstack" though.
>
> Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
> ---
>

Stop! /proc/*/pagemap is not a real substitute for the stackm usage
patch. If you have problems with this patch i will have a look on it.

> fs/proc/array.c | 90 --------------------------------------------------------
> 1 file changed, 90 deletions(-)
>
> --- a/fs/proc/array.c
> +++ b/fs/proc/array.c
> @@ -82,7 +82,6 @@
> #include <linux/pid_namespace.h>
> #include <linux/ptrace.h>
> #include <linux/tracehook.h>
> -#include <linux/swapops.h>
>
> #include <asm/pgtable.h>
> #include <asm/processor.h>
> @@ -322,94 +321,6 @@ static inline void task_context_switch_counts(struct seq_file *m,
> p->nivcsw);
> }
>
> -#ifdef CONFIG_MMU
> -
> -struct stack_stats {
> - struct vm_area_struct *vma;
> - unsigned long startpage;
> - unsigned long usage;
> -};
> -
> -static int stack_usage_pte_range(pmd_t *pmd, unsigned long addr,
> - unsigned long end, struct mm_walk *walk)
> -{
> - struct stack_stats *ss = walk->private;
> - struct vm_area_struct *vma = ss->vma;
> - pte_t *pte, ptent;
> - spinlock_t *ptl;
> - int ret = 0;
> -
> - pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
> - for (; addr != end; pte++, addr += PAGE_SIZE) {
> - ptent = *pte;
> -
> -#ifdef CONFIG_STACK_GROWSUP
> - if (pte_present(ptent) || is_swap_pte(ptent))
> - ss->usage = addr - ss->startpage + PAGE_SIZE;
> -#else
> - if (pte_present(ptent) || is_swap_pte(ptent)) {
> - ss->usage = ss->startpage - addr + PAGE_SIZE;
> - pte++;
> - ret = 1;
> - break;
> - }
> -#endif
> - }
> - pte_unmap_unlock(pte - 1, ptl);
> - cond_resched();
> - return ret;
> -}
> -
> -static inline unsigned long get_stack_usage_in_bytes(struct vm_area_struct *vma,
> - struct task_struct *task)
> -{
> - struct stack_stats ss;
> - struct mm_walk stack_walk = {
> - .pmd_entry = stack_usage_pte_range,
> - .mm = vma->vm_mm,
> - .private = &ss,
> - };
> -
> - if (!vma->vm_mm || is_vm_hugetlb_page(vma))
> - return 0;
> -
> - ss.vma = vma;
> - ss.startpage = task->stack_start & PAGE_MASK;
> - ss.usage = 0;
> -
> -#ifdef CONFIG_STACK_GROWSUP
> - walk_page_range(KSTK_ESP(task) & PAGE_MASK, vma->vm_end,
> - &stack_walk);
> -#else
> - walk_page_range(vma->vm_start, (KSTK_ESP(task) & PAGE_MASK) + PAGE_SIZE,
> - &stack_walk);
> -#endif
> - return ss.usage;
> -}
> -
> -static inline 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);
> -
> - if (mm) {
> - down_read(&mm->mmap_sem);
> - vma = find_vma(mm, task->stack_start);
> - if (vma)
> - seq_printf(m, "Stack usage:\t%lu kB\n",
> - get_stack_usage_in_bytes(vma, task) >> 10);
> -
> - up_read(&mm->mmap_sem);
> - mmput(mm);
> - }
> -}
> -#else
> -static void task_show_stack_usage(struct seq_file *m, struct task_struct *task)
> -{
> -}
> -#endif /* CONFIG_MMU */
> -
> int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
> struct pid *pid, struct task_struct *task)
> {
> @@ -429,7 +340,6 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
> task_show_regs(m, task);
> #endif
> task_context_switch_counts(m, task);
> - task_show_stack_usage(m, task);
> return 0;
> }
>




\
 
 \ /
  Last update: 2009-11-01 15:43    [W:0.059 / U:0.356 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site