Re: [PATCH RFC tip/core/rcu 11/11] rcu: move TREE_RCU from softirqto kthread

From: Paul E. McKenney
Date: Wed Mar 02 2011 - 17:41:21 EST


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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/