Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935644AbdCXNYW (ORCPT ); Fri, 24 Mar 2017 09:24:22 -0400 Received: from merlin.infradead.org ([205.233.59.134]:55186 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756717AbdCXNYO (ORCPT ); Fri, 24 Mar 2017 09:24:14 -0400 Date: Fri, 24 Mar 2017 14:23:51 +0100 From: Peter Zijlstra To: luca abeni Cc: linux-kernel@vger.kernel.org, Ingo Molnar , Juri Lelli , Claudio Scordino , Steven Rostedt , Tommaso Cucinotta , Daniel Bristot de Oliveira , Joel Fernandes , Mathieu Poirier Subject: Re: [RFC v5 2/9] sched/deadline: improve the tracking of active utilization Message-ID: <20170324132351.txtq244rxbaery3g@hirez.programming.kicks-ass.net> References: <1490327582-4376-1-git-send-email-luca.abeni@santannapisa.it> <1490327582-4376-3-git-send-email-luca.abeni@santannapisa.it> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1490327582-4376-3-git-send-email-luca.abeni@santannapisa.it> User-Agent: NeoMutt/20170113 (1.7.2) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1925 Lines: 61 On Fri, Mar 24, 2017 at 04:52:55AM +0100, luca abeni wrote: > @@ -2518,6 +2520,7 @@ static int dl_overflow(struct task_struct *p, int policy, > !__dl_overflow(dl_b, cpus, p->dl.dl_bw, new_bw)) { > __dl_clear(dl_b, p->dl.dl_bw); > __dl_add(dl_b, new_bw); > + dl_change_utilization(p, new_bw); > err = 0; Every time I see that I want to do this.. --- kernel/sched/core.c | 4 ++-- kernel/sched/deadline.c | 2 +- kernel/sched/sched.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 3b31fc05a0f1..b845ee4b3e55 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2512,11 +2512,11 @@ static int dl_overflow(struct task_struct *p, int policy, err = 0; } else if (dl_policy(policy) && task_has_dl_policy(p) && !__dl_overflow(dl_b, cpus, p->dl.dl_bw, new_bw)) { - __dl_clear(dl_b, p->dl.dl_bw); + __dl_sub(dl_b, p->dl.dl_bw); __dl_add(dl_b, new_bw); err = 0; } else if (!dl_policy(policy) && task_has_dl_policy(p)) { - __dl_clear(dl_b, p->dl.dl_bw); + __dl_sub(dl_b, p->dl.dl_bw); err = 0; } raw_spin_unlock(&dl_b->lock); diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index a2ce59015642..229660088138 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -1695,7 +1695,7 @@ static void set_cpus_allowed_dl(struct task_struct *p, * until we complete the update. */ raw_spin_lock(&src_dl_b->lock); - __dl_clear(src_dl_b, p->dl.dl_bw); + __dl_sub(src_dl_b, p->dl.dl_bw); raw_spin_unlock(&src_dl_b->lock); } diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 5cbf92214ad8..1a521324ecee 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -226,7 +226,7 @@ struct dl_bw { }; static inline -void __dl_clear(struct dl_bw *dl_b, u64 tsk_bw) +void __dl_sub(struct dl_bw *dl_b, u64 tsk_bw) { dl_b->total_bw -= tsk_bw; }