[PATCH v4 00/14] drm/panthor: Reduce dma_fence signalling latency
From: Boris Brezillon
Date: Thu Jun 25 2026 - 03:38:46 EST
Right now, panthor is one of the rare drivers to signal fences
from work items (not even from the threaded IRQ handler). We
tried moving the job_completion check to hardirq handlers like
other drivers do, but the duration of this handler gets
slightly over the few usec (20+ usecs) we usually expect from
hardird handlers, and we're not sure we want to hold off the
processing of other interrupts for that long. So this series
just gets rid of the threaded-handler -> work_item indirection
and checks for job completion (and thus, fence signalling)
directly in the threaded handler.
Signed-off-by: Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx>
---
Changes in v4:
- Add a bunch of fixes for bugs reported by shashiko
- Link to v3: https://lore.kernel.org/r/20260623-panthor-signal-from-irq-v3-0-2ece396f8ee0@xxxxxxxxxxxxx
Changes in v3:
- Save/restore the irq state in the raw handler.
- Rename panthor_irq::mask_lock into panthor_irq::lock
- Use the __always_inline specifier on
panthor_irq_default_threaded_handler()
- Use devm_request_threaded_irq() even when the threaded handler is
NULL
- Drop the patch that dynamically enables request-related interrupts
(FW-side race) after the polling period has expired
- Don't process FW events from the hardirq handler (too heavy for an
hardirq handler according to our testing)
- Link to v2: https://lore.kernel.org/r/20260512-panthor-signal-from-irq-v2-0-95c614a739cb@xxxxxxxxxxxxx
Changes in v2:
- Fix commit message in patch 4
- Move devm_kasprintf() before panthor_irq_resume() in patch 3
- Fix erroneous lockdep_assert_held() in patch 6
- Make sure events_lock is held when calling
csg_slot_sync_update_locked() in patch 6
- Restore a csg_slot_sync_update_locked() call in patch 7
- Fix a potential deadlock in patch 9
- Drop the IRQ coalescing patch (formerly patch 10)
- Change panthor_irq_request() so we don't have to define a dummy
threaded handler, and we can let RT kernels move the hard handler
to a thread
- Add patches to transition GPU event processing to the hard IRQ handler
- Link to v1: https://lore.kernel.org/r/20260429-panthor-signal-from-irq-v1-0-4b92ae4142d2@xxxxxxxxxxxxx
---
Boris Brezillon (14):
drm/panthor: Fix panthor_pwr_unplug()
drm/panthor: Drop a needless check in panthor_fw_unplug()
drm/panthor: Fix a leak when a group is evicted before the tiler OOM is serviced
drm/panthor: Interrupt group start/resumption if group_bind_locked() fails
drm/panthor: Keep interrupts masked until they are needed
drm/panthor: Make panthor_irq::state a non-atomic field
drm/panthor: Move the register accessors before the IRQ helpers
drm/panthor: Replace the panthor_irq macro machinery by inline helpers
drm/panthor: Don't update might_have_idle_groups in process_idle_event_locked()
drm/panthor: Get rid of panthor_group::fatal_lock
drm/panthor: Protect events processing with a separate spinlock
drm/panthor: Don't defer job completion checks
drm/panthor: Don't defer FW event processing
drm/panthor: Automate CSG IRQ processing at group unbind time
drivers/gpu/drm/panthor/panthor_device.h | 280 ++++++++---------
drivers/gpu/drm/panthor/panthor_fw.c | 24 +-
drivers/gpu/drm/panthor/panthor_gpu.c | 27 +-
drivers/gpu/drm/panthor/panthor_mmu.c | 44 +--
drivers/gpu/drm/panthor/panthor_pwr.c | 24 +-
drivers/gpu/drm/panthor/panthor_sched.c | 524 +++++++++++++++----------------
6 files changed, 463 insertions(+), 460 deletions(-)
---
base-commit: ac5ac0acf11df04295eb1811066097b7022d6c7f
change-id: 20260429-panthor-signal-from-irq-d33684f4d292
Best regards,
--
Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx>