From aa5c5c455301cfb1a8859622b5ade1be20896d93 Mon Sep 17 00:00:00 2001 From: Martin Baulig Date: Tue, 23 Mar 1999 18:42:32 +0000 Subject: [PATCH] Some more work here. --- sysdeps/kernel/glibtop_private.h | 3 +++ sysdeps/kernel/procdata.c | 16 ++++++++++++++++ sysdeps/kernel/prockernel.c | 13 ++++++++++++- sysdeps/kernel/procmem.c | 4 ++-- sysdeps/kernel/procsegment.c | 4 ++-- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/sysdeps/kernel/glibtop_private.h b/sysdeps/kernel/glibtop_private.h index 4d70d16b..39bdef60 100644 --- a/sysdeps/kernel/glibtop_private.h +++ b/sysdeps/kernel/glibtop_private.h @@ -44,6 +44,9 @@ int glibtop_get_proc_data_proclist_s (glibtop *server, int glibtop_get_proc_data_proc_state_s (glibtop *server, libgtop_proc_state_t *proc_state, pid_t pid); +int glibtop_get_proc_data_proc_kernel_s (glibtop *server, + libgtop_proc_kernel_t *proc_kernel, + pid_t pid); END_LIBGTOP_DECLS diff --git a/sysdeps/kernel/procdata.c b/sysdeps/kernel/procdata.c index 022b2c45..ab7476a2 100644 --- a/sysdeps/kernel/procdata.c +++ b/sysdeps/kernel/procdata.c @@ -98,3 +98,19 @@ glibtop_get_proc_data_proc_state_s (glibtop *server, return 0; } + +int +glibtop_get_proc_data_proc_kernel_s (glibtop *server, + libgtop_proc_kernel_t *proc_kernel, + pid_t pid) +{ + int name [3] = { CTL_LIBGTOP, LIBGTOP_PROC_KERNEL, pid }; + size_t size = sizeof (libgtop_proc_kernel_t); + + if (sysctl (name, 3, proc_kernel, &size, NULL, 0)) { + glibtop_warn_io_r (server, "sysctl (libgtop/proc_kernel)"); + return -1; + } + + return 0; +} diff --git a/sysdeps/kernel/prockernel.c b/sysdeps/kernel/prockernel.c index 4c506c61..dd3be082 100644 --- a/sysdeps/kernel/prockernel.c +++ b/sysdeps/kernel/prockernel.c @@ -34,12 +34,16 @@ static const unsigned long _glibtop_sysdeps_proc_kernel = (1 << GLIBTOP_PROC_KERNEL_KSTK_ESP) + (1 << GLIBTOP_PROC_KERNEL_KSTK_EIP); +static const unsigned long _glibtop_sysdeps_proc_kernel_kernel = +(1 << GLIBTOP_PROC_KERNEL_NWCHAN); + /* Init function. */ void glibtop_init_proc_kernel_s (glibtop *server) { - server->sysdeps.proc_kernel = _glibtop_sysdeps_proc_kernel; + server->sysdeps.proc_kernel = _glibtop_sysdeps_proc_kernel | + _glibtop_sysdeps_proc_kernel_kernel; } /* Provides detailed information about a process. */ @@ -49,6 +53,7 @@ glibtop_get_proc_kernel_s (glibtop *server, glibtop_proc_kernel *buf, pid_t pid) { libgtop_proc_state_t proc_state; + libgtop_proc_kernel_t proc_kernel; memset (buf, 0, sizeof (glibtop_proc_kernel)); @@ -63,4 +68,10 @@ glibtop_get_proc_kernel_s (glibtop *server, glibtop_proc_kernel *buf, buf->kstk_eip = proc_state.keip; buf->flags = _glibtop_sysdeps_proc_kernel; + + if (glibtop_get_proc_data_proc_kernel_s (server, &proc_kernel, pid)) + return; + + buf->nwchan = proc_kernel.wchan; + buf->flags |= _glibtop_sysdeps_proc_kernel_kernel; } diff --git a/sysdeps/kernel/procmem.c b/sysdeps/kernel/procmem.c index ab0c4170..6cb01200 100644 --- a/sysdeps/kernel/procmem.c +++ b/sysdeps/kernel/procmem.c @@ -31,7 +31,7 @@ static const unsigned long _glibtop_sysdeps_proc_mem = 0; void glibtop_init_proc_mem_s (glibtop *server) { - server->sysdeps.proc_mem = _glibtop_sysdeps_proc_mem; + server->sysdeps.proc_mem = _glibtop_sysdeps_proc_mem; } /* Provides detailed information about a process. */ @@ -40,5 +40,5 @@ void glibtop_get_proc_mem_s (glibtop *server, glibtop_proc_mem *buf, pid_t pid) { - memset (buf, 0, sizeof (glibtop_proc_mem)); + memset (buf, 0, sizeof (glibtop_proc_mem)); } diff --git a/sysdeps/kernel/procsegment.c b/sysdeps/kernel/procsegment.c index b03709d4..6bf41f6d 100644 --- a/sysdeps/kernel/procsegment.c +++ b/sysdeps/kernel/procsegment.c @@ -31,7 +31,7 @@ static const unsigned long _glibtop_sysdeps_proc_segment = 0; void glibtop_init_proc_segment_s (glibtop *server) { - server->sysdeps.proc_segment = _glibtop_sysdeps_proc_segment; + server->sysdeps.proc_segment = _glibtop_sysdeps_proc_segment; } /* Provides detailed information about a process. */ @@ -40,5 +40,5 @@ void glibtop_get_proc_segment_s (glibtop *server, glibtop_proc_segment *buf, pid_t pid) { - memset (buf, 0, sizeof (glibtop_proc_segment)); + memset (buf, 0, sizeof (glibtop_proc_segment)); }