mirror of
https://github.com/torvalds/linux.git
synced 2026-09-19 09:08:02 +02:00
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 for all lifetime-parameterized types, providing
only the Of<'a> GAT.
- 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.
This is a stable tag for other trees to merge.
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQS2q/xV6QjXAdC7k+1FlHeO1qrKLgUCalVYCAAKCRBFlHeO1qrK
Lv66AQCcu91WcBr1jpsMOptgN6rfg9WRqzn4Z69X2dKRz4XZKwD/Z3ihPBAuoDr8
eqKjYG6cCV/qhEVgr0SctOO2xHVTVAE=
=iqDJ
-----END PGP SIGNATURE-----
Merge patch series "ForLt/CovariantForLt split, auxiliary closure API and DevresLt"
Danilo Krummrich <dakr@kernel.org> says:
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 for all lifetime-parameterized types, providing
only the Of<'a> GAT.
- 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.
Link: https://patch.msgid.link/20260626183630.2585057-1-dakr@kernel.org
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
|
||
|---|---|---|
| .. | ||
| alloc | ||
| block | ||
| debugfs | ||
| device | ||
| drm | ||
| fs | ||
| gpu | ||
| interop | ||
| io | ||
| iommu | ||
| irq | ||
| list | ||
| mm | ||
| net | ||
| num | ||
| pci | ||
| ptr | ||
| str | ||
| sync | ||
| time | ||
| types | ||
| .gitignore | ||
| acpi.rs | ||
| alloc.rs | ||
| auxiliary.rs | ||
| bitfield.rs | ||
| bitmap.rs | ||
| bits.rs | ||
| block.rs | ||
| bug.rs | ||
| build_assert.rs | ||
| clk.rs | ||
| configfs.rs | ||
| cpu.rs | ||
| cpufreq.rs | ||
| cpumask.rs | ||
| cred.rs | ||
| debugfs.rs | ||
| device_id.rs | ||
| device.rs | ||
| devres.rs | ||
| dma.rs | ||
| driver.rs | ||
| error.rs | ||
| faux.rs | ||
| firmware.rs | ||
| fmt.rs | ||
| fs.rs | ||
| generated_arch_reachable_asm.rs.S | ||
| generated_arch_static_branch_asm.rs.S | ||
| generated_arch_warn_asm.rs.S | ||
| gpu.rs | ||
| i2c.rs | ||
| id_pool.rs | ||
| impl_flags.rs | ||
| init.rs | ||
| interop.rs | ||
| io.rs | ||
| ioctl.rs | ||
| iov.rs | ||
| irq.rs | ||
| jump_label.rs | ||
| Kconfig.test | ||
| kunit.rs | ||
| lib.rs | ||
| list.rs | ||
| maple_tree.rs | ||
| miscdevice.rs | ||
| mm.rs | ||
| module_param.rs | ||
| net.rs | ||
| num.rs | ||
| of.rs | ||
| opp.rs | ||
| page.rs | ||
| pci.rs | ||
| pid_namespace.rs | ||
| platform.rs | ||
| prelude.rs | ||
| print.rs | ||
| processor.rs | ||
| ptr.rs | ||
| pwm.rs | ||
| rbtree.rs | ||
| regulator.rs | ||
| revocable.rs | ||
| safety.rs | ||
| scatterlist.rs | ||
| security.rs | ||
| seq_file.rs | ||
| sizes.rs | ||
| soc.rs | ||
| std_vendor.rs | ||
| str.rs | ||
| sync.rs | ||
| task.rs | ||
| time.rs | ||
| tracepoint.rs | ||
| transmute.rs | ||
| types.rs | ||
| uaccess.rs | ||
| usb.rs | ||
| workqueue.rs | ||
| xarray.rs | ||