File procps-ng-3.3.8-accuracy.dif of Package procps

--- ps/common.h
+++ ps/common.h	2012-06-01 15:30:43.880009972 +0000
@@ -302,6 +302,7 @@ extern int             running_only;
 extern int             screen_cols;
 extern int             screen_rows;
 extern time_t          seconds_since_boot;
+extern unsigned long long jiffies_since_boot;
 extern selection_node *selection_list;
 extern unsigned        simple_select;
 extern sort_node      *sort_list;
--- ps/global.c
+++ ps/global.c	2012-06-01 15:32:10.488010283 +0000
@@ -79,6 +79,7 @@ int             prefer_bsd_defaults = -1
 int             screen_cols = -1;
 int             screen_rows = -1;
 time_t          seconds_since_boot = -1;
+unsigned long long  jiffies_since_boot = -1;
 selection_node *selection_list = (selection_node *)0xdeadbeef;
 unsigned        simple_select = 0xffffffff;
 sort_node      *sort_list = (sort_node *)0xdeadbeef; /* ready-to-use sort list */
@@ -369,6 +370,7 @@ static const char *set_personality(void)
 /************ Call this to reinitialize everything ***************/
 void reset_global(void){
   static proc_t p;
+  double uptime_secs;
   reset_selection_list();
   look_up_our_self(&p);
   set_screen_size();
@@ -392,7 +394,8 @@ void reset_global(void){
   negate_selection      = 0;
   page_size             = getpagesize();
   running_only          = 0;
-  seconds_since_boot    = uptime(0,0);
+  seconds_since_boot    = uptime(&uptime_secs,0);
+  jiffies_since_boot	= ((long double)uptime_secs * Hertz);
   selection_list        = NULL;
   simple_select         = 0;
   sort_list             = NULL;
--- ps/output.c
+++ ps/output.c	2013-05-29 11:17:11.345438367 +0000
@@ -128,6 +128,7 @@ static int sr_ ## NAME (const proc_t* P,
 #define cook_time(P) (P->utime + P->stime) / Hertz
 
 #define cook_etime(P) (((unsigned long long)seconds_since_boot >= (P->start_time / Hertz)) ? ((unsigned long long)seconds_since_boot - (P->start_time / Hertz)) : 0)
+#define cook_jtime(P) (((unsigned long long)jiffies_since_boot >= (P->start_time / Hertz)) ? ((unsigned long long)jiffies_since_boot - (P->start_time / Hertz)) : 0)
 
 #define CMP_COOKED_TIME(NAME) \
 static int sr_ ## NAME (const proc_t* P, const proc_t* Q) { \
@@ -477,11 +478,11 @@ static int pr_etimes(char *restrict cons
 static int pr_c(char *restrict const outbuf, const proc_t *restrict const pp){
   unsigned long long total_time;   /* jiffies used by this process */
   unsigned pcpu = 0;               /* scaled %cpu, 99 means 99% */
-  unsigned long long seconds;      /* seconds of process life */
+  unsigned long long jiffies;      /* jiffies of process life */
   total_time = pp->utime + pp->stime;
   if(include_dead_children) total_time += (pp->cutime + pp->cstime);
-  seconds = cook_etime(pp);
-  if(seconds) pcpu = (total_time * 100ULL / Hertz) / seconds;
+  jiffies = cook_jtime(pp);
+  if(jiffies) pcpu = (total_time * 100ULL / Hertz) / jiffies;
   if (pcpu > 99U) pcpu = 99U;
   return snprintf(outbuf, COLWID, "%2u", pcpu);
 }
@@ -489,11 +490,11 @@ static int pr_c(char *restrict const out
 static int pr_pcpu(char *restrict const outbuf, const proc_t *restrict const pp){
   unsigned long long total_time;   /* jiffies used by this process */
   unsigned pcpu = 0;               /* scaled %cpu, 999 means 99.9% */
-  unsigned long long seconds;      /* seconds of process life */
+  unsigned long long jiffies;      /* jiffies of process life */
   total_time = pp->utime + pp->stime;
   if(include_dead_children) total_time += (pp->cutime + pp->cstime);
-  seconds = cook_etime(pp);
-  if(seconds) pcpu = (total_time * 1000ULL / Hertz) / seconds;
+  jiffies = cook_jtime(pp);
+  if(jiffies) pcpu = (total_time * 1000ULL / Hertz) / jiffies;
   if (pcpu > 999U)
     return snprintf(outbuf, COLWID, "%u", pcpu/10U);
   return snprintf(outbuf, COLWID, "%u.%u", pcpu/10U, pcpu%10U);
@@ -502,11 +503,11 @@ static int pr_pcpu(char *restrict const
 static int pr_cp(char *restrict const outbuf, const proc_t *restrict const pp){
   unsigned long long total_time;   /* jiffies used by this process */
   unsigned pcpu = 0;               /* scaled %cpu, 999 means 99.9% */
-  unsigned long long seconds;      /* seconds of process life */
+  unsigned long long jiffies;      /* jiffies of process life */
   total_time = pp->utime + pp->stime;
   if(include_dead_children) total_time += (pp->cutime + pp->cstime);
-  seconds = cook_etime(pp);
-  if(seconds) pcpu = (total_time * 1000ULL / Hertz) / seconds;
+  jiffies = cook_jtime(pp);
+  if(jiffies) pcpu = (total_time * 1000ULL / Hertz) / jiffies;
   if (pcpu > 999U) pcpu = 999U;
   return snprintf(outbuf, COLWID, "%3u", pcpu);
 }
openSUSE Build Service is sponsored by