Hello. Peter Zijlstra wrote: > > Can I sleep between rcu_read_lock() and rcu_read_unlock() ? > > As far as I saw, rcu_read_lock() makes in_atomic() true, so I think I can't > > sleep. > You can indeed not sleep in an rcu_read_lock() section. However, you > could grab a reference on an item, stop the iteration, drop > rcu_read_lock. Do you thing, re-acquire rcu_read_lock(), drop the ref, > and continue the iteration.
Something like this? rcu_read_lock(); list_for_each_rcu(p, ...) { ptr = list_entry(p, struct ..., list); /* Grab a reference to "ptr". */ rcu_read_unlock(); my_task_that_may_sleep(ptr); rcu_read_lock(); /* Drop a reference to "ptr". */ } rcu_read_unlock(); Regarding my case, memory region pointed by "ptr" never be removed. Do I need to grab a reference to "ptr" ? Regards. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/