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 AA3C3CF9C6F for ; Tue, 24 Sep 2024 13:34:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 40A0E6B00A9; Tue, 24 Sep 2024 09:34:35 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3B93F6B00AA; Tue, 24 Sep 2024 09:34:35 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 281256B00AB; Tue, 24 Sep 2024 09:34:35 -0400 (EDT) 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 0FA056B00A9 for ; Tue, 24 Sep 2024 09:34:35 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 9CBD11A1A80 for ; Tue, 24 Sep 2024 13:34:33 +0000 (UTC) X-FDA: 82599726426.04.6B6A69D Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf30.hostedemail.com (Postfix) with ESMTP id 8F0B480023 for ; Tue, 24 Sep 2024 13:34:31 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=C2+rlZZe; spf=pass (imf30.hostedemail.com: domain of dakr@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=dakr@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727184753; 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=j7b3czfcruTeUWAzerVx7/H2nWjm+5+X/r4wlaEhXGM=; b=RowhhXyTHztOIVEaUAyaKS8YAOPgdYp7S+uaFzTtaStlXTpZYWTItrlcF1cUyDXuUXurBY ihSkLaobuuN2vdoRoMHy8WwcoAaUDTmRmTdvTJUlOQKEZfcn30wSGMsZo9XloUaMO7Etkf uKj7i27NQyN5PDtlHp5qNL05D1VA7fY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727184753; a=rsa-sha256; cv=none; b=7Hkh/cNzbHzL8tDVy/awpZ6jA46zVE9GdtpypnwfdSW7rjNWVyGk3zS4ch1WjxXEAAt4Ai O3Jo1nDLSmbA1ci/iOVoEniDa1NTtTwAkyGsmsh2epmObDYVhhtxjCs4AH9L3vVlqCw+HO 0Pc5G7ECzuuNCWDm11iv7K0BE5EhUfc= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=C2+rlZZe; spf=pass (imf30.hostedemail.com: domain of dakr@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=dakr@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 949975C4C5C; Tue, 24 Sep 2024 13:34:26 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5FE7BC4CEC4; Tue, 24 Sep 2024 13:34:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1727184870; bh=ZiYYKfmJ5vH00JsyhtVmMRwhMywgsH7w/7D/dUatEl8=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=C2+rlZZe1k6PohuN1dUgAaiPsxtEy2akMWJwENm04rWB1sHT4VomnkbhDfZanAmhV WagEIZR+iUqLksIG2sB7tsvrbhgKPQtql1fRZDSxYsV9BCk6SWph6A727ZhYC5XPp9 c2hgSPCxr95ElgUSdqxBcqSVqR9FBshu2SKw/TGLxEazAx/gtGsWi85cZ2aRM/s870 v9CLO4fftVHyfnXF9343X9CT9sKbsRisHUwcvRjh8LbJVXO9lE3FnPShEgHsMSt/Ms jMM4NGHQ+D3WomuVtnWGN3JJux765ziFtgBmHQJ4Jdxp0JCspIqv1itARF5KTFpWJ3 ZF//pawXCfxDA== Date: Tue, 24 Sep 2024 15:34:22 +0200 From: Danilo Krummrich To: Gary Guo Cc: Alice Ryhl , ojeda@kernel.org, alex.gaynor@gmail.com, wedsonaf@gmail.com, boqun.feng@gmail.com, 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, 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: [RFC PATCH] rust: alloc: pass `old_layout` to `Allocator` Message-ID: References: <20240911225449.152928-2-dakr@kernel.org> <20240921153315.70860-1-dakr@kernel.org> <20240923171315.64327fe7.gary@garyguo.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Rspamd-Queue-Id: 8F0B480023 X-Stat-Signature: cwjyetnd5kkgxbhsym3g3s4iyykbnuj6 X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1727184871-287207 X-HE-Meta: U2FsdGVkX19SFLeYNkJUBUAV8oD1/srEJiKUVae8UiporeXDsMGtIrtZvMBnMIMtO404WC3Jq6opnECrG0MpKZQB1iYVzeW0VcwpQsL2x0kD6cZvqwF8Ze0DARXRnHdZUcAMo3gLA0xmlmAa/vGBjpu/AcPwecu46pvK4X7uLxz4AlA+sBYperq9YbQT3hyihhpYtg7rkCI3807emi1MVMYTBPAOPv9zi7b427wKfAXvd+rIyDPmKNyNJtEbJfoDkXyOpZ7rCXX1DOR+tjLFy3L2TNuwLnh41B4RgYjTF7KiyHVtR8DbGWQt+rGhb0x9vsxHAiM4CR3CZKL+AAV0UYclH2XeoltgD4NZY77q65sPt+bivdl4ffwSrQJtd9ZFhjbzN3hJyByiVLmGV5QC9l6eAeNoCKBPS4Lsb5UUr9UCJ7PF/734SybZCJVDzJP8ZcvDuY1glkdobhxLiK/ljmv4X12836fKFEPgC8dUhOb9Cincwh3WyW1lyzc0t9oFmb1AtaSyAaGQmQNdgG4fNF2MmgH2nuvATNunvOt+CIKQjIIVbJv0kmikSv0BHLnMVXBQp2dYHyhEi/m5313OZAvehN0tURkJfUf3XaWy2KJUfrsI2e6+EhCpc+jf5zWoeTVVmfBAguMpfG7O9ZzyCQchQtdtNLJcAYVnXJNal1f6frjd6Yjr9o5kAGls3V+Y5acnYNK9kCBZgdguqjRspmTwp4dVLDsDPD+AJ4D6xWnHqD4kDpN2f2LZ/3xVPUN3vkvL9EDSmq8grIvtGckFEVSpJbpAyUQACbxmYtjvJRQCuQpZvfhc2GHsxefKFMxVct/rGNSjgsoF7c4E6W4Iaq461XOfgZeWtmMiXfR1abv/KUsgCEYXutx5Ad/JM0IzUGpBC0nMEtxQFyfNOjLRlxj6gABcXWEO5twAj2bjfErWxpIfZWqs0bjez/GTIxSEgfOmV0wTAcykBqE8t1p 1kL+F+wg gASO3lWWEmAr/GdLLg6FLqkuHzf/82DH+Ts/xT2gHWcbcubSYVBZMKcWtD5NFbONIPjRwPHPZFf9WjH1c3Ce+CYhRKeeOB/MkR4BU0FCA2EDd4x30f6O2n/TjCH73MwjUK90xGsB9nFBx3i9g3Qe4EN0wMg4jwtoyP5KvSeuHiJpOq3olXiEhUg49ZwBuavAOb0WmIZiIuJLVN1WsOcSCYAIn2BRYYhD5AXUQR0WwucxHo/FCeYcnOnUnlL77EW600BCfTzKLVM6EK/T6Un9JgpekzlNmP87G0TCLayPOz1KRQmCxv1HQBjNtOx63QkKxCgMxxdnh1uePUNhzv8eZgEfVuA1we9rwW3jmEWCu6lXqhDWT1nvgfvVgVq3Ztvt6/TFalstrayEmuNLvEk2h8HXqmSYvHDeDly3mKaxyGKRHuCpR1ZMZbQv8+T7ARf/v4a1v 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 Tue, Sep 24, 2024 at 03:31:55PM +0200, Danilo Krummrich wrote: > On Mon, Sep 23, 2024 at 05:13:15PM +0100, Gary Guo wrote: > > On Mon, 23 Sep 2024 15:56:28 +0200 > > Alice Ryhl wrote: > > > > > On Sat, Sep 21, 2024 at 5:33 PM Danilo Krummrich wrote: > > > > @@ -84,11 +92,18 @@ unsafe fn call( > > > > &self, > > > > ptr: Option>, > > > > layout: Layout, > > > > + old_layout: Layout, > > > > flags: Flags, > > > > ) -> Result, AllocError> { > > > > let size = aligned_size(layout); > > > > let ptr = match ptr { > > > > - Some(ptr) => ptr.as_ptr(), > > > > + Some(ptr) => { > > > > + if old_layout.size() == 0 { > > > > + ptr::null() > > > > + } else { > > > > + ptr.as_ptr() > > > > + } > > > > + } > > > > > > This is making Allocator work with zero-sized types, which deviates > > > from std. We should not do that without a reason. What is the reason? > > > > > > Alice > > > > As Benno said, this makes the API closer to Rust `allocator_api` > > Allocator trait as opposed to deviation. > > > > There's one benefit of doing this (discussed with Danilo off-list), > > which is it removes ZST special casing from caller. This RFC patch > > simplifies `Box` handling, and if we add this line to the safety doc > > > > `ptr` does not need to be a pointer returned by this > > allocator if the layout is zero-sized. > > > > then the `Vec` can also be simplified, removing all logics handling ZST > > specially, except for `Vec::new()` which it forges a well-aligned > > dangling pointer from nowhere. > > Partially, we still need the additional `Layout` for `Allocator::free`, which > in `Vec::drop` and `IntoIter::drop` looks like this: > > `let layout = Layout::array::(self.cap).unwrap();` Adding in the diff: - // If `cap == 0` we never allocated any memory in the first place. - if self.cap != 0 { - // SAFETY: `self.ptr` was previously allocated with `A`. - unsafe { A::free(self.ptr.cast()) }; - } + // This can never fail; since this `Layout` is equivalent to the one of the original + // allocation. + let layout = Layout::array::(self.cap).unwrap(); + + // SAFETY: `self.ptr` was previously allocated with `A`. + unsafe { A::free(self.ptr.cast(), layout) }; > > I really dislike that this can potentially transform into `BUG()`, but that's > probably unrelated to this patch series. > > > > > Best, > > Gary > >