From: sashiko-bot@kernel.org
To: "Danilo Krummrich" <dakr@kernel.org>
Cc: linux-pci@vger.kernel.org, ojeda@kernel.org
Subject: Re: [PATCH REF v4 26/27] gpu: nova-core: replace ARef<Device> with &'bound Device in SysmemFlush
Date: Fri, 22 May 2026 00:46:52 +0000 [thread overview]
Message-ID: <20260522004652.74CF11F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260521233501.1191842-27-dakr@kernel.org>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [Critical] The PCIe write to unregister the sysmem flush page is a posted write. Without a subsequent dummy read to flush the PCIe bus buffer, the DMA memory may be freed before the hardware processes the unregistration, risking a use-after-free by the GPU.
- [High] The sysmem flush page DMA address is restricted to 40 bits by the hardware register on some architectures, but the driver configures a 47-bit DMA mask, leading to potential driver probe failures on systems with >1TB of RAM.
--
commit 4632ef4cc9c31d8529ab1675ddf82d3a2b423cef
Author: Danilo Krummrich <dakr@kernel.org>
gpu: nova-core: replace ARef<Device> with &'bound Device in SysmemFlush
This commit updates SysmemFlush to use a lifetime-parameterized reference
to the device instead of an ARef. This removes the unnecessary reference
counting overhead since the lifetime is statically bound.
> diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs
> index 64fe5f27f41ee..a1c5ccd0a5345 100644
> --- a/drivers/gpu/nova-core/fb.rs
> +++ b/drivers/gpu/nova-core/fb.rs
[ ... ]
> @@ -49,7 +48,7 @@
> pub(crate) struct SysmemFlush<'sys> {
> /// Chipset we are operating on.
> chipset: Chipset,
> - device: ARef<device::Device>,
> + device: &'sys device::Device,
> bar: &'sys Bar0,
> /// Keep the page alive as long as we need it.
> page: CoherentHandle,
[Severity: Critical]
This is a pre-existing issue, but does the Drop implementation for SysmemFlush
need a dummy read to flush the PCIe bus buffer?
When unregistering the sysmem flush page, the MMIO write is asynchronous and
posted to the PCIe bus. Without a subsequent dummy read to flush the bus,
could the Drop implementation return and free the CoherentHandle page before
the unregistration reaches the hardware?
If the GPU executes a sysmem flush before the hardware processes the write,
it might write to the freed DMA page, which could corrupt system memory or
trigger an IOMMU fault.
> }
>
> impl<'sys> SysmemFlush<'sys> {
> /// Allocate a memory page and register it as the sysmem flush page.
> pub(crate) fn register(
> - dev: &device::Device<device::Bound>,
> + dev: &'sys device::Device<device::Bound>,
> bar: &'sys Bar0,
> chipset: Chipset,
> ) -> Result<Self> {
[Severity: High]
This isn't a bug introduced by this patch, but is the DMA mask configured
correctly for this allocation?
The driver configures a 47-bit coherent DMA mask, which allows the page
physical or IOVA address to exceed 40 bits. However, the hardware register
only accommodates 40 bits on some architectures.
When write_sysmem_flush_page_gm107() shifts the address by 8 and attempts
to fit it into a u32 for the NV_PFB_NISO_FLUSH_SYSMEM_ADDR register, will
this conversion fail if the allocated address is 1TB or higher?
If so, this might cause driver probe failures on systems with large amounts
of RAM or IOMMUs issuing high IOVAs.
> @@ -68,7 +67,7 @@ pub(crate) fn register(
>
> Ok(Self {
> chipset,
> - device: dev.into(),
> + device: dev,
> bar,
> page,
> })
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260521233501.1191842-1-dakr@kernel.org?part=26
next prev parent reply other threads:[~2026-05-22 0:46 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-21 23:34 [PATCH v4 00/27] rust: device: Higher-Ranked Lifetime Types for device drivers Danilo Krummrich
2026-05-21 23:34 ` [PATCH v4 01/27] rust: alloc: remove `'static` bound on `ForeignOwnable` Danilo Krummrich
2026-05-22 0:13 ` sashiko-bot
2026-05-21 23:34 ` [PATCH v4 02/27] rust: driver: move 'static bounds to constructor Danilo Krummrich
2026-05-21 23:34 ` [PATCH v4 03/27] rust: driver: decouple driver private data from driver type Danilo Krummrich
2026-05-21 23:56 ` sashiko-bot
2026-05-21 23:34 ` [PATCH v4 04/27] rust: driver core: drop drvdata before devres release Danilo Krummrich
2026-05-22 0:10 ` sashiko-bot
2026-05-21 23:34 ` [PATCH v4 05/27] rust: pci: implement Sync for Device<Bound> Danilo Krummrich
2026-05-21 23:34 ` [PATCH v4 06/27] rust: platform: " Danilo Krummrich
2026-05-21 23:34 ` [PATCH v4 07/27] rust: auxiliary: " Danilo Krummrich
2026-05-21 23:34 ` [PATCH v4 08/27] rust: usb: " Danilo Krummrich
2026-05-22 0:16 ` sashiko-bot
2026-05-21 23:34 ` [PATCH v4 09/27] rust: device: " Danilo Krummrich
2026-05-21 23:34 ` [PATCH v4 10/27] rust: device: make Core and CoreInternal lifetime-parameterized Danilo Krummrich
2026-05-25 4:21 ` Eliot Courtney
2026-05-25 11:02 ` Alexandre Courbot
2026-05-21 23:34 ` [PATCH v4 11/27] rust: pci: make Driver trait lifetime-parameterized Danilo Krummrich
2026-05-22 0:14 ` sashiko-bot
2026-05-21 23:34 ` [PATCH v4 12/27] rust: platform: " Danilo Krummrich
2026-05-21 23:34 ` [PATCH v4 13/27] rust: auxiliary: " Danilo Krummrich
2026-05-21 23:34 ` [PATCH v4 14/27] rust: usb: " Danilo Krummrich
2026-05-22 0:23 ` sashiko-bot
2026-05-25 4:31 ` Eliot Courtney
2026-05-21 23:34 ` [PATCH v4 15/27] rust: i2c: " Danilo Krummrich
2026-05-21 23:34 ` [PATCH v4 16/27] rust: driver: update module documentation for GAT-based Data type Danilo Krummrich
2026-05-21 23:34 ` [PATCH v4 17/27] rust: pci: make Bar lifetime-parameterized Danilo Krummrich
2026-05-22 0:49 ` sashiko-bot
2026-05-25 4:37 ` Eliot Courtney
2026-05-25 11:40 ` Gary Guo
2026-05-25 12:05 ` Danilo Krummrich
2026-05-25 11:10 ` Alexandre Courbot
2026-05-25 11:12 ` Alexandre Courbot
2026-05-21 23:34 ` [PATCH v4 18/27] rust: io: make IoMem and ExclusiveIoMem lifetime-parameterized Danilo Krummrich
2026-05-22 0:45 ` sashiko-bot
2026-05-25 13:10 ` Alexandre Courbot
2026-05-21 23:34 ` [PATCH v4 19/27] samples: rust: rust_driver_pci: use HRT lifetime for Bar Danilo Krummrich
2026-05-22 1:27 ` sashiko-bot
2026-05-25 13:55 ` Alexandre Courbot
2026-05-21 23:34 ` [PATCH v4 20/27] gpu: nova-core: separate driver type from driver data Danilo Krummrich
2026-05-25 4:40 ` Eliot Courtney
2026-05-25 14:11 ` Alexandre Courbot
2026-05-21 23:34 ` [PATCH v4 21/27] rust: types: add `ForLt` trait for higher-ranked lifetime support Danilo Krummrich
2026-05-22 0:31 ` sashiko-bot
2026-05-23 15:46 ` Danilo Krummrich
2026-05-25 12:31 ` Eliot Courtney
2026-05-21 23:34 ` [PATCH v4 22/27] rust: auxiliary: generalize Registration over ForLt Danilo Krummrich
2026-05-22 0:49 ` sashiko-bot
2026-05-25 6:03 ` Eliot Courtney
2026-05-25 14:42 ` Alexandre Courbot
2026-05-21 23:34 ` [PATCH v4 23/27] samples: rust: rust_driver_auxiliary: showcase lifetime-bound registration data Danilo Krummrich
2026-05-25 14:48 ` Alexandre Courbot
2026-05-21 23:34 ` [PATCH REF v4 24/27] gpu: nova-core: use lifetime for Bar Danilo Krummrich
2026-05-22 1:28 ` sashiko-bot
2026-05-26 2:10 ` Alexandre Courbot
2026-05-26 5:48 ` Alexandre Courbot
2026-05-21 23:34 ` [PATCH REF v4 25/27] gpu: nova-core: unregister sysmem flush page from Drop Danilo Krummrich
2026-05-22 0:47 ` sashiko-bot
2026-05-21 23:34 ` [PATCH REF v4 26/27] gpu: nova-core: replace ARef<Device> with &'bound Device in SysmemFlush Danilo Krummrich
2026-05-22 0:46 ` sashiko-bot [this message]
2026-05-21 23:34 ` [PATCH REF v4 27/27] gpu: drm: tyr: use lifetime for IoMem Danilo Krummrich
2026-05-22 0:42 ` sashiko-bot
2026-05-22 10:14 ` [PATCH v4 00/27] rust: device: Higher-Ranked Lifetime Types for device drivers Greg KH
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=20260522004652.74CF11F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dakr@kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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