Index: procps-3.2.7/top.c =================================================================== --- procps-3.2.7.orig/top.c 2007-08-10 17:34:46.000000000 +0200 +++ procps-3.2.7/top.c 2007-08-13 13:14:43.000000000 +0200 @@ -935,7 +935,8 @@ static CPU_t *cpus_refresh (CPU_t *cpus) cpus[Cpu_tot].x = 0; // FIXME: can't tell by kernel version number cpus[Cpu_tot].y = 0; // FIXME: can't tell by kernel version number cpus[Cpu_tot].z = 0; // FIXME: can't tell by kernel version number - num = sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", + cpus[Cpu_tot].g = 0; // FIXME: can't tell by kernel version number + num = sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", &cpus[Cpu_tot].u, &cpus[Cpu_tot].n, &cpus[Cpu_tot].s, @@ -943,7 +944,8 @@ static CPU_t *cpus_refresh (CPU_t *cpus) &cpus[Cpu_tot].w, &cpus[Cpu_tot].x, &cpus[Cpu_tot].y, - &cpus[Cpu_tot].z + &cpus[Cpu_tot].z, + &cpus[Cpu_tot].g ); if (num < 4) std_err("failed /proc/stat read"); @@ -960,9 +962,10 @@ static CPU_t *cpus_refresh (CPU_t *cpus) cpus[i].x = 0; // FIXME: can't tell by kernel version number cpus[i].y = 0; // FIXME: can't tell by kernel version number cpus[i].z = 0; // FIXME: can't tell by kernel version number - num = sscanf(buf, "cpu%u %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", + cpus[i].g = 0; // FIXME: can't tell by kernel version number + num = sscanf(buf, "cpu%u %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", &cpus[i].id, - &cpus[i].u, &cpus[i].n, &cpus[i].s, &cpus[i].i, &cpus[i].w, &cpus[i].x, &cpus[i].y, &cpus[i].z + &cpus[i].u, &cpus[i].n, &cpus[i].s, &cpus[i].i, &cpus[i].w, &cpus[i].x, &cpus[i].y, &cpus[i].z, &cpus[i].g ); if (num < 4) std_err("failed /proc/stat read"); @@ -2879,10 +2882,11 @@ static void summaryhlp (CPU_t *cpu, cons // we'll trim to zero if we get negative time ticks, // which has happened with some SMP kernels (pre-2.4?) #define TRIMz(x) ((tz = (SIC_t)(x)) < 0 ? 0 : tz) - SIC_t u_frme, s_frme, n_frme, i_frme, w_frme, x_frme, y_frme, z_frme, tot_frme, tz; + SIC_t u_frme, s_frme, n_frme, i_frme, w_frme, x_frme, y_frme, z_frme, g_frme, tot_frme, tz, u_tmp; float scale; - u_frme = cpu->u - cpu->u_sav; + u_tmp = cpu->u - cpu->g; + u_frme = TRIMz(u_tmp - cpu->u_sav); s_frme = cpu->s - cpu->s_sav; n_frme = cpu->n - cpu->n_sav; i_frme = TRIMz(cpu->i - cpu->i_sav); @@ -2890,7 +2894,8 @@ static void summaryhlp (CPU_t *cpu, cons x_frme = cpu->x - cpu->x_sav; y_frme = cpu->y - cpu->y_sav; z_frme = cpu->z - cpu->z_sav; - tot_frme = u_frme + s_frme + n_frme + i_frme + w_frme + x_frme + y_frme + z_frme; + g_frme = cpu->g - cpu->g_sav; + tot_frme = u_frme + s_frme + n_frme + i_frme + w_frme + x_frme + y_frme + z_frme + g_frme; if (tot_frme < 1) tot_frme = 1; scale = 100.0 / (float)tot_frme; @@ -2908,13 +2913,14 @@ static void summaryhlp (CPU_t *cpu, cons (float)w_frme * scale, (float)x_frme * scale, (float)y_frme * scale, - (float)z_frme * scale + (float)z_frme * scale, + (float)g_frme * scale ) ); Msg_row += 1; // remember for next time around - cpu->u_sav = cpu->u; + cpu->u_sav = u_tmp; cpu->s_sav = cpu->s; cpu->n_sav = cpu->n; cpu->i_sav = cpu->i; @@ -2922,6 +2928,7 @@ static void summaryhlp (CPU_t *cpu, cons cpu->x_sav = cpu->x; cpu->y_sav = cpu->y; cpu->z_sav = cpu->z; + cpu->g_sav = cpu->g; #undef TRIMz } Index: procps-3.2.7/top.h =================================================================== --- procps-3.2.7.orig/top.h 2007-08-10 17:34:46.000000000 +0200 +++ procps-3.2.7/top.h 2007-08-13 13:14:43.000000000 +0200 @@ -211,8 +211,8 @@ typedef struct HST_t { // calculations. It exists primarily for SMP support but serves // all environments. typedef struct CPU_t { - TIC_t u, n, s, i, w, x, y, z; // as represented in /proc/stat - TIC_t u_sav, s_sav, n_sav, i_sav, w_sav, x_sav, y_sav, z_sav; // in the order of our display + TIC_t u, n, s, i, w, x, y, z, g; // as represented in /proc/stat + TIC_t u_sav, s_sav, n_sav, i_sav, w_sav, x_sav, y_sav, z_sav, g_sav; // in the order of our display unsigned id; // the CPU ID number } CPU_t; @@ -390,7 +390,7 @@ typedef struct WIN_t { #define STATES_line2x6 "%s\03" \ " %#4.1f%% \02us,\03 %#4.1f%% \02sy,\03 %#4.1f%% \02ni,\03 %#4.1f%% \02id,\03 %#4.1f%% \02wa,\03 %#4.1f%% \02hi,\03 %#4.1f%% \02si\03\n" #define STATES_line2x7 "%s\03" \ - "%#5.1f%%\02us,\03%#5.1f%%\02sy,\03%#5.1f%%\02ni,\03%#5.1f%%\02id,\03%#5.1f%%\02wa,\03%#5.1f%%\02hi,\03%#5.1f%%\02si,\03%#5.1f%%\02st\03\n" + "%#4.1f%%\02us,\03%#4.1f%%\02sy,\03%#4.1f%%\02ni,\03%#5.1f%%\02id,\03%#4.1f%%\02wa,\03%#4.1f%%\02hi,\03%#4.1f%%\02si,\03%#4.1f%%\02st\03,\02%#4.1f%%\02g\n" #ifdef CASEUP_SUMMK #define MEMORY_line1 "Mem: \03" \ " %8luK \02total,\03 %8luK \02used,\03 %8luK \02free,\03 %8luK \02buffers\03\n"