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 CDD69D66B81 for ; Tue, 26 Nov 2024 22:10:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 362AE6B0085; Tue, 26 Nov 2024 17:10:07 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3101F6B008C; Tue, 26 Nov 2024 17:10:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1D7566B0092; Tue, 26 Nov 2024 17:10:07 -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 063B46B0085 for ; Tue, 26 Nov 2024 17:10:07 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id B241080BAA for ; Tue, 26 Nov 2024 22:10:06 +0000 (UTC) X-FDA: 82829639718.09.F176561 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) by imf28.hostedemail.com (Postfix) with ESMTP id C4DD2C001D for ; Tue, 26 Nov 2024 22:09:56 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=JS6GuF9T; spf=pass (imf28.hostedemail.com: domain of jannh@google.com designates 209.85.208.49 as permitted sender) smtp.mailfrom=jannh@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1732659000; a=rsa-sha256; cv=none; b=ymzatm/D9ZTUtsecTDhBFd715ghl/WyPU0hZxkJvf9DwP4ClIG4Q/NMSYosIfsQcW5Ihz0 GUhKVFOk9cno9QfoK5tG93o+Z2aNZVi0oczZSqT/oDuFlB7gG2iFiBC/bc5nhGMKJp8I7I gQTvE2jeu453TbuzLs2Izor4fsrNB0s= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=JS6GuF9T; spf=pass (imf28.hostedemail.com: domain of jannh@google.com designates 209.85.208.49 as permitted sender) smtp.mailfrom=jannh@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1732659000; 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=vTHMkYV876MVEV7+UBcdVp/IpT8KJSz6LBKIAJTo1ww=; b=eBM8oOOJOhjp1o1U/dRKJ1DfiG7W1c0LvSKIUJPDXmuGMpINAitUVaPijoh/mTzxe4yMkD sAQ+zlKbxlE2rvPTiHkDkVsfZRwBlMnEXweJj3wnVItPkOLdJ8e2R6Rfu1Qdaot0q2Iid7 66HH4YGJeo92Ry1fSRVWSQr/0I9aoNE= Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-5cfc18d5259so822a12.1 for ; Tue, 26 Nov 2024 14:10:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1732659003; x=1733263803; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=vTHMkYV876MVEV7+UBcdVp/IpT8KJSz6LBKIAJTo1ww=; b=JS6GuF9TAQhn7EBTqG5dfcCChjki7FmsJ89N8xy2jGiSmIMtVW+ryDVaKoNTJF3uB+ 1vLHKeJrpPcyQKDFRGA4hZJ2GGBuiOT0JCQDdydq2uxHA/uDYQwSbXMqWv+1fWs73ePQ TbV/1Fue0hlthumeVQolDkugYPypLHsIhzyTgVCYeIK3mGvdEVlMazG8LerdHbj3nxRY NJlFSq/lZo12gwETQxHmnszWnUpdV03shU7mm5LOaMq1YtyTBBg+gS6LK5cpIF2w6gVo sJ3oJ2tCaWRHkdG7/ffTXdHbIiMUT8o4bPmAxiafGOKayalIreyKOn+qJ9HuMv8NUulD Vj4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732659003; x=1733263803; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vTHMkYV876MVEV7+UBcdVp/IpT8KJSz6LBKIAJTo1ww=; b=LiPppgx7bt7ijCRIIrkbtyzlTEJDjxFbZEzu1z1aku0cS1zKi+AkLpg9cwrFmo3rvr 0r7RIkbqZYgqjyXaEKDzIleZtSzU/780JDztvU+E5lo773yIhfZ8lL/mDTFcHxXpoi4i /zMwWJzA67XCUBLpkoHYbdUZUv3FyyZi70bGCHloqa8tiavrCBLB3g4t9ImgTaiDYkxY H42T6Y4jfegEhf77b8b/bSxLsF3L8YmaDm9s/ntQGugleiApnXJzvNElMkGzBn/gnuQo a7VTkvHm+F0U0Ow06A5yPM7ITGS9S9BIHlGnxv9AJUM1K2YcIgUO0PuZu0mCRNnq43yS 8k8w== X-Forwarded-Encrypted: i=1; AJvYcCUeTZ8uPBR1Vp7e18zahMkwfgVFBBnN0Cpfkvgq765BL60EYbBLZ5kRDjsYeOvKjUJ5UVSnE3rGjg==@kvack.org X-Gm-Message-State: AOJu0YyOVlZ3VpnSdRHYJepW16maJF/cX4M/uYFUyyBYLeUKS5bwWY+8 /L2wCxVL9pXfhsbhmdYz5ASN/2wkNnyNlvnlDN4oGl/y1qca4MgS3zG/hYSvAtHvp4f0qpb7FDR GTUOn0IlvGS+Tuw3+t4DFxfdjKpT1WM2rp+kl X-Gm-Gg: ASbGncu/jYErjQJbioMmpl7iS3BCdM2SittGy60IHQXLlcJ1gSQdFfvAJAkoInUoeJj hQyewa9FE56IcCRnDdtNC6+7S4e5jDCfYuMPGOQ4prxuIIS9kqXNvYNcCR14= X-Google-Smtp-Source: AGHT+IE2cdAOzjSAFTZV8v2SjKZv2gEDrSa393KXeU/LpDA2nLaDQHfynGcUNHb+iTrSQ3oWWXDj511vbJbEcsHiScM= X-Received: by 2002:a05:6402:1774:b0:5d0:78d0:f845 with SMTP id 4fb4d7f45d1cf-5d081159fccmr24776a12.2.1732659002867; Tue, 26 Nov 2024 14:10:02 -0800 (PST) MIME-Version: 1.0 References: <20241122-vma-v9-0-7127bfcdd54e@google.com> <20241122-vma-v9-2-7127bfcdd54e@google.com> In-Reply-To: <20241122-vma-v9-2-7127bfcdd54e@google.com> From: Jann Horn Date: Tue, 26 Nov 2024 23:09:26 +0100 Message-ID: Subject: Re: [PATCH v9 2/8] mm: rust: add vm_area_struct methods that require read access To: Alice Ryhl Cc: Miguel Ojeda , Matthew Wilcox , Lorenzo Stoakes , Vlastimil Babka , John Hubbard , "Liam R. Howlett" , Andrew Morton , Greg Kroah-Hartman , Arnd Bergmann , Christian Brauner , Suren Baghdasaryan , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , linux-kernel@vger.kernel.org, linux-mm@kvack.org, rust-for-linux@vger.kernel.org, Andreas Hindborg Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: C4DD2C001D X-Stat-Signature: 49h6f1m13r3z4ja9mykw7m6cm8ruew45 X-Rspam-User: X-Rspamd-Server: rspam09 X-HE-Tag: 1732658996-391012 X-HE-Meta: U2FsdGVkX19SDpWWanF3IgQYt5vLsLBW2wgqfkQlzYm2F14argq8Ny+DEBoyTwT1CYWD3oDhnCPR6hZuqsVq6O3K/wsgtTn6+95gch5CYl4oV2gaKuBN2KnoojAyoVH0Yj2tHduVN+XWoHIqUarJ7/uXNz2VYso/+1/fOucMfGHrSXZe0Ldyu4pGZj373flp9ShZuJn4WhHdWsGhnJMuQ1EEaS9JkWuts8Zymr4azg/kyQ+t89ikeeI0V9j5fs8TixGA2xyJwQUa4fCYBechelUHcP8jI0wl3PNuiMCbBF6bRb7Z1sU8/qquqf6elARkt6q7z5rIHwZGRAG56GKxGwwT0hEsdrsxdh9tTfMQC0kUMHohBZTmFSQBxohCz2RoZl6siWwNjEEAZ5nbEm/IbKX79wQ9yuoulr1w4JXIKDGt0YwJUe2IiK7G8A4RjIVBSPmIj/ByLAG0GQ8R3mYMtxG6tmHejq4qESCS8/jJ1zbUU43mz2/2DtRe1EZb1AGwTI23EO7EINuEWLvgLcdKlLNGg5HU4pUgEtFJWPRqDcUGMtE7S4BA37/Qt/ioIb+Wa3eRaUsj1mpt8F1SOEZvbcfN2aQv81LLpfvckKXA7Uz9P9GR5EvXk7/iDR2nji9PeVfltJmeZYL2q+Gxr+zdBWSq4mQt/99mjNZvXyvQIE1a+t/vR/OSUC3UselfBhcqMnvCxWVf2W1NnN1W76PB4GhsPE5gJogzibtNZeQ4zV7LHLv594s+UCeretc4Cxhmtl8zQxGFKqIlPIcmZhC+LPFy/xitbgTHbpq92XUDxk4HGqVgaYCGz0i7Xc4kOxmWHnPI2iUMazRfEnxLgr+1SOdnapEfCFfoBFW/a8+nyQE1eKrLS3oSAYX0HbtwHO5x2GwNZ5OCMeN+LlJxSb2CsP8diVbe1fQ3huzIwu7ZGerj/ltUEyElGhI/WZZ+7jIy4OU5TAhnIQFPKlrTZAp 6w4R4ny8 xz7CfnTbiHvD2GngBKQApzOZaQ2BRAedBSzwr3afcAetFsM20INYr9lsMiCdTjyg285jWIL8Lv7d56ao0tDbeMP1mx6eMNxvGm5AnJAc5VwuACXUnhsiY8kQm35PoHh4HVyax0xLbi1G06SeNntRwkBZOXZKn7GA8QA4sYbS7IYUNHReSmRIQo0KlTSac2s1PzanfP0y9miG73++WkfJU/QKRVB3FWL3I5yeN4hBrQhe3sASv+Og6SICe8WSsW2u9fAh1NJcNRNqyJ8vVynXYQFF4fE0aLUtwuLIAx86nHcFxqcfBx/wzCQfRgaasDx4H6irZ15h6k4y+0vfL9QNVzfJVIPto3/Iro7IxBzZ6DF9l1TE= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, 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 Fri, Nov 22, 2024 at 4:41=E2=80=AFPM Alice Ryhl w= rote: > This adds a type called VmAreaRef which is used when referencing a vma > that you have read access to. Here, read access means that you hold > either the mmap read lock or the vma read lock (or stronger). > > Additionally, a vma_lookup method is added to the mmap read guard, which > enables you to obtain a &VmAreaRef in safe Rust code. > > This patch only provides a way to lock the mmap read lock, but a > follow-up patch also provides a way to just lock the vma read lock. > > Acked-by: Lorenzo Stoakes (for mm bits) > Signed-off-by: Alice Ryhl Reviewed-by: Jann Horn with one comment: > + /// Zap pages in the given page range. > + /// > + /// This clears page table mappings for the range at the leaf level,= leaving all other page > + /// tables intact, and freeing any memory referenced by the VMA in t= his range. That is, > + /// anonymous memory is completely freed, file-backed memory has its= reference count on page > + /// cache folio's dropped, any dirty data will still be written back= to disk as usual. > + #[inline] > + pub fn zap_page_range_single(&self, address: usize, size: usize) { > + // SAFETY: By the type invariants, the caller has read access to= this VMA, which is > + // sufficient for this method call. This method has no requireme= nts on the vma flags. Any > + // value of `address` and `size` is allowed. If we really want to allow any address and size, we might want to add an early bailout in zap_page_range_single(). The comment on top of zap_page_range_single() currently says "The range must fit into one VMA", and it looks like by the point we reach a bailout, we could have gone through an interval tree walk via mmu_notifier_invalidate_range_start()->__mmu_notifier_invalidate_range_star= t()->mn_itree_invalidate() for a range that ends before it starts; I don't know how safe that is. > + unsafe { > + bindings::zap_page_range_single( > + self.as_ptr(), > + address as _, > + size as _, > + core::ptr::null_mut(), > + ) > + }; > + } > +}