Date: Tue, 02 Apr 2002 01:16:57 -0500 From: Jon Ringuette <wintermute@imeme.net> To: freebsd-hackers@freebsd.org Subject: diff of proposed top changes Message-ID: <3CA94CD9.6070805@imeme.net>
index | next in thread | raw e-mail
[-- Attachment #1 --]
These changes will allow top to run in a jail, or proceed on even though
certain stats can not be obtained. Unfortunatly you do loss some error
messages when doing so.
Ps. If I should be submitting these elsewhere please let me know.
dff -c machine.c newmachine.c > machine.c.diff
[-- Attachment #2 --]
*** machine.c Tue Jul 31 16:27:05 2001
--- machine.c.new Tue Apr 2 01:11:03 2002
***************
*** 246,254 ****
else if (namelength > 15)
namelength = 15;
! if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open")) == NULL)
! return -1;
!
/* get the list of symbols we want to access in the kernel */
(void) kvm_nlist(kd, nlst);
--- 246,255 ----
else if (namelength > 15)
namelength = 15;
! /* Changed to be NULL instead of kvm_open for parm 5 so it will no longer display error messages if there was a
! problem reading and thus not obstructing the screen */
! if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, NULL)) == NULL)
! return -1;
/* get the list of symbols we want to access in the kernel */
(void) kvm_nlist(kd, nlst);
***************
*** 337,342 ****
--- 338,344 ----
int mib[2];
struct timeval boottime;
size_t bt_size;
+ int get_mem = 0;
/* get the cp_time array */
(void) getkval(cp_time_offset, (int *)cp_time, sizeof(cp_time),
***************
*** 380,401 ****
static int swapavail = 0;
static int swapfree = 0;
static int bufspace = 0;
!
! (void) getkval(cnt_offset, (int *)(&sum), sizeof(sum),
"_cnt");
(void) getkval(bufspace_offset, (int *)(&bufspace), sizeof(bufspace),
"_bufspace");
!
/* convert memory stats to Kbytes */
! memory_stats[0] = pagetok(sum.v_active_count);
! memory_stats[1] = pagetok(sum.v_inactive_count);
! memory_stats[2] = pagetok(sum.v_wire_count);
! memory_stats[3] = pagetok(sum.v_cache_count);
! memory_stats[4] = bufspace / 1024;
! memory_stats[5] = pagetok(sum.v_free_count);
! memory_stats[6] = -1;
!
/* first interval */
if (swappgsin < 0) {
swap_stats[4] = 0;
swap_stats[5] = 0;
--- 382,415 ----
static int swapavail = 0;
static int swapfree = 0;
static int bufspace = 0;
!
! get_mem = getkval(cnt_offset, (int *)(&sum), sizeof(sum),
"_cnt");
(void) getkval(bufspace_offset, (int *)(&bufspace), sizeof(bufspace),
"_bufspace");
! if(get_mem!=2) // Check if we had a problem reading memory stats
! {
/* convert memory stats to Kbytes */
! memory_stats[0] = pagetok(sum.v_active_count);
! memory_stats[1] = pagetok(sum.v_inactive_count);
! memory_stats[2] = pagetok(sum.v_wire_count);
! memory_stats[3] = pagetok(sum.v_cache_count);
! memory_stats[4] = bufspace / 1024;
! memory_stats[5] = pagetok(sum.v_free_count);
! memory_stats[6] = -1;
! }
! else
! {
! memory_stats[0] = -1;
! memory_stats[1] = -1;
! memory_stats[2] = -1;
! memory_stats[3] = -1;
! memory_stats[4] = -1;
! memory_stats[5] = -1;
! memory_stats[6] = -1;//keep
! };
/* first interval */
+
if (swappgsin < 0) {
swap_stats[4] = 0;
swap_stats[5] = 0;
***************
*** 407,422 ****
swap_stats[5] = pagetok(((sum.v_swappgsout - swappgsout)));
}
! swappgsin = sum.v_swappgsin;
! swappgsout = sum.v_swappgsout;
!
/* call CPU heavy swapmode() only for changes */
! if (swap_stats[4] > 0 || swap_stats[5] > 0 || swap_delay == 0) {
swap_stats[3] = swapmode(&swapavail, &swapfree);
swap_stats[0] = swapavail;
swap_stats[1] = swapavail - swapfree;
swap_stats[2] = swapfree;
}
swap_delay = 1;
swap_stats[6] = -1;
}
--- 421,454 ----
swap_stats[5] = pagetok(((sum.v_swappgsout - swappgsout)));
}
! if(get_mem !=2)
! {
! swappgsin = sum.v_swappgsin;
! swappgsout = sum.v_swappgsout;
! }
! else
! {
! swappgsin=-1;
! swappgsout=-1;
! };
/* call CPU heavy swapmode() only for changes */
! if (swap_stats[4] > 0 || swap_stats[5] > 0 || swap_delay == 0 && get_mem!=2) {
swap_stats[3] = swapmode(&swapavail, &swapfree);
swap_stats[0] = swapavail;
swap_stats[1] = swapavail - swapfree;
swap_stats[2] = swapfree;
}
+ else
+ if(get_mem==2) // check if problem retrieving memory stats
+ {
+ swap_stats[4] = -1;
+ swap_stats[5] = -1;
+ swap_stats[3] = -1;
+ swap_stats[0] = -1;
+ swap_stats[1] = -1;
+ swap_stats[2] = -1;
+ };
+
swap_delay = 1;
swap_stats[6] = -1;
}
***************
*** 700,713 ****
}
else
{
! fprintf(stderr, "top: kvm_read for %s: %s\n",
! refstr, strerror(errno));
! quit(23);
}
}
return(1);
}
-
/* comparison routines for qsort */
/*
--- 732,745 ----
}
else
{
! // fprintf(stderr, "top: kvm_read for %s: %s\n",
! // refstr, strerror(errno));
! // quit(23);
! return(2);
}
}
return(1);
}
/* comparison routines for qsort */
/*
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3CA94CD9.6070805>
