Comment 80 for bug 362875

Revision history for this message
Jay Foster (jayf0ster) wrote :

I have experienced this bug on a non Ubuntu system for some time. I spent some time comparing the SparkLAN DPO driver source with the main line kernel driver source and tried a couple of changes.

1) There were some places missing a lock (this change did not affect this bug, however).
2) The DPO driver performed the 32-bit register writes as two 16-bit single write commands instead of one four byte multi-write command. I suspected that this might lead to race conditions setting the registers (not atomic) which was causing the Wi-Fi chip to hang. I thought it possible that the Wi-Fi chip firmware might buffer the two 16-bit single writes and then perform a single 32-bit write to the register, thus making it atomic. I asked SparkLAN about this, but received no reply. Note that the DPO driver performs the 32-bit register reads as a single four byte multi-read, just like the main line kernel driver does.

I tested the following patch and the problem went away, either because it fixes the issue or it changes the timing to cover it up. Perhaps a distinction without a difference.