diff options
author | Martin Baulig <martin@src.gnome.org> | 1999-05-25 18:09:27 +0000 |
---|---|---|
committer | Martin Baulig <martin@src.gnome.org> | 1999-05-25 18:09:27 +0000 |
commit | 7db0c756d68ee6b7be9d9fa071b14c101726dac1 (patch) | |
tree | 608fa8e4c9fa5d5db801d7deb0198b9f23959717 /sysdeps/freebsd | |
parent | c1bd844673f3b843157a918ace5c7962262cfc65 (diff) | |
download | libgtop-7db0c756d68ee6b7be9d9fa071b14c101726dac1.tar.gz |
First attempt at making this work on NetBSD 1.4.
Diffstat (limited to 'sysdeps/freebsd')
-rw-r--r-- | sysdeps/freebsd/glibtop_suid.h | 2 | ||||
-rw-r--r-- | sysdeps/freebsd/mem.c | 58 | ||||
-rw-r--r-- | sysdeps/freebsd/procmap.c | 6 | ||||
-rw-r--r-- | sysdeps/freebsd/procmem.c | 36 | ||||
-rw-r--r-- | sysdeps/freebsd/swap.c | 34 |
5 files changed, 129 insertions, 7 deletions
diff --git a/sysdeps/freebsd/glibtop_suid.h b/sysdeps/freebsd/glibtop_suid.h index d8e609d1..ed99fca4 100644 --- a/sysdeps/freebsd/glibtop_suid.h +++ b/sysdeps/freebsd/glibtop_suid.h @@ -26,6 +26,8 @@ BEGIN_LIBGTOP_DECLS +#include <sys/param.h> + #define KI_PROC(ki) (&(ki))->kp_proc) #define KI_EPROC(ki) (&(ki))->kp_eproc) diff --git a/sysdeps/freebsd/mem.c b/sysdeps/freebsd/mem.c index 63a71c41..39b76e7a 100644 --- a/sysdeps/freebsd/mem.c +++ b/sysdeps/freebsd/mem.c @@ -31,6 +31,10 @@ #include <sys/vmmeter.h> #include <vm/vm_param.h> +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) +#include <uvm/uvm_extern.h> +#endif + static const unsigned long _glibtop_sysdeps_mem = (1L << GLIBTOP_MEM_TOTAL) + (1L << GLIBTOP_MEM_USED) + (1L << GLIBTOP_MEM_FREE) + @@ -53,7 +57,10 @@ static int pageshift; /* log base 2 of the pagesize */ /* nlist structure for kernel access */ static struct nlist nlst [] = { - { "_cnt" }, +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + { "_bufpages" }, + { 0 } +#else #if defined(__bsdi__) { "_bufcachemem" }, #elif defined(__FreeBSD__) @@ -61,7 +68,9 @@ static struct nlist nlst [] = { #else { "_bufpages" }, #endif + { "_cnt" }, { 0 } +#endif }; /* MIB array for sysctl */ @@ -72,6 +81,10 @@ static int mib [] = { CTL_VM, VM_TOTAL }; static int mib [] = { CTL_VM, VM_METER }; #endif +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) +static int mib_uvmexp [] = { CTL_VM, VM_UVMEXP }; +#endif + /* Init function. */ void @@ -104,9 +117,15 @@ glibtop_get_mem_p (glibtop *server, glibtop_mem *buf) { struct vmtotal vmt; size_t length_vmt; +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + struct uvmexp uvmexp; + size_t length_uvmexp; +#else struct vmmeter vmm; +#endif u_int v_used_count; u_int v_total_count; + u_int v_free_count; int bufspace; glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_MEM), 0); @@ -123,18 +142,26 @@ glibtop_get_mem_p (glibtop *server, glibtop_mem *buf) /* Get the data from sysctl */ length_vmt = sizeof (vmt); if (sysctl (mib, 2, &vmt, &length_vmt, NULL, 0)) { - glibtop_warn_io_r (server, "sysctl"); + glibtop_warn_io_r (server, "sysctl (vmt)"); return; } - + +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + length_uvmexp = sizeof (uvmexp); + if (sysctl (mib_uvmexp, 2, &uvmexp, &length_uvmexp, NULL, 0)) { + glibtop_warn_io_r (server, "sysctl (uvmexp)"); + return; + } +#else /* Get the data from kvm_* */ - if (kvm_read (server->machine.kd, nlst[0].n_value, + if (kvm_read (server->machine.kd, nlst[1].n_value, &vmm, sizeof (vmm)) != sizeof (vmm)) { glibtop_warn_io_r (server, "kvm_read (cnt)"); return; } +#endif - if (kvm_read (server->machine.kd, nlst[1].n_value, + if (kvm_read (server->machine.kd, nlst[0].n_value, &bufspace, sizeof (bufspace)) != sizeof (bufspace)) { glibtop_warn_io_r (server, "kvm_read (bufspace)"); return; @@ -145,22 +172,41 @@ glibtop_get_mem_p (glibtop *server, glibtop_mem *buf) #if defined(__FreeBSD__) v_total_count = vmm.v_page_count; #else +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + v_total_count = uvmexp.reserve_kernel + + uvmexp.free + uvmexp.wired + uvmexp.active + + uvmexp.inactive; + fprintf (stderr, "TEST: %d - %d\n", v_total_count, + uvmexp.npages); +#else v_total_count = vmm.v_kernel_pages + vmm.v_free_count + vmm.v_wire_count + vmm.v_active_count + vmm.v_inactive_count; #endif +#endif +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + v_used_count = uvmexp.active + uvmexp.inactive; + v_free_count = uvmexp.free; +#else v_used_count = vmm.v_active_count + vmm.v_inactive_count; + v_free_count = vmm.v_free_count; +#endif buf->total = (u_int64_t) pagetok (v_total_count) << LOG1024; buf->used = (u_int64_t) pagetok (v_used_count) << LOG1024; - buf->free = (u_int64_t) pagetok (vmm.v_free_count) << LOG1024; + buf->free = (u_int64_t) pagetok (v_free_count) << LOG1024; #ifdef __FreeBSD__ buf->cached = (u_int64_t) pagetok (vmm.v_cache_count) << LOG1024; #endif +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + buf->locked = (u_int64_t) pagetok (uvmexp.wired) << LOG1024; +#else buf->locked = (u_int64_t) pagetok (vmm.v_wire_count) << LOG1024; +#endif + buf->shared = (u_int64_t) pagetok (vmt.t_rmshr) << LOG1024; #if __FreeBSD__ diff --git a/sysdeps/freebsd/procmap.c b/sysdeps/freebsd/procmap.c index 2c9cc251..1090d4b2 100644 --- a/sysdeps/freebsd/procmap.c +++ b/sysdeps/freebsd/procmap.c @@ -148,9 +148,12 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf, continue; #endif #else +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) +#else if (entry.is_a_map || entry.is_sub_map) continue; #endif +#endif maps [i].flags = _glibtop_sysdeps_map_entry; @@ -169,6 +172,8 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf, i++; +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) +#else if (!entry.object.vm_object) continue; @@ -178,6 +183,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf, (unsigned long) entry.object.vm_object, &object, sizeof (object)) != sizeof (object)) glibtop_error_io_r (server, "kvm_read (object)"); +#endif #ifdef __FreeBSD__ /* If the object is of type vnode, add its size */ diff --git a/sysdeps/freebsd/procmem.c b/sysdeps/freebsd/procmem.c index 5217e671..9492ba6d 100644 --- a/sysdeps/freebsd/procmem.c +++ b/sysdeps/freebsd/procmem.c @@ -45,6 +45,14 @@ #include <sys/sysctl.h> #include <vm/vm.h> +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) +/* Fixme ... */ +#undef _KERNEL +#define _UVM_UVM_AMAP_I_H_ 1 +#define _UVM_UVM_MAP_I_H_ 1 +#include <uvm/uvm.h> +#endif + static const unsigned long _glibtop_sysdeps_proc_mem = (1L << GLIBTOP_PROC_MEM_SIZE) + (1L << GLIBTOP_PROC_MEM_VSIZE) + @@ -94,7 +102,11 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf, struct kinfo_proc *pinfo; struct vm_map_entry entry, *first; struct vmspace *vms, vmspace; +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + struct uvm_object object; +#else struct vm_object object; +#endif struct plimit plimit; int count; @@ -174,10 +186,28 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf, continue; #endif #else +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + if (UVM_ET_ISSUBMAP (&entry)) + continue; +#else if (entry.is_a_map || entry.is_sub_map) continue; #endif +#endif + +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + if (!entry.object.uvm_obj) + continue; + + /* We're only interested in `uvm_obj's */ + if (kvm_read (server->machine.kd, + (unsigned long) entry.object.uvm_obj, + &object, sizeof (object)) != sizeof (object)) { + glibtop_warn_io_r (server, "kvm_read (object)"); + return; + } +#else if (!entry.object.vm_object) continue; @@ -189,7 +219,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf, glibtop_warn_io_r (server, "kvm_read (object)"); return; } - +#endif /* If the object is of type vnode, add its size */ #ifdef __FreeBSD__ @@ -198,8 +228,12 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf, buf->share += object.un_pager.vnp.vnp_size; #else +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + buf->share += pagetok (object.uo_npages) << LOG1024; +#else buf->share += object.size; #endif +#endif } buf->flags = _glibtop_sysdeps_proc_mem; diff --git a/sysdeps/freebsd/swap.c b/sysdeps/freebsd/swap.c index d051a2d3..cc30cb2a 100644 --- a/sysdeps/freebsd/swap.c +++ b/sysdeps/freebsd/swap.c @@ -69,15 +69,24 @@ static struct nlist nlst [] = { #elif defined(__NetBSD__) +#if (__NetBSD_Version__ >= 104000000) +#include <uvm/uvm_extern.h> +#include <sys/swap.h> +#else #include <vm/vm_swap.h> +#endif #endif +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) +static int mib_uvmexp [] = { CTL_VM, VM_UVMEXP }; +#else /* nlist structure for kernel access */ static struct nlist nlst2 [] = { { "_cnt" }, { 0 } }; +#endif /* Init function. */ @@ -100,10 +109,12 @@ glibtop_init_swap_p (glibtop *server) #endif #endif +#if !(defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)) if (kvm_nlist (server->machine.kd, nlst2) != 0) { glibtop_warn_io_r (server, "kvm_nlist (cnt)"); return; } +#endif server->sysdeps.swap = _glibtop_sysdeps_swap; } @@ -145,8 +156,13 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf) int nswap, i; int avail = 0, inuse = 0; +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + struct uvmexp uvmexp; + size_t length_uvmexp; +#else /* To get `pagein' and `pageout'. */ struct vmmeter vmm; +#endif static int swappgsin = -1; static int swappgsout = -1; @@ -157,6 +173,13 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf) if (server->sysdeps.swap == 0) return; +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + length_uvmexp = sizeof (uvmexp); + if (sysctl (mib_uvmexp, 2, &uvmexp, &length_uvmexp, NULL, 0)) { + glibtop_warn_io_r (server, "sysctl (uvmexp)"); + return; + } +#else /* This is used to get the `pagein' and `pageout' members. */ if (kvm_read (server->machine.kd, nlst2[0].n_value, @@ -164,6 +187,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf) glibtop_warn_io_r (server, "kvm_read (cnt)"); return; } +#endif if (swappgsin < 0) { buf->pagein = 0; @@ -173,18 +197,28 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf) buf->pagein = vmm.v_swappgsin - swappgsin; buf->pageout = vmm.v_swappgsout - swappgsout; #else +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + buf->pagein = uvmexp.swapins - swappgsin; + buf->pageout = uvmexp.swapouts - swappgsout; +#else buf->pagein = vmm.v_swpin - swappgsin; buf->pageout = vmm.v_swpout - swappgsout; #endif +#endif } #ifdef __FreeBSD__ swappgsin = vmm.v_swappgsin; swappgsout = vmm.v_swappgsout; #else +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) + swappgsin = uvmexp.swapins; + swappgsout = uvmexp.swapouts; +#else swappgsin = vmm.v_swpin; swappgsout = vmm.v_swpout; #endif +#endif #if defined(__FreeBSD__) |