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 AA175C83F1A for ; Fri, 18 Jul 2025 09:03:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 49A7F6B00A8; Fri, 18 Jul 2025 05:03:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 44AF36B00AA; Fri, 18 Jul 2025 05:03:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 33A1A6B00AB; Fri, 18 Jul 2025 05:03:46 -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 1E9466B00A8 for ; Fri, 18 Jul 2025 05:03:46 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id B0EEF12E1EB for ; Fri, 18 Jul 2025 09:03:45 +0000 (UTC) X-FDA: 83676797610.18.608BF08 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf16.hostedemail.com (Postfix) with ESMTP id 15812180011 for ; Fri, 18 Jul 2025 09:03:43 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf16.hostedemail.com: domain of dev.jain@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=dev.jain@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752829424; 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:in-reply-to:references:references; bh=XTswRIxHmGHQeVnB/f9odmxm7RsTWTBKCzGSB4iSFqo=; b=kbowm6IcaNCDlSXUTHnB92wXNrUvjVGn7EM/RneeJiaTYhVADydRCM/m7GqToNqtqiZn2O 07L9/Nk794hS/91O5z0o6mREGaCVsOWOnmQpBla3RINWONdEIcjP2steMpKlTZUOPaIDKm Fa62Dw32sfvctQa7AZbI945tPvO2sQU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752829424; a=rsa-sha256; cv=none; b=AfYIEuTyJcJrDipFVjZy4kuSITNjUiJV1kGRr/6FLw7iJ1lqetsCaQkGiIvBuYEx+Q6GQH RFa4MjO8inY91rVYrK/KVRrsyJc6Yew6Ts7e+h5W/hAFuGvZwWgyyjd1/xdmwB7MYf1Th0 yqaz1ZN1zHeiOBmyFpt+urkxD4sREkE= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf16.hostedemail.com: domain of dev.jain@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=dev.jain@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 09EBF1A32; Fri, 18 Jul 2025 02:03:36 -0700 (PDT) Received: from MacBook-Pro.blr.arm.com (unknown [10.164.18.51]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 53D8E3F66E; Fri, 18 Jul 2025 02:03:35 -0700 (PDT) From: Dev Jain To: akpm@linux-foundation.org Cc: ryan.roberts@arm.com, david@redhat.com, willy@infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, catalin.marinas@arm.com, will@kernel.org, Liam.Howlett@oracle.com, lorenzo.stoakes@oracle.com, vbabka@suse.cz, jannh@google.com, anshuman.khandual@arm.com, peterx@redhat.com, joey.gouly@arm.com, ioworker0@gmail.com, baohua@kernel.org, kevin.brodsky@arm.com, quic_zhenhuah@quicinc.com, christophe.leroy@csgroup.eu, yangyicong@hisilicon.com, linux-arm-kernel@lists.infradead.org, hughd@google.com, yang@os.amperecomputing.com, ziy@nvidia.com, Dev Jain Subject: [PATCH v5 5/7] mm: Split can_change_pte_writable() into private and shared parts Date: Fri, 18 Jul 2025 14:32:42 +0530 Message-Id: <20250718090244.21092-6-dev.jain@arm.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250718090244.21092-1-dev.jain@arm.com> References: <20250718090244.21092-1-dev.jain@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 15812180011 X-Stat-Signature: o49ksbopgzck583jbthb7n5swdtnmoyc X-Rspam-User: X-Rspamd-Server: rspam11 X-HE-Tag: 1752829423-720520 X-HE-Meta: U2FsdGVkX1/jzODgG1oOTvPuD81dnwexMglTBCjePk5rUOnNZvl7DDgwKWex8/qzTDZCJyvmkrRjVTAwdt1nTOo5QicuH5EFXG9XLTtCTrrv3QPmZnVxaVz1eld7sTEEu6fRY3O2szW3nar/2UJDDAB7JNjdncYdAAMd7xaAwIyOHLfr+MEnIdO9k4Ymt+HQPt4O3+1ASJpifClH6vYMIqtk6Hi+Mb1A6KS1AoQYNvwgYEk0G4fRHktUJK3yi5+V+aNqRibGF28K4YxvVvEFNkTFkrsAFEGnrXnE4ZG8qeZswjNM7mY+UVCsuqDvAvneksXF8SGnqVD1M7ZHzOkl/VFvWuzG/8giKCp1DSv4gD6SYGq3/aiRIUM5JqdQqJ0CTFCCVaZZOGV6x0oQH8Egte+SD8vu0ByuwWqsOT1tlRCVl+m2Um2B1+7rGxxob+Yranyk+jekY7ibyA52kuNF0E+jg6eM/eY1yq6Ry+CHYnAvY6AtLphUhfrb0B0+2nLM3s8LMvrxfyPmWexiV9GZRPkE9Yc4RzwcU7Feo93YQr9ONla9PGPk4Nz3xiA1BTAIr2O7h2CpthjQL44+T6tCRSSwlYojkusytR6FMDTZskiW5GgOG0RdjnKOaAq/DcmFpzZUBJ6ZNHKRxxEUiKMAP9PqZJFdWj+fHbffD3XxhJLm0UV81dd5mP6fbmfeBumqKHBjWuhv3DboHKps3J//v1igRfyTMWT4vjlwtTCE4bHPQK73Qap8VlNmlovOh/mn0gP9rSw1yoiYEo7+rtmMzZQaGCM3mqdzRBxBKUVnvoWPT3CkQN5mGZq/ghUvbGf64gDgWxtjynXVeLTqfnEOY6b4VjqPtxV5GwOjD1xgUaDHARdfY/1PPq4tdVHxHe1aYIuri4AHrOcke8jR+TO4l10L7W2I5XzbttaKnHKzGjR/a11BWkSNrS9YojEK56lSpW65d9xVOKkaEKjqAzE 6O9JR5Mj yc9NgsvvVzyjdrqZl4ZHoEj6VxptMf/griM1Mzdn1GR01EDYImcXasMS8K7RRwQ9eH83MPH+RHRE8ki/WY0euEDu5juLCWdBjOBp8OB+Qy+k/s7BONeCbe5rHaXoTxg02WCkcG3G2mrqduRulLB4alGAmxqdR/Zaek4eTrnX4pgEmb0oqyQrXuOXgeQ== 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: In preparation for patch 6 and modularizing the code in general, split can_change_pte_writable() into private and shared VMA parts. No functional change intended. Suggested-by: Lorenzo Stoakes Signed-off-by: Dev Jain --- mm/mprotect.c | 50 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/mm/mprotect.c b/mm/mprotect.c index 4977f198168e..a1c7d8a4648d 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -40,11 +40,8 @@ #include "internal.h" -bool can_change_pte_writable(struct vm_area_struct *vma, unsigned long addr, - pte_t pte) +static bool maybe_change_pte_writable(struct vm_area_struct *vma, pte_t pte) { - struct page *page; - if (WARN_ON_ONCE(!(vma->vm_flags & VM_WRITE))) return false; @@ -60,16 +57,32 @@ bool can_change_pte_writable(struct vm_area_struct *vma, unsigned long addr, if (userfaultfd_pte_wp(vma, pte)) return false; - if (!(vma->vm_flags & VM_SHARED)) { - /* - * Writable MAP_PRIVATE mapping: We can only special-case on - * exclusive anonymous pages, because we know that our - * write-fault handler similarly would map them writable without - * any additional checks while holding the PT lock. - */ - page = vm_normal_page(vma, addr, pte); - return page && PageAnon(page) && PageAnonExclusive(page); - } + return true; +} + +static bool can_change_private_pte_writable(struct vm_area_struct *vma, + unsigned long addr, pte_t pte) +{ + struct page *page; + + if (!maybe_change_pte_writable(vma, pte)) + return false; + + /* + * Writable MAP_PRIVATE mapping: We can only special-case on + * exclusive anonymous pages, because we know that our + * write-fault handler similarly would map them writable without + * any additional checks while holding the PT lock. + */ + page = vm_normal_page(vma, addr, pte); + return page && PageAnon(page) && PageAnonExclusive(page); +} + +static bool can_change_shared_pte_writable(struct vm_area_struct *vma, + pte_t pte) +{ + if (!maybe_change_pte_writable(vma, pte)) + return false; VM_WARN_ON_ONCE(is_zero_pfn(pte_pfn(pte)) && pte_dirty(pte)); @@ -83,6 +96,15 @@ bool can_change_pte_writable(struct vm_area_struct *vma, unsigned long addr, return pte_dirty(pte); } +bool can_change_pte_writable(struct vm_area_struct *vma, unsigned long addr, + pte_t pte) +{ + if (!(vma->vm_flags & VM_SHARED)) + return can_change_private_pte_writable(vma, addr, pte); + + return can_change_shared_pte_writable(vma, pte); +} + static int mprotect_folio_pte_batch(struct folio *folio, pte_t *ptep, pte_t pte, int max_nr_ptes) { -- 2.30.2