diff options
author | Martin Baulig <martin@src.gnome.org> | 1999-03-24 21:38:15 +0000 |
---|---|---|
committer | Martin Baulig <martin@src.gnome.org> | 1999-03-24 21:38:15 +0000 |
commit | 4b9e977fdcbdebf5704ea2bfefa993c0725a9aa0 (patch) | |
tree | 9d4a4eb896445ec23c08ae6ec8cc5ccae4c3dae8 /kernel | |
parent | 6a9a681559d56e84dcf3d2ed2095abbe18018105 (diff) | |
download | libgtop-4b9e977fdcbdebf5704ea2bfefa993c0725a9aa0.tar.gz |
*** empty log message ***
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sysctl/libgtop.c | 12 | ||||
-rw-r--r-- | kernel/sysctl/libgtop.h | 3 | ||||
-rw-r--r-- | kernel/sysctl/libgtop_syms.c | 5 |
3 files changed, 18 insertions, 2 deletions
diff --git a/kernel/sysctl/libgtop.c b/kernel/sysctl/libgtop.c index ef0ade5e..401fd883 100644 --- a/kernel/sysctl/libgtop.c +++ b/kernel/sysctl/libgtop.c @@ -289,9 +289,11 @@ task_mem (struct task_struct *p, libgtop_proc_segment_t *proc_segment) struct vm_area_struct * vma = mm->mmap; unsigned long data = 0, stack = 0; unsigned long exec = 0, lib = 0; + unsigned long vsize = 0; for (vma = mm->mmap; vma; vma = vma->vm_next) { unsigned long len = (vma->vm_end - vma->vm_start) >> 10; + vsize += len; if (!vma->vm_file) { data += len; if (vma->vm_flags & VM_GROWSDOWN) @@ -308,6 +310,7 @@ task_mem (struct task_struct *p, libgtop_proc_segment_t *proc_segment) } } + proc_segment->vsize = vsize; proc_segment->data = data; proc_segment->stack = stack; proc_segment->exec = exec; @@ -398,6 +401,7 @@ get_statm (struct task_struct *tsk, libgtop_proc_mem_t *proc_mem) { int size=0, resident=0, share=0, trs=0, lrs=0, drs=0, dt=0; unsigned long data=0, stack=0, exec=0, lib=0; + unsigned long vsize = 0; if (tsk->mm && tsk->mm != &init_mm) { struct vm_area_struct * vma = tsk->mm->mmap; @@ -407,6 +411,8 @@ get_statm (struct task_struct *tsk, libgtop_proc_mem_t *proc_mem) pgd_t *pgd = pgd_offset(tsk->mm, vma->vm_start); int pages = 0, shared = 0, dirty = 0, total = 0; + vsize += len; + statm_pgd_range (pgd, vma->vm_start, vma->vm_end, &pages, &shared, &dirty, &total); resident += pages; @@ -445,7 +451,8 @@ get_statm (struct task_struct *tsk, libgtop_proc_mem_t *proc_mem) vma = vma->vm_next; } } - + + proc_mem->segment.vsize = vsize; proc_mem->segment.data = data; proc_mem->segment.stack = stack; proc_mem->segment.exec = exec; @@ -725,6 +732,9 @@ libgtop_sysctl_proc (ctl_table *table, int nlen, int *name, memset (proc_mem, 0, sizeof (libgtop_proc_mem_t)); get_statm (tsk, proc_mem); + /* Use LIBGTOP_PROC_STAT if you only want rss and rlim. */ + proc_mem->rss = tsk->mm->rss << PAGE_SHIFT; + proc_mem->rlim = tsk->rlim ? tsk->rlim[RLIMIT_RSS].rlim_cur : 0; break; default: return -EINVAL; diff --git a/kernel/sysctl/libgtop.h b/kernel/sysctl/libgtop.h index e91c1c77..2f7db28e 100644 --- a/kernel/sysctl/libgtop.h +++ b/kernel/sysctl/libgtop.h @@ -128,13 +128,14 @@ struct libgtop_proc_kernel struct libgtop_proc_segment { - unsigned long data, exec, stack, lib; + unsigned long vsize, data, exec, stack, lib; }; struct libgtop_proc_mem { libgtop_proc_segment_t segment; int size, resident, share, trs, lrs, drs, dt; + unsigned long rss, rlim; }; #endif diff --git a/kernel/sysctl/libgtop_syms.c b/kernel/sysctl/libgtop_syms.c index e3c27401..ddffc3f7 100644 --- a/kernel/sysctl/libgtop_syms.c +++ b/kernel/sysctl/libgtop_syms.c @@ -15,6 +15,7 @@ extern unsigned long total_forks; EXPORT_SYMBOL(task); +EXPORT_SYMBOL(init_mm); EXPORT_SYMBOL(pidhash); EXPORT_SYMBOL(avenrun); EXPORT_SYMBOL(nr_running); @@ -23,3 +24,7 @@ EXPORT_SYMBOL(last_pid); EXPORT_SYMBOL(total_forks); EXPORT_SYMBOL(si_swapinfo); +extern void scheduling_functions_start_here(void); +extern void scheduling_functions_end_here(void); +EXPORT_SYMBOL(scheduling_functions_start_here); +EXPORT_SYMBOL(scheduling_functions_end_here); |