Messages in this thread | | | Date | Wed, 2 Mar 2011 14:41:08 -0800 | From | "Paul E. McKenney" <> | Subject | Re: [PATCH RFC tip/core/rcu 11/11] rcu: move TREE_RCU from softirq to kthread |
| |
On Tue, Mar 01, 2011 at 04:07:03PM -0800, Paul E. McKenney wrote: > On Tue, Mar 01, 2011 at 03:38:11PM +0100, Peter Zijlstra wrote: > > On Mon, 2011-02-28 at 16:13 -0800, Paul E. McKenney wrote:
[ . . . ]
> > wait_event() will only actually wait if the condition is false, in the > > start-up case above it will find the condition true and fall right > > through to do stuff. > > So as long as it is OK to call sched_setscheduler_nocheck() before > the kthread is first awakened, we should be OK.
So the softlockup code kills me when I do it this way. Or can kill me. From what I can se the problem is that it might be the case that no one needs a particular RCU kthread for some time. In addition, if the kthread has not yet done the wait_event(), wake_up() won't know to wake it up. The flag gets set, and all zero of the tasks blocked on the event's queue are awakened, but the not-yet-awakened task still sleeps because it has not yet done the wait_event().
So I am falling back to waking each thread up just after creation so that they can be safely parked regardless of who needs which kthread at what time in the future.
On the other hand, making these changes and testing them helped me find and fix a number of subtle and not-so-subtle bugs in the TREE_RCU priority boosting code, so I most certainly cannot argue with the outcome! ;-)
Thanx, Paul
| |