summaryrefslogtreecommitdiff
path: root/core/procps/procps-3.2.7-top-env-cpuloop.patch
diff options
context:
space:
mode:
authorParabola <dev@list.parabolagnulinux.org>2011-04-05 14:26:38 +0000
committerParabola <dev@list.parabolagnulinux.org>2011-04-05 14:26:38 +0000
commit415856bdd4f48ab4f2732996f0bae58595092bbe (patch)
treeede2018b591f6dfb477fe9341ba17b9bc000fab9 /core/procps/procps-3.2.7-top-env-cpuloop.patch
Tue Apr 5 14:26:38 UTC 2011
Diffstat (limited to 'core/procps/procps-3.2.7-top-env-cpuloop.patch')
-rw-r--r--core/procps/procps-3.2.7-top-env-cpuloop.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/core/procps/procps-3.2.7-top-env-cpuloop.patch b/core/procps/procps-3.2.7-top-env-cpuloop.patch
new file mode 100644
index 000000000..0034dcafb
--- /dev/null
+++ b/core/procps/procps-3.2.7-top-env-cpuloop.patch
@@ -0,0 +1,84 @@
+diff -up procps-3.2.7/top.c.p15 procps-3.2.7/top.c
+--- procps-3.2.7/top.c.p15 2008-09-01 11:37:51.000000000 +0200
++++ procps-3.2.7/top.c 2008-09-01 11:37:51.000000000 +0200
+@@ -121,6 +121,7 @@ static int No_ksyms = -1, // set t
+ Batch = 0, // batch mode, collect no input, dumb output
+ Loops = -1, // number of iterations, -1 loops forever
+ Secure_mode = 0; // set if some functionality restricted
++static int CPU_loop = 0; // wait for reliable CPU data
+
+ /* Some cap's stuff to reduce runtime calls --
+ to accomodate 'Batch' mode, they begin life as empty strings */
+@@ -1679,6 +1680,9 @@ static void before (char *me)
+ Fieldstab[P_PPD].fmts = pid_fmt;
+ Fieldstab[P_PPD].head = " PPID" + 10 - pid_digits;
+ }
++
++ if (( getenv("CPULOOP")) && ( atoi(getenv("CPULOOP")) == 1 ))
++ CPU_loop = 1;
+ }
+
+
+@@ -2978,6 +2981,7 @@ static proc_t **summary_show (void)
+ {
+ static proc_t **p_table = NULL;
+ static CPU_t *smpcpu = NULL;
++ static int first = 0;
+
+ // whoa first time, gotta' prime the pump...
+ if (!p_table) {
+@@ -3025,6 +3029,28 @@ static proc_t **summary_show (void)
+
+ smpcpu = cpus_refresh(smpcpu);
+
++ if (first==0 && CPU_loop)
++ {
++ int i;
++ CPU_t *cpu;
++ for (i = 0; i < Cpu_tot; i++) {
++ cpu = &smpcpu[i];
++ cpu->u_sav = cpu->u;
++ cpu->s_sav = cpu->s;
++ cpu->n_sav = cpu->n;
++ cpu->i_sav = cpu->i;
++ cpu->w_sav = cpu->w;
++ cpu->x_sav = cpu->x;
++ cpu->y_sav = cpu->y;
++ cpu->z_sav = cpu->z;
++ }
++ tv.tv_sec = Rc.delay_time;
++ tv.tv_usec = (Rc.delay_time - (int)Rc.delay_time) * 1000000;
++ select(0, NULL, NULL, NULL, &tv);
++
++ smpcpu = cpus_refresh(smpcpu);
++ }
++
+ if (CHKw(Curwin, View_CPUSUM)) {
+ // display just the 1st /proc/stat line
+ summaryhlp(&smpcpu[Cpu_tot], "Cpu(s):");
+@@ -3050,6 +3076,8 @@ static proc_t **summary_show (void)
+ }
+
+ SETw(Curwin, NEWFRAM_cwo);
++
++ first = 1;
+ return p_table;
+ }
+
+diff -up procps-3.2.7/top.1.p15 procps-3.2.7/top.1
+--- procps-3.2.7/top.1.p15 2008-09-01 11:37:51.000000000 +0200
++++ procps-3.2.7/top.1 2008-09-01 11:37:51.000000000 +0200
+@@ -1183,6 +1183,13 @@ Then ponder this:
+ Send bug reports to:
+ Albert D\. Cahalan, <albert@users.sf.net>
+
++The top command calculates Cpu(s) by looking at the change in CPU time values
++between samples. When you first run it, it has no previous sample to compare
++to, so these initial values are the percentages since boot. It means you need
++at least two loops or you have to ignore summary output from the first loop.
++This is problem for example for batch mode. There is a possible workaround if
++you define the CPULOOP=1 environment variable. The top command will be run one
++extra hidden loop for CPU data before standard output.
+
+ .\" ----------------------------------------------------------------------
+ .SH 8. HISTORY Former top