Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp775073ybn; Tue, 24 Sep 2019 09:17:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqzhF/V4UYxzb3BXdJ9QYHevyp/uEJ/Mlafz0mLgUfX4QPJpRYtCqD2DGlkZ1NHx8Am1XbDF X-Received: by 2002:a17:906:4b47:: with SMTP id j7mr3323917ejv.63.1569341877406; Tue, 24 Sep 2019 09:17:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569341877; cv=none; d=google.com; s=arc-20160816; b=bzzNSAoZIszjK0trhCCGUmpu3FhfdLHHU8RH5o5nEcGuylJxNGBO3X52PXohSd339Y QmIUS1V8CE/LcpmbQb3hK72rvhRzORB4u50PTje7YZJ9ZCQuVBYuAjZQbnyrrB8aD1my 0ozu46/y4oidVld+zyFI3kDKXnxbbmMwj52BQL8FzQkDwVA+7JkMIFIL+chYAHAVOox2 wfARVMQmM1duh5fUSYsfew/iX2eEh4WXcu3MySM0wt5dI8pWhd2CJUoKsk4hFsbdlFo0 FDuOo2B+mRoq4R8gBJZpewl5bXxkDpbgSFTtrKhLhG1ajpcV+ZXEZzZdpMxja2JIjFH8 /ulQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=y/rPIVEkcCKfov/zgenLxr/Bvf5qMeMMGo/WLOzBWao=; b=uRhez0fUCv9M5Pxid+4cnKdXHt9VMo3XchULIvhgHjeQZYzDRH5n+yKSKlScV1Mwlg ir8iYAqCP88/2D0SaK8nZH/xur9bUbcbB2Brh3uuQTlcmA5Pks3ZAu/YeJaQlaXDOK2r tFVOTsfhxRMDHzFUPeBhalnzUCDBfS5jj/P9khLHkSU25OWEFTo6PYugMbu0g33vP44B r9vrYLB5iawxT5sR2RyZlwapWdXjVqIHY4YOdii/XB9rfiLzmd0YuTgRj5tusW3GBFd3 crcAESR6Bln/A9ov4zFD5t/yVkxW1dZgO5VBrNDivXMKVEYI6lZrZr+OcpfWAZmYIgR1 oVWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=CxX+Rjn3; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n2si1161607ejy.35.2019.09.24.09.17.34; Tue, 24 Sep 2019 09:17:57 -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=CxX+Rjn3; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2405884AbfIVTjA (ORCPT + 99 others); Sun, 22 Sep 2019 15:39:00 -0400 Received: from mail.kernel.org ([198.145.29.99]:40796 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389074AbfIVSpP (ORCPT ); Sun, 22 Sep 2019 14:45:15 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 93648208C2; Sun, 22 Sep 2019 18:45:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1569177914; bh=sdetFIu/vglHNyZ++5unS1hl9C7aa1xoN9g5WAshOfA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CxX+Rjn3vjyhCCe9oxW62brYx2K0Gx9FJ9xU/tSR/nyaN1ZM7yYoZ8bMbg5/l4S7E Tfn+49ZooQuZg59hMpX3wal/gsFIti76oLVfAOuq8QNCGSWhvpDj5oMXxbiQW3Pg37 04Gw0hPmDVKx3WEA9Z8AMV0Ntcuf689vjPcKM0pk= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Juri Lelli , Dietmar Eggemann , Peter Zijlstra , 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 AUTOSEL 5.3 028/203] sched/deadline: Fix bandwidth accounting at all levels after offline migration Date: Sun, 22 Sep 2019 14:40:54 -0400 Message-Id: <20190922184350.30563-28-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190922184350.30563-1-sashal@kernel.org> References: <20190922184350.30563-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore 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 46122edd8552c..20951112b6cdd 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