From patchwork Mon Mar 24 06:53:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Vagin X-Patchwork-Id: 14026840 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 D3220C3600C for ; Mon, 24 Mar 2025 06:53:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B7AF5280001; Mon, 24 Mar 2025 02:53:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B0272280004; Mon, 24 Mar 2025 02:53:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9545B280001; Mon, 24 Mar 2025 02:53: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 786DB280004 for ; Mon, 24 Mar 2025 02:53:33 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id EC7B158E40 for ; Mon, 24 Mar 2025 06:53:34 +0000 (UTC) X-FDA: 83255528748.22.4909EEB Received: from mail-io1-f73.google.com (mail-io1-f73.google.com [209.85.166.73]) by imf28.hostedemail.com (Postfix) with ESMTP id 3BD98C0009 for ; Mon, 24 Mar 2025 06:53:33 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=0bXHvH73; spf=pass (imf28.hostedemail.com: domain of 3bAHhZwYKCDkVqVbdibjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--avagin.bounces.google.com designates 209.85.166.73 as permitted sender) smtp.mailfrom=3bAHhZwYKCDkVqVbdibjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--avagin.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742799213; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=xl8IF5RHpUU1Lg7cJxOKLVwxFTCbPq38iLJ6S8yYG08=; b=RtU0HtR9T7QUxRTafKA+KPQODjj/Bv6n9qhzHEH0cKok5Kvvd8yoIATiU5ocgOqLA2ZTTw 48DE86ugzg7DA4FD2W9x9Ib015Q6s8ofR22UsGXPeIbTgDR7vp0k+2vZmlJT1dHI9DUcCO rfcQEplgTbw50ssrq/ctEkp9Rd/QE0o= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=0bXHvH73; spf=pass (imf28.hostedemail.com: domain of 3bAHhZwYKCDkVqVbdibjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--avagin.bounces.google.com designates 209.85.166.73 as permitted sender) smtp.mailfrom=3bAHhZwYKCDkVqVbdibjjbgZ.Xjhgdips-hhfqVXf.jmb@flex--avagin.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742799213; a=rsa-sha256; cv=none; b=gawIMqwARAN9TtqVTWM+2Awop0XXACH6Eq6doNjbV/2JzAMheF29ZY5sy6aKf9X1+f57ck 5CNrqcW9uEB2iwh02s5m943PyvS4MBbcyOGy/oeCFMAl4Yuout4LzKuhKX9UVmT18kR+GE /airUw3+MMdKUxuLV2eXV+emngL+vT8= Received: by mail-io1-f73.google.com with SMTP id ca18e2360f4ac-85b418faf73so955028839f.1 for ; Sun, 23 Mar 2025 23:53:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742799212; x=1743404012; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=xl8IF5RHpUU1Lg7cJxOKLVwxFTCbPq38iLJ6S8yYG08=; b=0bXHvH73wyeXqx2vj1EPkU8SQYJNCgr1ladQV5IWiVC1wCWjntF76xGK2j/8Yv5yHc Zq+lR/5i3sCy+sG6etok7LTx56QSFJF1gt19fgV8MPXyzrts23tdPsFYl6pbaGwCimPd vfJTAONgX7Sddzz0p67GaD3F0ltxapz5c3YON+EHcdvDNvs3H406psgWUPDV4FKnSB6P WdnfHeQywXifDkJ/yDLcQ3E1kMrKND8KKg/k5ElCO4JRUfjimH587ViymiQVXoio42I8 UZIlM1qUR+R4juSpN0JDGM2+yQGjJ6qCckWo++JMfcylYAw4W8P177G2SQXTo/utVaPR G41g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742799212; x=1743404012; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xl8IF5RHpUU1Lg7cJxOKLVwxFTCbPq38iLJ6S8yYG08=; b=aubJ0nJzbF8j2xDvO1oC4IhbJDvDKF05QXs1rfYr8zgZpYGEoJ56C7mKDRFCObJnSr xDumjXi2XhQwMR3XhBtu+o4IgP6vO+8Zly18gJxkvzT4L/bMGb4uX5UdUKDFQIw5vrLF +UMIJvNqvJLl/BDfmh1oSDWcOLdtUBEMeSPTe7xW9rMRYCBjj4X6a96QTSO21fe0Of7p B5WnhzLvEHyxjW6Ov7Mjycy87pRWwaKiHdHl6esvYYLfaSfkYPVXgv9jF81aSwfqgO3d 8+pBt2R+RhC2ROwnbfYZTpT13bLyZTWUPtnmT7m7de0XxUNmLOzmsuBLueq6TB3kp37W fS7w== X-Forwarded-Encrypted: i=1; AJvYcCXtqZp9hVbGrx8lUzIBPdRnvjneoX5+or+s7tH6UmtLcCUlGMDPXYB4lOtg6iguHcRg42smc3rbVQ==@kvack.org X-Gm-Message-State: AOJu0Yyf7l2P1vk1KvukDACGVp2nAa2HiXVREcTBiawAoOvK15UMM/mR 0sttAKjeCszijVOrflvgrjwleuUwoDInFu/phsR5MVr5p8KJi47lpcjIdLkkMob2KA+l/MQe2GW W/A== X-Google-Smtp-Source: AGHT+IGLukfQgJAXKk11u4fnuWxiAd2otr8HGeGoAqGpKKKT8IRHd3Jidw+Bw0GLHnKZol10jN2Ijr7hn10= X-Received: from iosu9.prod.google.com ([2002:a05:6602:29a9:b0:85b:606c:d446]) (user=avagin job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6602:418f:b0:85b:3f06:1fd4 with SMTP id ca18e2360f4ac-85e2cb5960dmr918008339f.9.1742799212314; Sun, 23 Mar 2025 23:53:32 -0700 (PDT) Date: Mon, 24 Mar 2025 06:53:26 +0000 In-Reply-To: <20250324065328.107678-1-avagin@google.com> Mime-Version: 1.0 References: <20250324065328.107678-1-avagin@google.com> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog Message-ID: <20250324065328.107678-2-avagin@google.com> Subject: [PATCH 1/3] fs/proc: extend the PAGEMAP_SCAN ioctl to report guard regions From: Andrei Vagin To: Lorenzo Stoakes , Andrew Morton Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org, David Hildenbrand , Shuah Khan , Jonathan Corbet , criu@lists.linux.dev, Andrei Vagin X-Rspamd-Queue-Id: 3BD98C0009 X-Stat-Signature: urri7fdo831dsrrsx4gyn3aozkewrzhb X-Rspam-User: X-Rspamd-Server: rspam12 X-HE-Tag: 1742799213-807768 X-HE-Meta: U2FsdGVkX1+rnfGbCdsImvEx/IRX5vliUji34Be6diuMAuyjqXSUGE5HOAJNrLx2EHYFLf/KgcptARCiL4T8SCspaNR7NlWRm9nyyk5DMM4Wgu8FbwIbD5Sxg22IUR/gTXO3kR9U2WsS1s6+hRc/SjXV/5GjQ70tzgY55s287YJ2KthBbeMgOspkQuLSLufNR9Oj8O4qgoPgHwOKG88GJ7kS8uZ5ybsjR42x1tWPFe+npvDioJuyJqSQ2uME7c9b4ys7YeWhW4DGjtQBGgcrI5PjGuo3GybpAyg0BEv38QFPJxIDhIL+laYFmKorHNl878Kx9sXqxEY9wXD9XN+lzo2Wu6SFEFURaRrieQ66fnbSwxddtWNfJvQ2u/ikMU9A5Yw+Cwqyt2iEW1Yc/R2xnZZlNncGAtfbcS0Ezurs5S3ThGp6Bib/IdTnxzc9qTMG6cdPl8g5+oLC6Zwcx6quIQS85d3e8Pjy//tvrQQFTEn8Ef1k6dRsyHjSq1rltgZ553F+hm4K4zB0vgBg7TI8GAdQslbBrD54zxCDSv3315NQmapGKNpLkSvX1CEFUrq2jUevsI8DLMPeaDBHR3/v2XUK+8chx1xGr0EFfbM/rlIkGJLT9YJlSXee9a7Vjs5atLTkaG5kNuF9YtIyIECPQilEvJVpP7ew5ZhvyzNWUCRChNywzpCjvn5olXcpzlgL+5PSDPW28yTmE8+QcHjJxX7tCMrMmpgqmw2WcIZ4FtRtzYUiVPEFRMFowhozIX6FaHITXTZaJF5flsFjioENvx7d6gF2jz6UfuPqiBfPkmDtWMN/qCvOUDSdKZRUd0tOCCg2sEJrh1nKH/LYo8UyMYpToZlPjn9QRrlf3ikuhT24dSHP06hAGS4Eeq2u0JlZPuzftSKcJMPs9dPgCxP21XQJSULw9rrfuy6HGJgnofmDijU8PdSkgwyurSwD8MQlhxKRu5l85A63y8Qvm6A KWYrXdVs IPkdxf17NiD6sNDmUM6Sy7d7etZY1TwNBr8sUk0EjGKg3ebd2qdFktLRoGNHr1nD7M0TDTyeLlOJB+byS2WYxC3UrBYd5SVqaohDudhq85y3Z4reteA+/EGqcOV5U/yN4Tt7Rph5th62rFOhl1QCXqmgO1FjDtJbss6MCQfha8vrQWJq15zKfz1Jf+4FNgUX+JM7Wit8cZq/OZZWgf93haIMdp+qSNDx8gq78pX6/Ks0iCsSs1aF6RJ59Be2F4JQoz/bRAMIyOMQFhWYoOF+sN2p5TUVbW19A2fX1gdYGVdvZr54VnnhiNHQH/jugnungK9vicc9FoDkyvSo7IoSLk/8ZvXEOxv//wJMeJJ13y66VrrRug/Ju7EJsxh+f0hwkBXhPzX2a9eMXuAc7eiwm051jRQmHEALyTSJiCVyz0XV0YiYV1UCUfbMzJ4S9XrBBbnRXZZzHt1iqeCrPY6CMRcL54wfh7nox7OssCIbynHdCxZmWDYlia9fK8g5xgXZLbMCsXkR9SI802i2kPnE/Ird7otG/5GA36oF/4HSyinxrI31ri0wmothOJXZWKFYGcpLWwuGREpjGRm7y5+C6fmaZ18teDvAuTvwPmhUKbNeO0/fIG+Nd3k9+EvbYxjNs0JQ0Ksh+Z/5ztgGimno0lELrb8vocAQAzSeALTvzTqxMxpVm8adQsDleCnv+lhKQVOqNOAOGPXYPIewmo6uZGZSbtQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000003, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Andrei Vagin Introduce the PAGE_IS_GUARD flag in the PAGEMAP_SCAN ioctl to expose information about guard regions. This allows userspace tools, such as CRIU, to detect and handle guard regions. Acked-by: David Hildenbrand Reviewed-by: Lorenzo Stoakes Signed-off-by: Andrei Vagin --- Documentation/admin-guide/mm/pagemap.rst | 1 + fs/proc/task_mmu.c | 17 ++++++++++------- include/uapi/linux/fs.h | 1 + 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Documentation/admin-guide/mm/pagemap.rst b/Documentation/admin-guide/mm/pagemap.rst index a297e824f990..1f49762190eb 100644 --- a/Documentation/admin-guide/mm/pagemap.rst +++ b/Documentation/admin-guide/mm/pagemap.rst @@ -234,6 +234,7 @@ Following flags about pages are currently supported: - ``PAGE_IS_PFNZERO`` - Page has zero PFN - ``PAGE_IS_HUGE`` - Page is PMD-mapped THP or Hugetlb backed - ``PAGE_IS_SOFT_DIRTY`` - Page is soft-dirty +- ``PAGE_IS_GUARD`` - Page is a part of a guard region The ``struct pm_scan_arg`` is used as the argument of the IOCTL. diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index c17615e21a5d..cc35d8990c54 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -2067,7 +2067,8 @@ static int pagemap_release(struct inode *inode, struct file *file) #define PM_SCAN_CATEGORIES (PAGE_IS_WPALLOWED | PAGE_IS_WRITTEN | \ PAGE_IS_FILE | PAGE_IS_PRESENT | \ PAGE_IS_SWAPPED | PAGE_IS_PFNZERO | \ - PAGE_IS_HUGE | PAGE_IS_SOFT_DIRTY) + PAGE_IS_HUGE | PAGE_IS_SOFT_DIRTY | \ + PAGE_IS_GUARD) #define PM_SCAN_FLAGS (PM_SCAN_WP_MATCHING | PM_SCAN_CHECK_WPASYNC) struct pagemap_scan_private { @@ -2108,12 +2109,14 @@ static unsigned long pagemap_page_category(struct pagemap_scan_private *p, if (!pte_swp_uffd_wp_any(pte)) categories |= PAGE_IS_WRITTEN; - if (p->masks_of_interest & PAGE_IS_FILE) { - swp = pte_to_swp_entry(pte); - if (is_pfn_swap_entry(swp) && - !folio_test_anon(pfn_swap_entry_folio(swp))) - categories |= PAGE_IS_FILE; - } + swp = pte_to_swp_entry(pte); + if (is_guard_swp_entry(swp)) + categories |= PAGE_IS_GUARD; + else if ((p->masks_of_interest & PAGE_IS_FILE) && + is_pfn_swap_entry(swp) && + !folio_test_anon(pfn_swap_entry_folio(swp))) + categories |= PAGE_IS_FILE; + if (pte_swp_soft_dirty(pte)) categories |= PAGE_IS_SOFT_DIRTY; } diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index 2bbe00cf1248..8aa66c5f69b7 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h @@ -363,6 +363,7 @@ typedef int __bitwise __kernel_rwf_t; #define PAGE_IS_PFNZERO (1 << 5) #define PAGE_IS_HUGE (1 << 6) #define PAGE_IS_SOFT_DIRTY (1 << 7) +#define PAGE_IS_GUARD (1 << 8) /* * struct page_region - Page region with flags