diff options
| author | Danilo Krummrich <[email protected]> | 2025-03-14 16:09:06 +0000 |
|---|---|---|
| committer | Greg Kroah-Hartman <[email protected]> | 2025-03-17 07:04:25 +0000 |
| commit | 7b948a2af6b5d64a25c14da8f63d8084ea527cd9 (patch) | |
| tree | 86379ff1cf83282fefb7ff530dfb7b8d2b650400 /samples/rust/rust_driver_platform.rs | |
| parent | rust: device: implement device context marker (diff) | |
| download | kernel-7b948a2af6b5d64a25c14da8f63d8084ea527cd9.tar.gz kernel-7b948a2af6b5d64a25c14da8f63d8084ea527cd9.zip | |
rust: pci: fix unrestricted &mut pci::Device
As by now, pci::Device is implemented as:
#[derive(Clone)]
pub struct Device(ARef<device::Device>);
This may be convenient, but has the implication that drivers can call
device methods that require a mutable reference concurrently at any
point of time.
Instead define pci::Device as
pub struct Device<Ctx: DeviceContext = Normal>(
Opaque<bindings::pci_dev>,
PhantomData<Ctx>,
);
and manually implement the AlwaysRefCounted trait.
With this we can implement methods that should only be called from
bus callbacks (such as probe()) for pci::Device<Core>. Consequently, we
make this type accessible in bus callbacks only.
Arbitrary references taken by the driver are still of type
ARef<pci::Device> and hence don't provide access to methods that are
reserved for bus callbacks.
Fixes: 1bd8b6b2c5d3 ("rust: pci: add basic PCI device / driver abstractions")
Reviewed-by: Benno Lossin <[email protected]>
Signed-off-by: Danilo Krummrich <[email protected]>
Acked-by: Boqun Feng <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Diffstat (limited to 'samples/rust/rust_driver_platform.rs')
0 files changed, 0 insertions, 0 deletions
