On Friday 08 August 2008, Segher Boessenkool wrote: > > I don't know yet for sure what happens, but a quick look at the commit > > seems to show that the driver synchronously spin-waits for up to 2.5ms > > That's what the comment says, but the code says 2.5 _seconds_: > > + /* Wait for up to 2.5 milliseconds */ > + for (i = 0; i < 250000; i++) { > + if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT)) > + break; > + udelay(10); > + } > > (not that milliseconds wouldn't be bad already...)
It can potentially be even much longer, because each udelay will wait for *more* than 10 microseconds, and tr32() is an mmio read that takes additional time, possibly in the order of microseconds as well. The correct way to implement a timeout like this would be to use time_before() in the condition, aside from better not doing a busy-loop in the first place. Arnd <>< _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev