Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v8 0/3] Allow scratch page under fault mode for certain platform
@ 2025-03-08  0:18 Oak Zeng
  2025-03-08  0:18 ` [PATCH v8 1/3] drm/xe: Introduced needs_scratch bit in device descriptor Oak Zeng
                   ` (10 more replies)
  0 siblings, 11 replies; 14+ messages in thread
From: Oak Zeng @ 2025-03-08  0:18 UTC (permalink / raw)
  To: intel-xe; +Cc: Thomas.Hellstrom, matthew.brost, jonathan.cavitt

Normally scratch page is not allowed when a vm is operate under page
fault mode, i.e., in the existing codes, DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE
and DRM_XE_VM_CREATE_FLAG_FAULT_MODE are mutual exclusive. The reason
is fault mode relies on recoverable page to work, while scratch page
can mute recoverable page fault.

On xe2 and xe3, out of bound prefetch can cause page fault and further
system hang because xekmd can't resolve such page fault. SYCL and OCL
language runtime requires out of bound prefetch to be silently dropped
without causing any functional problem, thus the existing behavior
doesn't meet language runtime requirement.

At the same time, HW prefetching can cause page fault interrupt. Due to
page fault interrupt overhead (i.e., need Guc and KMD involved to fix
the page fault), HW prefetching can be slowed by many orders of magnitude.

Fix those problems by allowing scratch page under fault mode for xe2 and
xe3. With scratch page in place, HW prefetching could always hit scratch
page instead of causing interrupt.

A side effect is, scratch page could hide application program error.
Application out of bound accesses are hided by scratch page mapping,
instead of get reported to user.

igt test: https://patchwork.freedesktop.org/series/144907/, Test result on
BMG:

root@DUT1130BMGFRD:/home/szeng/dii-tools/igt-public/build/tests# ./xe_exec_fault_mode --run-subtest scratch-fault
IGT-Version: 1.30-gde1a3cb42 (x86_64) (Linux: 6.13.0-xe x86_64)
Using IGT_SRANDOM=1738684805 for randomisation
Opened device: /dev/dri/card0
Starting subtest: scratch-fault
Subtest scratch-fault: SUCCESS (0.080s)

Oak Zeng (3):
  drm/xe: Introduced needs_scratch bit in device descriptor
  drm/xe: Clear scratch page on vm_bind
  drm/xe: Allow scratch page under fault mode for certain platform

 drivers/gpu/drm/xe/xe_device_types.h |  2 +
 drivers/gpu/drm/xe/xe_pci.c          |  5 ++
 drivers/gpu/drm/xe/xe_pt.c           | 92 ++++++++++++++++++----------
 drivers/gpu/drm/xe/xe_vm.c           | 31 ++++++++--
 drivers/gpu/drm/xe/xe_vm_types.h     |  2 +
 include/uapi/drm/xe_drm.h            |  6 +-
 6 files changed, 97 insertions(+), 41 deletions(-)

-- 
2.26.3


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2025-04-01 14:28 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-08  0:18 [PATCH v8 0/3] Allow scratch page under fault mode for certain platform Oak Zeng
2025-03-08  0:18 ` [PATCH v8 1/3] drm/xe: Introduced needs_scratch bit in device descriptor Oak Zeng
2025-03-08  0:18 ` [PATCH v8 2/3] drm/xe: Clear scratch page on vm_bind Oak Zeng
2025-03-08  0:18 ` [PATCH v8 3/3] drm/xe: Allow scratch page under fault mode for certain platform Oak Zeng
2025-03-08  1:39 ` ✓ CI.Patch_applied: success for " Patchwork
2025-03-08  1:39 ` ✗ CI.checkpatch: warning " Patchwork
2025-03-08  1:40 ` ✓ CI.KUnit: success " Patchwork
2025-03-08  1:57 ` ✓ CI.Build: " Patchwork
2025-03-08  1:59 ` ✓ CI.Hooks: " Patchwork
2025-03-08  2:00 ` ✓ CI.checksparse: " Patchwork
2025-03-08  2:23 ` ✗ Xe.CI.BAT: failure " Patchwork
2025-04-01 14:28   ` Zeng, Oak
2025-03-09 20:01 ` ✗ Xe.CI.Full: " Patchwork
2025-04-01 14:28   ` Zeng, Oak

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox