Skip to content

Commit

Permalink
openrisc: delay: fix loops calculation for __const_udelay
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Will Deacon authored and Jonas Bonn committed Sep 1, 2012
1 parent fea7a08 commit 4391646
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion arch/openrisc/lib/delay.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

0 comments on commit 4391646

Please sign in to comment.