drivers/scsi/atp870u.c: fix bad use of udelay
authorMartin Michlmayr <[email protected]>
Fri, 5 Oct 2012 00:11:25 +0000 (17:11 -0700)
committerLinus Torvalds <[email protected]>
Fri, 5 Oct 2012 18:04:37 +0000 (03:04 +0900)
commit0f6d93aa9d96cc9022b51bd10d462b03296be146
tree85776a4c9b1602646405fd7f5f4c336824b2b0f6
parent82e54a6aaf8aec971fb16afa3a4404e238a1b98b
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.

[[email protected]: adding context]
Signed-off-by: Martin Michlmayr <[email protected]>
Signed-off-by: Jonathan Nieder <[email protected]>
Cc: James Bottomley <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
drivers/scsi/atp870u.c