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 8BDDAC636D3 for ; Mon, 6 Feb 2023 17:10:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1FD9F6B0073; Mon, 6 Feb 2023 12:10:28 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1ADB56B0074; Mon, 6 Feb 2023 12:10:28 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 075D46B0075; Mon, 6 Feb 2023 12:10:28 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id ECD8B6B0073 for ; Mon, 6 Feb 2023 12:10:27 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id BC5FA1A09CE for ; Mon, 6 Feb 2023 17:10:27 +0000 (UTC) X-FDA: 80437505694.22.E665777 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf14.hostedemail.com (Postfix) with ESMTP id B671510000E for ; Mon, 6 Feb 2023 17:10:25 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=FCQRircZ; spf=none (imf14.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1675703426; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=PjjsdhpHvVJOan16RYN7jW52UZmzWrJ2PTcBO+xq+n0=; b=M3ITCPxr6o4CmsW5rT7aQNuVjrUENa3hYi4bSlP5eeOCmhB7Exx9AoGzXL5cLdP4V1oKgW EXuPg8Xtvp9Rf/Qsbg8n+eilHNUVU86yDaDvNBARyupH4iH0lPjIinybaYWWeNLjeSTN+l cCbKN3SkoK6ddGgHLNEAfJxKU/wws8A= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=FCQRircZ; spf=none (imf14.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1675703426; a=rsa-sha256; cv=none; b=iQXyVQ4FLxTTpu9afFSvJ7amKXKuLLBgCsA3hhtT9ri3scGIrN688dYs90rTXmsAvHPa0o 8B91JvqfOdbKoR29JuxfUSrm9jEm67a1Gj1XNnKf2k2myx7yY36FuEE+y7h+nIsMLIvcpY fTg7pT1hrK8MxboVChKVOD5dzVtey6g= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=PjjsdhpHvVJOan16RYN7jW52UZmzWrJ2PTcBO+xq+n0=; b=FCQRircZPEIdBNDJh4Rx8dw3j9 iw3kgOuD+/hzZINxwENur71S+U9J0IsURsdqNabPn59hF4Z/NB7VTDp+9cR9yo9cwxfrBXeMl8+jg RtuZREwyl0VyqojmS+SuwKtU5bMBcpQY2er1K6vWwHiRDsadb+385bkBQkrmnOGWfWIyzm7FEqTEq toiYYkhrFTxZMqgfxU+zFWD193ks+v5/W/DUzDE0nmrJSPlhzoE3Wj9j5isqfd6DZA1KrocIIvIa8 0JL0xmXxBEC74gGDG9gTodTgYtoChLViMXKTzM3MATTm3wJzNTjSvM1kaLr5qjYzwlcq77fFTzkmZ gdYoeP6Q==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1pP50W-00Gw7B-7A; Mon, 06 Feb 2023 17:10:20 +0000 Date: Mon, 6 Feb 2023 17:10:20 +0000 From: Matthew Wilcox To: David Hildenbrand Cc: "Yin, Fengwei" , linux-mm@kvack.org, dave.hansen@intel.com, tim.c.chen@intel.com, ying.huang@intel.com Subject: Re: [RFC PATCH v4 3/4] mm: add do_set_pte_range() Message-ID: References: <20230206140639.538867-1-fengwei.yin@intel.com> <20230206140639.538867-4-fengwei.yin@intel.com> <7c8d3d2c-35e3-5be4-684b-4b991a0adb8e@redhat.com> <400c5fb6-11ae-7771-07e0-538ebe652b2a@redhat.com> <9131d33a-1640-e29e-1ad0-2fb69572bf28@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <9131d33a-1640-e29e-1ad0-2fb69572bf28@redhat.com> X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: j3wm81epoghi5codrdp1c5fskdhiires X-Rspamd-Queue-Id: B671510000E X-HE-Tag: 1675703425-110417 X-HE-Meta: U2FsdGVkX1/zuZmUpuqw+HtsXwzguq9xssCqubI77IIycwrNAAaz1M8BJnB+DvJ5OnyQoI0uip92wPnB2V5wN5YM7OYG+HoGM4uP8x6VGpuYDjfmyBCvEKbZm1DtbTf99KWmmqAO4Dt+rCw+lk3MuSWaMLEor0A9MRpu59OrZZ0TvtTe19g/TBhLjpJzJn1kvDkKKQJvX95PjeRanNkQEjkhwZkAHalVS2rBIxafgG0T5KEjB1rrmnO/s3AuMoswMSjc0u10EK9Fk54UYnIyFO796dHaypQ1TXGynaOYdTw6hm1+H1ib0RTVSBDRbkBy541uS9DbbgP6vyEjMBE2ogUDyRG7+yZIlbCGpJAiS5Sqo/loglKHNHutfnPCDJvO+WvaWBfj3cPiQsifx1GZYjCswPS/Dm62lH01uIyAGIYKHRsl9T1C7r/Jeh0Yqk9oEImHqYtNNnI6Vo4pc0JdZEg6fDxSvBcEeX46vWiueYvnzeSXcyVcNezCc64cwQUVKjU00iArshZovTjBrDfeM+0gWGt+QrjT0i9Ml5pj1sphdPxIsQWo6rfKEWhyjNG3ZmsqHTT9vY65JJqlXw1XCRVcmp1FvsQ0gTKkDkcn5W7V51O74ID8za0v2jWV2P4D64MTvqXSdgXP0ADe924i2W/y5H9XF96kSl/uvfBdsIDan8QQVMNtxhboQOzgoBEMZy4a67BpBtocFmyZV3i28FjAm9ow6XlTTVHTD40dZJQXaJH7bpYnuhqYlcYMvSWEjdO2haY11nFlkFlRX+5butbD3H6sSEGzbVl0LikjGF3TZhvSWtC8be4/CO7qJ/wmwHej/4WVUH032dffmejw3XotJ1ZG7qVOkyQW6pxVIl+4F0n2G+OoutiimGhvBCXP8I7axbwxNsfAXVzydGbySbBum/vs8+gjGmP5dCniT7TL+JSJj4EqRIwlDTopHdT1bT+Hzeo8WZSpKaRrlcV QyEOpC8W DMa9aUiqHWdTtE1udl5E0XBqRA5l2nov4y8IfdTNTG7QFnbjpRfBploxreirQKJf5F2HeTVsdlDz2V8v5LSYfzmAx8QUHy4bywleEj0WlK1SaQGWBi6Xy5cWrO/QrTXkqiHyQrVFRQvJZj/KY7vVs3Gl9DiTq96qdFDRAf5Up6dOm7u+TDVWFjCd9gwZ3c42Da2RgcDDRoFD2x2U= 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: On Mon, Feb 06, 2023 at 05:49:20PM +0100, David Hildenbrand wrote: > We have > > + if (!cow) { > + folio_add_file_rmap_range(folio, start, nr, vma, false); > + add_mm_counter(vma->vm_mm, mm_counter_file(page), nr); > + } else { > + /* > + * rmap code is not ready to handle COW with anonymous > + * large folio yet. Capture and warn if large folio > + * is given. > + */ > + VM_WARN_ON_FOLIO(folio_test_large(folio), folio); > + } > > now. > > What are we supposed to add instead on the else branch instead that would be > correct in the future? Or not look weird? Right now, I think this patch should look something like this. diff --git a/mm/memory.c b/mm/memory.c index 7a04a1130ec1..2f6173f83d8b 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4257,15 +4257,18 @@ vm_fault_t do_set_pmd(struct vm_fault *vmf, struct page *page) } #endif -void do_set_pte(struct vm_fault *vmf, struct page *page, unsigned long addr) +void set_pte_range(struct vm_fault *vmf, struct folio *folio, + struct page *page, unsigned int nr, unsigned long addr) { struct vm_area_struct *vma = vmf->vma; bool uffd_wp = pte_marker_uffd_wp(vmf->orig_pte); bool write = vmf->flags & FAULT_FLAG_WRITE; bool prefault = vmf->address != addr; pte_t entry; + unsigned int i; - flush_icache_page(vma, page); + for (i = 0; i < nr; i++) + flush_icache_page(vma, page + i); entry = mk_pte(page, vma->vm_page_prot); if (prefault && arch_wants_old_prefaulted_pte()) @@ -4279,14 +4282,15 @@ void do_set_pte(struct vm_fault *vmf, struct page *page, unsigned long addr) entry = pte_mkuffd_wp(entry); /* copy-on-write page */ if (write && !(vma->vm_flags & VM_SHARED)) { - inc_mm_counter(vma->vm_mm, MM_ANONPAGES); - page_add_new_anon_rmap(page, vma, addr); - lru_cache_add_inactive_or_unevictable(page, vma); + add_mm_counter(vma->vm_mm, MM_ANONPAGES, nr); + VM_BUG_ON_FOLIO(folio, nr != 1); + folio_add_new_anon_rmap(folio, vma, addr); + folio_add_lru_vma(folio, vma); } else { - inc_mm_counter(vma->vm_mm, mm_counter_file(page)); - page_add_file_rmap(page, vma, false); + add_mm_counter(vma->vm_mm, mm_counter_file(page), nr); + folio_add_file_rmap_range(folio, page, nr, vma, false); } - set_pte_at(vma->vm_mm, addr, vmf->pte, entry); + set_ptes(vma->vm_mm, addr, vmf->pte, entry, nr); } static bool vmf_pte_changed(struct vm_fault *vmf) @@ -4359,7 +4363,9 @@ vm_fault_t finish_fault(struct vm_fault *vmf) /* Re-check under ptl */ if (likely(!vmf_pte_changed(vmf))) { - do_set_pte(vmf, page, vmf->address); + struct folio *folio = page_folio(page); + + set_pte_range(vmf, folio, page, 1, vmf->address); /* no need to invalidate: a not-present page won't be cached */ update_mmu_cache(vma, vmf->address, vmf->pte); > Go on, scream louder at me, I don't care. I'm not even shouting. I just think you're wrong ;-)