Messages in this thread | | | Date | Wed, 1 May 2013 11:10:12 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH v2 1/2] sched: Add cond_resched_rcu_lock() helper |
| |
On Tue, Apr 30, 2013 at 10:52:38AM +0300, Julian Anastasov wrote: > > Hello, > > On Tue, 30 Apr 2013, Simon Horman wrote: > > > > > +static void inline cond_resched_rcu_lock(void) > > > > +{ > > > > + if (need_resched()) { > > > > > > Ops, it should be without above need_resched. > > > > Thanks, to clarify, just this: > > > > static void inline cond_resched_rcu_lock(void) > > { > > rcu_read_unlock(); > > #ifndef CONFIG_PREEMPT_RCU > > cond_resched(); > > #endif > > rcu_read_lock(); > > } > > Yes, thanks!
OK, now I'm confused.. PREEMPT_RCU would preempt in any case, so why bother dropping rcu_read_lock() at all?
That is; the thing that makes sense to me is:
static void inline cond_resched_rcu_lock(void) { #ifdef CONFIG_PREEMPT_RCU if (need_resched()) { rcu_read_unlock(); cond_resched(); rcu_read_lock(); } #endif /* CONFIG_PREEMPT_RCU */ }
That would have an rcu_read_lock() break and voluntary preemption point for non-preemptible RCU and not bother with the stuff for preemptible RCU.
| |