openrisc: delay: fix handling of counter overflow
authorWill Deacon <will.deacon@arm.com>
Tue, 7 Aug 2012 16:59:54 +0000 (17:59 +0100)
committerJonas Bonn <jonas@southpole.se>
Sat, 1 Sep 2012 14:36:14 +0000 (16:36 +0200)
commit807607f79b9d0ed81561746e4e1121905e75cf0f
treea598d8169609168392d010c5d315318448df2498
parent439164663e5d1753360ff84ea4d5c598459e5d50
openrisc: delay: fix handling of counter overflow

If the counter overflows during a __delay operation, we will exit the
loop prematurely. For example, calling __delay(0x100) with the counter
at 0xffffff00 gives us a target of 0x0. The unsigned comparison in the
while loop will likely be false on the first iteration (if the counter
is now anything other than 0) and we will return early.

This patch fixes the problem by comparing deltas in the loop rather than
absolute values.

Cc: Jon Masters <jcm@redhat.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Jonas Bonn <jonas@southpole.se>
arch/openrisc/lib/delay.c