On Mon, Apr 28, 2025 at 04:00:26PM +0200, Danilo Krummrich wrote: > This patch series implements a direct accessor for the data stored within > a Devres container for cases where we can prove that we own a reference > to a Device<Bound> (i.e. a bound device) of the same device that was used > to create the corresponding Devres container. > > Usually, when accessing the data stored within a Devres container, it is > not clear whether the data has been revoked already due to the device > being unbound and, hence, we have to try whether the access is possible > and subsequently keep holding the RCU read lock for the duration of the > access. > > However, when we can prove that we hold a reference to Device<Bound> > matching the device the Devres container has been created with, we can > guarantee that the device is not unbound for the duration of the > lifetime of the Device<Bound> reference and, hence, it is not possible > for the data within the Devres container to be revoked. > > Therefore, in this case, we can bypass the atomic check and the RCU read > lock, which is a great optimization and simplification for drivers. > Acked-by: Boqun Feng <boqun.feng@xxxxxxxxx> You would need to, however, change the titles for patch #2 and #3 because there is no `Devres::access_with()` any more. Regards, Boqun > The patches of this series are also available in [1]. > > [1] https://web.git.kernel.org/pub/scm/linux/kernel/git/dakr/linux.git/log/?h=rust/devres > > Changes in v2: > - Revocable::access(): remvoe explicit lifetimes; don't refer to 'a in > the safety requirement > - Devres::access() > - rename Devres::access_with() to Devres::access() > - add missing '```' at the end of the example > - remove 's lifetime > - add # Errors section > > Danilo Krummrich (3): > rust: revocable: implement Revocable::access() > rust: devres: implement Devres::access_with() > samples: rust: pci: take advantage of Devres::access_with() > > rust/kernel/devres.rs | 38 +++++++++++++++++++++++++++++++++ > rust/kernel/revocable.rs | 12 +++++++++++ > samples/rust/rust_driver_pci.rs | 12 +++++------ > 3 files changed, 56 insertions(+), 6 deletions(-) > > > base-commit: 3be746ebc1e6e32f499a65afe405df9030153a63 > -- > 2.49.0 >