lkml.org 
[lkml]   [2002]   [Aug]   [22]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subject[PATCH]: fix 32bits integer overflow in loops_per_jiffy calculation
FromYoann Vandoorselaere <>
Date22 Aug 2002 11:50:40 +0200
Hi,

The "low_part * mult" multiplication of the old function may overflow a
32bits integer...

This patch both fix the overflow issue (tested with frequencies up to
20Ghz), and make the result of the function lose less precision.

Please apply, 

-- 
Yoann Vandoorselaere, http://www.prelude-ids.org

"Programming is a race between programmers, who try and make more and 
 more idiot-proof software, and universe, which produces more and more 
 remarkable idiots. Until now, universe leads the race"  -- R. Cook
--- linux-benh/kernel/cpufreq.c	2002-08-21 17:27:52.000000000 +0200
+++ linux-yoann/kernel/cpufreq.c	2002-08-22 11:27:09.000000000 +0200
@@ -78,14 +78,16 @@ static unsigned int             cpufreq_
  */
 static unsigned long scale(unsigned long old, u_int div, u_int mult)
 {
-	unsigned long low_part, high_part;
-
-	high_part  = old / div;
-	low_part   = (old % div) / 100;
-	high_part *= mult;
-	low_part   = low_part * mult / div;
-
-	return high_part + low_part * 100;
+        unsigned long val, carry = 0;
+        
+        mult /= 100;
+        div  /= 100;
+        val = old / div * mult;
+
+        carry = old % div;
+        carry = carry * mult / div;
+                
+        return val + carry;
 }
 
 
\
 
 \ /
  Last update: 2005-03-22 12:28    [from the cache]
©2003-2008