Browse Source

openrisc: delay: fix loops calculation for __const_udelay

The openrisc implementation of __const_udelay casts the result of a
32-bit multiplication to 64 bits and passes the top 32 bits to __delay.
Since there are no casts on the arguments, this results in a __delay of
zero, regardless of the xloops parameter.

This patch fixes the problem by casting xloops to (unsigned long long),
ensuring that the multiplication is not truncated.

Cc: Jon Masters <jcm@redhat.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Jonas Bonn <jonas@southpole.se>
Will Deacon 13 years ago
parent
commit
439164663e
1 changed files with 1 additions and 1 deletions
  1. 1 1
      arch/openrisc/lib/delay.c

+ 1 - 1
arch/openrisc/lib/delay.c

@@ -41,7 +41,7 @@ inline void __const_udelay(unsigned long xloops)
 {
 	unsigned long long loops;
 
-	loops = xloops * loops_per_jiffy * HZ;
+	loops = (unsigned long long)xloops * loops_per_jiffy * HZ;
 
 	__delay(loops >> 32);
 }