From patchwork Mon Mar 24 06:53:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Vagin X-Patchwork-Id: 14026842 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 34201C36008 for ; Mon, 24 Mar 2025 06:53:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 06EC4280006; Mon, 24 Mar 2025 02:53:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F18E0280004; Mon, 24 Mar 2025 02:53:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BE072280006; Mon, 24 Mar 2025 02:53:35 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 99024280004 for ; Mon, 24 Mar 2025 02:53:35 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id E4CDE1C7CB7 for ; Mon, 24 Mar 2025 06:53:36 +0000 (UTC) X-FDA: 83255528832.07.D040F66 Received: from mail-io1-f73.google.com (mail-io1-f73.google.com [209.85.166.73]) by imf16.hostedemail.com (Postfix) with ESMTP id 2DCD5180005 for ; Mon, 24 Mar 2025 06:53:35 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=RYTjUZ8D; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf16.hostedemail.com: domain of 3bgHhZwYKCDsXsXdfkdlldib.Zljifkru-jjhsXZh.lod@flex--avagin.bounces.google.com designates 209.85.166.73 as permitted sender) smtp.mailfrom=3bgHhZwYKCDsXsXdfkdlldib.Zljifkru-jjhsXZh.lod@flex--avagin.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742799215; a=rsa-sha256; cv=none; b=ESb20RdlqM52xtdL4po2IRebwlfPjQqv+Pz3MWGkp3lBD0sVr3YQmLwwLoY1o8Soc6RdGc oFDzxTS+0bGTbXWgt5AoDBS4K9kOrYKhvhEjCm6xQ/6lgwvUvY30fhjFgrFmJ9msfW/g+K P7kEw4xTssD75I5rL6JYdcCMq0Hsmls= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=RYTjUZ8D; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf16.hostedemail.com: domain of 3bgHhZwYKCDsXsXdfkdlldib.Zljifkru-jjhsXZh.lod@flex--avagin.bounces.google.com designates 209.85.166.73 as permitted sender) smtp.mailfrom=3bgHhZwYKCDsXsXdfkdlldib.Zljifkru-jjhsXZh.lod@flex--avagin.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742799215; 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=ffy3DLCEfKN3in8d5zlc7vx3iwgfrqHuCXTxXTm84ts=; b=SzMRPFGrWXjQEpKoLoqMPH1eBXUq4UCwlLCpguU3t4m/bRxZ3LzkFnuKXTR6Ym69kWVmsR GJpZvi9o0ggGAQfRECPFQIeKMlEdVKV3EU9+0jtYzFQfqplrInGco+9KnPabQJxLnCs51g JxSb493BUIBMd/bXehZ64YUhmOMX3SY= Received: by mail-io1-f73.google.com with SMTP id ca18e2360f4ac-849d26dd331so499610139f.1 for ; Sun, 23 Mar 2025 23:53:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742799214; x=1743404014; 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=ffy3DLCEfKN3in8d5zlc7vx3iwgfrqHuCXTxXTm84ts=; b=RYTjUZ8D+ESAv7Kwli3YOWgCen+5lXrTI7zuQf2jCevV+i2j87/nf3UpckjJMwYHne YCug9OAKEtWdIaZFlhhRI+ed0IPJWXFI6/bwAbCD/VEEPxNToGTbxuu9UVjxVpOCfdIz QK7121h6oh+XZjMm8WeihTK+g1e5cTzmMlo31wJu1xQugdrYySsFT8ejwOC1qMvZQlKm W3cfH2rjtUK29ZxlSky2KJETUfJD7W/ail4PRrs5VhG0Tj24y5EeSLLZ+Z+zzvO+NWEA 0cWBXwcwS9DNh9RGI5XwN55hRHaiVT0ED1URUg8yAax2hdNZEBkj7Hf8IK93UGgzCp8x 7qIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742799214; x=1743404014; 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=ffy3DLCEfKN3in8d5zlc7vx3iwgfrqHuCXTxXTm84ts=; b=eYrKvyqOVAFfPo6voBmmuxD/6YZPFgBWVdz4SgnqXu8Oos/09TYDZpsc0GIhZ8lBF6 EglYB1rdSoWvpr36wKC88RWvhLjlemDjCwCP0l9oKFZB6FdLD/voVJdbBSDaSzUk5Eui f/isjyZIgQSp9ldjRDl2ENioOo/6yt0sEf+z/3NeMGYSgZF8dp84QgedMW2WZb0eX+fM lZvxl/cPq174sk7h7ngo0NcNs784Ul6TcLW0gOWWcOWwfu6UqXzk0dYxdpOtyJSjyCNx AJYjAeLD4L89WS8sL8EHWk7JKhdkRBzY24A1wUbIwuKE2OjSiUz/2VIEonZpQtdUkIQu KmCg== X-Forwarded-Encrypted: i=1; AJvYcCUIZe/ssNqlxjuYGA2QuFlAnlvQcAHYSmHlxQp4QY9CUwJ6U7AYwdrzyAm1KcGuVGBGj1ztgd+kGQ==@kvack.org X-Gm-Message-State: AOJu0YwDermIXrX8hxsWBUDVf4p8FZslUyZrrnuiNAESYVcotH0Y6K5V xCBaWRwV6+I+oh6Vy8jqFwNeg+OxdT4Km0GuZvRKMu1ePH7gkpTFMWsK52URg1pVL4XTUegSWUq FaQ== X-Google-Smtp-Source: AGHT+IFwtFlPb7SBpjbVuF+q5bn8QiiRzWt4tMIZGVuP7apCHzJYW7HGlUxBgl+wR+Dv2VtTkkVMvH9ZZQw= X-Received: from iobbw19.prod.google.com ([2002:a05:6602:3993:b0:85b:40c7:ce65]) (user=avagin job=prod-delivery.src-stubby-dispatcher) by 2002:a6b:7b07:0:b0:85b:5511:e47f with SMTP id ca18e2360f4ac-85e1ef9251emr1427245839f.3.1742799214336; Sun, 23 Mar 2025 23:53:34 -0700 (PDT) Date: Mon, 24 Mar 2025 06:53:28 +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-4-avagin@google.com> Subject: [PATCH 3/3] selftests/mm: add PAGEMAP_SCAN guard region test 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: 2DCD5180005 X-Stat-Signature: 1jp8y4z9fhzjmrry3btg6zqywsmdzx41 X-Rspam-User: X-Rspamd-Server: rspam06 X-HE-Tag: 1742799215-351452 X-HE-Meta: U2FsdGVkX19zJgre3yw9KqjQcyVK9mewIYtUVGqOx2wLy0bTZayxd1JTlIE/Sgm08MjZwxPA+/Pf9bDtwNisrv1Vo0UCNAAAAlu76OXfoYIScDmN3sWYag+YAPJI1nMkxu1Nh6BacN+UcgGaxpJ0nvyVWgpkTnLv9Jmdt/tAQG+1YPGEHNhhUGRrac2lRUKNqW5SiiDXOY47GiqW+l0ZK8+9Y8aBs1drc8K9H/KIOT7l+QStjklp42kqNUzJNc09Apa7f7O1x0To61clmqW6JVxh2BT+Ak2yXBT1RuipAVlrJNTAMvQP3uwxWsW6dmYGFJWb+Lf10c2l/YT9E0NwTeXu0mNFwkUxkvqSt6Db6yhHXGi5+bH+VL7KXESP9jhFywxQAhTQMwsu2Tun+hw5jmuPKFtSV7K1S9owG1aMNTn0Rf/Rh7lWOWrZnzfkJnsF69/IZDYRvvorzj7868WURlRk8UTylsydhYmmJ1o5KfHO+Is3QRiVZ2wh+IUk3+L0qQoEP8VGKKBGYEQW4Ho04YpIa0hZjMENzDUTdTho2giUqYWpHpzRvjog082GTiuNU4J8z9di8YnaXKzqmSYxqsJ2QW7+1sFNACI1qj0GmZ4B/xQdFn0WmMoOZk+t8XdgfL1IbD97U+yo+OMI9e5WkdetjgvRaSqpi0NPrAMXjfK1Gsa1/6CGv9hshI1YBU/6x/+DA1WE+bJthon2p+zngLQ3mKhjJaCfJLp6to2yVXtDWySQNIQNtOaOhdQuBDoE+rNE4K1L9rnFs/t4m0uqAH9ylGwA9WLHOyrADl5BwFrBos3IYk0seQEUrhPFYv+5M4m2rDkk2uZXZr4faOfaHCI3VdBRfd7sicYHkc4tr18eStko2rMiuo7WPZvNQ0jHXEy+X+eHLj6A41B48FWNdYvI/JYneO3FyYcmOtYt64Dyy5czAqcjsxoIlLpTAon6GrrrHbXhrQn4nCnczuT 4CLeqdAU 5MobEky2EPNcxRWkYAaC9N9RNmeyKfNjTHFGWvX0UdWhU/vXLzVkvSDZFS5FG9QVrHGiyN83w9uzfXxUx9szhzqA1xZvPI+k47wUpuieAaXnfM6WS473UPCmQFIRltuefjvUx6AM9+EwLk6e+byYdVrDJzg2s0pw5yiQBbIspcamlvnbaJM43Nhpf8kOkK5ubFX11DQJ1OpZo7JDg3IyO6KpX45KpcVRpQwnpGGoLYFOvFmgTfm8IP1gGjzqeGnJ/DzO0vDzC2RbkcGdJWmEjSWPoVS8harY3D2RTAJC6KfLm2CqsXLP7qOYJcBq0B8sJ609PqpMarwfhsauOkLaufCJdqKwoVHkBuwoN9FEIuBSWsGz+ih9kgQ/L2ANZKkq4Eq3oyTSAmF5146I/sv3hRZma4+PSh6QT9xf12lyT2NQCTlAPaRdd6orlRgf+SVynyYpoDFhJV4alinhDSN2xj8EmXRF9oG+HKCBKHwv3V2e3NcvdssTcAUkuY5EdqP+9isxLKBd40DrrRsXjQH0bXnAx3BkrC/gbazKbZvH2ZGjCMOswKxmnRA2jdB6ESAF4yIGEduXR+sGPLO7SwHgH+C7Dx1/SWTNIXwQvpqIf8mOAXtm71TdFD/zWJg== 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 Add a selftest to verify the PAGEMAP_SCAN ioctl correctly reports guard regions using the newly introduced PAGE_IS_GUARD flag. Signed-off-by: Andrei Vagin --- tools/testing/selftests/mm/guard-regions.c | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/tools/testing/selftests/mm/guard-regions.c b/tools/testing/selftests/mm/guard-regions.c index 0c7183e8b661..c99f3da8bfb7 100644 --- a/tools/testing/selftests/mm/guard-regions.c +++ b/tools/testing/selftests/mm/guard-regions.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -2079,4 +2080,60 @@ TEST_F(guard_regions, pagemap) ASSERT_EQ(munmap(ptr, 10 * page_size), 0); } +/* + * Assert that PAGEMAP_SCAN correctly reports guard region ranges. + */ +TEST_F(guard_regions, pagemap_scan) +{ + const unsigned long page_size = self->page_size; + struct page_region pm_regs[10]; + struct pm_scan_arg pm_scan_args = { + .size = sizeof(struct pm_scan_arg), + .category_anyof_mask = PAGE_IS_GUARD, + .return_mask = PAGE_IS_GUARD, + .vec = (long)&pm_regs, + .vec_len = ARRAY_SIZE(pm_regs), + }; + int proc_fd, i; + char *ptr; + + proc_fd = open("/proc/self/pagemap", O_RDONLY); + ASSERT_NE(proc_fd, -1); + + ptr = mmap_(self, variant, NULL, 10 * page_size, + PROT_READ | PROT_WRITE, 0, 0); + ASSERT_NE(ptr, MAP_FAILED); + + pm_scan_args.start = (long)ptr; + pm_scan_args.end = (long)ptr + 10 * page_size; + ASSERT_EQ(ioctl(proc_fd, PAGEMAP_SCAN, &pm_scan_args), 0); + ASSERT_EQ(pm_scan_args.walk_end, (long)ptr + 10 * page_size); + + /* Install a guard region in every other page. */ + for (i = 0; i < 10; i += 2) { + char *ptr_p = &ptr[i * page_size]; + + ASSERT_EQ(syscall(__NR_madvise, ptr_p, page_size, MADV_GUARD_INSTALL), 0); + } + + /* + * Assert ioctl() returns the count of located regions, where each + * region spans every other page within the range of 10 pages. + */ + ASSERT_EQ(ioctl(proc_fd, PAGEMAP_SCAN, &pm_scan_args), 5); + ASSERT_EQ(pm_scan_args.walk_end, (long)ptr + 10 * page_size); + + /* Re-read from pagemap, and assert guard regions are detected. */ + for (i = 0; i < 5; i++) { + long ptr_p = (long)&ptr[2 * i * page_size]; + + ASSERT_EQ(pm_regs[i].start, ptr_p); + ASSERT_EQ(pm_regs[i].end, ptr_p + page_size); + ASSERT_EQ(pm_regs[i].categories, PAGE_IS_GUARD); + } + + ASSERT_EQ(close(proc_fd), 0); + ASSERT_EQ(munmap(ptr, 10 * page_size), 0); +} + TEST_HARNESS_MAIN