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 59B4DC3DA4A for ; Thu, 1 Aug 2024 14:07:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C3A016B00A2; Thu, 1 Aug 2024 10:07:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BE0AE6B00A6; Thu, 1 Aug 2024 10:07:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A59546B00B3; Thu, 1 Aug 2024 10:07:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 84EE06B00A2 for ; Thu, 1 Aug 2024 10:07:20 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id B03FEC0E37 for ; Thu, 1 Aug 2024 14:07:19 +0000 (UTC) X-FDA: 82403853798.11.7D7E582 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) by imf08.hostedemail.com (Postfix) with ESMTP id 8F65C16003C for ; Thu, 1 Aug 2024 14:07:17 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=QrYDLEr0; spf=pass (imf08.hostedemail.com: domain of aliceryhl@google.com designates 209.85.216.54 as permitted sender) smtp.mailfrom=aliceryhl@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=1722521180; 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=dyBBuohO0Hs+IuvszCA+reGtTKvxPWc+GPkqz6wW5/c=; b=F1VCx0da/bLmLqE/SLutzAHioiTthPu0sv/cI/tbZhh5jp+jOka/a5vvvA250In+2O5cXH iFOQ/ZuvnYFHeqWYQLdUz1lDV2/TjvAVe6Rf9fiopssGncq+brKz8obHT3zqCruJY/q2tc nnMkrjiHhHijBteIqMnOipK4fXBpAa4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722521180; a=rsa-sha256; cv=none; b=1BFhKteloCTHvUcCmZDXOvlZGRoQbWOVGHu57OG94qxEteWyCNKYX7QF3TUNa0/U/qSGQU oeGZeZANDh+C/vvrkjVzuDd7XOHLDj2CaleEp1Z0Ka6N3s7uSOCtlqV7jDNJNaoxC93myw TWR7zvqct2HFw+MzHXiN3CKzPfhBiUI= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=QrYDLEr0; spf=pass (imf08.hostedemail.com: domain of aliceryhl@google.com designates 209.85.216.54 as permitted sender) smtp.mailfrom=aliceryhl@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-2cb566d528aso5392363a91.1 for ; Thu, 01 Aug 2024 07:07:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1722521236; x=1723126036; 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=dyBBuohO0Hs+IuvszCA+reGtTKvxPWc+GPkqz6wW5/c=; b=QrYDLEr03hEXyM7lYdpX5TPCNAgP7U1+klfyLmIeeWqxAgfcGhnhgTIZ3tRsdjuZU3 uVsfQSQefbsJNUK5OUeh8pfErDvsYyydwT38wwigUfctDH1hESkdeIDNrGrQeuCUnmUo pwZTxdegWID1vg6d5uaBM6XStvuCjUXOy/eu3WqmPrOwdXJWgdCK7A9C5EOew1nnmMHg EBRAlMMgsDOz2waKRMIkKuaUfpKro/oeMLlORCvDgzqkNaosKnKJwGO7nznHxC3VPAEw zqFOfH6ZZroihD3Fy0HZFWMo9lXCv7uJE1Sh1zDa4aEYgNtCH2xp2yoSnLcxo6ijkKRR yy1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722521236; x=1723126036; 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=dyBBuohO0Hs+IuvszCA+reGtTKvxPWc+GPkqz6wW5/c=; b=bLqPBiuqyp8qvCn7mo6dJiLq8VQ4yQV05gXdUX4HyUjLB4V0ZTAlIyR2zxrQLGzrWd +zyx0/8t6Cbt6x3wDkW9B1Mi/OFG+XzhjcA//TAbh+ev36vfaBcs7SmQBm9UU+fRlbXP mcI04f0LtTtQb0aWh2hYqYmUzDqUhYGYHSY/do/Jgd2wgJ+cACdPIh/AbKgXBzvtTEJJ MKRLao0+9Jbgc/a2lJZZZg11C8xVxyi3Ka5kPUF+Yvr8yDqBi0NrJnIhvpIF8jbbpCOj 6/eBPA90io1AHcoYPY+xb+bbE2E65T8DYJ6B1IJ2jj48dOivZsfJayBnIEDyHYo/AK8B ldGQ== X-Forwarded-Encrypted: i=1; AJvYcCU+qAlb8Cx9ete8KQbvby9RI7e/6v3PHXC7WNpBWRLHMF3B2EFQjpJTJfmBDk0i0lqDlHPiC4YvdQOvH2ttx/kNUxw= X-Gm-Message-State: AOJu0YzUrbpDDRvbK1dqEHLx5fPfpBh5aLN45bjqERT+iXGIJRobUW/u yzj7zMG6BE6RKHkJo9/srsrhcovEHbAadSx4HzKmYgW1usb6vgIP5hbJWCWlSIE3QdlfYExCRso BIqzPlODDYZ3m7QIUyalQcan0TwHLDmsElRhj X-Google-Smtp-Source: AGHT+IH8wLTy4OfUI1N/iRPbfsy9jlveCpM3VPGUpvU5ua9Ijad6Tf3V2cLkv7wRzPOiYho4OXsD/vmRzOEqdosk0dw= X-Received: by 2002:a17:90a:9e5:b0:2c7:c6c4:1693 with SMTP id 98e67ed59e1d1-2cff9487f9emr346403a91.21.1722521235525; Thu, 01 Aug 2024 07:07:15 -0700 (PDT) MIME-Version: 1.0 References: <20240801-vma-v3-1-db6c1c0afda9@google.com> In-Reply-To: From: Alice Ryhl Date: Thu, 1 Aug 2024 16:07:01 +0200 Message-ID: Subject: Re: [PATCH v3] rust: mm: add abstractions for mm_struct and vm_area_struct To: Danilo Krummrich Cc: Miguel Ojeda , Andrew Morton , Alex Gaynor , Wedson Almeida Filho , Boqun Feng , Gary Guo , =?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Matthew Wilcox , "Liam R. Howlett" , Vlastimil Babka , Lorenzo Stoakes , linux-kernel@vger.kernel.org, linux-mm@kvack.org, rust-for-linux@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: 385i6u4199x85kpfpok9cza37guz3wtt X-Rspamd-Queue-Id: 8F65C16003C X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1722521237-161045 X-HE-Meta: U2FsdGVkX18kmFfb7LKGboamNeXp/6TtD7B6RRjHJ+9r5Van9G5ta0MIhjqZnUJhxyOkt7yzK6HnkVmuGDq7/H1r9ILj5cXyc+9AhD27/DCEIaXP4Ua8dusoLRbgOeLGM/789w/2dyP1KHiHmYFDMREbnm6caKY/1KhqIbXl6TAmMKd6e6DBlhNsChSicoxqKEGCB5YncZUYprkUcDIj3IdU2RzCM6G4WEvdPtta4Qp0fuoK7kMtezObXNCNQWgmlvbJY7clMkRduzGvlzGkA92kJygONyIjDEvFhfEN+BOMZogzadIYutkBYi9qE8Z/COflrbrKX3dE36GBZ3tO/noaJAO8M8U/oJz1JeeCgqQQhbSAjV3vvg8V0Bbz3G3HBsuf7CISwWfq13ifKrT5DVMjm1GLEw6d0jJat1Tye8YtPGOoyfXkzAeSRNjpvHwtQA9N7CfwM5Bgq/JadCEP6BZjO0WeqHYr53Ic+fpeDUiXtZdW+mpDyeJlfbnZC7wIaF+CmoZQHupskZ7pIjwoPO738BjoZj52EP+rRdaUAwx78iWhqCHJKZIQ+wLkeOOP23TGrCX+Zh2/VBT2W2FgtlMGHbBNdqaNC8Bmz3N83lqG0ZC3+ehA08IpW05hTmOHgV/PBAR8FsWXiD78ptPRgJNqDz5nDKvNzUZxgJLNlPsG4ADQrYp+XMeWkB1siS3j4KurYLmegIdgoaIqGZfLlZworHuWdQnPwVh7RVdiSBWrSArijVg7UptE7ryHjRf4iDG7Eito5ffOT3e2N/VaXODvkIK99qAi5wSpy/7Vu6tARu8Yg20RwddTxMpgF/EfenWMoUVLzjF3FNlXnsJlzBRf2m4XMlYXobLarcEJmBDh+wX6/aelgCcMoEAsTJWF97D4qVlxF+hz4zPMmVS3a2ot8IO+PvHr2WZ5712OlyhTjP74446WBycw2n/DQD0RiHNOpLqr047QAhQ852E 9yGC9u/Y nGaUlthPufrOTSrywW58I8CNJq2doaJAahF1NMQVQzC4yH01QvgpWJcwnCX68WvWvCTD2teCr4q+w5gQxIqjhqb3ZBrGffSIiBK63L8L/IzaP+3IOOgIKsRnE+gr2713HfBsqyOqt412yruWThSnc0x7S+21q+a4AEK+CjeuN0hFVLqxCYgp0mTJJ/wJ1jUtB3l02YXwwEDxoqaNK3jKpqEXE4xY9FY76lrkYQr0Cf8GLJXZuu0mD8eG+VAKjcosIuTuNToF8ba8fd+QBQvI+jlZQjIdfLnrIAD+7YjLTu5O92NDnt/X4xkwfRruqVydwbxkbbQy++PzVeJaOycjXMtboKeJPXtNbSuVCxQO5F6kkXf6KU0hluA86/BznEtdSa56cdZBmiDhpE3ZQWkoIHi5l6WRginiwrUdP X-Bogosity: Ham, tests=bogofilter, spamicity=0.000010, 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, Aug 1, 2024 at 4:02=E2=80=AFPM Danilo Krummrich w= rote: > > On Thu, Aug 01, 2024 at 12:58:45PM +0000, Alice Ryhl wrote: > > This is a follow-up to the page abstractions [1] that were recently > > merged in 6.11. Rust Binder will need these abstractions to manipulate > > the vma in its implementation of the mmap fop on the Binder file. > > > > This patch is based on Wedson's implementation on the old rust branch, > > but has been changed significantly. All mistakes are Alice's. > > > > Link: https://lore.kernel.org/r/20240528-alice-mm-v7-4-78222c31b8f4@goo= gle.com [1] > > Co-developed-by: Wedson Almeida Filho > > Signed-off-by: Wedson Almeida Filho > > Signed-off-by: Alice Ryhl > > --- > > Changes in v3: > > - Reorder entries in mm.rs. > > - Use ARef for mmput_async helper. > > - Clarify that VmArea requires you to hold the mmap read or write lock. > > - Link to v2: https://lore.kernel.org/r/20240727-vma-v2-1-ab3e5927dc3a@= google.com > > > > Changes in v2: > > - mm.rs is redesigned from scratch making use of AsRef > > - Add notes about whether destructors may sleep > > - Rename Area to VmArea > > - Link to v1: https://lore.kernel.org/r/20240723-vma-v1-1-32ad5a0118ee@= google.com > > --- > > rust/helpers.c | 61 +++++++++ > > rust/kernel/lib.rs | 1 + > > rust/kernel/mm.rs | 337 +++++++++++++++++++++++++++++++++++++++++= ++++++++ > > rust/kernel/mm/virt.rs | 204 ++++++++++++++++++++++++++++++ > > rust/kernel/types.rs | 9 ++ > > 5 files changed, 612 insertions(+) > > > > diff --git a/rust/kernel/mm.rs b/rust/kernel/mm.rs > > new file mode 100644 > > index 000000000000..ed2db893fb79 > > --- /dev/null > > +++ b/rust/kernel/mm.rs > > @@ -0,0 +1,337 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > + > > +// Copyright (C) 2024 Google LLC. > > + > > +//! Memory management. > > +//! > > +//! C header: [`include/linux/mm.h`](../../../../include/linux/mm.h) > > NIT: srctree Ah, thanks. Good catch. > > + > > + /// Returns a raw pointer to the inner `mm_struct`. > > + #[inline] > > + pub fn as_raw(&self) -> *mut bindings::mm_struct { > > + self.mm.get() > > + } > > + > > + /// Obtain a reference from a raw pointer. > > + /// > > + /// # Safety > > + /// > > + /// The caller must ensure that `ptr` points at an `mm_struct`, an= d that it is not deallocated > > + /// during the lifetime 'a. > > + #[inline] > > + pub unsafe fn from_raw_mm<'a>(ptr: *const bindings::mm_struct) -> = &'a Mm { > > I'd just call this `from_raw`, like you call the counterpart `as_raw` abo= ve. > Same goes for `MmWithUser` and `VmArea`. I've been using this naming convention since this discussion: https://lore.kernel.org/all/20240401-marge-gepaukt-9a1972c848d9@brauner/ > > diff --git a/rust/kernel/types.rs b/rust/kernel/types.rs > > index bd189d646adb..143a2bf06941 100644 > > --- a/rust/kernel/types.rs > > +++ b/rust/kernel/types.rs > > @@ -366,6 +366,15 @@ pub unsafe fn from_raw(ptr: NonNull) -> Self { > > _p: PhantomData, > > } > > } > > + > > + /// Pass ownership of the refcount to a raw pointer. > > + pub fn into_raw(self) -> NonNull { > > + let ptr =3D self.ptr; > > + // Skip the destructor. > > + core::mem::forget(self); > > + > > + ptr > > + } > > I think this should be a separate patch. Sure. Alice