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 875ADC4829B for ; Mon, 12 Feb 2024 09:37:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0511B6B0080; Mon, 12 Feb 2024 04:37:03 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0014A6B0081; Mon, 12 Feb 2024 04:37:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E0B656B0082; Mon, 12 Feb 2024 04:37:02 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id CFCB66B0080 for ; Mon, 12 Feb 2024 04:37:02 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 93798C0519 for ; Mon, 12 Feb 2024 09:37:02 +0000 (UTC) X-FDA: 81782647884.03.1FCDC52 Received: from mail-ua1-f44.google.com (mail-ua1-f44.google.com [209.85.222.44]) by imf06.hostedemail.com (Postfix) with ESMTP id D4ECF18001D for ; Mon, 12 Feb 2024 09:37:00 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=BaGSafQw; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf06.hostedemail.com: domain of aliceryhl@google.com designates 209.85.222.44 as permitted sender) smtp.mailfrom=aliceryhl@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1707730620; 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=H/E+m/HmOf8NYGXW5jPmBKlZJMmDwZLc9BuYGu83i6s=; b=awNA3fsn39zIW/UjlB7PzZnCMcLbRvSMDlpJhfQx6y+Y58wByWogYi/0zOnOAmp2Zp3yUg sn1zjvIsorIngKA+64RsX/U2B3xe5tET7sYJmpcyH80AJTNtJQwvqOPxPvEhNb/mrh9ALo QfEYkiaOYKsylpsO0Zco/HC2whQpFCE= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=BaGSafQw; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf06.hostedemail.com: domain of aliceryhl@google.com designates 209.85.222.44 as permitted sender) smtp.mailfrom=aliceryhl@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707730620; a=rsa-sha256; cv=none; b=A2GFaQgQWy0OwPE+PolsIFFzIOVT0zmP37jeszrXorNjWTQFNkhSOuuSRQ7k4DZCk/DmdQ 2mpwspMtRmb82hI8NCXwzUoGpXf46C4beSeYGCeVXmuEFpG11yNYqRCfnq8mAMUfgPiWzs xiZ2yX4UezemkR2PmZgeEtG+8iubgTg= Received: by mail-ua1-f44.google.com with SMTP id a1e0cc1a2514c-7d2a78c49d1so1527023241.0 for ; Mon, 12 Feb 2024 01:37:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1707730620; x=1708335420; 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=H/E+m/HmOf8NYGXW5jPmBKlZJMmDwZLc9BuYGu83i6s=; b=BaGSafQwPaVKTVv2ykYvXC1PgyrRsSuAlWB7WsflT+dBTBkaW0obXy7A3Jne2Z8FWB +C5KuAY/mwX2PRITdTF5xe/OTNxXw6efHeF03qLPu4bt2ubZSqhgaJ0XHVf3K/3/IjRQ WxTfpIZH51sI50J7nDejktORv9qbdB94sj8LlJbWEzA6xT8FTlZsYLOjcN7nZvLNotsF SluEyqYivX3b2IFky20eaUnna36WZzuPEQ5Bpmt+SCZ1gC444i8uxokILG5tXFPFnP0B xZddhgw9rUzrdmV2a2fo9ycQ6NCP0HzCwh8uYHux8FplKTuz/vaedcY+lc7xmozFPpvd IS/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707730620; x=1708335420; 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=H/E+m/HmOf8NYGXW5jPmBKlZJMmDwZLc9BuYGu83i6s=; b=oNfrzv1to0mA33q5rV+nYgov1hsrlMbCu7l8TAK5oL9xKxbEpbWpd5UN0CilG76nbc 98eVYmO/CXeolAvzrlw1kxK8PqYKHnKPjGUXvgH1wBTco2c06JJuZ60ZTiLsvDs5m6B0 YF8QvOj5raFk89NRdGkcN5IP552ecxZkUOvG8JQZVIPwk3QywPp5tJQrJyKwpAKQMwyg 6+PRq/AzRn6ou7j7vcDdkH/CT5Yqps49TvVF3q3lHdd8N5Ywqb6YDHKt+XhM2ktFwLBx SXWJD23Fm8F75yCMnvyvgNGM8F1glOgow2Nlwq6znW9H8MNb/7b0ELanXmO+hSAgFneL ojXQ== X-Gm-Message-State: AOJu0YyQSQX+DMZcOndD1YQrIVKYjU3O3F9geRs0a0qfG93KTuaZ+Pgq QcF54imJ6KhDuhgHnob32jcn4cbY2hLDjCwZztFsGto+THgdor/TNu4k3zzVTMdOySGZnx/S8kk 7154OoGyTYPebbBHiaPGTQmKyzNDli9N2cbup X-Google-Smtp-Source: AGHT+IF1JLiuSnoWvFlNH0ZFTmSJCw5Jh8SHStPr6vvDaY5nSqylus66nyMrF0w34j2u/nWXwzWcgMEwLYwAKIEhUw4= X-Received: by 2002:a05:6102:3709:b0:46d:2b14:db7 with SMTP id s9-20020a056102370900b0046d2b140db7mr4717432vst.4.1707730619799; Mon, 12 Feb 2024 01:36:59 -0800 (PST) MIME-Version: 1.0 References: <20240208-alice-mm-v2-0-d821250204a6@google.com> <20240208-alice-mm-v2-4-d821250204a6@google.com> In-Reply-To: From: Alice Ryhl Date: Mon, 12 Feb 2024 10:36:48 +0100 Message-ID: Subject: Re: [PATCH v2 4/4] rust: add abstraction for `struct page` To: Martin Rodriguez Reboredo Cc: Miguel Ojeda , Alex Gaynor , Wedson Almeida Filho , Boqun Feng , Gary Guo , =?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Kees Cook , Al Viro , Andrew Morton , Greg Kroah-Hartman , =?UTF-8?B?QXJ2ZSBIasO4bm5ldsOlZw==?= , 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 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Stat-Signature: j9kod36h6g9tz1cp84qgawyjsrdwrcy4 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: D4ECF18001D X-HE-Tag: 1707730620-870179 X-HE-Meta: U2FsdGVkX1+BDGgQthhk6xbID0B7jBc1JEMXT27v+G7H2UEBoFs0E3kJufDvD/D4jJnz+BnwUR3uJk/mmflnoE2DIy3eB74Rq69CULYoroRy+eGVSOCaY7b324Gvvur01Jd1uAM0DuvOYZkoj6GDbQRrAv/aom3TNWu2pl4DNFtzksxSEpcwN5X2hla1tW6BW+MlU+FYyM6A6Kovm3lgV7cccniGRJC25nVg7Do02yiyzcM+tqovpAJp8pXghrv08WDUI5gLDVnppPlPoWFDZ50Wi9nLkkoOd1hb95SQA8Ug0IHcVFoJnA6Dvsom38wEA4yvWQATP1lP75bQkT7RnKSK0pFiOnApfYxkJbOqB2ljuApSCdFfGlVsw7g57ruiTGgNfmgq8C2hvLpUZ05FtifS6Hl5CpvRt9L1D67ukSRslsKEDsZoRAzPZi0kE/QCkThDWR3U4MCGthJWuEwpqFAZRxk1IeWJIRpCBaRu52M0H/KZl7xZFvnGqzQBjFh9EZHluNNcx2Ux/IvTMZAnK4Qx6qv83R2QCHWrUZbQZfDLG5ztB12vsnZU+4EhRTDdiVXJZ3U+Ae6oW7gcP5TKT/y6Ae/zRmljQ8NafzI/fpYOAz480gpxhcsdn+H7nPcFPMmbHBKffhu4gcvLWvDwkndadB+Ea95BpnyUwmc4WfrZlEFFOVoYBMg1jb9gvLS3D0JlbPFnPm0d0TUoQ09+JQoZU8Ju3g9Mwb5mNk+S5mJMiVzWydkI/M38xZK+PVWjaGb8Gvr41TlAYwf9eEIdn7vygO3PbF5HH2RfIO+Z21AlTrEJ0tUykSWp4vjOqUkaMkVY4UCkjViByJWIXEdROuE1BxT1CHATz+Pq82Ay7wB4bukuCiZmCjHVoi7EOt/coHPj2XuUV2/O+gcIOwzOe84EpdpcvfswTzDum4NHHDOFpFV9c/zGgyjgJcceDtRfGll+iElHjNumH5wiKWd n4Ef6YI/ Ras9lDHxbKn+GFp8k3LGL942ajCMhrsrpvKjAWZqMMHFZMo0K9IA2VwLMK/vi2NVqaheJng54+2KAJntLHatvEimRCdxjmv3IRRxjxcvzPqL4Ynsaq4UF0Kvw/deW9OdJL2y6dAGxgl7nvHqry0OUbNK5KqikhihRBJeAnjJ01Gii3A/J9mJbAcXmJ+IwjX2l9WSjq3BOdohpOvSzkN87U7QtnNhf9jJDB6cUs/aMGcHZArtHDJDcG0p94+Vh2ceoZMxjXmlssVP8lfcmrgTCqKnmy9gqheF+bKjygG4qK8dAICoRwtJw0NLMHrKoKG7nueiS X-Bogosity: Ham, tests=bogofilter, spamicity=0.000004, 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 Sat, Feb 10, 2024 at 5:23=E2=80=AFAM Martin Rodriguez Reboredo wrote: > > On 2/8/24 12:47, Alice Ryhl wrote: > > [...] > > + /// Maps the page and reads from it into the given buffer. > > + /// > > + /// This method will perform bounds checks on the page offset. If = `offset .. > > + /// offset+len` goes outside ot the page, then this call returns `= EINVAL`. > > + /// > > + /// # Safety > > + /// > > + /// * Callers must ensure that `dst` is valid for writing `len` by= tes. > > + /// * Callers must ensure that this call does not race with a writ= e to the > > + /// same page that overlaps with this read. > > This safety section says that a call mustn't race with a page that > overlaps this read, hmmmmm. Is there a question here? > > + pub unsafe fn read_raw(&self, dst: *mut u8, offset: usize, len: us= ize) -> Result { > > + self.with_pointer_into_page(offset, len, move |src| { > > + // SAFETY: If `with_pointer_into_page` calls into this clo= sure, then > > + // it has performed a bounds check and guarantees that `sr= c` is > > + // valid for `len` bytes. > > + // > > + // There caller guarantees that there is no data race. > > + unsafe { ptr::copy(src, dst, len) }; > > If `src` and `dst` overlap then wouldn't that be a bad idea? If so then > how about mentioning that callers have to ensure that `dst` does not > overlap with the page that's being read and use > `core::ptr::copy_nonoverlapping` instead, otherwise the doc comment > could mention that `dst` can overlap. I'll use copy_nonoverlapping. Thanks for the suggestion. Alice