diff options
author | Martin Michlmayr <tbm@cyrius.com> | 2012-10-04 17:11:25 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-06 03:04:37 +0900 |
commit | 0f6d93aa9d96cc9022b51bd10d462b03296be146 (patch) | |
tree | 85776a4c9b1602646405fd7f5f4c336824b2b0f6 /include/linux/init.h | |
parent | 82e54a6aaf8aec971fb16afa3a4404e238a1b98b (diff) | |
download | linux-stable-0f6d93aa9d96cc9022b51bd10d462b03296be146.tar.gz linux-stable-0f6d93aa9d96cc9022b51bd10d462b03296be146.tar.bz2 linux-stable-0f6d93aa9d96cc9022b51bd10d462b03296be146.zip |
drivers/scsi/atp870u.c: fix bad use of udelay
The ACARD driver calls udelay() with a value > 2000, which leads to to
the following compilation error on ARM:
ERROR: "__bad_udelay" [drivers/scsi/atp870u.ko] undefined!
make[1]: *** [__modpost] Error 1
This is because udelay is defined on ARM, roughly speaking, as
#define udelay(n) ((n) > 2000 ? __bad_udelay() : \
__const_udelay((n) * ((2199023U*HZ)>>11)))
The argument to __const_udelay is the number of jiffies to wait divided
by 4, but this does not work unless the multiplication does not
overflow, and that is what the build error is designed to prevent. The
intended behavior can be achieved by using mdelay to call udelay
multiple times in a loop.
[jrnieder@gmail.com: adding context]
Signed-off-by: Martin Michlmayr <tbm@cyrius.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/init.h')
0 files changed, 0 insertions, 0 deletions