Thread (9 messages) flat view 9 messages, 4 authors, 2012-11-20
DORMANTno replies

[PATCH 3/4] i2c-s3c2410: use exponential back off while polling for bus idle

From: Mark Brown <hidden>
Date: 2012-11-20 09:10:59
Also in: linux-i2c, linux-samsung-soc

On Tue, Nov 20, 2012 at 04:57:16PM +0800, Daniel Kurtz wrote:
On Tue, Nov 20, 2012 at 12:49 PM, Mark Brown
quoted
On the hardware I was using when I wrote the original code here we were
hitting 1-2 spins often enough to be interesting - starting off with a
direct busy wait was definitely useful when doing large batches of I/O,
especially compared to sleeps which might cause us to schedule.
We check the status first to avoid any sleep()/schedule() in the case,
that the CPU is slower than I2C transaction.
Right, but this only works if we hit this on the very first spin.
Remember, this loop only happens after the event_wait loop has been
woken up by the i2c irq.
Duh.
Since you are talking about hitting a tiny window of time at some
arbitrary point after an irq, the CPU time to this point & I2C
finishing would have to be very precisely aligned for the 1-2 loops
(at CPU clock rate) to matter.
On some systems that can happen enormously reliably, finger in the air
it's your fast case on the A15s you're playing with scaled down to a
much slower CPU.  The 20 spins I was setting the loop to was a massive
overestimate for conservativism but more than 1 was common enough, IIRC
spinning 5 times would have covered essentially everything.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121120/8c42a44d/attachment-0001.sig>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help