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 21E52C02193 for ; Thu, 30 Jan 2025 09:51:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A0914280047; Thu, 30 Jan 2025 04:51:28 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9B804280004; Thu, 30 Jan 2025 04:51:28 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 87F91280047; Thu, 30 Jan 2025 04:51:28 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 6B18A280004 for ; Thu, 30 Jan 2025 04:51:28 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id DC3E81C7DAB for ; Thu, 30 Jan 2025 09:51:27 +0000 (UTC) X-FDA: 83063650614.01.F5B6B74 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by imf13.hostedemail.com (Postfix) with ESMTP id DF8442000F for ; Thu, 30 Jan 2025 09:51:25 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=ffwll.ch header.s=google header.b=j1xEp5dd; spf=none (imf13.hostedemail.com: domain of simona.vetter@ffwll.ch has no SPF policy when checking 209.85.128.47) smtp.mailfrom=simona.vetter@ffwll.ch; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738230686; 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=/pdSjiOp9c4OOZ/yEIi55/ppp/3tp0YczNnLQ60kX3w=; b=LFRsnu6yGtA0OhEEBN/YB00OXfVnEBHd6lOR4+aud4aieDQs6eIXKZCNlMb5r2YiYknQpQ WO8lUhKm9UWBvT1AwFSGtaME8aezevvLCdFyPNEdGJB8GWqNGtK5xixRAthMsy2F3rMpJ5 mJaLYenI5bu46qZEwUJ3p8a/cSCjWRk= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=ffwll.ch header.s=google header.b=j1xEp5dd; spf=none (imf13.hostedemail.com: domain of simona.vetter@ffwll.ch has no SPF policy when checking 209.85.128.47) smtp.mailfrom=simona.vetter@ffwll.ch; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738230686; a=rsa-sha256; cv=none; b=KHnAHVD4BKgfvCoNUvjgDA1TdOgSx2XIusU3+FA64FWIUQHQ/SDHR6dTqImXv7HnbQwHDO +NX/gZm+wajdvKnG1XOd84GFBKljlGtxFeEF87Pmt8YTEZ0Is0YzzWZIODcaHir+L39q1+ xYC6lJMpqVZdfbKr92VAPRbiBkGsWiY= Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-436202dd7f6so6613925e9.0 for ; Thu, 30 Jan 2025 01:51:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; t=1738230684; x=1738835484; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:from:date:from:to:cc :subject:date:message-id:reply-to; bh=/pdSjiOp9c4OOZ/yEIi55/ppp/3tp0YczNnLQ60kX3w=; b=j1xEp5ddD9mGSWJAqLwuFXIzc8GX4zhk1zRqH1RNeKijq0Qw6VbMs2ZkMsydmG20Kk Is//xepQrp2WbTy9YOe9rIzxZ2oHr3WSBMlR7FBEGNpKNiRWwjWdinodCGAOQIA5g7qI tGD4iyPeAS9x883uLP4P5hK/phBFG5O9J7p9A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738230684; x=1738835484; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/pdSjiOp9c4OOZ/yEIi55/ppp/3tp0YczNnLQ60kX3w=; b=QBYHwgLdngfVkwtkHP/9+/ez0vtz4zuxCVQoRi6Jczf0TmJaVIxjA+mR9CgXYtjavu tbsQww34vnboJreUgMBSoWgUTWHfjdU9aQtKhHl9YMYxkrFbflwHbjPsiSZuRwTHGSzZ /LsVN8YVM4YowkZfgjDsfDEk5VNVxZ9KA5fNMcQBUjT5G/69aKYvlApYdd51piAhZ6D5 bVfJZCB7rJA5XxjcZRyvNJVhtSxtDe5q8tGqCoc33YaySda6Eg8lVqSARDIfGxouR5ct 3tWgdWi7eZE13NkNS2mbh/3DovBtukdQq8QRVz0FK7kHmlbleNJ3X5sq6lxxRObcXSCN VFgg== X-Forwarded-Encrypted: i=1; AJvYcCUZz4I8r6S65ROp+8VP8ze/RAIl2G/Ea+yTtkE49hA5S+PevcCd4rKw42TmLkmz0PuB9haak/G4Lg==@kvack.org X-Gm-Message-State: AOJu0YyOP6JJKmWQQgXHzvsg+01kZIfo+KUMpFQJxjG/RSUilFX3slRW 2q2P5nL2wQ0KV3rLjdYNMclRR4/YaM4S2rzl5OuwmeNLt6TVHH4qr2iMn0cJcJA= X-Gm-Gg: ASbGncuLec6veQ7VNrzfM8wl9R5Jn6dbZxrAJajUP+Wi0QxCFVONIMC2yxz9nUdXtGK bHwx0m5l5hAc/XBZfYJeX8t5NwmpIec4CpXC9nJ01nR8JSqMHQFcn76NOPAGtsQHpTOxsut5bmN Q64wuw+5NixfqrvYbH0Mq/EGDxBLMpZ57MMVpvXTmSTw3HTQzOh97f7ev1eaeV1XMbHxC5oUdPx bOoJWmAJlh4aAJstzMS9QSnJLIrITD/UO4C/UH7TJaSPl7KDs1M7BeqgSeJ/5waT0kvni/zOXiZ IRa2HjC7eBJQRKj94tbqV7Rdx3A= X-Google-Smtp-Source: AGHT+IF1314un3GQgKorQlU7Ooz/rQrCyj9j2D9rJRU+9J5toI9CX1diHYvVJ9K+Omvgaz97Oy+yBw== X-Received: by 2002:a05:600c:1d82:b0:438:a240:c55 with SMTP id 5b1f17b1804b1-438e298e709mr9982485e9.1.1738230684290; Thu, 30 Jan 2025 01:51:24 -0800 (PST) Received: from phenom.ffwll.local ([2a02:168:57f4:0:5485:d4b2:c087:b497]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-438e245efbcsm16833505e9.33.2025.01.30.01.51.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Jan 2025 01:51:23 -0800 (PST) Date: Thu, 30 Jan 2025 10:51:21 +0100 From: Simona Vetter To: David Hildenbrand Cc: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-mm@kvack.org, nouveau@lists.freedesktop.org, Andrew Morton , =?iso-8859-1?B?Suly9G1l?= Glisse , Jonathan Corbet , Alex Shi , Yanteng Si , Karol Herbst , Lyude Paul , Danilo Krummrich , David Airlie , Simona Vetter , "Liam R. Howlett" , Lorenzo Stoakes , Vlastimil Babka , Jann Horn , Pasha Tatashin , Peter Xu , Alistair Popple , Jason Gunthorpe Subject: Re: [PATCH v1 05/12] mm/memory: detect writability in restore_exclusive_pte() through can_change_pte_writable() Message-ID: Mail-Followup-To: David Hildenbrand , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-mm@kvack.org, nouveau@lists.freedesktop.org, Andrew Morton , =?iso-8859-1?B?Suly9G1l?= Glisse , Jonathan Corbet , Alex Shi , Yanteng Si , Karol Herbst , Lyude Paul , Danilo Krummrich , David Airlie , Simona Vetter , "Liam R. Howlett" , Lorenzo Stoakes , Vlastimil Babka , Jann Horn , Pasha Tatashin , Peter Xu , Alistair Popple , Jason Gunthorpe References: <20250129115411.2077152-1-david@redhat.com> <20250129115411.2077152-6-david@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250129115411.2077152-6-david@redhat.com> X-Operating-System: Linux phenom 6.12.11-amd64 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: DF8442000F X-Stat-Signature: ynzn96wbdzeb3bgd1fzimepnwhfqrups X-Rspam-User: X-HE-Tag: 1738230685-891944 X-HE-Meta: U2FsdGVkX197WDpB6HU2ta78oqgK6yQtYYUa2mjkeet94F3b10gDTtvnxN8/+9jKhU/pAlHCaPEBx5ZblmmFiHmPNVXLZS8hqI104ZjlpKPbdQtDbcgJxB0t3J2R3EIYtaFagU7TUGzOoAU1M8IOpuUnRJD7cCjFfbufGFq81NM5y+zncRdfjlAgwfs6oO1CCpwsLkXA7EBlW8FN/YKGSueaIIF3Se7Zz2gOr6vQmGiCqigTg3ilPG+DIia7CK74gIlxnEDnGyKvN4Dpb4Rv4k8q7TeKwfxYkYjqLsHoDyVoYrLjLmlghTrDspTfCpNVwncIpY4sdtjotH0TirpqPQUGO2x6bCL8XJpP9hKtyg0W2UYm4GSs8O40dfIyZaoRBmuISR8Ix9+Xevw1ROd3jOGWKuJSmLK7OB7bz9QzDA3Dp17Pn8hffxY0TGAxFkVePF+MxHGvCoFdCDarPgJSlmDcXIHSjJcdFfWvAbkBLkUHjN5juREdmjiIR7z/b6yXyZiy75ic5oTXfBAkLT632ouKu0Rg9FoWppFOtabPDll3seqYoqhg00yzeRT8SnSR/8NCUpmvkAKYO0WHZOPZPcDjbYivOzR65+SimMuVqAbOwylfivvjb1Z12DH6K1lOoPvv1fVC3iB2XqSomHmHV9BL9YTkkp6obh+1Bitr6q5CjG3ys7jy5GL5P+ZzFnZngoKV9iVVsPtAPFfI5ZPzRvfF2TpR/YACWORNDBXZo6jynJoEqVsswrGDfkGMOjjFvzcz9ZOo9AaVRbbtMhB6Zv+GaU7HCDQ/uEn/l1FT9l6ZXkzQXSuKF9v1vN7/n7sRDeA6Y8ReRI0PCYoCF94mIduvj9uFPy9GTkB81d/9HKb1VZaCduBpMNyXkzQe7iI3HUqNb46odN8AsBYNkWF2zkkc4JUO8vcDsFTi40zqHT9LpWUUCaETP25PUAKyyvdlqRUrIUT/ah87zon7UBM M8SboHPL TkWHAF09qssh0KGsIVevpB6KmxKhCJHL9jRk1du9f7df2tKZ8AcYRg6esYy/AbA12DyAByNdu77WABErYI3q3dcSHUKi3GEq8D9H8ylv7XiusgbJUQ7EVEWUdbhWBvH+377eGxvvhqJgRGkwLp/hNnViOAl8wyXh/qMOFGP5l+BsiHpWFczk+YOR2oJ5LEzJFqL0T3lL/xnVffpZn6U0yq+ccodt2qmswWEQg+RhUUGoOkYiVHm0/mB06UrrNgNpFeJzhDKTgoJFZ2Qr3wpYeGstsF4fX2bvUJ6dD6Kn0zPcZa4TI9qwaDx1Pr9u4abKTqR4wg7GwttzndRMrcC5RX7B+dsb0d9t7aCJ2saO5ydspmLJkgL9ZfKH6Fw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000221, 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 Wed, Jan 29, 2025 at 12:54:03PM +0100, David Hildenbrand wrote: > 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. Not sure whether there's much difference in practice, since a device exclusive access means a write, so the folio better be dirty (unless we aborted halfway through). But then I couldn't find the code in nouveau to do that, so now I'm confused. -Sima > 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 > --- > mm/memory.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index 03efeeef895a..db38d6ae4e74 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -725,18 +725,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); > -- > 2.48.1 > -- Simona Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch