New trait OwnableRefCounted for ARef<->Owned conversion.
From: | Oliver Mangold <oliver.mangold-AT-pm.me> | |
To: | Miguel Ojeda <ojeda-AT-kernel.org>, Alex Gaynor <alex.gaynor-AT-gmail.com>, Boqun Feng <boqun.feng-AT-gmail.com>, Gary Guo <gary-AT-garyguo.net>, Björn Roy Baron <bjorn3_gh-AT-protonmail.com>, Andreas Hindborg <a.hindborg-AT-kernel.org>, Alice Ryhl <aliceryhl-AT-google.com>, Trevor Gross <tmgross-AT-umich.edu>, Benno Lossin <lossin-AT-kernel.org>, Danilo Krummrich <dakr-AT-kernel.org>, Greg Kroah-Hartman <gregkh-AT-linuxfoundation.org>, Dave Ertman <david.m.ertman-AT-intel.com>, Ira Weiny <ira.weiny-AT-intel.com>, Leon Romanovsky <leon-AT-kernel.org>, "Rafael J. Wysocki" <rafael-AT-kernel.org>, Maarten Lankhorst <maarten.lankhorst-AT-linux.intel.com>, Maxime Ripard <mripard-AT-kernel.org>, Thomas Zimmermann <tzimmermann-AT-suse.de>, David Airlie <airlied-AT-gmail.com>, Simona Vetter <simona-AT-ffwll.ch>, Alexander Viro <viro-AT-zeniv.linux.org.uk>, Christian Brauner <brauner-AT-kernel.org>, Jan Kara <jack-AT-suse.cz>, Lorenzo Stoakes <lorenzo.stoakes-AT-oracle.com>, "Liam R. Howlett" <Liam.Howlett-AT-oracle.com>, Viresh Kumar <vireshk-AT-kernel.org>, Nishanth Menon <nm-AT-ti.com>, Stephen Boyd <sboyd-AT-kernel.org>, Bjorn Helgaas <bhelgaas-AT-google.com>, Krzysztof Wilczyński <kwilczynski-AT-kernel.org>, Asahi Lina <lina+kernel-AT-asahilina.net> | |
Subject: | [PATCH v12 0/4] New trait OwnableRefCounted for ARef<->Owned conversion. | |
Date: | Wed, 01 Oct 2025 09:03:31 +0000 | |
Message-ID: | <20251001-unique-ref-v12-0-fa5c31f0c0c4@pm.me> | |
Cc: | rust-for-linux-AT-vger.kernel.org, linux-kernel-AT-vger.kernel.org, linux-block-AT-vger.kernel.org, dri-devel-AT-lists.freedesktop.org, linux-fsdevel-AT-vger.kernel.org, linux-mm-AT-kvack.org, linux-pm-AT-vger.kernel.org, linux-pci-AT-vger.kernel.org, Oliver Mangold <oliver.mangold-AT-pm.me> | |
Archive-link: | Article |
This allows to convert between ARef<T> and Owned<T> by implementing the new trait OwnedRefCounted. This way we will have a shared/unique reference counting scheme for types with built-in refcounts in analogy to Arc/UniqueArc. Signed-off-by: Oliver Mangold <oliver.mangold@pm.me> --- Changes in v12: - - Rebase onto v6.17-rc1 (Andreas's work). - moved kernel/types/ownable.rs to kernel/owned.rs - Drop OwnableMut, make DerefMut depend on Unpin instead. I understood ML discussion as that being okay, but probably needs further scrunity. - Lots of more documentation changes suggested by reviewers. - Usage example for Ownable/Owned. - Link to v11: https://lore.kernel.org/r/20250618-unique-ref-v11-0-49ead... Changes in v11: - Rework of documentation. I tried to honor all requests for changes "in spirit" plus some clearifications and corrections of my own. - Dropping `SimpleOwnedRefCounted` by request from Alice, as it creates a potentially problematic blanket implementation (which a derive macro that could be created later would not have). - Dropping Miguel's "kbuild: provide `RUSTC_HAS_DO_NOT_RECOMMEND` symbol" patch, as it is not needed anymore after dropping `SimpleOwnedRefCounted`. (I can add it again, if it is considered useful anyway). - Link to v10: https://lore.kernel.org/r/20250502-unique-ref-v10-0-25de6... Changes in v10: - Moved kernel/ownable.rs to kernel/types/ownable.rs - Fixes in documentation / comments as suggested by Andreas Hindborg - Added Reviewed-by comment for Andreas Hindborg - Fix rustfmt of pid_namespace.rs - Link to v9: https://lore.kernel.org/r/20250325-unique-ref-v9-0-e91618... Changes in v9: - Rebase onto v6.14-rc7 - Move Ownable/OwnedRefCounted/Ownable, etc., into separate module - Documentation fixes to Ownable/OwnableMut/OwnableRefCounted - Add missing SAFETY documentation to ARef example - Link to v8: https://lore.kernel.org/r/20250313-unique-ref-v8-0-3082ff... Changes in v8: - Fix Co-developed-by and Suggested-by tags as suggested by Miguel and Boqun - Some small documentation fixes in Owned/Ownable patch - removing redundant trait constraint on DerefMut for Owned as suggested by Boqun Feng - make SimpleOwnedRefCounted no longer implement RefCounted as suggested by Boqun Feng - documentation for RefCounted as suggested by Boqun Feng - Link to v7: https://lore.kernel.org/r/20250310-unique-ref-v7-0-4caddb... Changes in v7: - Squash patch to make Owned::from_raw/into_raw public into parent - Added Signed-off-by to other people's commits - Link to v6: https://lore.kernel.org/r/20250310-unique-ref-v6-0-1ff535... Changes in v6: - Changed comments/formatting as suggested by Miguel Ojeda - Included and used new config flag RUSTC_HAS_DO_NOT_RECOMMEND, thus no changes to types.rs will be needed when the attribute becomes available. - Fixed commit message for Owned patch. - Link to v5: https://lore.kernel.org/r/20250307-unique-ref-v5-0-bffeb6... Changes in v5: - Rebase the whole thing on top of the Ownable/Owned traits by Asahi Lina. - Rename AlwaysRefCounted to RefCounted and make AlwaysRefCounted a marker trait instead to allow to obtain an ARef<T> from an &T, which (as Alice pointed out) is unsound when combined with UniqueRef/Owned. - Change the Trait design and naming to implement this feature, UniqueRef/UniqueRefCounted is dropped in favor of Ownable/Owned and OwnableRefCounted is used to provide the functions to convert between Owned and ARef. - Link to v4: https://lore.kernel.org/r/20250305-unique-ref-v4-1-a8fdef... Changes in v4: - Just a minor change in naming by request from Andreas Hindborg, try_shared_to_unique() -> try_from_shared(), unique_to_shared() -> into_shared(), which is more in line with standard Rust naming conventions. - Link to v3: https://lore.kernel.org/r/Z8Wuud2UQX6Yukyr@mango --- Asahi Lina (1): rust: types: Add Ownable/Owned types Oliver Mangold (3): `AlwaysRefCounted` is renamed to `RefCounted`. rust: Add missing SAFETY documentation for `ARef` example rust: Add `OwnableRefCounted` rust/kernel/auxiliary.rs | 7 +- rust/kernel/block/mq/request.rs | 14 +- rust/kernel/cred.rs | 7 +- rust/kernel/device.rs | 9 +- rust/kernel/device/property.rs | 7 +- rust/kernel/drm/device.rs | 9 +- rust/kernel/drm/gem/mod.rs | 7 +- rust/kernel/fs/file.rs | 13 +- rust/kernel/lib.rs | 1 + rust/kernel/mm.rs | 12 +- rust/kernel/mm/mmput_async.rs | 7 +- rust/kernel/opp.rs | 7 +- rust/kernel/owned.rs | 318 ++++++++++++++++++++++++++++++++++++++++ rust/kernel/pci.rs | 7 +- rust/kernel/pid_namespace.rs | 7 +- rust/kernel/platform.rs | 7 +- rust/kernel/sync/aref.rs | 67 ++++++--- rust/kernel/task.rs | 7 +- rust/kernel/types.rs | 4 +- 19 files changed, 474 insertions(+), 43 deletions(-) --- base-commit: 8f5ae30d69d7543eee0d70083daf4de8fe15d585 change-id: 20250305-unique-ref-29fcd675f9e9 Best regards, -- Oliver Mangold <oliver.mangold@pm.me>