Blob Blame History Raw
diff -up sysstat-9.0.6.1/pr_stats.c.tl2 sysstat-9.0.6.1/pr_stats.c
--- sysstat-9.0.6.1/pr_stats.c.tl2	2009-09-12 20:59:04.000000000 +0200
+++ sysstat-9.0.6.1/pr_stats.c	2010-10-07 16:05:51.000000000 +0200
@@ -110,15 +110,50 @@ __print_funct_t print_cpu_stats(struct a
 				if (!g_itv) {
 					/* Current CPU is offline */
 					printf("      0.00      0.00      0.00"
-					       "      0.00      0.00      0.00");
+					       "      0.00      0.00");
 					if (DISPLAY_CPU_ALL(a->opt_flags)) {
 						printf("      0.00      0.00      0.00");
 					}
+					if (scc->cpu_user    + scc->cpu_nice   + scc->cpu_sys   +
+						scc->cpu_iowait  + scc->cpu_idle   + scc->cpu_steal +
+						scc->cpu_hardirq + scc->cpu_softirq == 0) {
+						/* cpu is offline */
+						printf("      0.00");
+					} else {
+						/* if the CPU is tickless  then
+						    there is no change in CPU values but the sum of
+						    values is not null */
+						printf("    100.00");
+					}
 					printf("\n");
 					continue;
 				}
 			}
-			
+			float c_idle = 0;
+			/* set the idle value */
+			if (scc->cpu_user    + scc->cpu_nice   + scc->cpu_sys   +
+				scc->cpu_iowait  + scc->cpu_idle   + scc->cpu_steal +
+				scc->cpu_hardirq + scc->cpu_softirq == 0) {
+				/* cpu is offline */
+				c_idle = 0;
+			} else {
+				if (scc->cpu_user    + scc->cpu_nice   + scc->cpu_sys   +
+					scc->cpu_iowait  + scc->cpu_idle   + scc->cpu_steal +
+					scc->cpu_hardirq + scc->cpu_softirq == 
+					scp->cpu_user    + scp->cpu_nice   + scp->cpu_sys   +
+					scp->cpu_iowait  + scp->cpu_idle   + scp->cpu_steal +
+					scp->cpu_hardirq + scp->cpu_softirq) {
+					 /* if the CPU is tickless  then
+					    there is no change in CPU values but the sum of values is not null */
+					c_idle = 100;
+				} else {
+				if (scc->cpu_idle < scp->cpu_idle)
+					c_idle = 0;
+				else
+					c_idle = ll_sp_value(scp->cpu_idle,   scc->cpu_idle,   g_itv);
+				}
+			}
+
 			if (DISPLAY_CPU_DEF(a->opt_flags)) {
 				printf("    %6.2f    %6.2f    %6.2f    %6.2f    %6.2f    %6.2f\n",
 				       ll_sp_value(scp->cpu_user,   scc->cpu_user,   g_itv),
@@ -128,9 +163,7 @@ __print_funct_t print_cpu_stats(struct a
 						   g_itv),
 				       ll_sp_value(scp->cpu_iowait, scc->cpu_iowait, g_itv),
 				       ll_sp_value(scp->cpu_steal,  scc->cpu_steal,  g_itv),
-				       scc->cpu_idle < scp->cpu_idle ?
-				       0.0 :
-				       ll_sp_value(scp->cpu_idle,   scc->cpu_idle,   g_itv));
+				       c_idle);
 			}
 			else if (DISPLAY_CPU_ALL(a->opt_flags)) {
 				printf("    %6.2f    %6.2f    %6.2f    %6.2f    %6.2f    %6.2f"
@@ -144,9 +177,7 @@ __print_funct_t print_cpu_stats(struct a
 				       ll_sp_value(scp->cpu_hardirq, scc->cpu_hardirq, g_itv),
 				       ll_sp_value(scp->cpu_softirq, scc->cpu_softirq, g_itv),
 				       ll_sp_value(scp->cpu_guest,   scc->cpu_guest,   g_itv),
-				       scc->cpu_idle < scp->cpu_idle ?
-				       0.0 :
-				       ll_sp_value(scp->cpu_idle,    scc->cpu_idle,    g_itv));
+				       c_idle);
 			}
 		}
 	}