On Tue, 24 Apr 2012 02:49:16 -0500 Jonathan Nieder <jrnieder@xxxxxxxxx> wrote: > From: Martin Michlmayr <tbm@xxxxxxxxxx> > > 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 > > ... > > --- a/drivers/scsi/atp870u.c > +++ b/drivers/scsi/atp870u.c > @@ -1173,7 +1173,16 @@ wait_io1: > outw(val, tmport); > outb(2, 0x80); > TCM_SYNC: > - udelay(0x800); > + /* > + * The funny division into multiple delays is to accomodate > + * arches like ARM where udelay() multiplies its argument by > + * a large number to initialize a loop counter. To avoid > + * overflow, the maximum supported udelay is 2000 microseconds. > + * > + * XXX it would be more polite to find a way to use msleep() > + */ > + mdelay(2); > + udelay(48); > if ((inb(tmport) & 0x80) == 0x00) { /* bsy ? */ > outw(0, tmport--); > outb(0, tmport); Fair enough, I say. Looking at this driver, I do think it's best to minimally fix the build and then tiptoe away very delicately lest something explode. That being said, I'm glad the kernel has a function called "fun_scam". -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html