[PATCH v12 0/4] New trait OwnableRefCounted for ARef<->Owned conversion.

Oliver Mangold posted 4 patches 11 hours ago
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(-)
[PATCH v12 0/4] New trait OwnableRefCounted for ARef<->Owned conversion.
Posted by Oliver Mangold 11 hours ago
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-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<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-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

---
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>