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=1794590580; b=Nvfz3iaMi3YpisLYbpUNw/g4Zqa6x0rT2Zgqzo/5vz2lF/lRgsm77oD75UpZUTPIGBeK XrmAprmsz3jC0iXK+QLje1wV+Jf4roL0Ep7lBft5OP/ETOeIXtUD+MM9+NLTtG56wKSy1 N9aBATEC0YigJofMSr/h/5P2kNiUNuDLC/74UmbI7Q+LUWBW/Na3SaZht51J8Re6JrEFI e5M/GM+0wZSf4TLUsDmAFtEibOTHWk41b7mFy4qbHbz23tWJeBOpRZ0fB70VbRPbnmSnE T2zg4h54Zy62IRn/Z6VCeM+AtZHmRrEbnNmFlqPWMUpiz5CluNdZpe7eyxQFRxIvURQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794590580; 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=Ck/2Su7wGGWS/huQ9T5puYVj8NyPcu9bwwaQWp1glxs=; b=N/Ia6qkzPgzFmNlpAMCpEVb0sBkxgVmp+2pxDI8LQssjkfDxKp+lnG55ULP7w/CyfHxT +UAMhzwITmhrv4lkpiPLY9E3ZhnPYp4RnlKSYk1H9RGPhhazOEKPIg0kt84obvOZb/V/0 ALxmyI0lYevnukCf3uogzlhoORJ+TCxZvs3ofEPoO1f/e8Bkl7YLVNsti+UbgKaBlJkqH da35T3uC7+zKTk0q+z+IF9RLnFTvOAbaPtaCcFvPa3v6/7sbCiSXmhdgjVB4004GnvfL3 mQavn4Qtml54ZhLkCIIzzpKjAE25osSb2tIfcyq8sSM3tmtQwfdJ177ZvqNM+J+zOuQ== 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=sfygSXGS; 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 B8AE8606BD38; Fri, 13 Nov 2026 17:23:00 +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=sfygSXGS Received: by smtp.kernel.org (Postfix) with ESMTPSA id 75A281F000C7; Fri, 13 Nov 2026 17:23:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794590580; bh=Ck/2Su7wGGWS/huQ9T5puYVj8NyPcu9bwwaQWp1glxs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=sfygSXGShn/VTb0KtA99MOmMfm8Q3D/7ErgMxE16TmAzeDhi6OMPGOX0bH4f8nJ9a QlILbDhFOsssDFjbK2TRnkuJvUiLWodEwz6dvs/JNoXllZ3b3kPgtXbGbjkk98OOKO a4KU7VNv7zwZew1RacXDAd+far0Vw5G3EzuRpLQE= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Sasha Levin Subject: [PATCH 6.18 463/686] Revert "hugetlb: remove VMEMMAP_SYNCHRONIZE_RCU" Date: Fri, 13 Nov 2026 10:49:56 -0500 Message-ID: <20261113153836.560369457@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261113153820.902362109@linuxfoundation.org> References: <20261113153820.902362109@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 6.18-stable review patch. If anyone has any objections, please let me know. ------------------ This reverts commit dba93b8cceb0048071389352fc29dcb0a7fe666f. Signed-off-by: Sasha Levin --- mm/hugetlb_vmemmap.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index 795e7dbbca7d0..efe4bcc85da2c 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -45,6 +45,8 @@ struct vmemmap_remap_walk { #define VMEMMAP_SPLIT_NO_TLB_FLUSH BIT(0) /* Skip the TLB flush when we remap the PTE */ #define VMEMMAP_REMAP_NO_TLB_FLUSH BIT(1) +/* synchronize_rcu() to avoid writes from page_ref_add_unless() */ +#define VMEMMAP_SYNCHRONIZE_RCU BIT(2) unsigned long flags; }; @@ -405,6 +407,9 @@ static int __hugetlb_vmemmap_restore_folio(const struct hstate *h, if (!folio_test_hugetlb_vmemmap_optimized(folio)) return 0; + if (flags & VMEMMAP_SYNCHRONIZE_RCU) + synchronize_rcu(); + vmemmap_start = (unsigned long)&folio->page; vmemmap_end = vmemmap_start + hugetlb_vmemmap_size(h); @@ -437,7 +442,7 @@ static int __hugetlb_vmemmap_restore_folio(const struct hstate *h, */ int hugetlb_vmemmap_restore_folio(const struct hstate *h, struct folio *folio) { - return __hugetlb_vmemmap_restore_folio(h, folio, 0); + return __hugetlb_vmemmap_restore_folio(h, folio, VMEMMAP_SYNCHRONIZE_RCU); } /** @@ -460,11 +465,14 @@ long hugetlb_vmemmap_restore_folios(const struct hstate *h, struct folio *folio, *t_folio; long restored = 0; long ret = 0; - unsigned long flags = VMEMMAP_REMAP_NO_TLB_FLUSH; + unsigned long flags = VMEMMAP_REMAP_NO_TLB_FLUSH | VMEMMAP_SYNCHRONIZE_RCU; list_for_each_entry_safe(folio, t_folio, folio_list, lru) { if (folio_test_hugetlb_vmemmap_optimized(folio)) { ret = __hugetlb_vmemmap_restore_folio(h, folio, flags); + /* only need to synchronize_rcu() once for each batch */ + flags &= ~VMEMMAP_SYNCHRONIZE_RCU; + if (ret) break; restored++; @@ -513,6 +521,8 @@ static int __hugetlb_vmemmap_optimize_folio(const struct hstate *h, static_branch_inc(&hugetlb_optimize_vmemmap_key); + if (flags & VMEMMAP_SYNCHRONIZE_RCU) + synchronize_rcu(); /* * Very Subtle * If VMEMMAP_REMAP_NO_TLB_FLUSH is set, TLB flushing is not performed @@ -572,7 +582,7 @@ void hugetlb_vmemmap_optimize_folio(const struct hstate *h, struct folio *folio) { LIST_HEAD(vmemmap_pages); - __hugetlb_vmemmap_optimize_folio(h, folio, &vmemmap_pages, 0); + __hugetlb_vmemmap_optimize_folio(h, folio, &vmemmap_pages, VMEMMAP_SYNCHRONIZE_RCU); free_vmemmap_page_list(&vmemmap_pages); } @@ -600,7 +610,7 @@ static void __hugetlb_vmemmap_optimize_folios(struct hstate *h, struct folio *folio; int nr_to_optimize; LIST_HEAD(vmemmap_pages); - unsigned long flags = VMEMMAP_REMAP_NO_TLB_FLUSH; + unsigned long flags = VMEMMAP_REMAP_NO_TLB_FLUSH | VMEMMAP_SYNCHRONIZE_RCU; nr_to_optimize = 0; list_for_each_entry(folio, folio_list, lru) { @@ -654,6 +664,8 @@ static void __hugetlb_vmemmap_optimize_folios(struct hstate *h, int ret; ret = __hugetlb_vmemmap_optimize_folio(h, folio, &vmemmap_pages, flags); + /* only need to synchronize_rcu() once for each batch */ + flags &= ~VMEMMAP_SYNCHRONIZE_RCU; /* * Pages to be freed may have been accumulated. If we -- 2.53.0