Skip to content
  • Martin Michlmayr's avatar
    drivers/scsi/atp870u.c: fix bad use of udelay · 0f6d93aa
    Martin Michlmayr authored
    
    
    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: default avatarMartin Michlmayr <tbm@cyrius.com>
    Signed-off-by: default avatarJonathan Nieder <jrnieder@gmail.com>
    Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    0f6d93aa