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 C2A2FC7115C for ; Wed, 25 Jun 2025 05:58:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5E6686B00B6; Wed, 25 Jun 2025 01:58:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 596F96B00B7; Wed, 25 Jun 2025 01:58:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4AC7B6B00B8; Wed, 25 Jun 2025 01:58:38 -0400 (EDT) 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 370706B00B6 for ; Wed, 25 Jun 2025 01:58:38 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id F36D1160F45 for ; Wed, 25 Jun 2025 05:58:37 +0000 (UTC) X-FDA: 83592868674.29.EEDC25D Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf17.hostedemail.com (Postfix) with ESMTP id 3A8084000A for ; Wed, 25 Jun 2025 05:58:35 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=none; spf=pass (imf17.hostedemail.com: domain of dev.jain@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=dev.jain@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750831116; a=rsa-sha256; cv=none; b=OCOJrDoXtjSHUaSVfASXyjW9/XYvGWc2WiAfkc/7XWruEeXmxEINamXqEIvYwQjeOZJEeF EkBXWnFXTOY85Qyq0fhbpCMwBHu1vIrqp9IkY1uSe44dckXkSwKHeRvnkMFJtmEcEu66AH ppIntM7Lqq5Mj5M3FinRWQTDiIPV+38= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=none; spf=pass (imf17.hostedemail.com: domain of dev.jain@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=dev.jain@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750831116; 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; bh=Mnc6weM8dZYbtaLcMaAwMYXW2OZ0zoCEgNAXYLSBsqI=; b=QR+Tf+FMaWJBzUI++1u58dWDfwgL+tIceCand3jrOQB8QfS+ZucIOmw5yjxhI2gWWWxIFs rXueh2K9S1cLXFZYWw/8Iwh0eq2zWtNO+90mXL+rbS+9a6NnKM+rmRYgBss1YEtFzwfQcZ BaIv4DjJshFy4uN3ejDtCz5E6g4Zveg= Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 356961063; Tue, 24 Jun 2025 22:58:17 -0700 (PDT) Received: from MacBook-Pro.blr.arm.com (MacBook-Pro.blr.arm.com [10.164.18.46]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 8C1093F63F; Tue, 24 Jun 2025 22:58:31 -0700 (PDT) From: Dev Jain To: akpm@linux-foundation.org, david@redhat.com Cc: ziy@nvidia.com, baolin.wang@linux.alibaba.com, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, npache@redhat.com, ryan.roberts@arm.com, baohua@kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Dev Jain Subject: [PATCH v2 3/3] khugepaged: Reduce race probability between migration and khugepaged Date: Wed, 25 Jun 2025 11:28:06 +0530 Message-Id: <20250625055806.82645-4-dev.jain@arm.com> X-Mailer: git-send-email 2.39.3 (Apple Git-146) In-Reply-To: <20250625055806.82645-1-dev.jain@arm.com> References: <20250625055806.82645-1-dev.jain@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Stat-Signature: ti4j88ixkujwyjrmyopua67wfzs6ihxp X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 3A8084000A X-HE-Tag: 1750831115-963929 X-HE-Meta: U2FsdGVkX1+Nm7764fvkMj1wuLk44ujhxfYGJr/62mzfu57rCRxIGMIyHNOPUfbnMxEEcWdbBYgY6Vqbxg/tu9w5Y2vU9cHEiwvsD8uJTRb4OHCVzPNHhl0NqVSq05EN6C7i/+IiEU3CameWHNqkdxp2byaaGbtsCTxfHA4sHu4iUsZAJny27JnN3cH78lA3l35s5Gmuq5ic0qvK2nGC8g5heWxMR9vSnAcPCXEjGWhnnZLGDlLpd5yWVAYftYHQnZ/q9Khpli1NL4c9a3SXc79YAYrYCqOW1WofBon/hfdiKl4xFehpMqQXgiqKKZDAjSpUJA7S8AY3dSvfcn7BiH04XIZd/QedLPp38/u0DGW8cJ1BxYCpqlCeqNQevKvVB2nsvEkaaZsGrUQHscK0d1JAfMvvipmlYfEUohlpQkCYR/GBHv2KZGdL++rVAMfJ5AGzan8oY3LoouR8LyxVijLibzUA/YaFz9ARlYbmDlcAD2FXShU0vvY6C3FviW0p4UN4g28vczDtjx4itQ5t2P/ulpDyr7NqekNtAugnf3yxPs/yCxOt1x5bSL0NbOotkluZlFU21YnE6Q/GnoTQk+hkRS7xPHJPuB2WeM4UXR7dWVJbv+IKwSFgTwZbwYb3dKUpkUsZSbuIr/RCxzVwJN0SGQirdDOtzNcQNevM/PX2v/yc1HKiZwKOQf9WGjA6zhUcrQvshHFmk2SHXxtfxWiLbDdz7ubZL6IYX88UtWvKnqq8HM0uOMBkZweJ/QpLXBUOD03ggqYVMWfImyGz8XGO1GFsQi9BnCrYUhbH+h8r8fIIjBnPdUaD/CN5pgyOx1SacdSDW7hnZ8N6EH6wVhyU8RBQlbVIR1+DOncXHIzJL5SSHPma2XEVKv5QhwZd+b9eL053wgITwDq7KFD89n7nDLfztMNTOrNoHndk6yds6NKIdfbOwz/O6pI7mYLBGCKrMRLDeLD/HfXnRaQ CRgKjEBS BWv4skbGQ/GXSJ3waIJ/Deo6jYL4EzX8Waa1izfpZ1DqEQRUvGjvf9KKyHXk75f1Ffh5VJs6HDDN3GEBd+BZqygEuBpw1ROjVviq42S3iSAh5q1KlAGiuN9N0sqDxISlczNoFlaClxPLZPJku7cn5BsckVyKxrDoyPbd+926buQ1yp+F0mxIlitJzJELbjyjvcHW6 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: Suppose a folio is under migration, and khugepaged is also trying to collapse it. collapse_pte_mapped_thp() will retrieve the folio from the page cache via filemap_lock_folio(), thus taking a reference on the folio and sleeping on the folio lock, since the lock is held by the migration path. Migration will then fail in __folio_migrate_mapping -> folio_ref_freeze. Reduce the probability of such a race happening (leading to migration failure) by bailing out if we detect a PMD is marked with a migration entry. This fixes the migration-shared-anon-thp testcase failure on Apple M3. Signed-off-by: Dev Jain --- mm/khugepaged.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 4c8d33abfbd8..bc8774f62e86 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -31,6 +31,7 @@ enum scan_result { SCAN_FAIL, SCAN_SUCCEED, SCAN_PMD_NULL, + SCAN_PMD_MIGRATION, SCAN_PMD_NONE, SCAN_PMD_MAPPED, SCAN_EXCEED_NONE_PTE, @@ -956,6 +957,8 @@ static inline int check_pmd_state(pmd_t *pmd) if (pmd_none(pmde)) return SCAN_PMD_NONE; + if (is_pmd_migration_entry(pmde)) + return SCAN_PMD_MIGRATION; if (!pmd_present(pmde)) return SCAN_PMD_NULL; if (pmd_trans_huge(pmde)) @@ -1518,9 +1521,12 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr, !range_in_vma(vma, haddr, haddr + HPAGE_PMD_SIZE)) return SCAN_VMA_CHECK; - /* Fast check before locking page if already PMD-mapped */ + /* + * Fast check before locking folio if already PMD-mapped, or if the + * folio is under migration + */ result = find_pmd_or_thp_or_none(mm, haddr, &pmd); - if (result == SCAN_PMD_MAPPED) + if (result == SCAN_PMD_MAPPED || result == SCAN_PMD_MIGRATION) return result; /* @@ -2745,6 +2751,7 @@ static int madvise_collapse_errno(enum scan_result r) case SCAN_PAGE_LRU: case SCAN_DEL_PAGE_LRU: case SCAN_PAGE_FILLED: + case SCAN_PMD_MIGRATION: return -EAGAIN; /* * Other: Trying again likely not to succeed / error intrinsic to @@ -2834,6 +2841,7 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev, goto handle_result; /* Whitelisted set of results where continuing OK */ case SCAN_PMD_NULL: + case SCAN_PMD_MIGRATION: case SCAN_PTE_NON_PRESENT: case SCAN_PTE_UFFD_WP: case SCAN_PAGE_RO: -- 2.30.2