Re: [PATCH] sched/deadline/rtmutex: Fix a PI crash for deadline tasks
From: Steven Rostedt
Date: Fri Apr 08 2016 - 14:51:03 EST
On Fri, 8 Apr 2016 19:38:35 +0200
Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
> On Fri, Apr 08, 2016 at 12:25:10PM -0400, Steven Rostedt wrote:
>
> > So the preempt_disable() is to allow us to set current back to its
> > normal priority first before waking up the other task because we don't
> > want two tasks at the same priority?
>
> > What's the point of swapping deboost and the wake up again?
>
> In the context of this patch, it ensures the new pi_task pointer points
> to something that exists -- this is a rather useful property for a
> pointer to have.
It's not clear to what would make the new pi_task pointer object no
longer exist from this patch. I take it that waking up the wake_q, will
cause something to change in the code of rt_mutex_adjust_prio(current).
If so, it should probably be stated in a comment, because nothing is
obvious here.
>
> It furthermore guarantees that it points to a blocked task, another
> useful property.
I would think that the slowfn() would have removed anything to do with
what's on the wake_q removed from current. What task on what pointer.
I'm only looking at this current patch, not anything to do with the
original patch of this thread. That is, just the swap of waking up
wake_q and calling rt_mutex_adjust_prio().
>
> > Maybe I'm missing something, what exactly do you mean by "same state"?
>
> So the whole point of boosting is to donate the waiters eligibility to
> run to the lock owner. Semantically it is very poor to have two tasks
> run based on this one eligibility.
>
> And for pure priority inheritance it doesn't go further than that.
>
> But now consider we want to implement things like bandwidth inheritance,
> where the lock owner actively consumes the runtime budget of the waiter,
> then it is very important to not have any overlap on the budget usage.
If the two tasks (current and the wakee) are on two different CPUs, the
bandwidth charge does make better sense. Again, perhaps a bit more
explanation in the comment would help, as "state" is too generic of a
term to get anything from it.
-- Steve