$OpenBSD: patch-src_openbsd_c,v 1.4 2008/02/28 18:28:56 okan Exp $
--- src/openbsd.c.orig	Wed Nov 14 16:29:26 2007
+++ src/openbsd.c	Thu Feb 28 10:56:22 2008
@@ -685,16 +685,20 @@ proc_find_top(struct process **cpu, struct process **m
 	struct process *processes;
 	int mib[2];
 
-	int total_pages;
+	int64_t usermem;
+	u_int total_pages;
 	int pagesize = getpagesize();
 
 	/* we get total pages count again to be sure it is up to date */
 	mib[0] = CTL_HW;
-	mib[1] = HW_USERMEM;
-	size_t size = sizeof(total_pages);
-	if(sysctl(mib, 2, &total_pages, &size, NULL, 0) == -1)
-		ERR("error reading nmempages");
+	mib[1] = HW_USERMEM64;
+	size_t size = sizeof(usermem);
+	if(sysctl(mib, 2, &usermem, &size, NULL, 0) == -1)
+		ERR("error reading usermem");
 
+	/* translate bytes into page count */
+	total_pages = usermem / pagesize;
+
 	int max_size = sizeof(struct kinfo_proc2);
 	p = kvm_getproc2(kd, KERN_PROC_ALL, 0, max_size, &n_processes);
 	processes = malloc(n_processes * sizeof (struct process));
@@ -707,7 +711,7 @@ proc_find_top(struct process **cpu, struct process **m
 			processes[j].name =  strdup(p[i].p_comm);
 			processes[j].amount = 100.0 *
 				p[i].p_pctcpu / FSCALE;
-			processes[j].totalmem = (float)(p[i].p_vm_rssize * pagesize /
+			processes[j].totalmem = (float)(p[i].p_vm_rssize /
 					(float)total_pages) * 100.0;
 			j++;
 		}
