From 439164663e5d1753360ff84ea4d5c598459e5d50 Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Tue, 7 Aug 2012 17:59:53 +0100 Subject: [PATCH] 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 Signed-off-by: Will Deacon Signed-off-by: Jonas Bonn --- arch/openrisc/lib/delay.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); }