Author: ken
Date: Fri Apr 19 03:55:54 2013
New Revision: 249632
URL: http://svnweb.freebsd.org/changeset/base/249632

Log:
  MFC r249334 and r249384:
  
    ------------------------------------------------------------------------
    r249334 | ken | 2013-04-10 10:01:45 -0600 (Wed, 10 Apr 2013) | 11 lines
  
    Fix a time calculation error in ctlstat_standard().
  
    ctlstat.c:  When converting a timeval to a floating point
                number in ctlstat_standard(), cast the nanoseconds
                calculation to a long double, so we don't lose
                precision.  Without the cast, we wind up with a
                time in whole seconds only.
  
    Sponsored by:   Spectra Logic
    ------------------------------------------------------------------------
    r249384 | ken | 2013-04-11 15:18:04 -0600 (Thu, 11 Apr 2013) | 17 lines
  
    Fix bugs in the elapsed time calculation in ctlstat_standard()
    pointed out by bde:
  
    - Casting to long double isn't needed.
    - The division isn't needed, multiplication can be used.
      "When 1 nanosecond is in a floating point literal, the whole
      expression is automatically promoted correctly."
    - non-KNF indentation (1 tab) for the newly split line
    - different non-KNF indentation (5 spaces) for the previously split
      line
    - exessive parentheses around the division operation
    - bogus blank line which splits up the etime initialization
    - general verboseness from the above.
  
    Submitted by:   bde
  
  Sponsored by: Spectra Logic

Modified:
  stable/9/usr.bin/ctlstat/ctlstat.c
Directory Properties:
  stable/9/usr.bin/ctlstat/   (props changed)

Modified: stable/9/usr.bin/ctlstat/ctlstat.c
==============================================================================
--- stable/9/usr.bin/ctlstat/ctlstat.c  Fri Apr 19 00:30:52 2013        
(r249631)
+++ stable/9/usr.bin/ctlstat/ctlstat.c  Fri Apr 19 03:55:54 2013        
(r249632)
@@ -404,7 +404,7 @@ ctlstat_json(struct ctlstat_context *ctx
 
 static void
 ctlstat_standard(struct ctlstat_context *ctx) {
-       long double cur_secs, prev_secs, etime;
+       long double etime;
        uint64_t delta_jiffies, delta_idle;
        uint32_t port;
        long double cpu_percentage;
@@ -416,11 +416,8 @@ ctlstat_standard(struct ctlstat_context 
        if (F_CPU(ctx) && (getcpu(&ctx->cur_cpu) != 0))
                errx(1, "error returned from getcpu()");
 
-       cur_secs = ctx->cur_time.tv_sec + (ctx->cur_time.tv_nsec / 1000000000);
-       prev_secs = ctx->prev_time.tv_sec +
-            (ctx->prev_time.tv_nsec / 1000000000);
-
-       etime = cur_secs - prev_secs;
+       etime = ctx->cur_time.tv_sec - ctx->prev_time.tv_sec +                  
+           (ctx->prev_time.tv_nsec - ctx->cur_time.tv_nsec) * 1e-9; 
 
        if (F_CPU(ctx)) {
                ctx->prev_total_jiffies = ctx->cur_total_jiffies;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to