Andrea Arcangeli <aarca...@redhat.com> writes: > On Thu, Feb 14, 2019 at 04:07:37PM +0800, Huang, Ying wrote: >> Before, we choose to use stop_machine() to reduce the overhead of hot >> path (page fault handler) as much as possible. But now, I found >> rcu_read_lock_sched() is just a wrapper of preempt_disable(). So maybe >> we can switch to RCU version now. > > rcu_read_lock looks more efficient than rcu_read_lock_sched. So for > this purpose in the fast path rcu_read_lock()/unlock() should be the > preferred methods, no need to force preempt_disable() (except for > debug purposes if sleep debug is enabled). Server builds are done with > voluntary preempt (no preempt shouldn't even exist as config option) > and there rcu_read_lock might be just a noop.
If CONFIG_PREEMPT_VOLUNTARY=y CONFIG_PREEMPT=n CONFIG_PREEMPT_COUNT=n which is common for servers, rcu_read_lock() will be a noop, rcu_read_lock_sched() and preempt_disable() will be barrier(). So rcu_read_lock() is a little better. > Against a fast path rcu_read_lock/unlock before the consolidation > synchronize_rcu would have been enough, now after the consolidation > even more certain that it's enough because it's equivalent to _mult. Yes. Will change to rcu_read_lock/unlock based method. Best Regards, Huang, Ying