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 4BCB2C46CD2 for ; Tue, 30 Jan 2024 08:13:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D4A8E6B0096; Tue, 30 Jan 2024 03:13:47 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id CFA8D6B009D; Tue, 30 Jan 2024 03:13:47 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BC2076B00A2; Tue, 30 Jan 2024 03:13:47 -0500 (EST) 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 ABDA26B0096 for ; Tue, 30 Jan 2024 03:13:47 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 532F61C0EFF for ; Tue, 30 Jan 2024 08:13:47 +0000 (UTC) X-FDA: 81735263694.09.FA05292 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf09.hostedemail.com (Postfix) with ESMTP id 81C3C14001A for ; Tue, 30 Jan 2024 08:13:45 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=none; spf=pass (imf09.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706602425; 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:in-reply-to:references:references; bh=QtBi7vEd/nlpkBAGI5bnbYqJ4DbRRE0xd4pbx55MsQU=; b=A00GjTId0VhNVui9aEBwXdwDmEiVsdalJdTgWkaXAozX0gL2BpVMiqsQHbjv/+R/6Z14oX WCG6VBr+L6Zrs10JxhXOrkmbNdrQ5Hwdt6eIKA5SAWiukZW/26hRrgMCuaFYynNFVLOIYG Mue/Sz5FeE3NGiSMGycAW0PWIV4GQ+8= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=none; spf=pass (imf09.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706602425; a=rsa-sha256; cv=none; b=pFN8IcesgV3Ny9BWMbawLPcC1SxwEMfqiMtxRympggPJqtKV6HUyqyfNU62WDLuUKjA1ZF OyGvG0NCSd1yMmsJxnzedFDc6oHaNNRS+Gyql/V1oMDydiZW6Bb4M/VlhLaBHgFjWpPvOK dsk6l4s7YC/5kCPqpyUgPCCr5eWju7s= 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 02A1DDA7; Tue, 30 Jan 2024 00:14:28 -0800 (PST) Received: from [10.57.79.54] (unknown [10.57.79.54]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2A6013F738; Tue, 30 Jan 2024 00:13:39 -0800 (PST) Message-ID: <40e87333-4da9-4497-a117-9885986e376a@arm.com> Date: Tue, 30 Jan 2024 08:13:38 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v1 1/9] mm/memory: factor out zapping of present pte into zap_present_pte() Content-Language: en-GB To: David Hildenbrand , linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, Andrew Morton , Matthew Wilcox , Catalin Marinas , Will Deacon , "Aneesh Kumar K.V" , Nick Piggin , Peter Zijlstra , Michael Ellerman , Christophe Leroy , "Naveen N. Rao" , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , Arnd Bergmann , linux-arch@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org References: <20240129143221.263763-1-david@redhat.com> <20240129143221.263763-2-david@redhat.com> From: Ryan Roberts In-Reply-To: <20240129143221.263763-2-david@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 81C3C14001A X-Rspam-User: X-Stat-Signature: xbe3dama6onus1j9txhkw1twj8zmcpm3 X-Rspamd-Server: rspam01 X-HE-Tag: 1706602425-929674 X-HE-Meta: U2FsdGVkX19F3V9bXvuknh5PbWd41h+privGkbKqeh3OqNEfSfC43Sy7zEk0dHDMKbjytZIpXPPrtM5LtyDjmy2cFjlE9jAi/RtwgCbXWg32llWBj9jr1xAVS/V9POSOtTgILAU6CPVNH6yfqVSu6cgsUvnpQdKmqvCKZPGCW8UsyTqMS59HiE8FN5gktP1CIC1SI8DjjiNdwgUiJAZhlZfwtXcnk5o9h5K2ALT0LLxtXVV1vpB9br7Dyove51JjKPUfme1oSyIcLIy80RkMsn4LReOuZ5KRHHFLfyk/DkD1Pbg7Dowf0552TBI3RJ0A0duQ9x+xWtQE4lS+wdyhXjdmxQR3JUoecMQoj1EaJjIuydDU1ENDI7di0JU/U5FoB6rzBQgSev5yAayAdtsiJRdrosDZLbAK5RUKGYbCw9eQnpO5lUfdzGJDgwk4nChWWw83Uq7O6Zwn09VVsJ3es9RNafVLf2CZAucqqHrrra82G+AY9JkoXqc6qrvvM84KklLXwK53ivDmPcnZdASNBCxxXEtp2Qx7h8aaeocSRWyd9u9gDbZ8HMZfiyQKTylR/ogkBkccOnJf1+nHu06Ii1PrCPkAYYTlgfpjMIDypF8VYoBWuYslJxPVdSJFP648YUOf/2Yf6ZaugGZkchR8VswuPvdyZhMIqlVxUuppyGo49n/bu5zxRUqTBOS/duBawG6l2ynGxvCvEAVUUrBL8PWhxj63qTd5ShiJ57MLhuHq8EC60YU96OuGbNuYhbJankwxlZQy1KLnM+lCNVtIxkrXLewBEB1lMp8LC7hI/IUb58ccuvzswNfy3TTgsAY8IsJNBgQMsldLOxIvbpF1cB4dZ3U2/FPDXBwugDJKiKL6R3CciFUIqFpC628kcySg0lXKEtR4vfrMygCTtGUqeG02hFUVtGb5BbaBSlwa9GGc+Qga5tkmnalKk0ZnX8HHe55/d+pSDHeOTRFWZL/ uP1Hy+fh Enox6VA5mHBF0HAZo5Fz43N7o5bnv4sqWfXhkyD2pjpzS3WgIMuGh/Cevph5LksA+N1yyUiTTDf3pRypfYjt6+mq8A+bD0lDzMQHxskcXqJowodFQ3kfNIcdBwy60zb/msiCF3sXca73/r6BH+C0pjkSH+39EvaZnWSisRDW90dkUOELqkRYi/tXOWlugqGoz5q7m+Cnwcl1QkuWax5nIkAzjaQ== 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: On 29/01/2024 14:32, David Hildenbrand wrote: > Let's prepare for further changes by factoring out processing of present > PTEs. > > Signed-off-by: David Hildenbrand > --- > mm/memory.c | 92 ++++++++++++++++++++++++++++++----------------------- > 1 file changed, 52 insertions(+), 40 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index b05fd28dbce1..50a6c79c78fc 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -1532,13 +1532,61 @@ zap_install_uffd_wp_if_needed(struct vm_area_struct *vma, > pte_install_uffd_wp_if_needed(vma, addr, pte, pteval); > } > > +static inline void zap_present_pte(struct mmu_gather *tlb, > + struct vm_area_struct *vma, pte_t *pte, pte_t ptent, > + unsigned long addr, struct zap_details *details, > + int *rss, bool *force_flush, bool *force_break) > +{ > + struct mm_struct *mm = tlb->mm; > + bool delay_rmap = false; > + struct folio *folio; You need to init this to NULL otherwise its a random value when calling should_zap_folio() if vm_normal_page() returns NULL. > + struct page *page; > + > + page = vm_normal_page(vma, addr, ptent); > + if (page) > + folio = page_folio(page); > + > + if (unlikely(!should_zap_folio(details, folio))) > + return; > + ptent = ptep_get_and_clear_full(mm, addr, pte, tlb->fullmm); > + arch_check_zapped_pte(vma, ptent); > + tlb_remove_tlb_entry(tlb, pte, addr); > + zap_install_uffd_wp_if_needed(vma, addr, pte, details, ptent); > + if (unlikely(!page)) { > + ksm_might_unmap_zero_page(mm, ptent); > + return; > + } > + > + if (!folio_test_anon(folio)) { > + if (pte_dirty(ptent)) { > + folio_mark_dirty(folio); > + if (tlb_delay_rmap(tlb)) { > + delay_rmap = true; > + *force_flush = true; > + } > + } > + if (pte_young(ptent) && likely(vma_has_recency(vma))) > + folio_mark_accessed(folio); > + } > + rss[mm_counter(folio)]--; > + if (!delay_rmap) { > + folio_remove_rmap_pte(folio, page, vma); > + if (unlikely(page_mapcount(page) < 0)) > + print_bad_pte(vma, addr, ptent, page); > + } > + if (unlikely(__tlb_remove_page(tlb, page, delay_rmap))) { > + *force_flush = true; > + *force_break = true; > + } > +} > + > static unsigned long zap_pte_range(struct mmu_gather *tlb, > struct vm_area_struct *vma, pmd_t *pmd, > unsigned long addr, unsigned long end, > struct zap_details *details) > { > + bool force_flush = false, force_break = false; > struct mm_struct *mm = tlb->mm; > - int force_flush = 0; > int rss[NR_MM_COUNTERS]; > spinlock_t *ptl; > pte_t *start_pte; > @@ -1565,45 +1613,9 @@ static unsigned long zap_pte_range(struct mmu_gather *tlb, > break; > > if (pte_present(ptent)) { > - unsigned int delay_rmap; > - > - page = vm_normal_page(vma, addr, ptent); > - if (page) > - folio = page_folio(page); > - > - if (unlikely(!should_zap_folio(details, folio))) > - continue; > - ptent = ptep_get_and_clear_full(mm, addr, pte, > - tlb->fullmm); > - arch_check_zapped_pte(vma, ptent); > - tlb_remove_tlb_entry(tlb, pte, addr); > - zap_install_uffd_wp_if_needed(vma, addr, pte, details, > - ptent); > - if (unlikely(!page)) { > - ksm_might_unmap_zero_page(mm, ptent); > - continue; > - } > - > - delay_rmap = 0; > - if (!folio_test_anon(folio)) { > - if (pte_dirty(ptent)) { > - folio_mark_dirty(folio); > - if (tlb_delay_rmap(tlb)) { > - delay_rmap = 1; > - force_flush = 1; > - } > - } > - if (pte_young(ptent) && likely(vma_has_recency(vma))) > - folio_mark_accessed(folio); > - } > - rss[mm_counter(folio)]--; > - if (!delay_rmap) { > - folio_remove_rmap_pte(folio, page, vma); > - if (unlikely(page_mapcount(page) < 0)) > - print_bad_pte(vma, addr, ptent, page); > - } > - if (unlikely(__tlb_remove_page(tlb, page, delay_rmap))) { > - force_flush = 1; > + zap_present_pte(tlb, vma, pte, ptent, addr, details, > + rss, &force_flush, &force_break); > + if (unlikely(force_break)) { > addr += PAGE_SIZE; > break; > }