浏览代码

lockstat: fix numerical output rounding error

Fix rounding error in /proc/lock_stat numerical output.

On occasion the two digit fractional part contains the three
digit value '100'.  This is due to a bug in the rounding algorithm
which pushes values in the range '95..99' to '100' rather than
to '00' + an increment to the integer part.  For example,

	- 123456.100      old display
	+ 123457.00	  new display

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Joe Korty 16 年之前
父节点
当前提交
2189459d25
共有 1 个文件被更改,包括 2 次插入1 次删除
  1. 2 1
      kernel/lockdep_proc.c

+ 2 - 1
kernel/lockdep_proc.c

@@ -472,8 +472,9 @@ static void snprint_time(char *buf, size_t bufsiz, s64 nr)
 {
 {
 	unsigned long rem;
 	unsigned long rem;
 
 
+	nr += 5; /* for display rounding */
 	rem = do_div(nr, 1000); /* XXX: do_div_signed */
 	rem = do_div(nr, 1000); /* XXX: do_div_signed */
-	snprintf(buf, bufsiz, "%lld.%02d", (long long)nr, ((int)rem+5)/10);
+	snprintf(buf, bufsiz, "%lld.%02d", (long long)nr, (int)rem/10);
 }
 }
 
 
 static void seq_time(struct seq_file *m, s64 time)
 static void seq_time(struct seq_file *m, s64 time)