Blob Blame History Raw
diff -up sysstat-9.0.4/mpstat.c.pom sysstat-9.0.4/mpstat.c
--- sysstat-9.0.4/mpstat.c.pom	2010-11-10 11:58:55.000000000 +0100
+++ sysstat-9.0.4/mpstat.c	2010-11-10 11:58:30.000000000 +0100
@@ -271,6 +271,9 @@ void write_stats_core(int prev, int curr
 
 			/* Recalculate itv for current proc */
 			pc_itv = get_per_cpu_interval(scc, scp);
+			if ((scc->cpu_user - scc->cpu_guest) < (scp->cpu_user - scp->cpu_guest))
+				pc_itv = pc_itv + (scp->cpu_user - scp->cpu_guest) - 
+					(scc->cpu_user - scc->cpu_guest);
 
 			/* if the CPU is offline it is omited from /proc/stat
 			   so the sum of all values is zero */
@@ -291,6 +294,8 @@ void write_stats_core(int prev, int curr
 			else {
 				printf("  %6.2f  %6.2f  %6.2f  %6.2f  %6.2f  %6.2f"
 				       "  %6.2f  %6.2f  %6.2f\n",
+				       (scc->cpu_user - scc->cpu_guest) < (scp->cpu_user - scp->cpu_guest) ?
+				       0.0 :
 				       ll_sp_value(scp->cpu_user - scp->cpu_guest,
 						   scc->cpu_user - scc->cpu_guest,
 						   pc_itv),