summaryrefslogtreecommitdiffstats
path: root/arch/openrisc
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2012-08-07 18:59:53 +0200
committerJonas Bonn <jonas@southpole.se>2012-09-01 16:36:03 +0200
commit439164663e5d1753360ff84ea4d5c598459e5d50 (patch)
tree4356a81bb01d8ace51b721aa76ca41cb93f4cc28 /arch/openrisc
parentLinux 3.6-rc3 (diff)
downloadlinux-439164663e5d1753360ff84ea4d5c598459e5d50.tar.xz
linux-439164663e5d1753360ff84ea4d5c598459e5d50.zip
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>
Diffstat (limited to 'arch/openrisc')
-rw-r--r--arch/openrisc/lib/delay.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/openrisc/lib/delay.c b/arch/openrisc/lib/delay.c
index 01d9740ae6f3..0c12407d3d5c 100644
--- a/arch/openrisc/lib/delay.c
+++ b/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);
}