[PATCH v2 0/9] Use DRM scheduler for delayed GT TLB invalidations
Matthew Brost
matthew.brost at intel.com
Wed Jul 2 23:42:13 UTC 2025
Use the DRM scheduler for delayed GT TLB invalidations, which properly
fixes the issue raised in [1]. GT TLB fences have their own dma-fence
context, so even if the invalidations are ordered, the dma-resv/DRM
scheduler cannot squash the fences. This results in O(M*N*N) complexity
in the garbage collector, where M is the number of ranges in the garbage
collector and N is the number of pending GT TLB invalidations. After
this change, the resulting complexity in O(M*C) where C is the number of
TLB invalidation contexts (i.e., number of exec queue, GTs tuples) with
an invalidation in flight.
Admittedly, it's quite a lot of code, but the series includes extensive
kernel documentation and clear code comments. It introduces a generic
dependency scheduler that can be reused in the future and is logically
much cleaner than the previous open-coded solution for delaying GT TLB
invalidations until a bind job completes.
v2:
- Various cleanup covered in detail in change logs
- Use a per-GT ordered workqueue as DRM scheduler workqueue
- Remove unused ftrace points
Matt
[1] https://patchwork.freedesktop.org/patch/658370/?series=150188&rev=1
Matthew Brost (9):
drm/xe: Explicitly mark migration queues with flag
drm/xe: Add generic dependecy jobs / scheduler
drm: Simplify drmm_alloc_ordered_workqueue return
drm/xe: Create ordered workqueue for GT TLB invalidation jobs
drm/xe: Add dependency scheduler for GT TLB invalidations to bind
queues
drm/xe: Add xe_migrate_job_lock/unlock helpers
drm/xe: Add GT TLB invalidation jobs
drm/xe: Use GT TLB invalidation jobs in PT layer
drm/xe: Remove unused GT TLB invalidation trace points
drivers/gpu/drm/vkms/vkms_crtc.c | 2 -
drivers/gpu/drm/xe/Makefile | 2 +
drivers/gpu/drm/xe/xe_dep_job_types.h | 29 +++
drivers/gpu/drm/xe/xe_dep_scheduler.c | 145 +++++++++++
drivers/gpu/drm/xe/xe_dep_scheduler.h | 21 ++
drivers/gpu/drm/xe/xe_exec_queue.c | 48 ++++
drivers/gpu/drm/xe/xe_exec_queue_types.h | 15 ++
drivers/gpu/drm/xe/xe_gt_tlb_inval_job.c | 271 ++++++++++++++++++++
drivers/gpu/drm/xe/xe_gt_tlb_inval_job.h | 34 +++
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 8 +
drivers/gpu/drm/xe/xe_gt_types.h | 2 +
drivers/gpu/drm/xe/xe_migrate.c | 42 ++-
drivers/gpu/drm/xe/xe_migrate.h | 13 +
drivers/gpu/drm/xe/xe_pt.c | 178 +++++--------
drivers/gpu/drm/xe/xe_trace.h | 16 --
include/drm/drm_managed.h | 15 +-
16 files changed, 712 insertions(+), 129 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_dep_job_types.h
create mode 100644 drivers/gpu/drm/xe/xe_dep_scheduler.c
create mode 100644 drivers/gpu/drm/xe/xe_dep_scheduler.h
create mode 100644 drivers/gpu/drm/xe/xe_gt_tlb_inval_job.c
create mode 100644 drivers/gpu/drm/xe/xe_gt_tlb_inval_job.h
--
2.34.1
More information about the Intel-xe
mailing list