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 B3C97C3DA4A for ; Fri, 2 Aug 2024 07:09:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0DBC56B007B; Fri, 2 Aug 2024 03:09:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 065276B0083; Fri, 2 Aug 2024 03:09:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E71AA6B0085; Fri, 2 Aug 2024 03:09:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id C7D2F6B007B for ; Fri, 2 Aug 2024 03:09:04 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 0EA4312111A for ; Fri, 2 Aug 2024 07:09:04 +0000 (UTC) X-FDA: 82406428608.17.40C64C3 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) by imf15.hostedemail.com (Postfix) with ESMTP id 357E5A0011 for ; Fri, 2 Aug 2024 07:09:01 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Z0IzUstT; spf=pass (imf15.hostedemail.com: domain of aliceryhl@google.com designates 209.85.128.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=1722582484; 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=XGGv90E4jZ/60vEt7thNxFzM/O5YoMdiSJ9S3TB3ycs=; b=qwPRbHGh/7v5qdDgop/HNmTNjiSSLY47O/hz6t6mLGTfxXDBL2/KKS1f3G+9BhWhnMHTvV yjntOVOt7mCaZyopLEWGtNx+BMngPZGjXvWSV/PR2zWIQRO7YHXW45wLOsuPluCiMq+3uO OLkMfLgcImX3cDpEBPyej9wxwgHPd2Y= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722582484; a=rsa-sha256; cv=none; b=Nsu7oQt9wygjUuqbQrpWpFWFovgsENSW5h05jSbPXp/CwcumDLA5MTQBwkFkx0LAcADaVZ beuwBqurcrvdyB7S3L6UdCnqkHnue7KJGS9JtpqBcSYsRo5lTvDaQyJHnAUSFSH8sByGmb q1N/mtdnhjilAYreAwhTOFfa5WAUK9k= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Z0IzUstT; spf=pass (imf15.hostedemail.com: domain of aliceryhl@google.com designates 209.85.128.54 as permitted sender) smtp.mailfrom=aliceryhl@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-428e0d184b4so10936215e9.2 for ; Fri, 02 Aug 2024 00:09:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1722582540; x=1723187340; 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=XGGv90E4jZ/60vEt7thNxFzM/O5YoMdiSJ9S3TB3ycs=; b=Z0IzUstTLEQlBwcWxbWFU0CPOHQPplgZuAPnWOU9+jDkSYKofmuhiEv6iHVrHtI4P7 Z8/6smhUY3QjNAEspWSDcIiqivsT9SLiExbyQX9uNH7yJNxh8UsBso+DfUM56nZ0Ste5 ipXgJ/0TZsR5jzMUZjdf2UeEO+Zt3alu4VTZruWgtDxubn5ZO5/G62jr6GU4agYHWnYb PCmsnGqMpFuREQjwSEqgUdmnPhaTfGO3UQPWyI275Mm8UGavhITdD/IFS8hFc5stFE2h 4lxyI4EH7tfzafuoXIOSXgxy5bg7pEwM0NOr1P+87yUS0yibyyFZerfsxWp+LJZXytkv o+Tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722582540; x=1723187340; 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=XGGv90E4jZ/60vEt7thNxFzM/O5YoMdiSJ9S3TB3ycs=; b=Gfxa+rBtL3uB/xCbe1rRR7WKenHfplxZbCWljvmzzoVT2XBmIS7imEQaLpDwa5xkkj fysstnPQkateKwbcT0DAtRMVYdffDMUJT4V/obBgi6Mj9wwPJQIWdUTTu0VqPLw+OoNl XMy7Zju35grHVHkLlETmRA70zPUzPJ4GcOLODIDYCuxFJVsbZFwCb97lyaZF5vTuVSTi /yISymFAn2gj2VZX0kitJoj7QsOMLJVQW+N//tBL3OTtTsOnDMAUU6fdhlPykRieOxp8 bJ+BzaAuFZblbX3Ys6Sm3gteVMPa6bO9j/J9QN/EOpZRNPgjvDO6QKx9qmbjbMOv0A6J TJvg== X-Forwarded-Encrypted: i=1; AJvYcCVsJr8SditsHAOF3vcaZrpyZ2z+49AeF5075on9xfOY18AKmhbhke8uGAJ0ByymvqxsB40pokQ0DxMPK20erVjY78U= X-Gm-Message-State: AOJu0YxTHiOjtvT5rVTeAHxcAkmu2CN/EGW8foY7TYj75hNWBAC8Nl2B J18w8qwYXPcCcT4GGDakyl7v5TGN17+xkFlqukNtCjJqzafkX1z28c0Ph1TOzr+E/XgedwgIxr9 h8L5Jm3HhBP7dsnE7a/d/rfrQsD5tfygWOcWj X-Google-Smtp-Source: AGHT+IG4BdlPACpAxMAkuvrmIrybwbaSNbWlzp5aQ/dx8NtGyv2vSVHH4dIGcI7nj1JZdge7zE3p9UjbZS2U1WFmAAE= X-Received: by 2002:a05:600c:4f0f:b0:426:5cdf:2674 with SMTP id 5b1f17b1804b1-428e6af7070mr14285565e9.4.1722582540093; Fri, 02 Aug 2024 00:09:00 -0700 (PDT) MIME-Version: 1.0 References: <20240801000641.1882-1-dakr@kernel.org> <20240801000641.1882-18-dakr@kernel.org> In-Reply-To: From: Alice Ryhl Date: Fri, 2 Aug 2024 09:08:48 +0200 Message-ID: Subject: Re: [PATCH v3 17/25] rust: alloc: implement `collect` for `IntoIter` To: Danilo Krummrich Cc: ojeda@kernel.org, alex.gaynor@gmail.com, wedsonaf@gmail.com, boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com, benno.lossin@proton.me, a.hindborg@samsung.com, akpm@linux-foundation.org, daniel.almeida@collabora.com, faith.ekstrand@collabora.com, boris.brezillon@collabora.com, lina@asahilina.net, mcanal@igalia.com, zhiw@nvidia.com, acurrid@nvidia.com, cjia@nvidia.com, jhubbard@nvidia.com, airlied@redhat.com, ajanulgu@redhat.com, lyude@redhat.com, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: mxhm9snjdzza9183ymwksxtiw67bj1jp X-Rspamd-Queue-Id: 357E5A0011 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1722582541-694071 X-HE-Meta: U2FsdGVkX18y1tf0XzxFpMTnmGTf216svx5PTJ1NYEv2kXGBECzvCxW7Hz15M6nNWZkhVsIU9AynQ5fj5DZywL3RmLTFywHExYzQxNMgCCpA+GcS1cAOdz6ZKrvhJenJJekTtd/ZQviYx+D+EIbxl5bdQuk/ginsauU5Jqy/sOBM1V8idRVkCsw8bHlM4D5BydHOB5YZ98z+teSgtdfYPCEfhbQUQWVDpBpaa0aeI2baXK3Hv7Yrjk2nS8J36RDcxdhV1egRVdz6kCN76IFa2p2TZOhP4T9MtUYee1SAczPGtS6FIDcmenxmfsoi7dVp6L6D221aKNVg0UBdOeBBrNtA6gQcVWpXyGsToG6BLqCmBJU9wP2sjUnEEPufdDdCJtGkN1c/Rpj+9yH8EC+k+4MXTuvnv/mIOsPc4Bxp+vLH5pArTAo9F401u75wD+BLgIbWzoJ5obgilof7kb/ZVv12zFgcESLbebNWrWzUMiAHPUoCG8rBqaXPupJ7mOG2pSJs9cRdohJEi/8fPFuLGVZKfLTddNqgZee14AyHUMZSX/H3bT5kBgsW+r2OiQ+1WZ4pM5yfFi2YDTL7OH2vr3sk1uObNhF32jZ6OHcdftYObv8g9zZnIi8zVvA/W98vIOgQWc1yW9Q9HPy/StPeIVaVRdUAGSbRiD8Z6ftfFWa7Z2F7dsZFyGIRjVMkzgg26Kawv5K6SJvJiIsaSyONEez1NBic1cIt4vaN5OvUmq9d1PINdaXfgQZ8/sWEiHEdw6L/WdM0rdh1O7NltFvBhd2/qWgS/QcrLi9HPNxXhgeMGaEqi6zeYuHF1pqouJAnukhPUhgbXky1iWp15TymD/1qrN9J/GL3rM/14ZQvN0jhLlKBSDS/vspIVdEsSoCJ7vmtcfLugvuRzBhgUrUUNeursBzZWsHjj8noT59MlxIAeHcVs92PKYiFegn219jNUgBdQwSBQM6FNm0UHwp z8861SPo x7xYchzvGGZ3Nj61H353IejQ6/bMD0pHkEofwkA6bFixf+hEwymBZfKJzRk74wSpSNdcCnOwv19JnRl1xSoNoB4SZCxDJJpFy4G6rFUH8G5RZavMNRbq10UHYJKDbxoYjicIMC9bzoX1wm/DWGoP4w837mkGe29+cwoXaYuZ60LAL9emr9y6j9Niw3meXvKd/3swJH4H8sCC0smDVHvyPv68Lzhkt3vTr/c3/dW2MFtWDs8u6k09IhGtoIDYj6tASSlmMfd4rxoSUDFCC7ZaA/Z7tm9pav734pYmXtgY+8XI0d7o= X-Bogosity: Ham, tests=bogofilter, spamicity=0.291524, 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 5:37=E2=80=AFPM Danilo Krummrich w= rote: > > On Thu, Aug 01, 2024 at 05:10:22PM +0200, Alice Ryhl wrote: > > On Thu, Aug 1, 2024 at 2:08=E2=80=AFAM Danilo Krummrich wrote: > > > > > > Currently, we can't implement `FromIterator`. There are a couple of > > > issues with this trait in the kernel, namely: > > > > > > - Rust's specialization feature is unstable. This prevents us to > > > optimze for the special case where `I::IntoIter` equals `Vec`'s > > > `IntoIter` type. > > > - We also can't use `I::IntoIter`'s type ID either to work around t= his, > > > since `FromIterator` doesn't require this type to be `'static`. > > > - `FromIterator::from_iter` does return `Self` instead of > > > `Result`, hence we can't properly handle alloca= tion > > > failures. > > > - Neither `Iterator::collect` nor `FromIterator::from_iter` can han= dle > > > additional allocation flags. > > > > > > Instead, provide `IntoIter::collect`, such that we can at least conve= rt > > > `IntoIter` into a `Vec` again. > > > > > > Signed-off-by: Danilo Krummrich > > > > I'm not convinced a collect implementation specific to IntoIter is nece= ssary? > > For the reasons above, we can't implement `FromIterator`. At some point w= e may > want to implement our own kernel `FromIterator` trait, but that's out of = scope > for this series. > > For now, I just want to provide a way to get a `Vec` from `IntoIter` agai= n, > which without `Vec::collect` would be impossible. If you have a need for a collect on this particular kind of iterator, then = okay. > > > + > > > + // SAFETY: `buf` points to the start of the backing buffer a= nd `len` is guaranteed to be > > > + // smaller than `cap`. Depending on `alloc` this operation m= ay shrink the buffer or leaves > > > + // it as it is. > > > + ptr =3D match unsafe { A::realloc(Some(buf.cast()), layout, = flags) } { > > > > Why would you shrink it? You can just keep the capacity. > > What if the vector was pretty huge and meanwhile as advanced by a lot? I = think > we don't want to waste those resources. > > Ideally the corresponding `Allocator` implements a proper heuristic for w= hen to > actually shrink. For instance, krealloc() never shrinks, and it's probabl= y not > worth it. For vrealloc() though we clearly want to shrink properly (i.e. = unmap > and free spare pages) at some point. The Rust Vec never shrinks unless explicitly requested. But I guess it's okay either way. Alice