* [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap
@ 2026-04-06 8:58 Arvind Yadav
2026-04-06 8:58 ` [RFC v2 1/7] drm/xe/vm: Track CPU_AUTORESET state in xe_vma Arvind Yadav
` (10 more replies)
0 siblings, 11 replies; 17+ messages in thread
From: Arvind Yadav @ 2026-04-06 8:58 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom
This series implements automatic reset of GPU memory attributes when
userspace unmaps memory, ensuring non-default attributes set via the
MADVISE ioctl do not persist after CPU mappings are freed.
MMU interval notifiers detect munmap on CPU-only VMAs (not yet
GPU-faulted) and queue a worker to reset attributes. GPU-touched
VMAs continue using existing SVM notifiers.
Key aspects:
- cpu_autoreset_active (xe_vma) tracks CPU-only vs GPU-touched state.
XE_VMA_CPU_AUTORESET_ACTIVE is pipeline-only and not stored in gpuva.flags.
- MMU notifier callback does not allocate. work_struct is embedded in
xe_madvise_notifier and initialised at ioctl time. Overlapping munmap
events are coalesced via min/max.
- teardown_rwsem serialises VM teardown against callbacks.
- struct maple_tree tracks notifiers: O(log N) dedup + insert.
- Notifiers registered outside vm->lock; vm->lock taken only for dedup.
Callback only queues work.
Patch organisation:
1. Track cpu_autoreset_active in xe_vma and add pipeline-only flag.
2. Preserve state across GPUVA operations.
3. Clear state on first GPU fault.
4. Add MMU notifier and worker infrastructure.
5. Deactivate notifier on GPU touch.
6. Wire notifiers into VM lifecycle.
7. Fix partial unmap attribute reset.
Changes in v2:
- Move runtime state to xe_vma bool cpu_autoreset_active. (Matt)
- Embed work_struct in xe_madvise_notifier; no allocation in callback. (Thomas)
- Coalesce overlapping munmap events via min/max.
- Replace closing state with teardown_rwsem. (Matt)
- Use maple_tree for notifier tracking. (Matt)
- Register notifiers outside vm->lock; take it only for the maple-tree dedup check.
- Add xe_vma_effective_create_flags() and fix REMAP split handling.
- Move xe_vma_gpu_touch() to success path in pagefault handler. (Matt)
- Use plain bool active in notifier. (Matt)
- Add lockdep assertions for vm->lock.
Arvind Yadav (6):
drm/xe/vm: Track CPU_AUTORESET state in xe_vma
drm/xe/vm: Preserve cpu_autoreset_active across GPUVA operations
drm/xe/svm: Clear CPU_AUTORESET_ACTIVE on first GPU fault
drm/xe/vm: Add madvise autoreset interval notifier worker
infrastructure
drm/xe/vm: Deactivate madvise notifier on GPU touch
drm/xe/vm: Wire MADVISE_AUTORESET notifiers into VM lifecycle
Himal Prasad Ghimiray (1):
drm/xe/svm: Correct memory attribute reset for partial unmap
drivers/gpu/drm/xe/xe_svm.c | 80 ++++-
drivers/gpu/drm/xe/xe_svm.h | 10 +
drivers/gpu/drm/xe/xe_vm.c | 82 ++++-
drivers/gpu/drm/xe/xe_vm.h | 18 ++
drivers/gpu/drm/xe/xe_vm_madvise.c | 498 ++++++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_vm_madvise.h | 9 +
drivers/gpu/drm/xe/xe_vm_types.h | 87 +++++
7 files changed, 761 insertions(+), 23 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [RFC v2 1/7] drm/xe/vm: Track CPU_AUTORESET state in xe_vma
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
@ 2026-04-06 8:58 ` Arvind Yadav
2026-04-30 4:07 ` Matthew Brost
2026-04-06 8:58 ` [RFC v2 2/7] drm/xe/vm: Preserve cpu_autoreset_active across GPUVA operations Arvind Yadav
` (9 subsequent siblings)
10 siblings, 1 reply; 17+ messages in thread
From: Arvind Yadav @ 2026-04-06 8:58 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom
Track MADVISE_AUTORESET CPU-only state in struct xe_vma with a dedicated
cpu_autoreset_active bool.
Add XE_VMA_CPU_AUTORESET_ACTIVE as a pipeline-only bit to carry this
state through MAP/REMAP operations. Runtime state lives in
xe_vma.cpu_autoreset_active rather than vma->gpuva.flags.
The state is set at bind time and cleared on the first successful GPU
fault.
v2:
- Move runtime state from gpuva.flags to xe_vma bool. (Matt)
- Keep XE_VMA_CPU_AUTORESET_ACTIVE pipeline-only. (Matt)
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
drivers/gpu/drm/xe/xe_vm.h | 5 +++++
drivers/gpu/drm/xe/xe_vm_types.h | 10 ++++++++++
2 files changed, 15 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
index c5b900f38ded..bdf42083da86 100644
--- a/drivers/gpu/drm/xe/xe_vm.h
+++ b/drivers/gpu/drm/xe/xe_vm.h
@@ -181,6 +181,11 @@ static inline bool xe_vma_is_userptr(struct xe_vma *vma)
!xe_vma_is_cpu_addr_mirror(vma);
}
+static inline bool xe_vma_has_cpu_autoreset_active(const struct xe_vma *vma)
+{
+ return vma->cpu_autoreset_active;
+}
+
struct xe_vma *xe_vm_find_vma_by_addr(struct xe_vm *vm, u64 page_addr);
int xe_vma_need_vram_for_atomic(struct xe_device *xe, struct xe_vma *vma, bool is_atomic);
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index a94827d7fbec..6a19ecca5518 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -52,6 +52,8 @@ struct xe_vm_pgtable_update_op;
#define XE_VMA_DUMPABLE (DRM_GPUVA_USERBITS << 8)
#define XE_VMA_SYSTEM_ALLOCATOR (DRM_GPUVA_USERBITS << 9)
#define XE_VMA_MADV_AUTORESET (DRM_GPUVA_USERBITS << 10)
+/* Pipeline-only bit used to carry cpu_autoreset_active through MAP/REMAP. */
+#define XE_VMA_CPU_AUTORESET_ACTIVE (DRM_GPUVA_USERBITS << 11)
/**
* struct xe_vma_mem_attr - memory attributes associated with vma
@@ -157,6 +159,14 @@ struct xe_vma {
/** @tile_staged: bind is staged for this VMA */
u8 tile_staged;
+ /**
+ * @cpu_autoreset_active: CPU mirror VMA is still CPU-only.
+ *
+ * Set at bind time and cleared on the first successful GPU fault.
+ * Protected by vm->lock.
+ */
+ bool cpu_autoreset_active;
+
/**
* @skip_invalidation: Used in madvise to avoid invalidation
* if mem attributes doesn't change
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [RFC v2 2/7] drm/xe/vm: Preserve cpu_autoreset_active across GPUVA operations
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
2026-04-06 8:58 ` [RFC v2 1/7] drm/xe/vm: Track CPU_AUTORESET state in xe_vma Arvind Yadav
@ 2026-04-06 8:58 ` Arvind Yadav
2026-04-30 4:29 ` Matthew Brost
2026-04-06 8:58 ` [RFC v2 3/7] drm/xe/svm: Clear CPU_AUTORESET_ACTIVE on first GPU fault Arvind Yadav
` (8 subsequent siblings)
10 siblings, 1 reply; 17+ messages in thread
From: Arvind Yadav @ 2026-04-06 8:58 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom
GPUVA split and remap rebuild VMAs using XE_VMA_CREATE_MASK, which does
not carry runtime-only state. Forward XE_VMA_CPU_AUTORESET_ACTIVE through
the pipeline so xe_vma_create() restores cpu_autoreset_active in the new
VMA.
Also preserve the effective PAT index on REMAP so madvise-applied
overrides survive splits.
Relax XE_WARN_ON in the UNMAP path to allow non-default attributes on
cpu_autoreset_active VMAs.
Add xe_vma_effective_create_flags() to centralise flag propagation.
v2:
- Move runtime state to xe_vma bool and keep
XE_VMA_CPU_AUTORESET_ACTIVE as pipeline-only. (Matt)
- Add xe_vma_effective_create_flags() to centralise flag handling.
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
drivers/gpu/drm/xe/xe_vm.c | 52 +++++++++++++++++++++++++++++++++-----
1 file changed, 45 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 2408b547ca3d..65425f2f1bf1 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -1106,7 +1106,9 @@ static struct xe_vma *xe_vma_create(struct xe_vm *vm,
vma->gpuva.vm = &vm->gpuvm;
vma->gpuva.va.addr = start;
vma->gpuva.va.range = end - start + 1;
- vma->gpuva.flags = flags;
+ /* Pipeline-only; runtime state lives in vma->cpu_autoreset_active. */
+ vma->gpuva.flags = flags & ~XE_VMA_CPU_AUTORESET_ACTIVE;
+ vma->cpu_autoreset_active = !!(flags & XE_VMA_CPU_AUTORESET_ACTIVE);
for_each_tile(tile, vm->xe, id)
vma->tile_mask |= 0x1 << id;
@@ -2454,8 +2456,10 @@ vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_vma_ops *vops,
op->map.vma_flags |= XE_VMA_SYSTEM_ALLOCATOR;
if (flags & DRM_XE_VM_BIND_FLAG_DUMPABLE)
op->map.vma_flags |= XE_VMA_DUMPABLE;
- if (flags & DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET)
+ if (flags & DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET) {
op->map.vma_flags |= XE_VMA_MADV_AUTORESET;
+ op->map.vma_flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
+ }
op->map.request_decompress = flags & DRM_XE_VM_BIND_FLAG_DECOMPRESS;
op->map.pat_index = pat_index;
op->map.invalidate_on_bind =
@@ -2775,6 +2779,12 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct drm_gpuva_ops *ops,
};
flags |= op->map.vma_flags & XE_VMA_CREATE_MASK;
+ /*
+ * Pipeline-only flag; forward explicitly so xe_vma_create()
+ * restores state.
+ */
+ if (op->map.vma_flags & XE_VMA_CPU_AUTORESET_ACTIVE)
+ flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
vma = new_vma(vm, &op->base.map, &default_attr,
flags);
@@ -2817,6 +2827,10 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct drm_gpuva_ops *ops,
op->remap.old_range = op->remap.range;
flags |= op->base.remap.unmap->va->flags & XE_VMA_CREATE_MASK;
+ /* Pipeline-only; forward explicitly. */
+ if (xe_vma_has_cpu_autoreset_active(old))
+ flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
+
if (op->base.remap.prev) {
vma = new_vma(vm, op->base.remap.prev,
&old->attr, flags);
@@ -4659,6 +4673,20 @@ int xe_vma_need_vram_for_atomic(struct xe_device *xe, struct xe_vma *vma, bool i
}
}
+/*
+ * Returns vma->gpuva.flags with XE_VMA_CPU_AUTORESET_ACTIVE injected if
+ * the runtime state is set, for passing through MAP/REMAP pipelines.
+ */
+static unsigned int xe_vma_effective_create_flags(struct xe_vma *vma)
+{
+ unsigned int flags = vma->gpuva.flags;
+
+ if (xe_vma_has_cpu_autoreset_active(vma))
+ flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
+
+ return flags;
+}
+
static int xe_vm_alloc_vma(struct xe_vm *vm,
struct drm_gpuvm_map_req *map_req,
bool is_madvise)
@@ -4694,19 +4722,25 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,
if (!is_madvise) {
if (__op->op == DRM_GPUVA_OP_UNMAP) {
vma = gpuva_to_vma(op->base.unmap.va);
- XE_WARN_ON(!xe_vma_has_default_mem_attrs(vma));
+ /* Attributes must be default on UNMAP; CPU-only VMAs are exempt. */
+ XE_WARN_ON(!xe_vma_has_default_mem_attrs(vma) &&
+ !xe_vma_has_cpu_autoreset_active(vma));
default_pat = vma->attr.default_pat_index;
- vma_flags = vma->gpuva.flags;
+ vma_flags = xe_vma_effective_create_flags(vma);
}
if (__op->op == DRM_GPUVA_OP_REMAP) {
vma = gpuva_to_vma(op->base.remap.unmap->va);
- default_pat = vma->attr.default_pat_index;
- vma_flags = vma->gpuva.flags;
+ /* Preserve current PAT index, not default, for remap */
+ default_pat = vma->attr.pat_index;
+ vma_flags = xe_vma_effective_create_flags(vma);
}
if (__op->op == DRM_GPUVA_OP_MAP) {
op->map.vma_flags |= vma_flags & XE_VMA_CREATE_MASK;
+ /* Pipeline-only; forward explicitly. */
+ if (vma_flags & XE_VMA_CPU_AUTORESET_ACTIVE)
+ op->map.vma_flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
op->map.pat_index = default_pat;
}
} else {
@@ -4715,10 +4749,11 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,
xe_assert(vm->xe, !remap_op);
xe_assert(vm->xe, xe_vma_has_no_bo(vma));
remap_op = true;
- vma_flags = vma->gpuva.flags;
+ vma_flags = xe_vma_effective_create_flags(vma);
}
if (__op->op == DRM_GPUVA_OP_MAP) {
+ /* Madvise MAP follows REMAP (split/merge). */
xe_assert(vm->xe, remap_op);
remap_op = false;
/*
@@ -4728,6 +4763,9 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,
* unmapping.
*/
op->map.vma_flags |= vma_flags & XE_VMA_CREATE_MASK;
+ /* Pipeline-only; forward explicitly. */
+ if (vma_flags & XE_VMA_CPU_AUTORESET_ACTIVE)
+ op->map.vma_flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
}
}
print_op(vm->xe, __op);
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [RFC v2 3/7] drm/xe/svm: Clear CPU_AUTORESET_ACTIVE on first GPU fault
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
2026-04-06 8:58 ` [RFC v2 1/7] drm/xe/vm: Track CPU_AUTORESET state in xe_vma Arvind Yadav
2026-04-06 8:58 ` [RFC v2 2/7] drm/xe/vm: Preserve cpu_autoreset_active across GPUVA operations Arvind Yadav
@ 2026-04-06 8:58 ` Arvind Yadav
2026-04-30 4:26 ` Matthew Brost
2026-04-06 8:58 ` [RFC v2 4/7] drm/xe/vm: Add madvise autoreset interval notifier worker infrastructure Arvind Yadav
` (7 subsequent siblings)
10 siblings, 1 reply; 17+ messages in thread
From: Arvind Yadav @ 2026-04-06 8:58 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom
CPU address mirror VMAs start with cpu_autoreset_active set, indicating
they are still CPU-only.
Clear cpu_autoreset_active after the first successful GPU fault so
subsequent munmap follows the SVM path instead of the autoreset path.
Do this in xe_svm_handle_pagefault() on the success path only.
Prefetch faults that install no PTEs must not transition this state.
v2:
- Move xe_vma_gpu_touch() to the success path in
xe_svm_handle_pagefault() so prefetch faults that find no range do
not transition the state. (Matt)
- Add xe_vma_gpu_touch() helper in xe_vm.h and use
vma->cpu_autoreset_active instead of vma->gpuva.flags. (Matt)
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
drivers/gpu/drm/xe/xe_svm.c | 11 +++++++++++
drivers/gpu/drm/xe/xe_vm.h | 13 +++++++++++++
2 files changed, 24 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
index 5933b2b6392b..fd57c9d41db8 100644
--- a/drivers/gpu/drm/xe/xe_svm.c
+++ b/drivers/gpu/drm/xe/xe_svm.c
@@ -1388,6 +1388,9 @@ int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
bool atomic)
{
int need_vram, ret;
+
+ lockdep_assert_held_write(&vm->lock);
+
retry:
need_vram = xe_vma_need_vram_for_atomic(vm->xe, vma, atomic);
if (need_vram < 0)
@@ -1406,6 +1409,14 @@ int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
goto retry;
}
+
+ /*
+ * Mark the VMA as GPU-touched only after a successful fault-in.
+ * Prefetch faults that find no range must not transition this state.
+ */
+ if (!ret && xe_vma_has_cpu_autoreset_active(vma))
+ xe_vma_gpu_touch(vma);
+
return ret;
}
diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
index bdf42083da86..8d45f896f90b 100644
--- a/drivers/gpu/drm/xe/xe_vm.h
+++ b/drivers/gpu/drm/xe/xe_vm.h
@@ -441,4 +441,17 @@ static inline struct drm_exec *xe_vm_validation_exec(struct xe_vm *vm)
((READ_ONCE(tile_present) & ~READ_ONCE(tile_invalidated)) & BIT((tile)->id))
void xe_vma_mem_attr_copy(struct xe_vma_mem_attr *to, struct xe_vma_mem_attr *from);
+
+/**
+ * xe_vma_gpu_touch() - Mark a VMA as no longer CPU-only
+ * @vma: VMA to update
+ *
+ * Clear cpu_autoreset_active after the first successful GPU fault-in.
+ * Caller must hold vm->lock in write mode.
+ */
+static inline void xe_vma_gpu_touch(struct xe_vma *vma)
+{
+ lockdep_assert_held_write(&xe_vma_vm(vma)->lock);
+ vma->cpu_autoreset_active = false;
+}
#endif
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [RFC v2 4/7] drm/xe/vm: Add madvise autoreset interval notifier worker infrastructure
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
` (2 preceding siblings ...)
2026-04-06 8:58 ` [RFC v2 3/7] drm/xe/svm: Clear CPU_AUTORESET_ACTIVE on first GPU fault Arvind Yadav
@ 2026-04-06 8:58 ` Arvind Yadav
2026-04-06 8:58 ` [RFC v2 5/7] drm/xe/vm: Deactivate madvise notifier on GPU touch Arvind Yadav
` (6 subsequent siblings)
10 siblings, 0 replies; 17+ messages in thread
From: Arvind Yadav @ 2026-04-06 8:58 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom
Reset VMA attributes on munmap for CPU-only VMAs.
The MMU notifier callback cannot take vm->lock, so use an
mmu_interval_notifier to queue work on MMU_NOTIFY_UNMAP.
The worker runs under vm->lock and resets attributes for VMAs
with cpu_autoreset_active set.
v2:
- Replace closing state with teardown_rwsem. (Matt)
- Use maple_tree for notifier tracking. (Matt)
- Embed work_struct in notifier; no allocation in callback. (Thomas)
- Coalesce overlapping munmap events via min/max.
- Run notifier removal and workqueue drain outside teardown_rwsem. (Matt)
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
drivers/gpu/drm/xe/xe_vm_madvise.c | 394 +++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_vm_madvise.h | 7 +
drivers/gpu/drm/xe/xe_vm_types.h | 59 +++++
3 files changed, 460 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.c b/drivers/gpu/drm/xe/xe_vm_madvise.c
index 66f00d3f5c07..bdeb2e8e0f2c 100644
--- a/drivers/gpu/drm/xe/xe_vm_madvise.c
+++ b/drivers/gpu/drm/xe/xe_vm_madvise.c
@@ -6,6 +6,8 @@
#include "xe_vm_madvise.h"
#include <linux/nospec.h>
+#include <linux/maple_tree.h>
+#include <linux/workqueue.h>
#include <drm/xe_drm.h>
#include "xe_bo.h"
@@ -14,6 +16,10 @@
#include "xe_svm.h"
#include "xe_tlb_inval.h"
#include "xe_vm.h"
+#include "xe_macros.h"
+
+/* Lockdep class for teardown_rwsem */
+static struct lock_class_key xe_madvise_teardown_key;
struct xe_vmas_in_madvise_range {
u64 addr;
@@ -827,3 +833,391 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
xe_vm_put(vm);
return err;
}
+
+static void xe_vma_set_default_attributes(struct xe_vma *vma)
+{
+ struct xe_vma_mem_attr default_attr = {
+ .preferred_loc.devmem_fd = DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE,
+ .preferred_loc.migration_policy = DRM_XE_MIGRATE_ALL_PAGES,
+ .pat_index = vma->attr.default_pat_index,
+ .atomic_access = DRM_XE_ATOMIC_UNDEFINED,
+ .purgeable_state = XE_MADV_PURGEABLE_WILLNEED,
+ };
+
+ xe_vma_mem_attr_copy(&vma->attr, &default_attr);
+}
+
+/**
+ * xe_vm_madvise_process_unmap - Process munmap for all VMAs in range
+ * @vm: VM
+ * @start: Start of unmap range
+ * @end: End of unmap range
+ *
+ * Processes all VMAs overlapping the unmap range. An unmap can span multiple
+ * VMAs, so we need to loop and process each segment.
+ *
+ * Return: 0 on success, negative error otherwise
+ */
+static int xe_vm_madvise_process_unmap(struct xe_vm *vm, u64 start, u64 end)
+{
+ u64 addr = start;
+ int err;
+
+ lockdep_assert_held_write(&vm->lock);
+
+ if (xe_vm_is_closed_or_banned(vm))
+ return 0;
+
+ while (addr < end) {
+ struct xe_vma *vma;
+ u64 seg_start, seg_end;
+ bool has_default_attr;
+
+ vma = xe_vm_find_overlapping_vma(vm, addr, end - addr);
+ if (!vma)
+ break;
+
+ /* Skip GPU-touched VMAs - SVM handles them */
+ if (!xe_vma_has_cpu_autoreset_active(vma)) {
+ addr = xe_vma_end(vma);
+ continue;
+ }
+
+ has_default_attr = xe_vma_has_default_mem_attrs(vma);
+ seg_start = max(addr, xe_vma_start(vma));
+ seg_end = min(end, xe_vma_end(vma));
+
+ /* Expand for merging if VMA already has default attrs */
+ if (has_default_attr &&
+ xe_vma_start(vma) >= start &&
+ xe_vma_end(vma) <= end) {
+ /*
+ * VMA fully within unmap range and already at defaults.
+ * Try to merge with adjacent default-attr VMAs into one
+ * rebuild call. If expansion found nothing, skip.
+ */
+ seg_start = xe_vma_start(vma);
+ seg_end = xe_vma_end(vma);
+ xe_vm_find_cpu_addr_mirror_vma_range(vm, &seg_start, &seg_end);
+ if (xe_vma_start(vma) == seg_start && xe_vma_end(vma) == seg_end) {
+ /* No adjacent defaults to merge; nothing to do. */
+ addr = seg_end;
+ continue;
+ }
+ } else if (xe_vma_start(vma) == seg_start && xe_vma_end(vma) == seg_end) {
+ /* Unmap covers VMA exactly; reset attrs in-place, no rebuild needed. */
+ xe_vma_set_default_attributes(vma);
+ addr = seg_end;
+ continue;
+ }
+
+ err = xe_vm_alloc_cpu_addr_mirror_vma(vm, seg_start, seg_end - seg_start);
+ if (err) {
+ if (err == -ENOENT) {
+ /* VMA removed before worker ran; nothing to reset. */
+ addr = seg_end;
+ continue;
+ }
+ return err;
+ }
+
+ addr = seg_end;
+ }
+
+ return 0;
+}
+
+/**
+ * xe_madvise_work_func - Worker to process unmap
+ * @w: work_struct embedded in xe_madvise_notifier
+ *
+ * Reads the pending range, clears the pending flag, then resets VMA
+ * attributes under vm->lock. The work struct and vm reference are both
+ * owned by the notifier, so no allocation or extra refcount is needed here.
+ */
+static void xe_madvise_work_func(struct work_struct *w)
+{
+ struct xe_madvise_notifier *notifier =
+ container_of(w, struct xe_madvise_notifier, work);
+ struct xe_vm *vm = notifier->vm;
+ u64 start, end;
+ int err;
+
+ spin_lock(¬ifier->work_lock);
+ start = notifier->work_start;
+ end = notifier->work_end;
+ notifier->work_pending = false;
+ spin_unlock(¬ifier->work_lock);
+
+ down_write(&vm->lock);
+ err = xe_vm_madvise_process_unmap(vm, start, end);
+ if (err)
+ drm_warn(&vm->xe->drm,
+ "madvise autoreset failed [%#llx-%#llx]: %d\n",
+ start, end, err);
+ up_write(&vm->lock);
+}
+
+/**
+ * xe_madvise_notifier_callback - MMU notifier callback for CPU munmap
+ * @mni: mmu_interval_notifier
+ * @range: mmu_notifier_range
+ * @cur_seq: current sequence number
+ *
+ * Queues the pre-allocated embedded work item to reset VMA attributes.
+ * No memory allocation occurs here; the work struct lives inside the
+ * xe_madvise_notifier which was allocated at ioctl time.
+ *
+ * Coalesces overlapping munmap events via min/max into the pending range.
+ *
+ * Return: true (never blocks)
+ */
+static bool xe_madvise_notifier_callback(struct mmu_interval_notifier *mni,
+ const struct mmu_notifier_range *range,
+ unsigned long cur_seq)
+{
+ struct xe_madvise_notifier *notifier =
+ container_of(mni, struct xe_madvise_notifier, mmu_notifier);
+ struct xe_vm *vm = notifier->vm;
+ u64 start, end;
+
+ if (range->event != MMU_NOTIFY_UNMAP)
+ return true;
+
+ /* Skip non-blockable contexts; correctness is ensured by cpu_autoreset_active. */
+ if (!mmu_notifier_range_blockable(range))
+ return true;
+
+ /* Consume seq (interval-notifier convention) */
+ mmu_interval_set_seq(mni, cur_seq);
+
+ start = max_t(u64, range->start, notifier->vma_start);
+ end = min_t(u64, range->end, notifier->vma_end);
+
+ if (start >= end)
+ return true;
+
+ /* Bail if teardown started; trylock fails once fini holds write. */
+ if (!down_read_trylock(&vm->svm.madvise_work.teardown_rwsem))
+ return true;
+
+ /* fini may have NULLed wq before we got here; check under read lock. */
+ if (!vm->svm.madvise_work.wq) {
+ up_read(&vm->svm.madvise_work.teardown_rwsem);
+ return true;
+ }
+
+ spin_lock(¬ifier->work_lock);
+ if (notifier->work_pending) {
+ /* Coalesce into the already-pending range; no requeue needed. */
+ notifier->work_start = min(notifier->work_start, start);
+ notifier->work_end = max(notifier->work_end, end);
+ spin_unlock(¬ifier->work_lock);
+ up_read(&vm->svm.madvise_work.teardown_rwsem);
+ return true;
+ }
+ notifier->work_start = start;
+ notifier->work_end = end;
+ notifier->work_pending = true;
+ spin_unlock(¬ifier->work_lock);
+
+ queue_work(vm->svm.madvise_work.wq, ¬ifier->work);
+
+ up_read(&vm->svm.madvise_work.teardown_rwsem);
+
+ return true;
+}
+
+static const struct mmu_interval_notifier_ops xe_madvise_notifier_ops = {
+ .invalidate = xe_madvise_notifier_callback,
+};
+
+/**
+ * xe_vm_madvise_init - Initialize madvise notifier infrastructure
+ * @vm: VM
+ *
+ * Sets up workqueue for async munmap processing.
+ *
+ * Return: 0 on success, -ENOMEM on failure
+ */
+int xe_vm_madvise_init(struct xe_vm *vm)
+{
+ /* Guard against double initialization */
+ if (vm->svm.madvise_work.wq)
+ return 0;
+
+ mt_init(&vm->svm.madvise_notifiers);
+
+ /* Custom lockdep class: always acquired via trylock, never blocks. */
+ __init_rwsem(&vm->svm.madvise_work.teardown_rwsem,
+ "xe_madvise_teardown", &xe_madvise_teardown_key);
+
+ /* WQ_UNBOUND, no WQ_MEM_RECLAIM: not on reclaim path. */
+ vm->svm.madvise_work.wq = alloc_workqueue("xe_madvise", WQ_UNBOUND, 0);
+ if (!vm->svm.madvise_work.wq) {
+ mtree_destroy(&vm->svm.madvise_notifiers);
+ return -ENOMEM;
+ }
+
+ return 0;
+}
+
+/**
+ * xe_vm_madvise_fini - Cleanup all madvise notifiers
+ * @vm: VM
+ *
+ * Tears down notifiers and drains workqueue. Safe if init partially failed.
+ *
+ * down_write(teardown_rwsem) first to block callbacks, then collect notifiers
+ * and NULL wq, then up_write. Remove notifiers and drain wq only after
+ * releasing the rwsem: mmu_interval_notifier_remove() can block on mmap_lock.
+ */
+void xe_vm_madvise_fini(struct xe_vm *vm)
+{
+ struct xe_madvise_notifier *notifier, *next;
+ struct workqueue_struct *wq;
+ unsigned long index;
+ LIST_HEAD(tmp);
+
+ /* Nothing to do if init never ran. */
+ if (!vm->svm.madvise_work.wq)
+ return;
+
+ /* Block new callbacks and wait for in-flight ones to finish. */
+ down_write(&vm->svm.madvise_work.teardown_rwsem);
+
+ /* Stage notifiers for removal; list_head is unused outside fini. */
+ mt_for_each(&vm->svm.madvise_notifiers, notifier, index, ULONG_MAX)
+ list_add(¬ifier->list, &tmp);
+
+ /* VM is CLOSED here; no new madvise ioctls can insert. Safe to destroy. */
+ mtree_destroy(&vm->svm.madvise_notifiers);
+
+ /* NULL the wq; late callbacks see NULL and bail. */
+ wq = vm->svm.madvise_work.wq;
+ vm->svm.madvise_work.wq = NULL;
+
+ up_write(&vm->svm.madvise_work.teardown_rwsem);
+
+ /*
+ * Remove interval notifiers outside the rwsem; remove() may block on
+ * mmap_lock. This synchronises with in-progress callbacks but NOT with
+ * already-queued work items (the embedded work_struct is still live).
+ */
+ list_for_each_entry(notifier, &tmp, list)
+ mmu_interval_notifier_remove(¬ifier->mmu_notifier);
+
+ /*
+ * Drain before freeing: queued/running work items hold a pointer to
+ * the notifier via container_of(). kfree() must not happen until all
+ * work has finished.
+ */
+ if (wq) {
+ drain_workqueue(wq);
+ destroy_workqueue(wq);
+ }
+
+ /* Safe to free now: no callbacks can fire, no workers are running. */
+ list_for_each_entry_safe(notifier, next, &tmp, list) {
+ list_del(¬ifier->list);
+ xe_vm_put(notifier->vm);
+ kfree(notifier);
+ }
+}
+
+/**
+ * xe_vm_madvise_register_notifier_range - Register MMU notifier for address range
+ * @vm: VM
+ * @start: Start address (page-aligned)
+ * @end: End address (page-aligned)
+ *
+ * Registers interval notifier for munmap tracking. Uses addresses (not VMA pointers)
+ * to avoid UAF after dropping vm->lock. Deduplicates by range.
+ *
+ * Return: 0 on success, negative error code on failure
+ */
+int xe_vm_madvise_register_notifier_range(struct xe_vm *vm, u64 start, u64 end)
+{
+ struct xe_madvise_notifier *notifier;
+ int err;
+
+ if (!IS_ALIGNED(start, PAGE_SIZE) || !IS_ALIGNED(end, PAGE_SIZE))
+ return -EINVAL;
+
+ if (WARN_ON_ONCE(end <= start))
+ return -EINVAL;
+
+ if (!vm->svm.gpusvm.mm)
+ return -EINVAL;
+
+ notifier = kzalloc_obj(*notifier, GFP_KERNEL);
+ if (!notifier)
+ return -ENOMEM;
+
+ notifier->vm = xe_vm_get(vm);
+ notifier->vma_start = start;
+ notifier->vma_end = end;
+ INIT_LIST_HEAD(¬ifier->list);
+ spin_lock_init(¬ifier->work_lock);
+ INIT_WORK(¬ifier->work, xe_madvise_work_func);
+
+ /* Insert before taking vm->lock; may call mmap_write_lock() internally. */
+ err = mmu_interval_notifier_insert(¬ifier->mmu_notifier,
+ vm->svm.gpusvm.mm,
+ start,
+ end - start,
+ &xe_madvise_notifier_ops);
+ if (err) {
+ xe_vm_put(notifier->vm);
+ kfree(notifier);
+ return err;
+ }
+
+ /* Take vm->lock only for the maple-tree dedup check and store. */
+ down_write(&vm->lock);
+
+ if (xe_vm_is_closed_or_banned(vm)) {
+ up_write(&vm->lock);
+ mmu_interval_notifier_remove(¬ifier->mmu_notifier);
+ xe_vm_put(notifier->vm);
+ kfree(notifier);
+ return -ENOENT;
+ }
+
+ /*
+ * Re-arm on exact match, deactivate stale notifiers from split VMAs
+ * so their callbacks no-op. fini() will clean them up.
+ */
+ {
+ struct xe_madvise_notifier *n;
+ unsigned long idx = start;
+
+ mt_for_each(&vm->svm.madvise_notifiers, n, idx, end - 1) {
+ if (n->vma_start == start && n->vma_end == end) {
+ n->active = true;
+ up_write(&vm->lock);
+ mmu_interval_notifier_remove(¬ifier->mmu_notifier);
+ xe_vm_put(notifier->vm);
+ kfree(notifier);
+ return 0;
+ }
+ /* Stale notifier from a split VMA; deactivate and let
+ * fini() clean it up.
+ */
+ n->active = false;
+ }
+ }
+
+ err = mtree_store_range(&vm->svm.madvise_notifiers, start, end - 1,
+ notifier, GFP_KERNEL);
+ up_write(&vm->lock);
+
+ if (err) {
+ mmu_interval_notifier_remove(¬ifier->mmu_notifier);
+ xe_vm_put(notifier->vm);
+ kfree(notifier);
+ }
+
+ return err;
+}
+
diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.h b/drivers/gpu/drm/xe/xe_vm_madvise.h
index 39acd2689ca0..111953de4d2f 100644
--- a/drivers/gpu/drm/xe/xe_vm_madvise.h
+++ b/drivers/gpu/drm/xe/xe_vm_madvise.h
@@ -6,13 +6,20 @@
#ifndef _XE_VM_MADVISE_H_
#define _XE_VM_MADVISE_H_
+#include <linux/types.h>
+
struct drm_device;
struct drm_file;
struct xe_bo;
+struct xe_vm;
+struct xe_vma;
int xe_vm_madvise_ioctl(struct drm_device *dev, void *data,
struct drm_file *file);
void xe_bo_recompute_purgeable_state(struct xe_bo *bo);
+int xe_vm_madvise_init(struct xe_vm *vm);
+void xe_vm_madvise_fini(struct xe_vm *vm);
+int xe_vm_madvise_register_notifier_range(struct xe_vm *vm, u64 start, u64 end);
#endif
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index 6a19ecca5518..93e777f010f9 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -12,6 +12,7 @@
#include <linux/dma-resv.h>
#include <linux/kref.h>
+#include <linux/maple_tree.h>
#include <linux/mmu_notifier.h>
#include <linux/scatterlist.h>
@@ -31,6 +32,42 @@ struct xe_user_fence;
struct xe_vm;
struct xe_vm_pgtable_update_op;
+/**
+ * struct xe_madvise_notifier - MMU notifier for madvise autoreset
+ *
+ * Tracks CPU munmap on CPU address mirror VMAs and queues work to
+ * reset attributes. Work is embedded so the callback does not allocate.
+ *
+ * work_lock serialises pending range updates between callback and worker.
+ * Overlapping events are coalesced via min/max on work_start/work_end.
+ */
+struct xe_madvise_notifier {
+ /** @mmu_notifier: MMU interval notifier */
+ struct mmu_interval_notifier mmu_notifier;
+ /** @vm: VM this notifier belongs to (holds reference via xe_vm_get) */
+ struct xe_vm *vm;
+ /** @vma_start: Start address of VMA being tracked */
+ u64 vma_start;
+ /** @vma_end: End address of VMA being tracked */
+ u64 vma_end;
+ /** @list: Used only in xe_vm_madvise_fini() to stage notifiers for removal. */
+ struct list_head list;
+ /** @work_lock: Serialises work_pending, work_start and work_end. */
+ spinlock_t work_lock;
+ /** @work_pending: True if a range is pending for @work. */
+ bool work_pending;
+ /** @work_start: Start of the unmapped range for the pending work item. */
+ u64 work_start;
+ /** @work_end: End of the unmapped range for the pending work item. */
+ u64 work_end;
+ /**
+ * @work: Embedded work item queued on CPU munmap.
+ * Pre-allocated at notifier registration; no allocation ever occurs
+ * in the MMU notifier callback.
+ */
+ struct work_struct work;
+};
+
#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
#define TEST_VM_OPS_ERROR
#define FORCE_OP_ERROR BIT(31)
@@ -245,6 +282,28 @@ struct xe_vm {
struct xe_pagemap *pagemaps[XE_MAX_TILES_PER_DEVICE];
/** @svm.peer: Used for pagemap connectivity computations. */
struct drm_pagemap_peer peer;
+
+ /**
+ * @svm.madvise_notifiers: Active madvise notifiers, keyed by
+ * [vma_start, vma_end - 1]. The maple tree uses its own internal
+ * spinlock for data integrity. Insertions happen under vm->lock
+ * write; teardown is serialized by teardown_rwsem write.
+ */
+ struct maple_tree madvise_notifiers;
+
+ /** @svm.madvise_work: Workqueue for async munmap processing */
+ struct {
+ /** @svm.madvise_work.wq: Workqueue */
+ struct workqueue_struct *wq;
+
+ /**
+ * @svm.madvise_work.teardown_rwsem: Guards VM teardown.
+ *
+ * Callbacks take read via trylock; fini takes write.
+ * A failed trylock means teardown started; bail immediately.
+ */
+ struct rw_semaphore teardown_rwsem;
+ } madvise_work;
} svm;
struct xe_device *xe;
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [RFC v2 5/7] drm/xe/vm: Deactivate madvise notifier on GPU touch
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
` (3 preceding siblings ...)
2026-04-06 8:58 ` [RFC v2 4/7] drm/xe/vm: Add madvise autoreset interval notifier worker infrastructure Arvind Yadav
@ 2026-04-06 8:58 ` Arvind Yadav
2026-04-06 8:58 ` [RFC v2 6/7] drm/xe/vm: Wire MADVISE_AUTORESET notifiers into VM lifecycle Arvind Yadav
` (5 subsequent siblings)
10 siblings, 0 replies; 17+ messages in thread
From: Arvind Yadav @ 2026-04-06 8:58 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom
MADVISE_AUTORESET notifier is only needed while the VMA is CPU-only.
After GPU touch, SVM notifiers handle munmap.
Gate the callback on an active flag and clear it on first GPU touch in
xe_vm_madvise_gpu_touch(), making the callback a no-op.
v2:
- Use plain bool active; callback reads it lockless. (Matt)
- Use wq check and mt_for_each in deactivate path. (Matt)
- Add lockdep_assert_held_write(&vm->lock) to xe_vm_madvise_gpu_touch().
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
drivers/gpu/drm/xe/xe_svm.c | 5 ++-
drivers/gpu/drm/xe/xe_vm_madvise.c | 52 ++++++++++++++++++++++++++++--
drivers/gpu/drm/xe/xe_vm_madvise.h | 2 ++
drivers/gpu/drm/xe/xe_vm_types.h | 7 ++++
4 files changed, 63 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
index fd57c9d41db8..b6544947d861 100644
--- a/drivers/gpu/drm/xe/xe_svm.c
+++ b/drivers/gpu/drm/xe/xe_svm.c
@@ -22,6 +22,7 @@
#include "xe_tlb_inval.h"
#include "xe_ttm_vram_mgr.h"
#include "xe_vm.h"
+#include "xe_vm_madvise.h"
#include "xe_vm_types.h"
#include "xe_vram_types.h"
@@ -1414,8 +1415,10 @@ int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
* Mark the VMA as GPU-touched only after a successful fault-in.
* Prefetch faults that find no range must not transition this state.
*/
- if (!ret && xe_vma_has_cpu_autoreset_active(vma))
+ if (!ret && xe_vma_has_cpu_autoreset_active(vma)) {
xe_vma_gpu_touch(vma);
+ xe_vm_madvise_gpu_touch(vm, vma);
+ }
return ret;
}
diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.c b/drivers/gpu/drm/xe/xe_vm_madvise.c
index bdeb2e8e0f2c..4c57cac63d13 100644
--- a/drivers/gpu/drm/xe/xe_vm_madvise.c
+++ b/drivers/gpu/drm/xe/xe_vm_madvise.c
@@ -981,10 +981,10 @@ static bool xe_madvise_notifier_callback(struct mmu_interval_notifier *mni,
struct xe_vm *vm = notifier->vm;
u64 start, end;
- if (range->event != MMU_NOTIFY_UNMAP)
+ if (range->event != MMU_NOTIFY_UNMAP || !notifier->active)
return true;
- /* Skip non-blockable contexts; correctness is ensured by cpu_autoreset_active. */
+ /* Skip non-blockable contexts; cpu_autoreset_active handles fallback. */
if (!mmu_notifier_range_blockable(range))
return true;
@@ -1157,6 +1157,7 @@ int xe_vm_madvise_register_notifier_range(struct xe_vm *vm, u64 start, u64 end)
notifier->vm = xe_vm_get(vm);
notifier->vma_start = start;
notifier->vma_end = end;
+ notifier->active = true;
INIT_LIST_HEAD(¬ifier->list);
spin_lock_init(¬ifier->work_lock);
INIT_WORK(¬ifier->work, xe_madvise_work_func);
@@ -1221,3 +1222,50 @@ int xe_vm_madvise_register_notifier_range(struct xe_vm *vm, u64 start, u64 end)
return err;
}
+/**
+ * xe_vm_deactivate_madvise_notifier_for_range - Disable notifier callbacks
+ * @vm: VM
+ * @start: Start address (page-aligned)
+ * @end: End address (page-aligned)
+ *
+ * Clear @active on notifiers in [start, end) so future callbacks no-op.
+ * Removal is handled in xe_vm_madvise_fini().
+ */
+void xe_vm_deactivate_madvise_notifier_for_range(struct xe_vm *vm, u64 start, u64 end)
+{
+ struct xe_madvise_notifier *notifier;
+ unsigned long index = start;
+
+ lockdep_assert_held_write(&vm->lock);
+
+ /* No-op if madvise infrastructure is not available. */
+ if (!vm->svm.madvise_work.wq)
+ return;
+
+ /* Plain walk to deactivate overlapping notifiers. */
+ mt_for_each(&vm->svm.madvise_notifiers, notifier, index, end - 1)
+ notifier->active = false;
+}
+
+/**
+ * xe_vm_madvise_gpu_touch() - Suppress madvise callbacks after GPU touch
+ * @vm: VM
+ * @vma: VMA that was GPU-touched
+ *
+ * Clears @active on this VMA's notifiers so future callbacks no-op.
+ * Already-queued work still runs but no-ops: the worker rechecks
+ * cpu_autoreset_active under vm->lock and skips GPU-touched VMAs.
+ */
+void xe_vm_madvise_gpu_touch(struct xe_vm *vm, struct xe_vma *vma)
+{
+ lockdep_assert_held_write(&vm->lock);
+
+ /* Guard: only deactivate notifiers for AUTORESET-marked VMAs. */
+ if (!(vma->gpuva.flags & XE_VMA_MADV_AUTORESET))
+ return;
+
+ xe_vm_deactivate_madvise_notifier_for_range(vm,
+ xe_vma_start(vma),
+ xe_vma_end(vma));
+}
+
diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.h b/drivers/gpu/drm/xe/xe_vm_madvise.h
index 111953de4d2f..3c6f4d9e8343 100644
--- a/drivers/gpu/drm/xe/xe_vm_madvise.h
+++ b/drivers/gpu/drm/xe/xe_vm_madvise.h
@@ -22,4 +22,6 @@ void xe_bo_recompute_purgeable_state(struct xe_bo *bo);
int xe_vm_madvise_init(struct xe_vm *vm);
void xe_vm_madvise_fini(struct xe_vm *vm);
int xe_vm_madvise_register_notifier_range(struct xe_vm *vm, u64 start, u64 end);
+void xe_vm_deactivate_madvise_notifier_for_range(struct xe_vm *vm, u64 start, u64 end);
+void xe_vm_madvise_gpu_touch(struct xe_vm *vm, struct xe_vma *vma);
#endif
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index 93e777f010f9..850245042dd8 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -50,6 +50,13 @@ struct xe_madvise_notifier {
u64 vma_start;
/** @vma_end: End address of VMA being tracked */
u64 vma_end;
+ /**
+ * @active: Fast-path gate; cleared on GPU touch so callbacks bail
+ * early. Not authoritative — worker rechecks cpu_autoreset_active
+ * under vm->lock, so a stale read only causes redundant work.
+ * Written under vm->lock; read lockless in the callback.
+ */
+ bool active;
/** @list: Used only in xe_vm_madvise_fini() to stage notifiers for removal. */
struct list_head list;
/** @work_lock: Serialises work_pending, work_start and work_end. */
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [RFC v2 6/7] drm/xe/vm: Wire MADVISE_AUTORESET notifiers into VM lifecycle
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
` (4 preceding siblings ...)
2026-04-06 8:58 ` [RFC v2 5/7] drm/xe/vm: Deactivate madvise notifier on GPU touch Arvind Yadav
@ 2026-04-06 8:58 ` Arvind Yadav
2026-04-06 8:58 ` [RFC v2 7/7] drm/xe/svm: Correct memory attribute reset for partial unmap Arvind Yadav
` (4 subsequent siblings)
10 siblings, 0 replies; 17+ messages in thread
From: Arvind Yadav @ 2026-04-06 8:58 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom
Initialise MADVISE_AUTORESET notifier infrastructure for fault-mode VMs
in xe_svm_init() and tear it down during VM close.
Drop vm->lock around xe_vm_madvise_fini() since the madvise worker
takes vm->lock, then retake it for xe_svm_fini().
Register interval notifiers outside vm->lock; vm->lock is only taken for
deduplication and maple tree insertion. The callback only queues work.
Skip SVM PTE zapping for cpu_addr_mirror VMAs with
cpu_autoreset_active set since no GPU mappings exist yet.
If notifier registration fails, log and skip autoreset for that VMA.
v2:
- Register notifiers outside vm->lock; take vm->lock only for dedup and
mtree_store_range. (Matt)
- Collect VMA ranges under vm->lock and register notifiers after
unlock. (Matt)
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
drivers/gpu/drm/xe/xe_svm.c | 9 +++++
drivers/gpu/drm/xe/xe_vm.c | 12 ++++++
drivers/gpu/drm/xe/xe_vm_madvise.c | 60 +++++++++++++++++++++++++++++-
3 files changed, 79 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
index b6544947d861..89668ada38ca 100644
--- a/drivers/gpu/drm/xe/xe_svm.c
+++ b/drivers/gpu/drm/xe/xe_svm.c
@@ -914,6 +914,15 @@ int xe_svm_init(struct xe_vm *vm)
drm_pagemap_release_owner(&vm->svm.peer);
return err;
}
+
+ /* Initialize madvise notifier infrastructure after gpusvm */
+ err = xe_vm_madvise_init(vm);
+ if (err) {
+ drm_gpusvm_fini(&vm->svm.gpusvm);
+ xe_svm_put_pagemaps(vm);
+ drm_pagemap_release_owner(&vm->svm.peer);
+ return err;
+ }
} else {
err = drm_gpusvm_init(&vm->svm.gpusvm, "Xe SVM (simple)",
&vm->xe->drm, NULL, 0, 0, 0, NULL,
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 65425f2f1bf1..a2a4ffdcf7bf 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -1788,6 +1788,8 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags, struct xe_file *xef)
err_svm_fini:
if (flags & XE_VM_FLAG_FAULT_MODE) {
vm->size = 0; /* close the vm */
+ /* ok to call even if madvise_init() never ran, fini is a no-op then. */
+ xe_vm_madvise_fini(vm);
xe_svm_fini(vm);
}
err_no_resv:
@@ -1932,6 +1934,16 @@ void xe_vm_close_and_put(struct xe_vm *vm)
xe_vma_destroy_unlocked(vma);
}
+ /* Drop vm->lock around madvise fini; workers take vm->lock. */
+ xe_assert(vm->xe, xe_vm_is_closed(vm));
+ up_write(&vm->lock);
+
+ if (vm->flags & XE_VM_FLAG_FAULT_MODE)
+ xe_vm_madvise_fini(vm);
+
+ /* Retake vm->lock for xe_svm_fini(); required by drm_gpusvm. */
+ down_write(&vm->lock);
+
xe_svm_fini(vm);
up_write(&vm->lock);
diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.c b/drivers/gpu/drm/xe/xe_vm_madvise.c
index 4c57cac63d13..e526819d0a12 100644
--- a/drivers/gpu/drm/xe/xe_vm_madvise.c
+++ b/drivers/gpu/drm/xe/xe_vm_madvise.c
@@ -28,6 +28,7 @@ struct xe_vmas_in_madvise_range {
int num_vmas;
bool has_bo_vmas;
bool has_svm_userptr_vmas;
+ bool has_cpu_addr_mirror_vmas;
};
/**
@@ -70,7 +71,11 @@ static int get_vmas(struct xe_vm *vm, struct xe_vmas_in_madvise_range *madvise_r
if (xe_vma_bo(vma))
madvise_range->has_bo_vmas = true;
- else if (xe_vma_is_cpu_addr_mirror(vma) || xe_vma_is_userptr(vma))
+ else if (xe_vma_is_cpu_addr_mirror(vma)) {
+ /* CPU mirror VMAs also require SVM notifier locking. */
+ madvise_range->has_svm_userptr_vmas = true;
+ madvise_range->has_cpu_addr_mirror_vmas = true;
+ } else if (xe_vma_is_userptr(vma))
madvise_range->has_svm_userptr_vmas = true;
if (madvise_range->num_vmas == max_vmas) {
@@ -439,7 +444,13 @@ static u8 xe_zap_ptes_in_madvise_range(struct xe_vm *vm, u64 start, u64 end)
continue;
if (xe_vma_is_cpu_addr_mirror(vma)) {
- tile_mask |= xe_svm_ranges_zap_ptes_in_range(vm,
+ /*
+ * cpu_autoreset_active == true means no GPU PTEs exist
+ * yet; skip to avoid zapping non-existent mappings.
+ * Once GPU-touched, the bit clears and SVM zap applies.
+ */
+ if (!xe_vma_has_cpu_autoreset_active(vma))
+ tile_mask |= xe_svm_ranges_zap_ptes_in_range(vm,
xe_vma_start(vma),
xe_vma_end(vma));
} else {
@@ -693,6 +704,11 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
struct drm_exec exec;
int err, attr_type;
bool do_retained;
+ struct {
+ u64 start;
+ u64 end;
+ } *notifier_ranges = NULL;
+ int num_notifier_ranges = 0;
vm = xe_vm_lookup(xef, args->vm_id);
if (XE_IOCTL_DBG(xe, !vm))
@@ -815,6 +831,31 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
if (madvise_range.has_svm_userptr_vmas)
xe_svm_notifier_unlock(vm);
+ if (err)
+ goto err_fini;
+
+ if (madvise_range.has_cpu_addr_mirror_vmas) {
+ notifier_ranges = kmalloc_array(madvise_range.num_vmas,
+ sizeof(*notifier_ranges), GFP_KERNEL);
+ if (!notifier_ranges) {
+ err = -ENOMEM;
+ goto err_fini;
+ }
+ for (int i = 0; i < madvise_range.num_vmas; i++) {
+ struct xe_vma *vma = madvise_range.vmas[i];
+
+ if (!xe_vma_is_cpu_addr_mirror(vma))
+ continue;
+ if (!(vma->gpuva.flags & XE_VMA_MADV_AUTORESET))
+ continue;
+ if (!xe_vma_has_cpu_autoreset_active(vma))
+ continue;
+ notifier_ranges[num_notifier_ranges].start = xe_vma_start(vma);
+ notifier_ranges[num_notifier_ranges].end = xe_vma_end(vma);
+ num_notifier_ranges++;
+ }
+ }
+
err_fini:
if (madvise_range.has_bo_vmas)
drm_exec_fini(&exec);
@@ -826,6 +867,21 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
unlock_vm:
up_write(&vm->lock);
+ if (!err) {
+ /* notifier_ranges may be NULL here; loop and kfree are safe. */
+ for (int i = 0; i < num_notifier_ranges; i++) {
+ int ret = xe_vm_madvise_register_notifier_range(vm,
+ notifier_ranges[i].start,
+ notifier_ranges[i].end);
+ if (ret)
+ drm_warn(&vm->xe->drm,
+ "Failed to register madvise notifier [%#llx-%#llx]: %d\n",
+ notifier_ranges[i].start,
+ notifier_ranges[i].end, ret);
+ }
+ }
+ kfree(notifier_ranges);
+
/* Write retained value to user after releasing all locks */
if (!err && do_retained)
err = xe_madvise_purgeable_retained_to_user(&details);
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [RFC v2 7/7] drm/xe/svm: Correct memory attribute reset for partial unmap
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
` (5 preceding siblings ...)
2026-04-06 8:58 ` [RFC v2 6/7] drm/xe/vm: Wire MADVISE_AUTORESET notifiers into VM lifecycle Arvind Yadav
@ 2026-04-06 8:58 ` Arvind Yadav
2026-04-30 5:02 ` Matthew Brost
2026-04-06 9:04 ` ✗ CI.checkpatch: warning for drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2) Patchwork
` (3 subsequent siblings)
10 siblings, 1 reply; 17+ messages in thread
From: Arvind Yadav @ 2026-04-06 8:58 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom
From: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
When performing a partial unmap of an SVM range, the memory attributes
were being reset for the entire range instead of just the portion
being unmapped. This could lead to unintended side effects and behaviour.
Fix this by restricting the attribute reset to only the affected subrange
that is being unmapped.
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
drivers/gpu/drm/xe/xe_svm.c | 56 +++++++++++++++++++++++++++----------
drivers/gpu/drm/xe/xe_svm.h | 10 +++++++
2 files changed, 52 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
index 89668ada38ca..f533cddf4d2b 100644
--- a/drivers/gpu/drm/xe/xe_svm.c
+++ b/drivers/gpu/drm/xe/xe_svm.c
@@ -58,6 +58,8 @@ void *xe_svm_private_page_owner(struct xe_vm *vm, bool force_smem)
return force_smem ? NULL : vm->svm.peer.owner;
}
+#define XE_SVM_ATTR_RETRY_MAX 3
+
static bool xe_svm_range_in_vram(struct xe_svm_range *range)
{
/*
@@ -127,15 +129,23 @@ static void xe_svm_range_free(struct drm_gpusvm_range *range)
kfree(range);
}
+static void xe_svm_range_set_unmapped(struct xe_svm_range *range,
+ const struct mmu_notifier_range *mmu_range)
+{
+ drm_gpusvm_range_set_unmapped(&range->base, mmu_range);
+ if (range->base.pages.flags.partial_unmap) {
+ range->partial_unmap.start = max(xe_svm_range_start(range), mmu_range->start);
+ range->partial_unmap.end = min(xe_svm_range_end(range), mmu_range->end);
+ }
+}
+
static void
xe_svm_garbage_collector_add_range(struct xe_vm *vm, struct xe_svm_range *range,
const struct mmu_notifier_range *mmu_range)
{
struct xe_device *xe = vm->xe;
- range_debug(range, "GARBAGE COLLECTOR ADD");
-
- drm_gpusvm_range_set_unmapped(&range->base, mmu_range);
+ xe_svm_range_set_unmapped(range, mmu_range);
spin_lock(&vm->svm.garbage_collector.lock);
if (list_empty(&range->garbage_collector_link))
@@ -380,9 +390,10 @@ static int xe_svm_range_set_default_attr(struct xe_vm *vm, u64 start, u64 end)
static int xe_svm_garbage_collector(struct xe_vm *vm)
{
struct xe_svm_range *range;
- u64 range_start;
- u64 range_end;
+ u64 unmap_start;
+ u64 unmap_end;
int err, ret = 0;
+ int retry_count;
lockdep_assert_held_write(&vm->lock);
@@ -397,8 +408,13 @@ static int xe_svm_garbage_collector(struct xe_vm *vm)
if (!range)
break;
- range_start = xe_svm_range_start(range);
- range_end = xe_svm_range_end(range);
+ if (range->base.pages.flags.partial_unmap) {
+ unmap_start = range->partial_unmap.start;
+ unmap_end = range->partial_unmap.end;
+ } else {
+ unmap_start = xe_svm_range_start(range);
+ unmap_end = xe_svm_range_end(range);
+ }
list_del(&range->garbage_collector_link);
spin_unlock(&vm->svm.garbage_collector.lock);
@@ -412,13 +428,25 @@ static int xe_svm_garbage_collector(struct xe_vm *vm)
return err;
}
- err = xe_svm_range_set_default_attr(vm, range_start, range_end);
- if (err) {
- if (err == -EAGAIN)
- ret = -EAGAIN;
- else
- return err;
- }
+ /*
+ * Retry set_default_attr on -EAGAIN (VMA was recreated).
+ * Limit retries to prevent infinite loop.
+ */
+ retry_count = 0;
+
+ do {
+ err = xe_svm_range_set_default_attr(vm, unmap_start, unmap_end);
+ if (err == -EAGAIN && ++retry_count > XE_SVM_ATTR_RETRY_MAX) {
+ drm_err(&vm->xe->drm,
+ "SET_ATTR retry limit exceeded for [0x%llx-0x%llx]\n",
+ unmap_start, unmap_end);
+ xe_vm_kill(vm, true);
+ return -EIO;
+ }
+ } while (err == -EAGAIN);
+
+ if (err)
+ return err;
}
spin_unlock(&vm->svm.garbage_collector.lock);
diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
index b7b8eeacf196..4651e044cf53 100644
--- a/drivers/gpu/drm/xe/xe_svm.h
+++ b/drivers/gpu/drm/xe/xe_svm.h
@@ -46,6 +46,16 @@ struct xe_svm_range {
* range. Protected by GPU SVM notifier lock.
*/
u8 tile_invalidated;
+ /**
+ * @partial_unmap: Structure to hold partial unmap range info.
+ * Valid only if partial unmap is in effect.
+ */
+ struct {
+ /** @start: Start address of the partial unmap range */
+ u64 start;
+ /** @end: End address of the partial unmap range */
+ u64 end;
+ } partial_unmap;
};
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* ✗ CI.checkpatch: warning for drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2)
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
` (6 preceding siblings ...)
2026-04-06 8:58 ` [RFC v2 7/7] drm/xe/svm: Correct memory attribute reset for partial unmap Arvind Yadav
@ 2026-04-06 9:04 ` Patchwork
2026-04-06 9:06 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
10 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-04-06 9:04 UTC (permalink / raw)
To: Arvind Yadav; +Cc: intel-xe
== Series Details ==
Series: drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2)
URL : https://patchwork.freedesktop.org/series/161815/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
1f57ba1afceae32108bd24770069f764d940a0e4
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 30a917b2848a008b15b633df7972f0d102ef3b7f
Author: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Date: Mon Apr 6 14:28:30 2026 +0530
drm/xe/svm: Correct memory attribute reset for partial unmap
When performing a partial unmap of an SVM range, the memory attributes
were being reset for the entire range instead of just the portion
being unmapped. This could lead to unintended side effects and behaviour.
Fix this by restricting the attribute reset to only the affected subrange
that is being unmapped.
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
+ /mt/dim checkpatch d873f0156bd08a3031097d459e2d3604bfe1b1bf drm-intel
e7c4c655a87f drm/xe/vm: Track CPU_AUTORESET state in xe_vma
7553903d21cb drm/xe/vm: Preserve cpu_autoreset_active across GPUVA operations
43d48b4dbc79 drm/xe/svm: Clear CPU_AUTORESET_ACTIVE on first GPU fault
06d48e6a6d2a drm/xe/vm: Add madvise autoreset interval notifier worker infrastructure
c542fcf2f0ad drm/xe/vm: Deactivate madvise notifier on GPU touch
-:121: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#121: FILE: drivers/gpu/drm/xe/xe_vm_madvise.c:1268:
+ xe_vm_deactivate_madvise_notifier_for_range(vm,
+ xe_vma_start(vma),
total: 0 errors, 0 warnings, 1 checks, 106 lines checked
e2c77b8c3bf2 drm/xe/vm: Wire MADVISE_AUTORESET notifiers into VM lifecycle
30a917b2848a drm/xe/svm: Correct memory attribute reset for partial unmap
^ permalink raw reply [flat|nested] 17+ messages in thread
* ✓ CI.KUnit: success for drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2)
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
` (7 preceding siblings ...)
2026-04-06 9:04 ` ✗ CI.checkpatch: warning for drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2) Patchwork
@ 2026-04-06 9:06 ` Patchwork
2026-04-06 9:54 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-06 12:36 ` ✓ Xe.CI.FULL: " Patchwork
10 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-04-06 9:06 UTC (permalink / raw)
To: Arvind Yadav; +Cc: intel-xe
== Series Details ==
Series: drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2)
URL : https://patchwork.freedesktop.org/series/161815/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[09:04:11] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[09:04:16] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[09:04:56] Starting KUnit Kernel (1/1)...
[09:04:56] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[09:04:56] ================== guc_buf (11 subtests) ===================
[09:04:56] [PASSED] test_smallest
[09:04:56] [PASSED] test_largest
[09:04:56] [PASSED] test_granular
[09:04:56] [PASSED] test_unique
[09:04:56] [PASSED] test_overlap
[09:04:56] [PASSED] test_reusable
[09:04:56] [PASSED] test_too_big
[09:04:56] [PASSED] test_flush
[09:04:56] [PASSED] test_lookup
[09:04:56] [PASSED] test_data
[09:04:56] [PASSED] test_class
[09:04:56] ===================== [PASSED] guc_buf =====================
[09:04:56] =================== guc_dbm (7 subtests) ===================
[09:04:56] [PASSED] test_empty
[09:04:56] [PASSED] test_default
[09:04:56] ======================== test_size ========================
[09:04:56] [PASSED] 4
[09:04:56] [PASSED] 8
[09:04:56] [PASSED] 32
[09:04:56] [PASSED] 256
[09:04:56] ==================== [PASSED] test_size ====================
[09:04:56] ======================= test_reuse ========================
[09:04:56] [PASSED] 4
[09:04:56] [PASSED] 8
[09:04:56] [PASSED] 32
[09:04:56] [PASSED] 256
[09:04:56] =================== [PASSED] test_reuse ====================
[09:04:56] =================== test_range_overlap ====================
[09:04:56] [PASSED] 4
[09:04:56] [PASSED] 8
[09:04:56] [PASSED] 32
[09:04:56] [PASSED] 256
[09:04:56] =============== [PASSED] test_range_overlap ================
[09:04:56] =================== test_range_compact ====================
[09:04:56] [PASSED] 4
[09:04:56] [PASSED] 8
[09:04:56] [PASSED] 32
[09:04:56] [PASSED] 256
[09:04:56] =============== [PASSED] test_range_compact ================
[09:04:56] ==================== test_range_spare =====================
[09:04:56] [PASSED] 4
[09:04:56] [PASSED] 8
[09:04:56] [PASSED] 32
[09:04:56] [PASSED] 256
[09:04:56] ================ [PASSED] test_range_spare =================
[09:04:56] ===================== [PASSED] guc_dbm =====================
[09:04:56] =================== guc_idm (6 subtests) ===================
[09:04:56] [PASSED] bad_init
[09:04:56] [PASSED] no_init
[09:04:56] [PASSED] init_fini
[09:04:56] [PASSED] check_used
[09:04:56] [PASSED] check_quota
[09:04:56] [PASSED] check_all
[09:04:56] ===================== [PASSED] guc_idm =====================
[09:04:56] ================== no_relay (3 subtests) ===================
[09:04:56] [PASSED] xe_drops_guc2pf_if_not_ready
[09:04:56] [PASSED] xe_drops_guc2vf_if_not_ready
[09:04:56] [PASSED] xe_rejects_send_if_not_ready
[09:04:56] ==================== [PASSED] no_relay =====================
[09:04:56] ================== pf_relay (14 subtests) ==================
[09:04:56] [PASSED] pf_rejects_guc2pf_too_short
[09:04:56] [PASSED] pf_rejects_guc2pf_too_long
[09:04:56] [PASSED] pf_rejects_guc2pf_no_payload
[09:04:56] [PASSED] pf_fails_no_payload
[09:04:56] [PASSED] pf_fails_bad_origin
[09:04:56] [PASSED] pf_fails_bad_type
[09:04:56] [PASSED] pf_txn_reports_error
[09:04:56] [PASSED] pf_txn_sends_pf2guc
[09:04:56] [PASSED] pf_sends_pf2guc
[09:04:56] [SKIPPED] pf_loopback_nop
[09:04:56] [SKIPPED] pf_loopback_echo
[09:04:56] [SKIPPED] pf_loopback_fail
[09:04:56] [SKIPPED] pf_loopback_busy
[09:04:56] [SKIPPED] pf_loopback_retry
[09:04:56] ==================== [PASSED] pf_relay =====================
[09:04:56] ================== vf_relay (3 subtests) ===================
[09:04:56] [PASSED] vf_rejects_guc2vf_too_short
[09:04:56] [PASSED] vf_rejects_guc2vf_too_long
[09:04:56] [PASSED] vf_rejects_guc2vf_no_payload
[09:04:56] ==================== [PASSED] vf_relay =====================
[09:04:56] ================ pf_gt_config (9 subtests) =================
[09:04:56] [PASSED] fair_contexts_1vf
[09:04:56] [PASSED] fair_doorbells_1vf
[09:04:56] [PASSED] fair_ggtt_1vf
[09:04:56] ====================== fair_vram_1vf ======================
[09:04:56] [PASSED] 3.50 GiB
[09:04:56] [PASSED] 11.5 GiB
[09:04:56] [PASSED] 15.5 GiB
[09:04:56] [PASSED] 31.5 GiB
[09:04:56] [PASSED] 63.5 GiB
[09:04:56] [PASSED] 1.91 GiB
[09:04:56] ================== [PASSED] fair_vram_1vf ==================
[09:04:56] ================ fair_vram_1vf_admin_only =================
[09:04:56] [PASSED] 3.50 GiB
[09:04:56] [PASSED] 11.5 GiB
[09:04:56] [PASSED] 15.5 GiB
[09:04:56] [PASSED] 31.5 GiB
[09:04:56] [PASSED] 63.5 GiB
[09:04:56] [PASSED] 1.91 GiB
[09:04:56] ============ [PASSED] fair_vram_1vf_admin_only =============
[09:04:56] ====================== fair_contexts ======================
[09:04:56] [PASSED] 1 VF
[09:04:56] [PASSED] 2 VFs
[09:04:56] [PASSED] 3 VFs
[09:04:56] [PASSED] 4 VFs
[09:04:56] [PASSED] 5 VFs
[09:04:56] [PASSED] 6 VFs
[09:04:56] [PASSED] 7 VFs
[09:04:56] [PASSED] 8 VFs
[09:04:56] [PASSED] 9 VFs
[09:04:56] [PASSED] 10 VFs
[09:04:56] [PASSED] 11 VFs
[09:04:56] [PASSED] 12 VFs
[09:04:56] [PASSED] 13 VFs
[09:04:56] [PASSED] 14 VFs
[09:04:56] [PASSED] 15 VFs
[09:04:56] [PASSED] 16 VFs
[09:04:56] [PASSED] 17 VFs
[09:04:57] [PASSED] 18 VFs
[09:04:57] [PASSED] 19 VFs
[09:04:57] [PASSED] 20 VFs
[09:04:57] [PASSED] 21 VFs
[09:04:57] [PASSED] 22 VFs
[09:04:57] [PASSED] 23 VFs
[09:04:57] [PASSED] 24 VFs
[09:04:57] [PASSED] 25 VFs
[09:04:57] [PASSED] 26 VFs
[09:04:57] [PASSED] 27 VFs
[09:04:57] [PASSED] 28 VFs
[09:04:57] [PASSED] 29 VFs
[09:04:57] [PASSED] 30 VFs
[09:04:57] [PASSED] 31 VFs
[09:04:57] [PASSED] 32 VFs
[09:04:57] [PASSED] 33 VFs
[09:04:57] [PASSED] 34 VFs
[09:04:57] [PASSED] 35 VFs
[09:04:57] [PASSED] 36 VFs
[09:04:57] [PASSED] 37 VFs
[09:04:57] [PASSED] 38 VFs
[09:04:57] [PASSED] 39 VFs
[09:04:57] [PASSED] 40 VFs
[09:04:57] [PASSED] 41 VFs
[09:04:57] [PASSED] 42 VFs
[09:04:57] [PASSED] 43 VFs
[09:04:57] [PASSED] 44 VFs
[09:04:57] [PASSED] 45 VFs
[09:04:57] [PASSED] 46 VFs
[09:04:57] [PASSED] 47 VFs
[09:04:57] [PASSED] 48 VFs
[09:04:57] [PASSED] 49 VFs
[09:04:57] [PASSED] 50 VFs
[09:04:57] [PASSED] 51 VFs
[09:04:57] [PASSED] 52 VFs
[09:04:57] [PASSED] 53 VFs
[09:04:57] [PASSED] 54 VFs
[09:04:57] [PASSED] 55 VFs
[09:04:57] [PASSED] 56 VFs
[09:04:57] [PASSED] 57 VFs
[09:04:57] [PASSED] 58 VFs
[09:04:57] [PASSED] 59 VFs
[09:04:57] [PASSED] 60 VFs
[09:04:57] [PASSED] 61 VFs
[09:04:57] [PASSED] 62 VFs
[09:04:57] [PASSED] 63 VFs
[09:04:57] ================== [PASSED] fair_contexts ==================
[09:04:57] ===================== fair_doorbells ======================
[09:04:57] [PASSED] 1 VF
[09:04:57] [PASSED] 2 VFs
[09:04:57] [PASSED] 3 VFs
[09:04:57] [PASSED] 4 VFs
[09:04:57] [PASSED] 5 VFs
[09:04:57] [PASSED] 6 VFs
[09:04:57] [PASSED] 7 VFs
[09:04:57] [PASSED] 8 VFs
[09:04:57] [PASSED] 9 VFs
[09:04:57] [PASSED] 10 VFs
[09:04:57] [PASSED] 11 VFs
[09:04:57] [PASSED] 12 VFs
[09:04:57] [PASSED] 13 VFs
[09:04:57] [PASSED] 14 VFs
[09:04:57] [PASSED] 15 VFs
[09:04:57] [PASSED] 16 VFs
[09:04:57] [PASSED] 17 VFs
[09:04:57] [PASSED] 18 VFs
[09:04:57] [PASSED] 19 VFs
[09:04:57] [PASSED] 20 VFs
[09:04:57] [PASSED] 21 VFs
[09:04:57] [PASSED] 22 VFs
[09:04:57] [PASSED] 23 VFs
[09:04:57] [PASSED] 24 VFs
[09:04:57] [PASSED] 25 VFs
[09:04:57] [PASSED] 26 VFs
[09:04:57] [PASSED] 27 VFs
[09:04:57] [PASSED] 28 VFs
[09:04:57] [PASSED] 29 VFs
[09:04:57] [PASSED] 30 VFs
[09:04:57] [PASSED] 31 VFs
[09:04:57] [PASSED] 32 VFs
[09:04:57] [PASSED] 33 VFs
[09:04:57] [PASSED] 34 VFs
[09:04:57] [PASSED] 35 VFs
[09:04:57] [PASSED] 36 VFs
[09:04:57] [PASSED] 37 VFs
[09:04:57] [PASSED] 38 VFs
[09:04:57] [PASSED] 39 VFs
[09:04:57] [PASSED] 40 VFs
[09:04:57] [PASSED] 41 VFs
[09:04:57] [PASSED] 42 VFs
[09:04:57] [PASSED] 43 VFs
[09:04:57] [PASSED] 44 VFs
[09:04:57] [PASSED] 45 VFs
[09:04:57] [PASSED] 46 VFs
[09:04:57] [PASSED] 47 VFs
[09:04:57] [PASSED] 48 VFs
[09:04:57] [PASSED] 49 VFs
[09:04:57] [PASSED] 50 VFs
[09:04:57] [PASSED] 51 VFs
[09:04:57] [PASSED] 52 VFs
[09:04:57] [PASSED] 53 VFs
[09:04:57] [PASSED] 54 VFs
[09:04:57] [PASSED] 55 VFs
[09:04:57] [PASSED] 56 VFs
[09:04:57] [PASSED] 57 VFs
[09:04:57] [PASSED] 58 VFs
[09:04:57] [PASSED] 59 VFs
[09:04:57] [PASSED] 60 VFs
[09:04:57] [PASSED] 61 VFs
[09:04:57] [PASSED] 62 VFs
[09:04:57] [PASSED] 63 VFs
[09:04:57] ================= [PASSED] fair_doorbells ==================
[09:04:57] ======================== fair_ggtt ========================
[09:04:57] [PASSED] 1 VF
[09:04:57] [PASSED] 2 VFs
[09:04:57] [PASSED] 3 VFs
[09:04:57] [PASSED] 4 VFs
[09:04:57] [PASSED] 5 VFs
[09:04:57] [PASSED] 6 VFs
[09:04:57] [PASSED] 7 VFs
[09:04:57] [PASSED] 8 VFs
[09:04:57] [PASSED] 9 VFs
[09:04:57] [PASSED] 10 VFs
[09:04:57] [PASSED] 11 VFs
[09:04:57] [PASSED] 12 VFs
[09:04:57] [PASSED] 13 VFs
[09:04:57] [PASSED] 14 VFs
[09:04:57] [PASSED] 15 VFs
[09:04:57] [PASSED] 16 VFs
[09:04:57] [PASSED] 17 VFs
[09:04:57] [PASSED] 18 VFs
[09:04:57] [PASSED] 19 VFs
[09:04:57] [PASSED] 20 VFs
[09:04:57] [PASSED] 21 VFs
[09:04:57] [PASSED] 22 VFs
[09:04:57] [PASSED] 23 VFs
[09:04:57] [PASSED] 24 VFs
[09:04:57] [PASSED] 25 VFs
[09:04:57] [PASSED] 26 VFs
[09:04:57] [PASSED] 27 VFs
[09:04:57] [PASSED] 28 VFs
[09:04:57] [PASSED] 29 VFs
[09:04:57] [PASSED] 30 VFs
[09:04:57] [PASSED] 31 VFs
[09:04:57] [PASSED] 32 VFs
[09:04:57] [PASSED] 33 VFs
[09:04:57] [PASSED] 34 VFs
[09:04:57] [PASSED] 35 VFs
[09:04:57] [PASSED] 36 VFs
[09:04:57] [PASSED] 37 VFs
[09:04:57] [PASSED] 38 VFs
[09:04:57] [PASSED] 39 VFs
[09:04:57] [PASSED] 40 VFs
[09:04:57] [PASSED] 41 VFs
[09:04:57] [PASSED] 42 VFs
[09:04:57] [PASSED] 43 VFs
[09:04:57] [PASSED] 44 VFs
[09:04:57] [PASSED] 45 VFs
[09:04:57] [PASSED] 46 VFs
[09:04:57] [PASSED] 47 VFs
[09:04:57] [PASSED] 48 VFs
[09:04:57] [PASSED] 49 VFs
[09:04:57] [PASSED] 50 VFs
[09:04:57] [PASSED] 51 VFs
[09:04:57] [PASSED] 52 VFs
[09:04:57] [PASSED] 53 VFs
[09:04:57] [PASSED] 54 VFs
[09:04:57] [PASSED] 55 VFs
[09:04:57] [PASSED] 56 VFs
[09:04:57] [PASSED] 57 VFs
[09:04:57] [PASSED] 58 VFs
[09:04:57] [PASSED] 59 VFs
[09:04:57] [PASSED] 60 VFs
[09:04:57] [PASSED] 61 VFs
[09:04:57] [PASSED] 62 VFs
[09:04:57] [PASSED] 63 VFs
[09:04:57] ==================== [PASSED] fair_ggtt ====================
[09:04:57] ======================== fair_vram ========================
[09:04:57] [PASSED] 1 VF
[09:04:57] [PASSED] 2 VFs
[09:04:57] [PASSED] 3 VFs
[09:04:57] [PASSED] 4 VFs
[09:04:57] [PASSED] 5 VFs
[09:04:57] [PASSED] 6 VFs
[09:04:57] [PASSED] 7 VFs
[09:04:57] [PASSED] 8 VFs
[09:04:57] [PASSED] 9 VFs
[09:04:57] [PASSED] 10 VFs
[09:04:57] [PASSED] 11 VFs
[09:04:57] [PASSED] 12 VFs
[09:04:57] [PASSED] 13 VFs
[09:04:57] [PASSED] 14 VFs
[09:04:57] [PASSED] 15 VFs
[09:04:57] [PASSED] 16 VFs
[09:04:57] [PASSED] 17 VFs
[09:04:57] [PASSED] 18 VFs
[09:04:57] [PASSED] 19 VFs
[09:04:57] [PASSED] 20 VFs
[09:04:57] [PASSED] 21 VFs
[09:04:57] [PASSED] 22 VFs
[09:04:57] [PASSED] 23 VFs
[09:04:57] [PASSED] 24 VFs
[09:04:57] [PASSED] 25 VFs
[09:04:57] [PASSED] 26 VFs
[09:04:57] [PASSED] 27 VFs
[09:04:57] [PASSED] 28 VFs
[09:04:57] [PASSED] 29 VFs
[09:04:57] [PASSED] 30 VFs
[09:04:57] [PASSED] 31 VFs
[09:04:57] [PASSED] 32 VFs
[09:04:57] [PASSED] 33 VFs
[09:04:57] [PASSED] 34 VFs
[09:04:57] [PASSED] 35 VFs
[09:04:57] [PASSED] 36 VFs
[09:04:57] [PASSED] 37 VFs
[09:04:57] [PASSED] 38 VFs
[09:04:57] [PASSED] 39 VFs
[09:04:57] [PASSED] 40 VFs
[09:04:57] [PASSED] 41 VFs
[09:04:57] [PASSED] 42 VFs
[09:04:57] [PASSED] 43 VFs
[09:04:57] [PASSED] 44 VFs
[09:04:57] [PASSED] 45 VFs
[09:04:57] [PASSED] 46 VFs
[09:04:57] [PASSED] 47 VFs
[09:04:57] [PASSED] 48 VFs
[09:04:57] [PASSED] 49 VFs
[09:04:57] [PASSED] 50 VFs
[09:04:57] [PASSED] 51 VFs
[09:04:57] [PASSED] 52 VFs
[09:04:57] [PASSED] 53 VFs
[09:04:57] [PASSED] 54 VFs
[09:04:57] [PASSED] 55 VFs
[09:04:57] [PASSED] 56 VFs
[09:04:57] [PASSED] 57 VFs
[09:04:57] [PASSED] 58 VFs
[09:04:57] [PASSED] 59 VFs
[09:04:57] [PASSED] 60 VFs
[09:04:57] [PASSED] 61 VFs
[09:04:57] [PASSED] 62 VFs
[09:04:57] [PASSED] 63 VFs
[09:04:57] ==================== [PASSED] fair_vram ====================
[09:04:57] ================== [PASSED] pf_gt_config ===================
[09:04:57] ===================== lmtt (1 subtest) =====================
[09:04:57] ======================== test_ops =========================
[09:04:57] [PASSED] 2-level
[09:04:57] [PASSED] multi-level
[09:04:57] ==================== [PASSED] test_ops =====================
[09:04:57] ====================== [PASSED] lmtt =======================
[09:04:57] ================= pf_service (11 subtests) =================
[09:04:57] [PASSED] pf_negotiate_any
[09:04:57] [PASSED] pf_negotiate_base_match
[09:04:57] [PASSED] pf_negotiate_base_newer
[09:04:57] [PASSED] pf_negotiate_base_next
[09:04:57] [SKIPPED] pf_negotiate_base_older
[09:04:57] [PASSED] pf_negotiate_base_prev
[09:04:57] [PASSED] pf_negotiate_latest_match
[09:04:57] [PASSED] pf_negotiate_latest_newer
[09:04:57] [PASSED] pf_negotiate_latest_next
[09:04:57] [SKIPPED] pf_negotiate_latest_older
[09:04:57] [SKIPPED] pf_negotiate_latest_prev
[09:04:57] =================== [PASSED] pf_service ====================
[09:04:57] ================= xe_guc_g2g (2 subtests) ==================
[09:04:57] ============== xe_live_guc_g2g_kunit_default ==============
[09:04:57] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[09:04:57] ============== xe_live_guc_g2g_kunit_allmem ===============
[09:04:57] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[09:04:57] =================== [SKIPPED] xe_guc_g2g ===================
[09:04:57] =================== xe_mocs (2 subtests) ===================
[09:04:57] ================ xe_live_mocs_kernel_kunit ================
[09:04:57] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[09:04:57] ================ xe_live_mocs_reset_kunit =================
[09:04:57] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[09:04:57] ==================== [SKIPPED] xe_mocs =====================
[09:04:57] ================= xe_migrate (2 subtests) ==================
[09:04:57] ================= xe_migrate_sanity_kunit =================
[09:04:57] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[09:04:57] ================== xe_validate_ccs_kunit ==================
[09:04:57] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[09:04:57] =================== [SKIPPED] xe_migrate ===================
[09:04:57] ================== xe_dma_buf (1 subtest) ==================
[09:04:57] ==================== xe_dma_buf_kunit =====================
[09:04:57] ================ [SKIPPED] xe_dma_buf_kunit ================
[09:04:57] =================== [SKIPPED] xe_dma_buf ===================
[09:04:57] ================= xe_bo_shrink (1 subtest) =================
[09:04:57] =================== xe_bo_shrink_kunit ====================
[09:04:57] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[09:04:57] ================== [SKIPPED] xe_bo_shrink ==================
[09:04:57] ==================== xe_bo (2 subtests) ====================
[09:04:57] ================== xe_ccs_migrate_kunit ===================
[09:04:57] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[09:04:57] ==================== xe_bo_evict_kunit ====================
[09:04:57] =============== [SKIPPED] xe_bo_evict_kunit ================
[09:04:57] ===================== [SKIPPED] xe_bo ======================
[09:04:57] ==================== args (13 subtests) ====================
[09:04:57] [PASSED] count_args_test
[09:04:57] [PASSED] call_args_example
[09:04:57] [PASSED] call_args_test
[09:04:57] [PASSED] drop_first_arg_example
[09:04:57] [PASSED] drop_first_arg_test
[09:04:57] [PASSED] first_arg_example
[09:04:57] [PASSED] first_arg_test
[09:04:57] [PASSED] last_arg_example
[09:04:57] [PASSED] last_arg_test
[09:04:57] [PASSED] pick_arg_example
[09:04:57] [PASSED] if_args_example
[09:04:57] [PASSED] if_args_test
[09:04:57] [PASSED] sep_comma_example
[09:04:57] ====================== [PASSED] args =======================
[09:04:57] =================== xe_pci (3 subtests) ====================
[09:04:57] ==================== check_graphics_ip ====================
[09:04:57] [PASSED] 12.00 Xe_LP
[09:04:57] [PASSED] 12.10 Xe_LP+
[09:04:57] [PASSED] 12.55 Xe_HPG
[09:04:57] [PASSED] 12.60 Xe_HPC
[09:04:57] [PASSED] 12.70 Xe_LPG
[09:04:57] [PASSED] 12.71 Xe_LPG
[09:04:57] [PASSED] 12.74 Xe_LPG+
[09:04:57] [PASSED] 20.01 Xe2_HPG
[09:04:57] [PASSED] 20.02 Xe2_HPG
[09:04:57] [PASSED] 20.04 Xe2_LPG
[09:04:57] [PASSED] 30.00 Xe3_LPG
[09:04:57] [PASSED] 30.01 Xe3_LPG
[09:04:57] [PASSED] 30.03 Xe3_LPG
[09:04:57] [PASSED] 30.04 Xe3_LPG
[09:04:57] [PASSED] 30.05 Xe3_LPG
[09:04:57] [PASSED] 35.10 Xe3p_LPG
[09:04:57] [PASSED] 35.11 Xe3p_XPC
[09:04:57] ================ [PASSED] check_graphics_ip ================
[09:04:57] ===================== check_media_ip ======================
[09:04:57] [PASSED] 12.00 Xe_M
[09:04:57] [PASSED] 12.55 Xe_HPM
[09:04:57] [PASSED] 13.00 Xe_LPM+
[09:04:57] [PASSED] 13.01 Xe2_HPM
[09:04:57] [PASSED] 20.00 Xe2_LPM
[09:04:57] [PASSED] 30.00 Xe3_LPM
[09:04:57] [PASSED] 30.02 Xe3_LPM
[09:04:57] [PASSED] 35.00 Xe3p_LPM
[09:04:57] [PASSED] 35.03 Xe3p_HPM
[09:04:57] ================= [PASSED] check_media_ip ==================
[09:04:57] =================== check_platform_desc ===================
[09:04:57] [PASSED] 0x9A60 (TIGERLAKE)
[09:04:57] [PASSED] 0x9A68 (TIGERLAKE)
[09:04:57] [PASSED] 0x9A70 (TIGERLAKE)
[09:04:57] [PASSED] 0x9A40 (TIGERLAKE)
[09:04:57] [PASSED] 0x9A49 (TIGERLAKE)
[09:04:57] [PASSED] 0x9A59 (TIGERLAKE)
[09:04:57] [PASSED] 0x9A78 (TIGERLAKE)
[09:04:57] [PASSED] 0x9AC0 (TIGERLAKE)
[09:04:57] [PASSED] 0x9AC9 (TIGERLAKE)
[09:04:57] [PASSED] 0x9AD9 (TIGERLAKE)
[09:04:57] [PASSED] 0x9AF8 (TIGERLAKE)
[09:04:57] [PASSED] 0x4C80 (ROCKETLAKE)
[09:04:57] [PASSED] 0x4C8A (ROCKETLAKE)
[09:04:57] [PASSED] 0x4C8B (ROCKETLAKE)
[09:04:57] [PASSED] 0x4C8C (ROCKETLAKE)
[09:04:57] [PASSED] 0x4C90 (ROCKETLAKE)
[09:04:57] [PASSED] 0x4C9A (ROCKETLAKE)
[09:04:57] [PASSED] 0x4680 (ALDERLAKE_S)
[09:04:57] [PASSED] 0x4682 (ALDERLAKE_S)
[09:04:57] [PASSED] 0x4688 (ALDERLAKE_S)
[09:04:57] [PASSED] 0x468A (ALDERLAKE_S)
[09:04:57] [PASSED] 0x468B (ALDERLAKE_S)
[09:04:57] [PASSED] 0x4690 (ALDERLAKE_S)
[09:04:57] [PASSED] 0x4692 (ALDERLAKE_S)
[09:04:57] [PASSED] 0x4693 (ALDERLAKE_S)
[09:04:57] [PASSED] 0x46A0 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46A1 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46A2 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46A3 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46A6 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46A8 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46AA (ALDERLAKE_P)
[09:04:57] [PASSED] 0x462A (ALDERLAKE_P)
[09:04:57] [PASSED] 0x4626 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x4628 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46B0 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46B1 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46B2 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46B3 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46C0 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46C1 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46C2 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46C3 (ALDERLAKE_P)
[09:04:57] [PASSED] 0x46D0 (ALDERLAKE_N)
[09:04:57] [PASSED] 0x46D1 (ALDERLAKE_N)
[09:04:57] [PASSED] 0x46D2 (ALDERLAKE_N)
[09:04:57] [PASSED] 0x46D3 (ALDERLAKE_N)
[09:04:57] [PASSED] 0x46D4 (ALDERLAKE_N)
[09:04:57] [PASSED] 0xA721 (ALDERLAKE_P)
[09:04:57] [PASSED] 0xA7A1 (ALDERLAKE_P)
[09:04:57] [PASSED] 0xA7A9 (ALDERLAKE_P)
[09:04:57] [PASSED] 0xA7AC (ALDERLAKE_P)
[09:04:57] [PASSED] 0xA7AD (ALDERLAKE_P)
[09:04:57] [PASSED] 0xA720 (ALDERLAKE_P)
[09:04:57] [PASSED] 0xA7A0 (ALDERLAKE_P)
[09:04:57] [PASSED] 0xA7A8 (ALDERLAKE_P)
[09:04:57] [PASSED] 0xA7AA (ALDERLAKE_P)
[09:04:57] [PASSED] 0xA7AB (ALDERLAKE_P)
[09:04:57] [PASSED] 0xA780 (ALDERLAKE_S)
[09:04:57] [PASSED] 0xA781 (ALDERLAKE_S)
[09:04:57] [PASSED] 0xA782 (ALDERLAKE_S)
[09:04:57] [PASSED] 0xA783 (ALDERLAKE_S)
[09:04:57] [PASSED] 0xA788 (ALDERLAKE_S)
[09:04:57] [PASSED] 0xA789 (ALDERLAKE_S)
[09:04:57] [PASSED] 0xA78A (ALDERLAKE_S)
[09:04:57] [PASSED] 0xA78B (ALDERLAKE_S)
[09:04:57] [PASSED] 0x4905 (DG1)
[09:04:57] [PASSED] 0x4906 (DG1)
[09:04:57] [PASSED] 0x4907 (DG1)
[09:04:57] [PASSED] 0x4908 (DG1)
[09:04:57] [PASSED] 0x4909 (DG1)
[09:04:57] [PASSED] 0x56C0 (DG2)
[09:04:57] [PASSED] 0x56C2 (DG2)
[09:04:57] [PASSED] 0x56C1 (DG2)
[09:04:57] [PASSED] 0x7D51 (METEORLAKE)
[09:04:57] [PASSED] 0x7DD1 (METEORLAKE)
[09:04:57] [PASSED] 0x7D41 (METEORLAKE)
[09:04:57] [PASSED] 0x7D67 (METEORLAKE)
[09:04:57] [PASSED] 0xB640 (METEORLAKE)
[09:04:57] [PASSED] 0x56A0 (DG2)
[09:04:57] [PASSED] 0x56A1 (DG2)
[09:04:57] [PASSED] 0x56A2 (DG2)
[09:04:57] [PASSED] 0x56BE (DG2)
[09:04:57] [PASSED] 0x56BF (DG2)
[09:04:57] [PASSED] 0x5690 (DG2)
[09:04:57] [PASSED] 0x5691 (DG2)
[09:04:57] [PASSED] 0x5692 (DG2)
[09:04:57] [PASSED] 0x56A5 (DG2)
[09:04:57] [PASSED] 0x56A6 (DG2)
[09:04:57] [PASSED] 0x56B0 (DG2)
[09:04:57] [PASSED] 0x56B1 (DG2)
[09:04:57] [PASSED] 0x56BA (DG2)
[09:04:57] [PASSED] 0x56BB (DG2)
[09:04:57] [PASSED] 0x56BC (DG2)
[09:04:57] [PASSED] 0x56BD (DG2)
[09:04:57] [PASSED] 0x5693 (DG2)
[09:04:57] [PASSED] 0x5694 (DG2)
[09:04:57] [PASSED] 0x5695 (DG2)
[09:04:57] [PASSED] 0x56A3 (DG2)
[09:04:57] [PASSED] 0x56A4 (DG2)
[09:04:57] [PASSED] 0x56B2 (DG2)
[09:04:57] [PASSED] 0x56B3 (DG2)
[09:04:57] [PASSED] 0x5696 (DG2)
[09:04:57] [PASSED] 0x5697 (DG2)
[09:04:57] [PASSED] 0xB69 (PVC)
[09:04:57] [PASSED] 0xB6E (PVC)
[09:04:57] [PASSED] 0xBD4 (PVC)
[09:04:57] [PASSED] 0xBD5 (PVC)
[09:04:57] [PASSED] 0xBD6 (PVC)
[09:04:57] [PASSED] 0xBD7 (PVC)
[09:04:57] [PASSED] 0xBD8 (PVC)
[09:04:57] [PASSED] 0xBD9 (PVC)
[09:04:57] [PASSED] 0xBDA (PVC)
[09:04:57] [PASSED] 0xBDB (PVC)
[09:04:57] [PASSED] 0xBE0 (PVC)
[09:04:57] [PASSED] 0xBE1 (PVC)
[09:04:57] [PASSED] 0xBE5 (PVC)
[09:04:57] [PASSED] 0x7D40 (METEORLAKE)
[09:04:57] [PASSED] 0x7D45 (METEORLAKE)
[09:04:57] [PASSED] 0x7D55 (METEORLAKE)
[09:04:57] [PASSED] 0x7D60 (METEORLAKE)
[09:04:57] [PASSED] 0x7DD5 (METEORLAKE)
[09:04:57] [PASSED] 0x6420 (LUNARLAKE)
[09:04:57] [PASSED] 0x64A0 (LUNARLAKE)
[09:04:57] [PASSED] 0x64B0 (LUNARLAKE)
[09:04:57] [PASSED] 0xE202 (BATTLEMAGE)
[09:04:57] [PASSED] 0xE209 (BATTLEMAGE)
[09:04:57] [PASSED] 0xE20B (BATTLEMAGE)
[09:04:57] [PASSED] 0xE20C (BATTLEMAGE)
[09:04:57] [PASSED] 0xE20D (BATTLEMAGE)
[09:04:57] [PASSED] 0xE210 (BATTLEMAGE)
[09:04:57] [PASSED] 0xE211 (BATTLEMAGE)
[09:04:57] [PASSED] 0xE212 (BATTLEMAGE)
[09:04:57] [PASSED] 0xE216 (BATTLEMAGE)
[09:04:57] [PASSED] 0xE220 (BATTLEMAGE)
[09:04:57] [PASSED] 0xE221 (BATTLEMAGE)
[09:04:57] [PASSED] 0xE222 (BATTLEMAGE)
[09:04:57] [PASSED] 0xE223 (BATTLEMAGE)
[09:04:57] [PASSED] 0xB080 (PANTHERLAKE)
[09:04:57] [PASSED] 0xB081 (PANTHERLAKE)
[09:04:57] [PASSED] 0xB082 (PANTHERLAKE)
[09:04:57] [PASSED] 0xB083 (PANTHERLAKE)
[09:04:57] [PASSED] 0xB084 (PANTHERLAKE)
[09:04:57] [PASSED] 0xB085 (PANTHERLAKE)
[09:04:57] [PASSED] 0xB086 (PANTHERLAKE)
[09:04:57] [PASSED] 0xB087 (PANTHERLAKE)
[09:04:57] [PASSED] 0xB08F (PANTHERLAKE)
[09:04:57] [PASSED] 0xB090 (PANTHERLAKE)
[09:04:57] [PASSED] 0xB0A0 (PANTHERLAKE)
[09:04:57] [PASSED] 0xB0B0 (PANTHERLAKE)
[09:04:57] [PASSED] 0xFD80 (PANTHERLAKE)
[09:04:57] [PASSED] 0xFD81 (PANTHERLAKE)
[09:04:57] [PASSED] 0xD740 (NOVALAKE_S)
[09:04:57] [PASSED] 0xD741 (NOVALAKE_S)
[09:04:57] [PASSED] 0xD742 (NOVALAKE_S)
[09:04:57] [PASSED] 0xD743 (NOVALAKE_S)
[09:04:57] [PASSED] 0xD744 (NOVALAKE_S)
[09:04:57] [PASSED] 0xD745 (NOVALAKE_S)
[09:04:57] [PASSED] 0x674C (CRESCENTISLAND)
[09:04:57] [PASSED] 0xD750 (NOVALAKE_P)
[09:04:57] [PASSED] 0xD751 (NOVALAKE_P)
[09:04:57] [PASSED] 0xD752 (NOVALAKE_P)
[09:04:57] [PASSED] 0xD753 (NOVALAKE_P)
[09:04:57] [PASSED] 0xD754 (NOVALAKE_P)
[09:04:57] [PASSED] 0xD755 (NOVALAKE_P)
[09:04:57] [PASSED] 0xD756 (NOVALAKE_P)
[09:04:57] [PASSED] 0xD757 (NOVALAKE_P)
[09:04:57] [PASSED] 0xD75F (NOVALAKE_P)
[09:04:57] =============== [PASSED] check_platform_desc ===============
[09:04:57] ===================== [PASSED] xe_pci ======================
[09:04:57] =================== xe_rtp (2 subtests) ====================
[09:04:57] =============== xe_rtp_process_to_sr_tests ================
[09:04:57] [PASSED] coalesce-same-reg
[09:04:57] [PASSED] no-match-no-add
[09:04:57] [PASSED] match-or
[09:04:57] [PASSED] match-or-xfail
[09:04:57] [PASSED] no-match-no-add-multiple-rules
[09:04:57] [PASSED] two-regs-two-entries
[09:04:57] [PASSED] clr-one-set-other
[09:04:57] [PASSED] set-field
[09:04:57] [PASSED] conflict-duplicate
stty: 'standard input': Inappropriate ioctl for device
[09:04:57] [PASSED] conflict-not-disjoint
[09:04:57] [PASSED] conflict-reg-type
[09:04:57] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[09:04:57] ================== xe_rtp_process_tests ===================
[09:04:57] [PASSED] active1
[09:04:57] [PASSED] active2
[09:04:57] [PASSED] active-inactive
[09:04:57] [PASSED] inactive-active
[09:04:57] [PASSED] inactive-1st_or_active-inactive
[09:04:57] [PASSED] inactive-2nd_or_active-inactive
[09:04:57] [PASSED] inactive-last_or_active-inactive
[09:04:57] [PASSED] inactive-no_or_active-inactive
[09:04:57] ============== [PASSED] xe_rtp_process_tests ===============
[09:04:57] ===================== [PASSED] xe_rtp ======================
[09:04:57] ==================== xe_wa (1 subtest) =====================
[09:04:57] ======================== xe_wa_gt =========================
[09:04:57] [PASSED] TIGERLAKE B0
[09:04:57] [PASSED] DG1 A0
[09:04:57] [PASSED] DG1 B0
[09:04:57] [PASSED] ALDERLAKE_S A0
[09:04:57] [PASSED] ALDERLAKE_S B0
[09:04:57] [PASSED] ALDERLAKE_S C0
[09:04:57] [PASSED] ALDERLAKE_S D0
[09:04:57] [PASSED] ALDERLAKE_P A0
[09:04:57] [PASSED] ALDERLAKE_P B0
[09:04:57] [PASSED] ALDERLAKE_P C0
[09:04:57] [PASSED] ALDERLAKE_S RPLS D0
[09:04:57] [PASSED] ALDERLAKE_P RPLU E0
[09:04:57] [PASSED] DG2 G10 C0
[09:04:57] [PASSED] DG2 G11 B1
[09:04:57] [PASSED] DG2 G12 A1
[09:04:57] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[09:04:57] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[09:04:57] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[09:04:57] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[09:04:57] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[09:04:57] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[09:04:57] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[09:04:57] ==================== [PASSED] xe_wa_gt =====================
[09:04:57] ====================== [PASSED] xe_wa ======================
[09:04:57] ============================================================
[09:04:57] Testing complete. Ran 597 tests: passed: 579, skipped: 18
[09:04:57] Elapsed time: 45.619s total, 4.202s configuring, 40.346s building, 1.054s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[09:04:57] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[09:05:00] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[09:05:48] Starting KUnit Kernel (1/1)...
[09:05:48] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[09:05:48] ============ drm_test_pick_cmdline (2 subtests) ============
[09:05:48] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[09:05:48] =============== drm_test_pick_cmdline_named ===============
[09:05:48] [PASSED] NTSC
[09:05:48] [PASSED] NTSC-J
[09:05:48] [PASSED] PAL
[09:05:48] [PASSED] PAL-M
[09:05:48] =========== [PASSED] drm_test_pick_cmdline_named ===========
[09:05:48] ============== [PASSED] drm_test_pick_cmdline ==============
[09:05:48] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[09:05:48] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[09:05:48] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[09:05:48] =========== drm_validate_clone_mode (2 subtests) ===========
[09:05:48] ============== drm_test_check_in_clone_mode ===============
[09:05:48] [PASSED] in_clone_mode
[09:05:48] [PASSED] not_in_clone_mode
[09:05:48] ========== [PASSED] drm_test_check_in_clone_mode ===========
[09:05:48] =============== drm_test_check_valid_clones ===============
[09:05:48] [PASSED] not_in_clone_mode
[09:05:48] [PASSED] valid_clone
[09:05:48] [PASSED] invalid_clone
[09:05:48] =========== [PASSED] drm_test_check_valid_clones ===========
[09:05:48] ============= [PASSED] drm_validate_clone_mode =============
[09:05:48] ============= drm_validate_modeset (1 subtest) =============
[09:05:48] [PASSED] drm_test_check_connector_changed_modeset
[09:05:48] ============== [PASSED] drm_validate_modeset ===============
[09:05:48] ====== drm_test_bridge_get_current_state (2 subtests) ======
[09:05:48] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[09:05:48] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[09:05:48] ======== [PASSED] drm_test_bridge_get_current_state ========
[09:05:48] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[09:05:48] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[09:05:48] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[09:05:48] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[09:05:48] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[09:05:48] ============== drm_bridge_alloc (2 subtests) ===============
[09:05:48] [PASSED] drm_test_drm_bridge_alloc_basic
[09:05:48] [PASSED] drm_test_drm_bridge_alloc_get_put
[09:05:48] ================ [PASSED] drm_bridge_alloc =================
[09:05:48] ============= drm_cmdline_parser (40 subtests) =============
[09:05:48] [PASSED] drm_test_cmdline_force_d_only
[09:05:48] [PASSED] drm_test_cmdline_force_D_only_dvi
[09:05:48] [PASSED] drm_test_cmdline_force_D_only_hdmi
[09:05:48] [PASSED] drm_test_cmdline_force_D_only_not_digital
[09:05:48] [PASSED] drm_test_cmdline_force_e_only
[09:05:48] [PASSED] drm_test_cmdline_res
[09:05:48] [PASSED] drm_test_cmdline_res_vesa
[09:05:48] [PASSED] drm_test_cmdline_res_vesa_rblank
[09:05:48] [PASSED] drm_test_cmdline_res_rblank
[09:05:48] [PASSED] drm_test_cmdline_res_bpp
[09:05:48] [PASSED] drm_test_cmdline_res_refresh
[09:05:48] [PASSED] drm_test_cmdline_res_bpp_refresh
[09:05:48] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[09:05:48] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[09:05:48] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[09:05:48] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[09:05:48] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[09:05:48] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[09:05:48] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[09:05:48] [PASSED] drm_test_cmdline_res_margins_force_on
[09:05:48] [PASSED] drm_test_cmdline_res_vesa_margins
[09:05:48] [PASSED] drm_test_cmdline_name
[09:05:48] [PASSED] drm_test_cmdline_name_bpp
[09:05:48] [PASSED] drm_test_cmdline_name_option
[09:05:48] [PASSED] drm_test_cmdline_name_bpp_option
[09:05:48] [PASSED] drm_test_cmdline_rotate_0
[09:05:48] [PASSED] drm_test_cmdline_rotate_90
[09:05:48] [PASSED] drm_test_cmdline_rotate_180
[09:05:48] [PASSED] drm_test_cmdline_rotate_270
[09:05:48] [PASSED] drm_test_cmdline_hmirror
[09:05:48] [PASSED] drm_test_cmdline_vmirror
[09:05:48] [PASSED] drm_test_cmdline_margin_options
[09:05:48] [PASSED] drm_test_cmdline_multiple_options
[09:05:48] [PASSED] drm_test_cmdline_bpp_extra_and_option
[09:05:48] [PASSED] drm_test_cmdline_extra_and_option
[09:05:48] [PASSED] drm_test_cmdline_freestanding_options
[09:05:48] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[09:05:48] [PASSED] drm_test_cmdline_panel_orientation
[09:05:48] ================ drm_test_cmdline_invalid =================
[09:05:48] [PASSED] margin_only
[09:05:48] [PASSED] interlace_only
[09:05:48] [PASSED] res_missing_x
[09:05:48] [PASSED] res_missing_y
[09:05:48] [PASSED] res_bad_y
[09:05:48] [PASSED] res_missing_y_bpp
[09:05:48] [PASSED] res_bad_bpp
[09:05:48] [PASSED] res_bad_refresh
[09:05:48] [PASSED] res_bpp_refresh_force_on_off
[09:05:48] [PASSED] res_invalid_mode
[09:05:48] [PASSED] res_bpp_wrong_place_mode
[09:05:48] [PASSED] name_bpp_refresh
[09:05:48] [PASSED] name_refresh
[09:05:48] [PASSED] name_refresh_wrong_mode
[09:05:48] [PASSED] name_refresh_invalid_mode
[09:05:48] [PASSED] rotate_multiple
[09:05:48] [PASSED] rotate_invalid_val
[09:05:48] [PASSED] rotate_truncated
[09:05:48] [PASSED] invalid_option
[09:05:48] [PASSED] invalid_tv_option
[09:05:48] [PASSED] truncated_tv_option
[09:05:48] ============ [PASSED] drm_test_cmdline_invalid =============
[09:05:48] =============== drm_test_cmdline_tv_options ===============
[09:05:48] [PASSED] NTSC
[09:05:48] [PASSED] NTSC_443
[09:05:48] [PASSED] NTSC_J
[09:05:48] [PASSED] PAL
[09:05:48] [PASSED] PAL_M
[09:05:48] [PASSED] PAL_N
[09:05:48] [PASSED] SECAM
[09:05:48] [PASSED] MONO_525
[09:05:48] [PASSED] MONO_625
[09:05:48] =========== [PASSED] drm_test_cmdline_tv_options ===========
[09:05:48] =============== [PASSED] drm_cmdline_parser ================
[09:05:48] ========== drmm_connector_hdmi_init (20 subtests) ==========
[09:05:48] [PASSED] drm_test_connector_hdmi_init_valid
[09:05:48] [PASSED] drm_test_connector_hdmi_init_bpc_8
[09:05:48] [PASSED] drm_test_connector_hdmi_init_bpc_10
[09:05:48] [PASSED] drm_test_connector_hdmi_init_bpc_12
[09:05:48] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[09:05:48] [PASSED] drm_test_connector_hdmi_init_bpc_null
[09:05:48] [PASSED] drm_test_connector_hdmi_init_formats_empty
[09:05:48] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[09:05:48] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[09:05:48] [PASSED] supported_formats=0x9 yuv420_allowed=1
[09:05:48] [PASSED] supported_formats=0x9 yuv420_allowed=0
[09:05:48] [PASSED] supported_formats=0x5 yuv420_allowed=1
[09:05:48] [PASSED] supported_formats=0x5 yuv420_allowed=0
[09:05:48] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[09:05:48] [PASSED] drm_test_connector_hdmi_init_null_ddc
[09:05:48] [PASSED] drm_test_connector_hdmi_init_null_product
[09:05:48] [PASSED] drm_test_connector_hdmi_init_null_vendor
[09:05:48] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[09:05:48] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[09:05:48] [PASSED] drm_test_connector_hdmi_init_product_valid
[09:05:48] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[09:05:48] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[09:05:48] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[09:05:48] ========= drm_test_connector_hdmi_init_type_valid =========
[09:05:48] [PASSED] HDMI-A
[09:05:48] [PASSED] HDMI-B
[09:05:48] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[09:05:48] ======== drm_test_connector_hdmi_init_type_invalid ========
[09:05:48] [PASSED] Unknown
[09:05:48] [PASSED] VGA
[09:05:48] [PASSED] DVI-I
[09:05:48] [PASSED] DVI-D
[09:05:48] [PASSED] DVI-A
[09:05:48] [PASSED] Composite
[09:05:48] [PASSED] SVIDEO
[09:05:48] [PASSED] LVDS
[09:05:48] [PASSED] Component
[09:05:48] [PASSED] DIN
[09:05:48] [PASSED] DP
[09:05:48] [PASSED] TV
[09:05:48] [PASSED] eDP
[09:05:48] [PASSED] Virtual
[09:05:48] [PASSED] DSI
[09:05:48] [PASSED] DPI
[09:05:48] [PASSED] Writeback
[09:05:48] [PASSED] SPI
[09:05:48] [PASSED] USB
[09:05:48] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[09:05:48] ============ [PASSED] drmm_connector_hdmi_init =============
[09:05:48] ============= drmm_connector_init (3 subtests) =============
[09:05:48] [PASSED] drm_test_drmm_connector_init
[09:05:48] [PASSED] drm_test_drmm_connector_init_null_ddc
[09:05:48] ========= drm_test_drmm_connector_init_type_valid =========
[09:05:48] [PASSED] Unknown
[09:05:48] [PASSED] VGA
[09:05:48] [PASSED] DVI-I
[09:05:48] [PASSED] DVI-D
[09:05:48] [PASSED] DVI-A
[09:05:48] [PASSED] Composite
[09:05:48] [PASSED] SVIDEO
[09:05:48] [PASSED] LVDS
[09:05:48] [PASSED] Component
[09:05:48] [PASSED] DIN
[09:05:48] [PASSED] DP
[09:05:48] [PASSED] HDMI-A
[09:05:48] [PASSED] HDMI-B
[09:05:48] [PASSED] TV
[09:05:48] [PASSED] eDP
[09:05:48] [PASSED] Virtual
[09:05:48] [PASSED] DSI
[09:05:48] [PASSED] DPI
[09:05:48] [PASSED] Writeback
[09:05:48] [PASSED] SPI
[09:05:48] [PASSED] USB
[09:05:48] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[09:05:48] =============== [PASSED] drmm_connector_init ===============
[09:05:48] ========= drm_connector_dynamic_init (6 subtests) ==========
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_init
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_init_properties
[09:05:48] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[09:05:48] [PASSED] Unknown
[09:05:48] [PASSED] VGA
[09:05:48] [PASSED] DVI-I
[09:05:48] [PASSED] DVI-D
[09:05:48] [PASSED] DVI-A
[09:05:48] [PASSED] Composite
[09:05:48] [PASSED] SVIDEO
[09:05:48] [PASSED] LVDS
[09:05:48] [PASSED] Component
[09:05:48] [PASSED] DIN
[09:05:48] [PASSED] DP
[09:05:48] [PASSED] HDMI-A
[09:05:48] [PASSED] HDMI-B
[09:05:48] [PASSED] TV
[09:05:48] [PASSED] eDP
[09:05:48] [PASSED] Virtual
[09:05:48] [PASSED] DSI
[09:05:48] [PASSED] DPI
[09:05:48] [PASSED] Writeback
[09:05:48] [PASSED] SPI
[09:05:48] [PASSED] USB
[09:05:48] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[09:05:48] ======== drm_test_drm_connector_dynamic_init_name =========
[09:05:48] [PASSED] Unknown
[09:05:48] [PASSED] VGA
[09:05:48] [PASSED] DVI-I
[09:05:48] [PASSED] DVI-D
[09:05:48] [PASSED] DVI-A
[09:05:48] [PASSED] Composite
[09:05:48] [PASSED] SVIDEO
[09:05:48] [PASSED] LVDS
[09:05:48] [PASSED] Component
[09:05:48] [PASSED] DIN
[09:05:48] [PASSED] DP
[09:05:48] [PASSED] HDMI-A
[09:05:48] [PASSED] HDMI-B
[09:05:48] [PASSED] TV
[09:05:48] [PASSED] eDP
[09:05:48] [PASSED] Virtual
[09:05:48] [PASSED] DSI
[09:05:48] [PASSED] DPI
[09:05:48] [PASSED] Writeback
[09:05:48] [PASSED] SPI
[09:05:48] [PASSED] USB
[09:05:48] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[09:05:48] =========== [PASSED] drm_connector_dynamic_init ============
[09:05:48] ==== drm_connector_dynamic_register_early (4 subtests) =====
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[09:05:48] ====== [PASSED] drm_connector_dynamic_register_early =======
[09:05:48] ======= drm_connector_dynamic_register (7 subtests) ========
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[09:05:48] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[09:05:48] ========= [PASSED] drm_connector_dynamic_register ==========
[09:05:48] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[09:05:48] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[09:05:48] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[09:05:48] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[09:05:48] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[09:05:48] ========== drm_test_get_tv_mode_from_name_valid ===========
[09:05:48] [PASSED] NTSC
[09:05:48] [PASSED] NTSC-443
[09:05:48] [PASSED] NTSC-J
[09:05:48] [PASSED] PAL
[09:05:48] [PASSED] PAL-M
[09:05:48] [PASSED] PAL-N
[09:05:48] [PASSED] SECAM
[09:05:48] [PASSED] Mono
[09:05:48] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[09:05:48] [PASSED] drm_test_get_tv_mode_from_name_truncated
[09:05:48] ============ [PASSED] drm_get_tv_mode_from_name ============
[09:05:48] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[09:05:48] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[09:05:48] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[09:05:48] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[09:05:48] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[09:05:48] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[09:05:48] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[09:05:48] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[09:05:48] [PASSED] VIC 96
[09:05:48] [PASSED] VIC 97
[09:05:48] [PASSED] VIC 101
[09:05:48] [PASSED] VIC 102
[09:05:48] [PASSED] VIC 106
[09:05:48] [PASSED] VIC 107
[09:05:48] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[09:05:48] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[09:05:48] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[09:05:48] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[09:05:48] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[09:05:48] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[09:05:48] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[09:05:48] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[09:05:48] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[09:05:48] [PASSED] Automatic
[09:05:48] [PASSED] Full
[09:05:48] [PASSED] Limited 16:235
[09:05:48] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[09:05:48] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[09:05:48] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[09:05:48] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[09:05:48] === drm_test_drm_hdmi_connector_get_output_format_name ====
[09:05:48] [PASSED] RGB
[09:05:48] [PASSED] YUV 4:2:0
[09:05:48] [PASSED] YUV 4:2:2
[09:05:48] [PASSED] YUV 4:4:4
[09:05:48] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[09:05:48] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[09:05:48] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[09:05:48] ============= drm_damage_helper (21 subtests) ==============
[09:05:48] [PASSED] drm_test_damage_iter_no_damage
[09:05:48] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[09:05:48] [PASSED] drm_test_damage_iter_no_damage_src_moved
[09:05:48] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[09:05:48] [PASSED] drm_test_damage_iter_no_damage_not_visible
[09:05:48] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[09:05:48] [PASSED] drm_test_damage_iter_no_damage_no_fb
[09:05:48] [PASSED] drm_test_damage_iter_simple_damage
[09:05:48] [PASSED] drm_test_damage_iter_single_damage
[09:05:48] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[09:05:48] [PASSED] drm_test_damage_iter_single_damage_outside_src
[09:05:48] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[09:05:48] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[09:05:48] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[09:05:48] [PASSED] drm_test_damage_iter_single_damage_src_moved
[09:05:48] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[09:05:48] [PASSED] drm_test_damage_iter_damage
[09:05:48] [PASSED] drm_test_damage_iter_damage_one_intersect
[09:05:48] [PASSED] drm_test_damage_iter_damage_one_outside
[09:05:48] [PASSED] drm_test_damage_iter_damage_src_moved
[09:05:48] [PASSED] drm_test_damage_iter_damage_not_visible
[09:05:48] ================ [PASSED] drm_damage_helper ================
[09:05:48] ============== drm_dp_mst_helper (3 subtests) ==============
[09:05:48] ============== drm_test_dp_mst_calc_pbn_mode ==============
[09:05:48] [PASSED] Clock 154000 BPP 30 DSC disabled
[09:05:48] [PASSED] Clock 234000 BPP 30 DSC disabled
[09:05:48] [PASSED] Clock 297000 BPP 24 DSC disabled
[09:05:48] [PASSED] Clock 332880 BPP 24 DSC enabled
[09:05:48] [PASSED] Clock 324540 BPP 24 DSC enabled
[09:05:48] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[09:05:48] ============== drm_test_dp_mst_calc_pbn_div ===============
[09:05:48] [PASSED] Link rate 2000000 lane count 4
[09:05:48] [PASSED] Link rate 2000000 lane count 2
[09:05:48] [PASSED] Link rate 2000000 lane count 1
[09:05:48] [PASSED] Link rate 1350000 lane count 4
[09:05:48] [PASSED] Link rate 1350000 lane count 2
[09:05:48] [PASSED] Link rate 1350000 lane count 1
[09:05:48] [PASSED] Link rate 1000000 lane count 4
[09:05:48] [PASSED] Link rate 1000000 lane count 2
[09:05:48] [PASSED] Link rate 1000000 lane count 1
[09:05:48] [PASSED] Link rate 810000 lane count 4
[09:05:48] [PASSED] Link rate 810000 lane count 2
[09:05:48] [PASSED] Link rate 810000 lane count 1
[09:05:48] [PASSED] Link rate 540000 lane count 4
[09:05:48] [PASSED] Link rate 540000 lane count 2
[09:05:48] [PASSED] Link rate 540000 lane count 1
[09:05:48] [PASSED] Link rate 270000 lane count 4
[09:05:48] [PASSED] Link rate 270000 lane count 2
[09:05:48] [PASSED] Link rate 270000 lane count 1
[09:05:48] [PASSED] Link rate 162000 lane count 4
[09:05:48] [PASSED] Link rate 162000 lane count 2
[09:05:48] [PASSED] Link rate 162000 lane count 1
[09:05:48] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[09:05:48] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[09:05:48] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[09:05:48] [PASSED] DP_POWER_UP_PHY with port number
[09:05:48] [PASSED] DP_POWER_DOWN_PHY with port number
[09:05:48] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[09:05:48] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[09:05:48] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[09:05:48] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[09:05:48] [PASSED] DP_QUERY_PAYLOAD with port number
[09:05:48] [PASSED] DP_QUERY_PAYLOAD with VCPI
[09:05:48] [PASSED] DP_REMOTE_DPCD_READ with port number
[09:05:48] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[09:05:48] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[09:05:48] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[09:05:48] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[09:05:48] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[09:05:48] [PASSED] DP_REMOTE_I2C_READ with port number
[09:05:48] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[09:05:48] [PASSED] DP_REMOTE_I2C_READ with transactions array
[09:05:48] [PASSED] DP_REMOTE_I2C_WRITE with port number
[09:05:48] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[09:05:48] [PASSED] DP_REMOTE_I2C_WRITE with data array
[09:05:48] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[09:05:48] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[09:05:48] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[09:05:48] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[09:05:48] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[09:05:48] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[09:05:48] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[09:05:48] ================ [PASSED] drm_dp_mst_helper ================
[09:05:48] ================== drm_exec (7 subtests) ===================
[09:05:48] [PASSED] sanitycheck
[09:05:48] [PASSED] test_lock
[09:05:48] [PASSED] test_lock_unlock
[09:05:48] [PASSED] test_duplicates
[09:05:48] [PASSED] test_prepare
[09:05:48] [PASSED] test_prepare_array
[09:05:48] [PASSED] test_multiple_loops
[09:05:48] ==================== [PASSED] drm_exec =====================
[09:05:48] =========== drm_format_helper_test (17 subtests) ===========
[09:05:48] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[09:05:48] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[09:05:48] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[09:05:48] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[09:05:48] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[09:05:48] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[09:05:48] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[09:05:48] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[09:05:48] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[09:05:48] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[09:05:48] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[09:05:48] ============== drm_test_fb_xrgb8888_to_mono ===============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[09:05:48] ==================== drm_test_fb_swab =====================
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ================ [PASSED] drm_test_fb_swab =================
[09:05:48] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[09:05:48] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[09:05:48] [PASSED] single_pixel_source_buffer
[09:05:48] [PASSED] single_pixel_clip_rectangle
[09:05:48] [PASSED] well_known_colors
[09:05:48] [PASSED] destination_pitch
[09:05:48] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[09:05:48] ================= drm_test_fb_clip_offset =================
[09:05:48] [PASSED] pass through
[09:05:48] [PASSED] horizontal offset
[09:05:48] [PASSED] vertical offset
[09:05:48] [PASSED] horizontal and vertical offset
[09:05:48] [PASSED] horizontal offset (custom pitch)
[09:05:48] [PASSED] vertical offset (custom pitch)
[09:05:48] [PASSED] horizontal and vertical offset (custom pitch)
[09:05:48] ============= [PASSED] drm_test_fb_clip_offset =============
[09:05:48] =================== drm_test_fb_memcpy ====================
[09:05:48] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[09:05:48] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[09:05:48] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[09:05:48] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[09:05:48] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[09:05:48] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[09:05:48] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[09:05:48] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[09:05:48] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[09:05:48] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[09:05:48] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[09:05:48] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[09:05:48] =============== [PASSED] drm_test_fb_memcpy ================
[09:05:48] ============= [PASSED] drm_format_helper_test ==============
[09:05:48] ================= drm_format (18 subtests) =================
[09:05:48] [PASSED] drm_test_format_block_width_invalid
[09:05:48] [PASSED] drm_test_format_block_width_one_plane
[09:05:48] [PASSED] drm_test_format_block_width_two_plane
[09:05:48] [PASSED] drm_test_format_block_width_three_plane
[09:05:48] [PASSED] drm_test_format_block_width_tiled
[09:05:48] [PASSED] drm_test_format_block_height_invalid
[09:05:48] [PASSED] drm_test_format_block_height_one_plane
[09:05:48] [PASSED] drm_test_format_block_height_two_plane
[09:05:48] [PASSED] drm_test_format_block_height_three_plane
[09:05:48] [PASSED] drm_test_format_block_height_tiled
[09:05:48] [PASSED] drm_test_format_min_pitch_invalid
[09:05:48] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[09:05:48] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[09:05:48] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[09:05:48] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[09:05:48] [PASSED] drm_test_format_min_pitch_two_plane
[09:05:48] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[09:05:48] [PASSED] drm_test_format_min_pitch_tiled
[09:05:48] =================== [PASSED] drm_format ====================
[09:05:48] ============== drm_framebuffer (10 subtests) ===============
[09:05:48] ========== drm_test_framebuffer_check_src_coords ==========
[09:05:48] [PASSED] Success: source fits into fb
[09:05:48] [PASSED] Fail: overflowing fb with x-axis coordinate
[09:05:48] [PASSED] Fail: overflowing fb with y-axis coordinate
[09:05:48] [PASSED] Fail: overflowing fb with source width
[09:05:48] [PASSED] Fail: overflowing fb with source height
[09:05:48] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[09:05:48] [PASSED] drm_test_framebuffer_cleanup
[09:05:48] =============== drm_test_framebuffer_create ===============
[09:05:48] [PASSED] ABGR8888 normal sizes
[09:05:48] [PASSED] ABGR8888 max sizes
[09:05:48] [PASSED] ABGR8888 pitch greater than min required
[09:05:48] [PASSED] ABGR8888 pitch less than min required
[09:05:48] [PASSED] ABGR8888 Invalid width
[09:05:48] [PASSED] ABGR8888 Invalid buffer handle
[09:05:48] [PASSED] No pixel format
[09:05:48] [PASSED] ABGR8888 Width 0
[09:05:48] [PASSED] ABGR8888 Height 0
[09:05:48] [PASSED] ABGR8888 Out of bound height * pitch combination
[09:05:48] [PASSED] ABGR8888 Large buffer offset
[09:05:48] [PASSED] ABGR8888 Buffer offset for inexistent plane
[09:05:48] [PASSED] ABGR8888 Invalid flag
[09:05:48] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[09:05:48] [PASSED] ABGR8888 Valid buffer modifier
[09:05:48] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[09:05:48] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[09:05:48] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[09:05:48] [PASSED] NV12 Normal sizes
[09:05:48] [PASSED] NV12 Max sizes
[09:05:48] [PASSED] NV12 Invalid pitch
[09:05:48] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[09:05:48] [PASSED] NV12 different modifier per-plane
[09:05:48] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[09:05:48] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[09:05:48] [PASSED] NV12 Modifier for inexistent plane
[09:05:48] [PASSED] NV12 Handle for inexistent plane
[09:05:48] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[09:05:48] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[09:05:48] [PASSED] YVU420 Normal sizes
[09:05:48] [PASSED] YVU420 Max sizes
[09:05:48] [PASSED] YVU420 Invalid pitch
[09:05:48] [PASSED] YVU420 Different pitches
[09:05:48] [PASSED] YVU420 Different buffer offsets/pitches
[09:05:48] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[09:05:48] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[09:05:48] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[09:05:48] [PASSED] YVU420 Valid modifier
[09:05:48] [PASSED] YVU420 Different modifiers per plane
[09:05:48] [PASSED] YVU420 Modifier for inexistent plane
[09:05:48] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[09:05:48] [PASSED] X0L2 Normal sizes
[09:05:48] [PASSED] X0L2 Max sizes
[09:05:48] [PASSED] X0L2 Invalid pitch
[09:05:48] [PASSED] X0L2 Pitch greater than minimum required
[09:05:48] [PASSED] X0L2 Handle for inexistent plane
[09:05:48] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[09:05:48] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[09:05:48] [PASSED] X0L2 Valid modifier
[09:05:48] [PASSED] X0L2 Modifier for inexistent plane
[09:05:48] =========== [PASSED] drm_test_framebuffer_create ===========
[09:05:48] [PASSED] drm_test_framebuffer_free
[09:05:48] [PASSED] drm_test_framebuffer_init
[09:05:48] [PASSED] drm_test_framebuffer_init_bad_format
[09:05:48] [PASSED] drm_test_framebuffer_init_dev_mismatch
[09:05:48] [PASSED] drm_test_framebuffer_lookup
[09:05:48] [PASSED] drm_test_framebuffer_lookup_inexistent
[09:05:48] [PASSED] drm_test_framebuffer_modifiers_not_supported
[09:05:48] ================= [PASSED] drm_framebuffer =================
[09:05:48] ================ drm_gem_shmem (8 subtests) ================
[09:05:48] [PASSED] drm_gem_shmem_test_obj_create
[09:05:48] [PASSED] drm_gem_shmem_test_obj_create_private
[09:05:48] [PASSED] drm_gem_shmem_test_pin_pages
[09:05:48] [PASSED] drm_gem_shmem_test_vmap
[09:05:48] [PASSED] drm_gem_shmem_test_get_sg_table
[09:05:48] [PASSED] drm_gem_shmem_test_get_pages_sgt
[09:05:48] [PASSED] drm_gem_shmem_test_madvise
[09:05:48] [PASSED] drm_gem_shmem_test_purge
[09:05:48] ================== [PASSED] drm_gem_shmem ==================
[09:05:48] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[09:05:48] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[09:05:48] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[09:05:48] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[09:05:48] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[09:05:48] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[09:05:48] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[09:05:48] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[09:05:48] [PASSED] Automatic
[09:05:48] [PASSED] Full
[09:05:48] [PASSED] Limited 16:235
[09:05:48] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[09:05:48] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[09:05:48] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[09:05:48] [PASSED] drm_test_check_disable_connector
[09:05:48] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[09:05:48] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[09:05:48] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[09:05:48] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[09:05:48] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[09:05:48] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[09:05:48] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[09:05:48] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[09:05:48] [PASSED] drm_test_check_output_bpc_dvi
[09:05:48] [PASSED] drm_test_check_output_bpc_format_vic_1
[09:05:48] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[09:05:48] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[09:05:48] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[09:05:48] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[09:05:48] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[09:05:48] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[09:05:48] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[09:05:48] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[09:05:48] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[09:05:48] [PASSED] drm_test_check_broadcast_rgb_value
[09:05:48] [PASSED] drm_test_check_bpc_8_value
[09:05:48] [PASSED] drm_test_check_bpc_10_value
[09:05:48] [PASSED] drm_test_check_bpc_12_value
[09:05:48] [PASSED] drm_test_check_format_value
[09:05:48] [PASSED] drm_test_check_tmds_char_value
[09:05:48] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[09:05:48] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[09:05:48] [PASSED] drm_test_check_mode_valid
[09:05:48] [PASSED] drm_test_check_mode_valid_reject
[09:05:48] [PASSED] drm_test_check_mode_valid_reject_rate
[09:05:48] [PASSED] drm_test_check_mode_valid_reject_max_clock
[09:05:48] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[09:05:48] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[09:05:48] [PASSED] drm_test_check_infoframes
[09:05:48] [PASSED] drm_test_check_reject_avi_infoframe
[09:05:48] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[09:05:48] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[09:05:48] [PASSED] drm_test_check_reject_audio_infoframe
[09:05:48] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[09:05:48] ================= drm_managed (2 subtests) =================
[09:05:48] [PASSED] drm_test_managed_release_action
[09:05:48] [PASSED] drm_test_managed_run_action
[09:05:48] =================== [PASSED] drm_managed ===================
[09:05:48] =================== drm_mm (6 subtests) ====================
[09:05:48] [PASSED] drm_test_mm_init
[09:05:48] [PASSED] drm_test_mm_debug
[09:05:48] [PASSED] drm_test_mm_align32
[09:05:48] [PASSED] drm_test_mm_align64
[09:05:48] [PASSED] drm_test_mm_lowest
[09:05:48] [PASSED] drm_test_mm_highest
[09:05:48] ===================== [PASSED] drm_mm ======================
[09:05:48] ============= drm_modes_analog_tv (5 subtests) =============
[09:05:48] [PASSED] drm_test_modes_analog_tv_mono_576i
[09:05:48] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[09:05:48] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[09:05:48] [PASSED] drm_test_modes_analog_tv_pal_576i
[09:05:48] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[09:05:48] =============== [PASSED] drm_modes_analog_tv ===============
[09:05:48] ============== drm_plane_helper (2 subtests) ===============
[09:05:48] =============== drm_test_check_plane_state ================
[09:05:48] [PASSED] clipping_simple
[09:05:48] [PASSED] clipping_rotate_reflect
[09:05:48] [PASSED] positioning_simple
[09:05:48] [PASSED] upscaling
[09:05:48] [PASSED] downscaling
[09:05:48] [PASSED] rounding1
[09:05:48] [PASSED] rounding2
[09:05:48] [PASSED] rounding3
[09:05:48] [PASSED] rounding4
[09:05:48] =========== [PASSED] drm_test_check_plane_state ============
[09:05:48] =========== drm_test_check_invalid_plane_state ============
[09:05:48] [PASSED] positioning_invalid
[09:05:48] [PASSED] upscaling_invalid
[09:05:48] [PASSED] downscaling_invalid
[09:05:48] ======= [PASSED] drm_test_check_invalid_plane_state ========
[09:05:48] ================ [PASSED] drm_plane_helper =================
[09:05:48] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[09:05:48] ====== drm_test_connector_helper_tv_get_modes_check =======
[09:05:48] [PASSED] None
[09:05:48] [PASSED] PAL
[09:05:48] [PASSED] NTSC
[09:05:48] [PASSED] Both, NTSC Default
[09:05:48] [PASSED] Both, PAL Default
[09:05:48] [PASSED] Both, NTSC Default, with PAL on command-line
[09:05:48] [PASSED] Both, PAL Default, with NTSC on command-line
[09:05:48] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[09:05:48] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[09:05:48] ================== drm_rect (9 subtests) ===================
[09:05:48] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[09:05:48] [PASSED] drm_test_rect_clip_scaled_not_clipped
[09:05:48] [PASSED] drm_test_rect_clip_scaled_clipped
[09:05:48] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[09:05:48] ================= drm_test_rect_intersect =================
[09:05:48] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[09:05:48] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[09:05:48] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[09:05:48] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[09:05:48] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[09:05:48] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[09:05:48] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[09:05:48] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[09:05:48] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[09:05:48] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[09:05:48] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[09:05:48] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[09:05:48] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[09:05:48] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[09:05:48] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[09:05:48] ============= [PASSED] drm_test_rect_intersect =============
[09:05:48] ================ drm_test_rect_calc_hscale ================
[09:05:48] [PASSED] normal use
[09:05:48] [PASSED] out of max range
[09:05:48] [PASSED] out of min range
[09:05:48] [PASSED] zero dst
[09:05:48] [PASSED] negative src
[09:05:48] [PASSED] negative dst
[09:05:48] ============ [PASSED] drm_test_rect_calc_hscale ============
[09:05:48] ================ drm_test_rect_calc_vscale ================
[09:05:48] [PASSED] normal use
[09:05:48] [PASSED] out of max range
[09:05:48] [PASSED] out of min range
[09:05:48] [PASSED] zero dst
[09:05:48] [PASSED] negative src
[09:05:48] [PASSED] negative dst
stty: 'standard input': Inappropriate ioctl for device
[09:05:48] ============ [PASSED] drm_test_rect_calc_vscale ============
[09:05:48] ================== drm_test_rect_rotate ===================
[09:05:48] [PASSED] reflect-x
[09:05:48] [PASSED] reflect-y
[09:05:48] [PASSED] rotate-0
[09:05:48] [PASSED] rotate-90
[09:05:48] [PASSED] rotate-180
[09:05:48] [PASSED] rotate-270
[09:05:48] ============== [PASSED] drm_test_rect_rotate ===============
[09:05:48] ================ drm_test_rect_rotate_inv =================
[09:05:48] [PASSED] reflect-x
[09:05:48] [PASSED] reflect-y
[09:05:48] [PASSED] rotate-0
[09:05:48] [PASSED] rotate-90
[09:05:48] [PASSED] rotate-180
[09:05:48] [PASSED] rotate-270
[09:05:48] ============ [PASSED] drm_test_rect_rotate_inv =============
[09:05:48] ==================== [PASSED] drm_rect =====================
[09:05:48] ============ drm_sysfb_modeset_test (1 subtest) ============
[09:05:48] ============ drm_test_sysfb_build_fourcc_list =============
[09:05:48] [PASSED] no native formats
[09:05:48] [PASSED] XRGB8888 as native format
[09:05:48] [PASSED] remove duplicates
[09:05:48] [PASSED] convert alpha formats
[09:05:48] [PASSED] random formats
[09:05:48] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[09:05:48] ============= [PASSED] drm_sysfb_modeset_test ==============
[09:05:48] ================== drm_fixp (2 subtests) ===================
[09:05:48] [PASSED] drm_test_int2fixp
[09:05:48] [PASSED] drm_test_sm2fixp
[09:05:48] ==================== [PASSED] drm_fixp =====================
[09:05:48] ============================================================
[09:05:48] Testing complete. Ran 621 tests: passed: 621
[09:05:48] Elapsed time: 50.552s total, 2.551s configuring, 47.779s building, 0.203s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[09:05:48] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[09:05:51] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[09:06:07] Starting KUnit Kernel (1/1)...
[09:06:07] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[09:06:07] ================= ttm_device (5 subtests) ==================
[09:06:07] [PASSED] ttm_device_init_basic
[09:06:07] [PASSED] ttm_device_init_multiple
[09:06:07] [PASSED] ttm_device_fini_basic
[09:06:07] [PASSED] ttm_device_init_no_vma_man
[09:06:07] ================== ttm_device_init_pools ==================
[09:06:07] [PASSED] No DMA allocations, no DMA32 required
[09:06:07] [PASSED] DMA allocations, DMA32 required
[09:06:07] [PASSED] No DMA allocations, DMA32 required
[09:06:07] [PASSED] DMA allocations, no DMA32 required
[09:06:07] ============== [PASSED] ttm_device_init_pools ==============
[09:06:07] =================== [PASSED] ttm_device ====================
[09:06:07] ================== ttm_pool (8 subtests) ===================
[09:06:07] ================== ttm_pool_alloc_basic ===================
[09:06:07] [PASSED] One page
[09:06:07] [PASSED] More than one page
[09:06:07] [PASSED] Above the allocation limit
[09:06:07] [PASSED] One page, with coherent DMA mappings enabled
[09:06:07] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[09:06:07] ============== [PASSED] ttm_pool_alloc_basic ===============
[09:06:07] ============== ttm_pool_alloc_basic_dma_addr ==============
[09:06:07] [PASSED] One page
[09:06:07] [PASSED] More than one page
[09:06:07] [PASSED] Above the allocation limit
[09:06:07] [PASSED] One page, with coherent DMA mappings enabled
[09:06:07] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[09:06:07] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[09:06:07] [PASSED] ttm_pool_alloc_order_caching_match
[09:06:07] [PASSED] ttm_pool_alloc_caching_mismatch
[09:06:07] [PASSED] ttm_pool_alloc_order_mismatch
[09:06:07] [PASSED] ttm_pool_free_dma_alloc
[09:06:07] [PASSED] ttm_pool_free_no_dma_alloc
[09:06:07] [PASSED] ttm_pool_fini_basic
[09:06:07] ==================== [PASSED] ttm_pool =====================
[09:06:07] ================ ttm_resource (8 subtests) =================
[09:06:07] ================= ttm_resource_init_basic =================
[09:06:07] [PASSED] Init resource in TTM_PL_SYSTEM
[09:06:07] [PASSED] Init resource in TTM_PL_VRAM
[09:06:07] [PASSED] Init resource in a private placement
[09:06:07] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[09:06:07] ============= [PASSED] ttm_resource_init_basic =============
[09:06:07] [PASSED] ttm_resource_init_pinned
[09:06:07] [PASSED] ttm_resource_fini_basic
[09:06:07] [PASSED] ttm_resource_manager_init_basic
[09:06:07] [PASSED] ttm_resource_manager_usage_basic
[09:06:07] [PASSED] ttm_resource_manager_set_used_basic
[09:06:07] [PASSED] ttm_sys_man_alloc_basic
[09:06:07] [PASSED] ttm_sys_man_free_basic
[09:06:07] ================== [PASSED] ttm_resource ===================
[09:06:07] =================== ttm_tt (15 subtests) ===================
[09:06:07] ==================== ttm_tt_init_basic ====================
[09:06:07] [PASSED] Page-aligned size
[09:06:07] [PASSED] Extra pages requested
[09:06:07] ================ [PASSED] ttm_tt_init_basic ================
[09:06:07] [PASSED] ttm_tt_init_misaligned
[09:06:07] [PASSED] ttm_tt_fini_basic
[09:06:07] [PASSED] ttm_tt_fini_sg
[09:06:07] [PASSED] ttm_tt_fini_shmem
[09:06:07] [PASSED] ttm_tt_create_basic
[09:06:07] [PASSED] ttm_tt_create_invalid_bo_type
[09:06:07] [PASSED] ttm_tt_create_ttm_exists
[09:06:07] [PASSED] ttm_tt_create_failed
[09:06:07] [PASSED] ttm_tt_destroy_basic
[09:06:07] [PASSED] ttm_tt_populate_null_ttm
[09:06:07] [PASSED] ttm_tt_populate_populated_ttm
[09:06:07] [PASSED] ttm_tt_unpopulate_basic
[09:06:07] [PASSED] ttm_tt_unpopulate_empty_ttm
[09:06:07] [PASSED] ttm_tt_swapin_basic
[09:06:07] ===================== [PASSED] ttm_tt ======================
[09:06:07] =================== ttm_bo (14 subtests) ===================
[09:06:07] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[09:06:07] [PASSED] Cannot be interrupted and sleeps
[09:06:07] [PASSED] Cannot be interrupted, locks straight away
[09:06:07] [PASSED] Can be interrupted, sleeps
[09:06:07] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[09:06:07] [PASSED] ttm_bo_reserve_locked_no_sleep
[09:06:07] [PASSED] ttm_bo_reserve_no_wait_ticket
[09:06:07] [PASSED] ttm_bo_reserve_double_resv
[09:06:07] [PASSED] ttm_bo_reserve_interrupted
[09:06:07] [PASSED] ttm_bo_reserve_deadlock
[09:06:07] [PASSED] ttm_bo_unreserve_basic
[09:06:07] [PASSED] ttm_bo_unreserve_pinned
[09:06:07] [PASSED] ttm_bo_unreserve_bulk
[09:06:07] [PASSED] ttm_bo_fini_basic
[09:06:07] [PASSED] ttm_bo_fini_shared_resv
[09:06:07] [PASSED] ttm_bo_pin_basic
[09:06:07] [PASSED] ttm_bo_pin_unpin_resource
[09:06:07] [PASSED] ttm_bo_multiple_pin_one_unpin
[09:06:07] ===================== [PASSED] ttm_bo ======================
[09:06:07] ============== ttm_bo_validate (22 subtests) ===============
[09:06:07] ============== ttm_bo_init_reserved_sys_man ===============
[09:06:07] [PASSED] Buffer object for userspace
[09:06:07] [PASSED] Kernel buffer object
[09:06:07] [PASSED] Shared buffer object
[09:06:07] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[09:06:07] ============== ttm_bo_init_reserved_mock_man ==============
[09:06:07] [PASSED] Buffer object for userspace
[09:06:07] [PASSED] Kernel buffer object
[09:06:07] [PASSED] Shared buffer object
[09:06:07] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[09:06:07] [PASSED] ttm_bo_init_reserved_resv
[09:06:07] ================== ttm_bo_validate_basic ==================
[09:06:07] [PASSED] Buffer object for userspace
[09:06:07] [PASSED] Kernel buffer object
[09:06:07] [PASSED] Shared buffer object
[09:06:07] ============== [PASSED] ttm_bo_validate_basic ==============
[09:06:07] [PASSED] ttm_bo_validate_invalid_placement
[09:06:07] ============= ttm_bo_validate_same_placement ==============
[09:06:07] [PASSED] System manager
[09:06:07] [PASSED] VRAM manager
[09:06:07] ========= [PASSED] ttm_bo_validate_same_placement ==========
[09:06:07] [PASSED] ttm_bo_validate_failed_alloc
[09:06:07] [PASSED] ttm_bo_validate_pinned
[09:06:07] [PASSED] ttm_bo_validate_busy_placement
[09:06:07] ================ ttm_bo_validate_multihop =================
[09:06:07] [PASSED] Buffer object for userspace
[09:06:07] [PASSED] Kernel buffer object
[09:06:07] [PASSED] Shared buffer object
[09:06:07] ============ [PASSED] ttm_bo_validate_multihop =============
[09:06:07] ========== ttm_bo_validate_no_placement_signaled ==========
[09:06:07] [PASSED] Buffer object in system domain, no page vector
[09:06:07] [PASSED] Buffer object in system domain with an existing page vector
[09:06:07] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[09:06:07] ======== ttm_bo_validate_no_placement_not_signaled ========
[09:06:07] [PASSED] Buffer object for userspace
[09:06:07] [PASSED] Kernel buffer object
[09:06:07] [PASSED] Shared buffer object
[09:06:07] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[09:06:07] [PASSED] ttm_bo_validate_move_fence_signaled
[09:06:07] ========= ttm_bo_validate_move_fence_not_signaled =========
[09:06:07] [PASSED] Waits for GPU
[09:06:07] [PASSED] Tries to lock straight away
[09:06:07] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[09:06:07] [PASSED] ttm_bo_validate_swapout
[09:06:07] [PASSED] ttm_bo_validate_happy_evict
[09:06:07] [PASSED] ttm_bo_validate_all_pinned_evict
[09:06:07] [PASSED] ttm_bo_validate_allowed_only_evict
[09:06:07] [PASSED] ttm_bo_validate_deleted_evict
[09:06:07] [PASSED] ttm_bo_validate_busy_domain_evict
[09:06:07] [PASSED] ttm_bo_validate_evict_gutting
[09:06:07] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[09:06:07] ================= [PASSED] ttm_bo_validate =================
[09:06:07] ============================================================
[09:06:07] Testing complete. Ran 102 tests: passed: 102
[09:06:07] Elapsed time: 19.558s total, 3.041s configuring, 16.197s building, 0.277s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 17+ messages in thread
* ✓ Xe.CI.BAT: success for drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2)
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
` (8 preceding siblings ...)
2026-04-06 9:06 ` ✓ CI.KUnit: success " Patchwork
@ 2026-04-06 9:54 ` Patchwork
2026-04-06 12:36 ` ✓ Xe.CI.FULL: " Patchwork
10 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-04-06 9:54 UTC (permalink / raw)
To: Arvind Yadav; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 939 bytes --]
== Series Details ==
Series: drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2)
URL : https://patchwork.freedesktop.org/series/161815/
State : success
== Summary ==
CI Bug Log - changes from xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf_BAT -> xe-pw-161815v2_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* IGT: IGT_8847 -> IGT_8848
* Linux: xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf -> xe-pw-161815v2
IGT_8847: 8847
IGT_8848: 8848
xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf: d873f0156bd08a3031097d459e2d3604bfe1b1bf
xe-pw-161815v2: 161815v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/index.html
[-- Attachment #2: Type: text/html, Size: 1501 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* ✓ Xe.CI.FULL: success for drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2)
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
` (9 preceding siblings ...)
2026-04-06 9:54 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-04-06 12:36 ` Patchwork
10 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-04-06 12:36 UTC (permalink / raw)
To: Arvind Yadav; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 34741 bytes --]
== Series Details ==
Series: drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2)
URL : https://patchwork.freedesktop.org/series/161815/
State : success
== Summary ==
CI Bug Log - changes from xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf_FULL -> xe-pw-161815v2_FULL
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-161815v2_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@core_hotunplug@hotreplug-lateclose:
- shard-bmg: [PASS][1] -> [ABORT][2] ([Intel XE#7578])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-5/igt@core_hotunplug@hotreplug-lateclose.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@core_hotunplug@hotreplug-lateclose.html
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- shard-bmg: NOTRUN -> [SKIP][3] ([Intel XE#2233])
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-5/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
- shard-bmg: NOTRUN -> [SKIP][4] ([Intel XE#2370])
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-1/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
* igt@kms_big_fb@x-tiled-16bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][5] ([Intel XE#2327])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-2/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-16bpp-rotate-180:
- shard-bmg: NOTRUN -> [SKIP][6] ([Intel XE#1124]) +4 other tests skip
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-10/igt@kms_big_fb@y-tiled-16bpp-rotate-180.html
* igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p:
- shard-bmg: NOTRUN -> [SKIP][7] ([Intel XE#7679])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-7/igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p.html
* igt@kms_bw@linear-tiling-2-displays-1920x1080p:
- shard-bmg: NOTRUN -> [SKIP][8] ([Intel XE#367] / [Intel XE#7354])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-3/igt@kms_bw@linear-tiling-2-displays-1920x1080p.html
* igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][9] ([Intel XE#2887]) +4 other tests skip
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-1/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-ccs:
- shard-bmg: NOTRUN -> [SKIP][10] ([Intel XE#3432]) +1 other test skip
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs.html
* igt@kms_chamelium_color@ctm-0-50:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#2325] / [Intel XE#7358])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@kms_chamelium_color@ctm-0-50.html
* igt@kms_chamelium_hpd@dp-hpd-after-suspend:
- shard-bmg: NOTRUN -> [SKIP][12] ([Intel XE#2252]) +2 other tests skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@kms_chamelium_hpd@dp-hpd-after-suspend.html
* igt@kms_content_protection@atomic-dpms-hdcp14:
- shard-lnl: NOTRUN -> [SKIP][13] ([Intel XE#7642])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-6/igt@kms_content_protection@atomic-dpms-hdcp14.html
* igt@kms_content_protection@dp-mst-type-0:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#2390] / [Intel XE#6974])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-10/igt@kms_content_protection@dp-mst-type-0.html
* igt@kms_cursor_crc@cursor-random-32x32:
- shard-bmg: NOTRUN -> [SKIP][15] ([Intel XE#2320]) +3 other tests skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-8/igt@kms_cursor_crc@cursor-random-32x32.html
* igt@kms_cursor_crc@cursor-sliding-512x170:
- shard-bmg: NOTRUN -> [SKIP][16] ([Intel XE#2321] / [Intel XE#7355])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@kms_cursor_crc@cursor-sliding-512x170.html
* igt@kms_cursor_legacy@flip-vs-cursor-legacy:
- shard-bmg: [PASS][17] -> [FAIL][18] ([Intel XE#7571])
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-1/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-5/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
* igt@kms_dsc@dsc-basic:
- shard-bmg: NOTRUN -> [SKIP][19] ([Intel XE#2244])
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-3/igt@kms_dsc@dsc-basic.html
* igt@kms_dsc@dsc-with-bpc-formats:
- shard-lnl: NOTRUN -> [SKIP][20] ([Intel XE#2244])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-5/igt@kms_dsc@dsc-with-bpc-formats.html
* igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-different-formats:
- shard-bmg: NOTRUN -> [SKIP][21] ([Intel XE#4422] / [Intel XE#7442])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-10/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-different-formats.html
* igt@kms_feature_discovery@psr2:
- shard-bmg: NOTRUN -> [SKIP][22] ([Intel XE#2374] / [Intel XE#6128])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-7/igt@kms_feature_discovery@psr2.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling:
- shard-bmg: NOTRUN -> [SKIP][23] ([Intel XE#7178] / [Intel XE#7351])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-2/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling:
- shard-lnl: NOTRUN -> [SKIP][24] ([Intel XE#7178] / [Intel XE#7351])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-3/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html
* igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-render:
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#7061] / [Intel XE#7356]) +1 other test skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-10/igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-render.html
* igt@kms_frontbuffer_tracking@drrs-rgb565-draw-render:
- shard-bmg: NOTRUN -> [SKIP][26] ([Intel XE#2311]) +13 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-10/igt@kms_frontbuffer_tracking@drrs-rgb565-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][27] ([Intel XE#4141]) +5 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][28] ([Intel XE#6312] / [Intel XE#651])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-5/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-pgflip-blt:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#2313]) +10 other tests skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#656])
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-5/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_hdr@invalid-hdr:
- shard-bmg: [PASS][31] -> [SKIP][32] ([Intel XE#1503])
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-7/igt@kms_hdr@invalid-hdr.html
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@kms_hdr@invalid-hdr.html
* igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier:
- shard-bmg: NOTRUN -> [SKIP][33] ([Intel XE#7283]) +1 other test skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-5/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier.html
* igt@kms_plane@pixel-format-4-tiled-modifier@pipe-b-plane-5:
- shard-bmg: NOTRUN -> [SKIP][34] ([Intel XE#7130]) +1 other test skip
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-7/igt@kms_plane@pixel-format-4-tiled-modifier@pipe-b-plane-5.html
* igt@kms_plane@pixel-format-yf-tiled-ccs-modifier-source-clamping:
- shard-lnl: NOTRUN -> [SKIP][35] ([Intel XE#7283])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-3/igt@kms_plane@pixel-format-yf-tiled-ccs-modifier-source-clamping.html
* igt@kms_plane_multiple@2x-tiling-x:
- shard-lnl: NOTRUN -> [SKIP][36] ([Intel XE#4596] / [Intel XE#5854])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-1/igt@kms_plane_multiple@2x-tiling-x.html
* igt@kms_plane_scaling@planes-downscale-factor-0-5@pipe-c:
- shard-bmg: NOTRUN -> [SKIP][37] ([Intel XE#2763] / [Intel XE#6886]) +4 other tests skip
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@kms_plane_scaling@planes-downscale-factor-0-5@pipe-c.html
* igt@kms_pm_backlight@fade-with-suspend:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#7376] / [Intel XE#870])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-3/igt@kms_pm_backlight@fade-with-suspend.html
* igt@kms_pm_dc@deep-pkgc:
- shard-lnl: [PASS][39] -> [FAIL][40] ([Intel XE#2029] / [Intel XE#7395])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-lnl-3/igt@kms_pm_dc@deep-pkgc.html
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-3/igt@kms_pm_dc@deep-pkgc.html
* igt@kms_pm_rpm@modeset-lpsp:
- shard-bmg: NOTRUN -> [SKIP][41] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#7383] / [Intel XE#836])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-7/igt@kms_pm_rpm@modeset-lpsp.html
* igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf:
- shard-bmg: NOTRUN -> [SKIP][42] ([Intel XE#1489]) +1 other test skip
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-2/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr@fbc-pr-primary-page-flip:
- shard-bmg: NOTRUN -> [SKIP][43] ([Intel XE#2234] / [Intel XE#2850]) +7 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-2/igt@kms_psr@fbc-pr-primary-page-flip.html
* igt@kms_rotation_crc@bad-pixel-format:
- shard-bmg: NOTRUN -> [SKIP][44] ([Intel XE#3904] / [Intel XE#7342]) +1 other test skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-2/igt@kms_rotation_crc@bad-pixel-format.html
* igt@kms_rotation_crc@primary-y-tiled-reflect-x-180:
- shard-bmg: NOTRUN -> [SKIP][45] ([Intel XE#2330] / [Intel XE#5813]) +1 other test skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@kms_rotation_crc@primary-y-tiled-reflect-x-180.html
* igt@kms_setmode@invalid-clone-exclusive-crtc:
- shard-bmg: NOTRUN -> [SKIP][46] ([Intel XE#1435])
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@kms_setmode@invalid-clone-exclusive-crtc.html
* igt@kms_sharpness_filter@filter-toggle:
- shard-bmg: NOTRUN -> [SKIP][47] ([Intel XE#6503])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@kms_sharpness_filter@filter-toggle.html
* igt@xe_eudebug@basic-vm-access-userptr:
- shard-bmg: NOTRUN -> [SKIP][48] ([Intel XE#7636]) +4 other tests skip
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-3/igt@xe_eudebug@basic-vm-access-userptr.html
* igt@xe_evict@evict-small-external-multi-queue-cm:
- shard-bmg: NOTRUN -> [SKIP][49] ([Intel XE#7140])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-10/igt@xe_evict@evict-small-external-multi-queue-cm.html
* igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind:
- shard-bmg: NOTRUN -> [SKIP][50] ([Intel XE#2322] / [Intel XE#7372]) +2 other tests skip
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind.html
* igt@xe_exec_fault_mode@many-execqueues-multi-queue-userptr:
- shard-bmg: NOTRUN -> [SKIP][51] ([Intel XE#7136]) +4 other tests skip
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-5/igt@xe_exec_fault_mode@many-execqueues-multi-queue-userptr.html
* igt@xe_exec_multi_queue@max-queues-close-fd:
- shard-bmg: NOTRUN -> [SKIP][52] ([Intel XE#6874]) +12 other tests skip
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-1/igt@xe_exec_multi_queue@max-queues-close-fd.html
* igt@xe_exec_multi_queue@two-queues-priority:
- shard-lnl: NOTRUN -> [SKIP][53] ([Intel XE#6874]) +1 other test skip
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-2/igt@xe_exec_multi_queue@two-queues-priority.html
* igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-rebind:
- shard-lnl: NOTRUN -> [SKIP][54] ([Intel XE#7138])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-2/igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-rebind.html
* igt@xe_exec_threads@threads-multi-queue-mixed-userptr-invalidate-race:
- shard-bmg: NOTRUN -> [SKIP][55] ([Intel XE#7138]) +3 other tests skip
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-3/igt@xe_exec_threads@threads-multi-queue-mixed-userptr-invalidate-race.html
* igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit:
- shard-bmg: NOTRUN -> [SKIP][56] ([Intel XE#2229])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-3/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html
* igt@xe_multigpu_svm@mgpu-coherency-fail-basic:
- shard-bmg: NOTRUN -> [SKIP][57] ([Intel XE#6964]) +1 other test skip
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@xe_multigpu_svm@mgpu-coherency-fail-basic.html
* igt@xe_oa@oa-tlb-invalidate:
- shard-bmg: NOTRUN -> [SKIP][58] ([Intel XE#2248] / [Intel XE#7325] / [Intel XE#7393])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@xe_oa@oa-tlb-invalidate.html
* igt@xe_pat@pat-index-xelp:
- shard-bmg: NOTRUN -> [SKIP][59] ([Intel XE#2245] / [Intel XE#7590])
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-2/igt@xe_pat@pat-index-xelp.html
* igt@xe_pat@xa-app-transient-media-on:
- shard-bmg: NOTRUN -> [SKIP][60] ([Intel XE#7590]) +1 other test skip
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-1/igt@xe_pat@xa-app-transient-media-on.html
* igt@xe_pmu@fn-engine-activity-sched-if-idle:
- shard-lnl: NOTRUN -> [SKIP][61] ([Intel XE#4650] / [Intel XE#7347])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-3/igt@xe_pmu@fn-engine-activity-sched-if-idle.html
* igt@xe_pxp@pxp-stale-bo-exec-post-rpm:
- shard-bmg: NOTRUN -> [SKIP][62] ([Intel XE#4733] / [Intel XE#7417])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-8/igt@xe_pxp@pxp-stale-bo-exec-post-rpm.html
* igt@xe_query@multigpu-query-invalid-extension:
- shard-lnl: NOTRUN -> [SKIP][63] ([Intel XE#944])
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-2/igt@xe_query@multigpu-query-invalid-extension.html
* igt@xe_query@multigpu-query-invalid-uc-fw-version-mbz:
- shard-bmg: NOTRUN -> [SKIP][64] ([Intel XE#944]) +2 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@xe_query@multigpu-query-invalid-uc-fw-version-mbz.html
* igt@xe_sriov_flr@flr-each-isolation:
- shard-bmg: [PASS][65] -> [FAIL][66] ([Intel XE#6569])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-1/igt@xe_sriov_flr@flr-each-isolation.html
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@xe_sriov_flr@flr-each-isolation.html
* igt@xe_sriov_flr@flr-twice:
- shard-bmg: NOTRUN -> [FAIL][67] ([Intel XE#6569])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@xe_sriov_flr@flr-twice.html
#### Possible fixes ####
* igt@intel_hwmon@hwmon-write:
- shard-bmg: [FAIL][68] ([Intel XE#7445]) -> [PASS][69]
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-1/igt@intel_hwmon@hwmon-write.html
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@intel_hwmon@hwmon-write.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic:
- shard-bmg: [FAIL][70] ([Intel XE#7571]) -> [PASS][71]
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-2/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-8/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-lnl: [FAIL][72] ([Intel XE#301]) -> [PASS][73] +1 other test pass
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_frontbuffer_tracking@psr-rgb565-draw-blt:
- shard-lnl: [INCOMPLETE][74] -> [PASS][75]
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-lnl-1/igt@kms_frontbuffer_tracking@psr-rgb565-draw-blt.html
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-2/igt@kms_frontbuffer_tracking@psr-rgb565-draw-blt.html
* igt@kms_pm_dc@dc6-psr:
- shard-lnl: [FAIL][76] ([Intel XE#7340]) -> [PASS][77] +1 other test pass
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-lnl-7/igt@kms_pm_dc@dc6-psr.html
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-lnl-5/igt@kms_pm_dc@dc6-psr.html
#### Warnings ####
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [SKIP][78] ([Intel XE#2426] / [Intel XE#5848]) -> [FAIL][79] ([Intel XE#1729] / [Intel XE#7424])
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern.html
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-10/igt@kms_tiled_display@basic-test-pattern.html
* igt@xe_module_load@load:
- shard-bmg: ([SKIP][80], [PASS][81], [PASS][82], [PASS][83], [PASS][84], [PASS][85], [PASS][86], [DMESG-FAIL][87], [PASS][88], [PASS][89], [PASS][90], [PASS][91], [PASS][92], [PASS][93], [PASS][94], [PASS][95], [PASS][96], [PASS][97], [PASS][98], [PASS][99], [PASS][100], [PASS][101], [PASS][102], [PASS][103], [PASS][104], [PASS][105]) ([Intel XE#2457] / [Intel XE#5545] / [Intel XE#6652] / [Intel XE#7405]) -> ([PASS][106], [PASS][107], [PASS][108], [PASS][109], [PASS][110], [PASS][111], [PASS][112], [PASS][113], [PASS][114], [PASS][115], [PASS][116], [PASS][117], [PASS][118], [PASS][119], [PASS][120], [PASS][121], [SKIP][122], [PASS][123], [PASS][124], [PASS][125], [PASS][126], [PASS][127], [PASS][128], [PASS][129], [PASS][130], [PASS][131]) ([Intel XE#2457] / [Intel XE#7405])
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-5/igt@xe_module_load@load.html
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-6/igt@xe_module_load@load.html
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-3/igt@xe_module_load@load.html
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-7/igt@xe_module_load@load.html
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-7/igt@xe_module_load@load.html
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-7/igt@xe_module_load@load.html
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-10/igt@xe_module_load@load.html
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-2/igt@xe_module_load@load.html
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-2/igt@xe_module_load@load.html
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-6/igt@xe_module_load@load.html
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-10/igt@xe_module_load@load.html
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-10/igt@xe_module_load@load.html
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-2/igt@xe_module_load@load.html
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-5/igt@xe_module_load@load.html
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-9/igt@xe_module_load@load.html
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-9/igt@xe_module_load@load.html
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-1/igt@xe_module_load@load.html
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-1/igt@xe_module_load@load.html
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-5/igt@xe_module_load@load.html
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-5/igt@xe_module_load@load.html
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-8/igt@xe_module_load@load.html
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-8/igt@xe_module_load@load.html
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-8/igt@xe_module_load@load.html
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-3/igt@xe_module_load@load.html
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-3/igt@xe_module_load@load.html
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf/shard-bmg-1/igt@xe_module_load@load.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-1/igt@xe_module_load@load.html
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-1/igt@xe_module_load@load.html
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-10/igt@xe_module_load@load.html
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-10/igt@xe_module_load@load.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-10/igt@xe_module_load@load.html
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@xe_module_load@load.html
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@xe_module_load@load.html
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-9/igt@xe_module_load@load.html
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@xe_module_load@load.html
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-2/igt@xe_module_load@load.html
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-2/igt@xe_module_load@load.html
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-7/igt@xe_module_load@load.html
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@xe_module_load@load.html
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-8/igt@xe_module_load@load.html
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-8/igt@xe_module_load@load.html
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-7/igt@xe_module_load@load.html
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-1/igt@xe_module_load@load.html
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-7/igt@xe_module_load@load.html
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-2/igt@xe_module_load@load.html
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-3/igt@xe_module_load@load.html
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-6/igt@xe_module_load@load.html
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-3/igt@xe_module_load@load.html
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-5/igt@xe_module_load@load.html
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-5/igt@xe_module_load@load.html
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-5/igt@xe_module_load@load.html
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/shard-bmg-3/igt@xe_module_load@load.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#2029]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2029
[Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
[Intel XE#2233]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2233
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
[Intel XE#2245]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2245
[Intel XE#2248]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2248
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
[Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
[Intel XE#2370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2370
[Intel XE#2374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2374
[Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2457]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2457
[Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
[Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
[Intel XE#4650]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4650
[Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
[Intel XE#5545]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5545
[Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#5854]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5854
[Intel XE#6128]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6128
[Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
[Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#6569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6569
[Intel XE#6652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6652
[Intel XE#6874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6874
[Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7130
[Intel XE#7136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7136
[Intel XE#7138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7138
[Intel XE#7140]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7140
[Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
[Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
[Intel XE#7325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7325
[Intel XE#7340]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7340
[Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
[Intel XE#7347]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7347
[Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
[Intel XE#7354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7354
[Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
[Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
[Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
[Intel XE#7383]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7383
[Intel XE#7393]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7393
[Intel XE#7395]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7395
[Intel XE#7405]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7405
[Intel XE#7417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7417
[Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
[Intel XE#7442]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7442
[Intel XE#7445]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7445
[Intel XE#7571]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7571
[Intel XE#7578]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7578
[Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
[Intel XE#7636]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7636
[Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
[Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
[Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
Build changes
-------------
* IGT: IGT_8847 -> IGT_8848
* Linux: xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf -> xe-pw-161815v2
IGT_8847: 8847
IGT_8848: 8848
xe-4852-d873f0156bd08a3031097d459e2d3604bfe1b1bf: d873f0156bd08a3031097d459e2d3604bfe1b1bf
xe-pw-161815v2: 161815v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161815v2/index.html
[-- Attachment #2: Type: text/html, Size: 37881 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [RFC v2 1/7] drm/xe/vm: Track CPU_AUTORESET state in xe_vma
2026-04-06 8:58 ` [RFC v2 1/7] drm/xe/vm: Track CPU_AUTORESET state in xe_vma Arvind Yadav
@ 2026-04-30 4:07 ` Matthew Brost
0 siblings, 0 replies; 17+ messages in thread
From: Matthew Brost @ 2026-04-30 4:07 UTC (permalink / raw)
To: Arvind Yadav; +Cc: intel-xe, himal.prasad.ghimiray, thomas.hellstrom
On Mon, Apr 06, 2026 at 02:28:24PM +0530, Arvind Yadav wrote:
> Track MADVISE_AUTORESET CPU-only state in struct xe_vma with a dedicated
> cpu_autoreset_active bool.
>
> Add XE_VMA_CPU_AUTORESET_ACTIVE as a pipeline-only bit to carry this
> state through MAP/REMAP operations. Runtime state lives in
> xe_vma.cpu_autoreset_active rather than vma->gpuva.flags.
>
> The state is set at bind time and cleared on the first successful GPU
> fault.
>
> v2:
> - Move runtime state from gpuva.flags to xe_vma bool. (Matt)
> - Keep XE_VMA_CPU_AUTORESET_ACTIVE pipeline-only. (Matt)
>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
> ---
> drivers/gpu/drm/xe/xe_vm.h | 5 +++++
> drivers/gpu/drm/xe/xe_vm_types.h | 10 ++++++++++
> 2 files changed, 15 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
> index c5b900f38ded..bdf42083da86 100644
> --- a/drivers/gpu/drm/xe/xe_vm.h
> +++ b/drivers/gpu/drm/xe/xe_vm.h
> @@ -181,6 +181,11 @@ static inline bool xe_vma_is_userptr(struct xe_vma *vma)
> !xe_vma_is_cpu_addr_mirror(vma);
> }
>
Kernel doc
> +static inline bool xe_vma_has_cpu_autoreset_active(const struct xe_vma *vma)
> +{
lockdep_assert_held(&vm->lock);
?
Matt
> + return vma->cpu_autoreset_active;
> +}
> +
> struct xe_vma *xe_vm_find_vma_by_addr(struct xe_vm *vm, u64 page_addr);
>
> int xe_vma_need_vram_for_atomic(struct xe_device *xe, struct xe_vma *vma, bool is_atomic);
> diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
> index a94827d7fbec..6a19ecca5518 100644
> --- a/drivers/gpu/drm/xe/xe_vm_types.h
> +++ b/drivers/gpu/drm/xe/xe_vm_types.h
> @@ -52,6 +52,8 @@ struct xe_vm_pgtable_update_op;
> #define XE_VMA_DUMPABLE (DRM_GPUVA_USERBITS << 8)
> #define XE_VMA_SYSTEM_ALLOCATOR (DRM_GPUVA_USERBITS << 9)
> #define XE_VMA_MADV_AUTORESET (DRM_GPUVA_USERBITS << 10)
> +/* Pipeline-only bit used to carry cpu_autoreset_active through MAP/REMAP. */
> +#define XE_VMA_CPU_AUTORESET_ACTIVE (DRM_GPUVA_USERBITS << 11)
>
> /**
> * struct xe_vma_mem_attr - memory attributes associated with vma
> @@ -157,6 +159,14 @@ struct xe_vma {
> /** @tile_staged: bind is staged for this VMA */
> u8 tile_staged;
>
> + /**
> + * @cpu_autoreset_active: CPU mirror VMA is still CPU-only.
> + *
> + * Set at bind time and cleared on the first successful GPU fault.
> + * Protected by vm->lock.
> + */
> + bool cpu_autoreset_active;
> +
> /**
> * @skip_invalidation: Used in madvise to avoid invalidation
> * if mem attributes doesn't change
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [RFC v2 3/7] drm/xe/svm: Clear CPU_AUTORESET_ACTIVE on first GPU fault
2026-04-06 8:58 ` [RFC v2 3/7] drm/xe/svm: Clear CPU_AUTORESET_ACTIVE on first GPU fault Arvind Yadav
@ 2026-04-30 4:26 ` Matthew Brost
0 siblings, 0 replies; 17+ messages in thread
From: Matthew Brost @ 2026-04-30 4:26 UTC (permalink / raw)
To: Arvind Yadav; +Cc: intel-xe, himal.prasad.ghimiray, thomas.hellstrom
On Mon, Apr 06, 2026 at 02:28:26PM +0530, Arvind Yadav wrote:
> CPU address mirror VMAs start with cpu_autoreset_active set, indicating
> they are still CPU-only.
>
> Clear cpu_autoreset_active after the first successful GPU fault so
> subsequent munmap follows the SVM path instead of the autoreset path.
>
> Do this in xe_svm_handle_pagefault() on the success path only.
> Prefetch faults that install no PTEs must not transition this state.
>
> v2:
> - Move xe_vma_gpu_touch() to the success path in
> xe_svm_handle_pagefault() so prefetch faults that find no range do
> not transition the state. (Matt)
> - Add xe_vma_gpu_touch() helper in xe_vm.h and use
> vma->cpu_autoreset_active instead of vma->gpuva.flags. (Matt)
>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
> ---
> drivers/gpu/drm/xe/xe_svm.c | 11 +++++++++++
> drivers/gpu/drm/xe/xe_vm.h | 13 +++++++++++++
> 2 files changed, 24 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
> index 5933b2b6392b..fd57c9d41db8 100644
> --- a/drivers/gpu/drm/xe/xe_svm.c
> +++ b/drivers/gpu/drm/xe/xe_svm.c
> @@ -1388,6 +1388,9 @@ int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
> bool atomic)
> {
> int need_vram, ret;
> +
> + lockdep_assert_held_write(&vm->lock);
> +
This looks unrelated... and will change here [1] to read mode.
[1] https://patchwork.freedesktop.org/patch/707294/?series=162167&rev=4
So I'd say drop this part.
> retry:
> need_vram = xe_vma_need_vram_for_atomic(vm->xe, vma, atomic);
> if (need_vram < 0)
> @@ -1406,6 +1409,14 @@ int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>
> goto retry;
> }
> +
> + /*
> + * Mark the VMA as GPU-touched only after a successful fault-in.
> + * Prefetch faults that find no range must not transition this state.
> + */
> + if (!ret && xe_vma_has_cpu_autoreset_active(vma))
> + xe_vma_gpu_touch(vma);
> +
> return ret;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
> index bdf42083da86..8d45f896f90b 100644
> --- a/drivers/gpu/drm/xe/xe_vm.h
> +++ b/drivers/gpu/drm/xe/xe_vm.h
> @@ -441,4 +441,17 @@ static inline struct drm_exec *xe_vm_validation_exec(struct xe_vm *vm)
> ((READ_ONCE(tile_present) & ~READ_ONCE(tile_invalidated)) & BIT((tile)->id))
>
> void xe_vma_mem_attr_copy(struct xe_vma_mem_attr *to, struct xe_vma_mem_attr *from);
> +
> +/**
> + * xe_vma_gpu_touch() - Mark a VMA as no longer CPU-only
> + * @vma: VMA to update
> + *
> + * Clear cpu_autoreset_active after the first successful GPU fault-in.
> + * Caller must hold vm->lock in write mode.
> + */
> +static inline void xe_vma_gpu_touch(struct xe_vma *vma)
> +{
> + lockdep_assert_held_write(&xe_vma_vm(vma)->lock);
> + vma->cpu_autoreset_active = false;
Write mode VM lock seems fine for now, but will likely have to change
this to vma->fault_lock with [1]...
Also IMO the caller adjusting this is too late. Adjusting auto-reset
likely should be basically be the first thing handler does, moved to the
xe_pagefault layer... I noticed in [1] the VMA more than likely needs to
be refcounted but that's a different issue.
Lastly - when we call xe_vma_gpu_touch and go from cpu_autoreset_active
1 -> 0 shouldn't we remove the auto-reset notifier [2] [3]? Keeping
notifier around is a non-zero cost as these are entiries in interval
tree the core MM walks for every notifier trigger, so I think deleting
the notifier part makes sense if this is possible - still wrapping my
head around [2] [3], so take this as a suggestion.
Matt
[2] https://patchwork.freedesktop.org/patch/716552/?series=161815&rev=2
[3] https://patchwork.freedesktop.org/patch/716553/?series=161815&rev=2
> +}
> #endif
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [RFC v2 2/7] drm/xe/vm: Preserve cpu_autoreset_active across GPUVA operations
2026-04-06 8:58 ` [RFC v2 2/7] drm/xe/vm: Preserve cpu_autoreset_active across GPUVA operations Arvind Yadav
@ 2026-04-30 4:29 ` Matthew Brost
0 siblings, 0 replies; 17+ messages in thread
From: Matthew Brost @ 2026-04-30 4:29 UTC (permalink / raw)
To: Arvind Yadav; +Cc: intel-xe, himal.prasad.ghimiray, thomas.hellstrom
On Mon, Apr 06, 2026 at 02:28:25PM +0530, Arvind Yadav wrote:
> GPUVA split and remap rebuild VMAs using XE_VMA_CREATE_MASK, which does
> not carry runtime-only state. Forward XE_VMA_CPU_AUTORESET_ACTIVE through
> the pipeline so xe_vma_create() restores cpu_autoreset_active in the new
> VMA.
>
> Also preserve the effective PAT index on REMAP so madvise-applied
> overrides survive splits.
>
> Relax XE_WARN_ON in the UNMAP path to allow non-default attributes on
> cpu_autoreset_active VMAs.
>
> Add xe_vma_effective_create_flags() to centralise flag propagation.
>
> v2:
> - Move runtime state to xe_vma bool and keep
> XE_VMA_CPU_AUTORESET_ACTIVE as pipeline-only. (Matt)
> - Add xe_vma_effective_create_flags() to centralise flag handling.
>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
> ---
> drivers/gpu/drm/xe/xe_vm.c | 52 +++++++++++++++++++++++++++++++++-----
> 1 file changed, 45 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index 2408b547ca3d..65425f2f1bf1 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -1106,7 +1106,9 @@ static struct xe_vma *xe_vma_create(struct xe_vm *vm,
> vma->gpuva.vm = &vm->gpuvm;
> vma->gpuva.va.addr = start;
> vma->gpuva.va.range = end - start + 1;
> - vma->gpuva.flags = flags;
> + /* Pipeline-only; runtime state lives in vma->cpu_autoreset_active. */
> + vma->gpuva.flags = flags & ~XE_VMA_CPU_AUTORESET_ACTIVE;
> + vma->cpu_autoreset_active = !!(flags & XE_VMA_CPU_AUTORESET_ACTIVE);
Should we only cpu_autoreset_active when the attributes are not the
default and is xe_vma_is_cpu_addr_mirror(), I believe that is the only
place where this relavent, right?
Matt
>
> for_each_tile(tile, vm->xe, id)
> vma->tile_mask |= 0x1 << id;
> @@ -2454,8 +2456,10 @@ vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_vma_ops *vops,
> op->map.vma_flags |= XE_VMA_SYSTEM_ALLOCATOR;
> if (flags & DRM_XE_VM_BIND_FLAG_DUMPABLE)
> op->map.vma_flags |= XE_VMA_DUMPABLE;
> - if (flags & DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET)
> + if (flags & DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET) {
> op->map.vma_flags |= XE_VMA_MADV_AUTORESET;
> + op->map.vma_flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
> + }
> op->map.request_decompress = flags & DRM_XE_VM_BIND_FLAG_DECOMPRESS;
> op->map.pat_index = pat_index;
> op->map.invalidate_on_bind =
> @@ -2775,6 +2779,12 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct drm_gpuva_ops *ops,
> };
>
> flags |= op->map.vma_flags & XE_VMA_CREATE_MASK;
> + /*
> + * Pipeline-only flag; forward explicitly so xe_vma_create()
> + * restores state.
> + */
> + if (op->map.vma_flags & XE_VMA_CPU_AUTORESET_ACTIVE)
> + flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
>
> vma = new_vma(vm, &op->base.map, &default_attr,
> flags);
> @@ -2817,6 +2827,10 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct drm_gpuva_ops *ops,
> op->remap.old_range = op->remap.range;
>
> flags |= op->base.remap.unmap->va->flags & XE_VMA_CREATE_MASK;
> + /* Pipeline-only; forward explicitly. */
> + if (xe_vma_has_cpu_autoreset_active(old))
> + flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
> +
> if (op->base.remap.prev) {
> vma = new_vma(vm, op->base.remap.prev,
> &old->attr, flags);
> @@ -4659,6 +4673,20 @@ int xe_vma_need_vram_for_atomic(struct xe_device *xe, struct xe_vma *vma, bool i
> }
> }
>
> +/*
> + * Returns vma->gpuva.flags with XE_VMA_CPU_AUTORESET_ACTIVE injected if
> + * the runtime state is set, for passing through MAP/REMAP pipelines.
> + */
> +static unsigned int xe_vma_effective_create_flags(struct xe_vma *vma)
> +{
> + unsigned int flags = vma->gpuva.flags;
> +
> + if (xe_vma_has_cpu_autoreset_active(vma))
> + flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
> +
> + return flags;
> +}
> +
> static int xe_vm_alloc_vma(struct xe_vm *vm,
> struct drm_gpuvm_map_req *map_req,
> bool is_madvise)
> @@ -4694,19 +4722,25 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,
> if (!is_madvise) {
> if (__op->op == DRM_GPUVA_OP_UNMAP) {
> vma = gpuva_to_vma(op->base.unmap.va);
> - XE_WARN_ON(!xe_vma_has_default_mem_attrs(vma));
> + /* Attributes must be default on UNMAP; CPU-only VMAs are exempt. */
> + XE_WARN_ON(!xe_vma_has_default_mem_attrs(vma) &&
> + !xe_vma_has_cpu_autoreset_active(vma));
> default_pat = vma->attr.default_pat_index;
> - vma_flags = vma->gpuva.flags;
> + vma_flags = xe_vma_effective_create_flags(vma);
> }
>
> if (__op->op == DRM_GPUVA_OP_REMAP) {
> vma = gpuva_to_vma(op->base.remap.unmap->va);
> - default_pat = vma->attr.default_pat_index;
> - vma_flags = vma->gpuva.flags;
> + /* Preserve current PAT index, not default, for remap */
> + default_pat = vma->attr.pat_index;
> + vma_flags = xe_vma_effective_create_flags(vma);
> }
>
> if (__op->op == DRM_GPUVA_OP_MAP) {
> op->map.vma_flags |= vma_flags & XE_VMA_CREATE_MASK;
> + /* Pipeline-only; forward explicitly. */
> + if (vma_flags & XE_VMA_CPU_AUTORESET_ACTIVE)
> + op->map.vma_flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
> op->map.pat_index = default_pat;
> }
> } else {
> @@ -4715,10 +4749,11 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,
> xe_assert(vm->xe, !remap_op);
> xe_assert(vm->xe, xe_vma_has_no_bo(vma));
> remap_op = true;
> - vma_flags = vma->gpuva.flags;
> + vma_flags = xe_vma_effective_create_flags(vma);
> }
>
> if (__op->op == DRM_GPUVA_OP_MAP) {
> + /* Madvise MAP follows REMAP (split/merge). */
> xe_assert(vm->xe, remap_op);
> remap_op = false;
> /*
> @@ -4728,6 +4763,9 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,
> * unmapping.
> */
> op->map.vma_flags |= vma_flags & XE_VMA_CREATE_MASK;
> + /* Pipeline-only; forward explicitly. */
> + if (vma_flags & XE_VMA_CPU_AUTORESET_ACTIVE)
> + op->map.vma_flags |= XE_VMA_CPU_AUTORESET_ACTIVE;
> }
> }
> print_op(vm->xe, __op);
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [RFC v2 7/7] drm/xe/svm: Correct memory attribute reset for partial unmap
2026-04-06 8:58 ` [RFC v2 7/7] drm/xe/svm: Correct memory attribute reset for partial unmap Arvind Yadav
@ 2026-04-30 5:02 ` Matthew Brost
2026-04-30 5:08 ` Matthew Brost
0 siblings, 1 reply; 17+ messages in thread
From: Matthew Brost @ 2026-04-30 5:02 UTC (permalink / raw)
To: Arvind Yadav; +Cc: intel-xe, himal.prasad.ghimiray, thomas.hellstrom
On Mon, Apr 06, 2026 at 02:28:30PM +0530, Arvind Yadav wrote:
> From: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>
> When performing a partial unmap of an SVM range, the memory attributes
> were being reset for the entire range instead of just the portion
> being unmapped. This could lead to unintended side effects and behaviour.
>
> Fix this by restricting the attribute reset to only the affected subrange
> that is being unmapped.
>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
> ---
> drivers/gpu/drm/xe/xe_svm.c | 56 +++++++++++++++++++++++++++----------
> drivers/gpu/drm/xe/xe_svm.h | 10 +++++++
> 2 files changed, 52 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
> index 89668ada38ca..f533cddf4d2b 100644
> --- a/drivers/gpu/drm/xe/xe_svm.c
> +++ b/drivers/gpu/drm/xe/xe_svm.c
> @@ -58,6 +58,8 @@ void *xe_svm_private_page_owner(struct xe_vm *vm, bool force_smem)
> return force_smem ? NULL : vm->svm.peer.owner;
> }
>
> +#define XE_SVM_ATTR_RETRY_MAX 3
> +
> static bool xe_svm_range_in_vram(struct xe_svm_range *range)
> {
> /*
> @@ -127,15 +129,23 @@ static void xe_svm_range_free(struct drm_gpusvm_range *range)
> kfree(range);
> }
>
> +static void xe_svm_range_set_unmapped(struct xe_svm_range *range,
> + const struct mmu_notifier_range *mmu_range)
> +{
> + drm_gpusvm_range_set_unmapped(&range->base, mmu_range);
> + if (range->base.pages.flags.partial_unmap) {
> + range->partial_unmap.start = max(xe_svm_range_start(range), mmu_range->start);
> + range->partial_unmap.end = min(xe_svm_range_end(range), mmu_range->end);
> + }
Can you blindly set range->partial_unmap.start/end here? More below?
> +}
> +
> static void
> xe_svm_garbage_collector_add_range(struct xe_vm *vm, struct xe_svm_range *range,
> const struct mmu_notifier_range *mmu_range)
> {
> struct xe_device *xe = vm->xe;
>
> - range_debug(range, "GARBAGE COLLECTOR ADD");
I don't think you should delete the above debug statement.
> -
> - drm_gpusvm_range_set_unmapped(&range->base, mmu_range);
> + xe_svm_range_set_unmapped(range, mmu_range);
>
> spin_lock(&vm->svm.garbage_collector.lock);
> if (list_empty(&range->garbage_collector_link))
> @@ -380,9 +390,10 @@ static int xe_svm_range_set_default_attr(struct xe_vm *vm, u64 start, u64 end)
> static int xe_svm_garbage_collector(struct xe_vm *vm)
> {
> struct xe_svm_range *range;
> - u64 range_start;
> - u64 range_end;
> + u64 unmap_start;
> + u64 unmap_end;
> int err, ret = 0;
> + int retry_count;
>
> lockdep_assert_held_write(&vm->lock);
>
> @@ -397,8 +408,13 @@ static int xe_svm_garbage_collector(struct xe_vm *vm)
> if (!range)
> break;
>
> - range_start = xe_svm_range_start(range);
> - range_end = xe_svm_range_end(range);
> + if (range->base.pages.flags.partial_unmap) {
> + unmap_start = range->partial_unmap.start;
> + unmap_end = range->partial_unmap.end;
Then here blindly use range->partial_unmap.start/end?
Matt
> + } else {
> + unmap_start = xe_svm_range_start(range);
> + unmap_end = xe_svm_range_end(range);
> + }
>
> list_del(&range->garbage_collector_link);
> spin_unlock(&vm->svm.garbage_collector.lock);
> @@ -412,13 +428,25 @@ static int xe_svm_garbage_collector(struct xe_vm *vm)
> return err;
> }
>
> - err = xe_svm_range_set_default_attr(vm, range_start, range_end);
> - if (err) {
> - if (err == -EAGAIN)
> - ret = -EAGAIN;
> - else
> - return err;
> - }
> + /*
> + * Retry set_default_attr on -EAGAIN (VMA was recreated).
> + * Limit retries to prevent infinite loop.
> + */
> + retry_count = 0;
> +
> + do {
> + err = xe_svm_range_set_default_attr(vm, unmap_start, unmap_end);
> + if (err == -EAGAIN && ++retry_count > XE_SVM_ATTR_RETRY_MAX) {
> + drm_err(&vm->xe->drm,
> + "SET_ATTR retry limit exceeded for [0x%llx-0x%llx]\n",
> + unmap_start, unmap_end);
> + xe_vm_kill(vm, true);
> + return -EIO;
> + }
> + } while (err == -EAGAIN);
> +
> + if (err)
> + return err;
> }
> spin_unlock(&vm->svm.garbage_collector.lock);
>
> diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
> index b7b8eeacf196..4651e044cf53 100644
> --- a/drivers/gpu/drm/xe/xe_svm.h
> +++ b/drivers/gpu/drm/xe/xe_svm.h
> @@ -46,6 +46,16 @@ struct xe_svm_range {
> * range. Protected by GPU SVM notifier lock.
> */
> u8 tile_invalidated;
> + /**
> + * @partial_unmap: Structure to hold partial unmap range info.
> + * Valid only if partial unmap is in effect.
> + */
> + struct {
> + /** @start: Start address of the partial unmap range */
> + u64 start;
> + /** @end: End address of the partial unmap range */
> + u64 end;
> + } partial_unmap;
> };
>
> /**
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [RFC v2 7/7] drm/xe/svm: Correct memory attribute reset for partial unmap
2026-04-30 5:02 ` Matthew Brost
@ 2026-04-30 5:08 ` Matthew Brost
0 siblings, 0 replies; 17+ messages in thread
From: Matthew Brost @ 2026-04-30 5:08 UTC (permalink / raw)
To: Arvind Yadav; +Cc: intel-xe, himal.prasad.ghimiray, thomas.hellstrom
On Wed, Apr 29, 2026 at 10:02:48PM -0700, Matthew Brost wrote:
Sorry double reply...
> On Mon, Apr 06, 2026 at 02:28:30PM +0530, Arvind Yadav wrote:
> > From: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> >
> > When performing a partial unmap of an SVM range, the memory attributes
> > were being reset for the entire range instead of just the portion
> > being unmapped. This could lead to unintended side effects and behaviour.
> >
> > Fix this by restricting the attribute reset to only the affected subrange
> > that is being unmapped.
> >
> > Cc: Matthew Brost <matthew.brost@intel.com>
> > Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> > Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> > Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
> > ---
> > drivers/gpu/drm/xe/xe_svm.c | 56 +++++++++++++++++++++++++++----------
> > drivers/gpu/drm/xe/xe_svm.h | 10 +++++++
> > 2 files changed, 52 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
> > index 89668ada38ca..f533cddf4d2b 100644
> > --- a/drivers/gpu/drm/xe/xe_svm.c
> > +++ b/drivers/gpu/drm/xe/xe_svm.c
> > @@ -58,6 +58,8 @@ void *xe_svm_private_page_owner(struct xe_vm *vm, bool force_smem)
> > return force_smem ? NULL : vm->svm.peer.owner;
> > }
> >
> > +#define XE_SVM_ATTR_RETRY_MAX 3
> > +
> > static bool xe_svm_range_in_vram(struct xe_svm_range *range)
> > {
> > /*
> > @@ -127,15 +129,23 @@ static void xe_svm_range_free(struct drm_gpusvm_range *range)
> > kfree(range);
> > }
> >
> > +static void xe_svm_range_set_unmapped(struct xe_svm_range *range,
> > + const struct mmu_notifier_range *mmu_range)
> > +{
> > + drm_gpusvm_range_set_unmapped(&range->base, mmu_range);
> > + if (range->base.pages.flags.partial_unmap) {
> > + range->partial_unmap.start = max(xe_svm_range_start(range), mmu_range->start);
> > + range->partial_unmap.end = min(xe_svm_range_end(range), mmu_range->end);
> > + }
>
> Can you blindly set range->partial_unmap.start/end here? More below?
>
> > +}
> > +
> > static void
> > xe_svm_garbage_collector_add_range(struct xe_vm *vm, struct xe_svm_range *range,
> > const struct mmu_notifier_range *mmu_range)
> > {
> > struct xe_device *xe = vm->xe;
> >
> > - range_debug(range, "GARBAGE COLLECTOR ADD");
>
> I don't think you should delete the above debug statement.
>
> > -
> > - drm_gpusvm_range_set_unmapped(&range->base, mmu_range);
> > + xe_svm_range_set_unmapped(range, mmu_range);
> >
> > spin_lock(&vm->svm.garbage_collector.lock);
> > if (list_empty(&range->garbage_collector_link))
> > @@ -380,9 +390,10 @@ static int xe_svm_range_set_default_attr(struct xe_vm *vm, u64 start, u64 end)
> > static int xe_svm_garbage_collector(struct xe_vm *vm)
> > {
> > struct xe_svm_range *range;
> > - u64 range_start;
> > - u64 range_end;
> > + u64 unmap_start;
> > + u64 unmap_end;
> > int err, ret = 0;
> > + int retry_count;
> >
> > lockdep_assert_held_write(&vm->lock);
> >
> > @@ -397,8 +408,13 @@ static int xe_svm_garbage_collector(struct xe_vm *vm)
> > if (!range)
> > break;
> >
> > - range_start = xe_svm_range_start(range);
> > - range_end = xe_svm_range_end(range);
> > + if (range->base.pages.flags.partial_unmap) {
> > + unmap_start = range->partial_unmap.start;
> > + unmap_end = range->partial_unmap.end;
>
> Then here blindly use range->partial_unmap.start/end?
>
> Matt
>
> > + } else {
> > + unmap_start = xe_svm_range_start(range);
> > + unmap_end = xe_svm_range_end(range);
> > + }
> >
> > list_del(&range->garbage_collector_link);
> > spin_unlock(&vm->svm.garbage_collector.lock);
> > @@ -412,13 +428,25 @@ static int xe_svm_garbage_collector(struct xe_vm *vm)
> > return err;
> > }
> >
> > - err = xe_svm_range_set_default_attr(vm, range_start, range_end);
> > - if (err) {
> > - if (err == -EAGAIN)
> > - ret = -EAGAIN;
> > - else
> > - return err;
> > - }
> > + /*
> > + * Retry set_default_attr on -EAGAIN (VMA was recreated).
> > + * Limit retries to prevent infinite loop.
> > + */
> > + retry_count = 0;
> > +
> > + do {
> > + err = xe_svm_range_set_default_attr(vm, unmap_start, unmap_end);
> > + if (err == -EAGAIN && ++retry_count > XE_SVM_ATTR_RETRY_MAX) {
> > + drm_err(&vm->xe->drm,
> > + "SET_ATTR retry limit exceeded for [0x%llx-0x%llx]\n",
> > + unmap_start, unmap_end);
> > + xe_vm_kill(vm, true);
> > + return -EIO;
> > + }
> > + } while (err == -EAGAIN);
> > +
> > + if (err)
> > + return err;
> > }
> > spin_unlock(&vm->svm.garbage_collector.lock);
> >
> > diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
> > index b7b8eeacf196..4651e044cf53 100644
> > --- a/drivers/gpu/drm/xe/xe_svm.h
> > +++ b/drivers/gpu/drm/xe/xe_svm.h
> > @@ -46,6 +46,16 @@ struct xe_svm_range {
> > * range. Protected by GPU SVM notifier lock.
> > */
> > u8 tile_invalidated;
> > + /**
> > + * @partial_unmap: Structure to hold partial unmap range info.
> > + * Valid only if partial unmap is in effect.
> > + */
> > + struct {
> > + /** @start: Start address of the partial unmap range */
> > + u64 start;
> > + /** @end: End address of the partial unmap range */
> > + u64 end;
> > + } partial_unmap;
Also it is a bit of shame to add 2 extra QWs in storage here...
We likely can find some bits in drm_gpusvm_pages, drm_gpusvm_range which
are no longer relavent after unmap to create a union with start / end.
Below are two candiates which I believe after
'drm_gpusvm_range_set_unmapped' would be unused.
147 struct drm_gpusvm_pages {
148 struct drm_pagemap_addr *dma_addr;
149 struct drm_pagemap *dpagemap;
This is micro-optimization thing so could be deferred but also perhaps
makes sense to normalize partial unmaps now at gpusvm level.
Matt
> > };
> >
> > /**
> > --
> > 2.43.0
> >
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2026-04-30 5:08 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-06 8:58 [RFC v2 0/7] drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap Arvind Yadav
2026-04-06 8:58 ` [RFC v2 1/7] drm/xe/vm: Track CPU_AUTORESET state in xe_vma Arvind Yadav
2026-04-30 4:07 ` Matthew Brost
2026-04-06 8:58 ` [RFC v2 2/7] drm/xe/vm: Preserve cpu_autoreset_active across GPUVA operations Arvind Yadav
2026-04-30 4:29 ` Matthew Brost
2026-04-06 8:58 ` [RFC v2 3/7] drm/xe/svm: Clear CPU_AUTORESET_ACTIVE on first GPU fault Arvind Yadav
2026-04-30 4:26 ` Matthew Brost
2026-04-06 8:58 ` [RFC v2 4/7] drm/xe/vm: Add madvise autoreset interval notifier worker infrastructure Arvind Yadav
2026-04-06 8:58 ` [RFC v2 5/7] drm/xe/vm: Deactivate madvise notifier on GPU touch Arvind Yadav
2026-04-06 8:58 ` [RFC v2 6/7] drm/xe/vm: Wire MADVISE_AUTORESET notifiers into VM lifecycle Arvind Yadav
2026-04-06 8:58 ` [RFC v2 7/7] drm/xe/svm: Correct memory attribute reset for partial unmap Arvind Yadav
2026-04-30 5:02 ` Matthew Brost
2026-04-30 5:08 ` Matthew Brost
2026-04-06 9:04 ` ✗ CI.checkpatch: warning for drm/xe/svm: Add MMU notifier-based madvise autoreset on munmap (rev2) Patchwork
2026-04-06 9:06 ` ✓ CI.KUnit: success " Patchwork
2026-04-06 9:54 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-06 12:36 ` ✓ Xe.CI.FULL: " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox