Greg, Don't get scared. :-)
As showed by Eduardo Habkost some days ago, the spin lock 'lock' in the struct 'usb_serial_port' is being used by some USB serial drivers to protect the access to the 'write_urb_busy' member of the same struct. The spin lock however, is needless: we can change 'write_urb_busy' type to be atomic_t and remove all the spin lock usage. The following patch series does that. It introduces a very simple URB write lock abstraction and four macros to do the same job currently done by the spin lock. The final result is a simpler and easy to read/understand code, with no spin lock at all. I've splited the work that way: the frist patch introduces the new macros; from the second patch until the eight all the drivers are ported; patch nine removes the 'lock' member from the usb-serial driver and patch ten adds the write URB lock initialization for all the ports. An important note is about the omninet driver. In its omninet_write_room() method, it's accessing the 'write_urb_busy' member from the 'serial->port[1]' port, and _not_ from the usb_serial_port passed as its argument. I have no sure if it is right, but my port does perserve that semantic. As I don't have any of the changed drivers, I have only made the compilation test. Would be good to hold the patches in -mm for a while. A final note: all the patches have been made with my usb-serial fixes (which are already in your tree) applyed. They are: usbserial-adds-missing-checks-and-bug-fix.patch usbserial-race-condition-fix.patch Thank you, -- Luiz Fernando N. Capitulino ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel