From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E3B4C3DA7E6; Thu, 4 Jun 2026 20:13:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780604042; cv=none; b=c5LJ4Ki7+ZfcefQOuIlxC2oP2ybhM/k9/0fWO4KfpZD1Ky1RNyYzi5kEInWj5z1diRmq7asQ/JgX1BRoF4izuld3ELV1oeDTcYsqx7TooQ0e/ycD9ZOwDI7Q8v6Qy3xPRvoLdF8EWUli+kDspOvWN5Ike39ez8d3nNL0cbsw/Rw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780604042; c=relaxed/simple; bh=sTJEzbuAi0Zql6Py8Z/jDXX8M9Qx3+zM6af7wQ4Ha/4=; h=From:Subject:Date:Message-Id:MIME-Version:Content-Type:To:Cc; b=ArjmvoSQL/udvsJuJkghCoSoUeimkKbdPWT2dZdL08JjnHa/6DhF5JBg5mUEI6hUqz5Aj0XFNDjTITd2EqgM2N5EaVAKxqQiVpVpXMJyLAEO/CzC6CcjlSbY2Jals6ygCg3D+KwwSvyyrDcfOMx8z6HHAzDZnZ01DsOfseQ7p0w= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SCXjgGkY; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SCXjgGkY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 546761F00893; Thu, 4 Jun 2026 20:13:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1780604035; bh=iEosbdo8+RwE9O2gAXCo7UD1DvXDlYZ1z4p74PZJVYE=; h=From:Subject:Date:To:Cc; b=SCXjgGkY9klJ2whW1nN+WG/siGeNqShjlXzEoT8y1nTm3abpZRC/6tT+VdDSvsiHB Y+4I4OieLkwUyYtXZoLBw6ZN0QuZJ1+jVCTQOiUwgS2UQLy1OMuZxqNDdd5ZKJwhmd R229vi+p6g716xfei+GTWn0VOv7Ub8n2j9sAjLCELU9s83jRVAXc56c2vIH8mv/DjN RvmSKHdBktSga1hlaq5QkUmEK5CrKj5EhbqxEcnKFXwVT2p7kjkKdD/s/dA8H9P1ry sjMmVe0qHBRfkN01wNjM3j1SM9xKa1sytSH82BmbdTymVMOVHj9wK1no3yfDGwFQ+G sNqgGXq39HHMQ== From: Andreas Hindborg Subject: [PATCH v17 00/10] rust: add `Ownable` trait and `Owned` type Date: Thu, 04 Jun 2026 22:11:12 +0200 Message-Id: <20260604-unique-ref-v17-0-7b4c3d2930b9@kernel.org> Precedence: bulk X-Mailing-List: linux-security-module@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit X-B4-Tracking: v=1; b=H4sIAODbIWoC/2XN0Q6CIBTG8VdxXEcDFJSueo/WhcBBWU0L0tWc7 97RK63L87Hfn4kkiAESOWUTiTCGFPoOD14eMmLbumuABocDEUxIljNJhy48B6ARPBXaW6dK6TV oguCBY3ivtcsV7zakVx8/a3zkxTIvHcUEK7YdfKOM8tIaocHU1pjzDWIH92MfG7KURi43WrC9l qgrnYOrlGHK2n+ttvrnb4XaCl57azivXL7T8zx/ATNhN6YkAQAA X-Change-ID: 20250305-unique-ref-29fcd675f9e9 To: Miguel Ojeda , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Alice Ryhl , Trevor Gross , Danilo Krummrich , Greg Kroah-Hartman , Dave Ertman , Ira Weiny , Leon Romanovsky , Paul Moore , Serge Hallyn , "Rafael J. Wysocki" , David Airlie , Simona Vetter , Alexander Viro , Christian Brauner , Jan Kara , Daniel Almeida , Viresh Kumar , Nishanth Menon , Stephen Boyd , Bjorn Helgaas , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Boqun Feng , Uladzislau Rezki , Lorenzo Stoakes , Vlastimil Babka , "Liam R. Howlett" , Igor Korotin , Pavel Tikhomirov , Boqun Feng , Igor Korotin , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka Cc: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-block@vger.kernel.org, linux-security-module@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-pm@vger.kernel.org, linux-pci@vger.kernel.org, Andreas Hindborg , driver-core@lists.linux.dev, Asahi Lina , Oliver Mangold , Viresh Kumar , Asahi Lina , Andreas Hindborg X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9900; i=a.hindborg@kernel.org; h=from:subject:message-id; bh=sTJEzbuAi0Zql6Py8Z/jDXX8M9Qx3+zM6af7wQ4Ha/4=; b=owEBbQKS/ZANAwAKAfpQKQiqxb3QAcsmYgBqIdvmrTmdF5aqYIvehEzXF9zXaGQMEas/k9vr1 uB809TXHCSJAjMEAAEKAB0WIQRXitnI2WZ2JirAaob6UCkIqsW90AUCaiHb5gAKCRD6UCkIqsW9 0Bj8EACI88nBWOkKs2RydXJUXuaKjHXOVIUS8y/+LGdzzLU/s37Hhm9CxZGUpySo7vWoN97di+y Y/6yyVCZtZpXuf4qaKW/KTLUAcgN783OqpHcGefKsTtYP9UbNOGBQq7H1GSEAKmhrgPHydEFtKj WAxsKBOpapBn5/gh643BeoWBRxXLR5yE1f0yK9GZ4dPaX0/BR9GXvDWeZ/duesRhvKtj7GOdWyI DrgySEUWxn3Jwcw7XY/VbJM7Zwfbpf5ZDY9WjSU5uSfyPM6gjfw/PWuCpfQQy6r5tOeoC1QXkXz YHiYp8Xn2qPlNbddLpL2elIE5iY5B0B1DnY4huQW8Uo3tHnsGiUnZpbDorM7Bps302HSQRryGUz e91dq7BVaz5EaymnhiT7DNaYZtOtpqcpjYJ+PHnTayn3O7ggvD6m/5Vrn6WFRNy6kpf7ltplGEh d5TEcb8P0QIzRxDpTelp8YYFt/B3szZ2hIrRIdoZUQWzIekOn/68jHznvri7JC7erY1yVJlzpqJ aFp8o+3yMW0P9sQjGUWWCMhGKF8yaimQd9Fx4+hHcanCozyTUmZZ1OhL25HJIXtqCoLCh4QFtpR FYF5tMqaue7JFRWcNgikH7S2NxU0x2MXW20aEwAS/GqI52stKJ7qbRa8+ura2IVvy1aaGdhHt3x D9l27m4irH76txA== X-Developer-Key: i=a.hindborg@kernel.org; a=openpgp; fpr=3108C10F46872E248D1FB221376EB100563EF7A7 Add a new trait `Ownable` and type `Owned` for types that specify their own way of performing allocation and destruction. This is useful for types from the C side. Implement `ForeignOwnable` for `Owned`. Convert `Page` to be `Ownable` and add a `from_raw` method. Add the trait `OwnableRefCounted` that allows conversion between `ARef` and `Owned`. This is analogous to conversion between `Arc` and `UniqueArc`. Patches 1-5 implement `Ownable` and applies it to `Page`. These patches can be merged on their own. Patches 6-9 add `Ownable` -> `ARef` interop and can be merged later if consensus on their shape cannot be reached. Signed-off-by: Andreas Hindborg --- Changes in v17: - Rebase on v7.1-rc2. - Reorder patches so that `Ownable` can merge without `OwnableRefCounted` (Alice). - Add `#[inline]` directives to short functions added by the series (Gary). - Link to v16: https://msgid.link/20260224-unique-ref-v16-0-c21afcb118d3@kernel.org Changes in v16: - Simplify pointer to reference cast in `Page::from_raw`. - Use `NonNull` rather than `Owned` for `BorrowedPage` internals. - Use "convertible to reference" wording when converting pointers to references. - Fix formatting for `Page::from_raw` docs. - Leave imports alone when adding safety comment to aref example. - Use `KBox::into_nonnull` for examples. - Add patch for `KBox::into_nonnull`. - Change invariants and safety comments of `Ownable` and make the trait safe. - Make `Ownable::release` take a mutable reference. - Fix error handling in example for `Ownable` - Link to v15: https://msgid.link/20260220-unique-ref-v15-0-893ed86b06cc@kernel.org Changes in v15: - Update series with original SoB's. - Rename `AlwaysRefCounted` in `kernel::usb`. - Rename `Owned::get_pin_mut` to `Owned::as_pin_mut`. - Link to v14: https://msgid.link/20260204-unique-ref-v14-0-17cb29ebacbb@kernel.org Changes in v14: - Rebase on v6.19-rc7. - Rewrite cover letter. - Update documentation and safety comments based on v13 feedback. - Update commit messages. - Reorder implementation blocks in owned.rs. - Update example in owned.rs to use try operator rather than `expect`. - Reformat use statements. - Add patch: rust: page: convert to `Ownable`. - Add patch: rust: implement `ForeignOwnable` for `Owned`. - Add patch: rust: page: add `from_raw()`. - Link to v13: https://lore.kernel.org/r/20251117-unique-ref-v13-0-b5b243df1250@pm.me Changes in v13: - Rebase onto v6.18-rc1 (Andreas's work). - Documentation and style fixes contributed by Andreas - Link to v12: https://lore.kernel.org/r/20251001-unique-ref-v12-0-fa5c31f0c0c4@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-49eadcdc0aa6@pm.me 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-25de64c0307f@pm.me 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-e91618c1de26@pm.me 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-3082ffc67a31@pm.me 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-4caddb78aa05@pm.me 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-1ff53558617e@pm.me 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-bffeb633277e@pm.me 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 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-a8fdef7b1c2c@pm.me 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 To: Danilo Krummrich To: Lorenzo Stoakes To: Vlastimil Babka To: "Liam R. Howlett" To: Uladzislau Rezki To: Miguel Ojeda To: Boqun Feng To: Gary Guo To: Björn Roy Baron To: Benno Lossin To: Andreas Hindborg To: Alice Ryhl To: Trevor Gross To: Greg Kroah-Hartman To: "Rafael J. Wysocki" To: Dave Ertman To: Ira Weiny To: Leon Romanovsky To: Paul Moore To: Serge Hallyn To: David Airlie To: Simona Vetter To: Alexander Viro To: Christian Brauner To: Jan Kara To: Igor Korotin To: Daniel Almeida To: Viresh Kumar To: Nishanth Menon To: Stephen Boyd To: Bjorn Helgaas To: Krzysztof Wilczyński To: Pavel Tikhomirov Cc: rust-for-linux@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org Cc: driver-core@lists.linux.dev Cc: linux-block@vger.kernel.org Cc: linux-security-module@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: linux-fsdevel@vger.kernel.org Cc: linux-pm@vger.kernel.org Cc: linux-pci@vger.kernel.org --- Andreas Hindborg (5): rust: alloc: add `KBox::into_non_null` rust: implement `ForeignOwnable` for `Owned` rust: page: update formatting of `use` statements rust: aref: update formatting of use statements rust: page: add `from_raw()` Asahi Lina (2): rust: types: Add Ownable/Owned types rust: page: convert to `Ownable` Oliver Mangold (3): rust: rename `AlwaysRefCounted` to `RefCounted`. rust: Add missing SAFETY documentation for `ARef` example rust: Add `OwnableRefCounted` rust/kernel/alloc/kbox.rs | 9 + rust/kernel/auxiliary.rs | 7 +- rust/kernel/block/mq/request.rs | 15 +- rust/kernel/cred.rs | 13 +- rust/kernel/device.rs | 12 +- rust/kernel/device/property.rs | 11 +- rust/kernel/drm/device.rs | 9 +- rust/kernel/drm/gem/mod.rs | 16 +- rust/kernel/fs/file.rs | 16 +- rust/kernel/i2c.rs | 13 +- rust/kernel/lib.rs | 1 + rust/kernel/mm.rs | 15 +- rust/kernel/mm/mmput_async.rs | 9 +- rust/kernel/opp.rs | 10 +- rust/kernel/owned.rs | 361 ++++++++++++++++++++++++++++++++++++++++ rust/kernel/page.rs | 62 +++++-- rust/kernel/pci.rs | 10 +- rust/kernel/pid_namespace.rs | 12 +- rust/kernel/platform.rs | 7 +- rust/kernel/sync/aref.rs | 83 ++++++--- rust/kernel/task.rs | 13 +- rust/kernel/types.rs | 13 ++ rust/kernel/usb.rs | 17 +- 23 files changed, 652 insertions(+), 82 deletions(-) --- base-commit: 7fd2df204f342fc17d1a0bfcd474b24232fb0f32 change-id: 20250305-unique-ref-29fcd675f9e9 Best regards, -- Andreas Hindborg