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 036A0C4828D for ; Mon, 5 Feb 2024 17:25:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8C9E66B0083; Mon, 5 Feb 2024 12:25:10 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8772B6B0087; Mon, 5 Feb 2024 12:25:10 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6C9776B0088; Mon, 5 Feb 2024 12:25:10 -0500 (EST) 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 56BDD6B0083 for ; Mon, 5 Feb 2024 12:25:10 -0500 (EST) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 1A871160559 for ; Mon, 5 Feb 2024 17:25:10 +0000 (UTC) X-FDA: 81758425980.05.1B076CC Received: from mail-ot1-f41.google.com (mail-ot1-f41.google.com [209.85.210.41]) by imf24.hostedemail.com (Postfix) with ESMTP id DD932180023 for ; Mon, 5 Feb 2024 17:25:07 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Cc3qgB05; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of boqun.feng@gmail.com designates 209.85.210.41 as permitted sender) smtp.mailfrom=boqun.feng@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1707153907; 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=K+cat8wRiFE8ayUEL9AAC8rZ9xDFXFmCN5IZ9qalElU=; b=vseQJEGLByS8RujQuoOlO2QQcmHP25quGfoUOoEbjXiQoIEF9vIU8/C+I87MtKgiUic8pQ tdldeMo8oXjCTWnftuBv3V9SQrBJz3CWqM3mMtEgYfNcJeUnA7Kv6nf6FfoBiqRHlh92/n gSKP6Op8QS78IBv/W34kls54FiAVgLM= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Cc3qgB05; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of boqun.feng@gmail.com designates 209.85.210.41 as permitted sender) smtp.mailfrom=boqun.feng@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707153907; a=rsa-sha256; cv=none; b=Vcq8Jj+ZB75VeZhcluvoeJkqhbAs5OqEJv+nsIhw9METhJEj+moXqxXr2P/A8jyRu5oWt/ /T/VTtEVsX0L6XiUnK44Xs7Wco1WIJLhmzM29STgErTwzb3NQ9iKqxh55dM/YhaseBiCic dHs8TVkf4ATDCc0WT+Sy9d1XG0Q3hg0= Received: by mail-ot1-f41.google.com with SMTP id 46e09a7af769-6e1226b30ffso2677106a34.0 for ; Mon, 05 Feb 2024 09:25:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707153907; x=1707758707; darn=kvack.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :feedback-id:from:to:cc:subject:date:message-id:reply-to; bh=K+cat8wRiFE8ayUEL9AAC8rZ9xDFXFmCN5IZ9qalElU=; b=Cc3qgB054+xrPK8ByL+Od8rzwMUwytdZgW1WY4cezaft8zZzx3oNybkpg8CiJgOU+5 NjMrKq1SFvmuO5uYSlwCsNyY7Dk+E/6zZA89cXv161YmcTnCOy9A4zV5FNFNOORjmZSF E7Wfoyq3Esc//f9Xu5zoMp91VPz4bPMAlwxeUgbx5uQ/HWD9PjFId77F5/E/IwobtqLx v6qcYdXuZs8Pf1uvb6+4WLY06rO8TD7+sQzCqQFja+VRhdEQMsl++tAf3yN3R1E4lwS7 m8fbFEYa0OZVlIY0WdbB1s1MnrOCpGPxl2T8lInDkhNylhBHVCWb8H9jFt3d4W4Emisq P4ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707153907; x=1707758707; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :feedback-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=K+cat8wRiFE8ayUEL9AAC8rZ9xDFXFmCN5IZ9qalElU=; b=V1+XvKaqIWGXnk1OkWYb+EGhOjHnS8IZVDmMyDNoS06aG9FpMwJr1ieoj1di6b5qgz gg5xKOoxwFSqzHF3FVdUaTyPlKS6gpAuShUzlLnlNyoJQGHI4URzIcLlZbSKG0hZw3Lp odqM6/La+DlOGecZ7w+Q8NoOuerPzn1DMVUeLAiVfAUYmPgNgobsRxLehmgHmEpARngv wHZZpHkPtug5Vbv7ICECDspEdVGxZbCJn0gbqgfynRA/Q6hxem73eU2KK7HL9QFJ++TW Im1VnRYqxxIfcpPVcZTVs2Eux2sXNYrNQm0qTTSkRH4Ij7HGaQpwfCoyxrUypI6lzEQO f+tQ== X-Gm-Message-State: AOJu0Yy2SC9iG9aqV8b7lCqyS4DXO4sMdXb51F8IYpO9QirlHRmTJwMe qM6ol3yg5gBQbpn96pgYg2FcsHKJEsL2pSW/1XtDtIaVwIRh2nImJULBi+R0 X-Google-Smtp-Source: AGHT+IE2zf0CBtwqYDKHSINkdodmruF5zYLe0Iwxw1I5CLoZnpITPBXNBIEIi5EIs6pSc+YnsorQOA== X-Received: by 2002:a05:6870:5692:b0:218:7643:26cf with SMTP id p18-20020a056870569200b00218764326cfmr397934oao.10.1707153906935; Mon, 05 Feb 2024 09:25:06 -0800 (PST) X-Forwarded-Encrypted: i=0; AJvYcCVd1jCv1k+pmp2tP5dozwRgkWN3WSpCTmwZy8ZuZKKbPdDZGaiixHmFM8QfDNg1rmiefqgWfz4BFCBsd860M3PuUGMPZuZCRnzLZK0Lxq5YaSLZgIaCWUgciYZKI2W2G9yzbN19+wSwgnP/JYIdiqg3iHKGHOqJxja8v51QeOGU/9G7c3OwNsyxWCNpRNflOcqGCxSkJ+j77XDS7nqP+mGwclNRSkrdBAip300lOFg+04o69Aqy0ARALtyPMpzmh868LoL1AXfoEf5Mt6N/cEOJkIRVtgeANq/uEyjmJhGktrPqxHZvLLWd0gKFcLIpJKo8dn+W1CkIYxSrKmQpzx/KtZakZv8eq32RJlgZ46l8WugKBVG/BQTTh9vFCr8/bzvYllz4dLnk4W2H6uk0eNt2XGTrE3xMwduQbKrs/7hqazvE2f7UkcJ+g7igGxgRY6h5VylwtSQUDzZLkPInScxNk8dyawI81fCHpeZG9c9Mb4lYmWByhyRygmDf/5zTE/UtTr17BPwXLMeOeJG9VEvhV6J2Ge0rA28+5d8V/hHiMDiFAxSwp7yqmvaHuRpY4mkrenkuiHLllSKNgNotSh57+oMHUxVmkMC44D2lEl8o4gaVLOXOpnidKnZSM7+Pn4PSLVqvuoKLdUXJnBu39LcJ58e5epqfqTtyrL1H5cN5CTc2nzT6B7ZUoNKmvM5od0wEsF8ftbiEby98/1lUQdkC9LN9BZE+nOYg+GoU Received: from auth1-smtp.messagingengine.com (auth1-smtp.messagingengine.com. [66.111.4.227]) by smtp.gmail.com with ESMTPSA id b16-20020ad45190000000b0068ca40389besm162134qvp.101.2024.02.05.09.25.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Feb 2024 09:25:06 -0800 (PST) Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailauth.nyi.internal (Postfix) with ESMTP id 9FAA527C0082; Mon, 5 Feb 2024 12:25:05 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Mon, 05 Feb 2024 12:25:05 -0500 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrfedvuddgtdekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggugfgjsehtkeertddttdejnecuhfhrohhmpeeuohhq uhhnucfhvghnghcuoegsohhquhhnrdhfvghnghesghhmrghilhdrtghomheqnecuggftrf grthhtvghrnhepvefghfeuveekudetgfevudeuudejfeeltdfhgfehgeekkeeigfdukefh gfegleefnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epsghoqhhunhdomhgvshhmthhprghuthhhphgvrhhsohhnrghlihhthidqieelvdeghedt ieegqddujeejkeehheehvddqsghoqhhunhdrfhgvnhhgpeepghhmrghilhdrtghomhesfh higihmvgdrnhgrmhgv X-ME-Proxy: Feedback-ID: iad51458e:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon, 5 Feb 2024 12:25:04 -0500 (EST) Date: Mon, 5 Feb 2024 09:23:46 -0800 From: Boqun Feng To: Trevor Gross Cc: Alice Ryhl , Andreas Hindborg , Miguel Ojeda , Alex Gaynor , Wedson Almeida Filho , Gary Guo , =?iso-8859-1?Q?Bj=F6rn?= Roy Baron , Benno Lossin , Kees Cook , Al Viro , Andrew Morton , Greg Kroah-Hartman , Arve =?iso-8859-1?B?SGr4bm5lduVn?= , Todd Kjos , Martijn Coenen , Joel Fernandes , Carlos Llamas , Suren Baghdasaryan , Arnd Bergmann , linux-mm@kvack.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Christian Brauner Subject: Re: [PATCH 3/3] rust: add abstraction for `struct page` Message-ID: References: <20240124-alice-mm-v1-0-d1abcec83c44@google.com> <20240124-alice-mm-v1-3-d1abcec83c44@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: DD932180023 X-Stat-Signature: czqyxx4p9qtik9jki1idwbyi11m1x6y4 X-Rspam-User: X-HE-Tag: 1707153907-202077 X-HE-Meta: U2FsdGVkX19xJx4ju5asU3CRzSzIaoj4J9uwHAQ/C24ZlDZexVcwNl2vGKNiro28S3sqGpRZKucunQqsFmyBaM1HTgwQSRTMp8s5/TiZWTQ6rSOkk91rujspWHZmONcUuV5Bit5zXOuIKTuddX0mymuJo21i7wIQ/TmF7KKwQEgBtu3B8UGZ4PRQKCGeNQXgaZt/ktEuULu0ucYHLKyED4kH/k9A8qEZtO+ooOG5dMWC2N9COnyUd9q0yXGxnTw3Ct4mjGZ8qzLOr0AezC81yl3BPOUl8cj14YfxlqBeE5WPyGbbDxA+ab14rVXlID/EV0VNQPlYBJDtFYRary0uSb+GCk/GowEPmsaWSxpwUVeHpPA9iShDLPgL2LNAsZhzR9XGIcBTe4yDVFoE9HpPjNYFpxw4e8RRhQ2U8TKpCgblJqNiSQMqIjoSDXK7MUmtq4d3c+MAOPmLocIBXYNLf5A1WS6CCLbIwdaeV3jq52e3Qf4EmbPP5qzqTMTylZNvIx1dUzOEZEkyPgIoK8/OQyFVn1cN7Ydk3O2fkag78QrINzHsl3NTlcPN0oikuNED5D0eh3rNMNxNf3pii7fzx5o+crok9dLO/MRz5RNIi/Z97VztPOwQJS6ef/4qiwTzLW0rvK7/o2sHvY3YvU4eDWEUpCCXKR4uUQvavKj1AZ+XO3nTo2WWJVjIfDv7Pyd+w5NlT4exv8byMut+x3I6TZCWb85Nuo4HBdRIY98PzLQRBbu0nvD87wb3u8VrF/01zTCrfOyTTLcCdTKhwPbVYCPXjGvyq/vVtyqLq6hOK6alRpovG8uVZw2ZIfm4e275lwaqYvHquWE+viRLmfMEEWftaR9kPb/2x6MgrLCjz1u5/nAX3VI+HEvUQRHh/sHfn7psmeYl5huh5u8oBmsRJHN8vellG6xGickqU2n5niC4w+DDO+edMtvocKwRXebtR4ZscU6P00TeFws/b2U oHSZW3/r otL386HGOgXZh+Aos6o85Tj195AjRwwiyib9rzzT5zR8TmkJChtM9q92DWNfYUzlK4ZaPKcNYCHi6Xr7S3PlxsWO/FYEwmhtYo3j88J1hj5LB0i6x4eMvJ2FE1fhsoXN7p2dmcXhs8OHRNTCfrLXW5X+e6o1TIW8AdFa8CSq1RzR/kyq/OIMhIXf40gMb2jnR9DAf3BAeCMtDB0nxKhfFIs+x98t8VIoGhId5GAKKX6ZhiGTYA7S0fHGArlfibCWXQMqKb2ayy5pyhZoTnLF+peUGVbxbc9eDTUoN17rPD7LplUE5aFd+VHd//ddAlZlMosX4mOiEv8g2OCUIZ/Jhn4fipKwZU5JKbuTrgvr9K/mgLWpdXO4HFdqHBJOdAkbZVT51I/FXGx3l7Tck+v+K/2xw5Nqj3nS7c1WQZn0DmLUARlsiDhxJUm61E/eZvl4uKCgOWhD5vOYyVqoJ4fPQ+/acnp6D635xrVLlFSrLdW90PpdNsdWDmdb/2srAZz4n4rTIhaq9Qhzto1WZkSaUfGjcgz/GoOJ5gAU+DRsR803UVZ70QKOTclbfcE2WezNYjOlGSQrfIokB/n0fvKpIVS74cyjNiqunFzkEFexr6SAIjsY= 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, Feb 01, 2024 at 01:50:53AM -0500, Trevor Gross wrote: > On Fri, Jan 26, 2024 at 1:28 PM Boqun Feng wrote: > > > > On Fri, Jan 26, 2024 at 01:33:46PM +0100, Alice Ryhl wrote: > > > On Fri, Jan 26, 2024 at 1:47 AM Boqun Feng wrote: > > > > > > > > On Wed, Jan 24, 2024 at 11:20:23AM +0000, Alice Ryhl wrote: > > > > > [...] > > > > > + /// Maps the page and writes into it from the given buffer. > > > > > + /// > > > > > + /// # Safety > > > > > + /// > > > > > + /// Callers must ensure that `src` is valid for reading `len` bytes. > > > > > + pub unsafe fn write(&self, src: *const u8, offset: usize, len: usize) -> Result { > > > > > > > > Use a slice like type as `src` maybe? Then the function can be safe: > > > > > > > > pub fn write>(&self, src: S, offset: usize) -> Result > > > > > > > > Besides, since `Page` impl `Sync`, shouldn't this `write` and the > > > > `fill_zero` be a `&mut self` function? Or make them both `unsafe` > > > > because of potential race and add some safety requirement? > > > > > > Ideally, we don't want data races with these methods to be UB. They > > > > I understand that, but in the current code, you can write: > > > > CPU 0 CPU 1 > > ===== ===== > > > > page.write(src1, 0, 8); > > page.write(src2, 0, 8); > > > > and it's a data race at kernel end. So my question is more how we can > > prevent the UB ;-) > > Hm. Would the following work? > > // Change existing functions to work with references, meaning they need an > // exclusive &mut self > pub fn with_page_mapped( > &mut self, > f: impl FnOnce(&mut [u8; PAGE_SIZE]) -> T > ) -> T > > pub fn with_pointer_into_page( > &mut self, > off: usize, > len: usize, > f: impl FnOnce(&mut [u8]) -> Result, > ) -> Result > > // writing methods now take &mut self > pub fn write(&mut self ...) > pub fn fill_zero(&mut self ...) > pub fn copy_into_page(&mut self ...) > > // Add two new functions that take &self, but return shared access > pub fn with_page_mapped_raw( > &self, > f: impl FnOnce(&UnsafeCell<[u8; PAGE_SIZE]>) -> T > ) -> T > > pub fn with_pointer_into_page_raw( > &self, > off: usize, > len: usize, > f: impl FnOnce(&[UnsafeCell]) -> Result, > ) -> Result > > This would mean that anyone who can obey rust's mutability rules can > use a page without any safety or race conditions to worry about, much > better for usability. > > But if you do need to allow the data to be shared and racy, such as > the userspace example, the `_raw` methods allow for that and you can > `.get()` a `*mut u8` from the UnsafeCell. This moves the interior > mutability only to the mapped data rather than the Page itself, which > I think is more accurate anyway. > Looks good to me ;-) Thanks! Regards, Boqun > Leveraging UnsafeCell would also make some things with UserSlicePtr > more clear too. > > - Trevor > > > Regards, > > Boqun > > > > > could be mapped into the address space of a userspace process. > > > > > > Alice > > >