| From: |
| Danilo Krummrich <dakr-AT-kernel.org> |
| To: |
| gregkh-AT-linuxfoundation.org, rafael-AT-kernel.org, dakr-AT-kernel.org, ojeda-AT-kernel.org, boqun-AT-kernel.org, gary-AT-garyguo.net, bjorn3_gh-AT-protonmail.com, lossin-AT-kernel.org, a.hindborg-AT-kernel.org, aliceryhl-AT-google.com, tmgross-AT-umich.edu, acourbot-AT-nvidia.com, ecourtney-AT-nvidia.com, m.wilczynski-AT-samsung.com, david.m.ertman-AT-intel.com, ira.weiny-AT-intel.com, leon-AT-kernel.org, daniel.almeida-AT-collabora.com, bhelgaas-AT-google.com, kwilczynski-AT-kernel.org |
| Subject: |
| [PATCH v2 0/7] ForLt/CovariantForLt split, auxiliary closure API and DevresLt |
| Date: |
| Wed, 03 Jun 2026 03:10:11 +0200 |
| Message-ID: |
| <20260603011020.2073650-1-dakr@kernel.org> |
| Cc: |
| driver-core-AT-lists.linux.dev, linux-kernel-AT-vger.kernel.org, nova-gpu-AT-lists.linux.dev, dri-devel-AT-lists.freedesktop.org, linux-pwm-AT-vger.kernel.org, rust-for-linux-AT-vger.kernel.org |
| Archive-link: |
| Article |
The ForLt trait currently guarantees covariance, which allows safe
lifetime shortening via cast_ref(). However, some types (e.g. those
containing Mutex<&'bound T>) are invariant over their lifetime parameter
and cannot safely use cast_ref().
This series splits ForLt into two traits:
- ForLt: base trait providing unsafe cast_ref_unchecked() for all
lifetime-parameterized types.
- CovariantForLt: unsafe subtrait that guarantees covariance,
providing a safe cast_ref() method.
For invariant types, a closure-based API (registration_data_with()) is
added to the auxiliary subsystem. The closure's HRTB prevents the caller
from choosing a concrete lifetime, which would be unsound for invariant
types.
On top of that, this series adds DevresLt<F: ForLt>, a thin wrapper
around Devres<F::Of<'static>> that shortens the stored 'static lifetime
back to the caller's borrow scope. DevresLt provides both closure-based
access (access_with/try_access_with for ForLt types) and direct
reference access (access/try_access for CovariantForLt types).
Also implement ForLt and CovariantForLt for Bar, IoMem and
ExclusiveIoMem, and update their into_devres() methods to return
DevresLt. Provide convenience type aliases DevresBar, DevresIoMem and
DevresExclusiveIoMem.
Changes in v2:
- Fold the ForLt -> CovariantForLt rename and the new ForLt base trait
into this series
- Add closure-based registration_data_with() for auxiliary ForLt types
- Add auxiliary sample demonstrating ForLt with an invariant Mutex type
- DevresLt: add closure-based access_with()/try_access_with() for ForLt
types alongside direct access()/try_access() for CovariantForLt types
- Make DevresLt::new() unsafe; callers must guarantee the data outlives
the device binding
- Implement both ForLt and CovariantForLt (previously just ForLt) for
Bar, IoMem, ExclusiveIoMem
- Various safety comment and documentation improvements
Danilo Krummrich (7):
rust: types: rename ForLt to CovariantForLt
rust: types: introduce ForLt base trait for CovariantForLt
rust: auxiliary: add registration_data_with() for ForLt types
rust: auxiliary: sample: demonstrate ForLt with invariant Mutex type
rust: devres: add DevresLt for ForLt-aware device resource access
rust: pci: return DevresLt from Bar::into_devres()
rust: io: mem: return DevresLt from
IoMem/ExclusiveIoMem::into_devres()
drivers/gpu/nova-core/driver.rs | 4 +-
drivers/pwm/pwm_th1520.rs | 5 +-
rust/kernel/auxiliary.rs | 74 +++++++++++++---
rust/kernel/devres.rs | 110 +++++++++++++++++++++++
rust/kernel/io/mem.rs | 65 +++++++++-----
rust/kernel/pci.rs | 1 +
rust/kernel/pci/io.rs | 37 +++++---
rust/kernel/types.rs | 1 +
rust/kernel/types/for_lt.rs | 122 ++++++++++++++++++++------
rust/macros/for_lt.rs | 52 ++++++++---
rust/macros/lib.rs | 18 +++-
samples/rust/rust_driver_auxiliary.rs | 96 ++++++++++++++------
12 files changed, 472 insertions(+), 113 deletions(-)
base-commit: 0023a1e8d01a9d400257d30c851bd16a29568809
--
2.54.0