From patchwork Mon Aug 14 08:47:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benno Lossin X-Patchwork-Id: 135271 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b824:0:b0:3f2:4152:657d with SMTP id z4csp2626372vqi; Mon, 14 Aug 2023 02:37:45 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGsUtGNDb/siDKapiEE7Sg87G4IEwOmubauXN8AqFh1d0uo11exR+BYF4q41qCkSbJyWisn X-Received: by 2002:a05:6a21:7890:b0:141:2cb:2954 with SMTP id bf16-20020a056a21789000b0014102cb2954mr12244612pzc.3.1692005865285; Mon, 14 Aug 2023 02:37:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692005865; cv=none; d=google.com; s=arc-20160816; b=ClAfCrgVHqAqGgXos71pbC8DkuTNhWozkxCDmAGUHDIjmvtvtM3+EiMBJJn5Ien1EU aOOm8uheHxJhtcQW14jGoAZsplgIIRdcjkdGrQFNws7JDcvviN3UN5x+29HYWwFpJF9N LhytR+GhRpkDEUS+iLjueyUkOJuVeoC1RjFTzgFqZptZ8wSV4lKZeh3yKuqFsA/QXcqv Dxl329piZJL6t2Kaq4oaDRkjkvlzK2V4UNsucXs2IAr4qEkzHsET8kXz+JW6u1iKeAkq WRhEGnv5JGsN63oYjsO3FvsEtJ3TKNCE8kPf4UImEzf8R+sponqDrHyKhxKP741yP5xL YyxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :feedback-id:references:in-reply-to:message-id:subject:cc:from:to :dkim-signature:date; bh=kwnI5+l3SlcIXt3YVOWTO7NQq0uMh4+BFKhqIK/WWV4=; fh=TE4onW3Du2FQ1EsedDK8TzgRHOYndfJXYpOtlseWrM0=; b=Gg+r/tlpQdegJ240eCWXY/j9xaY+uIk2/JCQfEnLwMfPZYDGaIlR4KLPJoWO5fWCBd 4OUnGO9wrq/s5YR4TxznoG+woe0h7Wkco/vMS3RcK5cTwL+lD8cu7NjMmpt6CK1lIGRM iWDsIDTdvCXKl7pb29b/n3g+r/M3vvNzSdrFSWoOEF6teH+mpWbm9fd+SsvXo76CFvyB hxeTrT5/ZFgHS9Fb/gCgB38+GiOvSjzk6IzLZElvfeT/flKVj90g56j7PL/sfv1e+6+E xjM9MuOyXBvb+8ETG/L6wm64FTdNMgUPCFl0t6ZHkenaXAP0QMRyrvUwhmiW460wYxKr Y5LQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@proton.me header.s=protonmail header.b=WfvQxVkN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=proton.me Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s1-20020a63dc01000000b00553ce421356si8108148pgg.56.2023.08.14.02.37.32; Mon, 14 Aug 2023 02:37:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@proton.me header.s=protonmail header.b=WfvQxVkN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=proton.me Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233319AbjHNIss (ORCPT + 99 others); Mon, 14 Aug 2023 04:48:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60240 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231862AbjHNIsP (ORCPT ); Mon, 14 Aug 2023 04:48:15 -0400 Received: from mail-4322.protonmail.ch (mail-4322.protonmail.ch [185.70.43.22]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 55A66BB for ; Mon, 14 Aug 2023 01:48:00 -0700 (PDT) Date: Mon, 14 Aug 2023 08:47:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=protonmail; t=1692002878; x=1692262078; bh=kwnI5+l3SlcIXt3YVOWTO7NQq0uMh4+BFKhqIK/WWV4=; 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=WfvQxVkNyUpKJJPJeXtyGEsl3PEPcbjPmZ8VluT61s46kQCr3Xt9ftuIQDW/MExjb 7W1lqo3DojXVv/la0jVGx/X0G5OL0YcXLGQpEMEo0Qtyfy016ghhJBO6JRVMsoiIOY 9AIHL0zxiESNlq9BQdAQl0jmExBQagTMNNKIDeNl25iJBAWBEOMOwhforqTWTDGTnW TETwDZ+HLzwFDhjXMLi1sFvPyIOAyncw4v2zhqHoG1bwAHbGhSNiS+tqfe97UfFEFG /t4SZm36ff/LfJzsXk2Ud5KLsnDPJzp47y4sLgiv1RspkzIP42uDHRyNec4CfJ7ULv XkixB7uXama/A== To: Miguel Ojeda , Wedson Almeida Filho , Alex Gaynor From: Benno Lossin Cc: Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Alice Ryhl , Andreas Hindborg , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, Martin Rodriguez Reboredo Subject: [PATCH v4 11/13] rust: init: make `PinInit` a supertrait of `Init` Message-ID: <20230814084602.25699-12-benno.lossin@proton.me> In-Reply-To: <20230814084602.25699-1-benno.lossin@proton.me> References: <20230814084602.25699-1-benno.lossin@proton.me> Feedback-ID: 71780778:user:proton MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1774196742036906318 X-GMAIL-MSGID: 1774196742036906318 Remove the blanket implementation of `PinInit for I where I: Init`. This blanket implementation prevented custom types that implement `PinInit`. Reviewed-by: Martin Rodriguez Reboredo Reviewed-by: Alice Ryhl Reviewed-by: Gary Guo Signed-off-by: Benno Lossin --- v3 -> v4: - added Reviewed-by from Gary. v2 -> v3: - add blank missing line, - added Reviewed-by's from Martin and Alice. rust/kernel/init.rs | 21 ++++++++------------- rust/kernel/init/__internal.rs | 12 ++++++++++++ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/rust/kernel/init.rs b/rust/kernel/init.rs index f91ecd3b1edf..a15fb5ddbc7d 100644 --- a/rust/kernel/init.rs +++ b/rust/kernel/init.rs @@ -807,7 +807,7 @@ pub unsafe trait PinInit: Sized { /// /// [`Arc`]: crate::sync::Arc #[must_use = "An initializer must be used in order to create its value."] -pub unsafe trait Init: Sized { +pub unsafe trait Init: PinInit { /// Initializes `slot`. /// /// # Safety @@ -818,18 +818,6 @@ pub unsafe trait Init: Sized { unsafe fn __init(self, slot: *mut T) -> Result<(), E>; } -// SAFETY: Every in-place initializer can also be used as a pin-initializer. -unsafe impl PinInit for I -where - I: Init, -{ - unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), E> { - // SAFETY: `__init` meets the same requirements as `__pinned_init`, except that it does not - // require `slot` to not move after init. - unsafe { self.__init(slot) } - } -} - /// Creates a new [`PinInit`] from the given closure. /// /// # Safety @@ -972,6 +960,13 @@ unsafe fn __init(self, slot: *mut T) -> Result<(), E> { } } +// SAFETY: Every type can be initialized by-value. `__pinned_init` calls `__init`. +unsafe impl PinInit for T { + unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), E> { + unsafe { self.__init(slot) } + } +} + /// Smart pointer that can initialize memory in-place. pub trait InPlaceInit: Sized { /// Use the given pin-initializer to pin-initialize a `T` inside of a new smart pointer of this diff --git a/rust/kernel/init/__internal.rs b/rust/kernel/init/__internal.rs index 7abd1fb65e41..12e195061525 100644 --- a/rust/kernel/init/__internal.rs +++ b/rust/kernel/init/__internal.rs @@ -32,6 +32,18 @@ unsafe fn __init(self, slot: *mut T) -> Result<(), E> { } } +// SAFETY: While constructing the `InitClosure`, the user promised that it upholds the +// `__pinned_init` invariants. +unsafe impl PinInit for InitClosure +where + F: FnOnce(*mut T) -> Result<(), E>, +{ + #[inline] + unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), E> { + (self.0)(slot) + } +} + /// This trait is only implemented via the `#[pin_data]` proc-macro. It is used to facilitate /// the pin projections within the initializers. ///