From: John Hubbard <jhubbard@nvidia.com>
To: Danilo Krummrich <dakr@kernel.org>,
Joel Fernandes <joel@joelfernandes.org>,
Alexandre Courbot <acourbot@nvidia.com>
Cc: "Timur Tabi" <ttabi@nvidia.com>,
"Alistair Popple" <apopple@nvidia.com>,
"Eliot Courtney" <ecourtney@nvidia.com>,
"Shashank Sharma" <shashanks@nvidia.com>,
"Zhi Wang" <zhiw@nvidia.com>, "David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
nova-gpu@lists.linux.dev, LKML <linux-kernel@vger.kernel.org>,
"John Hubbard" <jhubbard@nvidia.com>
Subject: [PATCH 00/17] nova-core: GPU interrupt support and GSP event delivery
Date: Fri, 7 Aug 2026 20:11:02 -0700 [thread overview]
Message-ID: <20260808031120.363869-1-jhubbard@nvidia.com> (raw)
This series adds support for GIN, the GPU Interrupt and Notification
unit and the GPU's interrupt controller, so that GSP events reach the
driver as interrupts instead of only when the driver polls.
The series builds the path from the bottom up: the GIN register
definitions, a type-state API for walking the two-level tree, a
per-architecture HAL for the tree size and the rearm method, and a PCI
vector allocation sized to the subtrees nova-core services. On top of
that sits a threaded handler on the GSP notification vector, whose top
half touches only registers and whose IRQ thread drains the message
queue.
Driving that queue from an interrupt rather than from a polling loop
exposed three problems polling had hidden, so patches 10 through 13 fix
those before the handler arrives in patch 14.
A few rust/ changes were needed first, patches 1 through 3.
Patch 17 adds interrupts.rst, which is the place to start.
Joel Fernandes wrote the first versions of the tree API and the
self-test, and Will Pierce reviewed the interrupt work and the document.
Based on drm-rust-next plus Danilo Krummrich's "rust: irq: make
Registration compatible with lifetime-bound drivers".
There is a git branch with the patches as applied to drm-rust-next:
https://github.com/johnhubbard/linux/tree/nova-core-gin-interrupt-tree-v0/
Testing: the 14 KUnit tests this series adds all pass. Probe succeeds
with the delivery self-test enabled on TU117 (Turing), GA104 (Ampere),
and GB202 (Blackwell). All three were granted MSI rather than MSI-X, so
the pre-Hopper configuration-mirror rearm and the Hopper-plus TOP cycle
both ran on hardware. Only KUnit covers the MSI-X per-subtree rearm.
An earlier version of this series has serviced real GSP events, in a
setup where the GSP posts them after probe. This version has not been
re-tested there yet. Patch 15's reordering runs on Turing without
regression, but the two races it closes are timing-dependent and I did
not reproduce either one.
One known gap: driver_read_area still reads the GSP producer pointer
with no acquire barrier. Gary Guo's barrier series puts dma_mb(Read) at
exactly that point [1], so let's just wait for his fix to land.
[1] https://lore.kernel.org/all/20260609-rust-barrier-v2-4-30fcc48e1cd0@garyguo.net/
Joel Fernandes (3):
rust: sync: completion: add wait_for_completion_timeout()
gpu: nova-core: allocate PCI MSI vector during probe
gpu: nova-core: add the GIN interrupt tree API
John Hubbard (14):
rust: pci: expose the whole interrupt vector allocation
rust: pci: expose the allocated interrupt type
gpu: nova-core: add the GIN CPU interrupt tree and MSI EOI registers
gpu: nova-core: add the per-architecture GIN CPU interrupt HAL
gpu: nova-core: allocate interrupt vectors for the serviced subtrees
gpu: nova-core: add an interrupt delivery self-test
gpu: nova-core: dispatch GSP events instead of discarding them
gpu: nova-core: match GSP RPC replies by sequence, not just function
gpu: nova-core: recover the GSP receive path from corrupt framing
gpu: nova-core: bound a GSP wait by a single deadline
gpu: nova-core: drive GSP events with the SWGEN0 interrupt
gpu: nova-core: retrigger the GSP falcon and clear every latched cause
gpu: nova-core: add KUnit tests for the interrupt tree and HALs
gpu: nova-core: document the GIN interrupt controller and GSP events
Documentation/gpu/nova/core/interrupts.rst | 686 ++++++++++++++++++++
Documentation/gpu/nova/index.rst | 1 +
drivers/gpu/nova-core/Kconfig | 15 +
drivers/gpu/nova-core/driver.rs | 54 +-
drivers/gpu/nova-core/falcon/gsp.rs | 71 +-
drivers/gpu/nova-core/falcon/hal.rs | 32 +
drivers/gpu/nova-core/gpu.rs | 28 +-
drivers/gpu/nova-core/gsp.rs | 17 +-
drivers/gpu/nova-core/gsp/cmdq.rs | 286 ++++++--
drivers/gpu/nova-core/gsp/commands.rs | 8 +-
drivers/gpu/nova-core/gsp/fw.rs | 13 +-
drivers/gpu/nova-core/gsp/sequencer.rs | 8 +-
drivers/gpu/nova-core/irq.rs | 99 +++
drivers/gpu/nova-core/irq/doorbell_test.rs | 328 ++++++++++
drivers/gpu/nova-core/irq/gsp.rs | 254 ++++++++
drivers/gpu/nova-core/irq/hal.rs | 215 ++++++
drivers/gpu/nova-core/irq/hal/gh100.rs | 30 +
drivers/gpu/nova-core/irq/hal/tu102.rs | 29 +
drivers/gpu/nova-core/irq/interrupt_tree.rs | 425 ++++++++++++
drivers/gpu/nova-core/nova_core.rs | 1 +
drivers/gpu/nova-core/regs.rs | 95 +++
rust/helpers/pci.c | 11 +
rust/kernel/pci.rs | 1 +
rust/kernel/pci/irq.rs | 143 ++--
rust/kernel/sync/completion.rs | 34 +-
25 files changed, 2737 insertions(+), 147 deletions(-)
create mode 100644 Documentation/gpu/nova/core/interrupts.rst
create mode 100644 drivers/gpu/nova-core/irq.rs
create mode 100644 drivers/gpu/nova-core/irq/doorbell_test.rs
create mode 100644 drivers/gpu/nova-core/irq/gsp.rs
create mode 100644 drivers/gpu/nova-core/irq/hal.rs
create mode 100644 drivers/gpu/nova-core/irq/hal/gh100.rs
create mode 100644 drivers/gpu/nova-core/irq/hal/tu102.rs
create mode 100644 drivers/gpu/nova-core/irq/interrupt_tree.rs
base-commit: 4c9ba407018e8deb06dbc643112bac8f40404f95
prerequisite-patch-id: 63224325d5ec73f06517bb35f8c366a086bbea19
--
2.55.0
next reply other threads:[~2026-08-08 3:11 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-08 3:11 John Hubbard [this message]
2026-08-08 3:11 ` [PATCH 01/17] rust: sync: completion: add wait_for_completion_timeout() John Hubbard
[not found] ` <DKK2DM3VK6TF.3KBBWP7S4A8T1@nvidia.com>
2026-08-09 21:43 ` John Hubbard
2026-08-08 3:11 ` [PATCH 02/17] rust: pci: expose the whole interrupt vector allocation John Hubbard
2026-08-09 13:27 ` Danilo Krummrich
2026-08-08 3:11 ` [PATCH 03/17] rust: pci: expose the allocated interrupt type John Hubbard
2026-08-09 13:24 ` Danilo Krummrich
2026-08-09 21:42 ` John Hubbard
2026-08-08 3:11 ` [PATCH 04/17] gpu: nova-core: allocate PCI MSI vector during probe John Hubbard
2026-08-08 3:11 ` [PATCH 05/17] gpu: nova-core: add the GIN CPU interrupt tree and MSI EOI registers John Hubbard
2026-08-08 3:11 ` [PATCH 06/17] gpu: nova-core: add the GIN interrupt tree API John Hubbard
2026-08-08 3:11 ` [PATCH 07/17] gpu: nova-core: add the per-architecture GIN CPU interrupt HAL John Hubbard
2026-08-08 3:11 ` [PATCH 08/17] gpu: nova-core: allocate interrupt vectors for the serviced subtrees John Hubbard
2026-08-08 3:11 ` [PATCH 09/17] gpu: nova-core: add an interrupt delivery self-test John Hubbard
2026-08-08 3:11 ` [PATCH 10/17] gpu: nova-core: dispatch GSP events instead of discarding them John Hubbard
2026-08-08 3:11 ` [PATCH 11/17] gpu: nova-core: match GSP RPC replies by sequence, not just function John Hubbard
2026-08-08 3:11 ` [PATCH 12/17] gpu: nova-core: recover the GSP receive path from corrupt framing John Hubbard
2026-08-08 3:11 ` [PATCH 13/17] gpu: nova-core: bound a GSP wait by a single deadline John Hubbard
2026-08-08 3:11 ` [PATCH 14/17] gpu: nova-core: drive GSP events with the SWGEN0 interrupt John Hubbard
2026-08-08 3:11 ` [PATCH 15/17] gpu: nova-core: retrigger the GSP falcon and clear every latched cause John Hubbard
2026-08-08 3:11 ` [PATCH 16/17] gpu: nova-core: add KUnit tests for the interrupt tree and HALs John Hubbard
2026-08-08 3:11 ` [PATCH 17/17] gpu: nova-core: document the GIN interrupt controller and GSP events John Hubbard
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=20260808031120.363869-1-jhubbard@nvidia.com \
--to=jhubbard@nvidia.com \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=airlied@gmail.com \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=apopple@nvidia.com \
--cc=bhelgaas@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=ecourtney@nvidia.com \
--cc=gary@garyguo.net \
--cc=joel@joelfernandes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=nova-gpu@lists.linux.dev \
--cc=ojeda@kernel.org \
--cc=shashanks@nvidia.com \
--cc=simona@ffwll.ch \
--cc=tmgross@umich.edu \
--cc=ttabi@nvidia.com \
--cc=zhiw@nvidia.com \
/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