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 21AECC77B7C for ; Thu, 3 Jul 2025 05:48:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 499C86B00DD; Thu, 3 Jul 2025 01:48:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4233C6B00E3; Thu, 3 Jul 2025 01:48:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 339856B00E5; Thu, 3 Jul 2025 01:48:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 1448D6B00DD for ; Thu, 3 Jul 2025 01:48:48 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id AA1E859ABA for ; Thu, 3 Jul 2025 05:48:47 +0000 (UTC) X-FDA: 83621874294.18.B285A3A Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf19.hostedemail.com (Postfix) with ESMTP id F17431A0009 for ; Thu, 3 Jul 2025 05:48:45 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf19.hostedemail.com: domain of dev.jain@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=dev.jain@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751521726; 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:references; bh=baX3CZzw2VTViyPPiOhUeIvqa6vx9YBR0+9wSgJG/TE=; b=XjBwtxqSkscsiLZS2veJQsJ1O/9h1sQvCQRbMuRjN+cxZOcpwP4Slxk6P0RdMscOq2w8AV HqCd+MXBEo80EguVDArxIrfLUPOWarKIGFrcJvkVvIPNn4tzQ1V1cxwAE9z/3xTwl8OO2p +dZIG2FtPUM9QUAl/2RK7kWzgynP9kg= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf19.hostedemail.com: domain of dev.jain@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=dev.jain@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751521726; a=rsa-sha256; cv=none; b=y+i1P3oNsTUpNTh4959howuboXnaXKCzk7Vu5Dt7TwCrElIae6CPAzvVmN2hooHhx2d+S9 Y94EUraKW7G3L8wHnXIh5pxfk4C9AFR5cxqABqieF6Z8Uvep8sPKaPTr47E7GrX0/Haj9q +tujXuV6x2Wwo4k2GuH4vo4/I9KEPog= 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 7C4241655; Wed, 2 Jul 2025 22:48:30 -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 38C6B3F6A8; Wed, 2 Jul 2025 22:48:40 -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] khugepaged: Reduce race probability between migration and khugepaged Date: Thu, 3 Jul 2025 11:18:23 +0530 Message-Id: <20250703054823.49149-1-dev.jain@arm.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: F17431A0009 X-Stat-Signature: zn461pbx5ngfp3onqq9cfext9y35ec9h X-HE-Tag: 1751521725-636076 X-HE-Meta: U2FsdGVkX19ls40WGlfXxIWz0jjil35T3MjKcsbDA1Tbdk9FmxJ8K1Ox1m8mHdM1gyt2r3l5bkU6L18WRfr46T4KZsDDcSfBGeqdvaFyhVyBps5wOC1dDsWFmxf5Gfy4gaLJk2a5YUyAbkjk4MyVwyO3gvTGxUPPI2FCoX8i7X23/g0LCdOy8oYDUWisVVy/sLNOUBzm5n66Sx41WRaGRm6BJmLLZp4YfxLnxO4drxUPJM+fFPLDrVKcxfWdWhlU6NLrKcMAWuh/yHT3PmFLPl63m83a83c4blAKYOWXpQ83nuei+6wxhM2vforsrKi+hE+da52UvkYMwi2B5jJ177EmpIGmA/Q/iQ9O84sO8tUDvsJLBpw446EVtyLY60G738Mho6zdPpH52Nqg6EgBfAB1u+tpDRIp/o/Dg4ukrPqrYbpwq9OFIL0vfvY8giMnEI4KrfUA6IdjvWtajtO+UF2AdmNtmvSmxy4MPpxzJxxyt789Vq/B9hudzV/Y3fztMDkKyvQ4d0yF52tc6WJpJLYgtULAU/jRbcw/6BGeIZY9hxjxS8uuezYqYQGCEtsk5sYb8Fo/7f5eEu0/5Cv7Kcws4to9by9UA18pNDO/OCYpqCEHDUAYvE61txejuwgKeq+Dy4nL0OgDZEnG57lcCuvYbg7AvlB26xJMxoWnW4/3C3t/PL97MJNGbpFYodxD9NyaPUq71OQl8ub0epfhYk74IGkxYHuYWDBT/63FIEvUkHcalF7H1U/3YTAf3Ze5hroisfu93QXUZnjsHd04F42dDSApDz9Ie6b7VzIufSzwP3JzTN0hD5p/D2tH4dxPgTGeWHVwv5giPp35dWBZ6foU9vBMVyWjUhi9JSSGMebVQiCH1TWyaa9bDBdqlsZm2nbmc/OAHo68ZZ/sPktGoHVxDONjGf+I6TX2XXO/RcO6cWx+Xwi5Di8IFTopy7Im9yxlrA859W5SJad02Uy EzP5ApE4 Msa7bGJsT4UVzQkQH5ItOMKa/JGrmm/76sjVkjjib2613h0mf8BgK/1NBiYEtoZQkwwXJt/2YFfwh6SHh2u21KAYEXLZSKSykHSczL+baUVVd+iutT8wKK+n1ZIoi6Pg2BXPvk+e2tFipqXmYgjZBtcTx86LSH7dgidMZAPRSYi1+fvDEg5MfSy4kL8d5NcS4f2bkheEdmjI6QQd1nsF63ns8ZA== 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. Note that, this is not a "fix" since it only reduces the chance of interference of khugepaged with migration, wherein both the kernel functionalities are deemed "best-effort". Signed-off-by: Dev Jain --- v1->v2: - Remove SCAN_PMD_MIGRATION, merge into SCAN_PMD_MAPPED (David, Anshuman) - Add a comment (Lorenzo) v1: - https://lore.kernel.org/all/20250630044837.4675-1-dev.jain@arm.com/ mm/khugepaged.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 1aa7ca67c756..3fdefc4f4984 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -941,6 +941,15 @@ static inline int check_pmd_state(pmd_t *pmd) if (pmd_none(pmde)) return SCAN_PMD_NONE; + + /* + * The folio may be under migration when khugepaged is trying to + * collapse it. Migration success or failure will eventually end + * up with the PMD still pointing to a PMD-order folio, so return + * SCAN_PMD_MAPPED. + */ + if (is_pmd_migration_entry(pmde)) + return SCAN_PMD_MAPPED; if (!pmd_present(pmde)) return SCAN_PMD_NULL; if (pmd_trans_huge(pmde)) -- 2.30.2