From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtpbgau2.qq.com (smtpbgau2.qq.com [54.206.34.216]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E86843F9FB for ; Tue, 30 Jun 2026 11:40:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.206.34.216 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782819608; cv=none; b=IMMUObmJofDKas3jK9qm5Fp/3084t/hvWn2ctnOoz7nyf1/3w09tUwG3AFIBZZ0ylFAsp9oLxqnwUe7Js3myA7t4CZ3ZMQ2/Tc1YvgUCFsl1thrEzFUfrPvbOYGFFWX9H/cSJkuQo2K8aTvQ7z2/ubGDObnE80jIlhB7OLfLs5U= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782819608; c=relaxed/simple; bh=NUxvGVc+PE1Soi+nPy6Aobwo+QLXGaiFkUE37wtGGTc=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=O3mYakoRpsczLdNP7j6GiCqkXVovFbkEBw0wBEOxhUijQruNBSnOPsc4LU+kHd4m/5X7NHksIQAMMyYbCiE4NZ8XMqjNtBjhbp5TT3WzDPvQuLdKZR841EBeS5+4gG/A3fTmWGsS82zsc7kJbBIv1W43+7fYeaZSdTFuA3jAKzE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com; spf=pass smtp.mailfrom=uniontech.com; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b=ZJtc4DY3; arc=none smtp.client-ip=54.206.34.216 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=uniontech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=uniontech.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=uniontech.com header.i=@uniontech.com header.b="ZJtc4DY3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=uniontech.com; s=onoh2408; t=1782819563; bh=2DTZxiReDZe/UfzDYH4J6ofd3XwFaAtenmT6j/RacmQ=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=ZJtc4DY3a7wgi2wgFqKfTvjeaxxq1BzRLbeGN+Er6kgz+jjbpKe53uAp0K2pAnowY jBFyX75pEyYe5CQ/Bv3f4ogINxmMRWfpQHTgxwbwPU4LkK8Nx4A33Y+XRAoLy1HAI3 jO3fR836Kxbu2mceVZAQeAlvOKc0G/wgL1z42GL4= X-QQ-mid: zesmtpsz2t1782819544t49749188 X-QQ-Originating-IP: sxEsh/LsGlrcKq7rsdcnntKfWGdMDa9vi9AN+mgPoWc= Received: from localhost.localdomain ( [113.57.152.160]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 30 Jun 2026 19:39:02 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 1 X-BIZMAIL-ID: 11253890837269106346 EX-QQ-RecipientCnt: 8 From: Wentao Guan To: mike.kravetz@oracle.com, muchun.song@linux.dev Cc: osalvador@suse.de, david@kernel.org, akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Wentao Guan Subject: [PATCH] mm/hugetlb: avoid unnecessary TLB flush for empty folio list in vmemmap optimize Date: Tue, 30 Jun 2026 19:38:57 +0800 Message-Id: <20260630113857.3319612-1-guanwentao@uniontech.com> X-Mailer: git-send-email 2.30.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:uniontech.com:qybglogicsvrgz:qybglogicsvrgz3a-0 X-QQ-XMAILINFO: McoPngcDBvM5GcdEB5V2fCXSnObxkMXgCYM59VrVax8XvAxYVvLw06wN ah2MJ2fEzvJRImKtnt8v4lkiAzoQTNjTBdVAvqSi66uEdJwX1ipZot2VGVLIZPANu38NBJl wXjd9ghA+x12BdMXzzL9okS2RIId+ElxS9pQaHKx9gtuto+QO6OhQ4TMnl/LDfLskOCwxvm clYPgria/HFn43s3+2xtlSCoxncfHjEuAnkyUR8P+jF57AyZsUgahyjRqhFjA8HATb1CVFX 5dupi4y1t0BCpDb7jYHYUTN7tG8VEOE5MUq/TwWqgagx0oKRCrKf72AC3JKY7KG29P+vnFt WSLpKnSUuQ1Z7ENXSXFuz6YDWEwoZPmx7eiNi7PnaUfFZMRDqQajnVMETn1oIcSRIUqmouk GUuGfutonL/4aMazCn5XVBySceGC19iMO2DDYrNEX7WfX6VH/bqJjg5D1p3rM5YLYP/28Dy sO7Qyv23W0ihnOlWEXjC54IoUNLecsUdYYCFy2FrP+M9sDy6QuikTEppVjAr/fJ+WzHS9Zh QGgtxreXuMCgjhHFb/5IOL0rT0uhyeq+SgjUWJQp6Vrix3aKxlyRyZ8CZTCNu7qDc+5a6sg sOt+9PQhz+hjrJdgOsX1J7RV0T3mZMIm7pt3QpsD4VFA8KZu+r3jXiG8NBniNcowYEf1Soi rpA2lrrpp3aehO8vwNGsfEbA/glDGMOugHoEdlgLlSPzyV0mbw3CHgmToYzfsmNTdpTupnb PE6JRZcadtB1vcggpikuH4VZL7bdFgERdyzyrM7CLY6VV23AJhqFK8MoJtoFPsscwcZc6sR 9C/QFfxgUEV54rVTumdxEN8ZWoDGEdGHS2tNePRtLKRTFHjqi6uZc1eR3kfWed3KAwuCBsy Xi5edwfkJc66iOcENSJPPv+1D+mKncL1zuIynDdqjY4lIn8RzrqL69gb7Jk8YaNTuxScKXf GQKKd9YRjTzr2PeAuzUHTs7mVip0Ur+EZ0YSA/cCsqaNP0LWuifTV3SAF27DlPrh5MRlz+U 52vTkl6aojfsN46LVfrLMygDVGg2UjVBcaMr7f0ifTtlOgxXfhRFp9UrY/OC9f26uWG9r39 Q== X-QQ-XMRINFO: NI4Ajvh11aEjEMj13RCX7UuhPEoou2bs1g== X-QQ-RECHKSPAM: 0 __hugetlb_vmemmap_optimize_folios() unconditionally issues a final flush_tlb_all() in its out path. However, a TLB flush must be paired with an actual page table modification. When the input folio list is empty, neither PMD splitting nor PTE remapping takes place, so no page tables are modified and the flush is pure overhead. An empty list is reached in common paths such as gather_bootmem_prealloc_node() on nodes without bootmem gigantic pages, hugetlb_pages_alloc_boot_node() when no pages were allocated, and runtime allocation failure paths in set_max_huge_pages(). Add an early return for empty lists. This restores the basic invariant that TLB flushes are only issued when page tables have been modified, and it also makes the NULL hstate passed by gather_bootmem_prealloc_node() on an empty list harmless. Assisted-by: kimi-cli:kimi-k2.7 code Assisted-by: Github Copilot:gpt-5.2 #Reported-by Fixes: 79359d6d24df ("hugetlb: perform vmemmap optimization on a list of pages") Signed-off-by: Wentao Guan --- mm/hugetlb_vmemmap.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index 133b46dfb09f5..d45d5355d1af1 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -624,6 +624,9 @@ static void __hugetlb_vmemmap_optimize_folios(struct hstate *h, LIST_HEAD(vmemmap_pages); unsigned long flags = VMEMMAP_REMAP_NO_TLB_FLUSH; + if (list_empty(folio_list)) + return; + nr_to_optimize = 0; list_for_each_entry(folio, folio_list, lru) { int ret; -- 2.30.2