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 EE2D1C54791 for ; Sun, 10 Mar 2024 21:57:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 60A676B0071; Sun, 10 Mar 2024 17:57:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5BAB56B0072; Sun, 10 Mar 2024 17:57:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 481926B0074; Sun, 10 Mar 2024 17:57:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 37CDA6B0071 for ; Sun, 10 Mar 2024 17:57:40 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id DAD44160764 for ; Sun, 10 Mar 2024 21:57:39 +0000 (UTC) X-FDA: 81882491838.05.9497C72 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by imf11.hostedemail.com (Postfix) with ESMTP id 40C954000D for ; Sun, 10 Mar 2024 21:57:38 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=W6CFtjkS; spf=pass (imf11.hostedemail.com: domain of lstoakes@gmail.com designates 209.85.128.43 as permitted sender) smtp.mailfrom=lstoakes@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1710107858; 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=J/sYS0NJb4DqNjgdYB+tGj5LpDFuv9Mhfne0wLLGGD4=; b=6AKJBP7KwQzLV3VhyxU7RUy+62z+bhcXl5N44NbfOUbfJu/Bj1uLLg7D+ZCN4pGPQx3NNH BvnL8EFTiBrNO7axxBmjjFGoJeudUamPPH9yGcEz7Vx6rag9ck6yOfbSPj29aqSq5fY6t3 +RwcELAFNEPLUgympAyz2pMDhx9GN0g= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1710107858; a=rsa-sha256; cv=none; b=QJexmO4pt6TchrfAQgOWKQZMw/4poETQitapQv+Z0cxpRBXP7eICloOyqUK0qSOYY2V71r pywvqwJEFT+9W9URxOji+TPOgcgqHB4rEvMvEY38eeOK8ckRA3DAiRp57nefpMk5pxnlqD IY0wUtqfiWXo93EJHkuNmXGqhNJxNv0= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=W6CFtjkS; spf=pass (imf11.hostedemail.com: domain of lstoakes@gmail.com designates 209.85.128.43 as permitted sender) smtp.mailfrom=lstoakes@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4132a5fb300so1617865e9.0 for ; Sun, 10 Mar 2024 14:57:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710107857; x=1710712657; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=J/sYS0NJb4DqNjgdYB+tGj5LpDFuv9Mhfne0wLLGGD4=; b=W6CFtjkSlim8zH77+ONCpx4V0ISQoNG9q/HCSGKzPsRg+cw/GeKkAqZn8KhvUxYDBJ J5qP9WKKRccTmbYpRODL6Jwfc1nUt+/qLaH8VEQY625g32CJMzzo7ybtLoIn7v5FJLJF DknoBbTJ/dYZo7GXGGx5AN9j6XMjX4AiSLXbtMhH+3buNUyOdO+dXCz0KxZzt9yJgSxV /Ajikp6LzhX/y1DRPGw9jMqUSWtQKeUa0AeqzF+/yJmm9EurH+BK87qVgZMkqOy2Tru+ xVGL7RDKMxzS42ulT9g/b1EoSZDXN4QzBMI/xMU8N5G1u4/ScFkQwLpcKcI48+yYp2bL Tx3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710107857; x=1710712657; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=J/sYS0NJb4DqNjgdYB+tGj5LpDFuv9Mhfne0wLLGGD4=; b=AQqGOY6j4VBRXA8DJgf9siGFk7muyyrSxOOamjahBlp1g1oglUEmeNJ3AaX/WcqeUH RU/czlWeSxjQwiUZ1yfsd2S54nLik0i5PEG3P0w4tezwW0mzAM2oqgTRm6DLqN/Hj7RW c7syfHYqPv4Dm6np2ENnIy9dq782/oopoaEiADER9SZP+gZyPfCZaOrUmG+UGpPbuMf5 cZm8kcTybqTz2m1g4BM6RN8gIrJ4dskrA5rQMiIo8c7XAw9U9xuhYsgKLdYhqbYXm3Dh QwRSvLcWiZ+oPhs2hOYQfwFSrdin8AI7WgxuDh0pcz6zgb7tbkIn1Jb2WH4rsr2uHfMZ hrkA== X-Gm-Message-State: AOJu0YzxY//hpoL7+KR7pM5JMoGJ8YkDkig6gQWYsHiSSFvKVCHxifPO ydlPP2o/iDaB7afCKuw28GiBLNRHJyK51ZJsj/X6D0drWXFox+Z2 X-Google-Smtp-Source: AGHT+IGLPOT973/rTUf1pEj4J67Zt68S7FpNg8KHeXcNkLm8rUad4WXpY2RIHz/ES7oT49cPkJeawQ== X-Received: by 2002:a05:600c:1987:b0:412:eff3:8497 with SMTP id t7-20020a05600c198700b00412eff38497mr4518127wmq.1.1710107856392; Sun, 10 Mar 2024 14:57:36 -0700 (PDT) Received: from localhost (host86-164-143-89.range86-164.btcentralplus.com. [86.164.143.89]) by smtp.gmail.com with ESMTPSA id fb4-20020a05600c520400b00413294ddb72sm1820037wmb.20.2024.03.10.14.57.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 Mar 2024 14:57:35 -0700 (PDT) Date: Sun, 10 Mar 2024 21:55:21 +0000 From: Lorenzo Stoakes To: Richard Weinberger Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, upstream+pagemap@sigma-star.at, adobriyan@gmail.com, wangkefeng.wang@huawei.com, ryan.roberts@arm.com, hughd@google.com, peterx@redhat.com, david@redhat.com, avagin@google.com, vbabka@suse.cz, akpm@linux-foundation.org, usama.anjum@collabora.com, corbet@lwn.net Subject: Re: [PATCH 1/2] [RFC] proc: pagemap: Expose whether a PTE is writable Message-ID: References: <20240306232339.29659-1-richard@nod.at> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240306232339.29659-1-richard@nod.at> X-Rspamd-Queue-Id: 40C954000D X-Rspam-User: X-Stat-Signature: 78bxbpy1rptpnahw5e3buky84nrk8a17 X-Rspamd-Server: rspam03 X-HE-Tag: 1710107858-722862 X-HE-Meta: U2FsdGVkX19Vw2Cme0tpTcpL2cKy0sSoCBRYmTtw/AmwC6iRdwxkGVVGV7MQID6zUjQCmRmPfI2l+5PhtL+A+F7qpCmxY3vzmG/XQOunXNsxOodyavC29hBkhi5hYULW6rRTf0f3FZkoZmeJZZlLFnV6KReBEui0OSdB2QZIGik+HAO6mIX+/Usu/+qliK9ZHcosF4B6DtRLuQjp1TNYPmI0LzWjIC9tNNmevqkHJW0/7AuLIdWEuoS0D9xg5/YHmI4OeqO5wzmb8CNShXkv9Q4PlTgj4EsYmVYOeip2moEKQWS57l9ApJQic2e0vJ3Ao02TqyCZq+PnmjRfttkpakyhhMO0zmBqqWMtE5pnctUPreuWM+7IHrRzKmChGMvgvc3JyDPVqWhlWcVf2AB0HPSQxwJYMkSESLP54qprcVFNYRUL3+ZKIHnxtePz9yEsuckY+5HvnruK28r2R7Tg/2XjDdVQGVEgQYWrcYK1OOopOtTB2EqSF0YirQmvPartOnYndJCx0Qj7eBY6mV3nB6sHpin7cqW9i0IWePd0vsHjTbPiabiErx/QsZKeE7aj7U5S/vy0PAaBAgKTck+utl8K4eVCwQXGLMwyXxwaznopLlxaNX43yCv8upBa0JmMbipETTiiedWFZUmPS4DUh76FAFI15TW+VMVEg7pkSdVe5xZTsDsfoHradus4SeFPcm8cDQgyncTKUt2PPoiiUCujFP41v8tewtd4muU+UUF7XEvVJ46RERclDngvA6osIhLh/Xb8djRytz5e8wtdw+9vM4D3+fYYgYGkSej3ib3wYotIhpq4N313l2p9CqUpBjCvb2UZvEUIyjX5FxkaTELgsaUemnwuOeAi6ly3CqqyX9ElnnVBgIi0wBEMU+5VJGac9MfX8UipmxI0z0i3vkGhIgKdJeQmM+/V082w6W4vC55xCqOOMGQUPQEyGfheBaZMU1OMbId0A0Kf8FU kI0USEqw KCkk25Ud6De4DSf3RkximikZQ9VhVoNWEXZAW1bsCi2G//TpUyUi65FKCHfxPs1kBNv/qeZ5RQL2/70RgFgAUlG2uU9w1Bqk/lmrOUbuOowSAFcYPHtlwY8F+/FHHclb6do/HSmcv+tDUK1MFBFn637pBSA== 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 Thu, Mar 07, 2024 at 12:23:38AM +0100, Richard Weinberger wrote: > Is a PTE present and writable, bit 58 will be set. > This allows detecting CoW memory mappings and other mappings > where a write access will cause a page fault. I think David has highlighted it elsewhere in the thread, but this explanation definitely needs bulking up. Need to emphsaise that we detect cases where a fault will occur (_possibly_ CoW, _possibly_ write notify clean file-backed page, _possibly_ other cases where we need write fault tracking). Very important to differentiate between a _page table_ read/write flag being set and the mapping being read-only, it's a concern that being loose on this might confuse people somewhat. > > Signed-off-by: Richard Weinberger > --- > fs/proc/task_mmu.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c > index 3f78ebbb795f..7c7e0e954c02 100644 > --- a/fs/proc/task_mmu.c > +++ b/fs/proc/task_mmu.c > @@ -1341,6 +1341,7 @@ struct pagemapread { > #define PM_SOFT_DIRTY BIT_ULL(55) > #define PM_MMAP_EXCLUSIVE BIT_ULL(56) > #define PM_UFFD_WP BIT_ULL(57) > +#define PM_WRITE BIT_ULL(58) As an extension of the above comment re: confusion, I really dislike PM_WRITE. Something like PM_PTE_WRITABLE might be better? > #define PM_FILE BIT_ULL(61) > #define PM_SWAP BIT_ULL(62) > #define PM_PRESENT BIT_ULL(63) > @@ -1417,6 +1418,8 @@ static pagemap_entry_t pte_to_pagemap_entry(struct pagemapread *pm, > flags |= PM_SOFT_DIRTY; > if (pte_uffd_wp(pte)) > flags |= PM_UFFD_WP; > + if (pte_write(pte)) > + flags |= PM_WRITE; > } else if (is_swap_pte(pte)) { > swp_entry_t entry; > if (pte_swp_soft_dirty(pte)) > @@ -1483,6 +1486,8 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end, > flags |= PM_SOFT_DIRTY; > if (pmd_uffd_wp(pmd)) > flags |= PM_UFFD_WP; > + if (pmd_write(pmd)) > + flags |= PM_WRITE; > if (pm->show_pfn) > frame = pmd_pfn(pmd) + > ((addr & ~PMD_MASK) >> PAGE_SHIFT); > @@ -1586,6 +1591,9 @@ static int pagemap_hugetlb_range(pte_t *ptep, unsigned long hmask, > if (huge_pte_uffd_wp(pte)) > flags |= PM_UFFD_WP; > > + if (pte_write(pte)) This should be huge_pte_write(). It amounts to the same thing, but for consistency :) > + flags |= PM_WRITE; > + > flags |= PM_PRESENT; > if (pm->show_pfn) > frame = pte_pfn(pte) + > -- > 2.35.3 > Overall I _really_ like the idea of exposing this. Not long ago I wanted to be able to assess whether private mappings were CoW'd or not 'at a glance' and couldn't find any means of doing this (of course I might have missed something but I don't think there is anything). So I think a single bit in /proc/$pid/pagemap is absolutely worthwhile to get this information. I'd like to see a non-RFC version submitted :) as discussed on irc, probably best after merge window!