Message ID | 20250210193801.781278-6-david@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show
Return-Path: <owner-linux-mm@kvack.org> 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 A22CAC021A2 for <linux-mm@archiver.kernel.org>; Mon, 10 Feb 2025 19:38:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2F085280007; Mon, 10 Feb 2025 14:38:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 253E0280001; Mon, 10 Feb 2025 14:38:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 07E51280007; Mon, 10 Feb 2025 14:38:29 -0500 (EST) 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 D7C21280001 for <linux-mm@kvack.org>; Mon, 10 Feb 2025 14:38:28 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 92D76C050C for <linux-mm@kvack.org>; Mon, 10 Feb 2025 19:38:28 +0000 (UTC) X-FDA: 83105046696.01.D206266 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf07.hostedemail.com (Postfix) with ESMTP id 5DC5740010 for <linux-mm@kvack.org>; Mon, 10 Feb 2025 19:38:26 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=AV8j6qoZ; spf=pass (imf07.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739216306; a=rsa-sha256; cv=none; b=ab45taC175xY7bbTlKge8nrqmh6NfUJzqjHS6JxOIOCkU8ADA60EuyNzbHLyiW5ImR7vwL 1tf16+ADyNv+FX8dt/bEH3E9SsNwxX+wrlt0hAZ6AIJWxqdIPQ1RnWU7FhB8cfmbpJGXwf n1254mtZWGC030yLtjqLJ5ex9J4VUa4= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=AV8j6qoZ; spf=pass (imf07.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@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=1739216306; 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:dkim-signature; bh=mARFTZKeX08fN9+zJg7ejGdzGLsE2rU+aFhmUgxRNAg=; b=HB8iR2s09R7gwcDonBjrh7epXnBmg3UVCZet0JI4qq1U3BHHH/ei4hh/+mpbxLB/eidQOt KVKk/9k9DEPlZaBu1zrJOKznyKD+63wWCojFkdCFkcdAhr7+eodiMHxQsX53cTe1zofreS LpAZuXGk0cMnN6LTtxsR6EzSJzQf+9s= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739216305; 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: in-reply-to:in-reply-to:references:references; bh=mARFTZKeX08fN9+zJg7ejGdzGLsE2rU+aFhmUgxRNAg=; b=AV8j6qoZnbT0BbYa00T4kEJo2tTqvKZvxlXh/86/z+Eh2T73iv0GLtO6G4lpRE/UMHCJuZ M7FnqEugkbXwikFGKl/dquIvghZ+BifM3o3DwQfEb3aEI/SqbizLWa74HvV6W2mKyIgfN4 Lu5D6Ab8jGNu1so8LLnZt1duxHuAltw= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-677-L1ajbMGDPdCtkSQmgwTNeQ-1; Mon, 10 Feb 2025 14:38:24 -0500 X-MC-Unique: L1ajbMGDPdCtkSQmgwTNeQ-1 X-Mimecast-MFC-AGG-ID: L1ajbMGDPdCtkSQmgwTNeQ Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4393e873962so8859455e9.3 for <linux-mm@kvack.org>; Mon, 10 Feb 2025 11:38:24 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739216303; x=1739821103; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mARFTZKeX08fN9+zJg7ejGdzGLsE2rU+aFhmUgxRNAg=; b=T5KqVQIZgsJ043YZodtDddGfuHdVFemjZa+s9RwKLJ2m1lRssjnlzVENA+o40MulL9 yas0yiER/1POdeYOLifmatFGclsfql8qtOUfeAzg40nYcp5iiHdaEWb8i9lmnvFEZhuk 2AFTEbb7vPwp+cdYAhcWTdo8ltB+lfs0ribOSmx0Q13tm1fR+NCS3ECjkNOYfDsb4pi/ ZmAxaVFhM5KQZ0taEcmQCc9JJVy5yljjyEy9nkMDAEeDXse5xATF0y3llIimPf48RUcS BeOuJeY9iJfYea499n09O7LwKSbpNK47G5U0qJlmwuQlFwuXxpZ+oJxroiFXy+8fBUW5 krhw== X-Forwarded-Encrypted: i=1; AJvYcCX8y/0ATtdz2bXj8PXPA9KlMlunDvCyroHA9z4HZEKhS8mdJj9jtIdszwfXg5pPz/ntDg+aaT6BvA==@kvack.org X-Gm-Message-State: AOJu0Yz0pVAuZ8Bv3IlfzcTVo1IeCsu5dC2+BdRpZuiCDn4nt1L/A0Fy txRr9Bos+/7+ZQywILqNCwJqpJ/YB0BB6R/Kjy42xxltDVohyKmNxgL1vv9PLTYKvDh/ysyJTjL D0KFzF3yx9pe/FQqefBZ+qBAbxPnEfPL9Q9hjGRbvKeO26EHA X-Gm-Gg: ASbGnctja/e+2nSyYkoAoqE2CjXDf9EXZQAAaxxELIJP6fNKoUuqRNIRS6KYchaSo9Z KEXlc6GP+/PqpgDOjx+UJpm7ZVl7qI9qd7dReJaBxS0FW3ewihyu2uTCLN+oLh44wwnK72wX47J E7Mjk+oCz2wmPTsQX1yAv1n79HpeytgBVZPiA0+cR5kfQhVRE0jtoPD0c9ssZ7BNTXFnkgCngUg cJjT2QgsD5no5fnR0ri+w4QfpA/9fi8gWVXgzSKw7ollp3jp6NZe023XnjWpRPusB0MXShAClCc Yt5rUpJYAhJq6STOL6PCZVzPPhyeuGgqEtIldoExu+pRmLrRFpKkWNYunR0dfJ4hRg== X-Received: by 2002:a05:6000:18a5:b0:38d:e33d:d0db with SMTP id ffacd0b85a97d-38de33dd2b2mr2312799f8f.14.1739216303484; Mon, 10 Feb 2025 11:38:23 -0800 (PST) X-Google-Smtp-Source: AGHT+IH1Llhtf765OHh3Rdp8g77cDKhZyIe7rPLF3LamWfRFHXBXmPgwl/7uacqNHueSdZU9tH9+kA== X-Received: by 2002:a05:6000:18a5:b0:38d:e33d:d0db with SMTP id ffacd0b85a97d-38de33dd2b2mr2312758f8f.14.1739216303053; Mon, 10 Feb 2025 11:38:23 -0800 (PST) Received: from localhost (p200300cbc734b80012c465cd348aaee6.dip0.t-ipconnect.de. [2003:cb:c734:b800:12c4:65cd:348a:aee6]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38dd3fc7ee5sm7734941f8f.39.2025.02.10.11.38.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Feb 2025 11:38:21 -0800 (PST) From: David Hildenbrand <david@redhat.com> To: linux-kernel@vger.kernel.org Cc: linux-doc@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-mm@kvack.org, nouveau@lists.freedesktop.org, linux-trace-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, damon@lists.linux.dev, David Hildenbrand <david@redhat.com>, Andrew Morton <akpm@linux-foundation.org>, =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= <jglisse@redhat.com>, Jonathan Corbet <corbet@lwn.net>, Alex Shi <alexs@kernel.org>, Yanteng Si <si.yanteng@linux.dev>, Karol Herbst <kherbst@redhat.com>, Lyude Paul <lyude@redhat.com>, Danilo Krummrich <dakr@kernel.org>, David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>, Masami Hiramatsu <mhiramat@kernel.org>, Oleg Nesterov <oleg@redhat.com>, Peter Zijlstra <peterz@infradead.org>, SeongJae Park <sj@kernel.org>, "Liam R. Howlett" <Liam.Howlett@oracle.com>, Lorenzo Stoakes <lorenzo.stoakes@oracle.com>, Vlastimil Babka <vbabka@suse.cz>, Jann Horn <jannh@google.com>, Pasha Tatashin <pasha.tatashin@soleen.com>, Peter Xu <peterx@redhat.com>, Alistair Popple <apopple@nvidia.com>, Jason Gunthorpe <jgg@nvidia.com> Subject: [PATCH v2 05/17] mm/memory: detect writability in restore_exclusive_pte() through can_change_pte_writable() Date: Mon, 10 Feb 2025 20:37:47 +0100 Message-ID: <20250210193801.781278-6-david@redhat.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210193801.781278-1-david@redhat.com> References: <20250210193801.781278-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: m-Xr3VdcQKSrbQxY5TSpnSIh_ukVb1wvF0_jahzmWEo_1739216303 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Stat-Signature: r4tm4tkagr76re8cyusftbmw1mn8hwkx X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 5DC5740010 X-Rspam-User: X-HE-Tag: 1739216306-543831 X-HE-Meta: U2FsdGVkX18gTtSfHgg6zqOcv/nH5JExJuw+OQhXQLJ0IfKO3lOQiR7DOhHEwkWe7FSY0671nOuFZch30i3etYtHqM9DlRrKw/ntAGZUfI6DP+23n+qP3AjRS1vDpD0t2feXO+srGnWv+Vvwk/5ZOtwoMMvkzo35N6n/6qCbDXddaunehqcl9qqx9XgK8ONipx9T1bjVFKQF85k9csfJUKtd+VcDnSvdsDcOgOx2ACk59/SZ5zDVHKRkQMcGfssKiPCdLUbZZB0C27DR1Ab+A6pfxPqeCNARuZL6bu7Undo7YNhdz4YAdEUWDWBeG0BfLd2PjFqIg76/HiSU0V29pHJ89TqD9tXF+wIIh90x/d4MCOd/Zqbhs9y+zAZ6uWHVIhO9sFx1wEr9Uq2Ah+/6un/1Ssl878792eDn7PHSJDc+KyXtn7/S8OYgDMb7zCtUM9YvQK67mj4ehLi1hu+FgdRUBE5bDw0MeVSRXGmRV0D2LvpkKlvrZwJ7yovNlvHYwahuwSs1COwGsYjLCf1+SgDlJYWTJL7NQYiiW81dNmeQpJjzXDpq/VAt0F+dHGeF9VUfwTepn2L9gHK+kIsid9uFu5ZOEpkoZFJAGuZaoQr2vppC37T0C52Ug+MMKysaA6/8ynUlyTpYUkwyHJ1w/Qf0Cr5OzoznMYBY5IPw4n2BHN3OaM04BQQFE2J8k9Zt8vmiu7QGYV6hll/lVSlzQXl+xvVr8JS3e60cpTYqEuysbYY/VtlxD/SvkUnp3MuJ/HPawAaFMYwiiAj438BoJYLIfS8IzaUXajploPpy+6MtA4wPV0qw66j0IZrJCwDcrTQ8xf1XXxy5oV3joy19gErre86DkjF1TM747Oo2VGNXBe2EUe4PPWn259ZIQ8CIDmujN4l4hSZS0MK9GfeTe2yldZtca0xWSlgNbvXF1T0TKfwVgB9dJ/WcGulIVzFuGJXOd7pgUWnwZmrtsH5 pP9vhhFR io2FG0Et5MYZ+2+Dzag5ssThebguEfuCh4kqnSpJQHndvzIBOMTsCcTMZAtY0qVIwoTto/aLdhaALPBihP9RFbrd4vT//y9rl8Xq4qSIWHzBCaMa0a3Q3eFoYI9uPXtAvDNVVxKXfbJ+7Sx6F1JhctRY88Fy9uahsH8eQiaKGsUk6qQyg4pnez6qazFcMWVHqtlvEo1EEDKjkLuGSF990qzO0399u3SGnhDs75p/7uC2zFE96ITiGL6/7H9VZk7hlUESKLiSlA10m3t66LWg5n9fIRG+ckYTrGeSqVQMKitQDFOBKiwFjp0YbHLoUlzTaXYTbXFq3bbcPepzqY25NMHAXiW6wBEv61Z/IQK3xLhmHaHzLXOUqEYR5dR+5Y50AFkcvwirQ+zy/ubU55S8x5/aYt/jSCNbfIxmT0ysxbsW+zqvdIWjSTgaR6weik+vkZxnvJRBU8jlohvMyWrrMQEC2CZgC8KCOICPlr0gWeKYJFpcbfKotF9ep9qKH7lMJ2PXR1Yd+FyrbESfW/KZ+EcgYHw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000008, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: <linux-mm.kvack.org> List-Subscribe: <mailto:majordomo@kvack.org> List-Unsubscribe: <mailto:majordomo@kvack.org> |
Series |
mm: fixes for device-exclusive entries (hmm)
|
expand
|
diff --git a/mm/memory.c b/mm/memory.c index 539c0f7c6d545..ba33ba3b7ea17 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -723,18 +723,21 @@ static void restore_exclusive_pte(struct vm_area_struct *vma, struct folio *folio = page_folio(page); pte_t orig_pte; pte_t pte; - swp_entry_t entry; orig_pte = ptep_get(ptep); pte = pte_mkold(mk_pte(page, READ_ONCE(vma->vm_page_prot))); if (pte_swp_soft_dirty(orig_pte)) pte = pte_mksoft_dirty(pte); - entry = pte_to_swp_entry(orig_pte); if (pte_swp_uffd_wp(orig_pte)) pte = pte_mkuffd_wp(pte); - else if (is_writable_device_exclusive_entry(entry)) - pte = maybe_mkwrite(pte_mkdirty(pte), vma); + + if ((vma->vm_flags & VM_WRITE) && + can_change_pte_writable(vma, address, pte)) { + if (folio_test_dirty(folio)) + pte = pte_mkdirty(pte); + pte = pte_mkwrite(pte, vma); + } VM_BUG_ON_FOLIO(pte_write(pte) && (!folio_test_anon(folio) && PageAnonExclusive(page)), folio);
Let's do it just like mprotect write-upgrade or during NUMA-hinting faults on PROT_NONE PTEs: detect if the PTE can be writable by using can_change_pte_writable(). Set the PTE only dirty if the folio is dirty: we might not necessarily have a write access, and setting the PTE writable doesn't require setting the PTE dirty. From a CPU perspective, these entries are clean. So only set the PTE dirty if the folios is dirty. With this change in place, there is no need to have separate readable and writable device-exclusive entry types, and we'll merge them next separately. Note that, during fork(), we first convert the device-exclusive entries back to ordinary PTEs, and we only ever allow conversion of writable PTEs to device-exclusive -- only mprotect can currently change them to readable-device-exclusive. Consequently, we always expect PageAnonExclusive(page)==true and can_change_pte_writable()==true, unless we are dealing with soft-dirty tracking or uffd-wp. But reusing can_change_pte_writable() for now is cleaner. Signed-off-by: David Hildenbrand <david@redhat.com> --- mm/memory.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)