From patchwork Wed Aug 21 08:18:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qi Zheng X-Patchwork-Id: 13770999 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 56317C52D6F for ; Wed, 21 Aug 2024 08:20:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=PN5+in6xnBXgxe2LIsQDc93ppSQBPQmBv4bxyw8DmlQ=; b=VTx4X7CIXg+sY4aetkE6PnD61i qZL4GTDbknaLJFvK2wWkAh6J/wo7zu8nY+qt8iiW2Q3RFyihDiUXO1enu1uOV9bHZ42rLrGwz7PVh x5s4zu00vgjUcb0ExZA+XZNeJz/GyXLei+DzW6er1pIdsLiisffhsCQUBIdAWH+Wufy1ObNjTAMET bW2clL0kFGusjAZ9H6sp5rzo+5dsHR/B/vn6DSWUBAABY7QvCc1SrbrPL7BN01JCEoh+XjTzZBKJK a43VRmf+3zpLZh+5jsfAYW15K9BU3d+Sqy08fm5xT0wNobYwCU1af3AQfxqxJ5JP2geyfVZvKLK8I XQQGqm3g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sggZv-0000000825J-0fU0; Wed, 21 Aug 2024 08:20:27 +0000 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sggZ2-000000081iJ-0AVX for linux-arm-kernel@lists.infradead.org; Wed, 21 Aug 2024 08:19:34 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2023dd9b86aso25742595ad.1 for ; Wed, 21 Aug 2024 01:19:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1724228366; x=1724833166; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=PN5+in6xnBXgxe2LIsQDc93ppSQBPQmBv4bxyw8DmlQ=; b=knqet6Fq/giFTvMeO3k7Amfx2JMXABhmjGEUVG1x/N37J8Lu8MJfMgOvHolXxGxQdV DfmfmlUXsK2ZU1ECbj50CiPGGTCmRtjYDhSPKpj6+lCyiX/dSMHgueYOC6y9RDk+aJR0 odAtXxP7PBoQNpq9JjaffSaEEM4yAYLACqrejmKBeIYjnlHW00XKFIvVLqmSiKrXf1di 5KKvOVuxmNn+HIllMcO9FheZnBTlofyhWvctpGStEd7gXrwJguN6PdRbFF8vXTSVWm16 soQ0Q4mH0bMDDBl/UKxHUNye3XYm9gcq+8cdxOdbIDxQfwyKJ6up3DiNb1vaoxQyD5Pm fXCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724228366; x=1724833166; 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=PN5+in6xnBXgxe2LIsQDc93ppSQBPQmBv4bxyw8DmlQ=; b=NNxjVklklYmgCwL/voSjs1e4ypk9LfN683YCGFysHmlpil8/KMvAsFN+fJ+ANs7CnS i8ovYQJsnE41ySoJ2EvjXLeDR2XGy6ymAjhwDSiY+zB4QbtKICBen/JW/AaT0EQcAKrq JC2eWAGNR6O6dK+82xRBVkzgzGBf9FGGRdy8fJuq4u57SwuvMnY2mlEyZVbfPdB48wFs whcMoQ4wrB7Q6Nmn0/Fw3eBsJzKOK46XTgzL3ljAQFsTG+XE269RO2BVK8Gy6NkFkyLS SkwJTVdDIuvDMzJBV9sRLYJzri41Vrlg2ZCcsQEIvkpA0+DtO3+GCs40UnjWerVZqtRA qSIg== X-Forwarded-Encrypted: i=1; AJvYcCUenhTlskm7bXiQY+5IwuPfj0HYMNxg4ViK1EUNJl/hObOgbdFRZvqOl9Cjg518JhHB81/qVg8gS3kQZQcwH2ig@lists.infradead.org X-Gm-Message-State: AOJu0YwTMUu6Fz7QfIhlHpnDnMbvYbgHnt+2NB0yr6XZKgH/G0+AkahY 5EzhskkFVN9+pprOoVhhcE+b+6xxdbf93pHjyxqowYEAv3rmd2MsHEbiKvW/OKc= X-Google-Smtp-Source: AGHT+IHHUoYOI/2K4+IHeJgFEXGAQNHZYM2BB7ldoGeWEQ/b7YbP3WstRyHOcikTGkk/QMWJJeDGRQ== X-Received: by 2002:a17:90a:c381:b0:2c9:69cc:3a6f with SMTP id 98e67ed59e1d1-2d5e9dcab76mr1637566a91.31.1724228366127; Wed, 21 Aug 2024 01:19:26 -0700 (PDT) Received: from C02DW0BEMD6R.bytedance.net ([203.208.167.150]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d5eb9049b0sm1091453a91.17.2024.08.21.01.19.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Aug 2024 01:19:25 -0700 (PDT) From: Qi Zheng To: david@redhat.com, hughd@google.com, willy@infradead.org, muchun.song@linux.dev, vbabka@kernel.org, akpm@linux-foundation.org, rppt@kernel.org, vishal.moola@gmail.com, peterx@redhat.com, ryan.roberts@arm.com Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, Qi Zheng Subject: [PATCH 00/14] introduce pte_offset_map_{readonly|maywrite}_nolock() Date: Wed, 21 Aug 2024 16:18:43 +0800 Message-Id: X-Mailer: git-send-email 2.24.3 (Apple Git-128) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240821_011932_438286_885EA063 X-CRM114-Status: GOOD ( 16.13 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi all, As proposed by David Hildenbrand [1], this series introduces the following two new helper functions to replace pte_offset_map_nolock(). 1. pte_offset_map_readonly_nolock() 2. pte_offset_map_maywrite_nolock() As the name suggests, pte_offset_map_readonly_nolock() is used for read-only case. In this case, only read-only operations will be performed on PTE page after the PTL is held. The RCU lock in pte_offset_map_nolock() will ensure that the PTE page will not be freed, and there is no need to worry about whether the pmd entry is modified. Therefore pte_offset_map_readonly_nolock() is just a renamed version of pte_offset_map_nolock(). pte_offset_map_maywrite_nolock() is used for may-write case. In this case, the pte or pmd entry may be modified after the PTL is held, so we need to ensure that the pmd entry has not been modified concurrently. So in addition to the name change, it also outputs the pmdval when successful. This can help the caller recheck *pmd once the PTL is taken. In some cases we can pass NULL to pmdvalp: either the mmap_lock for write, or pte_same() check on contents, is also enough to ensure that the pmd entry is stable. This series will convert all pte_offset_map_nolock() into the above two helper functions one by one, and finally completely delete it. This also a preparation for reclaiming the empty user PTE page table pages. This series is based on the next-20240820. Comments and suggestions are welcome! Thanks, Qi [1]. https://lore.kernel.org/lkml/f79bbfc9-bb4c-4da4-9902-2e73817dd135@redhat.com/ Qi Zheng (14): mm: pgtable: introduce pte_offset_map_{readonly|maywrite}_nolock() arm: adjust_pte() use pte_offset_map_maywrite_nolock() powerpc: assert_pte_locked() use pte_offset_map_readonly_nolock() mm: filemap: filemap_fault_recheck_pte_none() use pte_offset_map_readonly_nolock() mm: khugepaged: __collapse_huge_page_swapin() use pte_offset_map_readonly_nolock() mm: handle_pte_fault() use pte_offset_map_maywrite_nolock() mm: khugepaged: collapse_pte_mapped_thp() use pte_offset_map_maywrite_nolock() mm: copy_pte_range() use pte_offset_map_maywrite_nolock() mm: mremap: move_ptes() use pte_offset_map_maywrite_nolock() mm: page_vma_mapped_walk: map_pte() use pte_offset_map_maywrite_nolock() mm: userfaultfd: move_pages_pte() use pte_offset_map_maywrite_nolock() mm: multi-gen LRU: walk_pte_range() use pte_offset_map_maywrite_nolock() mm: pgtable: remove pte_offset_map_nolock() mm: khugepaged: retract_page_tables() use pte_offset_map_maywrite_nolock() Documentation/mm/split_page_table_lock.rst | 6 +++- arch/arm/mm/fault-armv.c | 9 ++++- arch/powerpc/mm/pgtable.c | 2 +- include/linux/mm.h | 7 ++-- mm/filemap.c | 4 +-- mm/khugepaged.c | 39 ++++++++++++++++++-- mm/memory.c | 13 +++++-- mm/mremap.c | 7 +++- mm/page_vma_mapped.c | 24 ++++++++++--- mm/pgtable-generic.c | 42 ++++++++++++++++------ mm/userfaultfd.c | 12 +++++-- mm/vmscan.c | 9 ++++- 12 files changed, 143 insertions(+), 31 deletions(-)