diff options
author | Mel Gorman <mgorman@suse.de> | 2014-08-06 09:19:18 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-08-06 15:17:44 -0400 |
commit | ae77930060338226a4377d3b93580c43b5ec82ae (patch) | |
tree | 161b93ae479de6e0cea6007e9b01819287cc82fc | |
parent | dd38c9d35ba8e40011b36659cae2719aefd11904 (diff) |
cpuidle: menu: Use shifts when calculating averages where possible
We use do_div even though the divisor will usually be a power-of-two
unless there are unusual outliers. Use shifts where possible
Signed-off-by: Mel Gorman <mgorman@suse.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r-- | drivers/cpuidle/governors/menu.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c index c3732fa74f82..c36e1ea7ef08 100644 --- a/drivers/cpuidle/governors/menu.c +++ b/drivers/cpuidle/governors/menu.c | |||
@@ -31,7 +31,8 @@ | |||
31 | * The default values do not overflow. | 31 | * The default values do not overflow. |
32 | */ | 32 | */ |
33 | #define BUCKETS 12 | 33 | #define BUCKETS 12 |
34 | #define INTERVALS 8 | 34 | #define INTERVAL_SHIFT 3 |
35 | #define INTERVALS (1UL << INTERVAL_SHIFT) | ||
35 | #define RESOLUTION 1024 | 36 | #define RESOLUTION 1024 |
36 | #define DECAY 8 | 37 | #define DECAY 8 |
37 | #define MAX_INTERESTING 50000 | 38 | #define MAX_INTERESTING 50000 |
@@ -227,7 +228,10 @@ again: | |||
227 | max = value; | 228 | max = value; |
228 | } | 229 | } |
229 | } | 230 | } |
230 | do_div(avg, divisor); | 231 | if (divisor == INTERVALS) |
232 | avg >>= INTERVAL_SHIFT; | ||
233 | else | ||
234 | do_div(avg, divisor); | ||
231 | 235 | ||
232 | /* Then try to determine standard deviation */ | 236 | /* Then try to determine standard deviation */ |
233 | stddev = 0; | 237 | stddev = 0; |
@@ -238,7 +242,11 @@ again: | |||
238 | stddev += diff * diff; | 242 | stddev += diff * diff; |
239 | } | 243 | } |
240 | } | 244 | } |
241 | do_div(stddev, divisor); | 245 | if (divisor == INTERVALS) |
246 | stddev >>= INTERVAL_SHIFT; | ||
247 | else | ||
248 | do_div(stddev, divisor); | ||
249 | |||
242 | /* | 250 | /* |
243 | * The typical interval is obtained when standard deviation is small | 251 | * The typical interval is obtained when standard deviation is small |
244 | * or standard deviation is small compared to the average interval. | 252 | * or standard deviation is small compared to the average interval. |