File procinfo-tickless.dif of Package procinfo

--- procinfo.c
+++ procinfo.c	2008-07-10 19:23:18.243245843 +0200
@@ -143,16 +143,7 @@ first_page (long sl)
 
     fclose (meminfofp); meminfofp = myfopen (PROC_DIR "meminfo");
 
-    fgets (line, sizeof (line), meminfofp);
-
-    if (have_m_c == -1) {
-	if (strstr (line, "cached:"))
-	    have_m_c = 1;
-	else
-	    have_m_c = 0;
-    }
-
-    if (have_m_l == -1) {
+    if (have_m_l == -1 || have_m_c == -1) {
 	char kickme[1024];
 	/* God, this next stuff needs AT LEAST a macro to hide behind. */
 	fclose (meminfofp); meminfofp = myfopen (PROC_DIR "meminfo");
@@ -161,17 +152,23 @@ first_page (long sl)
 	    have_m_l = 1;
 	else
 	    have_m_l = 0;
+	if (strstr (kickme, "Cached:"))
+	    have_m_c = 1;
+	else
+	    have_m_c = 0;
 	fclose (meminfofp); meminfofp = myfopen (PROC_DIR "meminfo");
     }
 
-
     printf ("Memory:      Total        Used        Free      "
 	    "Shared     Buffers      %s\n", have_m_c ? "Cached" : "");
 
+    fgets (line, sizeof (line), meminfofp);
+
     if (have_m_l) {
 
 	new.m_to = new.m_us = new.m_fr = new.m_sh = new.m_bu = 0;
-	new.s_to = new.s_us = new.s_fr = 0;
+	new.s_to = new.s_us = new.s_fr = new.m_bo = new.m_an = 0;
+	new.n_fs = new.s_lr = new.s_lu = new.s_ca = 0;
 
 	do {
 	    char *type = strtok (line, ":");
@@ -190,10 +187,26 @@ first_page (long sl)
 		new.s_to = VAL;
 	    else if (ISSTR ("SwapFree"))
 		new.s_fr = VAL;
+	    else if (ISSTR ("SwapCached"))
+		new.s_ca = VAL;
+	    else if (ISSTR ("Bounce"))
+		new.m_bo = VAL;
+	    else if (ISSTR ("AnonPages"))
+		new.m_an = VAL;
+	    else if (ISSTR ("NFS_Unstable"))
+		new.n_fs = VAL;
+	    else if (ISSTR ("SReclaimable"))
+		new.s_lr = VAL;
+	    else if (ISSTR ("SUnreclaim"))
+		new.s_lu = VAL;
 	} while (fgets (line, sizeof (line), meminfofp));
 
 	new.m_us = new.m_to - new.m_fr;
 	new.s_us = new.s_to - new.s_fr;
+	new.m_ca += new.s_lr;
+	new.m_ca += new.s_lu;
+	new.m_ca += new.n_fs;
+	new.m_ca += new.s_ca;
 
     } else {
 
@@ -460,13 +473,13 @@ first_page (long sl)
 /* XXX Is this stuff still relevant/true? */
 
 #ifdef __i386__		/* IRQ 0 is timer tick on i386's... */
-    if (nr_irqs && new.intr[0]) {
+    if (nr_irqs && new.intr[0] && (new.intr[0] != old.intr[0])) {
 	if (fs && old.uptime)
 	    elapsed = (DIFF(intr[0]) * usr_hz) / sys_hz;
     } else
 #endif
 #ifdef __sparc__	/* IRQ 10 is timer tick on sparc's... */
-    if (nr_irqs && new.intr[10]) {
+    if (nr_irqs && new.intr[10] && (new.intr[0] != old.intr[0])) {
 	if (fs && old.uptime)
 	    elapsed = (DIFF(intr[10]) * usr_hz) / sys_hz;
     } else
--- procinfo.h
+++ procinfo.h	2008-07-10 19:14:27.301441388 +0200
@@ -82,7 +82,8 @@ struct info
 {
     unsigned long uptime;
     long m_to, m_us, m_fr, m_sh, m_bu, m_ca;
-    long s_to, s_us, s_fr;
+    long s_to, s_us, s_fr, m_bo, m_an, n_fs;
+    long s_lr, s_lu, s_ca;
     unsigned long cpu_user, cpu_nice, cpu_sys, cpu_idle, cpu_iowait, cpu_hirq, cpu_sirq, cpu_steal, cpu_guest;
     unsigned long disk[8];
     unsigned long disk_r[8];
openSUSE Build Service is sponsored by