* [PATCH v2 0/4] drm/exec: drm_exec polishing
@ 2026-05-20 10:16 Thomas Hellström
2026-05-20 10:16 ` [PATCH v2 1/4] drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse] Thomas Hellström
` (8 more replies)
0 siblings, 9 replies; 15+ messages in thread
From: Thomas Hellström @ 2026-05-20 10:16 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Felix Kuehling, Alex Deucher,
Christian König, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno
During the work towards enabling exhaustive eviction using full
ww locking in TTM, Christian indicated that the path for the
drm_exec moving forward was to be a full drm_exec helper with
things like userptr validation rather than a WW transaction
abstraction. The idea was then briefly discussed to craft a
WW transaction helper and then subclass that with drm_exec
with the idea that the WW transaction helper could be used in
TTM for eviction and for other uses that didn't mandate a full
exec sequence.
Regardless whether that actually happens or not, this series
aims to clean up abuses of drm_exec internals in drivers
so that future development of drm_exec isn't blocked by
such driver usage.
Except for patch 2 which is a small cleanup only.
v2:
- An drm/msm patch was already merged.
- Use a unique id for the loop variable (patch 1) (Christian)
- Move assignment to declaration (patch 2) (Christian)
- Declare the retry pointer as void *const. (patch 2)
- Only allow if the drm_exec context is newly initialized. (patch 3)
(Christian)
- Fix amdgpu compile error (patch 4) (Intel CI)
- Update the commit message (patch 4)
Thomas Hellström (4):
drm/exec: Remove the index parameter from
drm_exec_for_each_locked_obj[_reverse]
drm/exec: Make the drm_exec_until_all_locked() macro more readable
drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer
drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct
drm_exec::ticket
.../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 15 ++--
.../drm/amd/amdgpu/amdgpu_eviction_fence.c | 3 +-
drivers/gpu/drm/drm_exec.c | 9 +--
drivers/gpu/drm/drm_gpuvm.c | 3 +-
drivers/gpu/drm/xe/xe_validation.c | 4 +-
drivers/gpu/drm/xe/xe_validation.h | 2 +-
drivers/gpu/drm/xe/xe_vm.c | 3 +-
include/drm/drm_exec.h | 71 ++++++++++++++-----
9 files changed, 70 insertions(+), 44 deletions(-)
--
2.54.0
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 1/4] drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse]
2026-05-20 10:16 [PATCH v2 0/4] drm/exec: drm_exec polishing Thomas Hellström
@ 2026-05-20 10:16 ` Thomas Hellström
2026-05-20 11:32 ` Christian König
2026-05-20 10:16 ` [PATCH v2 2/4] drm/exec: Make the drm_exec_until_all_locked() macro more readable Thomas Hellström
` (7 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Thomas Hellström @ 2026-05-20 10:16 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Felix Kuehling, Alex Deucher,
Christian König, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno
Nobody makes any use of it. Possible internal future users can
instead use the _index variable. External users shouldn't use
it since the array it's pointing into is internal drm_exec state.
v2:
- Use a unique id for the loop variable (Christian)
Assisted-by: GitHub Copilot:claude-sonnet-4.6
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 9 +++------
.../drm/amd/amdgpu/amdgpu_eviction_fence.c | 3 +--
drivers/gpu/drm/drm_exec.c | 6 ++----
drivers/gpu/drm/drm_gpuvm.c | 3 +--
drivers/gpu/drm/xe/xe_vm.c | 3 +--
include/drm/drm_exec.h | 20 +++++++++++--------
6 files changed, 20 insertions(+), 24 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 32af8cce3df8..97a851ae7bd8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -850,7 +850,6 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
struct amdgpu_vm *vm = &fpriv->vm;
struct amdgpu_bo_list_entry *e;
struct drm_gem_object *obj;
- unsigned long index;
unsigned int i;
int r;
@@ -961,7 +960,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
goto out_free_user_pages;
}
- drm_exec_for_each_locked_object(&p->exec, index, obj) {
+ drm_exec_for_each_locked_object(&p->exec, obj) {
r = amdgpu_cs_bo_validate(p, gem_to_amdgpu_bo(obj));
if (unlikely(r))
goto out_free_user_pages;
@@ -1201,7 +1200,6 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p)
struct drm_gpu_scheduler *sched;
struct drm_gem_object *obj;
struct dma_fence *fence;
- unsigned long index;
unsigned int i;
int r;
@@ -1212,7 +1210,7 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p)
return r;
}
- drm_exec_for_each_locked_object(&p->exec, index, obj) {
+ drm_exec_for_each_locked_object(&p->exec, obj) {
struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
struct dma_resv *resv = bo->tbo.base.resv;
@@ -1281,7 +1279,6 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
struct amdgpu_job *leader = p->gang_leader;
struct amdgpu_bo_list_entry *e;
struct drm_gem_object *gobj;
- unsigned long index;
unsigned int i;
uint64_t seq;
int r;
@@ -1331,7 +1328,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
}
p->fence = dma_fence_get(&leader->base.s_fence->finished);
- drm_exec_for_each_locked_object(&p->exec, index, gobj) {
+ drm_exec_for_each_locked_object(&p->exec, gobj) {
ttm_bo_move_to_lru_tail_unlocked(&gem_to_amdgpu_bo(gobj)->tbo);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
index 4c5e38dea4c2..f6b7522c3c82 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
@@ -121,7 +121,6 @@ int amdgpu_evf_mgr_rearm(struct amdgpu_eviction_fence_mgr *evf_mgr,
{
struct amdgpu_eviction_fence *ev_fence;
struct drm_gem_object *obj;
- unsigned long index;
/* Create and initialize a new eviction fence */
ev_fence = kzalloc_obj(*ev_fence);
@@ -140,7 +139,7 @@ int amdgpu_evf_mgr_rearm(struct amdgpu_eviction_fence_mgr *evf_mgr,
evf_mgr->ev_fence = &ev_fence->base;
/* And add it to all existing BOs */
- drm_exec_for_each_locked_object(exec, index, obj) {
+ drm_exec_for_each_locked_object(exec, obj) {
struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
amdgpu_evf_mgr_attach_fence(evf_mgr, bo);
diff --git a/drivers/gpu/drm/drm_exec.c b/drivers/gpu/drm/drm_exec.c
index 8d0601400182..746210f3f6c2 100644
--- a/drivers/gpu/drm/drm_exec.c
+++ b/drivers/gpu/drm/drm_exec.c
@@ -24,7 +24,6 @@
*
* struct drm_gem_object *obj;
* struct drm_exec exec;
- * unsigned long index;
* int ret;
*
* drm_exec_init(&exec, DRM_EXEC_INTERRUPTIBLE_WAIT);
@@ -40,7 +39,7 @@
* goto error;
* }
*
- * drm_exec_for_each_locked_object(&exec, index, obj) {
+ * drm_exec_for_each_locked_object(&exec, obj) {
* dma_resv_add_fence(obj->resv, fence, DMA_RESV_USAGE_READ);
* ...
* }
@@ -56,9 +55,8 @@
static void drm_exec_unlock_all(struct drm_exec *exec)
{
struct drm_gem_object *obj;
- unsigned long index;
- drm_exec_for_each_locked_object_reverse(exec, index, obj) {
+ drm_exec_for_each_locked_object_reverse(exec, obj) {
dma_resv_unlock(obj->resv);
drm_gem_object_put(obj);
}
diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c
index 83020b6cf9ba..c422c5af1f4b 100644
--- a/drivers/gpu/drm/drm_gpuvm.c
+++ b/drivers/gpu/drm/drm_gpuvm.c
@@ -1557,9 +1557,8 @@ drm_gpuvm_resv_add_fence(struct drm_gpuvm *gpuvm,
enum dma_resv_usage extobj_usage)
{
struct drm_gem_object *obj;
- unsigned long index;
- drm_exec_for_each_locked_object(exec, index, obj) {
+ drm_exec_for_each_locked_object(exec, obj) {
dma_resv_assert_held(obj->resv);
dma_resv_add_fence(obj->resv, fence,
drm_gpuvm_is_extobj(gpuvm, obj) ?
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index b01f31ed4417..080c2fff0e95 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -373,7 +373,6 @@ int xe_vm_validate_rebind(struct xe_vm *vm, struct drm_exec *exec,
unsigned int num_fences)
{
struct drm_gem_object *obj;
- unsigned long index;
int ret;
do {
@@ -386,7 +385,7 @@ int xe_vm_validate_rebind(struct xe_vm *vm, struct drm_exec *exec,
return ret;
} while (!list_empty(&vm->gpuvm.evict.list));
- drm_exec_for_each_locked_object(exec, index, obj) {
+ drm_exec_for_each_locked_object(exec, obj) {
ret = dma_resv_reserve_fences(obj->resv, num_fences);
if (ret)
return ret;
diff --git a/include/drm/drm_exec.h b/include/drm/drm_exec.h
index aa786b828a0a..dee6ebdbe416 100644
--- a/include/drm/drm_exec.h
+++ b/include/drm/drm_exec.h
@@ -65,31 +65,35 @@ drm_exec_obj(struct drm_exec *exec, unsigned long index)
return index < exec->num_objects ? exec->objects[index] : NULL;
}
+/* Helper for drm_exec_for_each_locked_object(). Internal use only. */
+#define __drm_exec_for_each_locked_object(exec, obj, __index) \
+ for (unsigned long __index = 0; ((obj) = drm_exec_obj(exec, __index)); ++__index)
/**
* drm_exec_for_each_locked_object - iterate over all the locked objects
* @exec: drm_exec object
- * @index: unsigned long index for the iteration
* @obj: the current GEM object
*
* Iterate over all the locked GEM objects inside the drm_exec object.
*/
-#define drm_exec_for_each_locked_object(exec, index, obj) \
- for ((index) = 0; ((obj) = drm_exec_obj(exec, index)); ++(index))
+#define drm_exec_for_each_locked_object(exec, obj) \
+ __drm_exec_for_each_locked_object(exec, obj, __UNIQUE_ID(drm_exec))
+/* Helper for drm_exec_for_each_locked_object_reverse(). Internal use only. */
+#define __drm_exec_for_each_locked_object_reverse(exec, obj, __index) \
+ for (unsigned long __index = (exec)->num_objects - 1; \
+ ((obj) = drm_exec_obj(exec, __index)); --__index)
/**
* drm_exec_for_each_locked_object_reverse - iterate over all the locked
* objects in reverse locking order
* @exec: drm_exec object
- * @index: unsigned long index for the iteration
* @obj: the current GEM object
*
* Iterate over all the locked GEM objects inside the drm_exec object in
- * reverse locking order. Note that @index may go below zero and wrap,
+ * reverse locking order. Note that the internal index may wrap around,
* but that will be caught by drm_exec_obj(), returning a NULL object.
*/
-#define drm_exec_for_each_locked_object_reverse(exec, index, obj) \
- for ((index) = (exec)->num_objects - 1; \
- ((obj) = drm_exec_obj(exec, index)); --(index))
+#define drm_exec_for_each_locked_object_reverse(exec, obj) \
+ __drm_exec_for_each_locked_object_reverse(exec, obj, __UNIQUE_ID(drm_exec))
/**
* drm_exec_until_all_locked - loop until all GEM objects are locked
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 2/4] drm/exec: Make the drm_exec_until_all_locked() macro more readable
2026-05-20 10:16 [PATCH v2 0/4] drm/exec: drm_exec polishing Thomas Hellström
2026-05-20 10:16 ` [PATCH v2 1/4] drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse] Thomas Hellström
@ 2026-05-20 10:16 ` Thomas Hellström
2026-05-20 11:35 ` Christian König
2026-05-20 10:16 ` [PATCH v2 3/4] drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer Thomas Hellström
` (6 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Thomas Hellström @ 2026-05-20 10:16 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Felix Kuehling, Alex Deucher,
Christian König, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno
Use __UNIQUE_ID as done elsewhere in the kernel rather than a
hand-rolled __PASTE to craft a unique id.
Also use __maybe_unused rather than (void) to signify that a
variable, althrough written to, may not actually be used.
v2:
- Move assignment to declaration (Christian)
- Declare the retry pointer as void *const.
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
include/drm/drm_exec.h | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/include/drm/drm_exec.h b/include/drm/drm_exec.h
index dee6ebdbe416..18f84faabbb9 100644
--- a/include/drm/drm_exec.h
+++ b/include/drm/drm_exec.h
@@ -95,6 +95,17 @@ drm_exec_obj(struct drm_exec *exec, unsigned long index)
#define drm_exec_for_each_locked_object_reverse(exec, obj) \
__drm_exec_for_each_locked_object_reverse(exec, obj, __UNIQUE_ID(drm_exec))
+/*
+ * Helper to drm_exec_until_all_locked(). Don't use directly.
+ *
+ * Since labels can't be defined local to the loop's body we use a jump pointer
+ * to make sure that the retry is only used from within the loop's body.
+ */
+#define __drm_exec_until_all_locked(exec, _label) \
+_label: \
+ for (void *const __maybe_unused __drm_exec_retry_ptr = &&_label; \
+ drm_exec_cleanup(exec);)
+
/**
* drm_exec_until_all_locked - loop until all GEM objects are locked
* @exec: drm_exec object
@@ -102,17 +113,9 @@ drm_exec_obj(struct drm_exec *exec, unsigned long index)
* Core functionality of the drm_exec object. Loops until all GEM objects are
* locked and no more contention exists. At the beginning of the loop it is
* guaranteed that no GEM object is locked.
- *
- * Since labels can't be defined local to the loops body we use a jump pointer
- * to make sure that the retry is only used from within the loops body.
*/
#define drm_exec_until_all_locked(exec) \
-__PASTE(__drm_exec_, __LINE__): \
- for (void *__drm_exec_retry_ptr; ({ \
- __drm_exec_retry_ptr = &&__PASTE(__drm_exec_, __LINE__);\
- (void)__drm_exec_retry_ptr; \
- drm_exec_cleanup(exec); \
- });)
+ __drm_exec_until_all_locked(exec, __UNIQUE_ID(drm_exec))
/**
* drm_exec_retry_on_contention - restart the loop to grap all locks
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 3/4] drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer
2026-05-20 10:16 [PATCH v2 0/4] drm/exec: drm_exec polishing Thomas Hellström
2026-05-20 10:16 ` [PATCH v2 1/4] drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse] Thomas Hellström
2026-05-20 10:16 ` [PATCH v2 2/4] drm/exec: Make the drm_exec_until_all_locked() macro more readable Thomas Hellström
@ 2026-05-20 10:16 ` Thomas Hellström
2026-05-20 11:39 ` Christian König
2026-05-20 10:16 ` [PATCH v2 4/4] drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket Thomas Hellström
` (5 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Thomas Hellström @ 2026-05-20 10:16 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Felix Kuehling, Alex Deucher,
Christian König, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno
The xe driver was using the drm_exec retry pointer directly to
restart the locking loop after out-of-memory errors. This is
relying on undocumented behaviour.
Instead add a drm_exec_retry() macro that can be used in this
situation, and that also warns if the struct drm_exec is
not newly (re-)initialized.
Use that macro in xe.
v2:
- Only allow if the drm_exec context is newly initialized.
(Christian)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
drivers/gpu/drm/drm_exec.c | 3 ---
drivers/gpu/drm/xe/xe_validation.h | 2 +-
include/drm/drm_exec.h | 19 +++++++++++++++++++
3 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/drm_exec.c b/drivers/gpu/drm/drm_exec.c
index 746210f3f6c2..7988f5e7d56a 100644
--- a/drivers/gpu/drm/drm_exec.c
+++ b/drivers/gpu/drm/drm_exec.c
@@ -48,9 +48,6 @@
* See struct dma_exec for more details.
*/
-/* Dummy value used to initially enter the retry loop */
-#define DRM_EXEC_DUMMY ((void *)~0)
-
/* Unlock all objects and drop references */
static void drm_exec_unlock_all(struct drm_exec *exec)
{
diff --git a/drivers/gpu/drm/xe/xe_validation.h b/drivers/gpu/drm/xe/xe_validation.h
index a30e732c4d51..4cd955ce6cd2 100644
--- a/drivers/gpu/drm/xe/xe_validation.h
+++ b/drivers/gpu/drm/xe/xe_validation.h
@@ -146,7 +146,7 @@ bool xe_validation_should_retry(struct xe_validation_ctx *ctx, int *ret);
#define xe_validation_retry_on_oom(_ctx, _ret) \
do { \
if (xe_validation_should_retry(_ctx, _ret)) \
- goto *__drm_exec_retry_ptr; \
+ drm_exec_retry((_ctx)->exec); \
} while (0)
/**
diff --git a/include/drm/drm_exec.h b/include/drm/drm_exec.h
index 18f84faabbb9..99c7e1bb3c5b 100644
--- a/include/drm/drm_exec.h
+++ b/include/drm/drm_exec.h
@@ -9,6 +9,12 @@
#define DRM_EXEC_INTERRUPTIBLE_WAIT BIT(0)
#define DRM_EXEC_IGNORE_DUPLICATES BIT(1)
+/*
+ * Dummy value used to initially enter the retry loop.
+ * internal use only.
+ */
+#define DRM_EXEC_DUMMY ((void *)~0)
+
struct drm_gem_object;
/**
@@ -142,6 +148,19 @@ static inline bool drm_exec_is_contended(struct drm_exec *exec)
return !!exec->contended;
}
+/**
+ * drm_exec_retry() - Unconditionally restart the loop to grab all locks.
+ * @exec: drm_exec object
+ *
+ * Unconditionally retry the loop to lock all objects. For consistency,
+ * the exec object needs to be newly initialized.
+ */
+#define drm_exec_retry(_exec) \
+ do { \
+ WARN_ON((_exec)->contended != DRM_EXEC_DUMMY); \
+ goto *__drm_exec_retry_ptr; \
+ } while (0)
+
void drm_exec_init(struct drm_exec *exec, u32 flags, unsigned nr);
void drm_exec_fini(struct drm_exec *exec);
bool drm_exec_cleanup(struct drm_exec *exec);
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 4/4] drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket
2026-05-20 10:16 [PATCH v2 0/4] drm/exec: drm_exec polishing Thomas Hellström
` (2 preceding siblings ...)
2026-05-20 10:16 ` [PATCH v2 3/4] drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer Thomas Hellström
@ 2026-05-20 10:16 ` Thomas Hellström
2026-05-20 11:42 ` Christian König
2026-05-20 10:23 ` ✗ CI.checkpatch: warning for drm/exec: drm_exec polishing (rev2) Patchwork
` (4 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Thomas Hellström @ 2026-05-20 10:16 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Felix Kuehling, Alex Deucher,
Christian König, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno
Drivers were accessing this drm_exec member directly.
While that may seem harmless, it will require action if
the drm_exec utility is made a subclass of a dma-resv transaction
utility as outlined in the cover-letter.
Provide an accessor, drm_exec_ticket() to avoid that.
v2:
- Fix amdgpu compile error (Intel CI)
- Update the commit message.
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 ++--
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 6 +++---
drivers/gpu/drm/xe/xe_validation.c | 4 ++--
include/drm/drm_exec.h | 11 +++++++++++
4 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 72a5a29e63f6..d54794e5b18b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -2999,7 +2999,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence __rcu *
/* Validate PDs, PTs and evicted DMABuf imports last. Otherwise BO
* validations above would invalidate DMABuf imports again.
*/
- ret = process_validate_vms(process_info, &exec.ticket);
+ ret = process_validate_vms(process_info, drm_exec_ticket(&exec));
if (ret) {
pr_debug("Validating VMs failed, ret: %d\n", ret);
goto validate_map_fail;
@@ -3040,7 +3040,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence __rcu *
goto validate_map_fail;
}
- ret = amdgpu_vm_handle_moved(adev, peer_vm, &exec.ticket);
+ ret = amdgpu_vm_handle_moved(adev, peer_vm, drm_exec_ticket(&exec));
if (ret) {
dev_dbg(adev->dev,
"Memory eviction: handle moved failed, pid %8d. Try again.\n",
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 97a851ae7bd8..6ada57abce9d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1157,7 +1157,7 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p)
return r;
}
- r = amdgpu_vm_handle_moved(adev, vm, &p->exec.ticket);
+ r = amdgpu_vm_handle_moved(adev, vm, drm_exec_ticket(&p->exec));
if (r)
return r;
@@ -1359,7 +1359,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
cs->out.handle = seq;
leader->uf_sequence = seq;
- amdgpu_vm_bo_trace_cs(&fpriv->vm, &p->exec.ticket);
+ amdgpu_vm_bo_trace_cs(&fpriv->vm, drm_exec_ticket(&p->exec));
for (i = 0; i < p->gang_size; ++i) {
amdgpu_job_free_resources(p->jobs[i]);
trace_amdgpu_cs_ioctl(p->jobs[i]);
@@ -1794,7 +1794,7 @@ int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
*map = mapping;
/* Double check that the BO is reserved by this CS */
- if (dma_resv_locking_ctx((*bo)->tbo.base.resv) != &parser->exec.ticket)
+ if (dma_resv_locking_ctx((*bo)->tbo.base.resv) != drm_exec_ticket(&parser->exec))
return -EINVAL;
/* Make sure VRAM is allocated contigiously */
diff --git a/drivers/gpu/drm/xe/xe_validation.c b/drivers/gpu/drm/xe/xe_validation.c
index a611438eaafe..8dff4d0ec895 100644
--- a/drivers/gpu/drm/xe/xe_validation.c
+++ b/drivers/gpu/drm/xe/xe_validation.c
@@ -156,7 +156,7 @@ int xe_validation_ctx_init(struct xe_validation_ctx *ctx, struct xe_validation_d
#ifdef CONFIG_DEBUG_WW_MUTEX_SLOWPATH
/*
- * This abuses both drm_exec and ww_mutex internals and should be
+ * This abuses ww_mutex internals and should be
* replaced by checking for -EDEADLK when we can make TTM
* stop converting -EDEADLK to -ENOMEM.
* An alternative is to not have exhaustive eviction with
@@ -164,7 +164,7 @@ int xe_validation_ctx_init(struct xe_validation_ctx *ctx, struct xe_validation_d
*/
static bool xe_validation_contention_injected(struct drm_exec *exec)
{
- return !!exec->ticket.contending_lock;
+ return !!drm_exec_ticket(exec)->contending_lock;
}
#else
diff --git a/include/drm/drm_exec.h b/include/drm/drm_exec.h
index 99c7e1bb3c5b..8725ba92ff91 100644
--- a/include/drm/drm_exec.h
+++ b/include/drm/drm_exec.h
@@ -161,6 +161,17 @@ static inline bool drm_exec_is_contended(struct drm_exec *exec)
goto *__drm_exec_retry_ptr; \
} while (0)
+/**
+ * drm_exec_ticket - return the ww_acquire_ctx for this exec context
+ * @exec: drm_exec object
+ *
+ * Return: Pointer to the ww_acquire_ctx embedded in @exec.
+ */
+static inline struct ww_acquire_ctx *drm_exec_ticket(struct drm_exec *exec)
+{
+ return &exec->ticket;
+}
+
void drm_exec_init(struct drm_exec *exec, u32 flags, unsigned nr);
void drm_exec_fini(struct drm_exec *exec);
bool drm_exec_cleanup(struct drm_exec *exec);
--
2.54.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* ✗ CI.checkpatch: warning for drm/exec: drm_exec polishing (rev2)
2026-05-20 10:16 [PATCH v2 0/4] drm/exec: drm_exec polishing Thomas Hellström
` (3 preceding siblings ...)
2026-05-20 10:16 ` [PATCH v2 4/4] drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket Thomas Hellström
@ 2026-05-20 10:23 ` Patchwork
2026-05-20 10:24 ` ✓ CI.KUnit: success " Patchwork
` (3 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-05-20 10:23 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
== Series Details ==
Series: drm/exec: drm_exec polishing (rev2)
URL : https://patchwork.freedesktop.org/series/164149/
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
061140b9bc586ae7f40abc1249c97e1cc72d1b9d
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit b1fe12b99eb11c5a5dc2f065129b1289eddd5432
Author: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Date: Wed May 20 12:16:16 2026 +0200
drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket
Drivers were accessing this drm_exec member directly.
While that may seem harmless, it will require action if
the drm_exec utility is made a subclass of a dma-resv transaction
utility as outlined in the cover-letter.
Provide an accessor, drm_exec_ticket() to avoid that.
v2:
- Fix amdgpu compile error (Intel CI)
- Update the commit message.
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
+ /mt/dim checkpatch 7d39df83e93eba14a23b1fb6ffff076eb191f27b drm-intel
b208eb1dab03 drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse]
-:17: WARNING:BAD_SIGN_OFF: Assisted-by expects 'AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2]' format
#17:
Assisted-by: GitHub Copilot:claude-sonnet-4.6
-:173: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__index' - possible side-effects?
#173: FILE: include/drm/drm_exec.h:69:
+#define __drm_exec_for_each_locked_object(exec, obj, __index) \
+ for (unsigned long __index = 0; ((obj) = drm_exec_obj(exec, __index)); ++__index)
-:189: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'exec' - possible side-effects?
#189: FILE: include/drm/drm_exec.h:82:
+#define __drm_exec_for_each_locked_object_reverse(exec, obj, __index) \
+ for (unsigned long __index = (exec)->num_objects - 1; \
+ ((obj) = drm_exec_obj(exec, __index)); --__index)
-:189: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__index' - possible side-effects?
#189: FILE: include/drm/drm_exec.h:82:
+#define __drm_exec_for_each_locked_object_reverse(exec, obj, __index) \
+ for (unsigned long __index = (exec)->num_objects - 1; \
+ ((obj) = drm_exec_obj(exec, __index)); --__index)
total: 0 errors, 1 warnings, 3 checks, 153 lines checked
4cf0062dd99c drm/exec: Make the drm_exec_until_all_locked() macro more readable
-:36: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#36: FILE: include/drm/drm_exec.h:104:
+#define __drm_exec_until_all_locked(exec, _label) \
+_label: \
+ for (void *const __maybe_unused __drm_exec_retry_ptr = &&_label; \
+ drm_exec_cleanup(exec);)
BUT SEE:
do {} while (0) advice is over-stated in a few situations:
The more obvious case is macros, like MODULE_PARM_DESC, invoked at
file-scope, where C disallows code (it must be in functions). See
$exceptions if you have one to add by name.
More troublesome is declarative macros used at top of new scope,
like DECLARE_PER_CPU. These might just compile with a do-while-0
wrapper, but would be incorrect. Most of these are handled by
detecting struct,union,etc declaration primitives in $exceptions.
Theres also macros called inside an if (block), which "return" an
expression. These cannot do-while, and need a ({}) wrapper.
Enjoy this qualification while we work to improve our heuristics.
-:36: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_label' - possible side-effects?
#36: FILE: include/drm/drm_exec.h:104:
+#define __drm_exec_until_all_locked(exec, _label) \
+_label: \
+ for (void *const __maybe_unused __drm_exec_retry_ptr = &&_label; \
+ drm_exec_cleanup(exec);)
-:37: ERROR:SPACING: spaces required around that ':' (ctx:VxE)
#37: FILE: include/drm/drm_exec.h:105:
+_label: \
^
total: 2 errors, 0 warnings, 1 checks, 35 lines checked
995c8176cc20 drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer
-:80: WARNING:MACRO_WITH_FLOW_CONTROL: Macros with flow control statements should be avoided
#80: FILE: include/drm/drm_exec.h:158:
+#define drm_exec_retry(_exec) \
+ do { \
+ WARN_ON((_exec)->contended != DRM_EXEC_DUMMY); \
+ goto *__drm_exec_retry_ptr; \
+ } while (0)
total: 0 errors, 1 warnings, 0 checks, 48 lines checked
b1fe12b99eb1 drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket
^ permalink raw reply [flat|nested] 15+ messages in thread
* ✓ CI.KUnit: success for drm/exec: drm_exec polishing (rev2)
2026-05-20 10:16 [PATCH v2 0/4] drm/exec: drm_exec polishing Thomas Hellström
` (4 preceding siblings ...)
2026-05-20 10:23 ` ✗ CI.checkpatch: warning for drm/exec: drm_exec polishing (rev2) Patchwork
@ 2026-05-20 10:24 ` Patchwork
2026-05-20 11:14 ` ✓ Xe.CI.BAT: " Patchwork
` (2 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-05-20 10:24 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
== Series Details ==
Series: drm/exec: drm_exec polishing (rev2)
URL : https://patchwork.freedesktop.org/series/164149/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[10:23:03] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:23:07] 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
[10:23:38] Starting KUnit Kernel (1/1)...
[10:23:38] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:23:38] ================== guc_buf (11 subtests) ===================
[10:23:38] [PASSED] test_smallest
[10:23:38] [PASSED] test_largest
[10:23:38] [PASSED] test_granular
[10:23:38] [PASSED] test_unique
[10:23:38] [PASSED] test_overlap
[10:23:38] [PASSED] test_reusable
[10:23:38] [PASSED] test_too_big
[10:23:38] [PASSED] test_flush
[10:23:38] [PASSED] test_lookup
[10:23:38] [PASSED] test_data
[10:23:38] [PASSED] test_class
[10:23:38] ===================== [PASSED] guc_buf =====================
[10:23:38] =================== guc_dbm (7 subtests) ===================
[10:23:38] [PASSED] test_empty
[10:23:38] [PASSED] test_default
[10:23:38] ======================== test_size ========================
[10:23:38] [PASSED] 4
[10:23:38] [PASSED] 8
[10:23:38] [PASSED] 32
[10:23:38] [PASSED] 256
[10:23:38] ==================== [PASSED] test_size ====================
[10:23:38] ======================= test_reuse ========================
[10:23:38] [PASSED] 4
[10:23:38] [PASSED] 8
[10:23:38] [PASSED] 32
[10:23:38] [PASSED] 256
[10:23:38] =================== [PASSED] test_reuse ====================
[10:23:38] =================== test_range_overlap ====================
[10:23:38] [PASSED] 4
[10:23:38] [PASSED] 8
[10:23:38] [PASSED] 32
[10:23:38] [PASSED] 256
[10:23:38] =============== [PASSED] test_range_overlap ================
[10:23:38] =================== test_range_compact ====================
[10:23:38] [PASSED] 4
[10:23:38] [PASSED] 8
[10:23:38] [PASSED] 32
[10:23:38] [PASSED] 256
[10:23:38] =============== [PASSED] test_range_compact ================
[10:23:38] ==================== test_range_spare =====================
[10:23:38] [PASSED] 4
[10:23:38] [PASSED] 8
[10:23:38] [PASSED] 32
[10:23:38] [PASSED] 256
[10:23:38] ================ [PASSED] test_range_spare =================
[10:23:38] ===================== [PASSED] guc_dbm =====================
[10:23:38] =================== guc_idm (6 subtests) ===================
[10:23:38] [PASSED] bad_init
[10:23:38] [PASSED] no_init
[10:23:38] [PASSED] init_fini
[10:23:38] [PASSED] check_used
[10:23:39] [PASSED] check_quota
[10:23:39] [PASSED] check_all
[10:23:39] ===================== [PASSED] guc_idm =====================
[10:23:39] ================== no_relay (3 subtests) ===================
[10:23:39] [PASSED] xe_drops_guc2pf_if_not_ready
[10:23:39] [PASSED] xe_drops_guc2vf_if_not_ready
[10:23:39] [PASSED] xe_rejects_send_if_not_ready
[10:23:39] ==================== [PASSED] no_relay =====================
[10:23:39] ================== pf_relay (14 subtests) ==================
[10:23:39] [PASSED] pf_rejects_guc2pf_too_short
[10:23:39] [PASSED] pf_rejects_guc2pf_too_long
[10:23:39] [PASSED] pf_rejects_guc2pf_no_payload
[10:23:39] [PASSED] pf_fails_no_payload
[10:23:39] [PASSED] pf_fails_bad_origin
[10:23:39] [PASSED] pf_fails_bad_type
[10:23:39] [PASSED] pf_txn_reports_error
[10:23:39] [PASSED] pf_txn_sends_pf2guc
[10:23:39] [PASSED] pf_sends_pf2guc
[10:23:39] [SKIPPED] pf_loopback_nop
[10:23:39] [SKIPPED] pf_loopback_echo
[10:23:39] [SKIPPED] pf_loopback_fail
[10:23:39] [SKIPPED] pf_loopback_busy
[10:23:39] [SKIPPED] pf_loopback_retry
[10:23:39] ==================== [PASSED] pf_relay =====================
[10:23:39] ================== vf_relay (3 subtests) ===================
[10:23:39] [PASSED] vf_rejects_guc2vf_too_short
[10:23:39] [PASSED] vf_rejects_guc2vf_too_long
[10:23:39] [PASSED] vf_rejects_guc2vf_no_payload
[10:23:39] ==================== [PASSED] vf_relay =====================
[10:23:39] ================ pf_gt_config (9 subtests) =================
[10:23:39] [PASSED] fair_contexts_1vf
[10:23:39] [PASSED] fair_doorbells_1vf
[10:23:39] [PASSED] fair_ggtt_1vf
[10:23:39] ====================== fair_vram_1vf ======================
[10:23:39] [PASSED] 3.50 GiB
[10:23:39] [PASSED] 11.5 GiB
[10:23:39] [PASSED] 15.5 GiB
[10:23:39] [PASSED] 31.5 GiB
[10:23:39] [PASSED] 63.5 GiB
[10:23:39] [PASSED] 1.91 GiB
[10:23:39] ================== [PASSED] fair_vram_1vf ==================
[10:23:39] ================ fair_vram_1vf_admin_only =================
[10:23:39] [PASSED] 3.50 GiB
[10:23:39] [PASSED] 11.5 GiB
[10:23:39] [PASSED] 15.5 GiB
[10:23:39] [PASSED] 31.5 GiB
[10:23:39] [PASSED] 63.5 GiB
[10:23:39] [PASSED] 1.91 GiB
[10:23:39] ============ [PASSED] fair_vram_1vf_admin_only =============
[10:23:39] ====================== fair_contexts ======================
[10:23:39] [PASSED] 1 VF
[10:23:39] [PASSED] 2 VFs
[10:23:39] [PASSED] 3 VFs
[10:23:39] [PASSED] 4 VFs
[10:23:39] [PASSED] 5 VFs
[10:23:39] [PASSED] 6 VFs
[10:23:39] [PASSED] 7 VFs
[10:23:39] [PASSED] 8 VFs
[10:23:39] [PASSED] 9 VFs
[10:23:39] [PASSED] 10 VFs
[10:23:39] [PASSED] 11 VFs
[10:23:39] [PASSED] 12 VFs
[10:23:39] [PASSED] 13 VFs
[10:23:39] [PASSED] 14 VFs
[10:23:39] [PASSED] 15 VFs
[10:23:39] [PASSED] 16 VFs
[10:23:39] [PASSED] 17 VFs
[10:23:39] [PASSED] 18 VFs
[10:23:39] [PASSED] 19 VFs
[10:23:39] [PASSED] 20 VFs
[10:23:39] [PASSED] 21 VFs
[10:23:39] [PASSED] 22 VFs
[10:23:39] [PASSED] 23 VFs
[10:23:39] [PASSED] 24 VFs
[10:23:39] [PASSED] 25 VFs
[10:23:39] [PASSED] 26 VFs
[10:23:39] [PASSED] 27 VFs
[10:23:39] [PASSED] 28 VFs
[10:23:39] [PASSED] 29 VFs
[10:23:39] [PASSED] 30 VFs
[10:23:39] [PASSED] 31 VFs
[10:23:39] [PASSED] 32 VFs
[10:23:39] [PASSED] 33 VFs
[10:23:39] [PASSED] 34 VFs
[10:23:39] [PASSED] 35 VFs
[10:23:39] [PASSED] 36 VFs
[10:23:39] [PASSED] 37 VFs
[10:23:39] [PASSED] 38 VFs
[10:23:39] [PASSED] 39 VFs
[10:23:39] [PASSED] 40 VFs
[10:23:39] [PASSED] 41 VFs
[10:23:39] [PASSED] 42 VFs
[10:23:39] [PASSED] 43 VFs
[10:23:39] [PASSED] 44 VFs
[10:23:39] [PASSED] 45 VFs
[10:23:39] [PASSED] 46 VFs
[10:23:39] [PASSED] 47 VFs
[10:23:39] [PASSED] 48 VFs
[10:23:39] [PASSED] 49 VFs
[10:23:39] [PASSED] 50 VFs
[10:23:39] [PASSED] 51 VFs
[10:23:39] [PASSED] 52 VFs
[10:23:39] [PASSED] 53 VFs
[10:23:39] [PASSED] 54 VFs
[10:23:39] [PASSED] 55 VFs
[10:23:39] [PASSED] 56 VFs
[10:23:39] [PASSED] 57 VFs
[10:23:39] [PASSED] 58 VFs
[10:23:39] [PASSED] 59 VFs
[10:23:39] [PASSED] 60 VFs
[10:23:39] [PASSED] 61 VFs
[10:23:39] [PASSED] 62 VFs
[10:23:39] [PASSED] 63 VFs
[10:23:39] ================== [PASSED] fair_contexts ==================
[10:23:39] ===================== fair_doorbells ======================
[10:23:39] [PASSED] 1 VF
[10:23:39] [PASSED] 2 VFs
[10:23:39] [PASSED] 3 VFs
[10:23:39] [PASSED] 4 VFs
[10:23:39] [PASSED] 5 VFs
[10:23:39] [PASSED] 6 VFs
[10:23:39] [PASSED] 7 VFs
[10:23:39] [PASSED] 8 VFs
[10:23:39] [PASSED] 9 VFs
[10:23:39] [PASSED] 10 VFs
[10:23:39] [PASSED] 11 VFs
[10:23:39] [PASSED] 12 VFs
[10:23:39] [PASSED] 13 VFs
[10:23:39] [PASSED] 14 VFs
[10:23:39] [PASSED] 15 VFs
[10:23:39] [PASSED] 16 VFs
[10:23:39] [PASSED] 17 VFs
[10:23:39] [PASSED] 18 VFs
[10:23:39] [PASSED] 19 VFs
[10:23:39] [PASSED] 20 VFs
[10:23:39] [PASSED] 21 VFs
[10:23:39] [PASSED] 22 VFs
[10:23:39] [PASSED] 23 VFs
[10:23:39] [PASSED] 24 VFs
[10:23:39] [PASSED] 25 VFs
[10:23:39] [PASSED] 26 VFs
[10:23:39] [PASSED] 27 VFs
[10:23:39] [PASSED] 28 VFs
[10:23:39] [PASSED] 29 VFs
[10:23:39] [PASSED] 30 VFs
[10:23:39] [PASSED] 31 VFs
[10:23:39] [PASSED] 32 VFs
[10:23:39] [PASSED] 33 VFs
[10:23:39] [PASSED] 34 VFs
[10:23:39] [PASSED] 35 VFs
[10:23:39] [PASSED] 36 VFs
[10:23:39] [PASSED] 37 VFs
[10:23:39] [PASSED] 38 VFs
[10:23:39] [PASSED] 39 VFs
[10:23:39] [PASSED] 40 VFs
[10:23:39] [PASSED] 41 VFs
[10:23:39] [PASSED] 42 VFs
[10:23:39] [PASSED] 43 VFs
[10:23:39] [PASSED] 44 VFs
[10:23:39] [PASSED] 45 VFs
[10:23:39] [PASSED] 46 VFs
[10:23:39] [PASSED] 47 VFs
[10:23:39] [PASSED] 48 VFs
[10:23:39] [PASSED] 49 VFs
[10:23:39] [PASSED] 50 VFs
[10:23:39] [PASSED] 51 VFs
[10:23:39] [PASSED] 52 VFs
[10:23:39] [PASSED] 53 VFs
[10:23:39] [PASSED] 54 VFs
[10:23:39] [PASSED] 55 VFs
[10:23:39] [PASSED] 56 VFs
[10:23:39] [PASSED] 57 VFs
[10:23:39] [PASSED] 58 VFs
[10:23:39] [PASSED] 59 VFs
[10:23:39] [PASSED] 60 VFs
[10:23:39] [PASSED] 61 VFs
[10:23:39] [PASSED] 62 VFs
[10:23:39] [PASSED] 63 VFs
[10:23:39] ================= [PASSED] fair_doorbells ==================
[10:23:39] ======================== fair_ggtt ========================
[10:23:39] [PASSED] 1 VF
[10:23:39] [PASSED] 2 VFs
[10:23:39] [PASSED] 3 VFs
[10:23:39] [PASSED] 4 VFs
[10:23:39] [PASSED] 5 VFs
[10:23:39] [PASSED] 6 VFs
[10:23:39] [PASSED] 7 VFs
[10:23:39] [PASSED] 8 VFs
[10:23:39] [PASSED] 9 VFs
[10:23:39] [PASSED] 10 VFs
[10:23:39] [PASSED] 11 VFs
[10:23:39] [PASSED] 12 VFs
[10:23:39] [PASSED] 13 VFs
[10:23:39] [PASSED] 14 VFs
[10:23:39] [PASSED] 15 VFs
[10:23:39] [PASSED] 16 VFs
[10:23:39] [PASSED] 17 VFs
[10:23:39] [PASSED] 18 VFs
[10:23:39] [PASSED] 19 VFs
[10:23:39] [PASSED] 20 VFs
[10:23:39] [PASSED] 21 VFs
[10:23:39] [PASSED] 22 VFs
[10:23:39] [PASSED] 23 VFs
[10:23:39] [PASSED] 24 VFs
[10:23:39] [PASSED] 25 VFs
[10:23:39] [PASSED] 26 VFs
[10:23:39] [PASSED] 27 VFs
[10:23:39] [PASSED] 28 VFs
[10:23:39] [PASSED] 29 VFs
[10:23:39] [PASSED] 30 VFs
[10:23:39] [PASSED] 31 VFs
[10:23:39] [PASSED] 32 VFs
[10:23:39] [PASSED] 33 VFs
[10:23:39] [PASSED] 34 VFs
[10:23:39] [PASSED] 35 VFs
[10:23:39] [PASSED] 36 VFs
[10:23:39] [PASSED] 37 VFs
[10:23:39] [PASSED] 38 VFs
[10:23:39] [PASSED] 39 VFs
[10:23:39] [PASSED] 40 VFs
[10:23:39] [PASSED] 41 VFs
[10:23:39] [PASSED] 42 VFs
[10:23:39] [PASSED] 43 VFs
[10:23:39] [PASSED] 44 VFs
[10:23:39] [PASSED] 45 VFs
[10:23:39] [PASSED] 46 VFs
[10:23:39] [PASSED] 47 VFs
[10:23:39] [PASSED] 48 VFs
[10:23:39] [PASSED] 49 VFs
[10:23:39] [PASSED] 50 VFs
[10:23:39] [PASSED] 51 VFs
[10:23:39] [PASSED] 52 VFs
[10:23:39] [PASSED] 53 VFs
[10:23:39] [PASSED] 54 VFs
[10:23:39] [PASSED] 55 VFs
[10:23:39] [PASSED] 56 VFs
[10:23:39] [PASSED] 57 VFs
[10:23:39] [PASSED] 58 VFs
[10:23:39] [PASSED] 59 VFs
[10:23:39] [PASSED] 60 VFs
[10:23:39] [PASSED] 61 VFs
[10:23:39] [PASSED] 62 VFs
[10:23:39] [PASSED] 63 VFs
[10:23:39] ==================== [PASSED] fair_ggtt ====================
[10:23:39] ======================== fair_vram ========================
[10:23:39] [PASSED] 1 VF
[10:23:39] [PASSED] 2 VFs
[10:23:39] [PASSED] 3 VFs
[10:23:39] [PASSED] 4 VFs
[10:23:39] [PASSED] 5 VFs
[10:23:39] [PASSED] 6 VFs
[10:23:39] [PASSED] 7 VFs
[10:23:39] [PASSED] 8 VFs
[10:23:39] [PASSED] 9 VFs
[10:23:39] [PASSED] 10 VFs
[10:23:39] [PASSED] 11 VFs
[10:23:39] [PASSED] 12 VFs
[10:23:39] [PASSED] 13 VFs
[10:23:39] [PASSED] 14 VFs
[10:23:39] [PASSED] 15 VFs
[10:23:39] [PASSED] 16 VFs
[10:23:39] [PASSED] 17 VFs
[10:23:39] [PASSED] 18 VFs
[10:23:39] [PASSED] 19 VFs
[10:23:39] [PASSED] 20 VFs
[10:23:39] [PASSED] 21 VFs
[10:23:39] [PASSED] 22 VFs
[10:23:39] [PASSED] 23 VFs
[10:23:39] [PASSED] 24 VFs
[10:23:39] [PASSED] 25 VFs
[10:23:39] [PASSED] 26 VFs
[10:23:39] [PASSED] 27 VFs
[10:23:39] [PASSED] 28 VFs
[10:23:39] [PASSED] 29 VFs
[10:23:39] [PASSED] 30 VFs
[10:23:39] [PASSED] 31 VFs
[10:23:39] [PASSED] 32 VFs
[10:23:39] [PASSED] 33 VFs
[10:23:39] [PASSED] 34 VFs
[10:23:39] [PASSED] 35 VFs
[10:23:39] [PASSED] 36 VFs
[10:23:39] [PASSED] 37 VFs
[10:23:39] [PASSED] 38 VFs
[10:23:39] [PASSED] 39 VFs
[10:23:39] [PASSED] 40 VFs
[10:23:39] [PASSED] 41 VFs
[10:23:39] [PASSED] 42 VFs
[10:23:39] [PASSED] 43 VFs
[10:23:39] [PASSED] 44 VFs
[10:23:39] [PASSED] 45 VFs
[10:23:39] [PASSED] 46 VFs
[10:23:39] [PASSED] 47 VFs
[10:23:39] [PASSED] 48 VFs
[10:23:39] [PASSED] 49 VFs
[10:23:39] [PASSED] 50 VFs
[10:23:39] [PASSED] 51 VFs
[10:23:39] [PASSED] 52 VFs
[10:23:39] [PASSED] 53 VFs
[10:23:39] [PASSED] 54 VFs
[10:23:39] [PASSED] 55 VFs
[10:23:39] [PASSED] 56 VFs
[10:23:39] [PASSED] 57 VFs
[10:23:39] [PASSED] 58 VFs
[10:23:39] [PASSED] 59 VFs
[10:23:39] [PASSED] 60 VFs
[10:23:39] [PASSED] 61 VFs
[10:23:39] [PASSED] 62 VFs
[10:23:39] [PASSED] 63 VFs
[10:23:39] ==================== [PASSED] fair_vram ====================
[10:23:39] ================== [PASSED] pf_gt_config ===================
[10:23:39] ===================== lmtt (1 subtest) =====================
[10:23:39] ======================== test_ops =========================
[10:23:39] [PASSED] 2-level
[10:23:39] [PASSED] multi-level
[10:23:39] ==================== [PASSED] test_ops =====================
[10:23:39] ====================== [PASSED] lmtt =======================
[10:23:39] ================= pf_service (11 subtests) =================
[10:23:39] [PASSED] pf_negotiate_any
[10:23:39] [PASSED] pf_negotiate_base_match
[10:23:39] [PASSED] pf_negotiate_base_newer
[10:23:39] [PASSED] pf_negotiate_base_next
[10:23:39] [SKIPPED] pf_negotiate_base_older
[10:23:39] [PASSED] pf_negotiate_base_prev
[10:23:39] [PASSED] pf_negotiate_latest_match
[10:23:39] [PASSED] pf_negotiate_latest_newer
[10:23:39] [PASSED] pf_negotiate_latest_next
[10:23:39] [SKIPPED] pf_negotiate_latest_older
[10:23:39] [SKIPPED] pf_negotiate_latest_prev
[10:23:39] =================== [PASSED] pf_service ====================
[10:23:39] ================= xe_guc_g2g (2 subtests) ==================
[10:23:39] ============== xe_live_guc_g2g_kunit_default ==============
[10:23:39] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[10:23:39] ============== xe_live_guc_g2g_kunit_allmem ===============
[10:23:39] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[10:23:39] =================== [SKIPPED] xe_guc_g2g ===================
[10:23:39] =================== xe_mocs (2 subtests) ===================
[10:23:39] ================ xe_live_mocs_kernel_kunit ================
[10:23:39] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[10:23:39] ================ xe_live_mocs_reset_kunit =================
[10:23:39] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[10:23:39] ==================== [SKIPPED] xe_mocs =====================
[10:23:39] ================= xe_migrate (2 subtests) ==================
[10:23:39] ================= xe_migrate_sanity_kunit =================
[10:23:39] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[10:23:39] ================== xe_validate_ccs_kunit ==================
[10:23:39] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[10:23:39] =================== [SKIPPED] xe_migrate ===================
[10:23:39] ================== xe_dma_buf (1 subtest) ==================
[10:23:39] ==================== xe_dma_buf_kunit =====================
[10:23:39] ================ [SKIPPED] xe_dma_buf_kunit ================
[10:23:39] =================== [SKIPPED] xe_dma_buf ===================
[10:23:39] ================= xe_bo_shrink (1 subtest) =================
[10:23:39] =================== xe_bo_shrink_kunit ====================
[10:23:39] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[10:23:39] ================== [SKIPPED] xe_bo_shrink ==================
[10:23:39] ==================== xe_bo (2 subtests) ====================
[10:23:39] ================== xe_ccs_migrate_kunit ===================
[10:23:39] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[10:23:39] ==================== xe_bo_evict_kunit ====================
[10:23:39] =============== [SKIPPED] xe_bo_evict_kunit ================
[10:23:39] ===================== [SKIPPED] xe_bo ======================
[10:23:39] ==================== args (13 subtests) ====================
[10:23:39] [PASSED] count_args_test
[10:23:39] [PASSED] call_args_example
[10:23:39] [PASSED] call_args_test
[10:23:39] [PASSED] drop_first_arg_example
[10:23:39] [PASSED] drop_first_arg_test
[10:23:39] [PASSED] first_arg_example
[10:23:39] [PASSED] first_arg_test
[10:23:39] [PASSED] last_arg_example
[10:23:39] [PASSED] last_arg_test
[10:23:39] [PASSED] pick_arg_example
[10:23:39] [PASSED] if_args_example
[10:23:39] [PASSED] if_args_test
[10:23:39] [PASSED] sep_comma_example
[10:23:39] ====================== [PASSED] args =======================
[10:23:39] =================== xe_pci (3 subtests) ====================
[10:23:39] ==================== check_graphics_ip ====================
[10:23:39] [PASSED] 12.00 Xe_LP
[10:23:39] [PASSED] 12.10 Xe_LP+
[10:23:39] [PASSED] 12.55 Xe_HPG
[10:23:39] [PASSED] 12.60 Xe_HPC
[10:23:39] [PASSED] 12.70 Xe_LPG
[10:23:39] [PASSED] 12.71 Xe_LPG
[10:23:39] [PASSED] 12.74 Xe_LPG+
[10:23:39] [PASSED] 20.01 Xe2_HPG
[10:23:39] [PASSED] 20.02 Xe2_HPG
[10:23:39] [PASSED] 20.04 Xe2_LPG
[10:23:39] [PASSED] 30.00 Xe3_LPG
[10:23:39] [PASSED] 30.01 Xe3_LPG
[10:23:39] [PASSED] 30.03 Xe3_LPG
[10:23:39] [PASSED] 30.04 Xe3_LPG
[10:23:39] [PASSED] 30.05 Xe3_LPG
[10:23:39] [PASSED] 35.10 Xe3p_LPG
[10:23:39] [PASSED] 35.11 Xe3p_XPC
[10:23:39] ================ [PASSED] check_graphics_ip ================
[10:23:39] ===================== check_media_ip ======================
[10:23:39] [PASSED] 12.00 Xe_M
[10:23:39] [PASSED] 12.55 Xe_HPM
[10:23:39] [PASSED] 13.00 Xe_LPM+
[10:23:39] [PASSED] 13.01 Xe2_HPM
[10:23:39] [PASSED] 20.00 Xe2_LPM
[10:23:39] [PASSED] 30.00 Xe3_LPM
[10:23:39] [PASSED] 30.02 Xe3_LPM
[10:23:39] [PASSED] 35.00 Xe3p_LPM
[10:23:39] [PASSED] 35.03 Xe3p_HPM
[10:23:39] ================= [PASSED] check_media_ip ==================
[10:23:39] =================== check_platform_desc ===================
[10:23:39] [PASSED] 0x9A60 (TIGERLAKE)
[10:23:39] [PASSED] 0x9A68 (TIGERLAKE)
[10:23:39] [PASSED] 0x9A70 (TIGERLAKE)
[10:23:39] [PASSED] 0x9A40 (TIGERLAKE)
[10:23:39] [PASSED] 0x9A49 (TIGERLAKE)
[10:23:39] [PASSED] 0x9A59 (TIGERLAKE)
[10:23:39] [PASSED] 0x9A78 (TIGERLAKE)
[10:23:39] [PASSED] 0x9AC0 (TIGERLAKE)
[10:23:39] [PASSED] 0x9AC9 (TIGERLAKE)
[10:23:39] [PASSED] 0x9AD9 (TIGERLAKE)
[10:23:39] [PASSED] 0x9AF8 (TIGERLAKE)
[10:23:39] [PASSED] 0x4C80 (ROCKETLAKE)
[10:23:39] [PASSED] 0x4C8A (ROCKETLAKE)
[10:23:39] [PASSED] 0x4C8B (ROCKETLAKE)
[10:23:39] [PASSED] 0x4C8C (ROCKETLAKE)
[10:23:39] [PASSED] 0x4C90 (ROCKETLAKE)
[10:23:39] [PASSED] 0x4C9A (ROCKETLAKE)
[10:23:39] [PASSED] 0x4680 (ALDERLAKE_S)
[10:23:39] [PASSED] 0x4682 (ALDERLAKE_S)
[10:23:39] [PASSED] 0x4688 (ALDERLAKE_S)
[10:23:39] [PASSED] 0x468A (ALDERLAKE_S)
[10:23:39] [PASSED] 0x468B (ALDERLAKE_S)
[10:23:39] [PASSED] 0x4690 (ALDERLAKE_S)
[10:23:39] [PASSED] 0x4692 (ALDERLAKE_S)
[10:23:39] [PASSED] 0x4693 (ALDERLAKE_S)
[10:23:39] [PASSED] 0x46A0 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46A1 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46A2 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46A3 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46A6 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46A8 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46AA (ALDERLAKE_P)
[10:23:39] [PASSED] 0x462A (ALDERLAKE_P)
[10:23:39] [PASSED] 0x4626 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x4628 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46B0 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46B1 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46B2 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46B3 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46C0 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46C1 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46C2 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46C3 (ALDERLAKE_P)
[10:23:39] [PASSED] 0x46D0 (ALDERLAKE_N)
[10:23:39] [PASSED] 0x46D1 (ALDERLAKE_N)
[10:23:39] [PASSED] 0x46D2 (ALDERLAKE_N)
[10:23:39] [PASSED] 0x46D3 (ALDERLAKE_N)
[10:23:39] [PASSED] 0x46D4 (ALDERLAKE_N)
[10:23:39] [PASSED] 0xA721 (ALDERLAKE_P)
[10:23:39] [PASSED] 0xA7A1 (ALDERLAKE_P)
[10:23:39] [PASSED] 0xA7A9 (ALDERLAKE_P)
[10:23:39] [PASSED] 0xA7AC (ALDERLAKE_P)
[10:23:39] [PASSED] 0xA7AD (ALDERLAKE_P)
[10:23:39] [PASSED] 0xA720 (ALDERLAKE_P)
[10:23:39] [PASSED] 0xA7A0 (ALDERLAKE_P)
[10:23:39] [PASSED] 0xA7A8 (ALDERLAKE_P)
[10:23:39] [PASSED] 0xA7AA (ALDERLAKE_P)
[10:23:39] [PASSED] 0xA7AB (ALDERLAKE_P)
[10:23:39] [PASSED] 0xA780 (ALDERLAKE_S)
[10:23:39] [PASSED] 0xA781 (ALDERLAKE_S)
[10:23:39] [PASSED] 0xA782 (ALDERLAKE_S)
[10:23:39] [PASSED] 0xA783 (ALDERLAKE_S)
[10:23:39] [PASSED] 0xA788 (ALDERLAKE_S)
[10:23:39] [PASSED] 0xA789 (ALDERLAKE_S)
[10:23:39] [PASSED] 0xA78A (ALDERLAKE_S)
[10:23:39] [PASSED] 0xA78B (ALDERLAKE_S)
[10:23:39] [PASSED] 0x4905 (DG1)
[10:23:39] [PASSED] 0x4906 (DG1)
[10:23:39] [PASSED] 0x4907 (DG1)
[10:23:39] [PASSED] 0x4908 (DG1)
[10:23:39] [PASSED] 0x4909 (DG1)
[10:23:39] [PASSED] 0x56C0 (DG2)
[10:23:39] [PASSED] 0x56C2 (DG2)
[10:23:39] [PASSED] 0x56C1 (DG2)
[10:23:39] [PASSED] 0x7D51 (METEORLAKE)
[10:23:39] [PASSED] 0x7DD1 (METEORLAKE)
[10:23:39] [PASSED] 0x7D41 (METEORLAKE)
[10:23:39] [PASSED] 0x7D67 (METEORLAKE)
[10:23:39] [PASSED] 0xB640 (METEORLAKE)
[10:23:39] [PASSED] 0x56A0 (DG2)
[10:23:39] [PASSED] 0x56A1 (DG2)
[10:23:39] [PASSED] 0x56A2 (DG2)
[10:23:39] [PASSED] 0x56BE (DG2)
[10:23:39] [PASSED] 0x56BF (DG2)
[10:23:39] [PASSED] 0x5690 (DG2)
[10:23:39] [PASSED] 0x5691 (DG2)
[10:23:39] [PASSED] 0x5692 (DG2)
[10:23:39] [PASSED] 0x56A5 (DG2)
[10:23:39] [PASSED] 0x56A6 (DG2)
[10:23:39] [PASSED] 0x56B0 (DG2)
[10:23:39] [PASSED] 0x56B1 (DG2)
[10:23:39] [PASSED] 0x56BA (DG2)
[10:23:39] [PASSED] 0x56BB (DG2)
[10:23:39] [PASSED] 0x56BC (DG2)
[10:23:39] [PASSED] 0x56BD (DG2)
[10:23:39] [PASSED] 0x5693 (DG2)
[10:23:39] [PASSED] 0x5694 (DG2)
[10:23:39] [PASSED] 0x5695 (DG2)
[10:23:39] [PASSED] 0x56A3 (DG2)
[10:23:39] [PASSED] 0x56A4 (DG2)
[10:23:39] [PASSED] 0x56B2 (DG2)
[10:23:39] [PASSED] 0x56B3 (DG2)
[10:23:39] [PASSED] 0x5696 (DG2)
[10:23:39] [PASSED] 0x5697 (DG2)
[10:23:39] [PASSED] 0xB69 (PVC)
[10:23:39] [PASSED] 0xB6E (PVC)
[10:23:39] [PASSED] 0xBD4 (PVC)
[10:23:39] [PASSED] 0xBD5 (PVC)
[10:23:39] [PASSED] 0xBD6 (PVC)
[10:23:39] [PASSED] 0xBD7 (PVC)
[10:23:39] [PASSED] 0xBD8 (PVC)
[10:23:39] [PASSED] 0xBD9 (PVC)
[10:23:39] [PASSED] 0xBDA (PVC)
[10:23:39] [PASSED] 0xBDB (PVC)
[10:23:39] [PASSED] 0xBE0 (PVC)
[10:23:39] [PASSED] 0xBE1 (PVC)
[10:23:39] [PASSED] 0xBE5 (PVC)
[10:23:39] [PASSED] 0x7D40 (METEORLAKE)
[10:23:39] [PASSED] 0x7D45 (METEORLAKE)
[10:23:39] [PASSED] 0x7D55 (METEORLAKE)
[10:23:39] [PASSED] 0x7D60 (METEORLAKE)
[10:23:39] [PASSED] 0x7DD5 (METEORLAKE)
[10:23:39] [PASSED] 0x6420 (LUNARLAKE)
[10:23:39] [PASSED] 0x64A0 (LUNARLAKE)
[10:23:39] [PASSED] 0x64B0 (LUNARLAKE)
[10:23:39] [PASSED] 0xE202 (BATTLEMAGE)
[10:23:39] [PASSED] 0xE209 (BATTLEMAGE)
[10:23:39] [PASSED] 0xE20B (BATTLEMAGE)
[10:23:39] [PASSED] 0xE20C (BATTLEMAGE)
[10:23:39] [PASSED] 0xE20D (BATTLEMAGE)
[10:23:39] [PASSED] 0xE210 (BATTLEMAGE)
[10:23:39] [PASSED] 0xE211 (BATTLEMAGE)
[10:23:39] [PASSED] 0xE212 (BATTLEMAGE)
[10:23:39] [PASSED] 0xE216 (BATTLEMAGE)
[10:23:39] [PASSED] 0xE220 (BATTLEMAGE)
[10:23:39] [PASSED] 0xE221 (BATTLEMAGE)
[10:23:39] [PASSED] 0xE222 (BATTLEMAGE)
[10:23:39] [PASSED] 0xE223 (BATTLEMAGE)
[10:23:39] [PASSED] 0xB080 (PANTHERLAKE)
[10:23:39] [PASSED] 0xB081 (PANTHERLAKE)
[10:23:39] [PASSED] 0xB082 (PANTHERLAKE)
[10:23:39] [PASSED] 0xB083 (PANTHERLAKE)
[10:23:39] [PASSED] 0xB084 (PANTHERLAKE)
[10:23:39] [PASSED] 0xB085 (PANTHERLAKE)
[10:23:39] [PASSED] 0xB086 (PANTHERLAKE)
[10:23:39] [PASSED] 0xB087 (PANTHERLAKE)
[10:23:39] [PASSED] 0xB08F (PANTHERLAKE)
[10:23:39] [PASSED] 0xB090 (PANTHERLAKE)
[10:23:39] [PASSED] 0xB0A0 (PANTHERLAKE)
[10:23:39] [PASSED] 0xB0B0 (PANTHERLAKE)
[10:23:39] [PASSED] 0xFD80 (PANTHERLAKE)
[10:23:39] [PASSED] 0xFD81 (PANTHERLAKE)
[10:23:39] [PASSED] 0xD740 (NOVALAKE_S)
[10:23:39] [PASSED] 0xD741 (NOVALAKE_S)
[10:23:39] [PASSED] 0xD742 (NOVALAKE_S)
[10:23:39] [PASSED] 0xD743 (NOVALAKE_S)
[10:23:39] [PASSED] 0xD744 (NOVALAKE_S)
[10:23:39] [PASSED] 0xD745 (NOVALAKE_S)
[10:23:39] [PASSED] 0x674C (CRESCENTISLAND)
[10:23:39] [PASSED] 0x674D (CRESCENTISLAND)
[10:23:39] [PASSED] 0x674E (CRESCENTISLAND)
[10:23:39] [PASSED] 0x674F (CRESCENTISLAND)
[10:23:39] [PASSED] 0x6750 (CRESCENTISLAND)
[10:23:39] [PASSED] 0xD750 (NOVALAKE_P)
[10:23:39] [PASSED] 0xD751 (NOVALAKE_P)
[10:23:39] [PASSED] 0xD752 (NOVALAKE_P)
[10:23:39] [PASSED] 0xD753 (NOVALAKE_P)
[10:23:39] [PASSED] 0xD754 (NOVALAKE_P)
[10:23:39] [PASSED] 0xD755 (NOVALAKE_P)
[10:23:39] [PASSED] 0xD756 (NOVALAKE_P)
[10:23:39] [PASSED] 0xD757 (NOVALAKE_P)
[10:23:39] [PASSED] 0xD75F (NOVALAKE_P)
[10:23:39] =============== [PASSED] check_platform_desc ===============
[10:23:39] ===================== [PASSED] xe_pci ======================
[10:23:39] =================== xe_rtp (2 subtests) ====================
[10:23:39] =============== xe_rtp_process_to_sr_tests ================
[10:23:39] [PASSED] coalesce-same-reg
[10:23:39] [PASSED] no-match-no-add
[10:23:39] [PASSED] match-or
[10:23:39] [PASSED] match-or-xfail
[10:23:39] [PASSED] no-match-no-add-multiple-rules
[10:23:39] [PASSED] two-regs-two-entries
[10:23:39] [PASSED] clr-one-set-other
[10:23:39] [PASSED] set-field
[10:23:39] [PASSED] conflict-duplicate
[10:23:39] [PASSED] conflict-not-disjoint
[10:23:39] [PASSED] conflict-reg-type
[10:23:39] [PASSED] bad-mcr-reg-forced-to-regular
[10:23:39] [PASSED] bad-regular-reg-forced-to-mcr
[10:23:39] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[10:23:39] ================== xe_rtp_process_tests ===================
[10:23:39] [PASSED] active1
[10:23:39] [PASSED] active2
[10:23:39] [PASSED] active-inactive
[10:23:39] [PASSED] inactive-active
[10:23:39] [PASSED] inactive-1st_or_active-inactive
[10:23:39] [PASSED] inactive-2nd_or_active-inactive
[10:23:39] [PASSED] inactive-last_or_active-inactive
[10:23:39] [PASSED] inactive-no_or_active-inactive
[10:23:39] ============== [PASSED] xe_rtp_process_tests ===============
[10:23:39] ===================== [PASSED] xe_rtp ======================
[10:23:39] ==================== xe_wa (1 subtest) =====================
[10:23:39] ======================== xe_wa_gt =========================
[10:23:39] [PASSED] TIGERLAKE B0
[10:23:39] [PASSED] DG1 A0
[10:23:39] [PASSED] DG1 B0
[10:23:39] [PASSED] ALDERLAKE_S A0
[10:23:39] [PASSED] ALDERLAKE_S B0
[10:23:39] [PASSED] ALDERLAKE_S C0
[10:23:39] [PASSED] ALDERLAKE_S D0
[10:23:39] [PASSED] ALDERLAKE_P A0
[10:23:39] [PASSED] ALDERLAKE_P B0
[10:23:39] [PASSED] ALDERLAKE_P C0
[10:23:39] [PASSED] ALDERLAKE_S RPLS D0
[10:23:39] [PASSED] ALDERLAKE_P RPLU E0
[10:23:39] [PASSED] DG2 G10 C0
[10:23:39] [PASSED] DG2 G11 B1
[10:23:39] [PASSED] DG2 G12 A1
[10:23:39] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[10:23:39] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[10:23:39] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[10:23:39] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[10:23:39] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[10:23:39] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[10:23:39] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[10:23:39] ==================== [PASSED] xe_wa_gt =====================
[10:23:39] ====================== [PASSED] xe_wa ======================
[10:23:39] ============================================================
[10:23:39] Testing complete. Ran 603 tests: passed: 585, skipped: 18
[10:23:39] Elapsed time: 36.158s total, 4.296s configuring, 31.196s building, 0.628s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[10:23:39] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:23:41] 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
[10:24:05] Starting KUnit Kernel (1/1)...
[10:24:05] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:24:05] ============ drm_test_pick_cmdline (2 subtests) ============
[10:24:05] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[10:24:05] =============== drm_test_pick_cmdline_named ===============
[10:24:05] [PASSED] NTSC
[10:24:05] [PASSED] NTSC-J
[10:24:05] [PASSED] PAL
[10:24:05] [PASSED] PAL-M
[10:24:05] =========== [PASSED] drm_test_pick_cmdline_named ===========
[10:24:05] ============== [PASSED] drm_test_pick_cmdline ==============
[10:24:05] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[10:24:05] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[10:24:05] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[10:24:05] =========== drm_validate_clone_mode (2 subtests) ===========
[10:24:05] ============== drm_test_check_in_clone_mode ===============
[10:24:05] [PASSED] in_clone_mode
[10:24:05] [PASSED] not_in_clone_mode
[10:24:05] ========== [PASSED] drm_test_check_in_clone_mode ===========
[10:24:05] =============== drm_test_check_valid_clones ===============
[10:24:05] [PASSED] not_in_clone_mode
[10:24:05] [PASSED] valid_clone
[10:24:05] [PASSED] invalid_clone
[10:24:05] =========== [PASSED] drm_test_check_valid_clones ===========
[10:24:05] ============= [PASSED] drm_validate_clone_mode =============
[10:24:05] ============= drm_validate_modeset (1 subtest) =============
[10:24:05] [PASSED] drm_test_check_connector_changed_modeset
[10:24:05] ============== [PASSED] drm_validate_modeset ===============
[10:24:05] ====== drm_test_bridge_get_current_state (2 subtests) ======
[10:24:05] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[10:24:05] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[10:24:05] ======== [PASSED] drm_test_bridge_get_current_state ========
[10:24:05] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[10:24:05] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[10:24:05] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[10:24:05] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[10:24:05] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[10:24:05] ============== drm_bridge_alloc (2 subtests) ===============
[10:24:05] [PASSED] drm_test_drm_bridge_alloc_basic
[10:24:05] [PASSED] drm_test_drm_bridge_alloc_get_put
[10:24:05] ================ [PASSED] drm_bridge_alloc =================
[10:24:05] ============= drm_cmdline_parser (40 subtests) =============
[10:24:05] [PASSED] drm_test_cmdline_force_d_only
[10:24:05] [PASSED] drm_test_cmdline_force_D_only_dvi
[10:24:05] [PASSED] drm_test_cmdline_force_D_only_hdmi
[10:24:05] [PASSED] drm_test_cmdline_force_D_only_not_digital
[10:24:05] [PASSED] drm_test_cmdline_force_e_only
[10:24:05] [PASSED] drm_test_cmdline_res
[10:24:05] [PASSED] drm_test_cmdline_res_vesa
[10:24:05] [PASSED] drm_test_cmdline_res_vesa_rblank
[10:24:05] [PASSED] drm_test_cmdline_res_rblank
[10:24:05] [PASSED] drm_test_cmdline_res_bpp
[10:24:05] [PASSED] drm_test_cmdline_res_refresh
[10:24:05] [PASSED] drm_test_cmdline_res_bpp_refresh
[10:24:05] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[10:24:05] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[10:24:05] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[10:24:05] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[10:24:05] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[10:24:05] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[10:24:05] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[10:24:05] [PASSED] drm_test_cmdline_res_margins_force_on
[10:24:05] [PASSED] drm_test_cmdline_res_vesa_margins
[10:24:05] [PASSED] drm_test_cmdline_name
[10:24:05] [PASSED] drm_test_cmdline_name_bpp
[10:24:05] [PASSED] drm_test_cmdline_name_option
[10:24:05] [PASSED] drm_test_cmdline_name_bpp_option
[10:24:05] [PASSED] drm_test_cmdline_rotate_0
[10:24:05] [PASSED] drm_test_cmdline_rotate_90
[10:24:05] [PASSED] drm_test_cmdline_rotate_180
[10:24:05] [PASSED] drm_test_cmdline_rotate_270
[10:24:05] [PASSED] drm_test_cmdline_hmirror
[10:24:05] [PASSED] drm_test_cmdline_vmirror
[10:24:05] [PASSED] drm_test_cmdline_margin_options
[10:24:05] [PASSED] drm_test_cmdline_multiple_options
[10:24:05] [PASSED] drm_test_cmdline_bpp_extra_and_option
[10:24:05] [PASSED] drm_test_cmdline_extra_and_option
[10:24:05] [PASSED] drm_test_cmdline_freestanding_options
[10:24:05] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[10:24:05] [PASSED] drm_test_cmdline_panel_orientation
[10:24:05] ================ drm_test_cmdline_invalid =================
[10:24:05] [PASSED] margin_only
[10:24:05] [PASSED] interlace_only
[10:24:05] [PASSED] res_missing_x
[10:24:05] [PASSED] res_missing_y
[10:24:05] [PASSED] res_bad_y
[10:24:05] [PASSED] res_missing_y_bpp
[10:24:05] [PASSED] res_bad_bpp
[10:24:05] [PASSED] res_bad_refresh
[10:24:05] [PASSED] res_bpp_refresh_force_on_off
[10:24:05] [PASSED] res_invalid_mode
[10:24:05] [PASSED] res_bpp_wrong_place_mode
[10:24:05] [PASSED] name_bpp_refresh
[10:24:05] [PASSED] name_refresh
[10:24:05] [PASSED] name_refresh_wrong_mode
[10:24:05] [PASSED] name_refresh_invalid_mode
[10:24:05] [PASSED] rotate_multiple
[10:24:05] [PASSED] rotate_invalid_val
[10:24:05] [PASSED] rotate_truncated
[10:24:05] [PASSED] invalid_option
[10:24:05] [PASSED] invalid_tv_option
[10:24:05] [PASSED] truncated_tv_option
[10:24:05] ============ [PASSED] drm_test_cmdline_invalid =============
[10:24:05] =============== drm_test_cmdline_tv_options ===============
[10:24:05] [PASSED] NTSC
[10:24:05] [PASSED] NTSC_443
[10:24:05] [PASSED] NTSC_J
[10:24:05] [PASSED] PAL
[10:24:05] [PASSED] PAL_M
[10:24:05] [PASSED] PAL_N
[10:24:05] [PASSED] SECAM
[10:24:05] [PASSED] MONO_525
[10:24:05] [PASSED] MONO_625
[10:24:05] =========== [PASSED] drm_test_cmdline_tv_options ===========
[10:24:05] =============== [PASSED] drm_cmdline_parser ================
[10:24:05] ========== drmm_connector_hdmi_init (20 subtests) ==========
[10:24:05] [PASSED] drm_test_connector_hdmi_init_valid
[10:24:05] [PASSED] drm_test_connector_hdmi_init_bpc_8
[10:24:05] [PASSED] drm_test_connector_hdmi_init_bpc_10
[10:24:05] [PASSED] drm_test_connector_hdmi_init_bpc_12
[10:24:05] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[10:24:05] [PASSED] drm_test_connector_hdmi_init_bpc_null
[10:24:05] [PASSED] drm_test_connector_hdmi_init_formats_empty
[10:24:05] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[10:24:05] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[10:24:05] [PASSED] supported_formats=0x9 yuv420_allowed=1
[10:24:05] [PASSED] supported_formats=0x9 yuv420_allowed=0
[10:24:05] [PASSED] supported_formats=0x5 yuv420_allowed=1
[10:24:05] [PASSED] supported_formats=0x5 yuv420_allowed=0
[10:24:05] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[10:24:05] [PASSED] drm_test_connector_hdmi_init_null_ddc
[10:24:05] [PASSED] drm_test_connector_hdmi_init_null_product
[10:24:05] [PASSED] drm_test_connector_hdmi_init_null_vendor
[10:24:05] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[10:24:05] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[10:24:05] [PASSED] drm_test_connector_hdmi_init_product_valid
[10:24:05] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[10:24:05] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[10:24:05] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[10:24:05] ========= drm_test_connector_hdmi_init_type_valid =========
[10:24:05] [PASSED] HDMI-A
[10:24:05] [PASSED] HDMI-B
[10:24:05] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[10:24:05] ======== drm_test_connector_hdmi_init_type_invalid ========
[10:24:05] [PASSED] Unknown
[10:24:05] [PASSED] VGA
[10:24:05] [PASSED] DVI-I
[10:24:05] [PASSED] DVI-D
[10:24:05] [PASSED] DVI-A
[10:24:05] [PASSED] Composite
[10:24:05] [PASSED] SVIDEO
[10:24:05] [PASSED] LVDS
[10:24:05] [PASSED] Component
[10:24:05] [PASSED] DIN
[10:24:05] [PASSED] DP
[10:24:05] [PASSED] TV
[10:24:05] [PASSED] eDP
[10:24:05] [PASSED] Virtual
[10:24:05] [PASSED] DSI
[10:24:05] [PASSED] DPI
[10:24:05] [PASSED] Writeback
[10:24:05] [PASSED] SPI
[10:24:05] [PASSED] USB
[10:24:05] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[10:24:05] ============ [PASSED] drmm_connector_hdmi_init =============
[10:24:05] ============= drmm_connector_init (3 subtests) =============
[10:24:05] [PASSED] drm_test_drmm_connector_init
[10:24:05] [PASSED] drm_test_drmm_connector_init_null_ddc
[10:24:05] ========= drm_test_drmm_connector_init_type_valid =========
[10:24:05] [PASSED] Unknown
[10:24:05] [PASSED] VGA
[10:24:05] [PASSED] DVI-I
[10:24:05] [PASSED] DVI-D
[10:24:05] [PASSED] DVI-A
[10:24:05] [PASSED] Composite
[10:24:05] [PASSED] SVIDEO
[10:24:05] [PASSED] LVDS
[10:24:05] [PASSED] Component
[10:24:05] [PASSED] DIN
[10:24:05] [PASSED] DP
[10:24:05] [PASSED] HDMI-A
[10:24:05] [PASSED] HDMI-B
[10:24:05] [PASSED] TV
[10:24:05] [PASSED] eDP
[10:24:05] [PASSED] Virtual
[10:24:05] [PASSED] DSI
[10:24:05] [PASSED] DPI
[10:24:05] [PASSED] Writeback
[10:24:05] [PASSED] SPI
[10:24:05] [PASSED] USB
[10:24:05] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[10:24:05] =============== [PASSED] drmm_connector_init ===============
[10:24:05] ========= drm_connector_dynamic_init (6 subtests) ==========
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_init
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_init_properties
[10:24:05] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[10:24:05] [PASSED] Unknown
[10:24:05] [PASSED] VGA
[10:24:05] [PASSED] DVI-I
[10:24:05] [PASSED] DVI-D
[10:24:05] [PASSED] DVI-A
[10:24:05] [PASSED] Composite
[10:24:05] [PASSED] SVIDEO
[10:24:05] [PASSED] LVDS
[10:24:05] [PASSED] Component
[10:24:05] [PASSED] DIN
[10:24:05] [PASSED] DP
[10:24:05] [PASSED] HDMI-A
[10:24:05] [PASSED] HDMI-B
[10:24:05] [PASSED] TV
[10:24:05] [PASSED] eDP
[10:24:05] [PASSED] Virtual
[10:24:05] [PASSED] DSI
[10:24:05] [PASSED] DPI
[10:24:05] [PASSED] Writeback
[10:24:05] [PASSED] SPI
[10:24:05] [PASSED] USB
[10:24:05] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[10:24:05] ======== drm_test_drm_connector_dynamic_init_name =========
[10:24:05] [PASSED] Unknown
[10:24:05] [PASSED] VGA
[10:24:05] [PASSED] DVI-I
[10:24:05] [PASSED] DVI-D
[10:24:05] [PASSED] DVI-A
[10:24:05] [PASSED] Composite
[10:24:05] [PASSED] SVIDEO
[10:24:05] [PASSED] LVDS
[10:24:05] [PASSED] Component
[10:24:05] [PASSED] DIN
[10:24:05] [PASSED] DP
[10:24:05] [PASSED] HDMI-A
[10:24:05] [PASSED] HDMI-B
[10:24:05] [PASSED] TV
[10:24:05] [PASSED] eDP
[10:24:05] [PASSED] Virtual
[10:24:05] [PASSED] DSI
[10:24:05] [PASSED] DPI
[10:24:05] [PASSED] Writeback
[10:24:05] [PASSED] SPI
[10:24:05] [PASSED] USB
[10:24:05] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[10:24:05] =========== [PASSED] drm_connector_dynamic_init ============
[10:24:05] ==== drm_connector_dynamic_register_early (4 subtests) =====
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[10:24:05] ====== [PASSED] drm_connector_dynamic_register_early =======
[10:24:05] ======= drm_connector_dynamic_register (7 subtests) ========
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[10:24:05] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[10:24:05] ========= [PASSED] drm_connector_dynamic_register ==========
[10:24:05] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[10:24:05] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[10:24:05] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[10:24:05] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[10:24:05] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[10:24:05] ========== drm_test_get_tv_mode_from_name_valid ===========
[10:24:05] [PASSED] NTSC
[10:24:05] [PASSED] NTSC-443
[10:24:05] [PASSED] NTSC-J
[10:24:05] [PASSED] PAL
[10:24:05] [PASSED] PAL-M
[10:24:05] [PASSED] PAL-N
[10:24:05] [PASSED] SECAM
[10:24:05] [PASSED] Mono
[10:24:05] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[10:24:05] [PASSED] drm_test_get_tv_mode_from_name_truncated
[10:24:05] ============ [PASSED] drm_get_tv_mode_from_name ============
[10:24:05] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[10:24:05] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[10:24:05] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[10:24:05] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[10:24:05] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[10:24:05] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[10:24:05] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[10:24:05] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[10:24:05] [PASSED] VIC 96
[10:24:05] [PASSED] VIC 97
[10:24:05] [PASSED] VIC 101
[10:24:05] [PASSED] VIC 102
[10:24:05] [PASSED] VIC 106
[10:24:05] [PASSED] VIC 107
[10:24:05] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[10:24:05] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[10:24:05] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[10:24:05] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[10:24:05] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[10:24:05] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[10:24:05] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[10:24:05] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[10:24:05] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[10:24:05] [PASSED] Automatic
[10:24:05] [PASSED] Full
[10:24:05] [PASSED] Limited 16:235
[10:24:05] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[10:24:05] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[10:24:05] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[10:24:05] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[10:24:05] === drm_test_drm_hdmi_connector_get_output_format_name ====
[10:24:05] [PASSED] RGB
[10:24:05] [PASSED] YUV 4:2:0
[10:24:05] [PASSED] YUV 4:2:2
[10:24:05] [PASSED] YUV 4:4:4
[10:24:05] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[10:24:05] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[10:24:05] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[10:24:05] ============= drm_damage_helper (21 subtests) ==============
[10:24:05] [PASSED] drm_test_damage_iter_no_damage
[10:24:05] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[10:24:05] [PASSED] drm_test_damage_iter_no_damage_src_moved
[10:24:05] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[10:24:05] [PASSED] drm_test_damage_iter_no_damage_not_visible
[10:24:05] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[10:24:05] [PASSED] drm_test_damage_iter_no_damage_no_fb
[10:24:05] [PASSED] drm_test_damage_iter_simple_damage
[10:24:05] [PASSED] drm_test_damage_iter_single_damage
[10:24:05] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[10:24:05] [PASSED] drm_test_damage_iter_single_damage_outside_src
[10:24:05] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[10:24:05] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[10:24:05] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[10:24:05] [PASSED] drm_test_damage_iter_single_damage_src_moved
[10:24:05] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[10:24:05] [PASSED] drm_test_damage_iter_damage
[10:24:05] [PASSED] drm_test_damage_iter_damage_one_intersect
[10:24:05] [PASSED] drm_test_damage_iter_damage_one_outside
[10:24:05] [PASSED] drm_test_damage_iter_damage_src_moved
[10:24:05] [PASSED] drm_test_damage_iter_damage_not_visible
[10:24:05] ================ [PASSED] drm_damage_helper ================
[10:24:05] ============== drm_dp_mst_helper (3 subtests) ==============
[10:24:05] ============== drm_test_dp_mst_calc_pbn_mode ==============
[10:24:05] [PASSED] Clock 154000 BPP 30 DSC disabled
[10:24:05] [PASSED] Clock 234000 BPP 30 DSC disabled
[10:24:05] [PASSED] Clock 297000 BPP 24 DSC disabled
[10:24:05] [PASSED] Clock 332880 BPP 24 DSC enabled
[10:24:05] [PASSED] Clock 324540 BPP 24 DSC enabled
[10:24:05] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[10:24:05] ============== drm_test_dp_mst_calc_pbn_div ===============
[10:24:05] [PASSED] Link rate 2000000 lane count 4
[10:24:05] [PASSED] Link rate 2000000 lane count 2
[10:24:05] [PASSED] Link rate 2000000 lane count 1
[10:24:05] [PASSED] Link rate 1350000 lane count 4
[10:24:05] [PASSED] Link rate 1350000 lane count 2
[10:24:05] [PASSED] Link rate 1350000 lane count 1
[10:24:05] [PASSED] Link rate 1000000 lane count 4
[10:24:05] [PASSED] Link rate 1000000 lane count 2
[10:24:05] [PASSED] Link rate 1000000 lane count 1
[10:24:05] [PASSED] Link rate 810000 lane count 4
[10:24:05] [PASSED] Link rate 810000 lane count 2
[10:24:05] [PASSED] Link rate 810000 lane count 1
[10:24:05] [PASSED] Link rate 540000 lane count 4
[10:24:05] [PASSED] Link rate 540000 lane count 2
[10:24:05] [PASSED] Link rate 540000 lane count 1
[10:24:05] [PASSED] Link rate 270000 lane count 4
[10:24:05] [PASSED] Link rate 270000 lane count 2
[10:24:05] [PASSED] Link rate 270000 lane count 1
[10:24:05] [PASSED] Link rate 162000 lane count 4
[10:24:05] [PASSED] Link rate 162000 lane count 2
[10:24:05] [PASSED] Link rate 162000 lane count 1
[10:24:05] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[10:24:05] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[10:24:05] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[10:24:05] [PASSED] DP_POWER_UP_PHY with port number
[10:24:05] [PASSED] DP_POWER_DOWN_PHY with port number
[10:24:05] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[10:24:05] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[10:24:05] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[10:24:05] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[10:24:05] [PASSED] DP_QUERY_PAYLOAD with port number
[10:24:05] [PASSED] DP_QUERY_PAYLOAD with VCPI
[10:24:05] [PASSED] DP_REMOTE_DPCD_READ with port number
[10:24:05] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[10:24:05] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[10:24:05] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[10:24:05] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[10:24:05] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[10:24:05] [PASSED] DP_REMOTE_I2C_READ with port number
[10:24:05] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[10:24:05] [PASSED] DP_REMOTE_I2C_READ with transactions array
[10:24:05] [PASSED] DP_REMOTE_I2C_WRITE with port number
[10:24:05] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[10:24:05] [PASSED] DP_REMOTE_I2C_WRITE with data array
[10:24:05] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[10:24:05] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[10:24:05] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[10:24:05] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[10:24:05] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[10:24:05] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[10:24:05] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[10:24:05] ================ [PASSED] drm_dp_mst_helper ================
[10:24:05] ================== drm_exec (7 subtests) ===================
[10:24:05] [PASSED] sanitycheck
[10:24:05] [PASSED] test_lock
[10:24:05] [PASSED] test_lock_unlock
[10:24:05] [PASSED] test_duplicates
[10:24:05] [PASSED] test_prepare
[10:24:05] [PASSED] test_prepare_array
[10:24:05] [PASSED] test_multiple_loops
[10:24:05] ==================== [PASSED] drm_exec =====================
[10:24:05] =========== drm_format_helper_test (17 subtests) ===========
[10:24:05] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[10:24:05] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[10:24:05] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[10:24:05] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[10:24:05] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[10:24:05] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[10:24:05] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[10:24:05] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[10:24:05] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[10:24:05] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[10:24:05] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[10:24:05] ============== drm_test_fb_xrgb8888_to_mono ===============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[10:24:05] ==================== drm_test_fb_swab =====================
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ================ [PASSED] drm_test_fb_swab =================
[10:24:05] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[10:24:05] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[10:24:05] [PASSED] single_pixel_source_buffer
[10:24:05] [PASSED] single_pixel_clip_rectangle
[10:24:05] [PASSED] well_known_colors
[10:24:05] [PASSED] destination_pitch
[10:24:05] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[10:24:05] ================= drm_test_fb_clip_offset =================
[10:24:05] [PASSED] pass through
[10:24:05] [PASSED] horizontal offset
[10:24:05] [PASSED] vertical offset
[10:24:05] [PASSED] horizontal and vertical offset
[10:24:05] [PASSED] horizontal offset (custom pitch)
[10:24:05] [PASSED] vertical offset (custom pitch)
[10:24:05] [PASSED] horizontal and vertical offset (custom pitch)
[10:24:05] ============= [PASSED] drm_test_fb_clip_offset =============
[10:24:05] =================== drm_test_fb_memcpy ====================
[10:24:05] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[10:24:05] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[10:24:05] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[10:24:05] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[10:24:05] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[10:24:05] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[10:24:05] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[10:24:05] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[10:24:05] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[10:24:05] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[10:24:05] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[10:24:05] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[10:24:05] =============== [PASSED] drm_test_fb_memcpy ================
[10:24:05] ============= [PASSED] drm_format_helper_test ==============
[10:24:05] ================= drm_format (18 subtests) =================
[10:24:05] [PASSED] drm_test_format_block_width_invalid
[10:24:05] [PASSED] drm_test_format_block_width_one_plane
[10:24:05] [PASSED] drm_test_format_block_width_two_plane
[10:24:05] [PASSED] drm_test_format_block_width_three_plane
[10:24:05] [PASSED] drm_test_format_block_width_tiled
[10:24:05] [PASSED] drm_test_format_block_height_invalid
[10:24:05] [PASSED] drm_test_format_block_height_one_plane
[10:24:05] [PASSED] drm_test_format_block_height_two_plane
[10:24:05] [PASSED] drm_test_format_block_height_three_plane
[10:24:05] [PASSED] drm_test_format_block_height_tiled
[10:24:05] [PASSED] drm_test_format_min_pitch_invalid
[10:24:05] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[10:24:05] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[10:24:05] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[10:24:05] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[10:24:05] [PASSED] drm_test_format_min_pitch_two_plane
[10:24:05] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[10:24:05] [PASSED] drm_test_format_min_pitch_tiled
[10:24:05] =================== [PASSED] drm_format ====================
[10:24:05] ============== drm_framebuffer (10 subtests) ===============
[10:24:05] ========== drm_test_framebuffer_check_src_coords ==========
[10:24:05] [PASSED] Success: source fits into fb
[10:24:05] [PASSED] Fail: overflowing fb with x-axis coordinate
[10:24:05] [PASSED] Fail: overflowing fb with y-axis coordinate
[10:24:05] [PASSED] Fail: overflowing fb with source width
[10:24:05] [PASSED] Fail: overflowing fb with source height
[10:24:05] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[10:24:05] [PASSED] drm_test_framebuffer_cleanup
[10:24:05] =============== drm_test_framebuffer_create ===============
[10:24:05] [PASSED] ABGR8888 normal sizes
[10:24:05] [PASSED] ABGR8888 max sizes
[10:24:05] [PASSED] ABGR8888 pitch greater than min required
[10:24:05] [PASSED] ABGR8888 pitch less than min required
[10:24:05] [PASSED] ABGR8888 Invalid width
[10:24:05] [PASSED] ABGR8888 Invalid buffer handle
[10:24:05] [PASSED] No pixel format
[10:24:05] [PASSED] ABGR8888 Width 0
[10:24:05] [PASSED] ABGR8888 Height 0
[10:24:05] [PASSED] ABGR8888 Out of bound height * pitch combination
[10:24:05] [PASSED] ABGR8888 Large buffer offset
[10:24:05] [PASSED] ABGR8888 Buffer offset for inexistent plane
[10:24:05] [PASSED] ABGR8888 Invalid flag
[10:24:05] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[10:24:05] [PASSED] ABGR8888 Valid buffer modifier
[10:24:05] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[10:24:05] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[10:24:05] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[10:24:05] [PASSED] NV12 Normal sizes
[10:24:05] [PASSED] NV12 Max sizes
[10:24:05] [PASSED] NV12 Invalid pitch
[10:24:05] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[10:24:05] [PASSED] NV12 different modifier per-plane
[10:24:05] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[10:24:05] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[10:24:05] [PASSED] NV12 Modifier for inexistent plane
[10:24:05] [PASSED] NV12 Handle for inexistent plane
[10:24:05] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[10:24:05] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[10:24:05] [PASSED] YVU420 Normal sizes
[10:24:05] [PASSED] YVU420 Max sizes
[10:24:05] [PASSED] YVU420 Invalid pitch
[10:24:05] [PASSED] YVU420 Different pitches
[10:24:05] [PASSED] YVU420 Different buffer offsets/pitches
[10:24:05] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[10:24:05] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[10:24:05] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[10:24:05] [PASSED] YVU420 Valid modifier
[10:24:05] [PASSED] YVU420 Different modifiers per plane
[10:24:05] [PASSED] YVU420 Modifier for inexistent plane
[10:24:05] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[10:24:05] [PASSED] X0L2 Normal sizes
[10:24:05] [PASSED] X0L2 Max sizes
[10:24:05] [PASSED] X0L2 Invalid pitch
[10:24:05] [PASSED] X0L2 Pitch greater than minimum required
[10:24:05] [PASSED] X0L2 Handle for inexistent plane
[10:24:05] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[10:24:05] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[10:24:05] [PASSED] X0L2 Valid modifier
[10:24:05] [PASSED] X0L2 Modifier for inexistent plane
[10:24:05] =========== [PASSED] drm_test_framebuffer_create ===========
[10:24:05] [PASSED] drm_test_framebuffer_free
[10:24:05] [PASSED] drm_test_framebuffer_init
[10:24:05] [PASSED] drm_test_framebuffer_init_bad_format
[10:24:05] [PASSED] drm_test_framebuffer_init_dev_mismatch
[10:24:05] [PASSED] drm_test_framebuffer_lookup
[10:24:05] [PASSED] drm_test_framebuffer_lookup_inexistent
[10:24:05] [PASSED] drm_test_framebuffer_modifiers_not_supported
[10:24:05] ================= [PASSED] drm_framebuffer =================
[10:24:05] ================ drm_gem_shmem (8 subtests) ================
[10:24:05] [PASSED] drm_gem_shmem_test_obj_create
[10:24:05] [PASSED] drm_gem_shmem_test_obj_create_private
[10:24:05] [PASSED] drm_gem_shmem_test_pin_pages
[10:24:05] [PASSED] drm_gem_shmem_test_vmap
[10:24:05] [PASSED] drm_gem_shmem_test_get_sg_table
[10:24:05] [PASSED] drm_gem_shmem_test_get_pages_sgt
[10:24:05] [PASSED] drm_gem_shmem_test_madvise
[10:24:05] [PASSED] drm_gem_shmem_test_purge
[10:24:05] ================== [PASSED] drm_gem_shmem ==================
[10:24:05] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[10:24:05] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[10:24:05] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[10:24:05] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[10:24:05] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[10:24:05] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[10:24:05] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[10:24:05] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[10:24:05] [PASSED] Automatic
[10:24:05] [PASSED] Full
[10:24:05] [PASSED] Limited 16:235
[10:24:05] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[10:24:05] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[10:24:05] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[10:24:05] [PASSED] drm_test_check_disable_connector
[10:24:05] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[10:24:05] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[10:24:05] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[10:24:05] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[10:24:05] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[10:24:05] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[10:24:05] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[10:24:05] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[10:24:05] [PASSED] drm_test_check_output_bpc_dvi
[10:24:05] [PASSED] drm_test_check_output_bpc_format_vic_1
[10:24:05] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[10:24:05] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[10:24:05] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[10:24:05] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[10:24:05] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[10:24:05] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[10:24:05] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[10:24:05] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[10:24:05] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[10:24:05] [PASSED] drm_test_check_broadcast_rgb_value
[10:24:05] [PASSED] drm_test_check_bpc_8_value
[10:24:05] [PASSED] drm_test_check_bpc_10_value
[10:24:05] [PASSED] drm_test_check_bpc_12_value
[10:24:05] [PASSED] drm_test_check_format_value
[10:24:05] [PASSED] drm_test_check_tmds_char_value
[10:24:05] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[10:24:05] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[10:24:05] [PASSED] drm_test_check_mode_valid
[10:24:05] [PASSED] drm_test_check_mode_valid_reject
[10:24:05] [PASSED] drm_test_check_mode_valid_reject_rate
[10:24:05] [PASSED] drm_test_check_mode_valid_reject_max_clock
[10:24:05] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[10:24:05] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[10:24:05] [PASSED] drm_test_check_infoframes
[10:24:05] [PASSED] drm_test_check_reject_avi_infoframe
[10:24:05] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[10:24:05] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[10:24:05] [PASSED] drm_test_check_reject_audio_infoframe
[10:24:05] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[10:24:05] ================= drm_managed (2 subtests) =================
[10:24:05] [PASSED] drm_test_managed_release_action
[10:24:05] [PASSED] drm_test_managed_run_action
[10:24:05] =================== [PASSED] drm_managed ===================
[10:24:05] =================== drm_mm (6 subtests) ====================
[10:24:05] [PASSED] drm_test_mm_init
[10:24:05] [PASSED] drm_test_mm_debug
[10:24:05] [PASSED] drm_test_mm_align32
[10:24:05] [PASSED] drm_test_mm_align64
[10:24:05] [PASSED] drm_test_mm_lowest
[10:24:05] [PASSED] drm_test_mm_highest
[10:24:05] ===================== [PASSED] drm_mm ======================
[10:24:05] ============= drm_modes_analog_tv (5 subtests) =============
[10:24:05] [PASSED] drm_test_modes_analog_tv_mono_576i
[10:24:05] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[10:24:05] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[10:24:05] [PASSED] drm_test_modes_analog_tv_pal_576i
[10:24:05] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[10:24:05] =============== [PASSED] drm_modes_analog_tv ===============
[10:24:05] ============== drm_plane_helper (2 subtests) ===============
[10:24:05] =============== drm_test_check_plane_state ================
[10:24:05] [PASSED] clipping_simple
[10:24:05] [PASSED] clipping_rotate_reflect
[10:24:05] [PASSED] positioning_simple
[10:24:05] [PASSED] upscaling
[10:24:05] [PASSED] downscaling
[10:24:05] [PASSED] rounding1
[10:24:05] [PASSED] rounding2
[10:24:05] [PASSED] rounding3
[10:24:05] [PASSED] rounding4
[10:24:05] =========== [PASSED] drm_test_check_plane_state ============
[10:24:05] =========== drm_test_check_invalid_plane_state ============
[10:24:05] [PASSED] positioning_invalid
[10:24:05] [PASSED] upscaling_invalid
[10:24:05] [PASSED] downscaling_invalid
[10:24:05] ======= [PASSED] drm_test_check_invalid_plane_state ========
[10:24:05] ================ [PASSED] drm_plane_helper =================
[10:24:05] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[10:24:05] ====== drm_test_connector_helper_tv_get_modes_check =======
[10:24:05] [PASSED] None
[10:24:05] [PASSED] PAL
[10:24:05] [PASSED] NTSC
[10:24:05] [PASSED] Both, NTSC Default
[10:24:05] [PASSED] Both, PAL Default
[10:24:05] [PASSED] Both, NTSC Default, with PAL on command-line
[10:24:05] [PASSED] Both, PAL Default, with NTSC on command-line
[10:24:05] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[10:24:05] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[10:24:05] ================== drm_rect (9 subtests) ===================
[10:24:05] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[10:24:05] [PASSED] drm_test_rect_clip_scaled_not_clipped
[10:24:05] [PASSED] drm_test_rect_clip_scaled_clipped
[10:24:05] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[10:24:05] ================= drm_test_rect_intersect =================
[10:24:05] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[10:24:05] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[10:24:05] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[10:24:05] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[10:24:05] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[10:24:05] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[10:24:05] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[10:24:05] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[10:24:05] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[10:24:05] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[10:24:05] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[10:24:05] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[10:24:05] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[10:24:05] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[10:24:05] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[10:24:05] ============= [PASSED] drm_test_rect_intersect =============
[10:24:05] ================ drm_test_rect_calc_hscale ================
[10:24:05] [PASSED] normal use
[10:24:05] [PASSED] out of max range
[10:24:05] [PASSED] out of min range
[10:24:05] [PASSED] zero dst
[10:24:05] [PASSED] negative src
[10:24:05] [PASSED] negative dst
[10:24:05] ============ [PASSED] drm_test_rect_calc_hscale ============
[10:24:05] ================ drm_test_rect_calc_vscale ================
[10:24:05] [PASSED] normal use
[10:24:05] [PASSED] out of max range
[10:24:05] [PASSED] out of min range
[10:24:05] [PASSED] zero dst
[10:24:05] [PASSED] negative src
[10:24:05] [PASSED] negative dst
[10:24:05] ============ [PASSED] drm_test_rect_calc_vscale ============
[10:24:05] ================== drm_test_rect_rotate ===================
[10:24:05] [PASSED] reflect-x
[10:24:05] [PASSED] reflect-y
[10:24:05] [PASSED] rotate-0
[10:24:05] [PASSED] rotate-90
[10:24:05] [PASSED] rotate-180
[10:24:05] [PASSED] rotate-270
[10:24:05] ============== [PASSED] drm_test_rect_rotate ===============
[10:24:05] ================ drm_test_rect_rotate_inv =================
[10:24:05] [PASSED] reflect-x
[10:24:05] [PASSED] reflect-y
[10:24:05] [PASSED] rotate-0
[10:24:05] [PASSED] rotate-90
[10:24:05] [PASSED] rotate-180
[10:24:05] [PASSED] rotate-270
[10:24:05] ============ [PASSED] drm_test_rect_rotate_inv =============
[10:24:05] ==================== [PASSED] drm_rect =====================
[10:24:05] ============ drm_sysfb_modeset_test (1 subtest) ============
[10:24:05] ============ drm_test_sysfb_build_fourcc_list =============
[10:24:05] [PASSED] no native formats
[10:24:05] [PASSED] XRGB8888 as native format
[10:24:05] [PASSED] remove duplicates
[10:24:05] [PASSED] convert alpha formats
[10:24:05] [PASSED] random formats
[10:24:05] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[10:24:05] ============= [PASSED] drm_sysfb_modeset_test ==============
[10:24:05] ================== drm_fixp (2 subtests) ===================
[10:24:05] [PASSED] drm_test_int2fixp
[10:24:05] [PASSED] drm_test_sm2fixp
[10:24:05] ==================== [PASSED] drm_fixp =====================
[10:24:05] ============================================================
[10:24:05] Testing complete. Ran 621 tests: passed: 621
[10:24:05] Elapsed time: 25.856s total, 1.773s configuring, 23.917s building, 0.140s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[10:24:05] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:24:07] 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
[10:24:16] Starting KUnit Kernel (1/1)...
[10:24:16] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:24:16] ================= ttm_device (5 subtests) ==================
[10:24:16] [PASSED] ttm_device_init_basic
[10:24:16] [PASSED] ttm_device_init_multiple
[10:24:16] [PASSED] ttm_device_fini_basic
[10:24:16] [PASSED] ttm_device_init_no_vma_man
[10:24:16] ================== ttm_device_init_pools ==================
[10:24:16] [PASSED] No DMA allocations, no DMA32 required
[10:24:16] [PASSED] DMA allocations, DMA32 required
[10:24:16] [PASSED] No DMA allocations, DMA32 required
[10:24:16] [PASSED] DMA allocations, no DMA32 required
[10:24:16] ============== [PASSED] ttm_device_init_pools ==============
[10:24:16] =================== [PASSED] ttm_device ====================
[10:24:16] ================== ttm_pool (8 subtests) ===================
[10:24:16] ================== ttm_pool_alloc_basic ===================
[10:24:16] [PASSED] One page
[10:24:16] [PASSED] More than one page
[10:24:16] [PASSED] Above the allocation limit
[10:24:16] [PASSED] One page, with coherent DMA mappings enabled
[10:24:16] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:24:16] ============== [PASSED] ttm_pool_alloc_basic ===============
[10:24:16] ============== ttm_pool_alloc_basic_dma_addr ==============
[10:24:16] [PASSED] One page
[10:24:16] [PASSED] More than one page
[10:24:16] [PASSED] Above the allocation limit
[10:24:16] [PASSED] One page, with coherent DMA mappings enabled
[10:24:16] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:24:16] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[10:24:16] [PASSED] ttm_pool_alloc_order_caching_match
[10:24:16] [PASSED] ttm_pool_alloc_caching_mismatch
[10:24:16] [PASSED] ttm_pool_alloc_order_mismatch
[10:24:16] [PASSED] ttm_pool_free_dma_alloc
[10:24:16] [PASSED] ttm_pool_free_no_dma_alloc
[10:24:16] [PASSED] ttm_pool_fini_basic
[10:24:16] ==================== [PASSED] ttm_pool =====================
[10:24:16] ================ ttm_resource (8 subtests) =================
[10:24:16] ================= ttm_resource_init_basic =================
[10:24:16] [PASSED] Init resource in TTM_PL_SYSTEM
[10:24:16] [PASSED] Init resource in TTM_PL_VRAM
[10:24:16] [PASSED] Init resource in a private placement
[10:24:16] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[10:24:16] ============= [PASSED] ttm_resource_init_basic =============
[10:24:16] [PASSED] ttm_resource_init_pinned
[10:24:16] [PASSED] ttm_resource_fini_basic
[10:24:16] [PASSED] ttm_resource_manager_init_basic
[10:24:16] [PASSED] ttm_resource_manager_usage_basic
[10:24:16] [PASSED] ttm_resource_manager_set_used_basic
[10:24:16] [PASSED] ttm_sys_man_alloc_basic
[10:24:16] [PASSED] ttm_sys_man_free_basic
[10:24:16] ================== [PASSED] ttm_resource ===================
[10:24:16] =================== ttm_tt (15 subtests) ===================
[10:24:16] ==================== ttm_tt_init_basic ====================
[10:24:16] [PASSED] Page-aligned size
[10:24:16] [PASSED] Extra pages requested
[10:24:16] ================ [PASSED] ttm_tt_init_basic ================
[10:24:16] [PASSED] ttm_tt_init_misaligned
[10:24:16] [PASSED] ttm_tt_fini_basic
[10:24:16] [PASSED] ttm_tt_fini_sg
[10:24:16] [PASSED] ttm_tt_fini_shmem
[10:24:16] [PASSED] ttm_tt_create_basic
[10:24:16] [PASSED] ttm_tt_create_invalid_bo_type
[10:24:16] [PASSED] ttm_tt_create_ttm_exists
[10:24:16] [PASSED] ttm_tt_create_failed
[10:24:16] [PASSED] ttm_tt_destroy_basic
[10:24:16] [PASSED] ttm_tt_populate_null_ttm
[10:24:16] [PASSED] ttm_tt_populate_populated_ttm
[10:24:16] [PASSED] ttm_tt_unpopulate_basic
[10:24:16] [PASSED] ttm_tt_unpopulate_empty_ttm
[10:24:16] [PASSED] ttm_tt_swapin_basic
[10:24:16] ===================== [PASSED] ttm_tt ======================
[10:24:16] =================== ttm_bo (14 subtests) ===================
[10:24:16] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[10:24:16] [PASSED] Cannot be interrupted and sleeps
[10:24:16] [PASSED] Cannot be interrupted, locks straight away
[10:24:16] [PASSED] Can be interrupted, sleeps
[10:24:16] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[10:24:16] [PASSED] ttm_bo_reserve_locked_no_sleep
[10:24:16] [PASSED] ttm_bo_reserve_no_wait_ticket
[10:24:16] [PASSED] ttm_bo_reserve_double_resv
[10:24:16] [PASSED] ttm_bo_reserve_interrupted
[10:24:16] [PASSED] ttm_bo_reserve_deadlock
[10:24:16] [PASSED] ttm_bo_unreserve_basic
[10:24:16] [PASSED] ttm_bo_unreserve_pinned
[10:24:16] [PASSED] ttm_bo_unreserve_bulk
[10:24:16] [PASSED] ttm_bo_fini_basic
[10:24:16] [PASSED] ttm_bo_fini_shared_resv
[10:24:16] [PASSED] ttm_bo_pin_basic
[10:24:16] [PASSED] ttm_bo_pin_unpin_resource
[10:24:16] [PASSED] ttm_bo_multiple_pin_one_unpin
[10:24:16] ===================== [PASSED] ttm_bo ======================
[10:24:16] ============== ttm_bo_validate (22 subtests) ===============
[10:24:16] ============== ttm_bo_init_reserved_sys_man ===============
[10:24:16] [PASSED] Buffer object for userspace
[10:24:16] [PASSED] Kernel buffer object
[10:24:16] [PASSED] Shared buffer object
[10:24:16] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[10:24:16] ============== ttm_bo_init_reserved_mock_man ==============
[10:24:16] [PASSED] Buffer object for userspace
[10:24:16] [PASSED] Kernel buffer object
[10:24:16] [PASSED] Shared buffer object
[10:24:16] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[10:24:16] [PASSED] ttm_bo_init_reserved_resv
[10:24:16] ================== ttm_bo_validate_basic ==================
[10:24:16] [PASSED] Buffer object for userspace
[10:24:16] [PASSED] Kernel buffer object
[10:24:16] [PASSED] Shared buffer object
[10:24:16] ============== [PASSED] ttm_bo_validate_basic ==============
[10:24:16] [PASSED] ttm_bo_validate_invalid_placement
[10:24:16] ============= ttm_bo_validate_same_placement ==============
[10:24:16] [PASSED] System manager
[10:24:16] [PASSED] VRAM manager
[10:24:16] ========= [PASSED] ttm_bo_validate_same_placement ==========
[10:24:16] [PASSED] ttm_bo_validate_failed_alloc
[10:24:16] [PASSED] ttm_bo_validate_pinned
[10:24:16] [PASSED] ttm_bo_validate_busy_placement
[10:24:16] ================ ttm_bo_validate_multihop =================
[10:24:16] [PASSED] Buffer object for userspace
[10:24:16] [PASSED] Kernel buffer object
[10:24:16] [PASSED] Shared buffer object
[10:24:16] ============ [PASSED] ttm_bo_validate_multihop =============
[10:24:16] ========== ttm_bo_validate_no_placement_signaled ==========
[10:24:16] [PASSED] Buffer object in system domain, no page vector
[10:24:16] [PASSED] Buffer object in system domain with an existing page vector
[10:24:16] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[10:24:16] ======== ttm_bo_validate_no_placement_not_signaled ========
[10:24:16] [PASSED] Buffer object for userspace
[10:24:16] [PASSED] Kernel buffer object
[10:24:16] [PASSED] Shared buffer object
[10:24:16] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[10:24:16] [PASSED] ttm_bo_validate_move_fence_signaled
[10:24:17] ========= ttm_bo_validate_move_fence_not_signaled =========
[10:24:17] [PASSED] Waits for GPU
[10:24:17] [PASSED] Tries to lock straight away
[10:24:17] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[10:24:17] [PASSED] ttm_bo_validate_swapout
[10:24:17] [PASSED] ttm_bo_validate_happy_evict
[10:24:17] [PASSED] ttm_bo_validate_all_pinned_evict
[10:24:17] [PASSED] ttm_bo_validate_allowed_only_evict
[10:24:17] [PASSED] ttm_bo_validate_deleted_evict
[10:24:17] [PASSED] ttm_bo_validate_busy_domain_evict
[10:24:17] [PASSED] ttm_bo_validate_evict_gutting
[10:24:17] [PASSED] ttm_bo_validate_recrusive_evict
[10:24:17] ================= [PASSED] ttm_bo_validate =================
[10:24:17] ============================================================
[10:24:17] Testing complete. Ran 102 tests: passed: 102
[10:24:17] Elapsed time: 11.583s total, 1.758s configuring, 9.560s building, 0.225s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 15+ messages in thread
* ✓ Xe.CI.BAT: success for drm/exec: drm_exec polishing (rev2)
2026-05-20 10:16 [PATCH v2 0/4] drm/exec: drm_exec polishing Thomas Hellström
` (5 preceding siblings ...)
2026-05-20 10:24 ` ✓ CI.KUnit: success " Patchwork
@ 2026-05-20 11:14 ` Patchwork
2026-05-20 11:34 ` [PATCH v2 0/4] drm/exec: drm_exec polishing Christian König
2026-05-20 19:06 ` ✓ Xe.CI.FULL: success for drm/exec: drm_exec polishing (rev2) Patchwork
8 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-05-20 11:14 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 949 bytes --]
== Series Details ==
Series: drm/exec: drm_exec polishing (rev2)
URL : https://patchwork.freedesktop.org/series/164149/
State : success
== Summary ==
CI Bug Log - changes from xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b_BAT -> xe-pw-164149v2_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b -> xe-pw-164149v2
IGT_8923: 3cb6109b3a0596ce448305acc233064c88680eb9 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b: 7d39df83e93eba14a23b1fb6ffff076eb191f27b
xe-pw-164149v2: 164149v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/index.html
[-- Attachment #2: Type: text/html, Size: 1497 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/4] drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse]
2026-05-20 10:16 ` [PATCH v2 1/4] drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse] Thomas Hellström
@ 2026-05-20 11:32 ` Christian König
0 siblings, 0 replies; 15+ messages in thread
From: Christian König @ 2026-05-20 11:32 UTC (permalink / raw)
To: Thomas Hellström, intel-xe
Cc: Felix Kuehling, Alex Deucher, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno
On 5/20/26 12:16, Thomas Hellström wrote:
> Nobody makes any use of it. Possible internal future users can
> instead use the _index variable. External users shouldn't use
> it since the array it's pointing into is internal drm_exec state.
>
> v2:
> - Use a unique id for the loop variable (Christian)
>
> Assisted-by: GitHub Copilot:claude-sonnet-4.6
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 9 +++------
> .../drm/amd/amdgpu/amdgpu_eviction_fence.c | 3 +--
> drivers/gpu/drm/drm_exec.c | 6 ++----
> drivers/gpu/drm/drm_gpuvm.c | 3 +--
> drivers/gpu/drm/xe/xe_vm.c | 3 +--
> include/drm/drm_exec.h | 20 +++++++++++--------
> 6 files changed, 20 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index 32af8cce3df8..97a851ae7bd8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -850,7 +850,6 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
> struct amdgpu_vm *vm = &fpriv->vm;
> struct amdgpu_bo_list_entry *e;
> struct drm_gem_object *obj;
> - unsigned long index;
> unsigned int i;
> int r;
>
> @@ -961,7 +960,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
> goto out_free_user_pages;
> }
>
> - drm_exec_for_each_locked_object(&p->exec, index, obj) {
> + drm_exec_for_each_locked_object(&p->exec, obj) {
> r = amdgpu_cs_bo_validate(p, gem_to_amdgpu_bo(obj));
> if (unlikely(r))
> goto out_free_user_pages;
> @@ -1201,7 +1200,6 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p)
> struct drm_gpu_scheduler *sched;
> struct drm_gem_object *obj;
> struct dma_fence *fence;
> - unsigned long index;
> unsigned int i;
> int r;
>
> @@ -1212,7 +1210,7 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p)
> return r;
> }
>
> - drm_exec_for_each_locked_object(&p->exec, index, obj) {
> + drm_exec_for_each_locked_object(&p->exec, obj) {
> struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>
> struct dma_resv *resv = bo->tbo.base.resv;
> @@ -1281,7 +1279,6 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
> struct amdgpu_job *leader = p->gang_leader;
> struct amdgpu_bo_list_entry *e;
> struct drm_gem_object *gobj;
> - unsigned long index;
> unsigned int i;
> uint64_t seq;
> int r;
> @@ -1331,7 +1328,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
> }
>
> p->fence = dma_fence_get(&leader->base.s_fence->finished);
> - drm_exec_for_each_locked_object(&p->exec, index, gobj) {
> + drm_exec_for_each_locked_object(&p->exec, gobj) {
>
> ttm_bo_move_to_lru_tail_unlocked(&gem_to_amdgpu_bo(gobj)->tbo);
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
> index 4c5e38dea4c2..f6b7522c3c82 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.c
> @@ -121,7 +121,6 @@ int amdgpu_evf_mgr_rearm(struct amdgpu_eviction_fence_mgr *evf_mgr,
> {
> struct amdgpu_eviction_fence *ev_fence;
> struct drm_gem_object *obj;
> - unsigned long index;
>
> /* Create and initialize a new eviction fence */
> ev_fence = kzalloc_obj(*ev_fence);
> @@ -140,7 +139,7 @@ int amdgpu_evf_mgr_rearm(struct amdgpu_eviction_fence_mgr *evf_mgr,
> evf_mgr->ev_fence = &ev_fence->base;
>
> /* And add it to all existing BOs */
> - drm_exec_for_each_locked_object(exec, index, obj) {
> + drm_exec_for_each_locked_object(exec, obj) {
> struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
>
> amdgpu_evf_mgr_attach_fence(evf_mgr, bo);
> diff --git a/drivers/gpu/drm/drm_exec.c b/drivers/gpu/drm/drm_exec.c
> index 8d0601400182..746210f3f6c2 100644
> --- a/drivers/gpu/drm/drm_exec.c
> +++ b/drivers/gpu/drm/drm_exec.c
> @@ -24,7 +24,6 @@
> *
> * struct drm_gem_object *obj;
> * struct drm_exec exec;
> - * unsigned long index;
> * int ret;
> *
> * drm_exec_init(&exec, DRM_EXEC_INTERRUPTIBLE_WAIT);
> @@ -40,7 +39,7 @@
> * goto error;
> * }
> *
> - * drm_exec_for_each_locked_object(&exec, index, obj) {
> + * drm_exec_for_each_locked_object(&exec, obj) {
> * dma_resv_add_fence(obj->resv, fence, DMA_RESV_USAGE_READ);
> * ...
> * }
> @@ -56,9 +55,8 @@
> static void drm_exec_unlock_all(struct drm_exec *exec)
> {
> struct drm_gem_object *obj;
> - unsigned long index;
>
> - drm_exec_for_each_locked_object_reverse(exec, index, obj) {
> + drm_exec_for_each_locked_object_reverse(exec, obj) {
> dma_resv_unlock(obj->resv);
> drm_gem_object_put(obj);
> }
> diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c
> index 83020b6cf9ba..c422c5af1f4b 100644
> --- a/drivers/gpu/drm/drm_gpuvm.c
> +++ b/drivers/gpu/drm/drm_gpuvm.c
> @@ -1557,9 +1557,8 @@ drm_gpuvm_resv_add_fence(struct drm_gpuvm *gpuvm,
> enum dma_resv_usage extobj_usage)
> {
> struct drm_gem_object *obj;
> - unsigned long index;
>
> - drm_exec_for_each_locked_object(exec, index, obj) {
> + drm_exec_for_each_locked_object(exec, obj) {
> dma_resv_assert_held(obj->resv);
> dma_resv_add_fence(obj->resv, fence,
> drm_gpuvm_is_extobj(gpuvm, obj) ?
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index b01f31ed4417..080c2fff0e95 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -373,7 +373,6 @@ int xe_vm_validate_rebind(struct xe_vm *vm, struct drm_exec *exec,
> unsigned int num_fences)
> {
> struct drm_gem_object *obj;
> - unsigned long index;
> int ret;
>
> do {
> @@ -386,7 +385,7 @@ int xe_vm_validate_rebind(struct xe_vm *vm, struct drm_exec *exec,
> return ret;
> } while (!list_empty(&vm->gpuvm.evict.list));
>
> - drm_exec_for_each_locked_object(exec, index, obj) {
> + drm_exec_for_each_locked_object(exec, obj) {
> ret = dma_resv_reserve_fences(obj->resv, num_fences);
> if (ret)
> return ret;
> diff --git a/include/drm/drm_exec.h b/include/drm/drm_exec.h
> index aa786b828a0a..dee6ebdbe416 100644
> --- a/include/drm/drm_exec.h
> +++ b/include/drm/drm_exec.h
> @@ -65,31 +65,35 @@ drm_exec_obj(struct drm_exec *exec, unsigned long index)
> return index < exec->num_objects ? exec->objects[index] : NULL;
> }
>
> +/* Helper for drm_exec_for_each_locked_object(). Internal use only. */
> +#define __drm_exec_for_each_locked_object(exec, obj, __index) \
> + for (unsigned long __index = 0; ((obj) = drm_exec_obj(exec, __index)); ++__index)
> /**
> * drm_exec_for_each_locked_object - iterate over all the locked objects
> * @exec: drm_exec object
> - * @index: unsigned long index for the iteration
> * @obj: the current GEM object
> *
> * Iterate over all the locked GEM objects inside the drm_exec object.
> */
> -#define drm_exec_for_each_locked_object(exec, index, obj) \
> - for ((index) = 0; ((obj) = drm_exec_obj(exec, index)); ++(index))
> +#define drm_exec_for_each_locked_object(exec, obj) \
> + __drm_exec_for_each_locked_object(exec, obj, __UNIQUE_ID(drm_exec))
>
> +/* Helper for drm_exec_for_each_locked_object_reverse(). Internal use only. */
> +#define __drm_exec_for_each_locked_object_reverse(exec, obj, __index) \
> + for (unsigned long __index = (exec)->num_objects - 1; \
> + ((obj) = drm_exec_obj(exec, __index)); --__index)
> /**
> * drm_exec_for_each_locked_object_reverse - iterate over all the locked
> * objects in reverse locking order
> * @exec: drm_exec object
> - * @index: unsigned long index for the iteration
> * @obj: the current GEM object
> *
> * Iterate over all the locked GEM objects inside the drm_exec object in
> - * reverse locking order. Note that @index may go below zero and wrap,
> + * reverse locking order. Note that the internal index may wrap around,
> * but that will be caught by drm_exec_obj(), returning a NULL object.
> */
> -#define drm_exec_for_each_locked_object_reverse(exec, index, obj) \
> - for ((index) = (exec)->num_objects - 1; \
> - ((obj) = drm_exec_obj(exec, index)); --(index))
> +#define drm_exec_for_each_locked_object_reverse(exec, obj) \
> + __drm_exec_for_each_locked_object_reverse(exec, obj, __UNIQUE_ID(drm_exec))
>
> /**
> * drm_exec_until_all_locked - loop until all GEM objects are locked
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 0/4] drm/exec: drm_exec polishing
2026-05-20 10:16 [PATCH v2 0/4] drm/exec: drm_exec polishing Thomas Hellström
` (6 preceding siblings ...)
2026-05-20 11:14 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-05-20 11:34 ` Christian König
2026-05-21 11:45 ` Thomas Hellström
2026-05-20 19:06 ` ✓ Xe.CI.FULL: success for drm/exec: drm_exec polishing (rev2) Patchwork
8 siblings, 1 reply; 15+ messages in thread
From: Christian König @ 2026-05-20 11:34 UTC (permalink / raw)
To: Thomas Hellström, intel-xe
Cc: Felix Kuehling, Alex Deucher, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno,
Natalie Vock
On 5/20/26 12:16, Thomas Hellström wrote:
> During the work towards enabling exhaustive eviction using full
> ww locking in TTM, Christian indicated that the path for the
> drm_exec moving forward was to be a full drm_exec helper with
> things like userptr validation rather than a WW transaction
> abstraction. The idea was then briefly discussed to craft a
> WW transaction helper and then subclass that with drm_exec
> with the idea that the WW transaction helper could be used in
> TTM for eviction and for other uses that didn't mandate a full
> exec sequence.
BTW Natalie is now trying to polish my TTM patches for doing that because some test case for the SteamDeck is running into issues with pinning buffers for display.
> Regardless whether that actually happens or not, this series
> aims to clean up abuses of drm_exec internals in drivers
> so that future development of drm_exec isn't blocked by
> such driver usage.
Yeah completely agree, going to review those patches now.
Regards,
Christian.
>
> Except for patch 2 which is a small cleanup only.
>
> v2:
> - An drm/msm patch was already merged.
> - Use a unique id for the loop variable (patch 1) (Christian)
> - Move assignment to declaration (patch 2) (Christian)
> - Declare the retry pointer as void *const. (patch 2)
> - Only allow if the drm_exec context is newly initialized. (patch 3)
> (Christian)
> - Fix amdgpu compile error (patch 4) (Intel CI)
> - Update the commit message (patch 4)
>
> Thomas Hellström (4):
> drm/exec: Remove the index parameter from
> drm_exec_for_each_locked_obj[_reverse]
> drm/exec: Make the drm_exec_until_all_locked() macro more readable
> drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer
> drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct
> drm_exec::ticket
>
> .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 15 ++--
> .../drm/amd/amdgpu/amdgpu_eviction_fence.c | 3 +-
> drivers/gpu/drm/drm_exec.c | 9 +--
> drivers/gpu/drm/drm_gpuvm.c | 3 +-
> drivers/gpu/drm/xe/xe_validation.c | 4 +-
> drivers/gpu/drm/xe/xe_validation.h | 2 +-
> drivers/gpu/drm/xe/xe_vm.c | 3 +-
> include/drm/drm_exec.h | 71 ++++++++++++++-----
> 9 files changed, 70 insertions(+), 44 deletions(-)
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/4] drm/exec: Make the drm_exec_until_all_locked() macro more readable
2026-05-20 10:16 ` [PATCH v2 2/4] drm/exec: Make the drm_exec_until_all_locked() macro more readable Thomas Hellström
@ 2026-05-20 11:35 ` Christian König
0 siblings, 0 replies; 15+ messages in thread
From: Christian König @ 2026-05-20 11:35 UTC (permalink / raw)
To: Thomas Hellström, intel-xe
Cc: Felix Kuehling, Alex Deucher, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno
On 5/20/26 12:16, Thomas Hellström wrote:
> Use __UNIQUE_ID as done elsewhere in the kernel rather than a
> hand-rolled __PASTE to craft a unique id.
>
> Also use __maybe_unused rather than (void) to signify that a
> variable, althrough written to, may not actually be used.
>
> v2:
> - Move assignment to declaration (Christian)
> - Declare the retry pointer as void *const.
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
> ---
> include/drm/drm_exec.h | 21 ++++++++++++---------
> 1 file changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/include/drm/drm_exec.h b/include/drm/drm_exec.h
> index dee6ebdbe416..18f84faabbb9 100644
> --- a/include/drm/drm_exec.h
> +++ b/include/drm/drm_exec.h
> @@ -95,6 +95,17 @@ drm_exec_obj(struct drm_exec *exec, unsigned long index)
> #define drm_exec_for_each_locked_object_reverse(exec, obj) \
> __drm_exec_for_each_locked_object_reverse(exec, obj, __UNIQUE_ID(drm_exec))
>
> +/*
> + * Helper to drm_exec_until_all_locked(). Don't use directly.
> + *
> + * Since labels can't be defined local to the loop's body we use a jump pointer
> + * to make sure that the retry is only used from within the loop's body.
> + */
> +#define __drm_exec_until_all_locked(exec, _label) \
> +_label: \
> + for (void *const __maybe_unused __drm_exec_retry_ptr = &&_label; \
> + drm_exec_cleanup(exec);)
> +
> /**
> * drm_exec_until_all_locked - loop until all GEM objects are locked
> * @exec: drm_exec object
> @@ -102,17 +113,9 @@ drm_exec_obj(struct drm_exec *exec, unsigned long index)
> * Core functionality of the drm_exec object. Loops until all GEM objects are
> * locked and no more contention exists. At the beginning of the loop it is
> * guaranteed that no GEM object is locked.
> - *
> - * Since labels can't be defined local to the loops body we use a jump pointer
> - * to make sure that the retry is only used from within the loops body.
> */
> #define drm_exec_until_all_locked(exec) \
> -__PASTE(__drm_exec_, __LINE__): \
> - for (void *__drm_exec_retry_ptr; ({ \
> - __drm_exec_retry_ptr = &&__PASTE(__drm_exec_, __LINE__);\
> - (void)__drm_exec_retry_ptr; \
> - drm_exec_cleanup(exec); \
> - });)
> + __drm_exec_until_all_locked(exec, __UNIQUE_ID(drm_exec))
>
> /**
> * drm_exec_retry_on_contention - restart the loop to grap all locks
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 3/4] drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer
2026-05-20 10:16 ` [PATCH v2 3/4] drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer Thomas Hellström
@ 2026-05-20 11:39 ` Christian König
0 siblings, 0 replies; 15+ messages in thread
From: Christian König @ 2026-05-20 11:39 UTC (permalink / raw)
To: Thomas Hellström, intel-xe
Cc: Felix Kuehling, Alex Deucher, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno
On 5/20/26 12:16, Thomas Hellström wrote:
> The xe driver was using the drm_exec retry pointer directly to
> restart the locking loop after out-of-memory errors. This is
> relying on undocumented behaviour.
>
> Instead add a drm_exec_retry() macro that can be used in this
> situation, and that also warns if the struct drm_exec is
> not newly (re-)initialized.
>
> Use that macro in xe.
>
> v2:
> - Only allow if the drm_exec context is newly initialized.
> (Christian)
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
BTW I've ran into just another complex use case were we need the retry handling with userqueues.
So I'm probably going to use that macro in amdgpu as well but with quite a bit of extended functionality *sigh*.
Anyway patch is good like it is for now, so Reviewed-by: Christian König <christian.koenig@amd.com>.
Thanks,
Christian.
> ---
> drivers/gpu/drm/drm_exec.c | 3 ---
> drivers/gpu/drm/xe/xe_validation.h | 2 +-
> include/drm/drm_exec.h | 19 +++++++++++++++++++
> 3 files changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_exec.c b/drivers/gpu/drm/drm_exec.c
> index 746210f3f6c2..7988f5e7d56a 100644
> --- a/drivers/gpu/drm/drm_exec.c
> +++ b/drivers/gpu/drm/drm_exec.c
> @@ -48,9 +48,6 @@
> * See struct dma_exec for more details.
> */
>
> -/* Dummy value used to initially enter the retry loop */
> -#define DRM_EXEC_DUMMY ((void *)~0)
> -
> /* Unlock all objects and drop references */
> static void drm_exec_unlock_all(struct drm_exec *exec)
> {
> diff --git a/drivers/gpu/drm/xe/xe_validation.h b/drivers/gpu/drm/xe/xe_validation.h
> index a30e732c4d51..4cd955ce6cd2 100644
> --- a/drivers/gpu/drm/xe/xe_validation.h
> +++ b/drivers/gpu/drm/xe/xe_validation.h
> @@ -146,7 +146,7 @@ bool xe_validation_should_retry(struct xe_validation_ctx *ctx, int *ret);
> #define xe_validation_retry_on_oom(_ctx, _ret) \
> do { \
> if (xe_validation_should_retry(_ctx, _ret)) \
> - goto *__drm_exec_retry_ptr; \
> + drm_exec_retry((_ctx)->exec); \
> } while (0)
>
> /**
> diff --git a/include/drm/drm_exec.h b/include/drm/drm_exec.h
> index 18f84faabbb9..99c7e1bb3c5b 100644
> --- a/include/drm/drm_exec.h
> +++ b/include/drm/drm_exec.h
> @@ -9,6 +9,12 @@
> #define DRM_EXEC_INTERRUPTIBLE_WAIT BIT(0)
> #define DRM_EXEC_IGNORE_DUPLICATES BIT(1)
>
> +/*
> + * Dummy value used to initially enter the retry loop.
> + * internal use only.
> + */
> +#define DRM_EXEC_DUMMY ((void *)~0)
> +
> struct drm_gem_object;
>
> /**
> @@ -142,6 +148,19 @@ static inline bool drm_exec_is_contended(struct drm_exec *exec)
> return !!exec->contended;
> }
>
> +/**
> + * drm_exec_retry() - Unconditionally restart the loop to grab all locks.
> + * @exec: drm_exec object
> + *
> + * Unconditionally retry the loop to lock all objects. For consistency,
> + * the exec object needs to be newly initialized.
> + */
> +#define drm_exec_retry(_exec) \
> + do { \
> + WARN_ON((_exec)->contended != DRM_EXEC_DUMMY); \
> + goto *__drm_exec_retry_ptr; \
> + } while (0)
> +
> void drm_exec_init(struct drm_exec *exec, u32 flags, unsigned nr);
> void drm_exec_fini(struct drm_exec *exec);
> bool drm_exec_cleanup(struct drm_exec *exec);
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 4/4] drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket
2026-05-20 10:16 ` [PATCH v2 4/4] drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket Thomas Hellström
@ 2026-05-20 11:42 ` Christian König
0 siblings, 0 replies; 15+ messages in thread
From: Christian König @ 2026-05-20 11:42 UTC (permalink / raw)
To: Thomas Hellström, intel-xe
Cc: Felix Kuehling, Alex Deucher, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno
On 5/20/26 12:16, Thomas Hellström wrote:
> Drivers were accessing this drm_exec member directly.
> While that may seem harmless, it will require action if
> the drm_exec utility is made a subclass of a dma-resv transaction
> utility as outlined in the cover-letter.
>
> Provide an accessor, drm_exec_ticket() to avoid that.
>
> v2:
> - Fix amdgpu compile error (Intel CI)
> - Update the commit message.
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 ++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 6 +++---
> drivers/gpu/drm/xe/xe_validation.c | 4 ++--
> include/drm/drm_exec.h | 11 +++++++++++
> 4 files changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> index 72a5a29e63f6..d54794e5b18b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> @@ -2999,7 +2999,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence __rcu *
> /* Validate PDs, PTs and evicted DMABuf imports last. Otherwise BO
> * validations above would invalidate DMABuf imports again.
> */
> - ret = process_validate_vms(process_info, &exec.ticket);
> + ret = process_validate_vms(process_info, drm_exec_ticket(&exec));
> if (ret) {
> pr_debug("Validating VMs failed, ret: %d\n", ret);
> goto validate_map_fail;
> @@ -3040,7 +3040,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence __rcu *
> goto validate_map_fail;
> }
>
> - ret = amdgpu_vm_handle_moved(adev, peer_vm, &exec.ticket);
> + ret = amdgpu_vm_handle_moved(adev, peer_vm, drm_exec_ticket(&exec));
> if (ret) {
> dev_dbg(adev->dev,
> "Memory eviction: handle moved failed, pid %8d. Try again.\n",
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index 97a851ae7bd8..6ada57abce9d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -1157,7 +1157,7 @@ static int amdgpu_cs_vm_handling(struct amdgpu_cs_parser *p)
> return r;
> }
>
> - r = amdgpu_vm_handle_moved(adev, vm, &p->exec.ticket);
> + r = amdgpu_vm_handle_moved(adev, vm, drm_exec_ticket(&p->exec));
> if (r)
> return r;
>
> @@ -1359,7 +1359,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
> cs->out.handle = seq;
> leader->uf_sequence = seq;
>
> - amdgpu_vm_bo_trace_cs(&fpriv->vm, &p->exec.ticket);
> + amdgpu_vm_bo_trace_cs(&fpriv->vm, drm_exec_ticket(&p->exec));
> for (i = 0; i < p->gang_size; ++i) {
> amdgpu_job_free_resources(p->jobs[i]);
> trace_amdgpu_cs_ioctl(p->jobs[i]);
> @@ -1794,7 +1794,7 @@ int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
> *map = mapping;
>
> /* Double check that the BO is reserved by this CS */
> - if (dma_resv_locking_ctx((*bo)->tbo.base.resv) != &parser->exec.ticket)
> + if (dma_resv_locking_ctx((*bo)->tbo.base.resv) != drm_exec_ticket(&parser->exec))
> return -EINVAL;
>
> /* Make sure VRAM is allocated contigiously */
> diff --git a/drivers/gpu/drm/xe/xe_validation.c b/drivers/gpu/drm/xe/xe_validation.c
> index a611438eaafe..8dff4d0ec895 100644
> --- a/drivers/gpu/drm/xe/xe_validation.c
> +++ b/drivers/gpu/drm/xe/xe_validation.c
> @@ -156,7 +156,7 @@ int xe_validation_ctx_init(struct xe_validation_ctx *ctx, struct xe_validation_d
>
> #ifdef CONFIG_DEBUG_WW_MUTEX_SLOWPATH
> /*
> - * This abuses both drm_exec and ww_mutex internals and should be
> + * This abuses ww_mutex internals and should be
> * replaced by checking for -EDEADLK when we can make TTM
> * stop converting -EDEADLK to -ENOMEM.
> * An alternative is to not have exhaustive eviction with
> @@ -164,7 +164,7 @@ int xe_validation_ctx_init(struct xe_validation_ctx *ctx, struct xe_validation_d
> */
> static bool xe_validation_contention_injected(struct drm_exec *exec)
> {
> - return !!exec->ticket.contending_lock;
> + return !!drm_exec_ticket(exec)->contending_lock;
> }
>
> #else
> diff --git a/include/drm/drm_exec.h b/include/drm/drm_exec.h
> index 99c7e1bb3c5b..8725ba92ff91 100644
> --- a/include/drm/drm_exec.h
> +++ b/include/drm/drm_exec.h
> @@ -161,6 +161,17 @@ static inline bool drm_exec_is_contended(struct drm_exec *exec)
> goto *__drm_exec_retry_ptr; \
> } while (0)
>
> +/**
> + * drm_exec_ticket - return the ww_acquire_ctx for this exec context
> + * @exec: drm_exec object
> + *
> + * Return: Pointer to the ww_acquire_ctx embedded in @exec.
> + */
> +static inline struct ww_acquire_ctx *drm_exec_ticket(struct drm_exec *exec)
> +{
> + return &exec->ticket;
> +}
> +
> void drm_exec_init(struct drm_exec *exec, u32 flags, unsigned nr);
> void drm_exec_fini(struct drm_exec *exec);
> bool drm_exec_cleanup(struct drm_exec *exec);
^ permalink raw reply [flat|nested] 15+ messages in thread
* ✓ Xe.CI.FULL: success for drm/exec: drm_exec polishing (rev2)
2026-05-20 10:16 [PATCH v2 0/4] drm/exec: drm_exec polishing Thomas Hellström
` (7 preceding siblings ...)
2026-05-20 11:34 ` [PATCH v2 0/4] drm/exec: drm_exec polishing Christian König
@ 2026-05-20 19:06 ` Patchwork
8 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-05-20 19:06 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 29228 bytes --]
== Series Details ==
Series: drm/exec: drm_exec polishing (rev2)
URL : https://patchwork.freedesktop.org/series/164149/
State : success
== Summary ==
CI Bug Log - changes from xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b_FULL -> xe-pw-164149v2_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-164149v2_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@intel_hwmon@hwmon-write:
- shard-bmg: NOTRUN -> [FAIL][1] ([Intel XE#7445])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@intel_hwmon@hwmon-write.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic:
- shard-bmg: [PASS][2] -> [FAIL][3] ([Intel XE#3718] / [Intel XE#6078])
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-6/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-9/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-c-dp-2:
- shard-bmg: [PASS][4] -> [FAIL][5] ([Intel XE#6078])
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-6/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-c-dp-2.html
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-9/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-c-dp-2.html
* igt@kms_big_fb@linear-8bpp-rotate-270:
- shard-bmg: NOTRUN -> [SKIP][6] ([Intel XE#2327]) +1 other test skip
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_big_fb@linear-8bpp-rotate-270.html
* igt@kms_big_fb@y-tiled-8bpp-rotate-180:
- shard-bmg: NOTRUN -> [SKIP][7] ([Intel XE#1124]) +2 other tests skip
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_big_fb@y-tiled-8bpp-rotate-180.html
* igt@kms_bw@connected-linear-tiling-4-displays-target-2160x1440p:
- shard-bmg: NOTRUN -> [SKIP][8] ([Intel XE#7679])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_bw@connected-linear-tiling-4-displays-target-2160x1440p.html
* igt@kms_ccs@bad-pixel-format-4-tiled-dg2-mc-ccs:
- shard-bmg: NOTRUN -> [SKIP][9] ([Intel XE#2887]) +2 other tests skip
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_ccs@bad-pixel-format-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs:
- shard-bmg: NOTRUN -> [SKIP][10] ([Intel XE#3432])
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs.html
* igt@kms_cdclk@mode-transition:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#2724] / [Intel XE#7449])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_cdclk@mode-transition.html
* igt@kms_chamelium_hpd@dp-hpd-storm-disable:
- shard-bmg: NOTRUN -> [SKIP][12] ([Intel XE#2252]) +1 other test skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_chamelium_hpd@dp-hpd-storm-disable.html
* igt@kms_cursor_crc@cursor-offscreen-32x32:
- shard-bmg: NOTRUN -> [SKIP][13] ([Intel XE#2320])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_cursor_crc@cursor-offscreen-32x32.html
* igt@kms_cursor_crc@cursor-rapid-movement-512x170:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#2321] / [Intel XE#7355])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-bmg: NOTRUN -> [SKIP][15] ([Intel XE#6126] / [Intel XE#776])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_feature_discovery@display-3x:
- shard-bmg: NOTRUN -> [SKIP][16] ([Intel XE#2373] / [Intel XE#7448])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_feature_discovery@display-3x.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling:
- shard-bmg: NOTRUN -> [SKIP][17] ([Intel XE#7178] / [Intel XE#7351]) +1 other test skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling.html
* igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][18] ([Intel XE#7061] / [Intel XE#7356]) +2 other tests skip
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-blt.html
* igt@kms_frontbuffer_tracking@drrshdr-2p-scndscrn-pri-shrfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][19] ([Intel XE#2311]) +10 other tests skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_frontbuffer_tracking@drrshdr-2p-scndscrn-pri-shrfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-tiling-linear:
- shard-bmg: NOTRUN -> [SKIP][20] ([Intel XE#4141]) +2 other tests skip
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-tiling-linear.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][21] ([Intel XE#2313]) +14 other tests skip
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][22] ([Intel XE#7061]) +2 other tests skip
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-mmap-wc.html
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: NOTRUN -> [SKIP][23] ([Intel XE#3544] / [Intel XE#7915] / [Intel XE#7916])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_hdr@brightness-with-hdr@pipe-a-dp-2-xrgb2101010:
- shard-bmg: NOTRUN -> [SKIP][24] ([Intel XE#7916]) +1 other test skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_hdr@brightness-with-hdr@pipe-a-dp-2-xrgb2101010.html
* igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-3-xrgb16161616f:
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#7915]) +1 other test skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-3-xrgb16161616f.html
* igt@kms_hdr@invalid-metadata-sizes@pipe-a-hdmi-a-3-xrgb16161616f:
- shard-bmg: [PASS][26] -> [SKIP][27] ([Intel XE#7915]) +3 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-6/igt@kms_hdr@invalid-metadata-sizes@pipe-a-hdmi-a-3-xrgb16161616f.html
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-8/igt@kms_hdr@invalid-metadata-sizes@pipe-a-hdmi-a-3-xrgb16161616f.html
* igt@kms_plane@pixel-format-yf-tiled-ccs-modifier:
- shard-bmg: NOTRUN -> [SKIP][28] ([Intel XE#7283])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_plane@pixel-format-yf-tiled-ccs-modifier.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#2763] / [Intel XE#6886]) +4 other tests skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5.html
* igt@kms_pm_dc@dc6-psr:
- shard-bmg: NOTRUN -> [SKIP][30] ([Intel XE#7794])
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_pm_dc@dc6-psr.html
* igt@kms_psr2_sf@psr2-overlay-plane-update-continuous-sf:
- shard-bmg: NOTRUN -> [SKIP][31] ([Intel XE#1489]) +1 other test skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_psr2_sf@psr2-overlay-plane-update-continuous-sf.html
* igt@kms_psr@psr2-primary-blt:
- shard-bmg: NOTRUN -> [SKIP][32] ([Intel XE#2234] / [Intel XE#2850]) +2 other tests skip
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_psr@psr2-primary-blt.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
- shard-bmg: NOTRUN -> [SKIP][33] ([Intel XE#3904] / [Intel XE#7342])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html
* igt@kms_sharpness_filter@filter-scaler-downscale:
- shard-bmg: NOTRUN -> [SKIP][34] ([Intel XE#6503])
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_sharpness_filter@filter-scaler-downscale.html
* igt@xe_eudebug@basic-vm-access-parameters-userptr:
- shard-bmg: NOTRUN -> [SKIP][35] ([Intel XE#7636]) +2 other tests skip
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_eudebug@basic-vm-access-parameters-userptr.html
* igt@xe_evict@evict-mixed-many-threads-small:
- shard-bmg: [PASS][36] -> [INCOMPLETE][37] ([Intel XE#6321])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-8/igt@xe_evict@evict-mixed-many-threads-small.html
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-2/igt@xe_evict@evict-mixed-many-threads-small.html
* igt@xe_evict@evict-small-multi-queue:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#7140])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_evict@evict-small-multi-queue.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-mmap:
- shard-bmg: NOTRUN -> [SKIP][39] ([Intel XE#2322] / [Intel XE#7372]) +2 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-mmap.html
* igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate-race-prefetch:
- shard-bmg: NOTRUN -> [SKIP][40] ([Intel XE#7136]) +2 other tests skip
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate-race-prefetch.html
* igt@xe_exec_multi_queue@two-queues-preempt-mode-fault-userptr:
- shard-bmg: NOTRUN -> [SKIP][41] ([Intel XE#6874]) +7 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_exec_multi_queue@two-queues-preempt-mode-fault-userptr.html
* igt@xe_exec_system_allocator@threads-many-stride-new-prefetch:
- shard-bmg: [PASS][42] -> [ABORT][43] ([Intel XE#7893] / [Intel XE#7913])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-7/igt@xe_exec_system_allocator@threads-many-stride-new-prefetch.html
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-3/igt@xe_exec_system_allocator@threads-many-stride-new-prefetch.html
* igt@xe_exec_threads@threads-multi-queue-fd-userptr-invalidate:
- shard-bmg: NOTRUN -> [SKIP][44] ([Intel XE#7138]) +2 other tests skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_exec_threads@threads-multi-queue-fd-userptr-invalidate.html
* igt@xe_module_load@load:
- shard-bmg: ([PASS][45], [PASS][46], [PASS][47], [PASS][48], [PASS][49], [PASS][50], [PASS][51], [PASS][52], [PASS][53], [PASS][54], [PASS][55], [PASS][56], [PASS][57], [PASS][58], [PASS][59], [PASS][60], [PASS][61], [PASS][62], [PASS][63], [PASS][64], [PASS][65], [PASS][66], [PASS][67], [PASS][68], [PASS][69]) -> ([PASS][70], [PASS][71], [PASS][72], [PASS][73], [PASS][74], [PASS][75], [PASS][76], [PASS][77], [PASS][78], [PASS][79], [PASS][80], [PASS][81], [SKIP][82], [PASS][83], [PASS][84], [PASS][85], [PASS][86], [PASS][87], [PASS][88], [PASS][89], [PASS][90], [PASS][91], [PASS][92], [PASS][93], [PASS][94], [PASS][95]) ([Intel XE#2457] / [Intel XE#7405])
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-3/igt@xe_module_load@load.html
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-3/igt@xe_module_load@load.html
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-6/igt@xe_module_load@load.html
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-6/igt@xe_module_load@load.html
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-8/igt@xe_module_load@load.html
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-8/igt@xe_module_load@load.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-9/igt@xe_module_load@load.html
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-7/igt@xe_module_load@load.html
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-9/igt@xe_module_load@load.html
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-9/igt@xe_module_load@load.html
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-1/igt@xe_module_load@load.html
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-4/igt@xe_module_load@load.html
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-10/igt@xe_module_load@load.html
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-4/igt@xe_module_load@load.html
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-4/igt@xe_module_load@load.html
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-2/igt@xe_module_load@load.html
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-2/igt@xe_module_load@load.html
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-5/igt@xe_module_load@load.html
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-5/igt@xe_module_load@load.html
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-1/igt@xe_module_load@load.html
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-1/igt@xe_module_load@load.html
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-10/igt@xe_module_load@load.html
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-10/igt@xe_module_load@load.html
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-7/igt@xe_module_load@load.html
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-7/igt@xe_module_load@load.html
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-5/igt@xe_module_load@load.html
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-8/igt@xe_module_load@load.html
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-10/igt@xe_module_load@load.html
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-10/igt@xe_module_load@load.html
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-3/igt@xe_module_load@load.html
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-8/igt@xe_module_load@load.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-8/igt@xe_module_load@load.html
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-1/igt@xe_module_load@load.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-1/igt@xe_module_load@load.html
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-1/igt@xe_module_load@load.html
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-3/igt@xe_module_load@load.html
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-3/igt@xe_module_load@load.html
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_module_load@load.html
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_module_load@load.html
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_module_load@load.html
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-6/igt@xe_module_load@load.html
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_module_load@load.html
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-9/igt@xe_module_load@load.html
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-9/igt@xe_module_load@load.html
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-6/igt@xe_module_load@load.html
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-5/igt@xe_module_load@load.html
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-4/igt@xe_module_load@load.html
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-4/igt@xe_module_load@load.html
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-5/igt@xe_module_load@load.html
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-2/igt@xe_module_load@load.html
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-2/igt@xe_module_load@load.html
* igt@xe_page_reclaim@basic-mixed:
- shard-bmg: NOTRUN -> [SKIP][96] ([Intel XE#7793])
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_page_reclaim@basic-mixed.html
* igt@xe_pm@d3cold-mmap-vram:
- shard-bmg: NOTRUN -> [SKIP][97] ([Intel XE#2284] / [Intel XE#7370])
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_pm@d3cold-mmap-vram.html
* igt@xe_pxp@pxp-termination-key-update-post-termination-irq:
- shard-bmg: NOTRUN -> [SKIP][98] ([Intel XE#4733] / [Intel XE#7417])
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@xe_pxp@pxp-termination-key-update-post-termination-irq.html
#### Possible fixes ####
* igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1:
- shard-lnl: [FAIL][99] ([Intel XE#301]) -> [PASS][100] +1 other test pass
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
* igt@kms_hdr@invalid-hdr:
- shard-bmg: [SKIP][101] ([Intel XE#1503]) -> [PASS][102]
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-9/igt@kms_hdr@invalid-hdr.html
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-8/igt@kms_hdr@invalid-hdr.html
* igt@kms_hdr@invalid-hdr@pipe-a-hdmi-a-3-xrgb2101010:
- shard-bmg: [SKIP][103] ([Intel XE#7922]) -> [PASS][104] +1 other test pass
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-9/igt@kms_hdr@invalid-hdr@pipe-a-hdmi-a-3-xrgb2101010.html
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-8/igt@kms_hdr@invalid-hdr@pipe-a-hdmi-a-3-xrgb2101010.html
* igt@kms_plane_cursor@overlay@pipe-b-hdmi-a-3-size-256:
- shard-bmg: [INCOMPLETE][105] -> [PASS][106] +1 other test pass
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-2/igt@kms_plane_cursor@overlay@pipe-b-hdmi-a-3-size-256.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_plane_cursor@overlay@pipe-b-hdmi-a-3-size-256.html
* igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1:
- shard-lnl: [FAIL][107] ([Intel XE#2142]) -> [PASS][108] +1 other test pass
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-lnl-7/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-lnl-1/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html
#### Warnings ####
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
- shard-lnl: [SKIP][109] ([Intel XE#309] / [Intel XE#7343]) -> [SKIP][110] ([Intel XE#309] / [Intel XE#7343] / [Intel XE#7935])
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-lnl-5/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-lnl-8/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [FAIL][111] ([Intel XE#1729] / [Intel XE#7424]) -> [SKIP][112] ([Intel XE#2426] / [Intel XE#5848])
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-4/igt@kms_tiled_display@basic-test-pattern.html
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-7/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][113] ([Intel XE#2426] / [Intel XE#5848]) -> [SKIP][114] ([Intel XE#2509] / [Intel XE#7437])
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/shard-bmg-10/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[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#2142]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2142
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[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#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2373
[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#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#2724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2724
[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#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
[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#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#6078]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6078
[Intel XE#6126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6126
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
[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#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[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#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
[Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
[Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
[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#7370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7370
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[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#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
[Intel XE#7445]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7445
[Intel XE#7448]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7448
[Intel XE#7449]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7449
[Intel XE#7636]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7636
[Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
[Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
[Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
[Intel XE#7794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7794
[Intel XE#7893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7893
[Intel XE#7913]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7913
[Intel XE#7915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7915
[Intel XE#7916]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7916
[Intel XE#7922]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7922
[Intel XE#7935]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7935
Build changes
-------------
* Linux: xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b -> xe-pw-164149v2
IGT_8923: 3cb6109b3a0596ce448305acc233064c88680eb9 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5101-7d39df83e93eba14a23b1fb6ffff076eb191f27b: 7d39df83e93eba14a23b1fb6ffff076eb191f27b
xe-pw-164149v2: 164149v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164149v2/index.html
[-- Attachment #2: Type: text/html, Size: 31698 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 0/4] drm/exec: drm_exec polishing
2026-05-20 11:34 ` [PATCH v2 0/4] drm/exec: drm_exec polishing Christian König
@ 2026-05-21 11:45 ` Thomas Hellström
0 siblings, 0 replies; 15+ messages in thread
From: Thomas Hellström @ 2026-05-21 11:45 UTC (permalink / raw)
To: Christian König, intel-xe
Cc: Felix Kuehling, Alex Deucher, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Danilo Krummrich, Matthew Brost, Alice Ryhl, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, amd-gfx, dri-devel, linux-arm-msm, freedreno,
Natalie Vock
Hi,
On Wed, 2026-05-20 at 13:34 +0200, Christian König wrote:
> On 5/20/26 12:16, Thomas Hellström wrote:
> > During the work towards enabling exhaustive eviction using full
> > ww locking in TTM, Christian indicated that the path for the
> > drm_exec moving forward was to be a full drm_exec helper with
> > things like userptr validation rather than a WW transaction
> > abstraction. The idea was then briefly discussed to craft a
> > WW transaction helper and then subclass that with drm_exec
> > with the idea that the WW transaction helper could be used in
> > TTM for eviction and for other uses that didn't mandate a full
> > exec sequence.
>
> BTW Natalie is now trying to polish my TTM patches for doing that
> because some test case for the SteamDeck is running
> into issues with pinning buffers for display.
Thanks for the review, Christian.
FWIW I did a POC implementation moving drm_exec as a transaction helper
to the dma-buf layer, and then re-implemented drm_exec on top as a
wrapper here:
https://gitlab.freedesktop.org/thomash/xe-vibe/-/commits/ww_transaction?ref_type=heads
Since this would work on any object with a refererence count and a
dma_resv, and even mixing them, it would solve a couple of issues:
1) Decouple the ttm object refcount issue from the TTM exhaustive
eviction (Not saying we shouldn't get rid of the ttm object refcount
anyway).
2) Implement any eviction locking modes (like snapshotting, object
release after slow-lock and similar) separate from drm_exec, and keep
exec as a pure exec-buf helper.
3) Facilitate ww locking in dma_buf_map().
4) Directly lock VMs instead of vm objects.
I haven't posted the patches yet since I wanted to get some feedback
first of whether this is a reasonable direction.
Thanks,
Thomas
>
> > Regardless whether that actually happens or not, this series
> > aims to clean up abuses of drm_exec internals in drivers
> > so that future development of drm_exec isn't blocked by
> > such driver usage.
>
> Yeah completely agree, going to review those patches now.
>
> Regards,
> Christian.
>
> >
> > Except for patch 2 which is a small cleanup only.
> >
> > v2:
> > - An drm/msm patch was already merged.
> > - Use a unique id for the loop variable (patch 1) (Christian)
> > - Move assignment to declaration (patch 2) (Christian)
> > - Declare the retry pointer as void *const. (patch 2)
> > - Only allow if the drm_exec context is newly initialized. (patch
> > 3)
> > (Christian)
> > - Fix amdgpu compile error (patch 4) (Intel CI)
> > - Update the commit message (patch 4)
> >
> > Thomas Hellström (4):
> > drm/exec: Remove the index parameter from
> > drm_exec_for_each_locked_obj[_reverse]
> > drm/exec: Make the drm_exec_until_all_locked() macro more
> > readable
> > drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer
> > drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct
> > drm_exec::ticket
> >
> > .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 +-
> > drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 15 ++--
> > .../drm/amd/amdgpu/amdgpu_eviction_fence.c | 3 +-
> > drivers/gpu/drm/drm_exec.c | 9 +--
> > drivers/gpu/drm/drm_gpuvm.c | 3 +-
> > drivers/gpu/drm/xe/xe_validation.c | 4 +-
> > drivers/gpu/drm/xe/xe_validation.h | 2 +-
> > drivers/gpu/drm/xe/xe_vm.c | 3 +-
> > include/drm/drm_exec.h | 71 ++++++++++++++-
> > ----
> > 9 files changed, 70 insertions(+), 44 deletions(-)
> >
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2026-05-21 11:45 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-20 10:16 [PATCH v2 0/4] drm/exec: drm_exec polishing Thomas Hellström
2026-05-20 10:16 ` [PATCH v2 1/4] drm/exec: Remove the index parameter from drm_exec_for_each_locked_obj[_reverse] Thomas Hellström
2026-05-20 11:32 ` Christian König
2026-05-20 10:16 ` [PATCH v2 2/4] drm/exec: Make the drm_exec_until_all_locked() macro more readable Thomas Hellström
2026-05-20 11:35 ` Christian König
2026-05-20 10:16 ` [PATCH v2 3/4] drm/exec, drm/xe: Avoid abusing the drm_exec retry pointer Thomas Hellström
2026-05-20 11:39 ` Christian König
2026-05-20 10:16 ` [PATCH v2 4/4] drm/exec, drm/xe, drm/amdgpu: Add an accessor for struct drm_exec::ticket Thomas Hellström
2026-05-20 11:42 ` Christian König
2026-05-20 10:23 ` ✗ CI.checkpatch: warning for drm/exec: drm_exec polishing (rev2) Patchwork
2026-05-20 10:24 ` ✓ CI.KUnit: success " Patchwork
2026-05-20 11:14 ` ✓ Xe.CI.BAT: " Patchwork
2026-05-20 11:34 ` [PATCH v2 0/4] drm/exec: drm_exec polishing Christian König
2026-05-21 11:45 ` Thomas Hellström
2026-05-20 19:06 ` ✓ Xe.CI.FULL: success for drm/exec: drm_exec polishing (rev2) Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox