Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.2/patches/2235051/?format=api
{ "id": 2235051, "url": "http://patchwork.ozlabs.org/api/1.2/patches/2235051/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260508131647.43868-16-frederic@kernel.org/", "project": { "id": 2, "url": "http://patchwork.ozlabs.org/api/1.2/projects/2/?format=api", "name": "Linux PPC development", "link_name": "linuxppc-dev", "list_id": "linuxppc-dev.lists.ozlabs.org", "list_email": "linuxppc-dev@lists.ozlabs.org", "web_url": "https://github.com/linuxppc/wiki/wiki", "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git", "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/", "list_archive_url_format": "https://lore.kernel.org/linuxppc-dev/{}/", "commit_url_format": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}" }, "msgid": "<20260508131647.43868-16-frederic@kernel.org>", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20260508131647.43868-16-frederic@kernel.org/", "date": "2026-05-08T13:16:47", "name": "[15/15] sched/cputime: Handle dyntick-idle steal time correctly", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "f57a231c884d331022a79338ff28a518c92b3468", "submitter": { "id": 79411, "url": "http://patchwork.ozlabs.org/api/1.2/people/79411/?format=api", "name": "Frederic Weisbecker", "email": "frederic@kernel.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260508131647.43868-16-frederic@kernel.org/mbox/", "series": [ { "id": 503389, "url": "http://patchwork.ozlabs.org/api/1.2/series/503389/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=503389", "date": "2026-05-08T13:16:32", "name": "tick/sched: Refactor idle cputime accounting", "version": 4, "mbox": "http://patchwork.ozlabs.org/series/503389/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2235051/comments/", "check": "success", "checks": "http://patchwork.ozlabs.org/api/patches/2235051/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linuxppc-dev+bounces-20625-incoming=patchwork.ozlabs.org@lists.ozlabs.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linuxppc-dev@lists.ozlabs.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=Ysovb7eN;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-20625-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)", "lists.ozlabs.org;\n arc=none smtp.remote-ip=\"2600:3c0a:e001:78e:0:1991:8:25\"", "lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org", "lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=Ysovb7eN;\n\tdkim-atps=neutral", "lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=kernel.org\n (client-ip=2600:3c0a:e001:78e:0:1991:8:25; helo=sea.source.kernel.org;\n envelope-from=frederic@kernel.org; receiver=lists.ozlabs.org)" ], "Received": [ "from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4gBqTH3kkBz1yKm\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 08 May 2026 23:19:15 +1000 (AEST)", "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4gBqTH2jx8z3cDf;\n\tFri, 08 May 2026 23:19:15 +1000 (AEST)", "from sea.source.kernel.org (sea.source.kernel.org\n [IPv6:2600:3c0a:e001:78e:0:1991:8:25])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4gBqTG38CZz30hC\n\tfor <linuxppc-dev@lists.ozlabs.org>; Fri, 08 May 2026 23:19:14 +1000 (AEST)", "from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby sea.source.kernel.org (Postfix) with ESMTP id 64E0543A49;\n\tFri, 8 May 2026 13:19:12 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPSA id 382E1C2BCB0;\n\tFri, 8 May 2026 13:19:04 +0000 (UTC)" ], "ARC-Seal": "i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1778246355;\n\tcv=none;\n b=WP6keJqx7l063GMPWr2vOWVvsowX6r+/mPcDvJoTr8R31r4usv8MWbexDwKz6KwMTV17NX+33wyft3BtgVIgdnI8v5Vkjjg0UeMc7cl4aV3j3TgBMEr2mJwNkByspziFpsfwyNattE+myfqb+GwuKxQVkQFAfDwRx7QF8qOHnB4dbgMI3EtHC2jMeowVGNOndtF1srn+WTS7hmfp35bspW2i004Z/O9oI1vBFae+EU0FWuOLxtMo43Wn/D9X/dbFGwGP3aphwkDOtfDKaiLCYaILkgEKh6Gh+m7uVYirNNK/aCLMQAspUYewnH2b481916snZGvrJcnLfXYK1MT2gg==", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1778246355; c=relaxed/relaxed;\n\tbh=5zDAl5yK04xMRqaDvYQgtU6Zwb3HfqgsIF5xPvu+ifo=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=Uj9IXRsVehm7C9CGoSpRh+DN8zHGUOLK5jtFXzPeWqDE0NlxP0GbT9MqZljr+/LHGMsxqOZ5inzEul/nmmAbgG9cRuhyVik9bRzetJzczKsTfCVmKpNez461BA3cZkmuhsBqIzw0pbf++eYC2xqLzz7PlHB7NyPFYyJdONvFURaWONaa2L0LqEQSs9UN+F2JAb9cs/v0CGNxhMVsa3v14pCQ89NaTsqKLAigWnZsIKdzAqsZt3WLXPJnt2AjKasZ7qLygQauyB9p5Dx5jhNFy8x3dr8a/k8AO4f2i+pLiDxBksQBzvNX7W4GCmqMw2ibCjHGmAfPAsi7hhfXBVa8EA==", "ARC-Authentication-Results": "i=1; lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org;\n dkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=Ysovb7eN; dkim-atps=neutral;\n spf=pass (client-ip=2600:3c0a:e001:78e:0:1991:8:25;\n helo=sea.source.kernel.org; envelope-from=frederic@kernel.org;\n receiver=lists.ozlabs.org) smtp.mailfrom=kernel.org", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1778246352;\n\tbh=ZjX/QGQBOtdWF89NEwjI8Sd6Nc6B1+H44Jj11M9iRNo=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=Ysovb7eNkYkPJa7Y4YwjblV8Mxrcy0tbylEObsepug8kgYoUJExyaen1oJu9s0bYa\n\t CgtAR/WpjwWvDrqdJbJ2UR4fHPupCBU4ozlEIHPyDoFlIGdswhk44tFgsQ5aAA1je7\n\t /6QxKhDX8HAcHrbyEhpgYmIplj+Sl395pQp4+xEUYB6QfNrgRyg61UFDrXdrSu4+nl\n\t a21boZPKYWjAneLvHg3aCOVD7Gg9txu50iG7Q6x+Yp9iud4Z/v5dEXYpuJmZU45wFn\n\t Jwd7d7Krwuk3mQwa3bVoESLLXc/HKqcQXhwV9xTgrsrs9pS0thbF/A8lJGlwiDCkeE\n\t vJrFX6lLhP0UA==", "From": "Frederic Weisbecker <frederic@kernel.org>", "To": "LKML <linux-kernel@vger.kernel.org>", "Cc": "Frederic Weisbecker <frederic@kernel.org>,\n\t\"Christophe Leroy (CS GROUP)\" <chleroy@kernel.org>,\n\t\"Rafael J. Wysocki\" <rafael@kernel.org>,\n\tAlexander Gordeev <agordeev@linux.ibm.com>,\n\tAnna-Maria Behnsen <anna-maria@linutronix.de>,\n\tBen Segall <bsegall@google.com>, Boqun Feng <boqun.feng@gmail.com>,\n\tChristian Borntraeger <borntraeger@linux.ibm.com>,\n\tDietmar Eggemann <dietmar.eggemann@arm.com>,\n\tHeiko Carstens <hca@linux.ibm.com>, Ingo Molnar <mingo@kernel.org>,\n\tIngo Molnar <mingo@redhat.com>, Jan Kiszka <jan.kiszka@siemens.com>,\n\tJoel Fernandes <joelagnelf@nvidia.com>,\n\tJuri Lelli <juri.lelli@redhat.com>,\n\tKieran Bingham <kbingham@kernel.org>,\n\tMadhavan Srinivasan <maddy@linux.ibm.com>,\n\tMel Gorman <mgorman@suse.de>, Michael Ellerman <mpe@ellerman.id.au>,\n\tNeeraj Upadhyay <neeraj.upadhyay@kernel.org>,\n\tNicholas Piggin <npiggin@gmail.com>,\n\t\"Paul E . McKenney\" <paulmck@kernel.org>,\n\tPeter Zijlstra <peterz@infradead.org>, Sashiko@lists.ozlabs.org,\n\tShrikanth Hegde <sshegde@linux.ibm.com>,\n\tSteven Rostedt <rostedt@goodmis.org>,\n\tSven Schnelle <svens@linux.ibm.com>,\n\tThomas Gleixner <tglx@linutronix.de>,\n\tUladzislau Rezki <urezki@gmail.com>,\n\tValentin Schneider <vschneid@redhat.com>,\n\tVasily Gorbik <gor@linux.ibm.com>,\n\tVincent Guittot <vincent.guittot@linaro.org>,\n\tViresh Kumar <viresh.kumar@linaro.org>,\n\tXin Zhao <jackzxcui1989@163.com>, linux-pm@vger.kernel.org,\n\tlinux-s390@vger.kernel.org, linuxppc-dev@lists.ozlabs.org", "Subject": "[PATCH 15/15] sched/cputime: Handle dyntick-idle steal time correctly", "Date": "Fri, 8 May 2026 15:16:47 +0200", "Message-ID": "<20260508131647.43868-16-frederic@kernel.org>", "X-Mailer": "git-send-email 2.53.0", "In-Reply-To": "<20260508131647.43868-1-frederic@kernel.org>", "References": "<20260508131647.43868-1-frederic@kernel.org>", "X-Mailing-List": "linuxppc-dev@lists.ozlabs.org", "List-Id": "<linuxppc-dev.lists.ozlabs.org>", "List-Help": "<mailto:linuxppc-dev+help@lists.ozlabs.org>", "List-Owner": "<mailto:linuxppc-dev+owner@lists.ozlabs.org>", "List-Post": "<mailto:linuxppc-dev@lists.ozlabs.org>", "List-Archive": "<https://lore.kernel.org/linuxppc-dev/>,\n <https://lists.ozlabs.org/pipermail/linuxppc-dev/>", "List-Subscribe": "<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>", "List-Unsubscribe": "<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>", "Precedence": "list", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-Spam-Status": "No, score=-0.6 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,\n\tDKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS\n\tautolearn=disabled version=4.0.1 OzLabs 8", "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org" }, "content": "The dyntick-idle steal time is currently accounted when the tick\nrestarts but the stolen idle time is not subtracted from the idle time\nthat was already accounted. This is to avoid observing the idle time\ngoing backward as the dyntick-idle cputime accessors can't reliably know\nin advance the stolen idle time.\n\nIn order to maintain a forward progressing idle cputime while\nsubtracting idle steal time from it, keep track of the previously\naccounted idle stolen time and substract it from _later_ idle cputime\naccounting.\n\nSigned-off-by: Frederic Weisbecker <frederic@kernel.org>\nTested-by: Shrikanth Hegde <sshegde@linux.ibm.com>\n---\n include/linux/kernel_stat.h | 1 +\n kernel/sched/cputime.c | 28 +++++++++++++++++++++++-----\n 2 files changed, 24 insertions(+), 5 deletions(-)", "diff": "diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h\nindex 512104b0ff49..fce1392e2140 100644\n--- a/include/linux/kernel_stat.h\n+++ b/include/linux/kernel_stat.h\n@@ -39,6 +39,7 @@ struct kernel_cpustat {\n \tbool\t\tidle_elapse;\n \tseqcount_t\tidle_sleeptime_seq;\n \tu64\t\tidle_entrytime;\n+\tu64\t\tidle_stealtime[2];\n #endif\n \tu64\t\tcpustat[NR_STATS];\n };\ndiff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c\nindex 94be22aa5cb6..244b57417240 100644\n--- a/kernel/sched/cputime.c\n+++ b/kernel/sched/cputime.c\n@@ -425,19 +425,32 @@ static inline void irqtime_account_process_tick(struct task_struct *p, int user_\n static void kcpustat_idle_stop(struct kernel_cpustat *kc, u64 now)\n {\n \tu64 *cpustat = kc->cpustat;\n-\tu64 delta;\n+\tu64 delta, steal, steal_delta;\n+\tint iowait;\n \n \tif (!kc->idle_elapse)\n \t\treturn;\n \n+\tiowait = nr_iowait_cpu(smp_processor_id()) > 0;\n \tdelta = now - kc->idle_entrytime;\n+\tsteal = steal_account_process_time(delta);\n \n+\t/*\n+\t * Record the idle time after substracting the steal time from\n+\t * previous update sequence. Don't substract the steal time from\n+\t * the current update sequence to avoid readers moving backward.\n+\t */\n \twrite_seqcount_begin(&kc->idle_sleeptime_seq);\n-\tif (nr_iowait_cpu(smp_processor_id()) > 0)\n+\tsteal_delta = min_t(u64, kc->idle_stealtime[iowait], delta);\n+\tdelta -= steal_delta;\n+\tkc->idle_stealtime[iowait] -= steal_delta;\n+\n+\tif (iowait)\n \t\tcpustat[CPUTIME_IOWAIT] += delta;\n \telse\n \t\tcpustat[CPUTIME_IDLE] += delta;\n \n+\tkc->idle_stealtime[iowait] += steal;\n \tkc->idle_entrytime = now;\n \tkc->idle_elapse = false;\n \twrite_seqcount_end(&kc->idle_sleeptime_seq);\n@@ -464,7 +477,6 @@ void kcpustat_dyntick_stop(u64 now)\n \t\tkcpustat_idle_stop(kc, now);\n \t\tkc->idle_dyntick = false;\n \t\tvtime_dyntick_stop();\n-\t\tsteal_account_process_time(ULONG_MAX);\n \t}\n }\n \n@@ -508,6 +520,7 @@ static u64 kcpustat_field_dyntick(int cpu, enum cpu_usage_stat idx,\n \t\t\t\t bool compute_delta, u64 now)\n {\n \tstruct kernel_cpustat *kc = &kcpustat_cpu(cpu);\n+\tint iowait = idx == CPUTIME_IOWAIT;\n \tu64 *cpustat = kc->cpustat;\n \tunsigned int seq;\n \tu64 idle;\n@@ -516,8 +529,13 @@ static u64 kcpustat_field_dyntick(int cpu, enum cpu_usage_stat idx,\n \t\tseq = read_seqcount_begin(&kc->idle_sleeptime_seq);\n \n \t\tidle = cpustat[idx];\n-\t\tif (kc->idle_elapse && compute_delta && now > kc->idle_entrytime)\n-\t\t\tidle += (now - kc->idle_entrytime);\n+\n+\t\tif (kc->idle_elapse && compute_delta && now > kc->idle_entrytime) {\n+\t\t\tu64 delta = now - kc->idle_entrytime;\n+\n+\t\t\tdelta -= min_t(u64, kc->idle_stealtime[iowait], delta);\n+\t\t\tidle += delta;\n+\t\t}\n \t} while (read_seqcount_retry(&kc->idle_sleeptime_seq, seq));\n \n \treturn idle;\n", "prefixes": [ "15/15" ] }