From: "Gary Guo" <gary@garyguo.net>
To: "Alexandre Courbot" <acourbot@nvidia.com>,
"Danilo Krummrich" <dakr@kernel.org>
Cc: <aliceryhl@google.com>, <ojeda@kernel.org>, <boqun@kernel.org>,
<gary@garyguo.net>, <bjorn3_gh@protonmail.com>,
<lossin@kernel.org>, <a.hindborg@kernel.org>, <tmgross@umich.edu>,
<abdiel.janulgue@gmail.com>, <daniel.almeida@collabora.com>,
<robin.murphy@arm.com>, <driver-core@lists.linux.dev>,
<nouveau@lists.freedesktop.org>,
<dri-devel@lists.freedesktop.org>,
<rust-for-linux@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 8/8] gpu: nova-core: convert to new dma::Coherent API
Date: Fri, 20 Mar 2026 15:05:00 +0000 [thread overview]
Message-ID: <DH7PABYW5E20.JDWRFX88KCL7@garyguo.net> (raw)
In-Reply-To: <DH7OODCRB8WQ.1GBKKZZHTNWC2@nvidia.com>
On Fri Mar 20, 2026 at 2:36 PM GMT, Alexandre Courbot wrote:
> On Wed Mar 4, 2026 at 1:22 AM JST, Danilo Krummrich wrote:
>> From: Gary Guo <gary@garyguo.net>
>>
>> Remove all usages of dma::CoherentAllocation and use the new
>> dma::Coherent type instead.
>>
>> Note that there are still remainders of the old dma::CoherentAllocation
>> API, such as as_slice() and as_slice_mut().
>>
>> Signed-off-by: Gary Guo <gary@garyguo.net>
>> Signed-off-by: Danilo Krummrich <dakr@kernel.org>
>> ---
>> drivers/gpu/nova-core/dma.rs | 19 +++++------
>> drivers/gpu/nova-core/falcon.rs | 7 ++--
>> drivers/gpu/nova-core/firmware.rs | 10 ++----
>> drivers/gpu/nova-core/gsp.rs | 18 ++++++----
>> drivers/gpu/nova-core/gsp/cmdq.rs | 55 ++++++++++++-------------------
>> 5 files changed, 46 insertions(+), 63 deletions(-)
>>
>> diff --git a/drivers/gpu/nova-core/dma.rs b/drivers/gpu/nova-core/dma.rs
>> index 7215398969da..3c19d5ffcfe8 100644
>> --- a/drivers/gpu/nova-core/dma.rs
>> +++ b/drivers/gpu/nova-core/dma.rs
>> @@ -9,13 +9,13 @@
>>
>> use kernel::{
>> device,
>> - dma::CoherentAllocation,
>> + dma::Coherent,
>> page::PAGE_SIZE,
>> prelude::*, //
>> };
>>
>> pub(crate) struct DmaObject {
>> - dma: CoherentAllocation<u8>,
>> + dma: Coherent<[u8]>,
>> }
>
> Actually, do we even still have a need for `DmaObject` now that
> `Coherent` is available? It would be nice to check (as a follow-up
> patch, I can look into it) whether we can remove that whole nova-local
> `dma` module.
>
>>
>> impl DmaObject {
>> @@ -24,23 +24,22 @@ pub(crate) fn new(dev: &device::Device<device::Bound>, len: usize) -> Result<Sel
>> .map_err(|_| EINVAL)?
>> .pad_to_align()
>> .size();
>> - let dma = CoherentAllocation::alloc_coherent(dev, len, GFP_KERNEL | __GFP_ZERO)?;
>> + let dma = Coherent::zeroed_slice(dev, len, GFP_KERNEL)?;
>>
>> Ok(Self { dma })
>> }
>>
>> pub(crate) fn from_data(dev: &device::Device<device::Bound>, data: &[u8]) -> Result<Self> {
>> - Self::new(dev, data.len()).and_then(|mut dma_obj| {
>> - // 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)? }
>> - Ok(dma_obj)
>> - })
>> + let dma_obj = Self::new(dev, 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.as_mut()[..data.len()].copy_from_slice(data) };
>> + Ok(dma_obj)
>> }
>> }
>>
>> impl Deref for DmaObject {
>> - type Target = CoherentAllocation<u8>;
>> + type Target = Coherent<[u8]>;
>>
>> fn deref(&self) -> &Self::Target {
>> &self.dma
>> diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon.rs
>> index 37bfee1d0949..39f5df568ddb 100644
>> --- a/drivers/gpu/nova-core/falcon.rs
>> +++ b/drivers/gpu/nova-core/falcon.rs
>> @@ -25,10 +25,7 @@
>> driver::Bar0,
>> falcon::hal::LoadMethod,
>> gpu::Chipset,
>> - num::{
>> - FromSafeCast,
>> - IntoSafeCast, //
>> - },
>> + num::FromSafeCast,
>> regs,
>> regs::macros::RegisterBase, //
>> };
>> @@ -434,7 +431,7 @@ fn dma_wr<F: FalconFirmware<Target = E>>(
>> }
>> FalconMem::Dmem => (
>> 0,
>> - fw.dma_handle_with_offset(load_offsets.src_start.into_safe_cast())?,
>> + fw.dma_handle() + DmaAddress::from(load_offsets.src_start),
>
> Aren't we losing the bounds checking done by `dma_handle_with_offset`?
>
> Mmm, but looking below we are checking that the end of the transfer
> doesn't go beyond the object bounds, so that was probably redundant
> anyway. Maybe we should do a `checked_add` still for safety.
I've had this as `dma_handle_with_offset` no longer make sense in the context of
generic `Coherent` type. Although, I can probably add something like:
impl View<'_, Coherent<...>, ...> {
fn dma_handle(&self) -> DmaAddress;
}
to replace this so you can get the DMA handle for any projections of the
coherent object (and the bounds checking is done when projecting).
Best,
Gary
next prev parent reply other threads:[~2026-03-20 15:05 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <9A1gWen63AbJmi06Y_vu_qF1S86nj3fcQEil9RzLAn8QkIYpCOrLMNO7JcgIP0BccPHhzaYaQ_te1S_gKuHRgg==@protonmail.internalid>
2026-03-03 16:22 ` [PATCH 0/8] dma::Coherent & dma::CoherentInit API Danilo Krummrich
2026-03-03 16:22 ` [PATCH 1/8] rust: dma: use "kernel vertical" style for imports Danilo Krummrich
2026-03-03 17:12 ` Gary Guo
2026-03-03 16:22 ` [PATCH 2/8] rust: dma: add generalized container for types other than slices Danilo Krummrich
2026-03-17 6:50 ` Alice Ryhl
2026-03-17 12:56 ` Gary Guo
2026-03-20 13:58 ` Alexandre Courbot
2026-03-03 16:22 ` [PATCH 3/8] rust: dma: add zeroed constructor to `Coherent` Danilo Krummrich
2026-03-17 6:47 ` Alice Ryhl
2026-03-20 14:35 ` Alexandre Courbot
2026-03-03 16:22 ` [PATCH 4/8] rust: dma: introduce dma::CoherentInit for memory initialization Danilo Krummrich
2026-03-12 13:51 ` Gary Guo
2026-03-17 6:52 ` Alice Ryhl
2026-03-17 14:40 ` Danilo Krummrich
2026-03-17 14:43 ` Alice Ryhl
2026-03-20 14:35 ` Alexandre Courbot
2026-03-20 13:51 ` Danilo Krummrich
2026-03-03 16:22 ` [PATCH 5/8] rust: dma: add Coherent:init() and Coherent::init_with_attrs() Danilo Krummrich
2026-03-03 16:22 ` [PATCH 6/8] gpu: nova-core: use Coherent::init to initialize GspFwWprMeta Danilo Krummrich
2026-03-03 17:21 ` Gary Guo
2026-03-20 14:36 ` Alexandre Courbot
2026-03-03 16:22 ` [PATCH 7/8] gpu: nova-core: convert Gsp::new() to use CoherentInit Danilo Krummrich
2026-03-03 17:33 ` Gary Guo
2026-03-03 16:22 ` [PATCH 8/8] gpu: nova-core: convert to new dma::Coherent API Danilo Krummrich
2026-03-20 14:36 ` Alexandre Courbot
2026-03-20 15:05 ` Gary Guo [this message]
2026-03-24 12:33 ` [PATCH 0/8] dma::Coherent & dma::CoherentInit API Andreas Hindborg
2026-03-24 12:36 ` Danilo Krummrich
2026-03-24 12:46 ` Andreas Hindborg
2026-03-24 12:51 ` Danilo Krummrich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DH7PABYW5E20.JDWRFX88KCL7@garyguo.net \
--to=gary@garyguo.net \
--cc=a.hindborg@kernel.org \
--cc=abdiel.janulgue@gmail.com \
--cc=acourbot@nvidia.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=driver-core@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=nouveau@lists.freedesktop.org \
--cc=ojeda@kernel.org \
--cc=robin.murphy@arm.com \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox