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 <mgor...@suse.de>
---
 drivers/cpuidle/governors/menu.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index c4f80c1..801b2ee 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -31,7 +31,8 @@
  * The default values do not overflow.
  */
 #define BUCKETS 12
-#define INTERVALS 8
+#define INTERVAL_SHIFT 3
+#define INTERVALS (1UL << INTERVAL_SHIFT)
 #define RESOLUTION 1024
 #define DECAY 8
 #define MAX_INTERESTING 50000
@@ -228,7 +229,10 @@ again:
                                max = value;
                }
        }
-       do_div(avg, divisor);
+       if (divisor == INTERVALS)
+               avg >>= INTERVAL_SHIFT;
+       else
+               do_div(avg, divisor);
 
        /* Then try to determine standard deviation */
        stddev = 0;
@@ -239,7 +243,11 @@ again:
                        stddev += diff * diff;
                }
        }
-       do_div(stddev, divisor);
+       if (divisor == INTERVALS)
+               stddev >>= INTERVAL_SHIFT;
+       else
+               do_div(stddev, divisor);
+
        /*
         * The typical interval is obtained when standard deviation is small
         * or standard deviation is small compared to the average interval.
-- 
1.8.4.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to