From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794064454; b=kBjPYa8Eg9zgms3DlFkbdfAYG0EgS09Np0wLP/3Ty/7RfREn8OYbivso/nA2ShgSzXJU C0TuWWPK/CAlUvhRi4ztc9L55JlBa/E1BT5Oylcd4CN+AstH5gF3ahJMxIuttdICV3CfY imtME3QUFjPtnPXdIrD9Oq0xiJcsBBvoZdng7I/Wak54cdfH8ki77XaMqWkKKCX+AscFZ G+dfkPu7X/xV0B0Eahotmz/9Jz6g+TuF3wdZZfETWkiUFHhTCWAbXjcyYcO4iH36zbXUf lJZeAZPVZEs6z9WKlcVrapU/hny6NcmCk3NwqSJgW/tL3GnlflEQpdptN+ujuFEj2TA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794064454; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:User-Agent:X-stable:X-Patchwork-Hint: MIME-Version:Content-Transfer-Encoding; bh=qwmYtXxQEgplPS/AOS1DXRBJwy6jbCsj8QR1rOyURX8=; b=HkaAMYKMZ00NHVi2wmd0AlsKaWGBc/j90Vua8STEPLEMc3Kb1l0blMXCt+P7QQg8zZiV lFdN4jDy7w4tbktBHNGctp+uYf6sKHH+8QAYeD7sbTgA/yOWxiOpO0WLPWO5gUHOgjrJ8 nyUsEEQt/eDeyDSDquL2AdWlUA2Ojr5+QlztneyB2ZRz8OcY1ZfTJLToNvujLNucXw+4P pfXPCKRqg6LN8zBJQJlVsxM/YbfLKizcut2vVAyeD0pW0YzEk1mKqulWvlcCahB7gjFSP W7TSMEWJEEwoSwqL+yYzIUNV3DUGei+kMjXBUtUX6HrYpuVj9EEc+K3w8gla8RBfSFw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=K8oJZaCx; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F3A4606C008; Sat, 7 Nov 2026 15:14:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=K8oJZaCx Received: by smtp.kernel.org (Postfix) with ESMTPSA id D989C1F008A4; Sat, 7 Nov 2026 15:14:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794064454; bh=qwmYtXxQEgplPS/AOS1DXRBJwy6jbCsj8QR1rOyURX8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=K8oJZaCxhQBfxTWcDoM3dG+d6pPBEiKJTKiB7KfQuQVKdZXAwL9ItWzwhLEqFBx1/ e7eSIDzX2ZJnCPoS36WGQpzTyTfJa3AJ/3K9+z0fZTsS3oRJFKWXEBVOn3+vMnTHnJ WrwVFH+CdTuzRAzt3el9RRCKNW0DoNnabG6FgYWo= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Michal Hocko , Shakeel Butt , Rik van Riel , Andrew Morton , Johannes Weiner , Muchun Song , Roman Gushchin , Sasha Levin Subject: [PATCH 7.3 0496/1257] mm/memcontrol: fix stuck FLUSHING_CACHED_CHARGE bit on isolated cpus Date: Sat, 7 Nov 2026 08:46:32 -0500 Message-ID: <20261107134953.134273955@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261107134939.434104957@linuxfoundation.org> References: <20261107134939.434104957@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore X-Mailing-List: stable@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 7.3-stable review patch. If anyone has any objections, please let me know. ------------------ From: Rik van Riel [ Upstream commit d2f28a1a652e0a43f6f63de9b4e4d8d5f2716803 ] When drain_all_stock() sets FLUSHING_CACHED_CHARGE before checking isolation, schedule_drain_work() can drop the work in a separate RCU critical section, and housekeeping_update()'s synchronize_rcu() can race that second check, leaving the flag set. drain_local_stock() only clears the bit for work that ran, so the flag remains set and the stock is never drained again. Have schedule_drain_work() return whether the work was queued, and clear FLUSHING_CACHED_CHARGE in drain_all_stock() when the remote CPU is isolated, so future drains can retry. Link: https://lore.kernel.org/20260828135036.7d44361f@fangorn Fixes: 6a792697a53a ("memcg: do not drain charge pcp caches on remote isolated cpus") Suggested-by: Michal Hocko Suggested-by: Shakeel Butt Signed-off-by: Rik van Riel Signed-off-by: Andrew Morton Acked-by: Shakeel Butt Acked-by: Michal Hocko Cc: Johannes Weiner Cc: Muchun Song Cc: Roman Gushchin Cc: Signed-off-by: Sasha Levin --- mm/memcontrol.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index d399710e9799a..814eb56feb6f5 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2306,7 +2306,7 @@ static bool is_memcg_drain_needed(struct memcg_stock_pcp *stock, return flush; } -static void schedule_drain_work(int cpu, struct work_struct *work) +static bool schedule_drain_work(int cpu, struct work_struct *work) { /* * Protect housekeeping cpumask read and work enqueue together @@ -2315,8 +2315,11 @@ static void schedule_drain_work(int cpu, struct work_struct *work) * pending work on newly isolated CPUs. */ guard(rcu)(); - if (!cpu_is_isolated(cpu)) - queue_work_on(cpu, memcg_wq, work); + if (cpu_is_isolated(cpu)) + return false; + + queue_work_on(cpu, memcg_wq, work); + return true; } /* @@ -2348,8 +2351,9 @@ void drain_all_stock(struct mem_cgroup *root_memcg) &memcg_st->flags)) { if (cpu == curcpu) drain_local_memcg_stock(&memcg_st->work); - else - schedule_drain_work(cpu, &memcg_st->work); + else if (!schedule_drain_work(cpu, &memcg_st->work)) + clear_bit(FLUSHING_CACHED_CHARGE, + &memcg_st->flags); } if (!test_bit(FLUSHING_CACHED_CHARGE, &obj_st->flags) && @@ -2358,8 +2362,9 @@ void drain_all_stock(struct mem_cgroup *root_memcg) &obj_st->flags)) { if (cpu == curcpu) drain_local_obj_stock(&obj_st->work); - else - schedule_drain_work(cpu, &obj_st->work); + else if (!schedule_drain_work(cpu, &obj_st->work)) + clear_bit(FLUSHING_CACHED_CHARGE, + &obj_st->flags); } } migrate_enable(); -- 2.53.0