On Wed, 13 Mar 2013 15:25:05 +0100 "Patrik, Kluba" <pkluba@xxxxxxxxxxx> wrote: > According to http://lwn.net/Articles/37889/ no sleeping functions > should be called inside an rcu_read_lock() region. No sleeping can > not be guaranteed for USB transfers. To correct myself: for synchronous USB transfers. usb_submit_urb() and friends are safe. Rewriting things in rtlwifi to do async transfers is a tremendous job, and might not help at all as the termination of the callback has still be waited under RCU. But how about something like this? rcu_read_lock(); sta = ... increase_reference_count(); rcu_read_unlock(); ... do all the might-sleeping things here ... decrease_reference_count_and_call_callback_if_necessary(); I have found an example for rcu_read_lock() + kref_get() here: https://lists.open-mesh.org/pipermail/b.a.t.m.a.n/2011-February/004234.html Regards, Patrik -- Patrik KLUBA Software Developer at DENSION Audio Systems Ltd. H-1116 Budapest, Sztregova u. 1 Phone: +36 1 463 0470 Fax: +36 1 463 0479 Web: www.dension.com -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html