Received: by 2002:a25:730a:0:0:0:0:0 with SMTP id o10csp595306ybc; Thu, 3 Oct 2019 09:18:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqzuARFWXxNvZomemeQuoJROUxlU1kpz6a5K1NlacUrLWEeflKOgKFaK6AqVQG6wMxgczy8E X-Received: by 2002:a50:95c1:: with SMTP id x1mr10339940eda.180.1570119501654; Thu, 03 Oct 2019 09:18:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570119501; cv=none; d=google.com; s=arc-20160816; b=EUQf20190d5FZTaGc7I246kR8UXxsZBdY0GXeZ+ud3KpdcoROAPjoJ1FxRb2Ce8YAd XiMBmp0i/zuliZMp60BmXWSbXfGJuwb9QJJVW2uF8U6tLlPHsbFgF4z3QkhPcjjM/c6h M+iokMWCFlQK4EIS62TjF7yq0GJXW4HE7OcECouLdvxFUQXFA+Jmf0IBlwPF8H1+sk7w j2Atqlqa0SLG/sP8MbzSjRMcc0YtB8wNZBODUlu/t8xVaOv+Jfnj/zW73zeZTcf3kROE 2Rsju7jpKEL7qKzaH9iaxfU0e5RwbntbevvJuhyg4EYvkwG//UafY1CvjHvNxQNg2sKS yA9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=NnP8lSPAQMpJuesp9rU53wY2GTIrjPSp09EA0m34lHM=; b=jCkqKUySihxS9f1RuTrezrYbL8+scTi+ml0KR/MOqIlIxs3Yl2/+yuJQzEwXbi9XQ6 qNqUdjm0K4UGd0tsHxi0AEmbqaqtCsyZXLpDQ5lCS6JUEwMPS8bBYob9GkvPYKwaz4jV m3boBCB6R8qoZcmh2j4FjxPMzts4YZ6z1dDziZ7QbA7Q1qNK54EA2rW/8Pjn0Q/1icLQ yDtIg7I96AOShoQgpfKIpNHX5tAEkmY4o93UDjhedIiCAobRADmtUg4v64QFNMttm/Pe ujjRIRrZ5bgs6ESeltGWANXJDCjTwXBM69BZ2E187+HNWTEPIP1P2YtcaYhKt9UEi+fM 2peA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=inHkLJz9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i34si2027580ede.37.2019.10.03.09.17.56; Thu, 03 Oct 2019 09:18:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=inHkLJz9; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388935AbfJCQQN (ORCPT + 99 others); Thu, 3 Oct 2019 12:16:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:40950 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388924AbfJCQQM (ORCPT ); Thu, 3 Oct 2019 12:16:12 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 792A4222C4; Thu, 3 Oct 2019 16:16:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1570119371; bh=hB+9cS2VGhVJSJ2jVBd5WTuRU+qCrwFi3LYTB1mPksA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=inHkLJz9A28UUHO0aqa+eN5xDoia3yvrejZ4u6I0onKus3UTnWUISXJNF4WrF9CCk Z+RqmBgW+fWuip2NzyqTyCiy0ziI/70vROq8OIuzy5NUpVl8IQPaRbkZeG0ykMmXCg fdvReKRd25s5bIWqaKbQOI72ciHCJIk4TxgP2uZM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Dietmar Eggemann , Juri Lelli , "Peter Zijlstra (Intel)" , Linus Torvalds , Thomas Gleixner , bristot@redhat.com, claudio@evidence.eu.com, lizefan@huawei.com, longman@redhat.com, luca.abeni@santannapisa.it, mathieu.poirier@linaro.org, rostedt@goodmis.org, tj@kernel.org, tommaso.cucinotta@santannapisa.it, Ingo Molnar , Sasha Levin Subject: [PATCH 4.19 041/211] sched/deadline: Fix bandwidth accounting at all levels after offline migration Date: Thu, 3 Oct 2019 17:51:47 +0200 Message-Id: <20191003154457.089554618@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191003154447.010950442@linuxfoundation.org> References: <20191003154447.010950442@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Juri Lelli [ Upstream commit 59d06cea1198d665ba11f7e8c5f45b00ff2e4812 ] If a task happens to be throttled while the CPU it was running on gets hotplugged off, the bandwidth associated with the task is not correctly migrated with it when the replenishment timer fires (offline_migration). Fix things up, for this_bw, running_bw and total_bw, when replenishment timer fires and task is migrated (dl_task_offline_migration()). Tested-by: Dietmar Eggemann Signed-off-by: Juri Lelli Signed-off-by: Peter Zijlstra (Intel) Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: bristot@redhat.com Cc: claudio@evidence.eu.com Cc: lizefan@huawei.com Cc: longman@redhat.com Cc: luca.abeni@santannapisa.it Cc: mathieu.poirier@linaro.org Cc: rostedt@goodmis.org Cc: tj@kernel.org Cc: tommaso.cucinotta@santannapisa.it Link: https://lkml.kernel.org/r/20190719140000.31694-5-juri.lelli@redhat.com Signed-off-by: Ingo Molnar Signed-off-by: Sasha Levin --- kernel/sched/deadline.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 72c07059ef371..ebec37cb3be9a 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -529,6 +529,7 @@ static struct rq *find_lock_later_rq(struct task_struct *task, struct rq *rq); static struct rq *dl_task_offline_migration(struct rq *rq, struct task_struct *p) { struct rq *later_rq = NULL; + struct dl_bw *dl_b; later_rq = find_lock_later_rq(p, rq); if (!later_rq) { @@ -557,6 +558,38 @@ static struct rq *dl_task_offline_migration(struct rq *rq, struct task_struct *p double_lock_balance(rq, later_rq); } + if (p->dl.dl_non_contending || p->dl.dl_throttled) { + /* + * Inactive timer is armed (or callback is running, but + * waiting for us to release rq locks). In any case, when it + * will fire (or continue), it will see running_bw of this + * task migrated to later_rq (and correctly handle it). + */ + sub_running_bw(&p->dl, &rq->dl); + sub_rq_bw(&p->dl, &rq->dl); + + add_rq_bw(&p->dl, &later_rq->dl); + add_running_bw(&p->dl, &later_rq->dl); + } else { + sub_rq_bw(&p->dl, &rq->dl); + add_rq_bw(&p->dl, &later_rq->dl); + } + + /* + * And we finally need to fixup root_domain(s) bandwidth accounting, + * since p is still hanging out in the old (now moved to default) root + * domain. + */ + dl_b = &rq->rd->dl_bw; + raw_spin_lock(&dl_b->lock); + __dl_sub(dl_b, p->dl.dl_bw, cpumask_weight(rq->rd->span)); + raw_spin_unlock(&dl_b->lock); + + dl_b = &later_rq->rd->dl_bw; + raw_spin_lock(&dl_b->lock); + __dl_add(dl_b, p->dl.dl_bw, cpumask_weight(later_rq->rd->span)); + raw_spin_unlock(&dl_b->lock); + set_task_cpu(p, later_rq->cpu); double_unlock_balance(later_rq, rq); -- 2.20.1