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 C4FAAC83F17 for ; Wed, 16 Jul 2025 01:26:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4BB4F6B00AF; Tue, 15 Jul 2025 21:26:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 46D8B6B00B0; Tue, 15 Jul 2025 21:26:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 35C616B00B2; Tue, 15 Jul 2025 21:26:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 25DF46B00AF for ; Tue, 15 Jul 2025 21:26:33 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id DC10B140222 for ; Wed, 16 Jul 2025 01:26:32 +0000 (UTC) X-FDA: 83668387824.18.A729932 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by imf23.hostedemail.com (Postfix) with ESMTP id 9FCC4140003 for ; Wed, 16 Jul 2025 01:26:30 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2025-04-25 header.b=LmzuQef3; spf=pass (imf23.hostedemail.com: domain of anthony.yznaga@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=anthony.yznaga@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752629190; a=rsa-sha256; cv=none; b=6H80ZVXWR44KPl2CXLVxo6lfDtoVssYDEYQOhRHv9bbwNuB/FMdCcPW+OtPv0igNdHrVc+ GDEPlB665PZqQ56n/S4P+drHAOM6DZDZlc7BjLkCSZd3tphDXdIVw4vMAVsjiIq5LqahFt HYj173jeh5PJK3y2ccRupGnyIypJJK4= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2025-04-25 header.b=LmzuQef3; spf=pass (imf23.hostedemail.com: domain of anthony.yznaga@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=anthony.yznaga@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752629190; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=9hPbqmtAMmLdLyUbDapemdQ6eylYnjm/J652cQBK1HM=; b=sKUoV3Jcv0caZauGrz+KNKdvdpTMO960mgOO+8FAmh7+W4thUbzYZLj1Qthklji/ivtru+ L+DrMdGSxPH1H7ppjJSHo0Pi3o5UnLcY5SBDhDX+/5xeW8chFh8dLhbUgoQk9wWdUhJsLD O/ZV+b9/lzBuZkUvlh49xC+MhTI2p5U= Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56G0foEb012888; Wed, 16 Jul 2025 01:26:15 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=9hPbq mtAMmLdLyUbDapemdQ6eylYnjm/J652cQBK1HM=; b=LmzuQef3mB6kdwanNW+5s yjZKOyjKu9vBbSuOSBKtkaOfMaJkxpZ0iMo2kOxOC1QiM3GPp3y6zPpBW8ttJU3t GRQtGrVpfX7JST/IL82Ye60YGaJ/y1d5fi4y+nd1SR+pwCZsLxDHrbWgHLALwYMg VPnAPZhYqrwS+CcqgWdChtE+6nM8F3/suvLqgmC6vKus1roQnJNzgyUiZFzjlFTd BOcVej+/GIyzCg89tpLBOsMK3220sYuK2wRgpR2xqV2m5G7z+uwMwZWTdcHow5qB Bhqv6wBv3+9/9qfrfbm8VbG/qD4D5wn5GvKbGguB4G+p+yUWcXqD1PRZjN/7h059 A== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47uk66yp8v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 16 Jul 2025 01:26:15 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56FN4FUP029730; Wed, 16 Jul 2025 01:26:14 GMT Received: from pps.reinject (localhost [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ue5afdr0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 16 Jul 2025 01:26:14 +0000 Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56G1QCRa036586; Wed, 16 Jul 2025 01:26:14 GMT Received: from localhost.localdomain (ca-dev60.us.oracle.com [10.129.136.27]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTP id 47ue5afdph-2; Wed, 16 Jul 2025 01:26:14 +0000 From: Anthony Yznaga To: davem@davemloft.net, andreas@gaisler.com, arnd@arndb.de, muchun.song@linux.dev, osalvador@suse.de, akpm@linux-foundation.org, david@redhat.com, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com Cc: linux-mm@kvack.org, sparclinux@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, alexghiti@rivosinc.com, agordeev@linux.ibm.com, anshuman.khandual@arm.com, christophe.leroy@csgroup.eu, ryan.roberts@arm.com, will@kernel.org Subject: [PATCH 1/3] sparc64: remove hugetlb_free_pgd_range() Date: Tue, 15 Jul 2025 18:26:09 -0700 Message-ID: <20250716012611.10369-2-anthony.yznaga@oracle.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250716012611.10369-1-anthony.yznaga@oracle.com> References: <20250716012611.10369-1-anthony.yznaga@oracle.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-15_05,2025-07-15_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxscore=0 spamscore=0 suspectscore=0 adultscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507160010 X-Proofpoint-ORIG-GUID: hZBv49Z9kpCcM1k4QZPaXjwtY8RtQ-m0 X-Authority-Analysis: v=2.4 cv=AZGxH2XG c=1 sm=1 tr=0 ts=6876ffb7 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=oCSX7sssdzT6tVRM9uEA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE2MDAxMSBTYWx0ZWRfX+Jlyb/pAzMAe BVa03bZxX71M1vvKHGj6bxcY7cOd2cuF7no8e5WNemj/GGCtotO0gEbZN0DYP9+MeG8QVOZvrC7 9Vt2uw/GL/Ak3nM8PGj8yprQbJcH17CSrWgZrchGEmrlhKFYg9lRdIv5RxlOicxkbM1n40z4q5x Vr8cOVM6SYeN8c51j08yQz842EToQCzwWQdQ9uJja/MQJFdpV5LL70AYdGW9rdwavKS+gC0byhQ yrF4Poh9luwAXXUZKMOO2QDhwGZDBnFYpkkKdXTZIyGypcuE9dEIilV8QspFeEIkqnH+ggD6z1P dd7XvCGzMMFwNbeFGQWoAu2jcg/UeQDsvuyy2Ud3zjAVMO5Rc8KpPfJYarCF+Qjy97GQncPGK4q aQg6RNX0WBqdTg//vmRhRpB/H8vAjIJlnUI2p0XOtfupyUd+6iWd+05efKXDamL8F17AFSN4 X-Proofpoint-GUID: hZBv49Z9kpCcM1k4QZPaXjwtY8RtQ-m0 X-Rspam-User: X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 9FCC4140003 X-Stat-Signature: s7bm4xscja8hkk5j3sti94qodh9c6nsr X-HE-Tag: 1752629190-930288 X-HE-Meta: U2FsdGVkX1/8fVDs/95NLr95Fetzmh15UiToF5KqdQr/wohpDEslUF9Kw9lg+vYy1+eSqq3mOtY3fcISD6rNYVD0E/SXA0F+IBQOjvz+LeKmVEQXTUuqFtV6/aNcOEj752TNIny2ShirHD77te3ljHBetG4fg82DITjMeX63gJxU94k2tDltj29R8VoctTu/aIOJpk3mcb0bBxXwwoAw/kOC88c0cYGixjiQT1dxNkYML2D/YmPcso76iTGKJBdJz1S1paOvI6uAn0YcGJ1DZBqqjhON6rpheJtdGMFWK2NKCkvBvLrhJBFnFX/e6In65CATBqTi3YIGJ8x/YApSkFfFZArD2ivePM9e2hhJLjB6EtGWKmGIpn47oORZPSZ1Mtc1uPk5utSVGbYECv1XdaLpSEDSUZwsXZRUuUIrZ2rsc4GLnJVc8wBXF9QcleEDLs0M7Bug6GMqwb4Hks9DqxcR28GYgXelfyTe71rgc49HzwFYxz77wOy6eZQyg8nbpxpiNf1SfCX9/KTHjh+EmT1tNLOoN5dvM3f03KpbDxFCDlGmYxkwaHM/e5fCpbmO1mJwBhobJ01GmPEXqNw9s1pBrofJRbRXUwss3SZkRhsfqIaUY9d/r3S8KStDm+uhfaUPdGrom9sX8Gxa9bdyQRn7WokfpUWDOKpwlWXi08rLhJVG6lRXeV1f6JV7LYEYAklQAdBrqkIVsq0pwzR94x63M1Zd7znpPELV3L5Zf9+7zpbb2LrNdDJp687ebxN5qCerW1AEPLDBcNUdByqYoRuerJkpST3nYoyKzBh+HK6U8QCU147pmt+ChiMLp3DlIwxYt/XMf95Dk+ey3raJCLw2LQ3AnO/veV9tTvT+ZWfFQngaSQ4xlLtTM4kLpYTbk8DWxLojlCy27eEVcz0r+VCoD7qPj3qU3YyC+QmE6u1YozwOkekSYqPiD1t9F7k3xisPmGjk8xKR0o6NMBh 7B0MQzy2 sbVBjmNAslX4uexgqFpE4kVZcA5wZSdgCEEgDYlgrkXcWjZqRnajHiBBm4oWCNP4xv702KjRowiIgLXANCG6VRmGoPHHThK1LWl8FfHyb8YnBshgiVj8cJBEp29vNu9KmV/8aXeQJ7irIEeWS5CnuYaHhgHnDp5YAHK6gSGpE2jESen0rdzI0ZuCeaT7Pd+7X0mMItGd23YgDdSLHqE7Siase1EflCeQwEikIuZdYsObpFuic+feQRRjx8Q== 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: The sparc implementation of hugetlb_free_pgd_range() is identical to free_pgd_range() with the exception of checking for and skipping possible leaf entries at the PUD and PMD levels. These checks are unnecessary because any huge pages have been freed and their PTEs cleared by the time page tables needed to map them are freed. While some huge page sizes do populate the page table with multiple PTEs, they are correctly cleared by huge_ptep_get_and_clear(). To verify this, libhugetlbfs tests were run for 64K, 8M, and 256M page sizes with an instrumented kernel on a qemu guest modified to support the 256M page size. The same tests were used to verify no regressions after applying this patch and were also run on x86 for both 2M and 1G page sizes. Signed-off-by: Anthony Yznaga --- arch/sparc/include/asm/hugetlb.h | 5 -- arch/sparc/mm/hugetlbpage.c | 119 ------------------------------- 2 files changed, 124 deletions(-) diff --git a/arch/sparc/include/asm/hugetlb.h b/arch/sparc/include/asm/hugetlb.h index e7a9cdd498dc..d3bc16fbcbbd 100644 --- a/arch/sparc/include/asm/hugetlb.h +++ b/arch/sparc/include/asm/hugetlb.h @@ -50,11 +50,6 @@ static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, return changed; } -#define __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE -void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr, - unsigned long end, unsigned long floor, - unsigned long ceiling); - #include #endif /* _ASM_SPARC64_HUGETLB_H */ diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c index 2048b5c42ca8..4652e868663b 100644 --- a/arch/sparc/mm/hugetlbpage.c +++ b/arch/sparc/mm/hugetlbpage.c @@ -315,122 +315,3 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, return entry; } - -static void hugetlb_free_pte_range(struct mmu_gather *tlb, pmd_t *pmd, - unsigned long addr) -{ - pgtable_t token = pmd_pgtable(*pmd); - - pmd_clear(pmd); - pte_free_tlb(tlb, token, addr); - mm_dec_nr_ptes(tlb->mm); -} - -static void hugetlb_free_pmd_range(struct mmu_gather *tlb, pud_t *pud, - unsigned long addr, unsigned long end, - unsigned long floor, unsigned long ceiling) -{ - pmd_t *pmd; - unsigned long next; - unsigned long start; - - start = addr; - pmd = pmd_offset(pud, addr); - do { - next = pmd_addr_end(addr, end); - if (pmd_none(*pmd)) - continue; - if (is_hugetlb_pmd(*pmd)) - pmd_clear(pmd); - else - hugetlb_free_pte_range(tlb, pmd, addr); - } while (pmd++, addr = next, addr != end); - - start &= PUD_MASK; - if (start < floor) - return; - if (ceiling) { - ceiling &= PUD_MASK; - if (!ceiling) - return; - } - if (end - 1 > ceiling - 1) - return; - - pmd = pmd_offset(pud, start); - pud_clear(pud); - pmd_free_tlb(tlb, pmd, start); - mm_dec_nr_pmds(tlb->mm); -} - -static void hugetlb_free_pud_range(struct mmu_gather *tlb, p4d_t *p4d, - unsigned long addr, unsigned long end, - unsigned long floor, unsigned long ceiling) -{ - pud_t *pud; - unsigned long next; - unsigned long start; - - start = addr; - pud = pud_offset(p4d, addr); - do { - next = pud_addr_end(addr, end); - if (pud_none_or_clear_bad(pud)) - continue; - if (is_hugetlb_pud(*pud)) - pud_clear(pud); - else - hugetlb_free_pmd_range(tlb, pud, addr, next, floor, - ceiling); - } while (pud++, addr = next, addr != end); - - start &= PGDIR_MASK; - if (start < floor) - return; - if (ceiling) { - ceiling &= PGDIR_MASK; - if (!ceiling) - return; - } - if (end - 1 > ceiling - 1) - return; - - pud = pud_offset(p4d, start); - p4d_clear(p4d); - pud_free_tlb(tlb, pud, start); - mm_dec_nr_puds(tlb->mm); -} - -void hugetlb_free_pgd_range(struct mmu_gather *tlb, - unsigned long addr, unsigned long end, - unsigned long floor, unsigned long ceiling) -{ - pgd_t *pgd; - p4d_t *p4d; - unsigned long next; - - addr &= PMD_MASK; - if (addr < floor) { - addr += PMD_SIZE; - if (!addr) - return; - } - if (ceiling) { - ceiling &= PMD_MASK; - if (!ceiling) - return; - } - if (end - 1 > ceiling - 1) - end -= PMD_SIZE; - if (addr > end - 1) - return; - - pgd = pgd_offset(tlb->mm, addr); - p4d = p4d_offset(pgd, addr); - do { - next = p4d_addr_end(addr, end); - if (p4d_none_or_clear_bad(p4d)) - continue; - hugetlb_free_pud_range(tlb, p4d, addr, next, floor, ceiling); - } while (p4d++, addr = next, addr != end); -} -- 2.47.1