From patchwork Tue Apr 8 08:59:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wupeng Ma X-Patchwork-Id: 14042461 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 9E789C3600C for ; Tue, 8 Apr 2025 09:09:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 603F56B0007; Tue, 8 Apr 2025 05:09:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5B2D36B0008; Tue, 8 Apr 2025 05:09:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4C94E6B000A; Tue, 8 Apr 2025 05:09:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 2F3FC6B0007 for ; Tue, 8 Apr 2025 05:09:11 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 6CE1E8094E for ; Tue, 8 Apr 2025 09:09:12 +0000 (UTC) X-FDA: 83310302544.30.4CEE2A2 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by imf01.hostedemail.com (Postfix) with ESMTP id 82E2C4000D for ; Tue, 8 Apr 2025 09:09:09 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=none; spf=pass (imf01.hostedemail.com: domain of mawupeng1@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=mawupeng1@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744103351; 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:content-transfer-encoding:in-reply-to: references; bh=CkdW/a2Hvmrqjfcssl8Faz1pj9UbEewMEk2GRrnC/A8=; b=sXPZuWidghHpC0JqhtOdNdbHYuOtgGh9L8u3b4PKYRfJNGa9BDw+GqZaiA6JP+EeoCnZvQ K+tbJ/Nce9a29GpbO5XIMzNS+t2zZ4UlWsRlDceJUD1FOupYk+GRH+4AK1Xyzx3TaPNT1S aKgT1umwbrgMyEBy7oQVolAuA2T81R8= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744103351; a=rsa-sha256; cv=none; b=4Fw+bHZ1QYt8i3Zd8ni2AiNGHTc60jdpuztZAUCLZWLmQ1bkKFZ6PZMAdfFM9U+CG08jDB 6LyQHsMQZpfhSu7MFVm30sSzfPZlzoCML16so+9RBhnWaHogSGC9JjvJSZa6p10UowYKXQ RXXPh7FGK9aDEgGh8g6dllxRm4XVHY4= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=none; spf=pass (imf01.hostedemail.com: domain of mawupeng1@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=mawupeng1@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com Received: from mail.maildlp.com (unknown [172.19.162.254]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4ZX0XG56XlzvWt6; Tue, 8 Apr 2025 17:05:02 +0800 (CST) Received: from kwepemg100017.china.huawei.com (unknown [7.202.181.58]) by mail.maildlp.com (Postfix) with ESMTPS id 385AE180104; Tue, 8 Apr 2025 17:09:05 +0800 (CST) Received: from huawei.com (10.175.124.71) by kwepemg100017.china.huawei.com (7.202.181.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Tue, 8 Apr 2025 17:09:03 +0800 From: Wupeng Ma To: , , , , CC: , , , , , , , , , Wupeng Ma Subject: [PATCH] arm64: dax: add devmap check for pmd_trans_huge Date: Tue, 8 Apr 2025 16:59:14 +0800 Message-ID: <20250408085914.1946183-1-mawupeng1@huawei.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Originating-IP: [10.175.124.71] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemg100017.china.huawei.com (7.202.181.58) X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 82E2C4000D X-Stat-Signature: a9nza5xuxfubbke8bip6txf3wuh85qpt X-HE-Tag: 1744103349-199526 X-HE-Meta: U2FsdGVkX18dDAcd9C8Cj0yMCL1e0FQzHFRLJo0R2jJkutys1YHqJ8IQNc444Bn6UjPgCfe+U3D2ETwKZkr6HIm1mCldhe9kceSDnpf1yOIfc6BYZgK0KUA+kiPfT+WcI/fGEbaQHYuL1OMbQmQQr+UyTiNWwk8AeKLvCXOJaCtEDBY62zmlbGbHNfj3r7skf8ifYMMTdwOKJeiRHqwJX3VVdzGHfdiuG1AcuApw/xYyMvlLxzZ5DdVxmD/45wlAhdVc/9gKkgtkWsvblfflnRsSuIBL3qlmGpbscMpKDyMGEeR3wn97Np5JbqlMlUNkogIoDWwawKj/w1er5zhPlOXtuNUKSxoHG7tGSzQEbi0X0nooWkB13lZmOewFL7n0sJ3fZenqDRebtRaQUO7RHH5QyZLgCZDInwvr+Hy9knXjT165yiuduCrF/DHegbTz8zVyjtPfcx/T76rK/22W6TjNw/CeAT9cW4q///2mTiVuynL+lJNnKKFPfIT6dr2+T2U1Cb65jxaesFj16EbnijQNXxWHj1+4fSUlos0ri7RIFNsEbG0osB/1UCjm8oFj+5yFIhIiXvN1OcDozJ8V446XC12OZYUnU/prHHEFHViwyI1vFV4pYVoNiIDpgZjIIeDNAwbbuyLv82z2PXpJ0eQWfyFbLe/HxugDrpHt85k2iAveIEnaeN7CeDc6HMG/qwFX/u2rXVBLEoc51AM1zrhYO4WwkwBod7D4xw4MVKG46RpJ+N4Ll2fB9ucEQrIJH4QkgIjvyL6qiVBUGpdZ45BmACfIu4cOIiY6NCdk40a0dRCLL32hYo7qhaFJRGl/I46OQzl8ednaQu6wzZwxsSn/pAuIbH03MO3ef6ZA9kKr3JjFO7DoapdarRe92sBVm5e2fE+nrW8= 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: During our test in ext4 dax linux-v5.10 on arm64. A BUG_ON is trigger in follow_invalidate_pte as follow since this pmd is seem as pmd_trans_huge. However this page is really a dax-pmds rather than a pmd trans huge. Call trace is shown as follow: ------------[ cut here ]------------ kernel BUG at mm/memory.c:5185! CPU: 0 PID: 150 Comm: kworker/u8:10 Not tainted 5.10.0-01678-g1e62aad66bbc-dirty #36 pc : follow_invalidate_pte+0xdc/0x5e0 lr : follow_invalidate_pte+0xc4/0x5e0 sp : ffffa00012997110 Call trace: follow_invalidate_pte+0xdc/0x5e0 dax_entry_mkclean+0x250/0x870 dax_writeback_one+0xac/0x380 dax_writeback_mapping_range+0x22c/0x704 ext4_dax_writepages+0x234/0x6e4 do_writepages+0xc8/0x1c0 __writeback_single_inode+0xb8/0x560 writeback_sb_inodes+0x344/0x7a0 wb_writeback+0x1f8/0x6b0 wb_do_writeback+0x194/0x3cc wb_workfn+0x14c/0x590 process_one_work+0x470/0xa30 worker_thread+0xac/0x510 kthread+0x1e0/0x220 ret_from_fork+0x10/0x18 ---[ end trace 0f479050bd4b1818 ]--- Kernel panic - not syncing: Oops - BUG: Fatal exception ---[ end Kernel panic - not syncing: Oops - BUG: Fatal exception ]--- Commit 5c7fb56e5e3f ("mm, dax: dax-pmd vs thp-pmd vs hugetlbfs-pmd") and commit 36b78402d97a ("powerpc/hash64/devmap: Use H_PAGE_THP_HUGE when setting up huge devmap PTE entries") already check pmd_devmap during checking pmd_trans_huge. Since pmd_devmap() is used to distinguish dax-pmds, add the same check for arm64 to fix this problem. Add PTE_DEVMAP in pte_modify as commit 4628a64591e6 ("mm: Preserve _PAGE_DEVMAP across mprotect() calls") does to avoid the same issue in mprotect. Fixes: 73b20c84d42d ("arm64: mm: implement pte_devmap support") Signed-off-by: Wupeng Ma --- arch/arm64/include/asm/pgtable.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index d3b538be1500b..b9a618127c01b 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -740,7 +740,7 @@ static inline int pmd_trans_huge(pmd_t pmd) * as a table, so force the valid bit for the comparison. */ return pmd_val(pmd) && pmd_present(pmd) && - !pmd_table(__pmd(pmd_val(pmd) | PTE_VALID)); + !pmd_table(__pmd(pmd_val(pmd) | PTE_VALID)) && !pmd_devmap(pmd); } #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ @@ -1186,7 +1186,8 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) */ const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY | PTE_PRESENT_INVALID | PTE_VALID | PTE_WRITE | - PTE_GP | PTE_ATTRINDX_MASK | PTE_PO_IDX_MASK; + PTE_GP | PTE_ATTRINDX_MASK | PTE_PO_IDX_MASK | + PTE_DEVMAP; /* preserve the hardware dirty information */ if (pte_hw_dirty(pte))