From mboxrd@z Thu Jan 1 00:00:00 1970 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1FA60E77188 for ; Fri, 10 Jan 2025 20:14:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 79FAF6B00A5; Fri, 10 Jan 2025 15:14:24 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 74F846B00A8; Fri, 10 Jan 2025 15:14:24 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6177A6B00DC; Fri, 10 Jan 2025 15:14:24 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 41B1A6B00A5 for ; Fri, 10 Jan 2025 15:14:24 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id D35F6120CB3 for ; Fri, 10 Jan 2025 20:14:23 +0000 (UTC) X-FDA: 82992644406.19.57C618B Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.66]) by imf08.hostedemail.com (Postfix) with ESMTP id D0B2E160019 for ; Fri, 10 Jan 2025 20:14:21 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=posteo.net header.s=2017 header.b=ULvgGymA; spf=pass (imf08.hostedemail.com: domain of charmitro@posteo.net designates 185.67.36.66 as permitted sender) smtp.mailfrom=charmitro@posteo.net; dmarc=pass (policy=none) header.from=posteo.net ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1736540062; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=wL3BK3GLxBa/J/tsyMSbicInR+G+yNIFyVkHDoLPz9E=; b=M9OI6DSFfcaqRR9hx9YXCGIubLgHmT+Q8yq4bA4KGA9IP48+TsE6LpQ+4hfVanzLYjuuqg RyrreJ8DL2ozMepKjEQXnvzxnpPfTPtjP8rjUCkUwSJ3yaaPMuM+WStWkXYGu2JYgowDnV uDB61Jcc/uCYV7EQYWPvxcYCKBlhwRc= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736540062; a=rsa-sha256; cv=none; b=oijeeXwoajVJiYOCMhhX7P1qnmrF6bJUM5YlhNt0SB7Dd00hVr3ahGgjNfJ5gkM4qam01l Kos8TgBS88iqoMEQJqPc+tu2KEYbBUS7y38bmfKhbUM0iAY2PblooKP9saBQ+9i+AZHYkR 6V7X2j6IocRSqoIVDqyCmPhN+BZESCQ= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=posteo.net header.s=2017 header.b=ULvgGymA; spf=pass (imf08.hostedemail.com: domain of charmitro@posteo.net designates 185.67.36.66 as permitted sender) smtp.mailfrom=charmitro@posteo.net; dmarc=pass (policy=none) header.from=posteo.net Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 39F6B240101 for ; Fri, 10 Jan 2025 21:14:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1736540059; bh=0sXEhsON+ITCBwNhbLkvzdvr+Yw+jSesU8O4stHmHgY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type: From; b=ULvgGymAHsidFRoQgNRmUaU8IgmbBlGinnMA9XSCbVhMp91KmseQPmKgYoNMN6HhY cyaLJOmHl8resAal6DwIj2NMErGF0/tNhRhOBxLgVMfJWepzHO5t/ZtFJycRmGlTga e07H/GRp+Hn5NtwOT4wmaaUWiXbbxNA26VfcW9sTiUXbUr6Egu4uSiVNOHpP5W8sQF 5mPdXeb68JQNXZI16Si3+2xooRBNuzzKf3tdaVun7RPWKeipklqXhNXkMo4WuDR7DX Igf56O0sM/4xJVMY/z5kGXbR25u1xp6k8o3ZzPDjYil5ZRcdYGxXvm7TWNNiSD/6JY ZQcti833ZTVaA== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4YVCY54kCnz9rxN; Fri, 10 Jan 2025 21:14:17 +0100 (CET) From: Charalampos Mitrodimas To: Koichiro Den Cc: linux-mm@kvack.org, akpm@linux-foundation.org, lorenzo.stoakes@oracle.com, chenhuacai@kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] vmstat: disable vmstat_work on vmstat_cpu_down_prep() In-Reply-To: <20250108042807.3429745-1-koichiro.den@canonical.com> (Koichiro Den's message of "Wed, 8 Jan 2025 13:28:07 +0900") References: <20250108042807.3429745-1-koichiro.den@canonical.com> Date: Fri, 10 Jan 2025 20:14:16 +0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: D0B2E160019 X-Stat-Signature: mudixi9y37sddwnj3suptdb1d3gfb74i X-Rspam-User: X-HE-Tag: 1736540061-676614 X-HE-Meta: U2FsdGVkX1+PJJcpzSZsD+IB32OX57GAcJaxXPNszpgtBa/sSbae4AM3zErHYxhSnBbi3thyM8RJJZrb0l6yLbtxUD+VzIkVMSj0Eo2MmTwa58o9xfwlzBOsqWVMqzRUAXomILLePG0DKiN5yFQ7d4tN+QG6ACtgxhrzy+iFnWoCLLzuj7gfwH+uN5BWp+15gODirOH1tVyGpPrlEQoOMdaTihmGpzmlibPgZcUj8jhY+8e1lifCVWXSdGsoL+QRbp4+d+DDz32Yr7oICBnh/8UkXmbcxvvGN3DwmqpPKTPK7ze0juXbmeLRRD4Qzkt1x/zDbqelDClCTgAnpTKP7e4lf/37049nHsjcZMHT++rW97oem48BnjoACUfEjyACvk44RL2AdWyw47gBIN1f5ygA3+o+BkPqVWNO7q5d3P8N9ZmtDqG4np4NiTw/FFz3XsuBYlNdt1ODXsWrvOVqFHQ2O2XZmKJlgBRTAvUsTJtWUozETQvMWwsFMF/7ViTn7imNKqI88VfPNmSoae4fnXqpFnMtGNTdv9P7x13CmcmvksgZAwctqjH67hxq6cY3Y22Di1DAYl2xNhjYL/HpL93MHHFooTk4TCFbHdmCn/WKvJQaDu5K3+rmQdmXJrKpFjgjBqaSBugIRFHaMdDxYd2byS2ziVBNh3Pgm1Df1e0+cE6HEAhMknHE8GAUFaLBVay5r6C0NTyYNYv7CwfFZdksxQXvpaOhlO1LbDicgFL+eV49iTIQpSQbgsntY7nx8dg4HboRP3u29TAJZ61U3WsvQKhc/QVXNEPGf+bb3HZTzuJCYz4D1RgHFEgFsjuVoFeZ5TfoJmoo0VB3UuMucWbYr5PurvHgKB0hLcBTx27sa9RNPaSJMf8WV2AZf1xwteYdlYDIRFWuLl6BE2HCxXVxqEEjXuZdW2AOnCkJ4UohO4s20LNOwOspwyBzhcn1q72SDNrSXuyqw1Xfebp mIHPkgTP FRZqGBz+sX6CA0Npa4SCVfThaD0YiNmZTPagkRgE/brmPhu1boFUmkRdbaaZRTqwyw0zEWMIIsHkj4oaaDzHsjtzNn9guVi5nFRkuTKd501M81dt/3q+3C29HH0L/9QMUWy+x5K/zbLRNWMPEFOTS9lzGyuH6EZ0iOOX6/6LEnRffGKnQjmN6YGCCZroWCFn4TEwBORFX9sEuULCuONp/6Pa5HnFPZj47TxZGJNQg61OkZTHa+BZpp3mhSYEsvCABrrbsCDSMGpZhZiuMBiNqh41jmPmZprSAomJAGzp2oQOpjEtUt2nDcJ5ZhrhgLW55jH68fJHBi7YaAbFKKSNjQjX8D94GIjROT6uz4T0c/EcSiCD7b5p2PWpRB9GGycjm8RSlp0m7XrSVfsFPjHsF904G/UMCgnF1JE5Z0KfvtcZOIST9ltX5foyaig1sd7dZP8utc9UWvBsdKlUTMFWH62K+By40TSeu/lHGZZYkPtT4vc0= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Koichiro Den writes: > The upstream commit adcfb264c3ed ("vmstat: disable vmstat_work on > vmstat_cpu_down_prep()") introduced another warning during the boot phase > so was soon reverted on upstream by commit cd6313beaeae ("Revert "vmstat: > disable vmstat_work on vmstat_cpu_down_prep()""). This commit resolves it > and reattempts the original fix. > > Even after mm/vmstat:online teardown, shepherd may still queue work for > the dying cpu until the cpu is removed from online mask. While it's quite > rare, this means that after unbind_workers() unbinds a per-cpu kworker, it > potentially runs vmstat_update for the dying CPU on an irrelevant cpu > before entering atomic AP states. When CONFIG_DEBUG_PREEMPT=y, it results > in the following error with the backtrace. > > BUG: using smp_processor_id() in preemptible [00000000] code: \ > kworker/7:3/1702 > caller is refresh_cpu_vm_stats+0x235/0x5f0 > CPU: 0 UID: 0 PID: 1702 Comm: kworker/7:3 Tainted: G > Tainted: [N]=TEST > Workqueue: mm_percpu_wq vmstat_update > Call Trace: > > dump_stack_lvl+0x8d/0xb0 > check_preemption_disabled+0xce/0xe0 > refresh_cpu_vm_stats+0x235/0x5f0 > vmstat_update+0x17/0xa0 > process_one_work+0x869/0x1aa0 > worker_thread+0x5e5/0x1100 > kthread+0x29e/0x380 > ret_from_fork+0x2d/0x70 > ret_from_fork_asm+0x1a/0x30 > > > So, for mm/vmstat:online, disable vmstat_work reliably on teardown and > symmetrically enable it on startup. > > For secondary CPUs during CPU hotplug scenarios, ensure the delayed work > is disabled immediately after the initialization. These CPUs are not yet > online when start_shepherd_timer() runs on boot CPU. vmstat_cpu_online() > will enable the work for them. > > Suggested-by: Huacai Chen > Signed-off-by: Huacai Chen > Signed-off-by: Koichiro Den > --- > v2: https://lore.kernel.org/all/20241221033321.4154409-1-koichiro.den@canonical.com/ > v1: https://lore.kernel.org/all/20241220134234.3809621-1-koichiro.den@canonical.com/ > --- > mm/vmstat.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/mm/vmstat.c b/mm/vmstat.c > index 4d016314a56c..16bfe1c694dd 100644 > --- a/mm/vmstat.c > +++ b/mm/vmstat.c > @@ -2122,10 +2122,20 @@ static void __init start_shepherd_timer(void) > { > int cpu; > > - for_each_possible_cpu(cpu) > + for_each_possible_cpu(cpu) { > INIT_DEFERRABLE_WORK(per_cpu_ptr(&vmstat_work, cpu), > vmstat_update); > > + /* > + * For secondary CPUs during CPU hotplug scenarios, > + * vmstat_cpu_online() will enable the work. > + * mm/vmstat:online enables and disables vmstat_work > + * symmetrically during CPU hotplug events. > + */ > + if (!cpu_online(cpu)) > + disable_delayed_work_sync(&per_cpu(vmstat_work, cpu)); > + } > + > schedule_delayed_work(&shepherd, > round_jiffies_relative(sysctl_stat_interval)); > } > @@ -2148,13 +2158,14 @@ static int vmstat_cpu_online(unsigned int cpu) > if (!node_state(cpu_to_node(cpu), N_CPU)) { > node_set_state(cpu_to_node(cpu), N_CPU); > } > + enable_delayed_work(&per_cpu(vmstat_work, cpu)); > > return 0; > } > > static int vmstat_cpu_down_prep(unsigned int cpu) > { > - cancel_delayed_work_sync(&per_cpu(vmstat_work, cpu)); > + disable_delayed_work_sync(&per_cpu(vmstat_work, cpu)); > return 0; > } Hi Koichiro, Tested this version of your patch and it seems to be working as expected on my x86_64 QEMU. Tested-by: Charalampos Mitrodimas