rust: dma: add `Send` implementation for `CoherentAllocation`
Subsystems (3)
Miguel Ojeda
maintainerPATCH 1/1 rust: dma: add `Send` implementation for `CoherentAllocation`
From: Danilo Krummrich <[email protected]>
Stephen found a future build failure in linux-next [1]:
error[E0277]: `*mut MyStruct` cannot be sent between threads safely
--> samples/rust/rust_dma.rs:47:22
|
47 | impl pci::Driver for DmaSampleDriver {
| ^^^^^^^^^^^^^^^ `*mut MyStruct` cannot be sent between threads safelyIt is caused by the interaction between commit 935e1d90bf6f ("rust: pci:
require Send for Driver trait implementers") from the driver-core tree, which fixes a missing concurrency requirement, and commit 9901addae63b ("samples: rust: add Rust dma test sample driver") which adds a sample that does not satisfy that requirement.
Add a Send implementation to CoherentAllocation, which allows the sample (and other future users) to satisfy it.
--- rust/kernel/dma.rs | 4 ++++ 1 file changed, 4 insertions(+)
rust/kernel/dma.rs +4 -0
@@ -301,6 +301,10 @@ fn drop(&mut self) { } } +// SAFETY: It is safe to send a `CoherentAllocation` to another thread if `T` +// can be send to another thread. +unsafe impl <T :AsBytes +FromBytes +Send >Send for CoherentAllocation <T > {} +/// Reads a field of an item from an allocated region of structs. /// /// # Examples
Signature · 1 line
2.49.0
Quoted 17 lines · Miguel Ojeda
From: Danilo Krummrich <[email protected]>
Stephen found a future build failure in linux-next [1]:
error[E0277]: `*mut MyStruct` cannot be sent between threads safely --> samples/rust/rust_dma.rs:47:22 | 47 | impl pci::Driver for DmaSampleDriver { | ^^^^^^^^^^^^^^^ `*mut MyStruct` cannot be sent between threads safelyIt is caused by the interaction between commit
935e1d90bf6f("rust: pci:
require Send for Driver trait implementers") from the driver-core tree, which fixes a missing concurrency requirement, and commit9901addae63b("samples: rust: add Rust dma test sample driver") which adds a sample that does not satisfy that requirement.
Quoted 7 lines
Add a
Sendimplementation toCoherentAllocation, which allows the sample (and other future users) to satisfy it.Reported-by Stephen Rothwell <[email protected]>Signed-off-by Danilo Krummrich <[email protected]>Signed-off-by Miguel Ojeda <[email protected]>
If nobody shouts in the next few hours, I will apply it to rust-next to clean the build failure for tomorrow's linux-next.
Abdiel: if you can give an Acked-by, that would be great.
Thanks!
Cheers,
Miguel
Quoted 32 lines · Miguel Ojeda
From: Danilo Krummrich <[email protected]>
Stephen found a future build failure in linux-next [1]:
error[E0277]: `*mut MyStruct` cannot be sent between threads safely --> samples/rust/rust_dma.rs:47:22 | 47 | impl pci::Driver for DmaSampleDriver { | ^^^^^^^^^^^^^^^ `*mut MyStruct` cannot be sent between threads safelyIt is caused by the interaction between commit
935e1d90bf6f("rust: pci:
require Send for Driver trait implementers") from the driver-core tree, which fixes a missing concurrency requirement, and commit9901addae63b("samples: rust: add Rust dma test sample driver") which adds a sample that does not satisfy that requirement.Add a
Sendimplementation toCoherentAllocation, which allows the sample (and other future users) to satisfy it.Reported-by Stephen Rothwell <[email protected]>Signed-off-by Danilo Krummrich <[email protected]>Signed-off-by Miguel Ojeda <[email protected]>--- rust/kernel/dma.rs | 4 ++++ 1 file changed, 4 insertions(+)rust/kernel/dma.rs +0
-0
rust/kernel/dma.rs fn drop(&mut self) { · line 305
Quoted 5 lines
rust/kernel/dma.rs +2
-0@@ -301,6 +301,10 @@ fn drop(&mut self) { } } +// SAFETY: It is safe to send a `CoherentAllocation` to another thread if `T` +// can be send to another thread.
s/can be send/can be sent
Regards,
Boqun
Quoted 8 lines
rust/kernel/dma.rs +2
-0+unsafe impl <T :AsBytes +FromBytes +Send >Send for CoherentAllocation <T > {} +/// Reads a field of an item from an allocated region of structs. /// /// # Examples Signature · 1 line
2.49.0
Miguel Ojeda
AppliedQuoted 17 lines · Miguel Ojeda
From: Danilo Krummrich <[email protected]>
Stephen found a future build failure in linux-next [1]:
error[E0277]: `*mut MyStruct` cannot be sent between threads safely --> samples/rust/rust_dma.rs:47:22 | 47 | impl pci::Driver for DmaSampleDriver { | ^^^^^^^^^^^^^^^ `*mut MyStruct` cannot be sent between threads safelyIt is caused by the interaction between commit
935e1d90bf6f("rust: pci:
require Send for Driver trait implementers") from the driver-core tree, which fixes a missing concurrency requirement, and commit9901addae63b("samples: rust: add Rust dma test sample driver") which adds a sample that does not satisfy that requirement.
Quoted 7 lines
Add a
Sendimplementation toCoherentAllocation, which allows the sample (and other future users) to satisfy it.Reported-by Stephen Rothwell <[email protected]>Signed-off-by Danilo Krummrich <[email protected]>Signed-off-by Miguel Ojeda <[email protected]>
Applied to rust-next -- thanks everyone!
[ Added number to Closes. Fix typo spotted by Boqun. - Miguel ]
Cheers,
Miguel