summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMartin Baulig <martin@src.gnome.org>1999-03-24 21:38:15 +0000
committerMartin Baulig <martin@src.gnome.org>1999-03-24 21:38:15 +0000
commit4b9e977fdcbdebf5704ea2bfefa993c0725a9aa0 (patch)
tree9d4a4eb896445ec23c08ae6ec8cc5ccae4c3dae8 /kernel
parent6a9a681559d56e84dcf3d2ed2095abbe18018105 (diff)
downloadlibgtop-4b9e977fdcbdebf5704ea2bfefa993c0725a9aa0.tar.gz
*** empty log message ***
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sysctl/libgtop.c12
-rw-r--r--kernel/sysctl/libgtop.h3
-rw-r--r--kernel/sysctl/libgtop_syms.c5
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);