On 20/10/21 12:02, Wanpeng Li wrote:
+#ifdef CONFIG_PREEMPT_RCU
+ /* The cost of rcu_read_lock() is nontrivial for preemptable RCU. */
+ if (!rcuwait_active(w))
+ return ret;
+#endif
+
+ rcu_read_lock();
+
task = rcu_dereference(w->task);
if (task)
ret = wake_up_process(task);
(If you don't, rcu_read_lock is essentially preempt_disable() and it
should not have a large overhead). You still need the memory barrier
though, in order to avoid missed wakeups; shameless plug for my
article athttps://lwn.net/Articles/847481/.
You are right, the cost of rcu_read_lock() for preemptable RCU
introduces too much overhead, do you want to send a separate patch?
Yes, I'll take care of this. Thanks!
Paolo