diff options
author | Rasmus Villemoes <linux@rasmusvillemoes.dk> | 2015-02-12 18:01:48 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-12 21:54:13 -0500 |
commit | 84b9fbedf54a6ea4fba62ef8a167138233586ad3 (patch) | |
tree | 33e86741e9cab9ef7c66817ce54b3d0b49e36dc5 /lib/string_helpers.c | |
parent | 7eed8fde021b4e169e325e5f50d9f12320668bf2 (diff) |
lib/string_helpers.c:string_get_size(): use 32 bit arithmetic when possible
The remainder from do_div is always a u32, and after size has been reduced
to be below 1000 (or 1024), it certainly fits in u32. So both remainder
and sf_cap can be made u32s, the format specifiers can be simplified (%lld
wasn't the right thing to use for _unsigned_ long long anyway), and we can
replace a do_div with an ordinary 32/32 bit division.
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib/string_helpers.c')
-rw-r--r-- | lib/string_helpers.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/lib/string_helpers.c b/lib/string_helpers.c index 0d25f7aa732c..2b3757f84b3b 100644 --- a/lib/string_helpers.c +++ b/lib/string_helpers.c | |||
@@ -42,7 +42,7 @@ int string_get_size(u64 size, const enum string_size_units units, | |||
42 | [STRING_UNITS_2] = 1024, | 42 | [STRING_UNITS_2] = 1024, |
43 | }; | 43 | }; |
44 | int i, j; | 44 | int i, j; |
45 | u64 remainder = 0, sf_cap; | 45 | u32 remainder = 0, sf_cap; |
46 | char tmp[8]; | 46 | char tmp[8]; |
47 | 47 | ||
48 | tmp[0] = '\0'; | 48 | tmp[0] = '\0'; |
@@ -59,14 +59,13 @@ int string_get_size(u64 size, const enum string_size_units units, | |||
59 | 59 | ||
60 | if (j) { | 60 | if (j) { |
61 | remainder *= 1000; | 61 | remainder *= 1000; |
62 | do_div(remainder, divisor[units]); | 62 | remainder /= divisor[units]; |
63 | snprintf(tmp, sizeof(tmp), ".%03lld", | 63 | snprintf(tmp, sizeof(tmp), ".%03u", remainder); |
64 | (unsigned long long)remainder); | ||
65 | tmp[j+1] = '\0'; | 64 | tmp[j+1] = '\0'; |
66 | } | 65 | } |
67 | } | 66 | } |
68 | 67 | ||
69 | snprintf(buf, len, "%lld%s %s", (unsigned long long)size, | 68 | snprintf(buf, len, "%u%s %s", (u32)size, |
70 | tmp, units_str[units][i]); | 69 | tmp, units_str[units][i]); |
71 | 70 | ||
72 | return 0; | 71 | return 0; |