mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2026-11-10 20:48:12 +00:00
drm/xe: Chain page faults via queue-resident cache to avoid fault storms
Some Xe platforms can generate pagefault storms where many faults target the same address range in a short time window (e.g. many EU threads faulting the same page). The current worker/locking model effectively serializes faults for a given range and repeatedly performs VMA/range lookups for each fault, which creates head-of-queue blocking and wastes CPU in the hot path. Introduce a page fault chaining cache that coalesces faults targeting the same ASID and address range. Each worker tracks the active fault range it is servicing. Fault entries reside in stable queue storage, allowing the IRQ handler to match new faults against the worker cache and directly chain cache hits onto the active entry without allocation or waiting for dequeue. Once the leading fault completes, the worker acknowledges the entire chain. A small allocation state is added to each entry so queue, worker, and IRQ paths can safely reference the same fault object. This prevents reuse while the fault is active and guarantees that chained faults remain valid until acknowledged. Fault handlers also record the serviced range so subsequent faults can be acknowledged without re-running the full resolution path. This removes repeated fault resolution during fault storms and significantly improves forward progress in SVM workloads. Since threaded prefetches now use a dedicated prefetch workqueue (usm.prefetch_wq) rather than sharing the page fault workqueue, page fault servicing can no longer deadlock on vm->lock, so this cache does not need an -EAGAIN retry path for a failed vm->lock acquisition. Assisted-by: ChatGPT:gpt-5 # Documentation Signed-off-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Francois Dugast <francois.dugast@intel.com> Link: https://patch.msgid.link/20260806185202.3922432-9-matthew.brost@intel.com
This commit is contained in:
parent
107156dc6b
commit
f2b4b3f814
5 changed files with 527 additions and 85 deletions
Loading…
Add table
Add a link
Reference in a new issue