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 1181EC8302D for ; Mon, 30 Jun 2025 16:47:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 980186B00CF; Mon, 30 Jun 2025 12:47:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9575A6B00DA; Mon, 30 Jun 2025 12:47:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 86DB36B00DC; Mon, 30 Jun 2025 12:47:50 -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 7769A6B00CF for ; Mon, 30 Jun 2025 12:47:50 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 2ED51BA698 for ; Mon, 30 Jun 2025 16:47:50 +0000 (UTC) X-FDA: 83612648700.25.409B5E2 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by imf30.hostedemail.com (Postfix) with ESMTP id 1192F80004 for ; Mon, 30 Jun 2025 16:47:47 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=FIyFedhA; spf=pass (imf30.hostedemail.com: domain of gerald.schaefer@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=gerald.schaefer@linux.ibm.com; dmarc=pass (policy=none) header.from=ibm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751302068; 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:dkim-signature; bh=AufIWocE5AuvJtPV1wlgowl9nYF3OzzI2gj6BnaMbts=; b=7x1Z7eGaOcN/fqB8yIL+Hom5NSRtg3sWvqS3Qn/7P3ro5KaJQvL2OGsOis/3v5rQYo7kLe ItbaTa/g6qFgiPyhGeRoVjpQPLP1EvsFBZPobc341CR4bO76qD+k3A2xG62y2RfgEIIbxh 1beYnLf8tKfogRjyI1weQSz1nDtpbSQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751302068; a=rsa-sha256; cv=none; b=C4IFNI/iKsfHMY55ljtUjVNcLEx4PzvXg545xkg7CpLo+AZiITaf8cnAonwBkqBoCmjBm6 VMEazJZQOjsLin9ojGHCXLrQ/aCtvv7tmT7miQi7pc2F8CM4uhVnPxwaXZPDrFPnVPj0Nc YBxW9ZYNdp8UyxyV4elFvryPXsdRBio= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=FIyFedhA; spf=pass (imf30.hostedemail.com: domain of gerald.schaefer@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=gerald.schaefer@linux.ibm.com; dmarc=pass (policy=none) header.from=ibm.com Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55UBD7Hb023854; Mon, 30 Jun 2025 16:47:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:message-id:mime-version :subject:to; s=pp1; bh=AufIWocE5AuvJtPV1wlgowl9nYF3OzzI2gj6BnaMb ts=; b=FIyFedhA/dGopM8gjgfb77ELLHTz2d+5DUgWSOfJIb3tEQIaAuXjH9w0r wQIJBZgDc1JjfTOo6mDTLaJzfVoLPWnVIDg0HdM2PrBPvEmRyC7Kx/WqX70GJuCD 48dc1bHa8cihoN3DcaCKSFm5Wru+yGC78IDA7G4F9SmUYz+NGqDN3nOumoTXN2eq EJ5PDw3FuZYOT3/z6v1WCQEA4YHZxEVpM6EEbbDyuCGRwhybT7RHC+49nY4Buog+ 3iTLlEMNoMryGaZiJVYBL04Uz8sBZvqJxF0/SMG67Ir0tJ0I6xjK4A8ScUZPyJI2 lIJ53RHhxYlAqz2M2Q7vpCs91/0xw== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 47j6u1jmpk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 30 Jun 2025 16:47:37 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 55UE6N6f021945; Mon, 30 Jun 2025 16:47:36 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 47juqpepwg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 30 Jun 2025 16:47:36 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 55UGlYeJ51053014 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 30 Jun 2025 16:47:34 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8009420040; Mon, 30 Jun 2025 16:47:34 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 55BFA2004B; Mon, 30 Jun 2025 16:47:34 +0000 (GMT) Received: from tuxmaker.lnxne.boe (unknown [9.152.85.9]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 30 Jun 2025 16:47:34 +0000 (GMT) From: Gerald Schaefer To: Andrew Morton , Anshuman Khandual Cc: Matthew Wilcox , David Hildenbrand , LKML , linux-mm , linux-s390 Subject: [PATCH] mm/debug_vm_pgtable: Use a swp_entry_t input value for swap tests Date: Mon, 30 Jun 2025 18:47:25 +0200 Message-ID: <20250630164726.930405-1-gerald.schaefer@linux.ibm.com> X-Mailer: git-send-email 2.48.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: ry2V18RJOMmtSxE0l4oahA2WZlmSjeeJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjMwMDEzOCBTYWx0ZWRfX0kvpwDntTdUg 0+0ZeQMZlFBp3uT7tL5Qx9+tPHwjJD05c1iCfNbFF1YIeLEepNS3COO91oyyuYKsX/SvbOElP4r LycnGSTdSapD/Rw+KRYXz/Ye04S2eiggr+xuQlABM8sin22fUiRUajjlZGmfbmWAZlYWzdwg3h8 y3Hz6sCImfOlz66E/6nabSYgEp2Dg5amWOcDogZiQi/IeGJzq8jX8AIZ0GZ2OyAfgYJejMB9tG2 KF/hBedYQWBH3ChJe9Yvs9qEGXxDEVt9IT1GwjP4eQj/eMgWEMby3nD5BYFCizEQcQRJ+KA4cW8 S5ysEgCknJnY39XQzMJf4j2fi3V6Wg2TlvWPPk7aX3cThwrlLSm4e2+d6dREUi38Y2TCcN0OK3+ YAYen7p/bTPTyFPV7ovOFQphAbGzESj9/lt9bn65yKLGLPrJUudKDzZNwJ1CFYWXJOP3A2lv X-Proofpoint-GUID: ry2V18RJOMmtSxE0l4oahA2WZlmSjeeJ X-Authority-Analysis: v=2.4 cv=GrRC+l1C c=1 sm=1 tr=0 ts=6862bfa9 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=6IFa9wvqVegA:10 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=ZTx8QE4AkKJnx8U2w1UA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-06-30_04,2025-06-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 adultscore=0 mlxlogscore=999 mlxscore=0 impostorscore=0 phishscore=0 spamscore=0 suspectscore=0 bulkscore=0 malwarescore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2506300138 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 1192F80004 X-Stat-Signature: k6bdcn8cty1z8gpz1ukq6wk37j1pymo8 X-HE-Tag: 1751302067-234593 X-HE-Meta: U2FsdGVkX18n/9Di/uqNlwsgCg8knsWj3cyxx+a6MwGSxOSPiFqQ3PgaeJ/59b4CZf0VRq43U6jMESOrogq/QgLCOsWbBStrq9bLeCeNPyiDGXodMPfx7zPOipN25cTq2Bz7Ci/11jP/cSZALZl5ayk7FAORvQ63jhcKUKUHzKRMXN8vAV1FYTx96+Ps0NpQYOflz4Y5vLADx9Q0HUJ3h1wFZeMtcVHAS1Kqj+w3Dmk6kxVp59j8TwVJCllB0duxoCTEbPoYsEibCnN7DROU2fzhXwqoe6rKEHQjAiZdsZQhhypnrSoXIsiL9wu0vivuMzPXDty51CD5PvFdc59M+gZzHCI90DNcar7i9XBZ2vrL3Gh00vCErfLsmaQeytYyZTRcv2FFJQAIgnhBKSPnsUIDpmef5yWI+6O8vMUPvfwW8o0EibsMFF9yXZP+8N6e8V0AyPfukgW1z3+XQKE9hhk1PsuyTqkntaVhKHvOhx8XYK9g/s78maxzvohlXHGPZNWT4RA6FD/SwKXlnd1XwPvy2F+QXmTmL8OHa4RSpUPTaONuu3iWijwZo5kzVaZGChBCgGWHJmL2Ok1toGCVZEkqy+xVDhr/XRTcbJpfrZ+75oTrHHExCo/xx94FTl37nR9wSZ/S7qbm10MX7NauenzUz8GbVnkSvSx6q4GzPng0z7Ji50Jn2R0iV1aZJhYp3muq+d3KxzFCrZOwpk6yd7ooyGN/9IYcMTyDo1r23rCoDvfaA7cAfc8RJUlEpEdd2vUM6MPotDCgyAsjA6yJAac/cwnB+pa2nRSMvEWXmz84/JKpIt1U9UjAcsn3yBiK736/WlsA1ouS7WUb0q9yQO3pjkpPLRSeDsW4sVniU2WvmWKb60IeH6oSVTfOHbz090r8co+kgaxTJ3oGKHRKoUNDwc0+Qmfcc5n/SO9KCXmI0xiP1+GLZcsy2zbXt4kMuDdh2l2V//tspSrRFLm ErDWgzwP ah4v5Up83LOjg5IkNFHmxPWZUquwu38jaDXRAVyN6BTgr4kYjSTtqezNXjho3PTfcM2P4U5r49i0t/pHCddxpWYZ0ybZ0hthUKpz2kh33XaB4ywKcg7IwrfCMzd2tcvn9OiStG8aqv38mu4qf88G9xpwkgDcfCbFOAXxYeU5nY9KcmHfLpcobwLfxdKV0/nJl1oqycV3KTVTOjgOMS86wmIxCA4aOoZUJncgJTF8YrOJVmyivpUnHJDG4zJDQM0G+BZxHj6ZYgDBiPGkvhxg7Vu1LpTREpGoZdqsdV+TcEVPGqCw= 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: The various __pte/pmd_to_swp_entry and __swp_entry_to_pte/pmd helper functions are expected to operate on swap PTE/PMD entries, not on present and mapped entries. Reflect this in the swap tests by using a swp_entry_t as input value, and convert it to a swap PTE/PMD for testing, similar to how it is already done in pte_swap_exclusive_tests(). Move the swap entry creation from there to init_args() and store it in args, so it can also be used in other functions. The pte/pmd_swap_tests() are also changed to compare entries instead of pfn values, again similar to pte_swap_exclusive_tests(). pte/pmd_pfn() helpers are also not expected to operate on swap PTE/PMD entries at all. Also update documentation, to reflect that the helpers operate on swap PTE/PMD entries and not present and mapped entries, and use correct names, i.e. __swp_to_pte/pmd_entry -> __swp_entry_to_pte/pmd. For consistency, also change pte/pmd_swap_soft_dirty_tests() to use args->swp_entry instead of a present and mapped PTE/PMD. Link: https://lore.kernel.org/all/20250623184321.927418-1-gerald.schaefer@linux.ibm.com Signed-off-by: Gerald Schaefer --- Documentation/mm/arch_pgtable_helpers.rst | 8 ++-- mm/debug_vm_pgtable.c | 53 ++++++++++++++--------- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/Documentation/mm/arch_pgtable_helpers.rst b/Documentation/mm/arch_pgtable_helpers.rst index c88c7fa665d6..ba2f658bc241 100644 --- a/Documentation/mm/arch_pgtable_helpers.rst +++ b/Documentation/mm/arch_pgtable_helpers.rst @@ -236,13 +236,13 @@ SWAP Page Table Helpers ======================== +---------------------------+--------------------------------------------------+ -| __pte_to_swp_entry | Creates a swapped entry (arch) from a mapped PTE | +| __pte_to_swp_entry | Creates a swp_entry_t (arch) from a swap PTE | +---------------------------+--------------------------------------------------+ -| __swp_to_pte_entry | Creates a mapped PTE from a swapped entry (arch) | +| __swp_entry_to_pte | Creates a swap PTE from a swp_entry_t (arch) | +---------------------------+--------------------------------------------------+ -| __pmd_to_swp_entry | Creates a swapped entry (arch) from a mapped PMD | +| __pmd_to_swp_entry | Creates a swp_entry_t (arch) from a swap PMD | +---------------------------+--------------------------------------------------+ -| __swp_to_pmd_entry | Creates a mapped PMD from a swapped entry (arch) | +| __swp_entry_to_pmd | Creates a swap PMD from a swp_entry_t (arch) | +---------------------------+--------------------------------------------------+ | is_migration_entry | Tests a migration (read or write) swapped entry | +-------------------------------+----------------------------------------------+ diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c index bd8f9317b025..d19031f275a3 100644 --- a/mm/debug_vm_pgtable.c +++ b/mm/debug_vm_pgtable.c @@ -72,6 +72,8 @@ struct pgtable_debug_args { unsigned long fixed_pud_pfn; unsigned long fixed_pmd_pfn; unsigned long fixed_pte_pfn; + + swp_entry_t swp_entry; }; static void __init pte_basic_tests(struct pgtable_debug_args *args, int idx) @@ -698,12 +700,15 @@ static void __init pte_soft_dirty_tests(struct pgtable_debug_args *args) static void __init pte_swap_soft_dirty_tests(struct pgtable_debug_args *args) { - pte_t pte = pfn_pte(args->fixed_pte_pfn, args->page_prot); + pte_t pte; if (!IS_ENABLED(CONFIG_MEM_SOFT_DIRTY)) return; pr_debug("Validating PTE swap soft dirty\n"); + pte = swp_entry_to_pte(args->swp_entry); + WARN_ON(!is_swap_pte(pte)); + WARN_ON(!pte_swp_soft_dirty(pte_swp_mksoft_dirty(pte))); WARN_ON(pte_swp_soft_dirty(pte_swp_clear_soft_dirty(pte))); } @@ -737,7 +742,9 @@ static void __init pmd_swap_soft_dirty_tests(struct pgtable_debug_args *args) return; pr_debug("Validating PMD swap soft dirty\n"); - pmd = pfn_pmd(args->fixed_pmd_pfn, args->page_prot); + pmd = swp_entry_to_pmd(args->swp_entry); + WARN_ON(!is_swap_pmd(pmd)); + WARN_ON(!pmd_swp_soft_dirty(pmd_swp_mksoft_dirty(pmd))); WARN_ON(pmd_swp_soft_dirty(pmd_swp_clear_soft_dirty(pmd))); } @@ -748,17 +755,11 @@ static void __init pmd_swap_soft_dirty_tests(struct pgtable_debug_args *args) { static void __init pte_swap_exclusive_tests(struct pgtable_debug_args *args) { - unsigned long max_swap_offset; swp_entry_t entry, entry2; pte_t pte; pr_debug("Validating PTE swap exclusive\n"); - - /* See generic_max_swapfile_size(): probe the maximum offset */ - max_swap_offset = swp_offset(pte_to_swp_entry(swp_entry_to_pte(swp_entry(0, ~0UL)))); - - /* Create a swp entry with all possible bits set */ - entry = swp_entry((1 << MAX_SWAPFILES_SHIFT) - 1, max_swap_offset); + entry = args->swp_entry; pte = swp_entry_to_pte(entry); WARN_ON(pte_swp_exclusive(pte)); @@ -782,30 +783,34 @@ static void __init pte_swap_exclusive_tests(struct pgtable_debug_args *args) static void __init pte_swap_tests(struct pgtable_debug_args *args) { - swp_entry_t swp; - pte_t pte; + swp_entry_t arch_entry; + pte_t pte1, pte2; pr_debug("Validating PTE swap\n"); - pte = pfn_pte(args->fixed_pte_pfn, args->page_prot); - swp = __pte_to_swp_entry(pte); - pte = __swp_entry_to_pte(swp); - WARN_ON(args->fixed_pte_pfn != pte_pfn(pte)); + pte1 = swp_entry_to_pte(args->swp_entry); + WARN_ON(!is_swap_pte(pte1)); + + arch_entry = __pte_to_swp_entry(pte1); + pte2 = __swp_entry_to_pte(arch_entry); + WARN_ON(memcmp(&pte1, &pte2, sizeof(pte1))); } #ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION static void __init pmd_swap_tests(struct pgtable_debug_args *args) { - swp_entry_t swp; - pmd_t pmd; + swp_entry_t arch_entry; + pmd_t pmd1, pmd2; if (!has_transparent_hugepage()) return; pr_debug("Validating PMD swap\n"); - pmd = pfn_pmd(args->fixed_pmd_pfn, args->page_prot); - swp = __pmd_to_swp_entry(pmd); - pmd = __swp_entry_to_pmd(swp); - WARN_ON(args->fixed_pmd_pfn != pmd_pfn(pmd)); + pmd1 = swp_entry_to_pmd(args->swp_entry); + WARN_ON(!is_swap_pmd(pmd1)); + + arch_entry = __pmd_to_swp_entry(pmd1); + pmd2 = __swp_entry_to_pmd(arch_entry); + WARN_ON(memcmp(&pmd1, &pmd2, sizeof(pmd1))); } #else /* !CONFIG_ARCH_ENABLE_THP_MIGRATION */ static void __init pmd_swap_tests(struct pgtable_debug_args *args) { } @@ -1110,6 +1115,7 @@ static void __init init_fixed_pfns(struct pgtable_debug_args *args) static int __init init_args(struct pgtable_debug_args *args) { + unsigned long max_swap_offset; struct page *page = NULL; int ret = 0; @@ -1192,6 +1198,11 @@ static int __init init_args(struct pgtable_debug_args *args) init_fixed_pfns(args); + /* See generic_max_swapfile_size(): probe the maximum offset */ + max_swap_offset = swp_offset(pte_to_swp_entry(swp_entry_to_pte(swp_entry(0, ~0UL)))); + /* Create a swp entry with all possible bits set */ + args->swp_entry = swp_entry((1 << MAX_SWAPFILES_SHIFT) - 1, max_swap_offset); + /* * Allocate (huge) pages because some of the tests need to access * the data in the pages. The corresponding tests will be skipped -- 2.48.1