aboutsummaryrefslogtreecommitdiff
path: root/sysutils/asmem/files/patch-read__mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysutils/asmem/files/patch-read__mem.c')
-rw-r--r--sysutils/asmem/files/patch-read__mem.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/sysutils/asmem/files/patch-read__mem.c b/sysutils/asmem/files/patch-read__mem.c
new file mode 100644
index 000000000000..aa48de5836b4
--- /dev/null
+++ b/sysutils/asmem/files/patch-read__mem.c
@@ -0,0 +1,60 @@
+--- read_mem.c.orig 2007-04-12 20:38:40 UTC
++++ read_mem.c
+@@ -56,6 +56,8 @@ char buf[BUFFER_LENGTH];
+ // Machine dependent headers
+ // FreeBSD
+ #if defined(__FreeBSD__)
++#define _WANT_VMMETER
++#include <sys/param.h>
+ #include <sys/conf.h>
+ #include <osreldate.h>
+ #include <kvm.h>
+@@ -336,6 +338,14 @@ void error_handle( int place, const char * message )
+ int read_meminfo() {
+ int pagesize, pageshift;
+ #if __FreeBSD_version > 400000
++
++ /* setup pageshift */
++ pagesize = getpagesize();
++ pageshift = 0;
++ while (pagesize > 1) {
++ pageshift++;
++ pagesize >>= 1;
++ }
+
+ struct kvm_swap kswap[SWAP_DEVICES];
+ int i, swaps;
+@@ -347,10 +357,6 @@ int read_meminfo() {
+ time_t current_time;
+ #define GETSWAP_DELAY 60 /* 1 min */
+
+- /* get the info */
+- if (kvm_read(kd, cnt_offset, (int *)(&sum), sizeof(sum)) != sizeof(sum))
+- return (-1);
+-
+ /* we obtain swap info every GETSWAP_DELAY seconds because of
+ * kvm_getswapinfo CPU load
+ */
+@@ -406,9 +412,19 @@ int read_meminfo() {
+
+ #endif /* if __FreeBSD_version > 400000 */
+
+- state.fresh.total = pagetok(sum.v_page_count);
+- state.fresh.used = pagetok(sum.v_page_count-sum.v_free_count);
+- state.fresh.free = pagetok(sum.v_free_count);
++ unsigned long physmem, freemem, inacmem;
++ size_t sz = sizeof(unsigned long);
++
++ physmem = 0;
++ freemem = 0;
++ inacmem = 0;
++ sysctlbyname("hw.physmem", &physmem, &sz, NULL, 0);
++ sysctlbyname("vm.stats.vm.v_free_count", &freemem, &sz, NULL, 0);
++ sysctlbyname("vm.stats.vm.v_inactive_count", &inacmem, &sz, NULL, 0);
++
++ state.fresh.total = physmem;
++ state.fresh.free = pagetok(freemem + inacmem);
++ state.fresh.used = physmem - pagetok(freemem + inacmem);
+
+ state.fresh.shared = 0; /* dont know how to get these */
+ state.fresh.buffers = 0;