Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp71263ybp; Thu, 3 Oct 2019 10:18:56 -0700 (PDT) X-Google-Smtp-Source: APXvYqygDF+Nn7McKvrnqsuPCS3Tno0g0Fo30L0iZwYEgXttPkDtRVsiU+iMVa2dP9HT3vh2dHOl X-Received: by 2002:a17:906:6c98:: with SMTP id s24mr8513102ejr.28.1570123136077; Thu, 03 Oct 2019 10:18:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570123136; cv=none; d=google.com; s=arc-20160816; b=FosKFC/B+rom1WskHUSfPqsgJjcK9PoUm5HX8c5ZbhDOZx/pV/cpn2XwddugFcbNFb lpDuLfXXfTE41fgZ6CYg4ayb1ROHd9yfyJlIsN20T0ZLOTcpOgKBRdnMZeNyxPKo55WL wjhgVoybln5wZQOmfEvBUJ5iXD0vm/Kr7ysZrZ1bMRIcl/Cm/J4iQTbeQLUpprW5fxNY IO6Awj8sCa4yXtMxtVsZiYKZrbhP0OvjRKvvY78roTV1fPedUict8MlfxFUXV9w+rZHb aAVjgn5J1aBqyX/M6Yi06metNenm4tM+XMnVN8wCVyrQSZeA39Ju/E+vWdd/sOWvO7d5 8B1A== 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=h8NUqZcYMXEcE5TuPQgy9pzdKMtT8VoYLxeugunchEY=; b=QJ7GOHPfQGRsaSCicf/3R2PJYmRg5kNSjcDtDjTPl7qrFxpcU0A3iDg3m33DFgWaet upSstHp/QhSFA22n1fpzWUJm/vhpwwA1nyNIG5C0mUn5KACeHYuFqLtczS+XYNBNS7SB ceBSo4uNC36YfMpGoJXhSnYpekdunVjbaOpra5J9Hy4XZbbrMPzYMgzEK2bBCHfJj5tn CDg6F8+d3TXqD3XJCyglqZGKBFgDorKTZofyyW7X+sULJHTIlPhBK1FcQkC0trXuTVZ3 0Vj+Cr7fUdUaGa0M7qlswHbRamUCDv5b4bCOJlj87qX9yuI0U5HrYCoL0Niasb9hfDwz 5slA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="HTfLRY/9"; 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 k6si1953567edb.235.2019.10.03.10.18.31; Thu, 03 Oct 2019 10:18:56 -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="HTfLRY/9"; 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 S2391025AbfJCRO4 (ORCPT + 99 others); Thu, 3 Oct 2019 13:14:56 -0400 Received: from mail.kernel.org ([198.145.29.99]:57764 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391089AbfJCQ0e (ORCPT ); Thu, 3 Oct 2019 12:26:34 -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 98597215EA; Thu, 3 Oct 2019 16:26:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1570119993; bh=+CA5L4S3WYxaDcnM1a3Gx9G8CDCvEp1++Jy1THK8e4k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HTfLRY/9dxOeVvpe6RcS6PevufzM9diTdzKdrxryG4Kk4GDOolFV9GV8YWPm5j7R6 XCvkbEIjKeZtuqe/XpkCsnapznBoDJpz7bwlibaqM1tPsgjG0HsqERk9xOrXgTC5JY wH2f4vkF0ABI/UaLtEF7uCHvkVnrVDfKBlnWa+Do= 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 5.2 057/313] sched/deadline: Fix bandwidth accounting at all levels after offline migration Date: Thu, 3 Oct 2019 17:50:35 +0200 Message-Id: <20191003154538.663098161@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191003154533.590915454@linuxfoundation.org> References: <20191003154533.590915454@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 1c66480afda81..fcdafdcb129cc 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