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 E8C78C4345F for ; Mon, 15 Apr 2024 08:11:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7A5236B0087; Mon, 15 Apr 2024 04:11:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 754AB6B008A; Mon, 15 Apr 2024 04:11:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 61C206B008C; Mon, 15 Apr 2024 04:11:06 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 3EE446B0087 for ; Mon, 15 Apr 2024 04:11:06 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id CC1B1C04C2 for ; Mon, 15 Apr 2024 08:11:05 +0000 (UTC) X-FDA: 82011045690.22.7439299 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) by imf25.hostedemail.com (Postfix) with ESMTP id A7CC1A0021 for ; Mon, 15 Apr 2024 08:11:03 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=metaspace-dk.20230601.gappssmtp.com header.s=20230601 header.b=m2vK8M1B; dmarc=none; spf=none (imf25.hostedemail.com: domain of nmi@metaspace.dk has no SPF policy when checking 209.85.218.46) smtp.mailfrom=nmi@metaspace.dk ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1713168664; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=zv5YTVuVpK0uEb+PQ488dEDxv7U+R1SjCDPDwfMdrbU=; b=L17dUVxuWn60Dypym+sXOBzsaI3vMp2z9PrWJd1qish3NOTYzdSHIe+F7UBXoIU9H49m5q VbZNmrslBH5gMJgFY8UvhoTtTdLaLdXaJuy32R6D5ZLhKtI7oP1kMi3MjVYBFrKx8I7YtA jRIADOozf9HVEN2aHfcGWZz2IUQPdN8= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=metaspace-dk.20230601.gappssmtp.com header.s=20230601 header.b=m2vK8M1B; dmarc=none; spf=none (imf25.hostedemail.com: domain of nmi@metaspace.dk has no SPF policy when checking 209.85.218.46) smtp.mailfrom=nmi@metaspace.dk ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1713168664; a=rsa-sha256; cv=none; b=EfSRu69SUMz7XNsJsH+kDEMgwt30P9DNJckk6YkoSG72KxNt6kDAizY+ot7bpqwsrZwcx8 iwgb4MJ9z+pqO/dTCTWv7Ghk/FbV04X/aUkkdCkbQXcndngYeoI2WfUGdnb5GWCamjZpxz ovH+oqSClHnNjyin2k2ZZFLXv+TBwzQ= Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-a5200afe39eso355240366b.1 for ; Mon, 15 Apr 2024 01:11:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=metaspace-dk.20230601.gappssmtp.com; s=20230601; t=1713168662; x=1713773462; darn=kvack.org; h=mime-version:message-id:date:user-agent:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=zv5YTVuVpK0uEb+PQ488dEDxv7U+R1SjCDPDwfMdrbU=; b=m2vK8M1Ba39KoUJNvu8qFlodtqwwNOeFcSSWrAmPcvs+GBy9sRUfS4UMJ4hQHw+2Oq cs/QAZDCyhNB0lVpM7PztA7FRDROu1n6Q4k2vO/MUnlCqSu1lne9viY8Ko92dJz9ET15 5HipxlWJk2VVM6WvMd5NVsLa96iOmkrxN4KZewUnACLwB4HZG8XdCTupBl8gETRRye9y 5BjogWSm/putRxqryjH7Xay3q3s+1vmurxlOiMVEmtR3RKsjOCPt0Udm94Yni24r0c4F ycCqmtMMdFfd7pwpWQNTTpNIMyQbo0kkUTsMrosSZpw/wXTBJIn8vh6Ar2nvVeMAyeZk QBRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713168662; x=1713773462; h=mime-version:message-id:date:user-agent:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=zv5YTVuVpK0uEb+PQ488dEDxv7U+R1SjCDPDwfMdrbU=; b=Iqsv2ufZky7BNlMZ1W4cIqY09B5KktwCzzH8mGXNH1uhNXmTpMRU+NSC/SOlwNK/ZX 6Nz8wwdeykoRWw5LCpsz/+tVxoBuHpYtxO4ACcEhngIYLXNZmhMN2ZhGyZZy7foHbHDI Qj4UNrgXyWgybV+wa+ZtDrnL6MPW/htQIpq6AVmEgdIxdeNIKL/0oVH3VB8MBiQfo2J7 eASiJOke11+YM/xOWPJ3pBV4Rpf3Lt2DMHSt/6Vz0OpJqxDJ1GOpWi6un9Ie/CJYWp5d MRTlAD+gdVILBUEwHx2UBovHwrYtOalRdmCPnJbotTs3T79ZUz4sH3PaOtIN2kdsQnyA bzAw== X-Forwarded-Encrypted: i=1; AJvYcCV0nR8KmKBqgoPT97Khlut4c2/H20ZVuvfLwFeE+sJlinqyv5spiSec3YGPsyzWWJoYIdJbUI2khj11stXJ7jj4Rb0= X-Gm-Message-State: AOJu0YxKOZE2saN2vn720OnFJ7arz2Re6qw+evCWAwrfsG81qZCz9l3q tJQyH1TV+DNN4Ymp835JnadSSAzB2r2m8UD5w7G+OKXdNDfJuYBWQcItsy14j3I= X-Google-Smtp-Source: AGHT+IEmro/z4RIN6GSVHudfugd2GkdsT2hNxezDpNHADO1XqkCrWaYgEi/s3syKd6RfY4DayBQjlA== X-Received: by 2002:a17:906:590b:b0:a52:42ee:4e10 with SMTP id h11-20020a170906590b00b00a5242ee4e10mr5567894ejq.8.1713168661716; Mon, 15 Apr 2024 01:11:01 -0700 (PDT) Received: from localhost ([79.142.230.34]) by smtp.gmail.com with ESMTPSA id 15-20020a170906300f00b00a521e5856f6sm5122991ejz.51.2024.04.15.01.11.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Apr 2024 01:11:01 -0700 (PDT) From: Andreas Hindborg To: Alice Ryhl Cc: Miguel Ojeda , Matthew Wilcox , Al Viro , Andrew Morton , Kees Cook , Alex Gaynor , Wedson Almeida Filho , Boqun Feng , Gary Guo , =?utf-8?Q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Greg Kroah-Hartman , =?utf-8?Q?Arve_Hj=C3=B8nnev=C3=A5g?= , 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 v5 4/4] rust: add abstraction for `struct page` In-Reply-To: <20240415-alice-mm-v5-4-6f55e4d8ef51@google.com> (Alice Ryhl's message of "Mon, 15 Apr 2024 07:13:56 +0000") References: <20240415-alice-mm-v5-0-6f55e4d8ef51@google.com> <20240415-alice-mm-v5-4-6f55e4d8ef51@google.com> User-Agent: mu4e 1.12.2; emacs 29.3 Date: Mon, 15 Apr 2024 10:10:48 +0200 Message-ID: <87il0jm4fr.fsf@metaspace.dk> MIME-Version: 1.0 Content-Type: text/plain X-Rspam-User: X-Stat-Signature: hf4ozcty8ymnzqcm4pkpywuunzca9hgs X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: A7CC1A0021 X-HE-Tag: 1713168663-986542 X-HE-Meta: U2FsdGVkX19muh+uJTZMERCJKZ1ypPZgf4ULsiVK6Qc2ypzhI+il9jREKgY43rQkiAXih9lG4SzZr0kBoVAkX00yhUzrOBibhvJ+NWtus1SBG4kHB55NIq+6g6AN//DzzwO4eUHL3Iw5NwSS0pYe16UDUS2QoD7fX+Y+Iv4uk2mf+9MHwVWJUsYvfuSEGEfl8GO/A3JZzmQfkH5jaUjV9EsjduUGV0jgFAZ6hFEJ4buAdnA0HwPm7iypJg+Y3UxmbhqwhJfuNkZBh6/eL/yXxA8tYomHsnm4AdWSmmL4jvJIiVocZiPq4cHEtlmx1hkmFnXoUZnLEXYD5Xo+bpaOMDgJ5gaiNsbDWPPvQSTyC2vLu+RezsWUvcUTUUWKpdcF8ehQD2zLhGg05/pnMNVC3L89k0eEfeaRvkF+cEnOeMdfNL7fbQouNQjjTL/qfxMT8NkDz83ZruZNnHMCFMflQ017IAb4h8fiveu2TVUTI43c4jPOSCmtZfwzCjHZHJr4xda4DvGu9XZtmwDSWF3fbd86fzGxGBXrKSOtaZ4WgoTGXliIhgaXATxMUiGy9ICb5f9bCxRVuouovi7kMTt/j4q+uiAFwxieG3Dem7r6Zi68k1cnTlqs7Y0L+a3TUVoeJe4rWDG+oWJ4MHFOgy9mxsz/WKUfEiu16EPs6kulxWPFoR5gmTaUR4DVJTAlTQicV7BlFXbCJSFnqSI9wGzvgNY+NuGSGf9ZD1OL80/3WmHmQocTTCdMOzM0E2qshVQAV9MkI9NuKLGQh3i2udgMeJAtMLrSf6upluGCpTNm+1fbebZ8wqOLo+yKFqevNhHoXeXlEN+6ohDQVM9+aC/ThltHxqKeUoTDn7i3nXEluvw4Ao+KuyOhl9rxCgEn23O+YHBD+qOHt/T6Jq7Mx3OLyr1p03YTy5ddompmLa3PXENilJTt6wHpFzom6jCQyl+WzKHZcGjNOtf1q1axnIV y5GoBdXr Ky5Zab/0r5+QlM3D54tdLgbOtZk2CD0pD5Y2O96dTWUByR54L35X9Sr52hWOGy+L2Ca6n58S+/TuAxsL4XB0wEOeKN5t03dIjcWp8DIm5DmmVD8wRon1NO2AopFfkDcqchDAjtgbq9Fr3m3i2139WZF+9gho8O5cup5g8CHEoQqw8ozT/QSDD8WFyvTWv9hDMO3XQUqR2OzfFduEYnmcfGgoqG1oMu8s83eCRzONFRIQx99r3azvjXWF4re/jgr2URogq2CJpCjw8srzOphIlUqwzwuuG4USexAE5ZV3mmId49IIDsNVNhoW9ikTpRTN7t0MSMkU6bIMWouugRDrdD84cEVVw3BY7PS0GF6TDsqVR9giVw7Dufa+GbRvpre0Jc9xd6aAoOCR6M2C0Oq0Vxslj5QQNap1qrNunQZKRymUJcbBGFqvF5KVNHw3TLPAHmiNIRehYLRpwLw2hlKetqCkYYZEUnH/p1kPv 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: Alice Ryhl writes: > Adds a new struct called `Page` that wraps a pointer to `struct page`. > This struct is assumed to hold ownership over the page, so that Rust > code can allocate and manage pages directly. > > The page type has various methods for reading and writing into the page. > These methods will temporarily map the page to allow the operation. All > of these methods use a helper that takes an offset and length, performs > bounds checks, and returns a pointer to the given offset in the page. > > This patch only adds support for pages of order zero, as that is all > Rust Binder needs. However, it is written to make it easy to add support > for higher-order pages in the future. To do that, you would add a const > generic parameter to `Page` that specifies the order. Most of the > methods do not need to be adjusted, as the logic for dealing with > mapping multiple pages at once can be isolated to just the > `with_pointer_into_page` method. > > Rust Binder needs to manage pages directly as that is how transactions > are delivered: Each process has an mmap'd region for incoming > transactions. When an incoming transaction arrives, the Binder driver > will choose a region in the mmap, allocate and map the relevant pages > manually, and copy the incoming transaction directly into the page. This > architecture allows the driver to copy transactions directly from the > address space of one process to another, without an intermediate copy > to a kernel buffer. > > This code is based on Wedson's page abstractions from the old rust > branch, but it has been modified by Alice by removing the incomplete > support for higher-order pages, by introducing the `with_*` helpers > to consolidate the bounds checking logic into a single place, and by > introducing gfp flags. > > Co-developed-by: Wedson Almeida Filho > Signed-off-by: Wedson Almeida Filho > Signed-off-by: Alice Ryhl > --- Reviewed-by: Andreas Hindborg