From patchwork Wed Jul 3 21:29:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 13722796 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 0F214C31D97 for ; Wed, 3 Jul 2024 21:29:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 19F5E6B0089; Wed, 3 Jul 2024 17:29:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 14ED36B008A; Wed, 3 Jul 2024 17:29:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0172B6B008C; Wed, 3 Jul 2024 17:29:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id D7F516B0089 for ; Wed, 3 Jul 2024 17:29:28 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id D784C1407BD for ; Wed, 3 Jul 2024 21:29:27 +0000 (UTC) X-FDA: 82299732774.18.1A19B5E Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf23.hostedemail.com (Postfix) with ESMTP id 5B479140005 for ; Wed, 3 Jul 2024 21:29:24 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=MEP0iKH3; spf=pass (imf23.hostedemail.com: domain of peterx@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1720042141; 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:dkim-signature; bh=O2GbkT3IfNneZLzmTfXKMGxGoFvHWp+ovSbzv55/oNo=; b=P2maNcrmLx1lO08SBXGmZ3AsDARGWkMvZiUK87Sw9ISlQg3Kll6txsSfJhGGNsmGaZx50b CNDfgX9vGmxqnh9DnpzhvQSiBLcqLnjAb0WaAICQcUKIdLLz1QAltTwIKqNK9UalR2yB8G UuIDWWqMmj8sNMkQUsa/WHH95ePXAXw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1720042141; a=rsa-sha256; cv=none; b=L+YQugwnU45LR9679JYrJBGC6tAes5uDBxo4TdkbCwGK8/JpRlTsKFGHXx/JMJLmdRYxd0 w73/ExwmNbJ/nEdcXjgENxDnNU8XaPNKtlDkz0S+PYKuROos7MwqQVqrFgD9rCqSYDdevg GGmbaJXW3CG4BHhyEU5ihbiFu7AE6X8= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=MEP0iKH3; spf=pass (imf23.hostedemail.com: domain of peterx@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1720042163; h=from:from: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; bh=O2GbkT3IfNneZLzmTfXKMGxGoFvHWp+ovSbzv55/oNo=; b=MEP0iKH3tF7rvJUXOx3YRa8ENECrWngvPeJ1adS82wIGDIDFnKNXncb9DsyU8gipwz+BWP 9ChXv8kKRmHe6JtA59MAeiFQwBJ9T/ahEd9/BVq7wvq0ZCnGcC/hQcoLPOD7dkDVmBEUH/ pUuo4PE7v+iaUmV4lUfyvThyJCKnSVc= Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-453-SnArki1NM_Gf2oQhNGuV4Q-1; Wed, 03 Jul 2024 17:29:22 -0400 X-MC-Unique: SnArki1NM_Gf2oQhNGuV4Q-1 Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-48f3dfdb193so464094137.0 for ; Wed, 03 Jul 2024 14:29:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720042162; x=1720646962; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=O2GbkT3IfNneZLzmTfXKMGxGoFvHWp+ovSbzv55/oNo=; b=iTRb/CvpwYRndAtLf/e3y1lDM43Vg356ql4bsAVKR5Enu55XoRhuKjdc4agdPr73ve AVGUivzdFPr6lrhHQOEk8zqI2ACbbTLD+A4Gy9dB/9pMnLV8vsYKdbfdAzRg+gnW8GDQ WxhYbQCGqiDga8hkfouldFhs7/kw8lqWkXG5CTVTkAai9AMUHzgz5kvU/kXx1L65pn8o kXTrjA1rTATHcNX2o+k1t7KbrL5xCz3uH5J4fHxuJ4eQHQByJW/Tu/cML+yWGhIr4aDV HtPXpZLqop4oV07qvoDaJpybJ7dG9DlX3zqiv81j/aR9sM2nm9aFWkYZr0VmiEAKhhbh TEaw== X-Forwarded-Encrypted: i=1; AJvYcCUMgGUREuEvc2gp91evoqbtfY8Ic1WbCIm0WhMOp6ny+ukCAQ0+KmSv2cfcUwFnKktrrV+tEYP9auhv9e+B4hHMfdk= X-Gm-Message-State: AOJu0YxNOuxY0+tqBnVUAaD+EWKm0hDrNbuXsUC9BSwnMxX461wYZIGR QA+bDZKWoinblX3+LQ/nYw7wG/rnyE8c6wqgl+ontHo11xWAWJAq9qQRbXBCj4tOjDBm9lpnjzQ LKW1u+hDQLtJViuClAUGJk3EcbvBrAmrYt8nd1JgmI7rn/C3O X-Received: by 2002:a05:6122:221d:b0:4ec:ef42:a7a2 with SMTP id 71dfb90a1353d-4f2a56b62b8mr11877025e0c.1.1720042161747; Wed, 03 Jul 2024 14:29:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFVxFROGUHiFRpsdTx4NqsAs9vB+SYw6qbXBu8UHMAgFYonw5PPnwd/CcFF1S+TO8MfCwLRIA== X-Received: by 2002:a05:6122:221d:b0:4ec:ef42:a7a2 with SMTP id 71dfb90a1353d-4f2a56b62b8mr11876994e0c.1.1720042161205; Wed, 03 Jul 2024 14:29:21 -0700 (PDT) Received: from x1n.redhat.com (pool-99-254-121-117.cpe.net.cable.rogers.com. [99.254.121.117]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4465143eb1csm54337481cf.57.2024.07.03.14.29.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jul 2024 14:29:20 -0700 (PDT) From: Peter Xu To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Matthew Wilcox , Mel Gorman , Dave Jiang , linuxppc-dev@lists.ozlabs.org, Michael Ellerman , Rik van Riel , Vlastimil Babka , Nicholas Piggin , Christophe Leroy , Andrew Morton , Huang Ying , Oscar Salvador , "Aneesh Kumar K . V" , Thomas Gleixner , Dave Hansen , x86@kernel.org, Ingo Molnar , "Kirill A . Shutemov" , Dan Williams , Borislav Petkov , peterx@redhat.com, Hugh Dickins , Rick P Edgecombe Subject: [PATCH v2 0/8] mm/mprotect: Fix dax puds Date: Wed, 3 Jul 2024 17:29:10 -0400 Message-ID: <20240703212918.2417843-1-peterx@redhat.com> X-Mailer: git-send-email 2.45.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 5B479140005 X-Stat-Signature: 6hj3zcmwuasqy1ytq7mwbaugh5oh6px3 X-HE-Tag: 1720042164-224431 X-HE-Meta: U2FsdGVkX1+PRF6GbHtqeNguaraCVMGfsi9GNDGDKf0bmLW+F2YUJf0DwFo/omIxR0YcZBL0jsztLuguvBw9Cka0Vqs1yRKYeXG++dunDw+0sN+1rpXHCqWT1SehWaODK8T53nyZf3GWeHlyOf1fCqUOdvT4t+1pC+U8O74uB3DDBM3NHJtfPuQjEGO/iqLKBQHq//Lt0L+6q7r9g0zMzWTa1oYTO33HShGkEuaEjVdSNcjQMz+tlmkEkFJJeQetdhDVI281hARCUZBzcNp4RepzEF8iEQlGflP9y5yisxJCPZQjg7+TQDiTYQPTuQbgLTL3eSx0YZf/iGXNPE6fTy38OcVEx92zlQrhdzhQte9v9SSEzF63ONgeVErkD1Mwjd55lJtriaE+C/aA9+RnCfpjAGyj2J69fMIcYz0kcilFZCEq6X/8Qcvp8hIh2KR7ZOpCi67mPgDhyjhVhfFxNy9ZLlkr3+9p7rg1z6mLs2t05z4L7b+2xZUk6MozU5pimaqw3nfDVXOjNQaJpj+OAbGPO377zHJhQydRc8rhB8govRiHFD8mWRSRvLawc314Pqs9OQ78nVmK8Ih95cIIuwB0XiDVBgoVQLq6b22ZCqMW9xhjuGjBIGdxSnGwJ7rz2tJFhp93re0EkwWYM0m2ImGuZs+cGqpzZJLFOzX1QvhiobFN3C43E6wAtWKeetzaY/EFzaS7T/W1JlNg52x6FhL0qXWBXBVHDGpvMVyK0kKuSMbFJBuJLoeM/OESwHBO7jTIVKuOL3zphvfFOFu1IRWqURjSRgW//kM4VT8Qilh+EqVAEDGXuqWvPWVDFzVWiKL4mJ6SG0EpLD7g0hFv+nYiVFyMJmMHFGhTdHLt1AWiC00hw9zeA83AIihGqnCN/UAjxve+mQ3UGVpAIwzZoGl0NCmW522h3G+mRNRrzVG/jH8PMf1dIH/CZhh4c4j/RUFiVyTQlqagyY55KAl 8DXIAQ8e vaKo8AeC1s6FobtOnHQv4E4u/z0NfxYpajeWOFvsSHWLQvwP8SGxt9yXMD2e455A478B6U8G6uSxX8p8dt5Bfz8VFAatoPSJMydSWncmucA5w4R3epDkKH9SCee0XyyyVmBfBlXJ+m4q61jaEPo5y/0A5TR1PK1FBc0SFWMuR9EF4yWeU/2M6GvK19lb82hjOp5xLYBa24xKbq5VeCaYPnQ2MnyGLaNFqD+Fn7PDLGWyBbepyGYfTHq4X3CI/rdjzP7VxpjlzIrn6cG7pwQ8bddUvvlhoBjxI/lnM/C/CLul6B/kSlmr0WjyRnj41arFDMCQr549zsnDaJHPhg9EWSnj5FXiT5Qplu3EpjVBYFlNHNyPgbzCUaDlHBhsP39mOWCjAxt1LizguuFFXwerqDzJ1Iopdexm6L0cUVjFaDEvXyMjEWPn9yR9hIdm3zOBPQWh6 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: [Based on mm-unstable, commit 31334cf98dbd, July 2nd] v2: - Added tags - Fix wrong pmd helper used in powerpc - Added patch "mm/x86: arch_check_zapped_pud()" [Rick] - Do proper dirty bit shifts for shadow stack on puds [Dave] - Add missing page_table_check hooks in pudp_establish() [Dave] v1: https://lore.kernel.org/r/20240621142504.1940209-1-peterx@redhat.com Dax supports pud pages for a while, but mprotect on puds was missing since the start. This series tries to fix that by providing pud handling in mprotect(). The goal is to add more types of pud mappings like hugetlb or pfnmaps. This series paves way for it by fixing known pud entries. Considering nobody reported this until when I looked at those other types of pud mappings, I am thinking maybe it doesn't need to be a fix for stable and this may not need to be backported. I would guess whoever cares about mprotect() won't care 1G dax puds yet, vice versa. I hope fixing that in new kernels would be fine, but I'm open to suggestions. There're a few small things changed to teach mprotect work on PUDs. E.g. it will need to start with dropping NUMA_HUGE_PTE_UPDATES which may stop making sense when there can be more than one type of huge pte. OTOH, we'll also need to push the mmu notifiers from pmd to pud layers, which might need some attention but so far I think it's safe. For such details, please refer to each patch's commit message. The mprotect() pud process should be straightforward, as I kept it as simple as possible. There's no NUMA handled as dax simply doesn't support that. There's also no userfault involvements as file memory (even if work with userfault-wp async mode) will need to split a pud, so pud entry doesn't need to yet know userfault's existance (but hugetlb entries will; that's also for later). Tests ===== What I did test: - cross-build tests that I normally cover [1] - smoke tested on x86_64 the simplest program [2] on dev_dax 1G PUD mprotect() using QEMU's nvdimm emulations [3] and ndctl to create namespaces with proper alignments, which used to throw "bad pud" but now it'll run through all fine. I checked sigbus happens if with illegal access on protected puds. What I didn't test: - fsdax: I wanted to also give it a shot, but only until then I noticed it doesn't seem to be supported (according to dax_iomap_fault(), which will always fallback on PUD_ORDER). I did remember it was supported before, I could miss something important there.. please shoot if so. - userfault wp-async: I also wanted to test userfault-wp async be able to split huge puds (here it's simply a clear_pud.. though), but it won't work for devdax anyway due to not allowed to do smaller than 1G faults in this case. So skip too. - Power, as no hardware on hand. Thanks, [1] https://gitlab.com/peterx/lkb-harness/-/blob/main/config.json [2] https://github.com/xzpeter/clibs/blob/master/misc/dax.c [3] https://github.com/qemu/qemu/blob/master/docs/nvdimm.txt Peter Xu (8): mm/dax: Dump start address in fault handler mm/mprotect: Remove NUMA_HUGE_PTE_UPDATES mm/mprotect: Push mmu notifier to PUDs mm/powerpc: Add missing pud helpers mm/x86: Make pud_leaf() only cares about PSE bit mm/x86: arch_check_zapped_pud() mm/x86: Add missing pud helpers mm/mprotect: fix dax pud handlings arch/powerpc/include/asm/book3s/64/pgtable.h | 3 + arch/powerpc/mm/book3s64/pgtable.c | 20 ++++++ arch/x86/include/asm/pgtable.h | 68 +++++++++++++++--- arch/x86/mm/pgtable.c | 18 +++++ drivers/dax/device.c | 6 +- include/linux/huge_mm.h | 24 +++++++ include/linux/pgtable.h | 7 ++ include/linux/vm_event_item.h | 1 - mm/huge_memory.c | 56 ++++++++++++++- mm/mprotect.c | 74 ++++++++++++-------- mm/vmstat.c | 1 - 11 files changed, 233 insertions(+), 45 deletions(-)