Messages in this thread | | | Subject | Re: [PATCH 3/5] sched/deadline: Use __sub_running_bw() throughout dl_change_utilization() | From | Dietmar Eggemann <> | Date | Mon, 29 Jul 2019 18:21:55 +0100 |
| |
On 7/29/19 5:47 PM, Peter Zijlstra wrote: > On Fri, Jul 26, 2019 at 09:27:54AM +0100, Dietmar Eggemann wrote: >> dl_change_utilization() has a BUG_ON() to check that no schedutil >> kthread (sugov) is entering this function. So instead of calling >> sub_running_bw() which checks for the special entity related to a >> sugov thread, call the underlying function __sub_running_bw(). >> >> Signed-off-by: Dietmar Eggemann <dietmar.eggemann@arm.com> >> --- >> kernel/sched/deadline.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c >> index 99d4c24a8637..1fa005f79307 100644 >> --- a/kernel/sched/deadline.c >> +++ b/kernel/sched/deadline.c >> @@ -164,7 +164,7 @@ void dl_change_utilization(struct task_struct *p, u64 new_bw) >> >> rq = task_rq(p); >> if (p->dl.dl_non_contending) { >> - sub_running_bw(&p->dl, &rq->dl); >> + __sub_running_bw(p->dl.dl_bw, &rq->dl); >> p->dl.dl_non_contending = 0; >> /* >> * If the timer handler is currently running and the > > I'm confused; the only called of dl_change_utilization() is > sched_dl_overflow(), and that already checks FLAG_SUGOV and exits before > calling.
That's right. There is even a BUG_ON(p->dl.flags & SCHED_FLAG_SUGOV) at the beginning of dl_change_utilization().
> So how can this matter?
We save the 'if (!dl_entity_is_special(dl_se))' from sub_running_bw() when we call __sub_running_bw() since we know it can't be a special task.
Later in dl_change_utilization() we already use the inner bw accounting functions __sub_rq_bw() and __add_rq_bw().
| |