From patchwork Thu Mar 20 06:39:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Vagin X-Patchwork-Id: 14023468 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 95285C28B30 for ; Thu, 20 Mar 2025 06:39:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6572F280003; Thu, 20 Mar 2025 02:39:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5E091280001; Thu, 20 Mar 2025 02:39:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 45924280003; Thu, 20 Mar 2025 02:39:51 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 20639280001 for ; Thu, 20 Mar 2025 02:39:51 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 91E871C8044 for ; Thu, 20 Mar 2025 06:39:51 +0000 (UTC) X-FDA: 83240978982.13.EFA1BB8 Received: from mail-io1-f73.google.com (mail-io1-f73.google.com [209.85.166.73]) by imf02.hostedemail.com (Postfix) with ESMTP id CE4F680005 for ; Thu, 20 Mar 2025 06:39:49 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=dTQjhJlv; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf02.hostedemail.com: domain of 3NLjbZwYKCFk1M179E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--avagin.bounces.google.com designates 209.85.166.73 as permitted sender) smtp.mailfrom=3NLjbZwYKCFk1M179E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--avagin.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742452789; 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=h+zYWV6NSopuldnNVazhY6YUnTYuwrgpgyF3WHeSVI8=; b=ZMs2R/1r4ZbIR2kul0RDRfEywP0ilqCPq7J9hzmxCepEFoinEIBA/TNSoGb0g/dHiM9iTA uTX9Bkr+ICXiM3dxQrX+1vY65cg6uL4imXfrCWyW9J3v5XUsnlM1b6wdZMANFdc7aTuU8g DU8t6SrHh/MHkuRVVj7qf3eugfgwOZQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742452789; a=rsa-sha256; cv=none; b=xZTVQgjoi+WVh7+AWASesukUMRZdRpOBbtjkZP5g2UlUHrOK2QCC8FteDfUix0Q4PetYQ+ qS4VofW7bCwGL4lQtQD+gmLBn+GXcfs18Uy2nT/J6t2uxwReMaaqVgqFIZX14xvHuhxFWJ qRMQLbAPpIla2j/Q9O8vVT5yzoosQSY= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=dTQjhJlv; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf02.hostedemail.com: domain of 3NLjbZwYKCFk1M179E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--avagin.bounces.google.com designates 209.85.166.73 as permitted sender) smtp.mailfrom=3NLjbZwYKCFk1M179E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--avagin.bounces.google.com Received: by mail-io1-f73.google.com with SMTP id ca18e2360f4ac-85dad593342so39605939f.1 for ; Wed, 19 Mar 2025 23:39:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742452789; x=1743057589; 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=h+zYWV6NSopuldnNVazhY6YUnTYuwrgpgyF3WHeSVI8=; b=dTQjhJlv35OVDvcb291mI0Y25Fdo8vXsOdk94r9ycwhcw3L6u8TkxxHjzPfLjt8QhT ewZbzJBqymweZ9XEuSHBJfw1JvLogW3wJiVSLMlHxFbSFBRT0vvEANQj5xbBnkzIElKq DtU/cLeMsM4/g1ZUNQPg2ZV9vS62qz/6DvfTqx/nAiZqVxrMuIBhNb7/JwA6qiIGrP5L pL0UsomcOb8yJYRMwWGsYHPZhTRbBDznFTn6Mep6vpZl+C30Zvt0N3jcNgweHatmorwT TGpfEIuYg5Himl8vyT9s5iWcr3hbVgGFiwtjrfoImobiaidH4A7HGAJjDGvLuKJ5bC7I A4vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742452789; x=1743057589; 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=h+zYWV6NSopuldnNVazhY6YUnTYuwrgpgyF3WHeSVI8=; b=C6kWlm8mMhBTfrZkEsuwmZ32dlfQ+XFPGCvrZFqYicDPDsQawc+sc6H6HTRoHd8LnX MV814AqjsTl1h8KW79Z965uWtD2b0CTQH6G5dZyxCKLaw7Net0j4FeiY5sjPU+EAWO6e AE5DSXL5I5x49Relx1pIcTkPSGdUssHMwiwL+s/kTwAk8A4He4+AJXYrmNlXycMNpiiV 08+1kN3Lne2IHWiUntq9fYSKdrpzkM9+jOlmKEiLY84IR6aaJUCrsXJ1WKF8QShwgziF LO9RxtBX5EcD0AYQrLAwj1/8SLTB8nG4P39zzXniVHy3uH0qNnsLAuJX4KE5+8bP403R 3j4w== X-Forwarded-Encrypted: i=1; AJvYcCW+LRfatSht1Nu8HNGyCrpZxBSn6oCtwYPcC0MTNlpfkPuU5kVCn5b2pkCR7KP2FD4HRBR4YM6eYA==@kvack.org X-Gm-Message-State: AOJu0YxkeKRO055Zz+FNF1O75hCXkLGZW2zQFCrpYNjmdnlPphgqtObw /S49v2aCjDZhmVC9EUtt9ho5rLw/5d7UXb4Ve8r7k0WLZZlZUChmgqs2oNAvbxRKXTFPsAHKk6i Peg== X-Google-Smtp-Source: AGHT+IEbcL33dk/wm6GLcLtAt9md7WDVC/RMdK0m0WYXEIIuByDZLRnpM5nzkyuglrbRs0eWMcYPoPCXpKg= X-Received: from iobbw12.prod.google.com ([2002:a05:6602:398c:b0:85d:9d10:cab7]) (user=avagin job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6602:4c8d:b0:85b:46d7:1886 with SMTP id ca18e2360f4ac-85e137da946mr646941939f.7.1742452788937; Wed, 19 Mar 2025 23:39:48 -0700 (PDT) Date: Thu, 20 Mar 2025 06:39:02 +0000 In-Reply-To: <20250320063903.2685882-1-avagin@google.com> Mime-Version: 1.0 References: <20250320063903.2685882-1-avagin@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250320063903.2685882-2-avagin@google.com> Subject: [PATCH 1/2] 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 , Andrei Vagin X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: CE4F680005 X-Stat-Signature: eij6d9cw3zwbn751qgrrsi7cdxt1qidw X-HE-Tag: 1742452789-373409 X-HE-Meta: U2FsdGVkX18BeWZRrdkicXQ45fpZY3bHlhpbHqXKTLeh923xRBQoEZ1OK5Zj6ap0aHktJFG4C78u8IWV4zDNR7gmODL89yg6mpv8DEXmMYEb3GP3sV7b3byOp0JTQrRUUHqmOGbCEbq077bFp1yovAYinRqf7GXbXUi2UZax436zVlyc+nDiyrsAWjHNV77tXWgylOnsiy/rJsT/Q/EYzuKUBUg+wuNS47+WEcQRTLHbcmtniRp2KnzHb8Zx2zEHeLtncdTpZHjmMVRbndjCVu2NF5qwJ0uF0pRgLMsZxBbXeYIly7LAX6VhNPiaQkUJoZdcmCmWUWVCYZQDlqR4GSdUHhjrxqextt4Px3oda8ymO/KJnCm12xDREDJVUqVc7jCTKWpeyQf1rzFLwafflorMdmTEPsOfDD+Zc6pAhYQWU5Qv3GRw5FasFANsRbCvq4yJZ7NDoQeD9GIW7soVP22wdhlXjY8oEgAdscIyC1U1vJ6DKtah9gUYxrTQxik8L51WC6mhh+PIezqURwenv1exzaO0XktwlqlfSm84+RhrB/L+AXLrQ6zNEVHimm/pkHvKVOARF7FICUcjv7AJY9r7qlZBBYnk6ZBVKexOMJTFEG9eBOhbT8t2h89kl1Qaus18P3L2Q+KKmasJCZZLjOiyflItEV6JlVT0oONwzJqf3f6CW2Se05AIy0tCtovZ7S+LV52QI9Hx8+fyDSmEclHZv1yaPCNsR2OAZ+psXFKk25AOT9aC/TGqE5sLNJgSciNvVTOVAq7vMnNt1PytA1hnw1rrzukzryAk3RApQty865PELaMDZRnecGo+k99YPwZjtbAE6EH0oO3MFe+AlOKSTqwIv4fOaurSkNTxLubny27xC/6Eu1DFMe4L0XUJrHW/rGPYF70o6JxC4sXtlXFkOz50IT7142AMqMf4Fu+DUFqIY2Wps/+nJuqvxWAB9VeaQc34a/722OqdZG1 jGelnh7h iRB5GV7rJ78QVdrUjyymOR+TswpEoFnd8oDiMWqgDvrawHsCcsYy+2k/Qa0+Zjd9hUU9V8J1S3RdJzHjlOkitbJRHSobS/7mS+WLMn1on18pHiAI9Ax9k35XnIuavO03lsW8YUFmKQjtVV/oW+SmdDS1kPLAycWfxjvecsxqpD68uvqRpD5Tp818nFYmD9350bCSgCVkBCDeKgheyDEKnwRoIu+ViieweDmkmtuUqCKH3td9EGZyMy5YpzmWB87MPL0/66IfGSzYcJab/yE8DFK8gBo1n/jEZUg+zzTjRwiBRaOfJJZpbcShtpeyKB2DUpb38mEVrrh/3cU0Yypqw8cxXXP6BMrK1Ynn10W1LEzWK8G67+a7gdp7x6n5Jd4tWtE4SAX7Wh4VUBP7+JCk7Dresvh/D/MDa6QE4zvdMZ7aF+1t30Bbu+tOn+MS3UOrcjmtipowggnKkGG/lib6zVgO1NR/FlXhlP80kW51dokDcxSeuXJ5eCFJimE/EePdtOfZCzgh6IncGzrPw50YLG2SbheMDFPc/2OG2XByYUbdmPqKrTQvQxhbAuK1HLrM33TloEAhWQppI6g9Ebht8rdW3rFA77dCjh0lHCZBrVevnJQ1UreqvAao8HbXlNHI+CQ4L2NL28GdvpJyDZwfvzcEBafCko9IwHihW9986IRBGEH4= X-Bogosity: Ham, tests=bogofilter, spamicity=0.004818, 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. Signed-off-by: Andrei Vagin Reviewed-by: Lorenzo Stoakes Acked-by: David Hildenbrand --- Documentation/admin-guide/mm/pagemap.rst | 1 + fs/proc/task_mmu.c | 8 ++++++-- include/uapi/linux/fs.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Documentation/admin-guide/mm/pagemap.rst b/Documentation/admin-guide/mm/pagemap.rst index a297e824f990..7997b67ffc97 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 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..698d660bfee4 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,8 +2109,11 @@ static unsigned long pagemap_page_category(struct pagemap_scan_private *p, if (!pte_swp_uffd_wp_any(pte)) categories |= PAGE_IS_WRITTEN; + swp = pte_to_swp_entry(pte); + if (is_guard_swp_entry(swp)) + categories |= PAGE_IS_GUARD; + 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; 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