From nobody Thu Oct 2 16:57:26 2025 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD6D1198851 for ; Sun, 14 Sep 2025 14:38:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757860693; cv=none; b=ji+VAVqecu/0L9ZuaDEDbKmoQCzwnp8atvLa+/QgcUnsld1z7GTBa8yjDWVAvL1OUN/2EfNsAPVCL8WDcTLValPEDqYVN6nhk2gUUjvJveJZ414l6VVawaefAdc8TA3CGW9dcQXBcnXvxe505XHk9rR8lEeY/HaPEoZz3O58Bsw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757860693; c=relaxed/simple; bh=22fXo1JxvKYKi41UuqLqIPUSHXuBWiFsOfVDn7AId5E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rKUi0RSNMqSAfeHfJZo4vYVKo57aXSXvGnf5Z3LAPxl9TM4m6mdMnCSE1Pzd+JgixIXZNarpYXHICOV/GnspEfzlpTTJjcsw3W5OV74eD3suJqfkJrRpqv4p8wDFETnikqaj6556p+qM/MIuR/lVbThxLRepFiTLii9arUbws7E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2570bf605b1so31195375ad.2 for ; Sun, 14 Sep 2025 07:38:11 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757860691; x=1758465491; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dc2ToHGvqgetretFJ5TWWHKSy1o0O/m6boNyeBXRweQ=; b=qhrvhH+D1hqvwTE13motowiGhNDFsyQ3LONu0kGiX5naQPBMYbJ8wfRxfniBhsssnb gvGW+LbCgYyscalch6G6qSUvvxlX6K01Dol7SQhWhMH+rgdQV3f1xOPz2Swrl7exE1cN cHt1Ub4covXe9sfuwuK/dDSgQtD/E+3Qjv3fg+s45+SPvvzjNiaGcoB3VKoVRDv4vrbT RVCNzChrthyv3fXEM1rDh4ylA1rDRd64lucn+oXq3SiIdHu3jWSheZQpQrYsViPS1Z5X CVohaa54YvJ9+A5B2z9Yomydni37ddbK0SvsFHBySpcI55IhA9acB8QrdVPav2QJAvnt 4yag== X-Forwarded-Encrypted: i=1; AJvYcCXJcKpCq7knmS/RJv5IdjW8jG1b7AM++eAbVpiUvohVJw3eZ5CrqbX7NHlNzDx40Sr1VVitoclAxOwmYLA=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+INSNM7SC66635XCYoWtoVmfPXQfolU/bLM9D6YMVblFSkxcL C/Ig5VC1XZ04JaAwdIPvM5hv4gKAC8MhJ3WTybUuS93uT62a/Riw3HeH X-Gm-Gg: ASbGncsSYeUljp5nFj6jWOR8X6HVPpmfviT3KR0NwjMeBypcSOmFHeavpDtTHdjS6Gr Ws+ixiIwzMm9TOM97hiOzd7ojK99Ynfp27PI/Qdvu/lArvZSPPofJQ5PFfyCMz1miJQaqv8mOtC 3J2B8xvEmkqv+QUSQp/EtaFuePL8Ntj0FWlnbKJuiWvl2QqvPYF4hzgUdFBU+AWBEMKytCyHfzL YaOnI0G+ePLjT1r1RAw25psrDwDctfcaahFCzmfpfEB9KlbX27pvfgl/sVAq7phO1klrOM77Nz7 V9mAAjwQFFM5X/0NIMySKFcnG8xBAaCMP7rPfeXk+Ww8Pu8qHgAxeTOTsZceaWcuXotFQfwPlvi bcUTV6ZfwWCw= X-Google-Smtp-Source: AGHT+IEr2DMCdCdoOyIsL92HGAQ+R3HSje6j05Zrq3wRDfxpMSO6h+wpKjwZO7jrA4WHFzd1zkhsiQ== X-Received: by 2002:a17:902:ce90:b0:264:4e4a:904e with SMTP id d9443c01a7336-2644e4a928bmr38635145ad.23.1757860691127; Sun, 14 Sep 2025 07:38:11 -0700 (PDT) Received: from localhost.localdomain ([2a11:3:200::10b2]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-25c3b0219f9sm102571545ad.123.2025.09.14.07.38.02 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 14 Sep 2025 07:38:10 -0700 (PDT) From: Lance Yang To: akpm@linux-foundation.org, david@redhat.com, lorenzo.stoakes@oracle.com Cc: ziy@nvidia.com, baolin.wang@linux.alibaba.com, Liam.Howlett@oracle.com, npache@redhat.com, ryan.roberts@arm.com, dev.jain@arm.com, baohua@kernel.org, ioworker0@gmail.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Lance Yang Subject: [PATCH mm-new 1/3] mm/khugepaged: skip unsuitable VMAs earlier in khugepaged_scan_mm_slot() Date: Sun, 14 Sep 2025 22:35:45 +0800 Message-ID: <20250914143547.27687-2-lance.yang@linux.dev> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250914143547.27687-1-lance.yang@linux.dev> References: <20250914143547.27687-1-lance.yang@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lance Yang Let's skip unsuitable VMAs early in the khugepaged scan; specifically, mlocked VMAs should not be touched. Note that the only other user of the VM_NO_KHUGEPAGED mask is __thp_vma_allowable_orders(), which is also used by the MADV_COLLAPSE path. Since MADV_COLLAPSE has different rules (e.g., for mlocked VMAs), we cannot simply make the shared mask stricter as that would break it. So, we also introduce a new VM_NO_THP_COLLAPSE mask for that helper, leaving the stricter checks to be applied only within the khugepaged path itself. Signed-off-by: Lance Yang --- include/linux/mm.h | 6 +++++- mm/huge_memory.c | 2 +- mm/khugepaged.c | 14 +++++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index be3e6fb4d0db..cb54d94b2343 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -505,7 +505,11 @@ extern unsigned int kobjsize(const void *objp); #define VM_REMAP_FLAGS (VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP) =20 /* This mask prevents VMA from being scanned with khugepaged */ -#define VM_NO_KHUGEPAGED (VM_SPECIAL | VM_HUGETLB) +#define VM_NO_KHUGEPAGED \ + (VM_SPECIAL | VM_HUGETLB | VM_LOCKED_MASK | VM_NOHUGEPAGE) + +/* This mask prevents VMA from being collapsed by any THP path */ +#define VM_NO_THP_COLLAPSE (VM_SPECIAL | VM_HUGETLB) =20 /* This mask defines which mm->def_flags a process can inherit its parent = */ #define VM_INIT_DEF_MASK VM_NOHUGEPAGE diff --git a/mm/huge_memory.c b/mm/huge_memory.c index d6fc669e11c1..2e91526a037f 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -134,7 +134,7 @@ unsigned long __thp_vma_allowable_orders(struct vm_area= _struct *vma, * Must be checked after dax since some dax mappings may have * VM_MIXEDMAP set. */ - if (!in_pf && !smaps && (vm_flags & VM_NO_KHUGEPAGED)) + if (!in_pf && !smaps && (vm_flags & VM_NO_THP_COLLAPSE)) return 0; =20 /* diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 7c5ff1b23e93..e54f99bb0b57 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -345,6 +345,17 @@ struct attribute_group khugepaged_attr_group =3D { }; #endif /* CONFIG_SYSFS */ =20 +/** + * khugepaged_should_scan_vma - check if a VMA is a candidate for collapse + * @vm_flags: The flags of the VMA to check. + * + * Returns: true if the VMA should be scanned by khugepaged, false otherwi= se. + */ +static inline bool khugepaged_should_scan_vma(vm_flags_t vm_flags) +{ + return !(vm_flags & VM_NO_KHUGEPAGED); +} + int hugepage_madvise(struct vm_area_struct *vma, vm_flags_t *vm_flags, int advice) { @@ -2443,7 +2454,8 @@ static unsigned int khugepaged_scan_mm_slot(unsigned = int pages, int *result, progress++; break; } - if (!thp_vma_allowable_order(vma, vma->vm_flags, TVA_KHUGEPAGED, PMD_ORD= ER)) { + if (!khugepaged_should_scan_vma(vma->vm_flags) || + !thp_vma_allowable_order(vma, vma->vm_flags, TVA_KHUGEPAGED, PMD_ORD= ER)) { skip: progress++; continue; --=20 2.49.0 From nobody Thu Oct 2 16:57:26 2025 Received: from mail-pg1-f182.google.com (mail-pg1-f182.google.com [209.85.215.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91FC21EB5D6 for ; Sun, 14 Sep 2025 14:38:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757860702; cv=none; b=qVQgih2f7nq/1ln1g7mpP18DGIgEkyt4id3Pdq7tBYo08T8sRSvTSuM6o4Y4y/B45Y84Wr6g4bSGw38zLf1yvaSjsgOfCavqehzlWdPvQVhpMimBI+uQphghsFthy3ZB0PTjCpHoDV+hXmz5CdrpgHtNPXY3fuZeV3b29Qpr/pU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757860702; c=relaxed/simple; bh=J9cLNsJfyur8O+nkDKHmFCE1YE+4wOO3Ei/ieq0Ccn8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CXST7SwjC2xdQRiP6RseJp21PdlDe+e+8WlHG0Z8m7fLYa3ttdwYdAl8nemf+beG2phPVPTDJMiLwJzq2wOaEFulvUoSjp1bly06JcJQL3fGS56hCwtwB+NBKsyGJIoBrGW8n5fx6RKlgHv3q6R1G/lYS3cAOnRKO/yfsOK7jVg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.215.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pg1-f182.google.com with SMTP id 41be03b00d2f7-b49c1c130c9so2302910a12.0 for ; Sun, 14 Sep 2025 07:38:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757860700; x=1758465500; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=o9wU/W+z4HWlBo+SMsLu49fjjkbDPftXMJWXc0qCbjY=; b=r5fLREjk5rKSu1idNaDohsPD7nKF+oWZbqoU+Ci0CSnCBtirXFbJdxJn4HVjsqztri NpVIkrAmW/8BV0fNtfBN8X6nWk19TxAK4j0ZwxYZuEzhclMXoq4h1Mv3bEJ0ksq6zGkk 3VV3Q/14XqzzF7YfeXjMT6Fd7ttTTjndAnd7TtItFC+UMc8YVI+MdQPJY119+XEA7i4I rCCojqAZxW9TWlDTtMEpHkUL6xkZIuaNkrdL93BP2AmxNeEbzkH/CF39k6RvkQ1Uo8Lp emYcaG5TnDWz7rVG76ryV4kxRi+r3nwyJmtvy50r1zovatBRVfEux/q/NcVJfW9RFJBo B2Ug== X-Forwarded-Encrypted: i=1; AJvYcCUZAcv+iIRuff+8zGOM9q9cBH9DboUBDb33YnxtdZvyxZGxhW/bNM4kHEN+Ib6xCGWCbEp3jD7lhM5XbK4=@vger.kernel.org X-Gm-Message-State: AOJu0YzW02d3/Ftw5RAvfNPniVtw+G5YXCYXSHqVpMRbwkrMrb8tc/nk QZXd3Rla8YfTEmGv3RmUD0TjFgxNW7ZUNOn94hQxqF35Kj3MZ8D6FO1/ X-Gm-Gg: ASbGncvIoJm2W/YWvuK0T4/Mhfa/8b60rFGAq+3naTCETDcAO35R+YD+lMmgvs0oKqC tpIytQqgwAQ4U7N8W01bASPi2XmX2568O9Xt6VHexjasDXJLykDGKb4bVUBz1bSWWvyaSCH9zwZ v4I+RUP44gt/RgWSlR8CR7uIyuQenNUOOCGE8kd3VrNLnXXK5tdeal4YjMnkqc4azv9OOgv6ikw P0RzzA+87FFtgv5ldIv/kIBOFGN3PGHd73V0cFUPSw3PU5/4pCQgWyeAcnzINRq6QOSJbZBbVzj 0arskD84+v3d/bNPQB+H6HRACjRbCffVkEMIHYvaom4igjEt0923TOAw9kn73UNsrlO+ZKaUog3 TDuUiXWOZ7i8KOdhGTVcqyA== X-Google-Smtp-Source: AGHT+IFE+Wpu/pBUtNagskZ5QY9uGCvmN51O/TiqoKWmlQZLPEx1SxIwpA5S3oFgwluS1EavPOZLkg== X-Received: by 2002:a17:902:ebc2:b0:24b:25f:5f7f with SMTP id d9443c01a7336-25d2801094emr94123065ad.60.1757860699829; Sun, 14 Sep 2025 07:38:19 -0700 (PDT) Received: from localhost.localdomain ([2a11:3:200::10b2]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-25c3b0219f9sm102571545ad.123.2025.09.14.07.38.12 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 14 Sep 2025 07:38:19 -0700 (PDT) From: Lance Yang To: akpm@linux-foundation.org, david@redhat.com, lorenzo.stoakes@oracle.com Cc: ziy@nvidia.com, baolin.wang@linux.alibaba.com, Liam.Howlett@oracle.com, npache@redhat.com, ryan.roberts@arm.com, dev.jain@arm.com, baohua@kernel.org, ioworker0@gmail.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Kairui Song , Lance Yang Subject: [PATCH mm-new 2/3] mm: clean up and expose is_guard_pte_marker() Date: Sun, 14 Sep 2025 22:35:46 +0800 Message-ID: <20250914143547.27687-3-lance.yang@linux.dev> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250914143547.27687-1-lance.yang@linux.dev> References: <20250914143547.27687-1-lance.yang@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lance Yang is_guard_pte_marker() performs a redundant check because it calls both is_pte_marker() and is_guard_swp_entry(), both of which internally check for a PTE marker. is_guard_pte_marker() |- is_pte_marker() | `- is_pte_marker_entry() // First check `- is_guard_swp_entry() `- is_pte_marker_entry() // Second, redundant check While a modern compiler could likely optimize this away, let's have clean code and not rely on it ;) Also, make it available for hugepage collapsing code. Cc: Kairui Song Signed-off-by: Lance Yang Acked-by: David Hildenbrand Reviewed-by: Lorenzo Stoakes --- include/linux/swapops.h | 6 ++++++ mm/madvise.c | 6 ------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/linux/swapops.h b/include/linux/swapops.h index 59c5889a4d54..7f5684fa043b 100644 --- a/include/linux/swapops.h +++ b/include/linux/swapops.h @@ -469,6 +469,12 @@ static inline int is_guard_swp_entry(swp_entry_t entry) (pte_marker_get(entry) & PTE_MARKER_GUARD); } =20 +static inline bool is_guard_pte_marker(pte_t ptent) +{ + return is_swap_pte(ptent) && + is_guard_swp_entry(pte_to_swp_entry(ptent)); +} + /* * This is a special version to check pte_none() just to cover the case wh= en * the pte is a pte marker. It existed because in many cases the pte mark= er diff --git a/mm/madvise.c b/mm/madvise.c index 35ed4ab0d7c5..bd46e6788fac 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1069,12 +1069,6 @@ static bool is_valid_guard_vma(struct vm_area_struct= *vma, bool allow_locked) return !(vma->vm_flags & disallowed); } =20 -static bool is_guard_pte_marker(pte_t ptent) -{ - return is_pte_marker(ptent) && - is_guard_swp_entry(pte_to_swp_entry(ptent)); -} - static int guard_install_pud_entry(pud_t *pud, unsigned long addr, unsigned long next, struct mm_walk *walk) { --=20 2.49.0 From nobody Thu Oct 2 16:57:26 2025 Received: from mail-pg1-f171.google.com (mail-pg1-f171.google.com [209.85.215.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 184C81A9F89 for ; Sun, 14 Sep 2025 14:38:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757860710; cv=none; b=M4GEHaRX8/Tbp29OCU3ikqIeC3MOJNes+yzVkAatm0KrNzJIhkGuHg8WtvlC71b6DE9GwxFLt9ADiX7ot7nN5SYPMgaTizz02Auu4RzpsEcN6dFKoaLdDFrA2JY/zMOwq0IuAD3/Gc5t3p6dG+PVj9YGu77dMz7jx4x3If+Vrak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757860710; c=relaxed/simple; bh=zv7We02h/KKRbkff89BRUsvl3zXnqLWsAVan1S6PaHk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IQ5xrXVgYWcyK3hu1oY9gOwYJJ9b5cKYDEntT+HJrd52TNOoWsEPNU5v2i/20FTgDVgFqUAdOFImkS0FaOu9T1d3ObmNBGcNVuCBBsDpRZ3RGAZ0nPsT+0CKEB0tQq9mtzNx66MFo8cUwrsx2LMVBPsXGEYMJH5pUxCnUrx8Pn8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.215.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pg1-f171.google.com with SMTP id 41be03b00d2f7-b54b301d621so1731039a12.0 for ; Sun, 14 Sep 2025 07:38:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757860708; x=1758465508; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=l2AnnhYLx0XSVDCP/fVtCwfPUWPDTutSyX5MbFNBOkk=; b=fGeJgFgbb0xPcLviQysykkZvnCCsUTBrLr5Y+IiFmDJ3gfmk0anwodJLJ3ZTj2z19Z f8r85gcTtoBLKJOLooPfhz8ltfe9PpLisjQhymFrLuZjwgZGKf4s0LCHK9++6ekE8s0w xkyZxSvsPoyITn/6rMGbg+JI4hmJtz2Ms6/KqmlT53kpzIU/oXJqmKSxd0jo783oDuAk jQOsGtwgBNSUUMerVDkWRgji3vPGDu6MEPEf8ixHIXeorEwGEdtV/wZaAEJ2w8bGhiPM 5UQzSv1AlTMjcvnsJNKq/mw00IO5CsNE2aQgGVOpIRaOElZ1WHmXTz2vbjhFEbS2Uq6F Gs5w== X-Forwarded-Encrypted: i=1; AJvYcCWk+lCeJ2IQ/xMfOJ7nS6Amd5iigtTOe9Z2lF7YdtD9+cmi8iNhseVS4w1uNtqZQ8X3tH5jjoIoE7EshPU=@vger.kernel.org X-Gm-Message-State: AOJu0YwYX+bbSfREbq2ZrgPIi4A8jfuFNk/w/bvLFWsJ8vdtasjiVqg0 qmNxiHAwH2372aIHMeihDkk+iLe7o0Dr1kwhhk82QsSjVpP8Qj1qw84Z X-Gm-Gg: ASbGncu/Q8VnfEL/sAtZJ86nEywT7Th2If4F7+ZMTtb4ztzj5CXan6ASjB3gqeM1NPg PuRuM1Fo/FQW5Nj30gvx5W8y/NRYAnewYpCIZbODystgfTX0EKJhXJe89vQImKxbG+y8tu91I2v W3OkwuYiOMca/+BhRHkXr36+B+y655VNzZDriT56psmTB0YhlLSAOK7+cNGEagICZ9u5fTbgRZ7 gVnqgO+goM6blFb6xLZDbsepex1JaxvdOFVKH3P+D0dI1MgsiKqUJUL7YkV0JxR0Yt6k+zIKG97 KBaKrgHL1AKw30EU8gEZBiXuaKV0v3cTx4Lr8Pgi/Na7w7tGrVOTJl7JXQESS0WKr0u5TCNhtvR gGP/BuSpRh6dfg/mYaBAJ3g== X-Google-Smtp-Source: AGHT+IHWR0yW8e7MCVl+UueUYkz+wRrSuXYr4ZxuaiJD4QlW4H6iqFSdA9O7vMH9cF9eM58m3+6pFQ== X-Received: by 2002:a17:903:ace:b0:24f:dbe7:73a2 with SMTP id d9443c01a7336-25d27623c65mr118373835ad.31.1757860708231; Sun, 14 Sep 2025 07:38:28 -0700 (PDT) Received: from localhost.localdomain ([2a11:3:200::10b2]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-25c3b0219f9sm102571545ad.123.2025.09.14.07.38.20 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 14 Sep 2025 07:38:27 -0700 (PDT) From: Lance Yang To: akpm@linux-foundation.org, david@redhat.com, lorenzo.stoakes@oracle.com Cc: ziy@nvidia.com, baolin.wang@linux.alibaba.com, Liam.Howlett@oracle.com, npache@redhat.com, ryan.roberts@arm.com, dev.jain@arm.com, baohua@kernel.org, ioworker0@gmail.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Lance Yang Subject: [PATCH mm-new 3/3] mm/khugepaged: abort collapse scan on guard PTEs Date: Sun, 14 Sep 2025 22:35:47 +0800 Message-ID: <20250914143547.27687-4-lance.yang@linux.dev> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250914143547.27687-1-lance.yang@linux.dev> References: <20250914143547.27687-1-lance.yang@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lance Yang Guard PTE markers are installed via MADV_GUARD_INSTALL to create lightweight guard regions. Currently, any collapse path (khugepaged or MADV_COLLAPSE) will fail when encountering such a range. MADV_COLLAPSE fails deep inside the collapse logic when trying to swap-in the special marker in __collapse_huge_page_swapin(). hpage_collapse_scan_pmd() `- collapse_huge_page() `- __collapse_huge_page_swapin() -> fails! khugepaged's behavior is slightly different due to its max_ptes_swap limit (default 64). It won't fail as deep, but it will still needlessly scan up to 64 swap entries before bailing out. IMHO, we can and should detect this much earlier ;) This patch adds a check directly inside the PTE scan loop. If a guard marker is found, the scan is aborted immediately with a new SCAN_PTE_GUARD status, avoiding wasted work. Signed-off-by: Lance Yang --- mm/khugepaged.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index e54f99bb0b57..910a6f2ec8a9 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -59,6 +59,7 @@ enum scan_result { SCAN_STORE_FAILED, SCAN_COPY_MC, SCAN_PAGE_FILLED, + SCAN_PTE_GUARD, }; =20 #define CREATE_TRACE_POINTS @@ -1317,6 +1318,16 @@ static int hpage_collapse_scan_pmd(struct mm_struct = *mm, result =3D SCAN_PTE_UFFD_WP; goto out_unmap; } + /* + * Guard PTE markers are installed by + * MADV_GUARD_INSTALL. Any collapse path must + * not touch them, so abort the scan immediately + * if one is found. + */ + if (is_guard_pte_marker(pteval)) { + result =3D SCAN_PTE_GUARD; + goto out_unmap; + } continue; } else { result =3D SCAN_EXCEED_SWAP_PTE; @@ -2860,6 +2871,7 @@ int madvise_collapse(struct vm_area_struct *vma, unsi= gned long start, case SCAN_PAGE_COMPOUND: case SCAN_PAGE_LRU: case SCAN_DEL_PAGE_LRU: + case SCAN_PTE_GUARD: last_fail =3D result; break; default: --=20 2.49.0