From nobody Fri Jan 2 20:34:06 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 74414E95A67 for ; Sun, 8 Oct 2023 10:49:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344647AbjJHKtv (ORCPT ); Sun, 8 Oct 2023 06:49:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49252 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344623AbjJHKts (ORCPT ); Sun, 8 Oct 2023 06:49:48 -0400 Received: from mail-pf1-x42b.google.com (mail-pf1-x42b.google.com [IPv6:2607:f8b0:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 658D5BA for ; Sun, 8 Oct 2023 03:49:44 -0700 (PDT) Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-690bd59322dso2640959b3a.3 for ; Sun, 08 Oct 2023 03:49:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696762184; x=1697366984; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=n0bXJ89oPO1no0IVuo2PGkRvQqnJiMrSvjxvIuMh5/g=; b=HdSQe6/WGPb9GTnKdLdzbl6bE0Kxodvc4g8gXK1ZtTfGv9duqcA0gCOiJgvxA+jLJY jLdZi2eALbuN1/aSlLFP7KNNmlNb2lVS/2FIfOu7WNGPsPl0iRPogG55dhbPvXErElDa Ri8HX7hNYukunurigBbJxLh4GtVQPau3cBwQVvyuiQH0ZbjPbTDXJsn8E33AbVlf9xRR sTqG4GEgC3NxWHzZES3qwAIG+yj5xUCeqDJQzv85akGAXhXDPKS0tAw+MEG2kjyql2zk njLXTzMsv5KOkFhWWOayF9wudMyoHgSyl75NDkQfTXIhe6m+8OGN/3Zs4LsOj8ySfj1Q Hz0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696762184; x=1697366984; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=n0bXJ89oPO1no0IVuo2PGkRvQqnJiMrSvjxvIuMh5/g=; b=OFTysyOTuvBjfgs0lk8Y9qLeezzsWcU+YaZbBRjGGWH1fbCDE4AO24ZW6555EoWQU+ maN/k70ZTCqJ4KzcIuJT97mmDfEDSvDuexQsh15zFoErqrzlmjlGVE8YiaEh1yW4q0fo Pf+U8hbyLt02o9gTbjkQF0pwJYmottPsSUodoeIYcKoySRRMxDjvpOQ7VqWOfvYw5Qke y+wk1rMfY5/TF+0dmuBRCdFPCxyVxHYRndYxrMXXZhbgqBbsr/bvOKJA5dhuLcjUzvKQ kWhPCj/qjyLyXodW/A+plQrb1BCXv3tTGLg8Sfphi/IjfIsixAghNLoar9vxmBzDgWKV PXGg== X-Gm-Message-State: AOJu0Yyrzr8VtNY0Fj1Gh5LqrnUu2DPiYbzFdOjZdt1gN8QUXGaQ1FML oW6xsA6UXn1w48PkX9F3ZFI= X-Google-Smtp-Source: AGHT+IHG++AMBHMS7vHqSUm5FUSc1g+S+Xjse2uxT+9IdAIQVEC4rUuoEhVxOWRNaBXrul5fUnUG1w== X-Received: by 2002:a17:90b:3554:b0:26f:a34c:90e3 with SMTP id lt20-20020a17090b355400b0026fa34c90e3mr10515879pjb.31.1696762183822; Sun, 08 Oct 2023 03:49:43 -0700 (PDT) Received: from localhost.localdomain ([143.92.64.18]) by smtp.gmail.com with ESMTPSA id z11-20020a17090acb0b00b002630c9d78aasm6311517pjt.5.2023.10.08.03.49.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Oct 2023 03:49:43 -0700 (PDT) From: "brookxu.cn" To: bsingharora@gmail.com, juri.lelli@redhat.com, peterz@infradead.org, vincent.guittot@linaro.org Cc: linux-kernel@vger.kernel.org Subject: [PATCH 1/3] delayacct: introduce delayacct_enabled() to simplify implement Date: Sun, 8 Oct 2023 18:49:36 +0800 Message-Id: <8e5d6ed7d70ff7187a33130231783ed2c1d70841.1696761522.git.chunguang.xu@shopee.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Chunguang Xu Introduce delayacct_enabled() to simplify the code and make it more concise. Signed-off-by: Chunguang Xu --- include/linux/delayacct.h | 74 +++++++++++---------------------------- kernel/delayacct.c | 2 +- 2 files changed, 21 insertions(+), 55 deletions(-) diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h index 6639f48dac36..660e534ce7c4 100644 --- a/include/linux/delayacct.h +++ b/include/linux/delayacct.h @@ -94,137 +94,103 @@ static inline void delayacct_tsk_init(struct task_str= uct *tsk) __delayacct_tsk_init(tsk); } =20 +static inline bool delayacct_enabled(void) +{ + return static_branch_unlikely(&delayacct_key); +} + /* Free tsk->delays. Called from bad fork and __put_task_struct * where there's no risk of tsk->delays being accessed elsewhere */ static inline void delayacct_tsk_free(struct task_struct *tsk) { - if (tsk->delays) + if (delayacct_enabled()) kmem_cache_free(delayacct_cache, tsk->delays); tsk->delays =3D NULL; } =20 static inline void delayacct_blkio_start(void) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_blkio_start(); } =20 static inline void delayacct_blkio_end(struct task_struct *p) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (p->delays) + if (delayacct_enabled()) __delayacct_blkio_end(p); } =20 static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk) { - if (tsk->delays) + if (delayacct_enabled()) return __delayacct_blkio_ticks(tsk); return 0; } =20 static inline void delayacct_freepages_start(void) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_freepages_start(); } =20 static inline void delayacct_freepages_end(void) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_freepages_end(); } =20 static inline void delayacct_thrashing_start(bool *in_thrashing) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_thrashing_start(in_thrashing); } =20 static inline void delayacct_thrashing_end(bool *in_thrashing) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_thrashing_end(in_thrashing); } =20 static inline void delayacct_swapin_start(void) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_swapin_start(); } =20 static inline void delayacct_swapin_end(void) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_swapin_end(); } =20 static inline void delayacct_compact_start(void) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_compact_start(); } =20 static inline void delayacct_compact_end(void) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_compact_end(); } =20 static inline void delayacct_wpcopy_start(void) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_wpcopy_start(); } =20 static inline void delayacct_wpcopy_end(void) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (current->delays) + if (delayacct_enabled()) __delayacct_wpcopy_end(); } =20 static inline void delayacct_irq(struct task_struct *task, u32 delta) { - if (!static_branch_unlikely(&delayacct_key)) - return; - - if (task->delays) + if (delayacct_enabled()) __delayacct_irq(task, delta); } =20 diff --git a/kernel/delayacct.c b/kernel/delayacct.c index 6f0c358e73d8..ce10b7c1ee43 100644 --- a/kernel/delayacct.c +++ b/kernel/delayacct.c @@ -161,7 +161,7 @@ int delayacct_add_tsk(struct taskstats *d, struct task_= struct *tsk) d->cpu_run_virtual_total =3D (tmp < (s64)d->cpu_run_virtual_total) ? 0 : tmp; =20 - if (!tsk->delays) + if (!delayacct_enabled()) return 0; =20 /* zero XXX_total, non-zero XXX_count implies XXX stat overflowed */ --=20 2.25.1 From nobody Fri Jan 2 20:34:06 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9FDC3E95A8E for ; Sun, 8 Oct 2023 10:50:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344654AbjJHKtx (ORCPT ); Sun, 8 Oct 2023 06:49:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344639AbjJHKts (ORCPT ); Sun, 8 Oct 2023 06:49:48 -0400 Received: from mail-ot1-x32a.google.com (mail-ot1-x32a.google.com [IPv6:2607:f8b0:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9B01BAC for ; Sun, 8 Oct 2023 03:49:46 -0700 (PDT) Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-6c49f781855so2420846a34.3 for ; Sun, 08 Oct 2023 03:49:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696762186; x=1697366986; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=c85eUG/PLq9rCFsCeX71oCXsLkAVXY0eAv8YSU0JAXU=; b=JLiXfvYzXrRkjWdy2KKgAIwOxqXCoSqFw/Rw+W8ujFyn57unpQuxwDclDAbIJ4x8nV gWeg6sQr7oE+fEa1WFPIdlaHZZovME2weOFoJ4bbeB87mTRuvaFrSMskOg+zpXILrkWE Euhggwx3yj/FC98qStE+xP+o0ICPItCn+iCORj8Rrfm3tRvrvc5y/8VtWlMHO0IWNxpf wnn4L7vv0Sj6abCf1Qsf/IegAdVrXqw5x4g8/uMI82TCol0cihsZi+fm9A7Xq8JaF+om lrwJaByXv/Gby8vPd++D1ruEMgyCe/DG0FUsHIqNGzk9QrPEnMn39xKwxt4cTTK0qAsd M3tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696762186; x=1697366986; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=c85eUG/PLq9rCFsCeX71oCXsLkAVXY0eAv8YSU0JAXU=; b=dgaLMZr+GMSpa35ijIL0pdfWY2yLPkoFo3ooNIVsBTa4EhdHCQaiI3FGdUQeE9vxSA AwukDl8YFmTsOpJnoGgI981vMCvHKW7tuJHCs52BAP+K6RY6r7gmkSXN11Z8sA9jFDgM w6Ghl7vYhu75rVgDpc+gnfzAt7h8ErTCatwWaFh/b607TwnkHxSh/BV1ToIKlUAW2YEs ZyzrPGYOyHTVTB77gVJpwx38KTBYzPAfzFUmXpKjT3guK5/5nfWJUo2IG7rWzgDGdeCY xw2/ZKmBpEJUjHGZ7sSmzHdt1AAXUH+k/3Ebwli7WJ/k0yaVh1vRR+t7/CVyIViM/qn3 oTpA== X-Gm-Message-State: AOJu0YyG1/pRvC+UAyl5h7R1DHuG/JwKb+jDIl00v/CYIBF3o79CV6c8 tOOMDuadi6vroa5J2eDsoaM= X-Google-Smtp-Source: AGHT+IHVd5jBQ9WpOaV/jFPASDBM3v5OQWNToMhm5YONtcRz/QCme3u3oe2TEqh/4amnCbs8IM6JRg== X-Received: by 2002:a05:6358:6f06:b0:13c:eea2:d021 with SMTP id r6-20020a0563586f0600b0013ceea2d021mr12274061rwn.9.1696762185748; Sun, 08 Oct 2023 03:49:45 -0700 (PDT) Received: from localhost.localdomain ([143.92.64.18]) by smtp.gmail.com with ESMTPSA id z11-20020a17090acb0b00b002630c9d78aasm6311517pjt.5.2023.10.08.03.49.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Oct 2023 03:49:45 -0700 (PDT) From: "brookxu.cn" To: bsingharora@gmail.com, juri.lelli@redhat.com, peterz@infradead.org, vincent.guittot@linaro.org Cc: linux-kernel@vger.kernel.org Subject: [PATCH 2/3] delayacct: convert task->delays to a object Date: Sun, 8 Oct 2023 18:49:37 +0800 Message-Id: <531ddc82793a39f4c09316d701a4b1170bcad4ab.1696761522.git.chunguang.xu@shopee.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Chunguang Xu Since in some scenarios we still want to get the task delayacct through taskstats, so commit <0cd7c741f01de> introduces a sysctl to enable it dynamically. However, since task->delays is allocated during fork(), task->delays will not be reallocated when delayacct is enabled later. This will make we cannot get the delayacct of old tasks, but the new tasks cans. This can easily lead to confusion. Therefore, try to workaround this issue by convert task->delays to an object. Signed-off-by: Chunguang Xu --- include/linux/delayacct.h | 16 +----- include/linux/sched.h | 3 +- kernel/delayacct.c | 113 +++++++++++++++++++------------------- kernel/fork.c | 7 +-- 4 files changed, 60 insertions(+), 79 deletions(-) diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h index 660e534ce7c4..2f1dc6688a2f 100644 --- a/include/linux/delayacct.h +++ b/include/linux/delayacct.h @@ -65,7 +65,6 @@ struct task_delay_info { #ifdef CONFIG_TASK_DELAY_ACCT DECLARE_STATIC_KEY_FALSE(delayacct_key); extern int delayacct_on; /* Delay accounting turned on/off */ -extern struct kmem_cache *delayacct_cache; extern void delayacct_init(void); =20 extern void __delayacct_tsk_init(struct task_struct *); @@ -88,10 +87,7 @@ extern void __delayacct_irq(struct task_struct *task, u3= 2 delta); =20 static inline void delayacct_tsk_init(struct task_struct *tsk) { - /* reinitialize in case parent's non-null pointer was dup'ed*/ - tsk->delays =3D NULL; - if (delayacct_on) - __delayacct_tsk_init(tsk); + __delayacct_tsk_init(tsk); } =20 static inline bool delayacct_enabled(void) @@ -99,16 +95,6 @@ static inline bool delayacct_enabled(void) return static_branch_unlikely(&delayacct_key); } =20 -/* Free tsk->delays. Called from bad fork and __put_task_struct - * where there's no risk of tsk->delays being accessed elsewhere - */ -static inline void delayacct_tsk_free(struct task_struct *tsk) -{ - if (delayacct_enabled()) - kmem_cache_free(delayacct_cache, tsk->delays); - tsk->delays =3D NULL; -} - static inline void delayacct_blkio_start(void) { if (delayacct_enabled()) diff --git a/include/linux/sched.h b/include/linux/sched.h index 77f01ac385f7..5cc78184a31f 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -37,6 +37,7 @@ #include #include #include +#include #include =20 /* task_struct member predeclarations (sorted alphabetically): */ @@ -1331,7 +1332,7 @@ struct task_struct { struct page_frag task_frag; =20 #ifdef CONFIG_TASK_DELAY_ACCT - struct task_delay_info *delays; + struct task_delay_info delays; #endif =20 #ifdef CONFIG_FAULT_INJECTION diff --git a/kernel/delayacct.c b/kernel/delayacct.c index ce10b7c1ee43..1a6b1d3e80af 100644 --- a/kernel/delayacct.c +++ b/kernel/delayacct.c @@ -16,7 +16,6 @@ =20 DEFINE_STATIC_KEY_FALSE(delayacct_key); int delayacct_on __read_mostly; /* Delay accounting turned on/off */ -struct kmem_cache *delayacct_cache; =20 static void set_delayacct(bool enabled) { @@ -38,7 +37,6 @@ __setup("delayacct", delayacct_setup_enable); =20 void delayacct_init(void) { - delayacct_cache =3D KMEM_CACHE(task_delay_info, SLAB_PANIC|SLAB_ACCOUNT); delayacct_tsk_init(&init_task); set_delayacct(delayacct_on); } @@ -87,9 +85,8 @@ late_initcall(kernel_delayacct_sysctls_init); =20 void __delayacct_tsk_init(struct task_struct *tsk) { - tsk->delays =3D kmem_cache_zalloc(delayacct_cache, GFP_KERNEL); - if (tsk->delays) - raw_spin_lock_init(&tsk->delays->lock); + memset(&tsk->delays, 0, sizeof(struct task_delay_info)); + raw_spin_lock_init(&tsk->delays.lock); } =20 /* @@ -111,7 +108,7 @@ static void delayacct_end(raw_spinlock_t *lock, u64 *st= art, u64 *total, u32 *cou =20 void __delayacct_blkio_start(void) { - current->delays->blkio_start =3D local_clock(); + current->delays.blkio_start =3D local_clock(); } =20 /* @@ -120,10 +117,10 @@ void __delayacct_blkio_start(void) */ void __delayacct_blkio_end(struct task_struct *p) { - delayacct_end(&p->delays->lock, - &p->delays->blkio_start, - &p->delays->blkio_delay, - &p->delays->blkio_count); + delayacct_end(&p->delays.lock, + &p->delays.blkio_start, + &p->delays.blkio_delay, + &p->delays.blkio_count); } =20 int delayacct_add_tsk(struct taskstats *d, struct task_struct *tsk) @@ -166,29 +163,29 @@ int delayacct_add_tsk(struct taskstats *d, struct tas= k_struct *tsk) =20 /* zero XXX_total, non-zero XXX_count implies XXX stat overflowed */ =20 - raw_spin_lock_irqsave(&tsk->delays->lock, flags); - tmp =3D d->blkio_delay_total + tsk->delays->blkio_delay; + raw_spin_lock_irqsave(&tsk->delays.lock, flags); + tmp =3D d->blkio_delay_total + tsk->delays.blkio_delay; d->blkio_delay_total =3D (tmp < d->blkio_delay_total) ? 0 : tmp; - tmp =3D d->swapin_delay_total + tsk->delays->swapin_delay; + tmp =3D d->swapin_delay_total + tsk->delays.swapin_delay; d->swapin_delay_total =3D (tmp < d->swapin_delay_total) ? 0 : tmp; - tmp =3D d->freepages_delay_total + tsk->delays->freepages_delay; + tmp =3D d->freepages_delay_total + tsk->delays.freepages_delay; d->freepages_delay_total =3D (tmp < d->freepages_delay_total) ? 0 : tmp; - tmp =3D d->thrashing_delay_total + tsk->delays->thrashing_delay; + tmp =3D d->thrashing_delay_total + tsk->delays.thrashing_delay; d->thrashing_delay_total =3D (tmp < d->thrashing_delay_total) ? 0 : tmp; - tmp =3D d->compact_delay_total + tsk->delays->compact_delay; + tmp =3D d->compact_delay_total + tsk->delays.compact_delay; d->compact_delay_total =3D (tmp < d->compact_delay_total) ? 0 : tmp; - tmp =3D d->wpcopy_delay_total + tsk->delays->wpcopy_delay; + tmp =3D d->wpcopy_delay_total + tsk->delays.wpcopy_delay; d->wpcopy_delay_total =3D (tmp < d->wpcopy_delay_total) ? 0 : tmp; - tmp =3D d->irq_delay_total + tsk->delays->irq_delay; + tmp =3D d->irq_delay_total + tsk->delays.irq_delay; d->irq_delay_total =3D (tmp < d->irq_delay_total) ? 0 : tmp; - d->blkio_count +=3D tsk->delays->blkio_count; - d->swapin_count +=3D tsk->delays->swapin_count; - d->freepages_count +=3D tsk->delays->freepages_count; - d->thrashing_count +=3D tsk->delays->thrashing_count; - d->compact_count +=3D tsk->delays->compact_count; - d->wpcopy_count +=3D tsk->delays->wpcopy_count; - d->irq_count +=3D tsk->delays->irq_count; - raw_spin_unlock_irqrestore(&tsk->delays->lock, flags); + d->blkio_count +=3D tsk->delays.blkio_count; + d->swapin_count +=3D tsk->delays.swapin_count; + d->freepages_count +=3D tsk->delays.freepages_count; + d->thrashing_count +=3D tsk->delays.thrashing_count; + d->compact_count +=3D tsk->delays.compact_count; + d->wpcopy_count +=3D tsk->delays.wpcopy_count; + d->irq_count +=3D tsk->delays.irq_count; + raw_spin_unlock_irqrestore(&tsk->delays.lock, flags); =20 return 0; } @@ -198,23 +195,23 @@ __u64 __delayacct_blkio_ticks(struct task_struct *tsk) __u64 ret; unsigned long flags; =20 - raw_spin_lock_irqsave(&tsk->delays->lock, flags); - ret =3D nsec_to_clock_t(tsk->delays->blkio_delay); - raw_spin_unlock_irqrestore(&tsk->delays->lock, flags); + raw_spin_lock_irqsave(&tsk->delays.lock, flags); + ret =3D nsec_to_clock_t(tsk->delays.blkio_delay); + raw_spin_unlock_irqrestore(&tsk->delays.lock, flags); return ret; } =20 void __delayacct_freepages_start(void) { - current->delays->freepages_start =3D local_clock(); + current->delays.freepages_start =3D local_clock(); } =20 void __delayacct_freepages_end(void) { - delayacct_end(¤t->delays->lock, - ¤t->delays->freepages_start, - ¤t->delays->freepages_delay, - ¤t->delays->freepages_count); + delayacct_end(¤t->delays.lock, + ¤t->delays.freepages_start, + ¤t->delays.freepages_delay, + ¤t->delays.freepages_count); } =20 void __delayacct_thrashing_start(bool *in_thrashing) @@ -224,7 +221,7 @@ void __delayacct_thrashing_start(bool *in_thrashing) return; =20 current->in_thrashing =3D 1; - current->delays->thrashing_start =3D local_clock(); + current->delays.thrashing_start =3D local_clock(); } =20 void __delayacct_thrashing_end(bool *in_thrashing) @@ -233,58 +230,58 @@ void __delayacct_thrashing_end(bool *in_thrashing) return; =20 current->in_thrashing =3D 0; - delayacct_end(¤t->delays->lock, - ¤t->delays->thrashing_start, - ¤t->delays->thrashing_delay, - ¤t->delays->thrashing_count); + delayacct_end(¤t->delays.lock, + ¤t->delays.thrashing_start, + ¤t->delays.thrashing_delay, + ¤t->delays.thrashing_count); } =20 void __delayacct_swapin_start(void) { - current->delays->swapin_start =3D local_clock(); + current->delays.swapin_start =3D local_clock(); } =20 void __delayacct_swapin_end(void) { - delayacct_end(¤t->delays->lock, - ¤t->delays->swapin_start, - ¤t->delays->swapin_delay, - ¤t->delays->swapin_count); + delayacct_end(¤t->delays.lock, + ¤t->delays.swapin_start, + ¤t->delays.swapin_delay, + ¤t->delays.swapin_count); } =20 void __delayacct_compact_start(void) { - current->delays->compact_start =3D local_clock(); + current->delays.compact_start =3D local_clock(); } =20 void __delayacct_compact_end(void) { - delayacct_end(¤t->delays->lock, - ¤t->delays->compact_start, - ¤t->delays->compact_delay, - ¤t->delays->compact_count); + delayacct_end(¤t->delays.lock, + ¤t->delays.compact_start, + ¤t->delays.compact_delay, + ¤t->delays.compact_count); } =20 void __delayacct_wpcopy_start(void) { - current->delays->wpcopy_start =3D local_clock(); + current->delays.wpcopy_start =3D local_clock(); } =20 void __delayacct_wpcopy_end(void) { - delayacct_end(¤t->delays->lock, - ¤t->delays->wpcopy_start, - ¤t->delays->wpcopy_delay, - ¤t->delays->wpcopy_count); + delayacct_end(¤t->delays.lock, + ¤t->delays.wpcopy_start, + ¤t->delays.wpcopy_delay, + ¤t->delays.wpcopy_count); } =20 void __delayacct_irq(struct task_struct *task, u32 delta) { unsigned long flags; =20 - raw_spin_lock_irqsave(&task->delays->lock, flags); - task->delays->irq_delay +=3D delta; - task->delays->irq_count++; - raw_spin_unlock_irqrestore(&task->delays->lock, flags); + raw_spin_lock_irqsave(&task->delays.lock, flags); + task->delays.irq_delay +=3D delta; + task->delays.irq_count++; + raw_spin_unlock_irqrestore(&task->delays.lock, flags); } =20 diff --git a/kernel/fork.c b/kernel/fork.c index 3b6d20dfb9a8..6f47989e3885 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -975,7 +975,6 @@ void __put_task_struct(struct task_struct *tsk) task_numa_free(tsk, true); security_task_free(tsk); exit_creds(tsk); - delayacct_tsk_free(tsk); put_signal_struct(tsk->signal); sched_core_free(tsk); free_task(tsk); @@ -2426,14 +2425,14 @@ __latent_entropy struct task_struct *copy_process( cgroup_fork(p); if (args->kthread) { if (!set_kthread_struct(p)) - goto bad_fork_cleanup_delayacct; + goto bad_fork_cleanup_count; } #ifdef CONFIG_NUMA p->mempolicy =3D mpol_dup(p->mempolicy); if (IS_ERR(p->mempolicy)) { retval =3D PTR_ERR(p->mempolicy); p->mempolicy =3D NULL; - goto bad_fork_cleanup_delayacct; + goto bad_fork_cleanup_count; } #endif #ifdef CONFIG_CPUSETS @@ -2781,8 +2780,6 @@ __latent_entropy struct task_struct *copy_process( #ifdef CONFIG_NUMA mpol_put(p->mempolicy); #endif -bad_fork_cleanup_delayacct: - delayacct_tsk_free(p); bad_fork_cleanup_count: dec_rlimit_ucounts(task_ucounts(p), UCOUNT_RLIMIT_NPROC, 1); exit_creds(p); --=20 2.25.1 From nobody Fri Jan 2 20:34:06 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8FBF8E95A82 for ; Sun, 8 Oct 2023 10:50:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344659AbjJHKt5 (ORCPT ); Sun, 8 Oct 2023 06:49:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49270 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344641AbjJHKtt (ORCPT ); Sun, 8 Oct 2023 06:49:49 -0400 Received: from mail-oo1-xc2a.google.com (mail-oo1-xc2a.google.com [IPv6:2607:f8b0:4864:20::c2a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 91FDFC5 for ; Sun, 8 Oct 2023 03:49:48 -0700 (PDT) Received: by mail-oo1-xc2a.google.com with SMTP id 006d021491bc7-57b67c84999so2346700eaf.3 for ; Sun, 08 Oct 2023 03:49:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696762188; x=1697366988; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rEfuhLWgVKO0bRAsmrd/J/SVgiZ3Q4uSTQ7SYs2eDEs=; b=h0lWoce2Kyc40d/jxonGnnHcnDt+3vzcNKg8n+wDV/ehZGBrb8SLcDF+5/Vhv2BXxH wv3YBb04RQKAt5vgBLUwVDH+TxxN+HTsC6G691FpYrE2nRnASFzoR3a5uSZmqLtdVpuX /VdqSQzhkiWoNVaAQzEz6r3XQqRsARyaYAlJlMj7Hot9Zf/aGc5ZbLnteGs324IaRXKn Oa2fNapCaSoqnRYlx5tKSqKsM1phcO2EbwiYTb4Qs40bubNQ2q7SPmvcsVYidLXKgAwR V9lTAPGlJON91z8hc39ITXwdBLL9MQawsaWbNLlTF6anbdE3DNsYlHuV48166PrEXfxH PbNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696762188; x=1697366988; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rEfuhLWgVKO0bRAsmrd/J/SVgiZ3Q4uSTQ7SYs2eDEs=; b=LH1QxbSoV2y+2isbxEni6Y+iAsRrKXlrI4feRfJMkE+xoKaTWkAhUBT+GPaXkJ20eJ HKjjRAgWZ6KDu9I14mWR/WfAM6wrSbwI2OsyKBd0poV6pik1X41ko+okQX8SqaWAZQ/Q HY7YJQqtmh8VF/5JFwm69vJaM9+G7RrrHW+I8vFXGeO4vF1MceCV8DhbrnG8P7104pWf J5CVQf+dB3RmBhrPU/6jV91lwoEEtRMOmZGwyVrKdDaDRl3DQ7xUcJbTAWVyOfUb8lye 9M/A6R3oY9TyQOVTljOFXi0KkflzpsMC6/Gp/WRqXYz2LH2YMAumIs+dKkunB+qZFAtC mZnA== X-Gm-Message-State: AOJu0Yxd2/oIj49V6WyJ2UqfgRvuyHd7zYIsMrUfSzWpBLA3Z25mxgjI uJKAlHLPfLvoJ9VVFEIkvqNyLmb6icFgwGBh X-Google-Smtp-Source: AGHT+IFoRp3hKwJQ4khQ3J5GSFgwZxsmttN9MqE/QhdNBpKGq3qXs5OFCPZUknb210kzO9qEf+fMhA== X-Received: by 2002:a05:6358:441d:b0:143:8574:4311 with SMTP id z29-20020a056358441d00b0014385744311mr13573769rwc.12.1696762187761; Sun, 08 Oct 2023 03:49:47 -0700 (PDT) Received: from localhost.localdomain ([143.92.64.18]) by smtp.gmail.com with ESMTPSA id z11-20020a17090acb0b00b002630c9d78aasm6311517pjt.5.2023.10.08.03.49.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Oct 2023 03:49:47 -0700 (PDT) From: "brookxu.cn" To: bsingharora@gmail.com, juri.lelli@redhat.com, peterz@infradead.org, vincent.guittot@linaro.org Cc: linux-kernel@vger.kernel.org Subject: [PATCH 3/3] delayacct: remove delayacct_on to simplify the code Date: Sun, 8 Oct 2023 18:49:38 +0800 Message-Id: <399a361ec136d972991fe84e9aad00e3c302f37a.1696761522.git.chunguang.xu@shopee.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Chunguang Xu Seems delayacct_on can be removed, so try to do it to simplify the code. Signed-off-by: Chunguang Xu --- include/linux/delayacct.h | 1 - kernel/delayacct.c | 14 ++++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/include/linux/delayacct.h b/include/linux/delayacct.h index 2f1dc6688a2f..caa7564a1a52 100644 --- a/include/linux/delayacct.h +++ b/include/linux/delayacct.h @@ -64,7 +64,6 @@ struct task_delay_info { =20 #ifdef CONFIG_TASK_DELAY_ACCT DECLARE_STATIC_KEY_FALSE(delayacct_key); -extern int delayacct_on; /* Delay accounting turned on/off */ extern void delayacct_init(void); =20 extern void __delayacct_tsk_init(struct task_struct *); diff --git a/kernel/delayacct.c b/kernel/delayacct.c index 1a6b1d3e80af..397b36adb634 100644 --- a/kernel/delayacct.c +++ b/kernel/delayacct.c @@ -15,22 +15,18 @@ #include =20 DEFINE_STATIC_KEY_FALSE(delayacct_key); -int delayacct_on __read_mostly; /* Delay accounting turned on/off */ =20 static void set_delayacct(bool enabled) { - if (enabled) { + if (enabled) static_branch_enable(&delayacct_key); - delayacct_on =3D 1; - } else { - delayacct_on =3D 0; + else static_branch_disable(&delayacct_key); - } } =20 static int __init delayacct_setup_enable(char *str) { - delayacct_on =3D 1; + set_delayacct(true); return 1; } __setup("delayacct", delayacct_setup_enable); @@ -38,16 +34,14 @@ __setup("delayacct", delayacct_setup_enable); void delayacct_init(void) { delayacct_tsk_init(&init_task); - set_delayacct(delayacct_on); } =20 #ifdef CONFIG_PROC_SYSCTL static int sysctl_delayacct(struct ctl_table *table, int write, void *buff= er, size_t *lenp, loff_t *ppos) { - int state =3D delayacct_on; struct ctl_table t; - int err; + int err, state; =20 if (write && !capable(CAP_SYS_ADMIN)) return -EPERM; --=20 2.25.1