Hi Alexandre, On 11/1/25 12:46, Alexandre Courbot wrote: > On Fri Oct 24, 2025 at 5:51 AM JST, Daniel del Castillo wrote: >> This patch solves one of the existing mentions of COHA, a task >> in the Nova task list about improving the `CoherentAllocation` API. >> It uses the `write` method from `CoherentAllocation`. >> >> Signed-off-by: Daniel del Castillo <[email protected]> >> >> --- >> >> V1 -> V2: Split previous patch into two. One per reference to COHA. >> Added more details in Safety comment. Let me know your thoughts >> Kept the original map to avoid a temporary variable >> --- >> drivers/gpu/nova-core/dma.rs | 15 +++------------ >> 1 file changed, 3 insertions(+), 12 deletions(-) >> >> diff --git a/drivers/gpu/nova-core/dma.rs b/drivers/gpu/nova-core/dma.rs >> index 94f44bcfd748..620d31078858 100644 >> --- a/drivers/gpu/nova-core/dma.rs >> +++ b/drivers/gpu/nova-core/dma.rs >> @@ -26,18 +26,9 @@ pub(crate) fn new(dev: &device::Device<device::Bound>, >> len: usize) -> Result<Sel >> >> pub(crate) fn from_data(dev: &device::Device<device::Bound>, data: >> &[u8]) -> Result<Self> { >> Self::new(dev, data.len()).map(|mut dma_obj| { >> - // TODO[COHA]: replace with `CoherentAllocation::write()` once >> available. >> - // SAFETY: >> - // - `dma_obj`'s size is at least `data.len()`. >> - // - We have just created this object and there is no other >> user at this stage. >> - unsafe { >> - core::ptr::copy_nonoverlapping( >> - data.as_ptr(), >> - dma_obj.dma.start_ptr_mut(), >> - data.len(), >> - ); >> - } >> - >> + // SAFETY: We have just allocated the DMA memory, we are the >> only users and >> + // we haven't made the device aware of the handle yet. >> + unsafe { dma_obj.write(data, 0)? } > > This doesn't build for me: > > error[E0277]: the `?` operator can only be used in a closure that returns > `Result` or `Option` (or another type that implements > `core::ops::FromResidual`) > --> ../drivers/gpu/nova-core/dma.rs:31:44 > | > 28 | Self::new(dev, data.len()).map(|mut dma_obj| { > | ------------- this function > should return `Result` or `Option` to accept `?` > ... > 31 | unsafe { dma_obj.write(data, 0)? } > | ^ cannot use the `?` > operator in a closure that returns `dma::DmaObject` > > Could you double-check? I guess you will need to change the `map` into > `and_then`.
You are totally right. I'm not sure what happened. I'll fix it. Thanks!
