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 <[email protected]> Signed-off-by: Will Deacon <[email protected]> --- arch/openrisc/lib/delay.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/openrisc/lib/delay.c b/arch/openrisc/lib/delay.c index 01d9740..0c12407 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); } -- 1.7.4.1 _______________________________________________ Linux mailing list [email protected] http://lists.openrisc.net/listinfo/linux
