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 29C45E7719E for ; Mon, 13 Jan 2025 10:17:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B62866B0083; Mon, 13 Jan 2025 05:17:21 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B12656B0089; Mon, 13 Jan 2025 05:17:21 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A01646B008A; Mon, 13 Jan 2025 05:17:21 -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 7C89B6B0083 for ; Mon, 13 Jan 2025 05:17:21 -0500 (EST) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 307141A1BC6 for ; Mon, 13 Jan 2025 10:17:21 +0000 (UTC) X-FDA: 83002026282.26.4CDFD92 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) by imf24.hostedemail.com (Postfix) with ESMTP id 43A94180003 for ; Mon, 13 Jan 2025 10:17:19 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=AAiDMy57; spf=pass (imf24.hostedemail.com: domain of aliceryhl@google.com designates 209.85.221.50 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=1736763439; 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=IVwLccJ/qBNtLBYtLIsjswh7rnPTuhm4wsmmDihDcOY=; b=rJDkzQZvxkD4iC40zUKu126fkEUZHzczKr/znbE6khrLFafShUmBzdkxibo3NPwNa1fZVa B2uutRd4ZefkB6LSvNVY/YY+6XOJFT4ScslAz3a/uOeI5DIbz9m7wMDTYZ6XTH4qXEN0Ge bMWr86ARsWq/wGc9WtZw1Q3WPO83h6k= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=AAiDMy57; spf=pass (imf24.hostedemail.com: domain of aliceryhl@google.com designates 209.85.221.50 as permitted sender) smtp.mailfrom=aliceryhl@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736763439; a=rsa-sha256; cv=none; b=zc9qWXbS76dLNnRcxidn6czF6YbW15GH9ywT2e7l+oBZPCrGvrFzLAp9k0lklW1vDwUel9 5XM7GcJf3e7iDHHW1qxPa9QvE8OrFiixl8Eq4ifUUCdRIektIbCiVmJzZ5suE0sqFYOVI4 DZBn3izvBTi+mGECXsYyK93gTySLYtw= Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-3862b40a6e0so2200142f8f.0 for ; Mon, 13 Jan 2025 02:17:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1736763438; x=1737368238; 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=IVwLccJ/qBNtLBYtLIsjswh7rnPTuhm4wsmmDihDcOY=; b=AAiDMy57BW2taqNl/6qVdJJ3KYZZJAVWrbSxyFpOK1jLX/K0KbbmsQTpwua76AdkCH sUb5xSrUfpaF7xzMbNyfS2YK7p20ytq4nIY8JB2eKWrpb2ySWfSCO9Ii19RNy/05Zcrf lNMwPUtvYzbJ/Uv7Sv1DZnjsWaddtTRsnkkydljos4Pyjt1k9008u4lNe5iycaHclNZ0 4YdP59ntMKY3B1az9YrXZOd+Evoc9V011VKcAaizPtEoFT2f2VLQg9QJiCHETQ3kfY48 CzAREnRI/YX612X3+NcZkuv9N7gMmAdqofzTCzrAaSYX+VCvGLSJCAzlD3fOKFMk9aI3 AhMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736763438; x=1737368238; 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=IVwLccJ/qBNtLBYtLIsjswh7rnPTuhm4wsmmDihDcOY=; b=wBOadL6rlT/EuleZPtSebwurhpGq6HkqGux23kqrazkTlceDF+lfKL1pBj5LSRbe1Y Dwu0cDs+sU2V0h87qW1wRZlSyqYQTGXubyMlI++UKtOReqW0q3d6Itee0aG5OKX5SFKv c5iDGIfiFIHveqEvjbHoj3nD9KLM+7rW4u0+tehCnmXt1TzGMpr/3FcjN96rq8NVy3fK 0wnGEIcyY5AvejB+udIAkQkWwA9twTwZ+dTl0zX5X2Ttbl5G5JVj28Sf1pUnTIE3J6c5 iTYsNfQRuNssvy0W+9NdmVrfjlTtIvi06vtJ6pWJh0qhVDO8BUXPSiFCwkKTRsN6ZZ6V zf+g== X-Forwarded-Encrypted: i=1; AJvYcCU6yZHOa/KoIkYTqVbEitFZQF6YXGdJUei8Q+/lvPdztR81BDo6u/l5UCnAQp0IRx8VRCcSNzaDaQ==@kvack.org X-Gm-Message-State: AOJu0YxNsXGu3yJw4FOwN7os4jTGvbkh/oIgCD40sLDH6ZjfSO9dQKdG GICaRJ5N0sbtuY1QUZgaw89m//iaVHARiAJju6oCPjpxSPqKmXJITOMSmIWhZ7KVqO6TzSZzsZA r+cb8/b/+tAszjwqWDYMXmkgEKIceprHBTwSq X-Gm-Gg: ASbGncs9lmbHG0cvoDFeUL6+x709+pbpJB22nJwhIaPVpKiUo1Fixmpc0jhAF11vibq HSLFuRaAkHcwo+4NUqBtLFv1NDmzGgthgC9P1AqOkv7FH/5UzPuVUcbUVZ1ljNFJKnjRj X-Google-Smtp-Source: AGHT+IETMQpwaCZqoV6SxajS/MhMZGoNm6bmFVOkqmqiwnQcQTve9gV6I95ylPTQztElPYhJaU0mnFYr8V1Z/nxoBgU= X-Received: by 2002:a05:6000:4023:b0:385:f7a3:fed1 with SMTP id ffacd0b85a97d-38a87336e53mr18975373f8f.44.1736763437617; Mon, 13 Jan 2025 02:17:17 -0800 (PST) MIME-Version: 1.0 References: <20241211-vma-v11-0-466640428fc3@google.com> <20241211-vma-v11-6-466640428fc3@google.com> <87o71bagpf.fsf@kernel.org> <87a5c0bdr0.fsf@kernel.org> In-Reply-To: <87a5c0bdr0.fsf@kernel.org> From: Alice Ryhl Date: Mon, 13 Jan 2025 11:17:06 +0100 X-Gm-Features: AbW1kvbldJAN_sLM0Yo64QYawu1Ocbm6TKYsLCUSYC5fjd6C863RDivQhYbqTOY Message-ID: Subject: Re: [PATCH v11 6/8] mm: rust: add VmAreaNew for f_ops->mmap() To: Andreas Hindborg Cc: Miguel Ojeda , Matthew Wilcox , Lorenzo Stoakes , Vlastimil Babka , John Hubbard , "Liam R. Howlett" , Andrew Morton , Greg Kroah-Hartman , Arnd Bergmann , Christian Brauner , Jann Horn , Suren Baghdasaryan , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Trevor Gross , 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-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 43A94180003 X-Rspam-User: X-Stat-Signature: 3qx8jobefiq6ngadwtpd5fhxxb8dn48t X-HE-Tag: 1736763439-325372 X-HE-Meta: U2FsdGVkX19UAg8uNpTEsZl6SeL49hukl7zDHPRB6nPvXzroyAgGSyfTvUWTG+43T/goj21NdckQ8SY/VcT4kSuZAo2pcDaJhlLnP83uvnwl0Hlkhz+4ibMtyQzP9RALXWAllrM+Ccqkvp+lpaXvXIE9Ff0q02fNBceD8uPRcU6St4I7rNUo3JCaEOajqp5Choalm5kvpTAC54lGEKehaqKPEmsow/FBL77Eo1XqX2E6r2bXcWpX+3S+Gw6odP9kQ5o6GmksdsPgtxCNlzS0RRzn6ZRGeHfeYo3fIIxqLYGGRVWmvjCnibT27FHmrg/PAaONxwvBsRMACb9iJicb0RsqkJb+IIS5bb8CavNIonntslzKexkSx2Gvb1/X3p8Mcr3QyL+6AaLWvw0Hwfl/tUgEmhtgQq7TQfsXSLwpJUme4IJw1wvXmU4lOHnh7pXaEHt6xS660lEie62U5DqpsVeUICLMclCFxW7/0Sfd5DA5qGkbp7e55Zo8yZyK5yP714lhAXrtNcVgEWzHc6vKY0LJiZaIexNI5sgieL8GE990AIGA7oVgXe3zIZ2H6vs3yXum0wMpXHnocY+Ql833PRFoH9zW2oOL8u4I+nPGSkZMqbwH9SA44hT+U8GdkWz61EkdI69gXecS2iYsq1fOCVt9NFNE65KCrZOvFljj7ORB1QpMq2G1EViWIYrCTNWRvnJ19DvkQaYfS0blm8TlPExRj7vAyVCUNqFENkfXfnwPUW2RdPA06LR9vMFs5TqAvLh0UQ9ZFXbRo/d0jaTk/McdaNFmZ18knvfuM2y+Pw48CHlQSZ+93Zex+MfsdUweqpslUwPLQhOhTHNqI5nvcOwV2TI+JNcO1iP/QQ3/3F1z4bo/N+GMCzo8N5QFwyYalxbLGTBJU7cVxrEaqFtq4WlSs+/s67bqYxi9gWxQ9xDPdETxl26aLjoXHI8hWJFP2wnj77Z8Y+WTr0H2SgK rfKMCjmz Glc8WW9Iq5mv9kEO8L9u9n0FTYQfIgj3/J8vMul6Z5/jfXfsFdkgonriKohcCYQhbxAXh203r54dqmuWQY5Rt6xjI47/q3J6uDDULuB3Pxx1sYB+rGR7YNk2iB4KIjrwNfOrpZSt9XTXpxUUwbT00TEkOchL0A8HwNAhrYeItkZv9qhgN6htrC6s6JJkrF1+O9QnE1ZTqDYXKRdAwLJ+tCchXy1KPMjJWy3CFidSlA5M8Dlke2K8XZXqubdPsmmEP5M2L04AVZE1BuPPEw+uTkvo4SD3rmACzk6ZnIDytRJvaWGktIJrke8isQSjyFpgaq1HZra40BZKf6X69OFz4uyKRR1tFIFfxLQyKuIVVOxEF66glsGGzDcq1QxfO8e3C+Mr6 X-Bogosity: Ham, tests=bogofilter, spamicity=0.400923, 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, Jan 9, 2025 at 9:19=E2=80=AFAM Andreas Hindborg wrote: > > "Alice Ryhl" writes: > > > On Mon, Dec 16, 2024 at 3:51=E2=80=AFPM Andreas Hindborg wrote: > >> > >> "Alice Ryhl" writes: > >> > >> > This type will be used when setting up a new vma in an f_ops->mmap() > >> > hook. Using a separate type from VmAreaRef allows us to have a separ= ate > >> > set of operations that you are only able to use during the mmap() ho= ok. > >> > For example, the VM_MIXEDMAP flag must not be changed after the init= ial > >> > setup that happens during the f_ops->mmap() hook. > >> > > >> > To avoid setting invalid flag values, the methods for clearing > >> > VM_MAYWRITE and similar involve a check of VM_WRITE, and return an e= rror > >> > if VM_WRITE is set. Trying to use `try_clear_maywrite` without check= ing > >> > the return value results in a compilation error because the `Result` > >> > type is marked #[must_use]. > >> > > >> > For now, there's only a method for VM_MIXEDMAP and not VM_PFNMAP. Wh= en > >> > we add a VM_PFNMAP method, we will need some way to prevent you from > >> > setting both VM_MIXEDMAP and VM_PFNMAP on the same vma. > >> > > >> > Acked-by: Lorenzo Stoakes (for mm bits) > >> > Reviewed-by: Jann Horn > >> > Signed-off-by: Alice Ryhl > >> > --- > >> > rust/kernel/mm/virt.rs | 181 ++++++++++++++++++++++++++++++++++++++= ++++++++++- > >> > 1 file changed, 180 insertions(+), 1 deletion(-) > >> > > >> > diff --git a/rust/kernel/mm/virt.rs b/rust/kernel/mm/virt.rs > >> > index 3a23854e14f4..6d9ba56d4f95 100644 > >> > --- a/rust/kernel/mm/virt.rs > >> > +++ b/rust/kernel/mm/virt.rs > >> > @@ -6,7 +6,7 @@ > >> > > >> > use crate::{ > >> > bindings, > >> > - error::{to_result, Result}, > >> > + error::{code::EINVAL, to_result, Result}, > >> > mm::MmWithUser, > >> > page::Page, > >> > types::Opaque, > >> > @@ -171,6 +171,185 @@ pub fn vm_insert_page(&self, address: usize, p= age: &Page) -> Result { > >> > } > >> > } > >> > > >> > +/// A builder for setting up a vma in an `f_ops->mmap()` hook. > >> > >> Reading this line, I would expect to be able to chain update methods a= s > >> in `Builder::new().prop_a().prop_b().build()`. Could/should this type > >> accommodate a proper builder pattern? Or is "builder" not the right wo= rd > >> to use here? > > > > You cannot create values of this type yourself. Only the C > > infrastructure can do so. > > > > What would you call it if not "builder"? > > It looks more like a newtype with a bunch of setters and getters. It > also does not have a method to instantiate (`build()` or similar). So > how about newtype? I don't think newtype is helpful. Ultimately, the f_ops->mmap() hook is a *constructor* for a VMA, and the VmAreaNew type represents a VMA whose constructor is currently running. The "method to instantiate" is called "return". fn mmap(new_vma: &VmAreaNew) -> Result { // VMAs for this driver must not be mapped as executable new_vma.try_clear_may_exec()?; // we are done constructing the vma, so return Ok(()) } Alice