Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [RFC v2 0/9] drm/xe/madvise: Add support for purgeable buffer objects
@ 2025-12-01  5:50 Arvind Yadav
  2025-12-01  5:50 ` [RFC v2 1/9] drm/xe/uapi: Add UAPI " Arvind Yadav
                   ` (9 more replies)
  0 siblings, 10 replies; 35+ messages in thread
From: Arvind Yadav @ 2025-12-01  5:50 UTC (permalink / raw)
  To: intel-xe
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	pallavi.mishra

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=yes, Size: 3615 bytes --]

This patch series introduces comprehensive support for purgeable buffer objects
in the Xe driver, enabling userspace to provide memory usage hints for better
memory management under system pressure.

Overview:

Purgeable memory allows applications to mark buffer objects as "not currently
needed" (DONTNEED), making them eligible for kernel reclamation during memory
pressure. This helps prevent OOM conditions and enables more efficient GPU
memory utilization for workloads with temporary or regeneratable data (caches,
intermediate results, decoded frames, etc.).

Purgeable BO Lifecycle:
1. WILLNEED (default): BO actively needed, kernel preserves backing store
2. DONTNEED (user hint): BO contents discardable, eligible for purging
3. PURGED (kernel action): Backing store reclaimed during memory pressure

Key Design Principles:
  - i915 compatibility: "Once purged, always purged" semantics - purged BOs
     remain permanently invalid and must be destroyed/recreated
  - Safety first: Only non-shared BOs can be marked DONTNEED to prevent
    multi-process data corruption
  - Multiple protection layers: Validation in madvise, VM bind, mmap, and
    fault handlers
  - Async TLB invalidation: Uses xe_bo_trigger_rebind() for non-blocking
    GPU mapping invalidation
  - Scratch PTE support: Fault-mode VMs use scratch pages for safe zero reads
    on purged BO access

Error Handling:
  - CPU access (mmap): Returns VM_FAULT_SIGBUS (SIGBUS signal to process)
  - GPU access (non-scratch VM): Page fault fails with -EACCES, GPU context reset
  - GPU access (scratch VM): Page fault succeeds, rebinds with scratch PTEs
  - VM_BIND operations: MAP/PREFETCH rejected with -EINVAL
  - Mmap offset ioctl: Rejected with -EINVAL for early error detection

v2 Changes:
  - Reordered patches: Moved shared BO helper before main implementation for
    proper dependency order
  - Fixed reference counting in mmap offset validation (use drm_gem_object_put)
  - Removed incorrect claims about madvise(WILLNEED) restoring purged BOs
  - Fixed error code documentation inconsistencies
  - Initialize purge_state_val fields to prevent kernel memory leaks
  - Use xe_bo_trigger_rebind() for async TLB invalidation (Thomas Hellström)
  - Add NULL rebind with scratch PTEs for fault mode (Thomas Hellström)
  - Implement i915-compatible retained field logic (Thomas Hellström)
  - Skip BO validation for purged BOs in page fault handler (crash fix)
  - Add scratch VM check in page fault path (non-scratch VMs fail fault) 
 

Arvind Yadav (7):
  drm/xe/bo: Add purgeable bo state tracking and field madv to xe_bo
  drm/xe/bo: Prevent purging of shared buffer objects
  drm/xe/madvise: Implement purgeable buffer object support
  drm/xe/bo: Handle CPU faults on purged buffer objects
  drm/xe/bo: Prevent mmap of purged buffer objects
  drm/xe/vm: Prevent binding of purged buffer objects
  drm/xe: Add support for querying purgeable BO states

Himal Prasad Ghimiray (2):
  drm/xe/uapi: Add UAPI support for purgeable buffer objects
  drm/xe/uapi: Add UAPI for purgeable bo state to madvise query response

 drivers/gpu/drm/xe/xe_bo.c           | 92 ++++++++++++++++++++++++----
 drivers/gpu/drm/xe/xe_bo.h           | 57 +++++++++++++++++
 drivers/gpu/drm/xe/xe_bo_types.h     |  3 +
 drivers/gpu/drm/xe/xe_gt_pagefault.c | 19 ++++++
 drivers/gpu/drm/xe/xe_pt.c           | 13 +++-
 drivers/gpu/drm/xe/xe_vm.c           | 12 ++++
 drivers/gpu/drm/xe/xe_vm_madvise.c   | 76 +++++++++++++++++++++++
 include/uapi/drm/xe_drm.h            | 50 ++++++++++++++-
 8 files changed, 308 insertions(+), 14 deletions(-)

-- 
2.43.0


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

end of thread, other threads:[~2025-12-03 16:25 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-01  5:50 [RFC v2 0/9] drm/xe/madvise: Add support for purgeable buffer objects Arvind Yadav
2025-12-01  5:50 ` [RFC v2 1/9] drm/xe/uapi: Add UAPI " Arvind Yadav
2025-12-01 23:00   ` Matthew Brost
2025-12-02  2:55     ` Yadav, Arvind
2025-12-01  5:50 ` [RFC v2 2/9] drm/xe/bo: Add purgeable bo state tracking and field madv to xe_bo Arvind Yadav
2025-12-01 23:02   ` Matthew Brost
2025-12-02  2:56     ` Yadav, Arvind
2025-12-02 18:52   ` Matthew Brost
2025-12-01  5:50 ` [RFC v2 3/9] drm/xe/bo: Prevent purging of shared buffer objects Arvind Yadav
2025-12-01 23:10   ` Matthew Brost
2025-12-02  3:42     ` Yadav, Arvind
2025-12-02  9:42       ` Thomas Hellström
2025-12-02 15:17         ` Matthew Brost
2025-12-02 18:22           ` Yadav, Arvind
2025-12-02 18:35             ` Matthew Brost
2025-12-01  5:50 ` [RFC v2 4/9] drm/xe/madvise: Implement purgeable buffer object support Arvind Yadav
2025-12-02  1:46   ` Matthew Brost
2025-12-02  4:01     ` Yadav, Arvind
2025-12-02 21:39   ` Matthew Brost
2025-12-03 14:01     ` Yadav, Arvind
2025-12-01  5:50 ` [RFC v2 5/9] drm/xe/bo: Handle CPU faults on purged buffer objects Arvind Yadav
2025-12-02 18:42   ` Matthew Brost
2025-12-02 18:48     ` Matthew Brost
2025-12-03  7:25       ` Yadav, Arvind
2025-12-03 16:24         ` Matthew Brost
2025-12-01  5:50 ` [RFC v2 6/9] drm/xe/bo: Prevent mmap of " Arvind Yadav
2025-12-02 18:54   ` Matthew Brost
2025-12-01  5:50 ` [RFC v2 7/9] drm/xe/vm: Prevent binding " Arvind Yadav
2025-12-02 18:57   ` Matthew Brost
2025-12-03 11:24     ` Yadav, Arvind
2025-12-01  5:50 ` [RFC v2 8/9] drm/xe/uapi: Add UAPI for purgeable bo state to madvise query response Arvind Yadav
2025-12-02 19:01   ` Matthew Brost
2025-12-03  3:54     ` Yadav, Arvind
2025-12-01  5:50 ` [RFC v2 9/9] drm/xe: Add support for querying purgeable BO states Arvind Yadav
2025-12-02 18:36 ` [RFC v2 0/9] drm/xe/madvise: Add support for purgeable buffer objects Souza, Jose

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