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 3D18ACDE006 for ; Thu, 26 Sep 2024 13:53:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C7BCE6B0093; Thu, 26 Sep 2024 09:53:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C2C786B0096; Thu, 26 Sep 2024 09:53:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B1BC96B0098; Thu, 26 Sep 2024 09:53:28 -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 937C06B0093 for ; Thu, 26 Sep 2024 09:53:28 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 34D2381479 for ; Thu, 26 Sep 2024 13:53:28 +0000 (UTC) X-FDA: 82607031696.30.8BD8812 Received: from mail-40133.protonmail.ch (mail-40133.protonmail.ch [185.70.40.133]) by imf02.hostedemail.com (Postfix) with ESMTP id 475538000E for ; Thu, 26 Sep 2024 13:53:26 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=proton.me header.s=protonmail header.b="SmRt/GeA"; spf=pass (imf02.hostedemail.com: domain of benno.lossin@proton.me designates 185.70.40.133 as permitted sender) smtp.mailfrom=benno.lossin@proton.me; dmarc=pass (policy=quarantine) header.from=proton.me ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727358770; 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=30p0HxmNSCqsWjNg4s5Rl2kjV1KIrDxeHCMZ2KZbK9c=; b=DDN18Ss3NFfritHChJUKvgYq33ukrjND9/sDkW2b2csxCQlZrQlNGnp3NYvCMF2QK0lbE9 3yRVx0XIrLn4RThohnPE0gn/w0o+tOWcTwSwt6GTrajLDc8K+uDVTiA62yyLK5MwWMzlC3 xtkEJoTH4Flgz7WkusTOQ5QypAZaXmQ= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=proton.me header.s=protonmail header.b="SmRt/GeA"; spf=pass (imf02.hostedemail.com: domain of benno.lossin@proton.me designates 185.70.40.133 as permitted sender) smtp.mailfrom=benno.lossin@proton.me; dmarc=pass (policy=quarantine) header.from=proton.me ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727358770; a=rsa-sha256; cv=none; b=3jP7Ekz0m5A86GR6rGRdUap8v5CVzKh20RkW/IEPjKIdLhQQzQjmrpiY7xBfX7CZPlzuyp w1mk0jKAtNvsiFtCIVF40F3C+G4Z5J8BS5rU58S1IKli4M3lTqPUIRQKmszVH2IF8X3pG9 zHwH4fTQmNbc1QXCoFFOPE1kY1pA1N4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=protonmail; t=1727358803; x=1727618003; bh=30p0HxmNSCqsWjNg4s5Rl2kjV1KIrDxeHCMZ2KZbK9c=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=SmRt/GeABgh19LnQElz2w50l7si0t5sfeKWl1xWmdlIg/0DVGGRQWmngzVLnfQ/NO YNZEqzF8KLpq1yTGNEByRuRklc8lde7YPjl9uv24gzlpt+zPw+1rKs3y4rtQZ5/0AH AO7B75PAPUsoO4bOiYtdpKPn/ojz+Qgrp2o4A+mlQPFhnXN9Q1I9RPIHIMBVDLt2d7 7l+LL1bTGRR9z13emr7rfq7HkpDEeAe+riDXJoYAz9KkOgLoBKj/Anzx4joDC88p4l vqrO38w7ffdIEyr2StClvUeWe+mh8ZlV5mrKG/WMTrHJA6Soa/ZEeUZJehcfcZ7qt2 +lh76SjdhCTpw== Date: Thu, 26 Sep 2024 13:53:19 +0000 To: Danilo Krummrich , ojeda@kernel.org, alex.gaynor@gmail.com, wedsonaf@gmail.com, boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com, a.hindborg@samsung.com, aliceryhl@google.com, akpm@linux-foundation.org From: Benno Lossin Cc: daniel.almeida@collabora.com, faith.ekstrand@collabora.com, boris.brezillon@collabora.com, lina@asahilina.net, mcanal@igalia.com, zhiw@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 Subject: Re: [PATCH v7 14/26] rust: alloc: implement `IntoIterator` for `Vec` Message-ID: In-Reply-To: <20240911225449.152928-15-dakr@kernel.org> References: <20240911225449.152928-1-dakr@kernel.org> <20240911225449.152928-15-dakr@kernel.org> Feedback-ID: 71780778:user:proton X-Pm-Message-ID: 85c3c962bdf1b929a7009f824b18be77752e0e35 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Stat-Signature: f4sxfz61qsoiwy3e4784otpa4ao35cyo X-Rspamd-Queue-Id: 475538000E X-Rspamd-Server: rspam11 X-HE-Tag: 1727358806-287285 X-HE-Meta: U2FsdGVkX19uJgZZWy4kwcOCuMJdsF8ODWr8buwJNfZfQpP5etjDt493RgQyaR7iDbhJ6gZBL4Lczx2WuX4cOxXYjQ3mrNEYa3ArCfoVjFGxVqBONsYtvMDYz6d1+55TxGxrBT9Y/E1FqGxDewUs5Ea8cfx0XJO4qB3kdDMc9tS9D+v0rDaCF91pgt8cu9fX5+i0xSXeQ+Fv9eThFwU4S7GMn11MQRuXUcuY6LqOdoqNljVKY6yGCxircM/oHLrgnpvYHDPctff6ZnfzlCbSNuA2ud0Ih8J//A/6QOuYNrm0lW7Cizm77SPZXbBFgf4d2ZeoMiOQnmjctPcIzqvpSCMrsu6ck4YFoX0eDDDUOWFPTLL2pym4ad5wXZyQLxt22Y9RBzwPWmXHvHs0FqignLghIv7v9UBgBUTv4LvxeyHHxrQBQP3zsF9LEiPtNoOVNsqiYEDwYfUuyAVdlD9VfhP/fwSexv3S0H/RgpOPhqOwqQ/HGODDdt6yfhF/1RckuRj6kKTHKElA5vvlMf+8uNgpFjrri22zc6QYNoFq638g4f5fu9gZS23Cu8W7p1oi2cMM7waqsr+OU7V06rmDrKgNwzlb/x1RzDdWgd24qgORStbEtaQzxUfw4P0zgBMc03zjZ3fYfqTmltON+k4cqkDierjPpwiz6QazkxEc3TlW845TF02hPA6QA/3Zd42mGixdFu5BPCowa3YQjrr/IMocSQvhX8Ng1+CnZC39vpFdZ19nF4CaL+jykMEFQJcmxSf24ZzDf6wOE/SDzsiVo4orY/vOwxIf1bXp9wrMpr4GXAb/+NPM0LxFI35CW7+ulhs5baS102gqbp3a0Nx5C0OOfTqXwxTa4ndoh67p9LvlAdz3IjPKKl88Qd6+ja0vGkFRBWnplyQsvmCzHBG3Uqchoi4xRoBmX1RQ4DoDlfHnA08Eja9dpMW6+N+0HdrQkp6QGNCF6i84QIBIado GhYVa5T/ vduSLG29VUzX5VYuUNN4D6Qu7x3fLQzdrXbWwR/wOrT9fLk7lSXW6cW3C7h7TnbhdkIGaw0/o+RbHpgkBMngBJ1S7xS0D4IrSstTGvbcSuJhQmuNThbiABvY4jMiUG06BqhH4GO2O5Eug5uakadKyQtV0AY0xKoA27FUYFlD5s8B5XjD6oAXMn+8a5KN0mgAKbKUwEHuC6GLLtTI9ZOpFvFFFILVIdWAFGSLcNZ7W3iwCYq88IT2TIfrGetmSt5fsuwa7AWwRSua16EC4vG4wp9Pd+fCXsiWgk5QUQBPEli3xsiuj/wpiYoj9NAib/cCpFAPisplEGCT0//e+kUxuLbENRZJiEbTiPwHcT4taiU5cO9Kl8F3BN/C2b/fYBHqzUTYzz3wnOP2hX3Ky6Dha/aSQHCxHosJrZnBJFen6uPwSORE= 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 12.09.24 00:52, Danilo Krummrich wrote: > Implement `IntoIterator` for `Vec`, `Vec`'s `IntoIter` type, as well as > `Iterator` for `IntoIter`. >=20 > `Vec::into_iter` disassembles the `Vec` into its raw parts; additionally, > `IntoIter` keeps track of a separate pointer, which is incremented > correspondingsly as the iterator advances, while the length, or the count > of elements, is decremented. >=20 > This also means that `IntoIter` takes the ownership of the backing > buffer and is responsible to drop the remaining elements and free the > backing buffer, if it's dropped. >=20 > Reviewed-by: Alice Ryhl > Signed-off-by: Danilo Krummrich > --- > rust/kernel/alloc.rs | 1 + > rust/kernel/alloc/kvec.rs | 181 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 182 insertions(+) One comment below, with that fixed: Reviewed-by: Benno Lossin --- Cheers, Benno > +impl IntoIterator for Vec > +where > + A: Allocator, > +{ > + type Item =3D T; > + type IntoIter =3D IntoIter; > + > + /// Consumes the `Vec` and creates an `Iterator`, which moves = each value out of the > + /// vector (from start to end). > + /// > + /// # Examples > + /// > + /// ``` > + /// let v =3D kernel::kvec![1, 2]?; > + /// let mut v_iter =3D v.into_iter(); > + /// > + /// let first_element: Option =3D v_iter.next(); > + /// > + /// assert_eq!(first_element, Some(1)); > + /// assert_eq!(v_iter.next(), Some(2)); > + /// assert_eq!(v_iter.next(), None); > + /// > + /// # Ok::<(), Error>(()) > + /// ``` > + /// > + /// ``` > + /// let v =3D kernel::kvec![]; > + /// let mut v_iter =3D v.into_iter(); > + /// > + /// let first_element: Option =3D v_iter.next(); > + /// > + /// assert_eq!(first_element, None); > + /// > + /// # Ok::<(), Error>(()) > + /// ``` > + #[inline] > + fn into_iter(self) -> Self::IntoIter { > + let (ptr, len, cap) =3D self.into_raw_parts(); > + > + IntoIter { > + ptr, > + // SAFETY: `ptr` is either a dangling pointer or a pointer t= o a valid memory > + // allocation, allocated with `A`. > + buf: unsafe { NonNull::new_unchecked(ptr) }, Instead of this `unsafe` call, you can do let buf =3D self.ptr; Before the call to `into_raw_parts`. > + len, > + cap, > + _p: PhantomData::, > + } > + } > +} > -- > 2.46.0 >=20