drm/xe: Fix LR exec queue suspend/resume for S3/S4
Subsystems (3)
Thomas Hellström
maintainercover drm/xe: Fix LR exec queue suspend/resume for S3/S4
Long Running (LR) exec queues — used by compute workloads with SVM (fault-mode) and by preempt-fence-mode — were not surviving S3/S4 suspend/resume correctly. Four distinct problems are addressed:
1. Exec queue ops (guc_exec_queue_suspend/resume) lacked coordination when multiple paths (PM, mode switching, preempt fences) needed to hold the queue suspended simultaneously. A suspend refcount ensures the GuC SUSPEND message is only sent when the first caller suspends, and the RESUME message only when the last caller resumes.
2. During PM suspend, guc_exec_queue_stop() banned any user exec queue that had a started-but-incomplete job. For LR queues this is always true — their jobs are designed to run indefinitely — so every PM suspend permanently banned the queue. The ban is now suppressed for LR VM exec queues during PM suspend or hibernation while being preserved for GT reset (legitimate hang detection).
3. Userspace LRC buffer objects carried XE_BO_FLAG_PINNED_LATE_RESTORE, deferring their VRAM restore to after xe_gt_resume(). However, xe_gt_resume() drives context registration, which requires valid LRC VRAM. Dropping the flag moves the restore to xe_bo_restore_early(), a CPU/BAR copy that runs before xe_gt_resume(), fixing the ordering.
4. Fault-mode (SVM) VMs use GPU page faults to access memory. A running fault-mode job can re-fault pages torn down by VRAM eviction, racing with the eviction. A new xe_suspend_all_faulting_lr_jobs() call in the PM notifier stops all fault-mode queues and waits for GuC acknowledgement before eviction begins. On resume, xe_resume_all_faulting_lr_jobs() mirrors the same iteration to re-register and resume exactly those queues. A per-group pm_suspended flag (protected by mode_sem) prevents new fault-mode exec queues from slipping through unsuspended while PM suspend is in progress.
Note: A prerequisite revert ("Revert drm/xe: Skip exec queue schedule toggle if queue is idle during suspend") was already sent as a separate patch and is not included here.
Thomas Hellström (4):
drm/xe/guc: Add suspend refcount to exec queue ops drm/xe/guc: Don't ban LR VM exec queues on PM suspend drm/xe: Restore userspace LRC BOs early on resume drm/xe: Suspend fault-mode LR jobs before VRAM eviction on S3/S4
drivers/gpu/drm/xe/xe_exec_queue_types.h | 7 + drivers/gpu/drm/xe/xe_guc_exec_queue_types.h | 7 + drivers/gpu/drm/xe/xe_guc_submit.c | 60 +++++-- drivers/gpu/drm/xe/xe_guc_submit.h | 1 + drivers/gpu/drm/xe/xe_hw_engine_group.c | 158 +++++++++++++++++- drivers/gpu/drm/xe/xe_hw_engine_group.h | 3 + drivers/gpu/drm/xe/xe_hw_engine_group_types.h | 7 + drivers/gpu/drm/xe/xe_lrc.c | 2 +- drivers/gpu/drm/xe/xe_pm.c | 15 +- 9 files changed, 239 insertions(+), 21 deletions(-)
Signature · 1 line
2.54.0
Thomas Hellström
maintainerPATCH 1/4 drm/xe/guc: Add suspend refcount to exec queue ops
Concurrent call sites that suspend exec queues (PM, mode switching, preempt fences) each need to pair their own suspend/resume without caring about other callers. Without coordination, a resume from one path can prematurely re-enable a queue still suspended by another.
Add suspend_count to xe_guc_exec_queue. The SUSPEND message is only sent on the 0->1 transition; the RESUME message is only sent on the 1->0 transition. Callers simply pair suspend and resume. The existing sched.msg_lock spinlock serialises concurrent calls so neither side needs to know about the other.
--- drivers/gpu/drm/xe/xe_guc_exec_queue_types.h | 7 ++++++ drivers/gpu/drm/xe/xe_guc_submit.c | 24 ++++++++++++-------- 2 files changed, 22 insertions(+), 9 deletions(-)
drivers/gpu/drm/xe/xe_guc_exec_queue_types.h +7 -0
@@ -49,6 +49,13 @@ struct xe_guc_exec_queue {wait_queue_head_t suspend_wait;/** @suspend_pending: a suspend of the exec_queue is pending */ bool suspend_pending; +/** +* @suspend_count: number of active suspend requests, protected by +* @sched.msg_lock. The exec_queue is kept suspended as long as this +* is non-zero. Transitions 0->1 send the SUSPEND message; transitions +* 1->0 send the RESUME message. +*/ +int suspend_count;/** * @needs_cleanup: Needs a cleanup message during VF post migration * recovery.
drivers/gpu/drm/xe/xe_guc_submit.c +15 -9
@@ -2131,15 +2131,18 @@ static int guc_exec_queue_set_multi_queue_priority(struct xe_exec_queue *q,static int guc_exec_queue_suspend (struct xe_exec_queue *q) { -struct xe_gpu_scheduler *sched = &q->guc->sched; -struct xe_sched_msg *msg = q->guc->static_msgs +STATIC_MSG_SUSPEND ; +struct xe_guc_exec_queue *ge = q->guc; +struct xe_gpu_scheduler *sched = &ge->sched; +struct xe_sched_msg *msg = ge->static_msgs +STATIC_MSG_SUSPEND ;if (exec_queue_killed_or_banned_or_wedged (q))return -EINVAL ;xe_sched_msg_lock (sched); -if (guc_exec_queue_try_add_msg (q, msg,SUSPEND )) - q->guc->suspend_pending = true; +if (++ge->suspend_count ==1 ) { +if (guc_exec_queue_try_add_msg (q, msg,SUSPEND )) + ge->suspend_pending = true; + }xe_sched_msg_unlock (sched);return 0 ;
@@ -2190,14 +2193,17 @@ static int guc_exec_queue_suspend_wait(struct xe_exec_queue *q)static void guc_exec_queue_resume (struct xe_exec_queue *q) { -struct xe_gpu_scheduler *sched = &q->guc->sched; -struct xe_sched_msg *msg = q->guc->static_msgs +STATIC_MSG_RESUME ; +struct xe_guc_exec_queue *ge = q->guc; +struct xe_gpu_scheduler *sched = &ge->sched; +struct xe_sched_msg *msg = ge->static_msgs +STATIC_MSG_RESUME ;struct xe_guc *guc =exec_queue_to_guc (q); -xe_gt_assert (guc_to_gt (guc), !q->guc->suspend_pending); -xe_sched_msg_lock (sched); -guc_exec_queue_try_add_msg (q, msg,RESUME ); +xe_gt_assert (guc_to_gt (guc), ge->suspend_count >0 ); +if (--ge->suspend_count ==0 ) { +xe_gt_assert (guc_to_gt (guc), !ge->suspend_pending); +guc_exec_queue_try_add_msg (q, msg,RESUME ); + }xe_sched_msg_unlock (sched); }
Signature · 1 line
2.54.0
Thomas Hellström
maintainerPATCH 2/4 drm/xe/guc: Don't ban LR VM exec queues on PM suspend
In reply to Thomas HellströmWhen xe_guc_submit_stop() is called during an S3/S4 suspend or GT reset, guc_exec_queue_stop() bans any user exec queue that has a job which has started but not yet completed. For normal (non-LR) exec queues this is the correct behaviour: a started-but-incomplete job at reset time may indicate a hung workload.
For exec queues attached to Long Running (LR) VMs the same condition is always true during normal operation: LR jobs are designed to run indefinitely and are never "completed" in the DRM scheduler sense — they are preempted and resumed via the preempt-fence mechanism. Banning such an exec queue on PM suspend permanently prevents the job from restarting after resume, causing the userspace compute workload to fail silently.
Fix this by skipping the ban for LR VM exec queues when a system suspend or hibernation is in progress (pm_sleep_transition_in_progress()). On GT reset the ban logic is preserved: a hung LR workload should still be caught.
--- drivers/gpu/drm/xe/xe_guc_exec_queue_types.h | 8 ++++---- drivers/gpu/drm/xe/xe_guc_submit.c | 11 ++++++++++- 2 files changed, 14 insertions(+), 5 deletions(-)
drivers/gpu/drm/xe/xe_guc_exec_queue_types.h +4 -4
@@ -50,10 +50,10 @@ struct xe_guc_exec_queue {/** @suspend_pending: a suspend of the exec_queue is pending */ bool suspend_pending;/** -* @suspend_count: number of active suspend requests, protected by -* @sched.msg_lock. The exec_queue is kept suspended as long as this -* is non-zero. Transitions 0->1 send the SUSPEND message; transitions -* 1->0 send the RESUME message. +* @suspend_count: Reference count of active suspend requests. The +* exec_queue remains suspended while this is non-zero, allowing +* multiple concurrent callers to independently hold a suspend without +* prematurely re-enabling the queue. Protected by @sched.msg_lock. */ int suspend_count;/**
drivers/gpu/drm/xe/xe_guc_submit.c +10 -1
@@ -9,6 +9,7 @@#include <linux/bitmap.h> #include <linux/circ_buf.h> #include <linux/dma-fence-array.h> +#include <linux/suspend.h> #include <drm/drm_managed.h>
@@ -2274,8 +2275,16 @@ static void guc_exec_queue_stop(struct xe_guc *guc, struct xe_exec_queue *q)* Ban any engine (aside from kernel and engines used for VM ops) with a * started but not complete job or if a job has gone through a GT reset * more than twice. +* +* LR VM exec queues are excluded from this ban during PM suspend: their +* jobs are intentionally long-running and are preempted and resumed via +* the preempt-fence mechanism. Banning them on PM suspend would +* permanently prevent the job from restarting after resume. +* On GT reset however we do want to ban them, as that may indicate a +* genuinely hung workload. */ -if (!(q->flags & (EXEC_QUEUE_FLAG_KERNEL |EXEC_QUEUE_FLAG_VM ))) { +if (!(q->flags & (EXEC_QUEUE_FLAG_KERNEL |EXEC_QUEUE_FLAG_VM )) && + !(q->vm &&xe_vm_in_lr_mode (q->vm) &&pm_sleep_transition_in_progress ())) {struct xe_sched_job *job =xe_sched_first_pending_job (sched);bool ban = false;
Signature · 1 line
2.54.0
Thomas Hellström
maintainerPATCH 3/4 drm/xe: Restore userspace LRC BOs early on resume
In reply to Thomas HellströmWhen GuC registers a context (REGISTER_CONTEXT G2H action), the LRC buffer object must already be present in VRAM with valid content. Userspace LRC BOs currently carry XE_BO_FLAG_PINNED_LATE_RESTORE, which defers their restore to xe_bo_restore_late() — a blitter copy that runs after xe_gt_resume(). However, xe_gt_resume() itself calls xe_guc_submit_start(), which drives guc_exec_queue_start() -> xe_sched_resubmit_jobs() -> guc_exec_queue_run_job() -> register_exec_queue(), all before xe_bo_restore_late() has had a chance to repopulate the BO. The result is that GuC reads LRC state from uninitialised VRAM and raises an exception.
Fix this by dropping XE_BO_FLAG_PINNED_LATE_RESTORE from the userspace LRC BO flags. Without that flag, the BO lands in the pinned.early.kernel_bo_present list and is restored by xe_bo_restore_early() via CPU/BAR copy before xe_gt_resume() is entered. By the time any context registration fires the LRC VRAM is valid.
xe_bo_create_pin_map_novm() already adds XE_BO_FLAG_NEEDS_CPU_ACCESS and XE_BO_FLAG_PINNED, satisfying the requirements of the CPU copy path. Dropping XE_BO_FLAG_PINNED_LATE_RESTORE also makes force_contiguous() return true for these BOs (PINNED without LATE_RESTORE), which is already required for the GGTT mapping they carry.
--- drivers/gpu/drm/xe/xe_lrc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/xe/xe_lrc.c +1 -1
@@ -1661,7 +1661,7 @@ static int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe, struct xe_vXE_BO_FLAG_GGTT_INVALIDATE ;if ((vm && vm->xef) || init_flags &XE_LRC_CREATE_USER_CTX )/* userspace */ - bo_flags |=XE_BO_FLAG_PINNED_LATE_RESTORE |XE_BO_FLAG_FORCE_USER_VRAM ; + bo_flags |=XE_BO_FLAG_FORCE_USER_VRAM ; bo = xe_bo_create_pin_map_novm(xe, tile, bo_size, ttm_bo_type_kernel,
Signature · 1 line
2.54.0
Re: [PATCH 3/4] drm/xe: Restore userspace LRC BOs early on resume
Quoted 10 lines · Thomas Hellström
When GuC registers a context (
REGISTER_CONTEXTG2H action), the LRC buffer object must already be present in VRAM with valid content. Userspace LRC BOs currently carryXE_BO_FLAG_PINNED_LATE_RESTORE, which defers their restore toxe_bo_restore_late()— a blitter copy that runs afterxe_gt_resume(). However,xe_gt_resume()itself callsxe_guc_submit_start(), which drivesguc_exec_queue_start()->xe_sched_resubmit_jobs()->guc_exec_queue_run_job()->register_exec_queue(), all beforexe_bo_restore_late()has had a chance to repopulate the BO. The result is that GuC reads LRC state from uninitialised VRAM and raises an exception.
Hmm, thinking out aloud here, but what stops the hw executing the ring if we can get as far as run_job() this early? Thinking about non-LR, can we not have pending jobs that get re-submitted, before we have had a chance to restore the bb, page-tables, other user BOs etc, since that is maybe late restore also.
Quoted 32 lines
Fix this by dropping
XE_BO_FLAG_PINNED_LATE_RESTOREfrom the userspace LRC BO flags. Without that flag, the BO lands in the pinned.early.kernel_bo_present list and is restored byxe_bo_restore_early()via CPU/BAR copy beforexe_gt_resume()is entered. By the time any context registration fires the LRC VRAM is valid.
xe_bo_create_pin_map_novm()already addsXE_BO_FLAG_NEEDS_CPU_ACCESSandXE_BO_FLAG_PINNED, satisfying the requirements of the CPU copy path. DroppingXE_BO_FLAG_PINNED_LATE_RESTOREalso makesforce_contiguous()return true for these BOs (PINNED withoutLATE_RESTORE), which is already required for the GGTT mapping they carry.Assisted-by GitHub_Copilot:claude-sonnet-4.6Signed-off-by Thomas Hellström <[email protected]>--- drivers/gpu/drm/xe/xe_lrc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/gpu/drm/xe/xe_lrc.c +1
-1@@ -1661,7 +1661,7 @@ static int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe, struct xe_vXE_BO_FLAG_GGTT_INVALIDATE ;if ((vm && vm->xef) || init_flags &XE_LRC_CREATE_USER_CTX )/* userspace */ - bo_flags |=XE_BO_FLAG_PINNED_LATE_RESTORE |XE_BO_FLAG_FORCE_USER_VRAM ; + bo_flags |=XE_BO_FLAG_FORCE_USER_VRAM ; bo = xe_bo_create_pin_map_novm(xe, tile, bo_size, ttm_bo_type_kernel,
Thomas Hellström
maintainerRe: [PATCH 3/4] drm/xe: Restore userspace LRC BOs early on resume
Quoted 15 lines · Matthew Auld
Quoted 5 lines · Thomas Hellström
When GuC registers a context (
REGISTER_CONTEXTG2H action), the LRC buffer object must already be present in VRAM with valid content. Userspace LRC BOs currently carryXE_BO_FLAG_PINNED_LATE_RESTORE, which
defers their restore toxe_bo_restore_late()— a blitter copy thatQuoted 8 lines
runs
after xe_gt_resume(). However,xe_gt_resume()itself callsxe_guc_submit_start(), which drivesguc_exec_queue_start()->xe_sched_resubmit_jobs()->guc_exec_queue_run_job()->register_exec_queue(), all beforexe_bo_restore_late()has had a chance
to repopulate the BO. The result is that GuC reads LRC state from uninitialised VRAM and raises an exception.
Quoted 8 lines
Hmm, thinking out aloud here, but what stops the hw executing the ring
if we can get as far asrun_job()this early? Thinking about non-LR, can
we not have pending jobs that get re-submitted, before we have had a chance to restore the bb, page-tables, other user BOs etc, since that is
maybe late restore also.
Good point. Need to look at that.
/Thomas
Quoted 43 lines
Quoted 43 lines
Fix this by dropping
XE_BO_FLAG_PINNED_LATE_RESTOREfrom the userspace
LRC BO flags. Without that flag, the BO lands in the pinned.early.kernel_bo_present list and is restored byxe_bo_restore_early()via CPU/BAR copy beforexe_gt_resume()is entered.
By the time any context registration fires the LRC VRAM is valid.
xe_bo_create_pin_map_novm()already addsXE_BO_FLAG_NEEDS_CPU_ACCESSandXE_BO_FLAG_PINNED, satisfying the requirements of the CPU copy path.
DroppingXE_BO_FLAG_PINNED_LATE_RESTOREalso makesforce_contiguous()
return true for these BOs (PINNED withoutLATE_RESTORE), which is already
required for the GGTT mapping they carry.Assisted-by GitHub_Copilot:claude-sonnet-4.6Signed-off-by Thomas Hellström <[email protected]>---
drivers/gpu/drm/xe/xe_lrc.c| 2 +-1 file changed, 1 insertion(+), 1 deletion(-)drivers/gpu/drm/xe/xe_lrc.c +0
-0@@ -1661,7 +1661,7 @@ static int xe_lrc_init(struct xe_lrc *lrc,struct
xe_hw_engine*hwe, structxe_v
XE_BO_FLAG_GGTT_INVALIDATE;
if ((vm &&vm->xef) ||init_flags&XE_LRC_CREATE_USER_CTX) /* userspace */drivers/gpu/drm/xe/xe_lrc.c +0
-1- bo_flags |= XE_BO_FLAG_PINNED_LATE_RESTORE |
XE_BO_FLAG_FORCE_USER_VRAM;drivers/gpu/drm/xe/xe_lrc.c +1
-0+ bo_flags |=XE_BO_FLAG_FORCE_USER_VRAM ;
bo = xe_bo_create_pin_map_novm(xe, tile,bo_size,ttm_bo_type_kernel,
Thomas Hellström
maintainerRe: [PATCH 3/4] drm/xe: Restore userspace LRC BOs early on resume
Quoted 31 lines · Thomas Hellström
Quoted 18 lines · Matthew Auld
Quoted 8 lines · Thomas Hellström
When GuC registers a context (
REGISTER_CONTEXTG2H action), the LRC
buffer object must already be present in VRAM with valid content. Userspace LRC BOs currently carryXE_BO_FLAG_PINNED_LATE_RESTORE, which
defers their restore toxe_bo_restore_late()— a blitter copy that
runsQuoted 8 lines
after xe_gt_resume(). However,
xe_gt_resume()itself callsxe_guc_submit_start(), which drivesguc_exec_queue_start()->xe_sched_resubmit_jobs()->guc_exec_queue_run_job()->register_exec_queue(), all beforexe_bo_restore_late()has had a chance
to repopulate the BO. The result is that GuC reads LRC state from
uninitialised VRAM and raises an exception.Quoted 11 lines
Hmm, thinking out aloud here, but what stops the hw executing the ring
if we can get as far asrun_job()this early? Thinking about non- LR,
can
we not have pending jobs that get re-submitted, before we have had a
chance to restore the bb, page-tables, other user BOs etc, since that
is
maybe late restore also.
Quoted 1 line
Good point. Need to look at that.
That's actually the case. I figure this might be hit if we use VRAM page-tables for system BOs.
That case would potentially be fatal for preempt-fence mode as well, I'll have to respin the fault mode patch to unconditionally suspend the preempt-fence exec-queues, since with that case we might not see eviction and hence no preempt-fences firing.
To me a decent fix would be to split up gt resume into two separate steps. One registers migrate exec-queues and activates migrate schedulers. Second does the same for user-space.
/Thomas
Quoted 47 lines
/Thomas
Quoted 44 lines
Quoted 44 lines
Fix this by dropping
XE_BO_FLAG_PINNED_LATE_RESTOREfrom the userspace
LRC BO flags. Without that flag, the BO lands in the pinned.early.kernel_bo_present list and is restored byxe_bo_restore_early()via CPU/BAR copy beforexe_gt_resume()is entered.
By the time any context registration fires the LRC VRAM is valid.
xe_bo_create_pin_map_novm()already addsXE_BO_FLAG_NEEDS_CPU_ACCESSandXE_BO_FLAG_PINNED, satisfying the requirements of the CPU copy path.
DroppingXE_BO_FLAG_PINNED_LATE_RESTOREalso makesforce_contiguous()
return true for these BOs (PINNED withoutLATE_RESTORE), which is already
required for the GGTT mapping they carry.Assisted-by GitHub_Copilot:claude-sonnet-4.6Signed-off-by Thomas Hellström<[email protected]>
---
drivers/gpu/drm/xe/xe_lrc.c| 2 +-1 file changed, 1 insertion(+), 1 deletion(-)drivers/gpu/drm/xe/xe_lrc.c +0
-0@@ -1661,7 +1661,7 @@ static int xe_lrc_init(struct xe_lrc *lrc,struct
xe_hw_engine*hwe, structxe_v
XE_BO_FLAG_GGTT_INVALIDATE;
if ((vm &&vm->xef) ||init_flags&XE_LRC_CREATE_USER_CTX) /* userspace */drivers/gpu/drm/xe/xe_lrc.c +0
-1- bo_flags |= XE_BO_FLAG_PINNED_LATE_RESTORE |
XE_BO_FLAG_FORCE_USER_VRAM;drivers/gpu/drm/xe/xe_lrc.c +1
-0+ bo_flags |=XE_BO_FLAG_FORCE_USER_VRAM ;
bo = xe_bo_create_pin_map_novm(xe, tile,bo_size,ttm_bo_type_kernel,
Re: [PATCH 3/4] drm/xe: Restore userspace LRC BOs early on resume
Quoted 37 lines · Thomas Hellström
Quoted 31 lines · Thomas Hellström
Quoted 18 lines · Matthew Auld
Quoted 8 lines · Thomas Hellström
When GuC registers a context (
REGISTER_CONTEXTG2H action), the LRC
buffer object must already be present in VRAM with valid content. Userspace LRC BOs currently carryXE_BO_FLAG_PINNED_LATE_RESTORE, which
defers their restore toxe_bo_restore_late()— a blitter copy that
runsQuoted 8 lines
after xe_gt_resume(). However,
xe_gt_resume()itself callsxe_guc_submit_start(), which drivesguc_exec_queue_start()->xe_sched_resubmit_jobs()->guc_exec_queue_run_job()->register_exec_queue(), all beforexe_bo_restore_late()has had a chance
to repopulate the BO. The result is that GuC reads LRC state from
uninitialised VRAM and raises an exception.Quoted 11 lines
Hmm, thinking out aloud here, but what stops the hw executing the ring
if we can get as far asrun_job()this early? Thinking about non- LR,
can
we not have pending jobs that get re-submitted, before we have had a
chance to restore the bb, page-tables, other user BOs etc, since that
is
maybe late restore also.Quoted 1 line
Good point. Need to look at that.
That's actually the case. I figure this might be hit if we use VRAM page-tables for system BOs.
Quoted 8 lines
That case would potentially be fatal for preempt-fence mode as well, I'll have to respin the fault mode patch to unconditionally suspend the preempt-fence exec-queues, since with that case we might not see eviction and hence no preempt-fences firing.
To me a decent fix would be to split up gt resume into two separate steps. One registers migrate exec-queues and activates migrate schedulers. Second does the same for user-space.
Yeah, fully agreed. I was also thinking the same here.
Quoted 50 lines
/Thomas
Quoted 47 lines
/Thomas
Quoted 44 lines
Quoted 44 lines
Fix this by dropping
XE_BO_FLAG_PINNED_LATE_RESTOREfrom the userspace
LRC BO flags. Without that flag, the BO lands in the pinned.early.kernel_bo_present list and is restored byxe_bo_restore_early()via CPU/BAR copy beforexe_gt_resume()is entered.
By the time any context registration fires the LRC VRAM is valid.
xe_bo_create_pin_map_novm()already addsXE_BO_FLAG_NEEDS_CPU_ACCESSandXE_BO_FLAG_PINNED, satisfying the requirements of the CPU copy path.
DroppingXE_BO_FLAG_PINNED_LATE_RESTOREalso makesforce_contiguous()
return true for these BOs (PINNED withoutLATE_RESTORE), which is already
required for the GGTT mapping they carry.Assisted-by GitHub_Copilot:claude-sonnet-4.6Signed-off-by Thomas Hellström--- drivers/gpu/drm/xe/xe_lrc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/gpu/drm/xe/xe_lrc.c +0
-0@@ -1661,7 +1661,7 @@ static int xe_lrc_init(struct xe_lrc *lrc,struct
xe_hw_engine*hwe, structxe_v
XE_BO_FLAG_GGTT_INVALIDATE;if ((vm &&
vm->xef) ||init_flags&XE_LRC_CREATE_USER_CTX) /* userspace */drivers/gpu/drm/xe/xe_lrc.c +0
-1- bo_flags |= XE_BO_FLAG_PINNED_LATE_RESTORE |
XE_BO_FLAG_FORCE_USER_VRAM;drivers/gpu/drm/xe/xe_lrc.c +1
-0+ bo_flags |=XE_BO_FLAG_FORCE_USER_VRAM ; bo = xe_bo_create_pin_map_novm(xe, tile, bo_size, ttm_bo_type_kernel,
Thomas Hellström
maintainerPATCH 4/4 drm/xe: Suspend fault-mode LR jobs before VRAM eviction on S3/S4
In reply to Thomas HellströmFault-mode (SVM) exec queues run persistent LR jobs that can re-fault GPU page table entries at any time. During S3/S4 suspend, VRAM eviction calls xe_vm_invalidate_vma() to unmap GPU VMAs, but a running fault-mode job can immediately re-fault those pages back in, creating a race between the GPU and the eviction.
Introduce xe_suspend_all_faulting_lr_jobs() which iterates all hw engine groups across all GTs, suspends every fault-mode exec queue and waits for the GuC to acknowledge the suspend before returning. This is called before xe_bo_evict_all_user() in the PM notifier (user BO eviction) and before xe_bo_evict_all() in xe_pm_suspend() (kernel/pinned BO eviction), ensuring the GPU is idle before any mappings are torn down.
Unlike preempt-fence-mode VMs, fault-mode VMs don't use the rebind worker on resume — rebinding happens lazily through GPU page fault handlers. Therefore xe_resume_all_faulting_lr_jobs() is introduced to explicitly re-register and resume all queues whose pm_suspended flag is set, mirroring the same hw engine group iteration as the suspend path to ensure exact 1:1 pairing without relying on incidental GuC suspend state.
To prevent a new fault-mode exec queue from being added while PM suspend is in progress, a pm_suspended flag is added to xe_hw_engine_group and set under mode_sem before releasing the group lock in xe_suspend_all_faulting_lr_jobs(). xe_hw_engine_group_add_exec_queue() checks this flag under mode_sem: if set, the new queue is immediately suspended (with lr.pm_suspended marked) so that the resume path picks it up. If the group is additionally in EXEC_MODE_DMA_FENCE mode, a second suspend is issued to match the mode-switch resumer, preserving the one-suspend-per-resumer invariant from the suspend refcount. If the queue is destroyed while PM-suspended, del_exec_queue() clears pm_suspended under mode_sem so the resume path skips it cleanly.
The existing comment "FIXME: Super racey..." on xe_bo_evict_all() was describing exactly this class of problem.
--- drivers/gpu/drm/xe/xe_exec_queue_types.h | 7 + drivers/gpu/drm/xe/xe_guc_submit.c | 25 +++ drivers/gpu/drm/xe/xe_guc_submit.h | 1 + drivers/gpu/drm/xe/xe_hw_engine_group.c | 158 +++++++++++++++++- drivers/gpu/drm/xe/xe_hw_engine_group.h | 3 + drivers/gpu/drm/xe/xe_hw_engine_group_types.h | 7 + drivers/gpu/drm/xe/xe_pm.c | 15 +- 7 files changed, 206 insertions(+), 10 deletions(-)
drivers/gpu/drm/xe/xe_exec_queue_types.h +7 -0
@@ -200,6 +200,13 @@ struct xe_exec_queue {u32 seqno;/** @lr.link: link into VM's list of exec queues */ struct list_head link; +/** +* @lr.pm_suspended: Marks that this fault-mode exec +* queue was suspended for PM and must be resumed on +* PM post-suspend. Protected by the hw engine group's +* mode_sem. +*/ +bool pm_suspended; } lr;#define XE_EXEC_QUEUE_TLB_INVAL_PRIMARY_GT 0
drivers/gpu/drm/xe/xe_guc_submit.c +25 -0
@@ -2573,6 +2573,31 @@ int xe_guc_submit_start(struct xe_guc *guc)return 0 ; } +/** +* xe_guc_submit_pm_resume_exec_queue() - Re-enable a fault-mode exec queue after PM resume +* @q: the exec queue to resume +* +* Re-enables a fault-mode LR exec queue for execution after PM resume. +* Has no effect if GuC is stopped or if the queue is in a terminal state +* (killed, banned, wedged, or destroyed). +*/ +void xe_guc_submit_pm_resume_exec_queue (struct xe_exec_queue *q) +{ +struct xe_guc *guc =exec_queue_to_guc (q); + +if (!guc->submission_state.initialized) +return ; + +mutex_lock (&guc->submission_state.lock); +if (!xe_guc_read_stopped (guc) && + !exec_queue_killed_or_banned_or_wedged (q) && !exec_queue_destroyed (q)) { +if (!exec_queue_registered (q)) +register_exec_queue (q,GUC_CONTEXT_NORMAL ); + q->ops->resume (q); + } +mutex_unlock (&guc->submission_state.lock); +} +static void guc_exec_queue_unpause_prepare (struct xe_guc *guc,struct xe_exec_queue *q) {
drivers/gpu/drm/xe/xe_guc_submit.h +1 -0
@@ -20,6 +20,7 @@ int xe_guc_submit_reset_prepare(struct xe_guc *guc);void xe_guc_submit_reset_wait (struct xe_guc *guc);void xe_guc_submit_stop (struct xe_guc *guc);int xe_guc_submit_start (struct xe_guc *guc); +void xe_guc_submit_pm_resume_exec_queue (struct xe_exec_queue *q);void xe_guc_submit_pause (struct xe_guc *guc);void xe_guc_submit_pause_abort (struct xe_guc *guc);void xe_guc_submit_pause_vf (struct xe_guc *guc);
drivers/gpu/drm/xe/xe_hw_engine_group.c +150 -8
194 lines not on this page · raw message
drivers/gpu/drm/xe/xe_hw_engine_group.h +3 -0
@@ -9,6 +9,7 @@#include "xe_hw_engine_group_types.h" struct drm_device ; +struct xe_device ;struct xe_exec_queue ;struct xe_gt ;struct xe_sync_entry ;
@@ -27,5 +28,7 @@ void xe_hw_engine_group_put(struct xe_hw_engine_group *group);enum xe_hw_engine_group_execution_mode xe_hw_engine_group_find_exec_mode (struct xe_exec_queue *q);void xe_hw_engine_group_resume_faulting_lr_jobs (struct xe_hw_engine_group *group); +int xe_suspend_all_faulting_lr_jobs (struct xe_device *xe); +void xe_resume_all_faulting_lr_jobs (struct xe_device *xe);#endif
drivers/gpu/drm/xe/xe_hw_engine_group_types.h +7 -0
@@ -46,6 +46,13 @@ struct xe_hw_engine_group {struct rw_semaphore mode_sem;/** @cur_mode: current execution mode of this hw engine group */ enum xe_hw_engine_group_execution_mode cur_mode; +/** +* @pm_suspended: true while PM suspend is in progress for this group. +* New fault-mode exec queues added while this is set are immediately +* suspended (with @lr.pm_suspended marked) and resumed by +* xe_resume_all_faulting_lr_jobs(). Protected by @mode_sem. +*/ + bool pm_suspended; };#endif
drivers/gpu/drm/xe/xe_pm.c +13 -2
@@ -20,6 +20,7 @@#include "xe_ggtt.h" #include "xe_gt.h" #include "xe_gt_idle.h" +#include "xe_hw_engine_group.h" #include "xe_i2c.h" #include "xe_irq.h" #include "xe_late_bind_fw.h"
@@ -408,9 +409,18 @@ static int xe_pm_notifier_callback(struct notifier_block *nb, {struct xe_validation_ctx ctx; -reinit_completion (&xe->pm_block); -xe_pm_block_begin_signalling ();xe_pm_runtime_get (xe); +xe_pm_block_begin_signalling (); +reinit_completion (&xe->pm_block); + + err =xe_suspend_all_faulting_lr_jobs (xe); +if (err) { +drm_err (&xe->drm,"Notifier suspend faulting LR jobs failed (%d)\n" , err); +complete_all (&xe->pm_block); +xe_pm_block_end_signalling (); +xe_pm_runtime_put (xe); +return notifier_from_errno (err); + } (void )xe_validation_ctx_init (&ctx, &xe->val,NULL , (struct xe_val_flags ) {.exclusive = true}); err =xe_bo_evict_all_user (xe);
@@ -434,6 +444,7 @@ static int xe_pm_notifier_callback(struct notifier_block *nb,complete_all (&xe->pm_block);xe_pm_wake_rebind_workers (xe);xe_bo_notifier_unprepare_all_pinned (xe); +xe_resume_all_faulting_lr_jobs (xe);xe_pm_runtime_put (xe);break ; }
Signature · 1 line
2.54.0
Patchwork
CI✓ CI.KUnit: success for drm/xe: Fix LR exec queue suspend/resume for S3/S4
In reply to Thomas Hellström== Series Details ==
== Series Details ==
Series: drm/xe: Fix LR exec queue suspend/resume for S3/S4
URL : https://patchwork.freedesktop.org/series/167032/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig [14:55:01] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [14:55:05] 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 [14:55:37] Starting KUnit Kernel (1/1)... [14:55:37] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [14:55:37] ================== guc_buf (11 subtests) =================== [14:55:37] [PASSED] test_smallest [14:55:37] [PASSED] test_largest [14:55:37] [PASSED] test_granular [14:55:37] [PASSED] test_unique [14:55:37] [PASSED] test_overlap [14:55:37] [PASSED] test_reusable [14:55:37] [PASSED] test_too_big [14:55:37] [PASSED] test_flush [14:55:37] [PASSED] test_lookup [14:55:37] [PASSED] test_data [14:55:37] [PASSED] test_class [14:55:37] ===================== [PASSED] guc_buf ===================== [14:55:37] =================== guc_dbm (7 subtests) =================== [14:55:37] [PASSED] test_empty [14:55:37] [PASSED] test_default [14:55:37] ======================== test_size ======================== [14:55:37] [PASSED] 4 [14:55:37] [PASSED] 8 [14:55:37] [PASSED] 32 [14:55:37] [PASSED] 256 [14:55:37] ==================== [PASSED] test_size ==================== [14:55:37] ======================= test_reuse ======================== [14:55:37] [PASSED] 4 [14:55:37] [PASSED] 8 [14:55:37] [PASSED] 32 [14:55:37] [PASSED] 256 [14:55:37] =================== [PASSED] test_reuse ==================== [14:55:37] =================== test_range_overlap ==================== [14:55:37] [PASSED] 4 [14:55:37] [PASSED] 8 [14:55:37] [PASSED] 32 [14:55:37] [PASSED] 256 [14:55:37] =============== [PASSED] test_range_overlap ================ [14:55:37] =================== test_range_compact ==================== [14:55:37] [PASSED] 4 [14:55:37] [PASSED] 8 [14:55:37] [PASSED] 32 [14:55:37] [PASSED] 256 [14:55:37] =============== [PASSED] test_range_compact ================ [14:55:37] ==================== test_range_spare ===================== [14:55:37] [PASSED] 4 [14:55:37] [PASSED] 8 [14:55:37] [PASSED] 32 [14:55:37] [PASSED] 256 [14:55:37] ================ [PASSED] test_range_spare ================= [14:55:37] ===================== [PASSED] guc_dbm ===================== [14:55:37] =================== guc_idm (6 subtests) =================== [14:55:37] [PASSED] bad_init [14:55:37] [PASSED] no_init [14:55:37] [PASSED] init_fini [14:55:37] [PASSED] check_used [14:55:37] [PASSED] check_quota [14:55:37] [PASSED] check_all [14:55:37] ===================== [PASSED] guc_idm ===================== [14:55:37] ================== no_relay (3 subtests) =================== [14:55:37] [PASSED] xe_drops_guc2pf_if_not_ready [14:55:37] [PASSED] xe_drops_guc2vf_if_not_ready [14:55:37] [PASSED] xe_rejects_send_if_not_ready [14:55:37] ==================== [PASSED] no_relay ===================== [14:55:37] ================== pf_relay (14 subtests) ================== [14:55:37] [PASSED] pf_rejects_guc2pf_too_short [14:55:37] [PASSED] pf_rejects_guc2pf_too_long [14:55:37] [PASSED] pf_rejects_guc2pf_no_payload [14:55:37] [PASSED] pf_fails_no_payload [14:55:37] [PASSED] pf_fails_bad_origin [14:55:37] [PASSED] pf_fails_bad_type [14:55:37] [PASSED] pf_txn_reports_error [14:55:37] [PASSED] pf_txn_sends_pf2guc [14:55:37] [PASSED] pf_sends_pf2guc [14:55:37] [SKIPPED] pf_loopback_nop [14:55:37] [SKIPPED] pf_loopback_echo [14:55:37] [SKIPPED] pf_loopback_fail [14:55:37] [SKIPPED] pf_loopback_busy [14:55:37] [SKIPPED] pf_loopback_retry [14:55:37] ==================== [PASSED] pf_relay ===================== [14:55:37] ================== vf_relay (3 subtests) =================== [14:55:37] [PASSED] vf_rejects_guc2vf_too_short [14:55:37] [PASSED] vf_rejects_guc2vf_too_long [14:55:37] [PASSED] vf_rejects_guc2vf_no_payload [14:55:37] ==================== [PASSED] vf_relay ===================== [14:55:37] ================ pf_gt_config (9 subtests) ================= [14:55:37] [PASSED] fair_contexts_1vf [14:55:37] [PASSED] fair_doorbells_1vf [14:55:37] [PASSED] fair_ggtt_1vf [14:55:37] ====================== fair_vram_1vf ====================== [14:55:37] [PASSED] 3.50 GiB [14:55:37] [PASSED] 11.5 GiB [14:55:37] [PASSED] 15.5 GiB [14:55:37] [PASSED] 31.5 GiB [14:55:37] [PASSED] 63.5 GiB [14:55:37] [PASSED] 1.91 GiB [14:55:37] ================== [PASSED] fair_vram_1vf ================== [14:55:37] ================ fair_vram_1vf_admin_only ================= [14:55:37] [PASSED] 3.50 GiB [14:55:37] [PASSED] 11.5 GiB [14:55:37] [PASSED] 15.5 GiB [14:55:37] [PASSED] 31.5 GiB [14:55:37] [PASSED] 63.5 GiB [14:55:37] [PASSED] 1.91 GiB [14:55:37] ============ [PASSED] fair_vram_1vf_admin_only ============= [14:55:37] ====================== fair_contexts ====================== [14:55:37] [PASSED] 1 VF [14:55:37] [PASSED] 2 VFs [14:55:37] [PASSED] 3 VFs [14:55:37] [PASSED] 4 VFs [14:55:37] [PASSED] 5 VFs [14:55:37] [PASSED] 6 VFs [14:55:37] [PASSED] 7 VFs [14:55:37] [PASSED] 8 VFs [14:55:37] [PASSED] 9 VFs [14:55:37] [PASSED] 10 VFs [14:55:37] [PASSED] 11 VFs [14:55:37] [PASSED] 12 VFs [14:55:37] [PASSED] 13 VFs [14:55:37] [PASSED] 14 VFs [14:55:37] [PASSED] 15 VFs [14:55:37] [PASSED] 16 VFs [14:55:37] [PASSED] 17 VFs [14:55:37] [PASSED] 18 VFs [14:55:37] [PASSED] 19 VFs [14:55:37] [PASSED] 20 VFs [14:55:37] [PASSED] 21 VFs [14:55:37] [PASSED] 22 VFs [14:55:37] [PASSED] 23 VFs [14:55:37] [PASSED] 24 VFs [14:55:37] [PASSED] 25 VFs [14:55:37] [PASSED] 26 VFs [14:55:37] [PASSED] 27 VFs [14:55:37] [PASSED] 28 VFs [14:55:37] [PASSED] 29 VFs [14:55:37] [PASSED] 30 VFs [14:55:37] [PASSED] 31 VFs [14:55:37] [PASSED] 32 VFs [14:55:37] [PASSED] 33 VFs [14:55:37] [PASSED] 34 VFs [14:55:37] [PASSED] 35 VFs [14:55:37] [PASSED] 36 VFs [14:55:37] [PASSED] 37 VFs [14:55:37] [PASSED] 38 VFs [14:55:37] [PASSED] 39 VFs [14:55:37] [PASSED] 40 VFs [14:55:37] [PASSED] 41 VFs [14:55:37] [PASSED] 42 VFs [14:55:37] [PASSED] 43 VFs [14:55:37] [PASSED] 44 VFs [14:55:37] [PASSED] 45 VFs [14:55:37] [PASSED] 46 VFs [14:55:37] [PASSED] 47 VFs [14:55:37] [PASSED] 48 VFs [14:55:37] [PASSED] 49 VFs [14:55:37] [PASSED] 50 VFs [14:55:37] [PASSED] 51 VFs [14:55:37] [PASSED] 52 VFs [14:55:37] [PASSED] 53 VFs [14:55:37] [PASSED] 54 VFs [14:55:37] [PASSED] 55 VFs [14:55:37] [PASSED] 56 VFs [14:55:37] [PASSED] 57 VFs [14:55:37] [PASSED] 58 VFs [14:55:37] [PASSED] 59 VFs [14:55:37] [PASSED] 60 VFs [14:55:37] [PASSED] 61 VFs [14:55:37] [PASSED] 62 VFs [14:55:37] [PASSED] 63 VFs [14:55:37] ================== [PASSED] fair_contexts ================== [14:55:37] ===================== fair_doorbells ====================== [14:55:37] [PASSED] 1 VF [14:55:37] [PASSED] 2 VFs [14:55:37] [PASSED] 3 VFs [14:55:37] [PASSED] 4 VFs [14:55:37] [PASSED] 5 VFs [14:55:37] [PASSED] 6 VFs [14:55:37] [PASSED] 7 VFs [14:55:37] [PASSED] 8 VFs [14:55:37] [PASSED] 9 VFs [14:55:37] [PASSED] 10 VFs [14:55:37] [PASSED] 11 VFs [14:55:37] [PASSED] 12 VFs [14:55:37] [PASSED] 13 VFs [14:55:37] [PASSED] 14 VFs [14:55:37] [PASSED] 15 VFs [14:55:37] [PASSED] 16 VFs [14:55:37] [PASSED] 17 VFs [14:55:37] [PASSED] 18 VFs [14:55:37] [PASSED] 19 VFs [14:55:37] [PASSED] 20 VFs [14:55:37] [PASSED] 21 VFs [14:55:37] [PASSED] 22 VFs [14:55:37] [PASSED] 23 VFs [14:55:37] [PASSED] 24 VFs [14:55:37] [PASSED] 25 VFs [14:55:37] [PASSED] 26 VFs [14:55:37] [PASSED] 27 VFs [14:55:37] [PASSED] 28 VFs [14:55:37] [PASSED] 29 VFs [14:55:37] [PASSED] 30 VFs [14:55:37] [PASSED] 31 VFs [14:55:37] [PASSED] 32 VFs [14:55:37] [PASSED] 33 VFs [14:55:37] [PASSED] 34 VFs [14:55:37] [PASSED] 35 VFs [14:55:37] [PASSED] 36 VFs [14:55:37] [PASSED] 37 VFs [14:55:37] [PASSED] 38 VFs [14:55:37] [PASSED] 39 VFs [14:55:37] [PASSED] 40 VFs [14:55:37] [PASSED] 41 VFs [14:55:37] [PASSED] 42 VFs [14:55:37] [PASSED] 43 VFs [14:55:37] [PASSED] 44 VFs [14:55:37] [PASSED] 45 VFs [14:55:37] [PASSED] 46 VFs [14:55:37] [PASSED] 47 VFs [14:55:37] [PASSED] 48 VFs [14:55:37] [PASSED] 49 VFs [14:55:37] [PASSED] 50 VFs [14:55:37] [PASSED] 51 VFs [14:55:37] [PASSED] 52 VFs [14:55:37] [PASSED] 53 VFs [14:55:37] [PASSED] 54 VFs [14:55:37] [PASSED] 55 VFs [14:55:37] [PASSED] 56 VFs [14:55:37] [PASSED] 57 VFs [14:55:37] [PASSED] 58 VFs [14:55:37] [PASSED] 59 VFs [14:55:37] [PASSED] 60 VFs [14:55:37] [PASSED] 61 VFs [14:55:37] [PASSED] 62 VFs [14:55:37] [PASSED] 63 VFs [14:55:37] ================= [PASSED] fair_doorbells ================== [14:55:37] ======================== fair_ggtt ======================== [14:55:37] [PASSED] 1 VF [14:55:37] [PASSED] 2 VFs [14:55:37] [PASSED] 3 VFs [14:55:37] [PASSED] 4 VFs [14:55:37] [PASSED] 5 VFs [14:55:37] [PASSED] 6 VFs [14:55:37] [PASSED] 7 VFs [14:55:37] [PASSED] 8 VFs [14:55:37] [PASSED] 9 VFs [14:55:37] [PASSED] 10 VFs [14:55:37] [PASSED] 11 VFs [14:55:37] [PASSED] 12 VFs [14:55:37] [PASSED] 13 VFs [14:55:37] [PASSED] 14 VFs [14:55:37] [PASSED] 15 VFs [14:55:37] [PASSED] 16 VFs [14:55:37] [PASSED] 17 VFs [14:55:37] [PASSED] 18 VFs [14:55:37] [PASSED] 19 VFs [14:55:37] [PASSED] 20 VFs [14:55:37] [PASSED] 21 VFs [14:55:37] [PASSED] 22 VFs [14:55:37] [PASSED] 23 VFs [14:55:37] [PASSED] 24 VFs [14:55:37] [PASSED] 25 VFs [14:55:37] [PASSED] 26 VFs [14:55:37] [PASSED] 27 VFs [14:55:37] [PASSED] 28 VFs [14:55:37] [PASSED] 29 VFs [14:55:37] [PASSED] 30 VFs [14:55:37] [PASSED] 31 VFs [14:55:37] [PASSED] 32 VFs [14:55:37] [PASSED] 33 VFs [14:55:37] [PASSED] 34 VFs [14:55:37] [PASSED] 35 VFs [14:55:37] [PASSED] 36 VFs [14:55:37] [PASSED] 37 VFs [14:55:37] [PASSED] 38 VFs [14:55:37] [PASSED] 39 VFs [14:55:37] [PASSED] 40 VFs [14:55:37] [PASSED] 41 VFs [14:55:37] [PASSED] 42 VFs [14:55:37] [PASSED] 43 VFs [14:55:37] [PASSED] 44 VFs [14:55:37] [PASSED] 45 VFs [14:55:37] [PASSED] 46 VFs [14:55:37] [PASSED] 47 VFs [14:55:37] [PASSED] 48 VFs [14:55:37] [PASSED] 49 VFs [14:55:37] [PASSED] 50 VFs [14:55:37] [PASSED] 51 VFs [14:55:37] [PASSED] 52 VFs [14:55:37] [PASSED] 53 VFs [14:55:37] [PASSED] 54 VFs [14:55:37] [PASSED] 55 VFs [14:55:37] [PASSED] 56 VFs [14:55:37] [PASSED] 57 VFs [14:55:37] [PASSED] 58 VFs [14:55:37] [PASSED] 59 VFs [14:55:37] [PASSED] 60 VFs [14:55:37] [PASSED] 61 VFs [14:55:37] [PASSED] 62 VFs [14:55:37] [PASSED] 63 VFs [14:55:37] ==================== [PASSED] fair_ggtt ==================== [14:55:37] ======================== fair_vram ======================== [14:55:37] [PASSED] 1 VF [14:55:37] [PASSED] 2 VFs [14:55:37] [PASSED] 3 VFs [14:55:37] [PASSED] 4 VFs [14:55:37] [PASSED] 5 VFs [14:55:37] [PASSED] 6 VFs [14:55:37] [PASSED] 7 VFs [14:55:37] [PASSED] 8 VFs [14:55:37] [PASSED] 9 VFs [14:55:37] [PASSED] 10 VFs [14:55:37] [PASSED] 11 VFs [14:55:37] [PASSED] 12 VFs [14:55:37] [PASSED] 13 VFs [14:55:37] [PASSED] 14 VFs [14:55:37] [PASSED] 15 VFs [14:55:37] [PASSED] 16 VFs [14:55:37] [PASSED] 17 VFs [14:55:37] [PASSED] 18 VFs [14:55:37] [PASSED] 19 VFs [14:55:37] [PASSED] 20 VFs [14:55:37] [PASSED] 21 VFs [14:55:37] [PASSED] 22 VFs [14:55:37] [PASSED] 23 VFs [14:55:37] [PASSED] 24 VFs [14:55:37] [PASSED] 25 VFs [14:55:37] [PASSED] 26 VFs [14:55:37] [PASSED] 27 VFs [14:55:37] [PASSED] 28 VFs [14:55:37] [PASSED] 29 VFs [14:55:37] [PASSED] 30 VFs [14:55:37] [PASSED] 31 VFs [14:55:37] [PASSED] 32 VFs [14:55:37] [PASSED] 33 VFs [14:55:37] [PASSED] 34 VFs [14:55:37] [PASSED] 35 VFs [14:55:37] [PASSED] 36 VFs [14:55:37] [PASSED] 37 VFs [14:55:37] [PASSED] 38 VFs [14:55:37] [PASSED] 39 VFs [14:55:37] [PASSED] 40 VFs [14:55:37] [PASSED] 41 VFs [14:55:37] [PASSED] 42 VFs [14:55:37] [PASSED] 43 VFs [14:55:37] [PASSED] 44 VFs [14:55:37] [PASSED] 45 VFs [14:55:37] [PASSED] 46 VFs [14:55:37] [PASSED] 47 VFs [14:55:37] [PASSED] 48 VFs [14:55:37] [PASSED] 49 VFs [14:55:37] [PASSED] 50 VFs [14:55:37] [PASSED] 51 VFs [14:55:37] [PASSED] 52 VFs [14:55:37] [PASSED] 53 VFs [14:55:37] [PASSED] 54 VFs [14:55:37] [PASSED] 55 VFs [14:55:37] [PASSED] 56 VFs [14:55:37] [PASSED] 57 VFs [14:55:37] [PASSED] 58 VFs [14:55:37] [PASSED] 59 VFs [14:55:37] [PASSED] 60 VFs [14:55:37] [PASSED] 61 VFs [14:55:37] [PASSED] 62 VFs [14:55:37] [PASSED] 63 VFs [14:55:37] ==================== [PASSED] fair_vram ==================== [14:55:37] ================== [PASSED] pf_gt_config =================== [14:55:37] ===================== lmtt (1 subtest) ===================== [14:55:37] ======================== test_ops ========================= [14:55:37] [PASSED] 2-level [14:55:37] [PASSED] multi-level [14:55:37] ==================== [PASSED] test_ops ===================== [14:55:37] ====================== [PASSED] lmtt ======================= [14:55:37] ================= pf_service (11 subtests) ================= [14:55:37] [PASSED] pf_negotiate_any [14:55:37] [PASSED] pf_negotiate_base_match [14:55:37] [PASSED] pf_negotiate_base_newer [14:55:37] [PASSED] pf_negotiate_base_next [14:55:37] [SKIPPED] pf_negotiate_base_older [14:55:37] [PASSED] pf_negotiate_base_prev [14:55:37] [PASSED] pf_negotiate_latest_match [14:55:37] [PASSED] pf_negotiate_latest_newer [14:55:37] [PASSED] pf_negotiate_latest_next [14:55:37] [SKIPPED] pf_negotiate_latest_older [14:55:37] [SKIPPED] pf_negotiate_latest_prev [14:55:37] =================== [PASSED] pf_service ==================== [14:55:37] ================= xe_guc_g2g (2 subtests) ================== [14:55:37] ============== xe_live_guc_g2g_kunit_default ============== [14:55:37] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ========== [14:55:37] ============== xe_live_guc_g2g_kunit_allmem =============== [14:55:37] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ========== [14:55:37] =================== [SKIPPED] xe_guc_g2g =================== [14:55:37] =================== xe_mocs (2 subtests) =================== [14:55:37] ================ xe_live_mocs_kernel_kunit ================ [14:55:37] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============ [14:55:37] ================ xe_live_mocs_reset_kunit ================= [14:55:37] ============ [SKIPPED] xe_live_mocs_reset_kunit ============ [14:55:37] ==================== [SKIPPED] xe_mocs ===================== [14:55:37] ================= xe_migrate (2 subtests) ================== [14:55:37] ================= xe_migrate_sanity_kunit ================= [14:55:37] ============ [SKIPPED] xe_migrate_sanity_kunit ============= [14:55:37] ================== xe_validate_ccs_kunit ================== [14:55:37] ============= [SKIPPED] xe_validate_ccs_kunit ============== [14:55:37] =================== [SKIPPED] xe_migrate =================== [14:55:37] ================== xe_dma_buf (1 subtest) ================== [14:55:37] ==================== xe_dma_buf_kunit ===================== [14:55:37] ================ [SKIPPED] xe_dma_buf_kunit ================ [14:55:37] =================== [SKIPPED] xe_dma_buf =================== [14:55:37] ================= xe_bo_shrink (1 subtest) ================= [14:55:37] =================== xe_bo_shrink_kunit ==================== [14:55:37] =============== [SKIPPED] xe_bo_shrink_kunit =============== [14:55:37] ================== [SKIPPED] xe_bo_shrink ================== [14:55:37] ==================== xe_bo (2 subtests) ==================== [14:55:37] ================== xe_ccs_migrate_kunit =================== [14:55:37] ============== [SKIPPED] xe_ccs_migrate_kunit ============== [14:55:37] ==================== xe_bo_evict_kunit ==================== [14:55:37] =============== [SKIPPED] xe_bo_evict_kunit ================ [14:55:37] ===================== [SKIPPED] xe_bo ====================== [14:55:37] ==================== args (13 subtests) ==================== [14:55:37] [PASSED] count_args_test [14:55:37] [PASSED] call_args_example [14:55:37] [PASSED] call_args_test [14:55:37] [PASSED] drop_first_arg_example [14:55:37] [PASSED] drop_first_arg_test [14:55:37] [PASSED] first_arg_example [14:55:37] [PASSED] first_arg_test [14:55:37] [PASSED] last_arg_example [14:55:37] [PASSED] last_arg_test [14:55:37] [PASSED] pick_arg_example [14:55:37] [PASSED] if_args_example [14:55:37] [PASSED] if_args_test [14:55:37] [PASSED] sep_comma_example [14:55:37] ====================== [PASSED] args ======================= [14:55:37] =================== xe_pci (3 subtests) ==================== [14:55:37] ==================== check_graphics_ip ==================== [14:55:37] [PASSED] 12.00 Xe_LP [14:55:37] [PASSED] 12.10 Xe_LP+ [14:55:37] [PASSED] 12.55 Xe_HPG [14:55:37] [PASSED] 12.60 Xe_HPC [14:55:37] [PASSED] 12.70 Xe_LPG [14:55:37] [PASSED] 12.71 Xe_LPG [14:55:37] [PASSED] 12.74 Xe_LPG+ [14:55:37] [PASSED] 20.01 Xe2_HPG [14:55:37] [PASSED] 20.02 Xe2_HPG [14:55:37] [PASSED] 20.04 Xe2_LPG [14:55:37] [PASSED] 30.00 Xe3_LPG [14:55:37] [PASSED] 30.01 Xe3_LPG [14:55:37] [PASSED] 30.03 Xe3_LPG [14:55:37] [PASSED] 30.04 Xe3_LPG [14:55:37] [PASSED] 30.05 Xe3_LPG [14:55:37] [PASSED] 35.10 Xe3p_LPG [14:55:37] [PASSED] 35.11 Xe3p_XPC [14:55:37] ================ [PASSED] check_graphics_ip ================ [14:55:37] ===================== check_media_ip ====================== [14:55:37] [PASSED] 12.00 Xe_M [14:55:37] [PASSED] 12.55 Xe_HPM [14:55:37] [PASSED] 13.00 Xe_LPM+ [14:55:37] [PASSED] 13.01 Xe2_HPM [14:55:37] [PASSED] 20.00 Xe2_LPM [14:55:37] [PASSED] 30.00 Xe3_LPM [14:55:37] [PASSED] 30.02 Xe3_LPM [14:55:37] [PASSED] 35.00 Xe3p_LPM [14:55:37] [PASSED] 35.03 Xe3p_HPM [14:55:37] ================= [PASSED] check_media_ip ================== [14:55:37] =================== check_platform_desc =================== [14:55:37] [PASSED] 0x9A60 (TIGERLAKE) [14:55:37] [PASSED] 0x9A68 (TIGERLAKE) [14:55:37] [PASSED] 0x9A70 (TIGERLAKE) [14:55:37] [PASSED] 0x9A40 (TIGERLAKE) [14:55:37] [PASSED] 0x9A49 (TIGERLAKE) [14:55:37] [PASSED] 0x9A59 (TIGERLAKE) [14:55:37] [PASSED] 0x9A78 (TIGERLAKE) [14:55:37] [PASSED] 0x9AC0 (TIGERLAKE) [14:55:37] [PASSED] 0x9AC9 (TIGERLAKE) [14:55:37] [PASSED] 0x9AD9 (TIGERLAKE) [14:55:37] [PASSED] 0x9AF8 (TIGERLAKE) [14:55:37] [PASSED] 0x4C80 (ROCKETLAKE) [14:55:37] [PASSED] 0x4C8A (ROCKETLAKE) [14:55:37] [PASSED] 0x4C8B (ROCKETLAKE) [14:55:37] [PASSED] 0x4C8C (ROCKETLAKE) [14:55:37] [PASSED] 0x4C90 (ROCKETLAKE) [14:55:37] [PASSED] 0x4C9A (ROCKETLAKE) [14:55:37] [PASSED] 0x4680 (ALDERLAKE_S) [14:55:37] [PASSED] 0x4682 (ALDERLAKE_S) [14:55:37] [PASSED] 0x4688 (ALDERLAKE_S) [14:55:37] [PASSED] 0x468A (ALDERLAKE_S) [14:55:37] [PASSED] 0x468B (ALDERLAKE_S) [14:55:37] [PASSED] 0x4690 (ALDERLAKE_S) [14:55:37] [PASSED] 0x4692 (ALDERLAKE_S) [14:55:37] [PASSED] 0x4693 (ALDERLAKE_S) [14:55:37] [PASSED] 0x46A0 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46A1 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46A2 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46A3 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46A6 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46A8 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46AA (ALDERLAKE_P) [14:55:37] [PASSED] 0x462A (ALDERLAKE_P) [14:55:37] [PASSED] 0x4626 (ALDERLAKE_P) [14:55:37] [PASSED] 0x4628 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46B0 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46B1 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46B2 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46B3 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46C0 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46C1 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46C2 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46C3 (ALDERLAKE_P) [14:55:37] [PASSED] 0x46D0 (ALDERLAKE_N) [14:55:37] [PASSED] 0x46D1 (ALDERLAKE_N) [14:55:37] [PASSED] 0x46D2 (ALDERLAKE_N) [14:55:37] [PASSED] 0x46D3 (ALDERLAKE_N) [14:55:37] [PASSED] 0x46D4 (ALDERLAKE_N) [14:55:37] [PASSED] 0xA721 (ALDERLAKE_P) [14:55:37] [PASSED] 0xA7A1 (ALDERLAKE_P) [14:55:37] [PASSED] 0xA7A9 (ALDERLAKE_P) [14:55:37] [PASSED] 0xA7AC (ALDERLAKE_P) [14:55:37] [PASSED] 0xA7AD (ALDERLAKE_P) [14:55:37] [PASSED] 0xA720 (ALDERLAKE_P) [14:55:37] [PASSED] 0xA7A0 (ALDERLAKE_P) [14:55:37] [PASSED] 0xA7A8 (ALDERLAKE_P) [14:55:37] [PASSED] 0xA7AA (ALDERLAKE_P) [14:55:37] [PASSED] 0xA7AB (ALDERLAKE_P) [14:55:37] [PASSED] 0xA780 (ALDERLAKE_S) [14:55:37] [PASSED] 0xA781 (ALDERLAKE_S) [14:55:37] [PASSED] 0xA782 (ALDERLAKE_S) [14:55:37] [PASSED] 0xA783 (ALDERLAKE_S) [14:55:37] [PASSED] 0xA788 (ALDERLAKE_S) [14:55:37] [PASSED] 0xA789 (ALDERLAKE_S) [14:55:37] [PASSED] 0xA78A (ALDERLAKE_S) [14:55:37] [PASSED] 0xA78B (ALDERLAKE_S) [14:55:37] [PASSED] 0x4905 (DG1) [14:55:37] [PASSED] 0x4906 (DG1) [14:55:37] [PASSED] 0x4907 (DG1) [14:55:37] [PASSED] 0x4908 (DG1) [14:55:37] [PASSED] 0x4909 (DG1) [14:55:37] [PASSED] 0x56C0 (DG2) [14:55:37] [PASSED] 0x56C2 (DG2) [14:55:37] [PASSED] 0x56C1 (DG2) [14:55:37] [PASSED] 0x7D51 (METEORLAKE) [14:55:37] [PASSED] 0x7DD1 (METEORLAKE) [14:55:37] [PASSED] 0x7D41 (METEORLAKE) [14:55:37] [PASSED] 0x7D67 (METEORLAKE) [14:55:37] [PASSED] 0xB640 (METEORLAKE) [14:55:37] [PASSED] 0x56A0 (DG2) [14:55:37] [PASSED] 0x56A1 (DG2) [14:55:37] [PASSED] 0x56A2 (DG2) [14:55:37] [PASSED] 0x56BE (DG2) [14:55:37] [PASSED] 0x56BF (DG2) [14:55:37] [PASSED] 0x5690 (DG2) [14:55:37] [PASSED] 0x5691 (DG2) [14:55:37] [PASSED] 0x5692 (DG2) [14:55:37] [PASSED] 0x56A5 (DG2) [14:55:37] [PASSED] 0x56A6 (DG2) [14:55:37] [PASSED] 0x56B0 (DG2) [14:55:37] [PASSED] 0x56B1 (DG2) [14:55:37] [PASSED] 0x56BA (DG2) [14:55:37] [PASSED] 0x56BB (DG2) [14:55:37] [PASSED] 0x56BC (DG2) [14:55:37] [PASSED] 0x56BD (DG2) [14:55:37] [PASSED] 0x5693 (DG2) [14:55:37] [PASSED] 0x5694 (DG2) [14:55:37] [PASSED] 0x5695 (DG2) [14:55:37] [PASSED] 0x56A3 (DG2) [14:55:37] [PASSED] 0x56A4 (DG2) [14:55:37] [PASSED] 0x56B2 (DG2) [14:55:37] [PASSED] 0x56B3 (DG2) [14:55:37] [PASSED] 0x5696 (DG2) [14:55:37] [PASSED] 0x5697 (DG2) [14:55:37] [PASSED] 0xB69 (PVC) [14:55:37] [PASSED] 0xB6E (PVC) [14:55:37] [PASSED] 0xBD4 (PVC) [14:55:37] [PASSED] 0xBD5 (PVC) [14:55:37] [PASSED] 0xBD6 (PVC) [14:55:37] [PASSED] 0xBD7 (PVC) [14:55:37] [PASSED] 0xBD8 (PVC) [14:55:37] [PASSED] 0xBD9 (PVC) [14:55:37] [PASSED] 0xBDA (PVC) [14:55:37] [PASSED] 0xBDB (PVC) [14:55:37] [PASSED] 0xBE0 (PVC) [14:55:37] [PASSED] 0xBE1 (PVC) [14:55:37] [PASSED] 0xBE5 (PVC) [14:55:37] [PASSED] 0x7D40 (METEORLAKE) [14:55:37] [PASSED] 0x7D45 (METEORLAKE) [14:55:37] [PASSED] 0x7D55 (METEORLAKE) [14:55:37] [PASSED] 0x7D60 (METEORLAKE) [14:55:37] [PASSED] 0x7DD5 (METEORLAKE) [14:55:37] [PASSED] 0x6420 (LUNARLAKE) [14:55:37] [PASSED] 0x64A0 (LUNARLAKE) [14:55:37] [PASSED] 0x64B0 (LUNARLAKE) [14:55:37] [PASSED] 0xE202 (BATTLEMAGE) [14:55:37] [PASSED] 0xE209 (BATTLEMAGE) [14:55:37] [PASSED] 0xE20B (BATTLEMAGE) [14:55:37] [PASSED] 0xE20C (BATTLEMAGE) [14:55:37] [PASSED] 0xE20D (BATTLEMAGE) [14:55:37] [PASSED] 0xE210 (BATTLEMAGE) [14:55:37] [PASSED] 0xE211 (BATTLEMAGE) [14:55:37] [PASSED] 0xE212 (BATTLEMAGE) [14:55:37] [PASSED] 0xE216 (BATTLEMAGE) [14:55:37] [PASSED] 0xE220 (BATTLEMAGE) [14:55:37] [PASSED] 0xE221 (BATTLEMAGE) [14:55:37] [PASSED] 0xE222 (BATTLEMAGE) [14:55:37] [PASSED] 0xE223 (BATTLEMAGE) [14:55:37] [PASSED] 0xB080 (PANTHERLAKE) [14:55:37] [PASSED] 0xB081 (PANTHERLAKE) [14:55:37] [PASSED] 0xB082 (PANTHERLAKE) [14:55:37] [PASSED] 0xB083 (PANTHERLAKE) [14:55:37] [PASSED] 0xB084 (PANTHERLAKE) [14:55:37] [PASSED] 0xB085 (PANTHERLAKE) [14:55:37] [PASSED] 0xB086 (PANTHERLAKE) [14:55:37] [PASSED] 0xB087 (PANTHERLAKE) [14:55:37] [PASSED] 0xB08F (PANTHERLAKE) [14:55:37] [PASSED] 0xB090 (PANTHERLAKE) [14:55:37] [PASSED] 0xB0A0 (PANTHERLAKE) [14:55:37] [PASSED] 0xB0B0 (PANTHERLAKE) [14:55:37] [PASSED] 0xFD80 (PANTHERLAKE) [14:55:37] [PASSED] 0xFD81 (PANTHERLAKE) [14:55:37] [PASSED] 0xD740 (NOVALAKE_S) [14:55:37] [PASSED] 0xD741 (NOVALAKE_S) [14:55:37] [PASSED] 0xD742 (NOVALAKE_S) [14:55:37] [PASSED] 0xD743 (NOVALAKE_S) [14:55:37] [PASSED] 0xD744 (NOVALAKE_S) [14:55:37] [PASSED] 0xD745 (NOVALAKE_S) [14:55:37] [PASSED] 0x674C (CRESCENTISLAND) [14:55:37] [PASSED] 0x674D (CRESCENTISLAND) [14:55:37] [PASSED] 0x674E (CRESCENTISLAND) [14:55:37] [PASSED] 0x674F (CRESCENTISLAND) [14:55:37] [PASSED] 0x6750 (CRESCENTISLAND) [14:55:37] [PASSED] 0xD750 (NOVALAKE_P) [14:55:37] [PASSED] 0xD751 (NOVALAKE_P) [14:55:37] [PASSED] 0xD752 (NOVALAKE_P) [14:55:37] [PASSED] 0xD753 (NOVALAKE_P) [14:55:37] [PASSED] 0xD754 (NOVALAKE_P) [14:55:37] [PASSED] 0xD755 (NOVALAKE_P) [14:55:37] [PASSED] 0xD756 (NOVALAKE_P) [14:55:37] [PASSED] 0xD757 (NOVALAKE_P) [14:55:37] [PASSED] 0xD75F (NOVALAKE_P) [14:55:37] =============== [PASSED] check_platform_desc =============== [14:55:37] ===================== [PASSED] xe_pci ====================== [14:55:37] =================== xe_rtp (2 subtests) ==================== [14:55:37] =============== xe_rtp_process_to_sr_tests ================ [14:55:37] [PASSED] coalesce-same-reg [14:55:37] [PASSED] no-match-no-add [14:55:37] [PASSED] match-or [14:55:37] [PASSED] match-or-xfail [14:55:37] [PASSED] no-match-no-add-multiple-rules [14:55:37] [PASSED] two-regs-two-entries [14:55:37] [PASSED] clr-one-set-other [14:55:37] [PASSED] set-field [14:55:37] [PASSED] conflict-duplicate [14:55:37] [PASSED] conflict-not-disjoint [14:55:37] [PASSED] conflict-reg-type [14:55:37] [PASSED] bad-mcr-reg-forced-to-regular [14:55:37] [PASSED] bad-regular-reg-forced-to-mcr [14:55:37] =========== [PASSED] xe_rtp_process_to_sr_tests ============ [14:55:37] ================== xe_rtp_process_tests =================== [14:55:37] [PASSED] active1 [14:55:37] [PASSED] active2 [14:55:37] [PASSED] active-inactive [14:55:37] [PASSED] inactive-active [14:55:37] [PASSED] inactive-1st_or_active-inactive [14:55:37] [PASSED] inactive-2nd_or_active-inactive [14:55:37] [PASSED] inactive-last_or_active-inactive [14:55:37] [PASSED] inactive-no_or_active-inactive [14:55:37] ============== [PASSED] xe_rtp_process_tests =============== [14:55:37] ===================== [PASSED] xe_rtp ====================== [14:55:37] ==================== xe_wa (1 subtest) ===================== [14:55:37] ======================== xe_wa_gt ========================= [14:55:37] [PASSED] TIGERLAKE B0 [14:55:37] [PASSED] DG1 A0 [14:55:37] [PASSED] DG1 B0 [14:55:37] [PASSED] ALDERLAKE_S A0 [14:55:37] [PASSED] ALDERLAKE_S B0 [14:55:37] [PASSED] ALDERLAKE_S C0 [14:55:37] [PASSED] ALDERLAKE_S D0 [14:55:37] [PASSED] ALDERLAKE_P A0 [14:55:37] [PASSED] ALDERLAKE_P B0 [14:55:37] [PASSED] ALDERLAKE_P C0 [14:55:37] [PASSED] ALDERLAKE_S RPLS D0 [14:55:37] [PASSED] ALDERLAKE_P RPLU E0 [14:55:37] [PASSED] DG2 G10 C0 [14:55:37] [PASSED] DG2 G11 B1 [14:55:37] [PASSED] DG2 G12 A1 [14:55:37] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0 [14:55:37] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0 [14:55:37] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0 [14:55:37] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0 [14:55:37] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0 [14:55:37] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1 [14:55:37] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0 [14:55:37] ==================== [PASSED] xe_wa_gt ===================== [14:55:37] ====================== [PASSED] xe_wa ====================== [14:55:37] ============================================================ [14:55:37] Testing complete. Ran 603 tests: passed: 585, skipped: 18 [14:55:37] Elapsed time: 36.444s total, 4.277s configuring, 31.451s building, 0.688s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig [14:55:38] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [14:55:39] 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 [14:56:03] Starting KUnit Kernel (1/1)... [14:56:03] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [14:56:03] ============ drm_test_pick_cmdline (2 subtests) ============ [14:56:03] [PASSED] drm_test_pick_cmdline_res_1920_1080_60 [14:56:04] =============== drm_test_pick_cmdline_named =============== [14:56:04] [PASSED] NTSC [14:56:04] [PASSED] NTSC-J [14:56:04] [PASSED] PAL [14:56:04] [PASSED] PAL-M [14:56:04] =========== [PASSED] drm_test_pick_cmdline_named =========== [14:56:04] ============== [PASSED] drm_test_pick_cmdline ============== [14:56:04] == drm_test_atomic_get_connector_for_encoder (1 subtest) === [14:56:04] [PASSED] drm_test_drm_atomic_get_connector_for_encoder [14:56:04] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ==== [14:56:04] =========== drm_validate_clone_mode (2 subtests) =========== [14:56:04] ============== drm_test_check_in_clone_mode =============== [14:56:04] [PASSED] in_clone_mode [14:56:04] [PASSED] not_in_clone_mode [14:56:04] ========== [PASSED] drm_test_check_in_clone_mode =========== [14:56:04] =============== drm_test_check_valid_clones =============== [14:56:04] [PASSED] not_in_clone_mode [14:56:04] [PASSED] valid_clone [14:56:04] [PASSED] invalid_clone [14:56:04] =========== [PASSED] drm_test_check_valid_clones =========== [14:56:04] ============= [PASSED] drm_validate_clone_mode ============= [14:56:04] ============= drm_validate_modeset (1 subtest) ============= [14:56:04] [PASSED] drm_test_check_connector_changed_modeset [14:56:04] ============== [PASSED] drm_validate_modeset =============== [14:56:04] ====== drm_test_bridge_get_current_state (2 subtests) ====== [14:56:04] [PASSED] drm_test_drm_bridge_get_current_state_atomic [14:56:04] [PASSED] drm_test_drm_bridge_get_current_state_legacy [14:56:04] ======== [PASSED] drm_test_bridge_get_current_state ======== [14:56:04] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ====== [14:56:04] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic [14:56:04] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled [14:56:04] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy [14:56:04] ======== [PASSED] drm_test_bridge_helper_reset_crtc ======== [14:56:04] ============== drm_bridge_alloc (2 subtests) =============== [14:56:04] [PASSED] drm_test_drm_bridge_alloc_basic [14:56:04] [PASSED] drm_test_drm_bridge_alloc_get_put [14:56:04] ================ [PASSED] drm_bridge_alloc ================= [14:56:04] ============= drm_cmdline_parser (40 subtests) ============= [14:56:04] [PASSED] drm_test_cmdline_force_d_only [14:56:04] [PASSED] drm_test_cmdline_force_D_only_dvi [14:56:04] [PASSED] drm_test_cmdline_force_D_only_hdmi [14:56:04] [PASSED] drm_test_cmdline_force_D_only_not_digital [14:56:04] [PASSED] drm_test_cmdline_force_e_only [14:56:04] [PASSED] drm_test_cmdline_res [14:56:04] [PASSED] drm_test_cmdline_res_vesa [14:56:04] [PASSED] drm_test_cmdline_res_vesa_rblank [14:56:04] [PASSED] drm_test_cmdline_res_rblank [14:56:04] [PASSED] drm_test_cmdline_res_bpp [14:56:04] [PASSED] drm_test_cmdline_res_refresh [14:56:04] [PASSED] drm_test_cmdline_res_bpp_refresh [14:56:04] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced [14:56:04] [PASSED] drm_test_cmdline_res_bpp_refresh_margins [14:56:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off [14:56:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on [14:56:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog [14:56:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital [14:56:04] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on [14:56:04] [PASSED] drm_test_cmdline_res_margins_force_on [14:56:04] [PASSED] drm_test_cmdline_res_vesa_margins [14:56:04] [PASSED] drm_test_cmdline_name [14:56:04] [PASSED] drm_test_cmdline_name_bpp [14:56:04] [PASSED] drm_test_cmdline_name_option [14:56:04] [PASSED] drm_test_cmdline_name_bpp_option [14:56:04] [PASSED] drm_test_cmdline_rotate_0 [14:56:04] [PASSED] drm_test_cmdline_rotate_90 [14:56:04] [PASSED] drm_test_cmdline_rotate_180 [14:56:04] [PASSED] drm_test_cmdline_rotate_270 [14:56:04] [PASSED] drm_test_cmdline_hmirror [14:56:04] [PASSED] drm_test_cmdline_vmirror [14:56:04] [PASSED] drm_test_cmdline_margin_options [14:56:04] [PASSED] drm_test_cmdline_multiple_options [14:56:04] [PASSED] drm_test_cmdline_bpp_extra_and_option [14:56:04] [PASSED] drm_test_cmdline_extra_and_option [14:56:04] [PASSED] drm_test_cmdline_freestanding_options [14:56:04] [PASSED] drm_test_cmdline_freestanding_force_e_and_options [14:56:04] [PASSED] drm_test_cmdline_panel_orientation [14:56:04] ================ drm_test_cmdline_invalid ================= [14:56:04] [PASSED] margin_only [14:56:04] [PASSED] interlace_only [14:56:04] [PASSED] res_missing_x [14:56:04] [PASSED] res_missing_y [14:56:04] [PASSED] res_bad_y [14:56:04] [PASSED] res_missing_y_bpp [14:56:04] [PASSED] res_bad_bpp [14:56:04] [PASSED] res_bad_refresh [14:56:04] [PASSED] res_bpp_refresh_force_on_off [14:56:04] [PASSED] res_invalid_mode [14:56:04] [PASSED] res_bpp_wrong_place_mode [14:56:04] [PASSED] name_bpp_refresh [14:56:04] [PASSED] name_refresh [14:56:04] [PASSED] name_refresh_wrong_mode [14:56:04] [PASSED] name_refresh_invalid_mode [14:56:04] [PASSED] rotate_multiple [14:56:04] [PASSED] rotate_invalid_val [14:56:04] [PASSED] rotate_truncated [14:56:04] [PASSED] invalid_option [14:56:04] [PASSED] invalid_tv_option [14:56:04] [PASSED] truncated_tv_option [14:56:04] ============ [PASSED] drm_test_cmdline_invalid ============= [14:56:04] =============== drm_test_cmdline_tv_options =============== [14:56:04] [PASSED] NTSC [14:56:04] [PASSED] NTSC_443 [14:56:04] [PASSED] NTSC_J [14:56:04] [PASSED] PAL [14:56:04] [PASSED] PAL_M [14:56:04] [PASSED] PAL_N [14:56:04] [PASSED] SECAM [14:56:04] [PASSED] MONO_525 [14:56:04] [PASSED] MONO_625 [14:56:04] =========== [PASSED] drm_test_cmdline_tv_options =========== [14:56:04] =============== [PASSED] drm_cmdline_parser ================ [14:56:04] ========== drmm_connector_hdmi_init (20 subtests) ========== [14:56:04] [PASSED] drm_test_connector_hdmi_init_valid [14:56:04] [PASSED] drm_test_connector_hdmi_init_bpc_8 [14:56:04] [PASSED] drm_test_connector_hdmi_init_bpc_10 [14:56:04] [PASSED] drm_test_connector_hdmi_init_bpc_12 [14:56:04] [PASSED] drm_test_connector_hdmi_init_bpc_invalid [14:56:04] [PASSED] drm_test_connector_hdmi_init_bpc_null [14:56:04] [PASSED] drm_test_connector_hdmi_init_formats_empty [14:56:04] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb [14:56:04] === drm_test_connector_hdmi_init_formats_yuv420_allowed === [14:56:04] [PASSED] supported_formats=0x9 yuv420_allowed=1 [14:56:04] [PASSED] supported_formats=0x9 yuv420_allowed=0 [14:56:04] [PASSED] supported_formats=0x5 yuv420_allowed=1 [14:56:04] [PASSED] supported_formats=0x5 yuv420_allowed=0 [14:56:04] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed === [14:56:04] [PASSED] drm_test_connector_hdmi_init_null_ddc [14:56:04] [PASSED] drm_test_connector_hdmi_init_null_product [14:56:04] [PASSED] drm_test_connector_hdmi_init_null_vendor [14:56:04] [PASSED] drm_test_connector_hdmi_init_product_length_exact [14:56:04] [PASSED] drm_test_connector_hdmi_init_product_length_too_long [14:56:04] [PASSED] drm_test_connector_hdmi_init_product_valid [14:56:04] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact [14:56:04] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long [14:56:04] [PASSED] drm_test_connector_hdmi_init_vendor_valid [14:56:04] ========= drm_test_connector_hdmi_init_type_valid ========= [14:56:04] [PASSED] HDMI-A [14:56:04] [PASSED] HDMI-B [14:56:04] ===== [PASSED] drm_test_connector_hdmi_init_type_valid ===== [14:56:04] ======== drm_test_connector_hdmi_init_type_invalid ======== [14:56:04] [PASSED] Unknown [14:56:04] [PASSED] VGA [14:56:04] [PASSED] DVI-I [14:56:04] [PASSED] DVI-D [14:56:04] [PASSED] DVI-A [14:56:04] [PASSED] Composite [14:56:04] [PASSED] SVIDEO [14:56:04] [PASSED] LVDS [14:56:04] [PASSED] Component [14:56:04] [PASSED] DIN [14:56:04] [PASSED] DP [14:56:04] [PASSED] TV [14:56:04] [PASSED] eDP [14:56:04] [PASSED] Virtual [14:56:04] [PASSED] DSI [14:56:04] [PASSED] DPI [14:56:04] [PASSED] Writeback [14:56:04] [PASSED] SPI [14:56:04] [PASSED] USB [14:56:04] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ==== [14:56:04] ============ [PASSED] drmm_connector_hdmi_init ============= [14:56:04] ============= drmm_connector_init (3 subtests) ============= [14:56:04] [PASSED] drm_test_drmm_connector_init [14:56:04] [PASSED] drm_test_drmm_connector_init_null_ddc [14:56:04] ========= drm_test_drmm_connector_init_type_valid ========= [14:56:04] [PASSED] Unknown [14:56:04] [PASSED] VGA [14:56:04] [PASSED] DVI-I [14:56:04] [PASSED] DVI-D [14:56:04] [PASSED] DVI-A [14:56:04] [PASSED] Composite [14:56:04] [PASSED] SVIDEO [14:56:04] [PASSED] LVDS [14:56:04] [PASSED] Component [14:56:04] [PASSED] DIN [14:56:04] [PASSED] DP [14:56:04] [PASSED] HDMI-A [14:56:04] [PASSED] HDMI-B [14:56:04] [PASSED] TV [14:56:04] [PASSED] eDP [14:56:04] [PASSED] Virtual [14:56:04] [PASSED] DSI [14:56:04] [PASSED] DPI [14:56:04] [PASSED] Writeback [14:56:04] [PASSED] SPI [14:56:04] [PASSED] USB [14:56:04] ===== [PASSED] drm_test_drmm_connector_init_type_valid ===== [14:56:04] =============== [PASSED] drmm_connector_init =============== [14:56:04] ========= drm_connector_dynamic_init (6 subtests) ========== [14:56:04] [PASSED] drm_test_drm_connector_dynamic_init [14:56:04] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc [14:56:04] [PASSED] drm_test_drm_connector_dynamic_init_not_added [14:56:04] [PASSED] drm_test_drm_connector_dynamic_init_properties [14:56:04] ===== drm_test_drm_connector_dynamic_init_type_valid ====== [14:56:04] [PASSED] Unknown [14:56:04] [PASSED] VGA [14:56:04] [PASSED] DVI-I [14:56:04] [PASSED] DVI-D [14:56:04] [PASSED] DVI-A [14:56:04] [PASSED] Composite [14:56:04] [PASSED] SVIDEO [14:56:04] [PASSED] LVDS [14:56:04] [PASSED] Component [14:56:04] [PASSED] DIN [14:56:04] [PASSED] DP [14:56:04] [PASSED] HDMI-A [14:56:04] [PASSED] HDMI-B [14:56:04] [PASSED] TV [14:56:04] [PASSED] eDP [14:56:04] [PASSED] Virtual [14:56:04] [PASSED] DSI [14:56:04] [PASSED] DPI [14:56:04] [PASSED] Writeback [14:56:04] [PASSED] SPI [14:56:04] [PASSED] USB [14:56:04] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid == [14:56:04] ======== drm_test_drm_connector_dynamic_init_name ========= [14:56:04] [PASSED] Unknown [14:56:04] [PASSED] VGA [14:56:04] [PASSED] DVI-I [14:56:04] [PASSED] DVI-D [14:56:04] [PASSED] DVI-A [14:56:04] [PASSED] Composite [14:56:04] [PASSED] SVIDEO [14:56:04] [PASSED] LVDS [14:56:04] [PASSED] Component [14:56:04] [PASSED] DIN [14:56:04] [PASSED] DP [14:56:04] [PASSED] HDMI-A [14:56:04] [PASSED] HDMI-B [14:56:04] [PASSED] TV [14:56:04] [PASSED] eDP [14:56:04] [PASSED] Virtual [14:56:04] [PASSED] DSI [14:56:04] [PASSED] DPI [14:56:04] [PASSED] Writeback [14:56:04] [PASSED] SPI [14:56:04] [PASSED] USB [14:56:04] ==== [PASSED] drm_test_drm_connector_dynamic_init_name ===== [14:56:04] =========== [PASSED] drm_connector_dynamic_init ============ [14:56:04] ==== drm_connector_dynamic_register_early (4 subtests) ===== [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_early_defer [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object [14:56:04] ====== [PASSED] drm_connector_dynamic_register_early ======= [14:56:04] ======= drm_connector_dynamic_register (7 subtests) ======== [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_on_list [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_no_defer [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_no_init [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_mode_object [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_sysfs [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name [14:56:04] [PASSED] drm_test_drm_connector_dynamic_register_debugfs [14:56:04] ========= [PASSED] drm_connector_dynamic_register ========== [14:56:04] = drm_connector_attach_broadcast_rgb_property (2 subtests) = [14:56:04] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property [14:56:04] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector [14:56:04] === [PASSED] drm_connector_attach_broadcast_rgb_property === [14:56:04] ========== drm_get_tv_mode_from_name (2 subtests) ========== [14:56:04] ========== drm_test_get_tv_mode_from_name_valid =========== [14:56:04] [PASSED] NTSC [14:56:04] [PASSED] NTSC-443 [14:56:04] [PASSED] NTSC-J [14:56:04] [PASSED] PAL [14:56:04] [PASSED] PAL-M [14:56:04] [PASSED] PAL-N [14:56:04] [PASSED] SECAM [14:56:04] [PASSED] Mono [14:56:04] ====== [PASSED] drm_test_get_tv_mode_from_name_valid ======= [14:56:04] [PASSED] drm_test_get_tv_mode_from_name_truncated [14:56:04] ============ [PASSED] drm_get_tv_mode_from_name ============ [14:56:04] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) = [14:56:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb [14:56:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc [14:56:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1 [14:56:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc [14:56:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1 [14:56:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double [14:56:04] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid = [14:56:04] [PASSED] VIC 96 [14:56:04] [PASSED] VIC 97 [14:56:04] [PASSED] VIC 101 [14:56:04] [PASSED] VIC 102 [14:56:04] [PASSED] VIC 106 [14:56:04] [PASSED] VIC 107 [14:56:04] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid === [14:56:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc [14:56:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc [14:56:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc [14:56:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc [14:56:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc [14:56:04] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ==== [14:56:04] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) == [14:56:04] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ==== [14:56:04] [PASSED] Automatic [14:56:04] [PASSED] Full [14:56:04] [PASSED] Limited 16:235 [14:56:04] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name === [14:56:04] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid [14:56:04] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ==== [14:56:04] == drm_hdmi_connector_get_output_format_name (2 subtests) == [14:56:04] === drm_test_drm_hdmi_connector_get_output_format_name ==== [14:56:04] [PASSED] RGB [14:56:04] [PASSED] YUV 4:2:0 [14:56:04] [PASSED] YUV 4:2:2 [14:56:04] [PASSED] YUV 4:4:4 [14:56:04] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name === [14:56:04] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid [14:56:04] ==== [PASSED] drm_hdmi_connector_get_output_format_name ==== [14:56:04] ============= drm_damage_helper (21 subtests) ============== [14:56:04] [PASSED] drm_test_damage_iter_no_damage [14:56:04] [PASSED] drm_test_damage_iter_no_damage_fractional_src [14:56:04] [PASSED] drm_test_damage_iter_no_damage_src_moved [14:56:04] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved [14:56:04] [PASSED] drm_test_damage_iter_no_damage_not_visible [14:56:04] [PASSED] drm_test_damage_iter_no_damage_no_crtc [14:56:04] [PASSED] drm_test_damage_iter_no_damage_no_fb [14:56:04] [PASSED] drm_test_damage_iter_simple_damage [14:56:04] [PASSED] drm_test_damage_iter_single_damage [14:56:04] [PASSED] drm_test_damage_iter_single_damage_intersect_src [14:56:04] [PASSED] drm_test_damage_iter_single_damage_outside_src [14:56:04] [PASSED] drm_test_damage_iter_single_damage_fractional_src [14:56:04] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src [14:56:04] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src [14:56:04] [PASSED] drm_test_damage_iter_single_damage_src_moved [14:56:04] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved [14:56:04] [PASSED] drm_test_damage_iter_damage [14:56:04] [PASSED] drm_test_damage_iter_damage_one_intersect [14:56:04] [PASSED] drm_test_damage_iter_damage_one_outside [14:56:04] [PASSED] drm_test_damage_iter_damage_src_moved [14:56:04] [PASSED] drm_test_damage_iter_damage_not_visible [14:56:04] ================ [PASSED] drm_damage_helper ================ [14:56:04] ============== drm_dp_mst_helper (3 subtests) ============== [14:56:04] ============== drm_test_dp_mst_calc_pbn_mode ============== [14:56:04] [PASSED] Clock 154000 BPP 30 DSC disabled [14:56:04] [PASSED] Clock 234000 BPP 30 DSC disabled [14:56:04] [PASSED] Clock 297000 BPP 24 DSC disabled [14:56:04] [PASSED] Clock 332880 BPP 24 DSC enabled [14:56:04] [PASSED] Clock 324540 BPP 24 DSC enabled [14:56:04] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ========== [14:56:04] ============== drm_test_dp_mst_calc_pbn_div =============== [14:56:04] [PASSED] Link rate 2000000 lane count 4 [14:56:04] [PASSED] Link rate 2000000 lane count 2 [14:56:04] [PASSED] Link rate 2000000 lane count 1 [14:56:04] [PASSED] Link rate 1350000 lane count 4 [14:56:04] [PASSED] Link rate 1350000 lane count 2 [14:56:04] [PASSED] Link rate 1350000 lane count 1 [14:56:04] [PASSED] Link rate 1000000 lane count 4 [14:56:04] [PASSED] Link rate 1000000 lane count 2 [14:56:04] [PASSED] Link rate 1000000 lane count 1 [14:56:04] [PASSED] Link rate 810000 lane count 4 [14:56:04] [PASSED] Link rate 810000 lane count 2 [14:56:04] [PASSED] Link rate 810000 lane count 1 [14:56:04] [PASSED] Link rate 540000 lane count 4 [14:56:04] [PASSED] Link rate 540000 lane count 2 [14:56:04] [PASSED] Link rate 540000 lane count 1 [14:56:04] [PASSED] Link rate 270000 lane count 4 [14:56:04] [PASSED] Link rate 270000 lane count 2 [14:56:04] [PASSED] Link rate 270000 lane count 1 [14:56:04] [PASSED] Link rate 162000 lane count 4 [14:56:04] [PASSED] Link rate 162000 lane count 2 [14:56:04] [PASSED] Link rate 162000 lane count 1 [14:56:04] ========== [PASSED] drm_test_dp_mst_calc_pbn_div =========== [14:56:04] ========= drm_test_dp_mst_sideband_msg_req_decode ========= [14:56:04] [PASSED] DP_ENUM_PATH_RESOURCES with port number [14:56:04] [PASSED] DP_POWER_UP_PHY with port number [14:56:04] [PASSED] DP_POWER_DOWN_PHY with port number [14:56:04] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks [14:56:04] [PASSED] DP_ALLOCATE_PAYLOAD with port number [14:56:04] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI [14:56:04] [PASSED] DP_ALLOCATE_PAYLOAD with PBN [14:56:04] [PASSED] DP_QUERY_PAYLOAD with port number [14:56:04] [PASSED] DP_QUERY_PAYLOAD with VCPI [14:56:04] [PASSED] DP_REMOTE_DPCD_READ with port number [14:56:04] [PASSED] DP_REMOTE_DPCD_READ with DPCD address [14:56:04] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes [14:56:04] [PASSED] DP_REMOTE_DPCD_WRITE with port number [14:56:04] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address [14:56:04] [PASSED] DP_REMOTE_DPCD_WRITE with data array [14:56:04] [PASSED] DP_REMOTE_I2C_READ with port number [14:56:04] [PASSED] DP_REMOTE_I2C_READ with I2C device ID [14:56:04] [PASSED] DP_REMOTE_I2C_READ with transactions array [14:56:04] [PASSED] DP_REMOTE_I2C_WRITE with port number [14:56:04] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID [14:56:04] [PASSED] DP_REMOTE_I2C_WRITE with data array [14:56:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID [14:56:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID [14:56:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event [14:56:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event [14:56:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior [14:56:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior [14:56:04] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode ===== [14:56:04] ================ [PASSED] drm_dp_mst_helper ================ [14:56:04] ================== drm_exec (7 subtests) =================== [14:56:04] [PASSED] sanitycheck [14:56:04] [PASSED] test_lock [14:56:04] [PASSED] test_lock_unlock [14:56:04] [PASSED] test_duplicates [14:56:04] [PASSED] test_prepare [14:56:04] [PASSED] test_prepare_array [14:56:04] [PASSED] test_multiple_loops [14:56:04] ==================== [PASSED] drm_exec ===================== [14:56:04] =========== drm_format_helper_test (17 subtests) =========== [14:56:04] ============== drm_test_fb_xrgb8888_to_gray8 ============== [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ========== [14:56:04] ============= drm_test_fb_xrgb8888_to_rgb332 ============== [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ========== [14:56:04] ============= drm_test_fb_xrgb8888_to_rgb565 ============== [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ========== [14:56:04] ============ drm_test_fb_xrgb8888_to_xrgb1555 ============= [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 ========= [14:56:04] ============ drm_test_fb_xrgb8888_to_argb1555 ============= [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 ========= [14:56:04] ============ drm_test_fb_xrgb8888_to_rgba5551 ============= [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 ========= [14:56:04] ============= drm_test_fb_xrgb8888_to_rgb888 ============== [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ========== [14:56:04] ============= drm_test_fb_xrgb8888_to_bgr888 ============== [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ========== [14:56:04] ============ drm_test_fb_xrgb8888_to_argb8888 ============= [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 ========= [14:56:04] =========== drm_test_fb_xrgb8888_to_xrgb2101010 =========== [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 ======= [14:56:04] =========== drm_test_fb_xrgb8888_to_argb2101010 =========== [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 ======= [14:56:04] ============== drm_test_fb_xrgb8888_to_mono =============== [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ========== [PASSED] drm_test_fb_xrgb8888_to_mono =========== [14:56:04] ==================== drm_test_fb_swab ===================== [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ================ [PASSED] drm_test_fb_swab ================= [14:56:04] ============ drm_test_fb_xrgb8888_to_xbgr8888 ============= [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 ========= [14:56:04] ============ drm_test_fb_xrgb8888_to_abgr8888 ============= [14:56:04] [PASSED] single_pixel_source_buffer [14:56:04] [PASSED] single_pixel_clip_rectangle [14:56:04] [PASSED] well_known_colors [14:56:04] [PASSED] destination_pitch [14:56:04] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 ========= [14:56:04] ================= drm_test_fb_clip_offset ================= [14:56:04] [PASSED] pass through [14:56:04] [PASSED] horizontal offset [14:56:04] [PASSED] vertical offset [14:56:04] [PASSED] horizontal and vertical offset [14:56:04] [PASSED] horizontal offset (custom pitch) [14:56:04] [PASSED] vertical offset (custom pitch) [14:56:04] [PASSED] horizontal and vertical offset (custom pitch) [14:56:04] ============= [PASSED] drm_test_fb_clip_offset ============= [14:56:04] =================== drm_test_fb_memcpy ==================== [14:56:04] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258) [14:56:04] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258) [14:56:04] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559) [14:56:04] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258) [14:56:04] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258) [14:56:04] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559) [14:56:04] [PASSED] well_known_colors: XB24 little-endian (0x34324258) [14:56:04] [PASSED] well_known_colors: XRA8 little-endian (0x38415258) [14:56:04] [PASSED] well_known_colors: YU24 little-endian (0x34325559) [14:56:04] [PASSED] destination_pitch: XB24 little-endian (0x34324258) [14:56:04] [PASSED] destination_pitch: XRA8 little-endian (0x38415258) [14:56:04] [PASSED] destination_pitch: YU24 little-endian (0x34325559) [14:56:04] =============== [PASSED] drm_test_fb_memcpy ================ [14:56:04] ============= [PASSED] drm_format_helper_test ============== [14:56:04] ================= drm_format (18 subtests) ================= [14:56:04] [PASSED] drm_test_format_block_width_invalid [14:56:04] [PASSED] drm_test_format_block_width_one_plane [14:56:04] [PASSED] drm_test_format_block_width_two_plane [14:56:04] [PASSED] drm_test_format_block_width_three_plane [14:56:04] [PASSED] drm_test_format_block_width_tiled [14:56:04] [PASSED] drm_test_format_block_height_invalid [14:56:04] [PASSED] drm_test_format_block_height_one_plane [14:56:04] [PASSED] drm_test_format_block_height_two_plane [14:56:04] [PASSED] drm_test_format_block_height_three_plane [14:56:04] [PASSED] drm_test_format_block_height_tiled [14:56:04] [PASSED] drm_test_format_min_pitch_invalid [14:56:04] [PASSED] drm_test_format_min_pitch_one_plane_8bpp [14:56:04] [PASSED] drm_test_format_min_pitch_one_plane_16bpp [14:56:04] [PASSED] drm_test_format_min_pitch_one_plane_24bpp [14:56:04] [PASSED] drm_test_format_min_pitch_one_plane_32bpp [14:56:04] [PASSED] drm_test_format_min_pitch_two_plane [14:56:04] [PASSED] drm_test_format_min_pitch_three_plane_8bpp [14:56:04] [PASSED] drm_test_format_min_pitch_tiled [14:56:04] =================== [PASSED] drm_format ==================== [14:56:04] ============== drm_framebuffer (10 subtests) =============== [14:56:04] ========== drm_test_framebuffer_check_src_coords ========== [14:56:04] [PASSED] Success: source fits into fb [14:56:04] [PASSED] Fail: overflowing fb with x-axis coordinate [14:56:04] [PASSED] Fail: overflowing fb with y-axis coordinate [14:56:04] [PASSED] Fail: overflowing fb with source width [14:56:04] [PASSED] Fail: overflowing fb with source height [14:56:04] ====== [PASSED] drm_test_framebuffer_check_src_coords ====== [14:56:04] [PASSED] drm_test_framebuffer_cleanup [14:56:04] =============== drm_test_framebuffer_create =============== [14:56:04] [PASSED] ABGR8888 normal sizes [14:56:04] [PASSED] ABGR8888 max sizes [14:56:04] [PASSED] ABGR8888 pitch greater than min required [14:56:04] [PASSED] ABGR8888 pitch less than min required [14:56:04] [PASSED] ABGR8888 Invalid width [14:56:04] [PASSED] ABGR8888 Invalid buffer handle [14:56:04] [PASSED] No pixel format [14:56:04] [PASSED] ABGR8888 Width 0 [14:56:04] [PASSED] ABGR8888 Height 0 [14:56:04] [PASSED] ABGR8888 Out of bound height * pitch combination [14:56:04] [PASSED] ABGR8888 Large buffer offset [14:56:04] [PASSED] ABGR8888 Buffer offset for inexistent plane [14:56:04] [PASSED] ABGR8888 Invalid flag [14:56:04] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers [14:56:04] [PASSED] ABGR8888 Valid buffer modifier [14:56:04] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE) [14:56:04] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS [14:56:04] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS [14:56:04] [PASSED] NV12 Normal sizes [14:56:04] [PASSED] NV12 Max sizes [14:56:04] [PASSED] NV12 Invalid pitch [14:56:04] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag [14:56:04] [PASSED] NV12 different modifier per-plane [14:56:04] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE [14:56:04] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS [14:56:04] [PASSED] NV12 Modifier for inexistent plane [14:56:04] [PASSED] NV12 Handle for inexistent plane [14:56:04] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS [14:56:04] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier [14:56:04] [PASSED] YVU420 Normal sizes [14:56:04] [PASSED] YVU420 Max sizes [14:56:04] [PASSED] YVU420 Invalid pitch [14:56:04] [PASSED] YVU420 Different pitches [14:56:04] [PASSED] YVU420 Different buffer offsets/pitches [14:56:04] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS [14:56:04] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS [14:56:04] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS [14:56:04] [PASSED] YVU420 Valid modifier [14:56:04] [PASSED] YVU420 Different modifiers per plane [14:56:04] [PASSED] YVU420 Modifier for inexistent plane [14:56:04] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR) [14:56:04] [PASSED] X0L2 Normal sizes [14:56:04] [PASSED] X0L2 Max sizes [14:56:04] [PASSED] X0L2 Invalid pitch [14:56:04] [PASSED] X0L2 Pitch greater than minimum required [14:56:04] [PASSED] X0L2 Handle for inexistent plane [14:56:04] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set [14:56:04] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set [14:56:04] [PASSED] X0L2 Valid modifier [14:56:04] [PASSED] X0L2 Modifier for inexistent plane [14:56:04] =========== [PASSED] drm_test_framebuffer_create =========== [14:56:04] [PASSED] drm_test_framebuffer_free [14:56:04] [PASSED] drm_test_framebuffer_init [14:56:04] [PASSED] drm_test_framebuffer_init_bad_format [14:56:04] [PASSED] drm_test_framebuffer_init_dev_mismatch [14:56:04] [PASSED] drm_test_framebuffer_lookup [14:56:04] [PASSED] drm_test_framebuffer_lookup_inexistent [14:56:04] [PASSED] drm_test_framebuffer_modifiers_not_supported [14:56:04] ================= [PASSED] drm_framebuffer ================= [14:56:04] ================ drm_gem_shmem (8 subtests) ================ [14:56:04] [PASSED] drm_gem_shmem_test_obj_create [14:56:04] [PASSED] drm_gem_shmem_test_obj_create_private [14:56:04] [PASSED] drm_gem_shmem_test_pin_pages [14:56:04] [PASSED] drm_gem_shmem_test_vmap [14:56:04] [PASSED] drm_gem_shmem_test_get_sg_table [14:56:04] [PASSED] drm_gem_shmem_test_get_pages_sgt [14:56:04] [PASSED] drm_gem_shmem_test_madvise [14:56:04] [PASSED] drm_gem_shmem_test_purge [14:56:04] ================== [PASSED] drm_gem_shmem ================== [14:56:04] === drm_atomic_helper_connector_hdmi_check (27 subtests) === [14:56:04] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode [14:56:04] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1 [14:56:04] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode [14:56:04] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1 [14:56:04] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode [14:56:04] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1 [14:56:04] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 ======= [14:56:04] [PASSED] Automatic [14:56:04] [PASSED] Full [14:56:04] [PASSED] Limited 16:235 [14:56:04] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 === [14:56:04] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed [14:56:04] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed [14:56:04] [PASSED] drm_test_check_disable_connector [14:56:04] [PASSED] drm_test_check_hdmi_funcs_reject_rate [14:56:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb [14:56:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420 [14:56:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422 [14:56:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420 [14:56:04] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420 [14:56:04] [PASSED] drm_test_check_output_bpc_crtc_mode_changed [14:56:04] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed [14:56:04] [PASSED] drm_test_check_output_bpc_dvi [14:56:04] [PASSED] drm_test_check_output_bpc_format_vic_1 [14:56:04] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only [14:56:04] [PASSED] drm_test_check_output_bpc_format_display_rgb_only [14:56:04] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only [14:56:04] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only [14:56:04] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc [14:56:04] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc [14:56:04] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc [14:56:04] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ====== [14:56:04] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ==== [14:56:04] [PASSED] drm_test_check_broadcast_rgb_value [14:56:04] [PASSED] drm_test_check_bpc_8_value [14:56:04] [PASSED] drm_test_check_bpc_10_value [14:56:04] [PASSED] drm_test_check_bpc_12_value [14:56:04] [PASSED] drm_test_check_format_value [14:56:04] [PASSED] drm_test_check_tmds_char_value [14:56:04] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ====== [14:56:04] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) = [14:56:04] [PASSED] drm_test_check_mode_valid [14:56:04] [PASSED] drm_test_check_mode_valid_reject [14:56:04] [PASSED] drm_test_check_mode_valid_reject_rate [14:56:04] [PASSED] drm_test_check_mode_valid_reject_max_clock [14:56:04] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid === [14:56:04] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) = [14:56:04] [PASSED] drm_test_check_infoframes [14:56:04] [PASSED] drm_test_check_reject_avi_infoframe [14:56:04] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8 [14:56:04] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10 [14:56:04] [PASSED] drm_test_check_reject_audio_infoframe [14:56:04] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes === [14:56:04] ================= drm_managed (2 subtests) ================= [14:56:04] [PASSED] drm_test_managed_release_action [14:56:04] [PASSED] drm_test_managed_run_action [14:56:04] =================== [PASSED] drm_managed =================== [14:56:04] =================== drm_mm (6 subtests) ==================== [14:56:04] [PASSED] drm_test_mm_init [14:56:04] [PASSED] drm_test_mm_debug [14:56:04] [PASSED] drm_test_mm_align32 [14:56:04] [PASSED] drm_test_mm_align64 [14:56:04] [PASSED] drm_test_mm_lowest [14:56:04] [PASSED] drm_test_mm_highest [14:56:04] ===================== [PASSED] drm_mm ====================== [14:56:04] ============= drm_modes_analog_tv (5 subtests) ============= [14:56:04] [PASSED] drm_test_modes_analog_tv_mono_576i [14:56:04] [PASSED] drm_test_modes_analog_tv_ntsc_480i [14:56:04] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined [14:56:04] [PASSED] drm_test_modes_analog_tv_pal_576i [14:56:04] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined [14:56:04] =============== [PASSED] drm_modes_analog_tv =============== [14:56:04] ============== drm_plane_helper (2 subtests) =============== [14:56:04] =============== drm_test_check_plane_state ================ [14:56:04] [PASSED] clipping_simple [14:56:04] [PASSED] clipping_rotate_reflect [14:56:04] [PASSED] positioning_simple [14:56:04] [PASSED] upscaling [14:56:04] [PASSED] downscaling [14:56:04] [PASSED] rounding1 [14:56:04] [PASSED] rounding2 [14:56:04] [PASSED] rounding3 [14:56:04] [PASSED] rounding4 [14:56:04] =========== [PASSED] drm_test_check_plane_state ============ [14:56:04] =========== drm_test_check_invalid_plane_state ============ [14:56:04] [PASSED] positioning_invalid [14:56:04] [PASSED] upscaling_invalid [14:56:04] [PASSED] downscaling_invalid [14:56:04] ======= [PASSED] drm_test_check_invalid_plane_state ======== [14:56:04] ================ [PASSED] drm_plane_helper ================= [14:56:04] ====== drm_connector_helper_tv_get_modes (1 subtest) ======= [14:56:04] ====== drm_test_connector_helper_tv_get_modes_check ======= [14:56:04] [PASSED] None [14:56:04] [PASSED] PAL [14:56:04] [PASSED] NTSC [14:56:04] [PASSED] Both, NTSC Default [14:56:04] [PASSED] Both, PAL Default [14:56:04] [PASSED] Both, NTSC Default, with PAL on command-line [14:56:04] [PASSED] Both, PAL Default, with NTSC on command-line [14:56:04] == [PASSED] drm_test_connector_helper_tv_get_modes_check === [14:56:04] ======== [PASSED] drm_connector_helper_tv_get_modes ======== [14:56:04] ================== drm_rect (9 subtests) =================== [14:56:04] [PASSED] drm_test_rect_clip_scaled_div_by_zero [14:56:04] [PASSED] drm_test_rect_clip_scaled_not_clipped [14:56:04] [PASSED] drm_test_rect_clip_scaled_clipped [14:56:04] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned [14:56:04] ================= drm_test_rect_intersect ================= [14:56:04] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0 [14:56:04] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1 [14:56:04] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0 [14:56:04] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1 [14:56:04] [PASSED] right x left: 2x1+0+0 x 3x1+1+0 [14:56:04] [PASSED] left x right: 3x1+1+0 x 2x1+0+0 [14:56:04] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1 [14:56:04] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0 [14:56:04] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1 [14:56:04] [PASSED] touching side: 1x1+0+0 x 1x1+1+0 [14:56:04] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0 [14:56:04] [PASSED] inside another: 2x2+0+0 x 1x1+1+1 [14:56:04] [PASSED] far away: 1x1+0+0 x 1x1+3+6 [14:56:04] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10 [14:56:04] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10 [14:56:04] ============= [PASSED] drm_test_rect_intersect ============= [14:56:04] ================ drm_test_rect_calc_hscale ================ [14:56:04] [PASSED] normal use [14:56:04] [PASSED] out of max range [14:56:04] [PASSED] out of min range [14:56:04] [PASSED] zero dst [14:56:04] [PASSED] negative src [14:56:04] [PASSED] negative dst [14:56:04] ============ [PASSED] drm_test_rect_calc_hscale ============ [14:56:04] ================ drm_test_rect_calc_vscale ================ [14:56:04] [PASSED] normal use [14:56:04] [PASSED] out of max range [14:56:04] [PASSED] out of min range [14:56:04] [PASSED] zero dst [14:56:04] [PASSED] negative src [14:56:04] [PASSED] negative dst [14:56:04] ============ [PASSED] drm_test_rect_calc_vscale ============ [14:56:04] ================== drm_test_rect_rotate =================== [14:56:04] [PASSED] reflect-x [14:56:04] [PASSED] reflect-y [14:56:04] [PASSED] rotate-0 [14:56:04] [PASSED] rotate-90 [14:56:04] [PASSED] rotate-180 [14:56:04] [PASSED] rotate-270 [14:56:04] ============== [PASSED] drm_test_rect_rotate =============== [14:56:04] ================ drm_test_rect_rotate_inv ================= [14:56:04] [PASSED] reflect-x [14:56:04] [PASSED] reflect-y [14:56:04] [PASSED] rotate-0 [14:56:04] [PASSED] rotate-90 [14:56:04] [PASSED] rotate-180 [14:56:04] [PASSED] rotate-270 [14:56:04] ============ [PASSED] drm_test_rect_rotate_inv ============= [14:56:04] ==================== [PASSED] drm_rect ===================== [14:56:04] ============ drm_sysfb_modeset_test (1 subtest) ============ [14:56:04] ============ drm_test_sysfb_build_fourcc_list ============= [14:56:04] [PASSED] no native formats [14:56:04] [PASSED] XRGB8888 as native format [14:56:04] [PASSED] remove duplicates [14:56:04] [PASSED] convert alpha formats [14:56:04] [PASSED] random formats [14:56:04] ======== [PASSED] drm_test_sysfb_build_fourcc_list ========= [14:56:04] ============= [PASSED] drm_sysfb_modeset_test ============== [14:56:04] ================== drm_fixp (2 subtests) =================== [14:56:04] [PASSED] drm_test_int2fixp [14:56:04] [PASSED] drm_test_sm2fixp [14:56:04] ==================== [PASSED] drm_fixp ===================== [14:56:04] ============================================================ [14:56:04] Testing complete. Ran 621 tests: passed: 621 [14:56:04] Elapsed time: 26.004s total, 1.762s configuring, 24.070s building, 0.140s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig [14:56:04] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [14:56:05] 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 [14:56:15] Starting KUnit Kernel (1/1)... [14:56:15] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [14:56:15] ================= ttm_device (5 subtests) ================== [14:56:15] [PASSED] ttm_device_init_basic [14:56:15] [PASSED] ttm_device_init_multiple [14:56:15] [PASSED] ttm_device_fini_basic [14:56:15] [PASSED] ttm_device_init_no_vma_man [14:56:15] ================== ttm_device_init_pools ================== [14:56:15] [PASSED] No DMA allocations, no DMA32 required [14:56:15] [PASSED] DMA allocations, DMA32 required [14:56:15] [PASSED] No DMA allocations, DMA32 required [14:56:15] [PASSED] DMA allocations, no DMA32 required [14:56:15] ============== [PASSED] ttm_device_init_pools ============== [14:56:15] =================== [PASSED] ttm_device ==================== [14:56:15] ================== ttm_pool (8 subtests) =================== [14:56:15] ================== ttm_pool_alloc_basic =================== [14:56:15] [PASSED] One page [14:56:15] [PASSED] More than one page [14:56:15] [PASSED] Above the allocation limit [14:56:15] [PASSED] One page, with coherent DMA mappings enabled [14:56:15] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [14:56:15] ============== [PASSED] ttm_pool_alloc_basic =============== [14:56:15] ============== ttm_pool_alloc_basic_dma_addr ============== [14:56:15] [PASSED] One page [14:56:15] [PASSED] More than one page [14:56:15] [PASSED] Above the allocation limit [14:56:15] [PASSED] One page, with coherent DMA mappings enabled [14:56:15] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [14:56:15] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ========== [14:56:15] [PASSED] ttm_pool_alloc_order_caching_match [14:56:15] [PASSED] ttm_pool_alloc_caching_mismatch [14:56:15] [PASSED] ttm_pool_alloc_order_mismatch [14:56:15] [PASSED] ttm_pool_free_dma_alloc [14:56:15] [PASSED] ttm_pool_free_no_dma_alloc [14:56:15] [PASSED] ttm_pool_fini_basic [14:56:15] ==================== [PASSED] ttm_pool ===================== [14:56:15] ================ ttm_resource (8 subtests) ================= [14:56:15] ================= ttm_resource_init_basic ================= [14:56:15] [PASSED] Init resource in TTM_PL_SYSTEM [14:56:15] [PASSED] Init resource in TTM_PL_VRAM [14:56:15] [PASSED] Init resource in a private placement [14:56:15] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags [14:56:15] ============= [PASSED] ttm_resource_init_basic ============= [14:56:15] [PASSED] ttm_resource_init_pinned [14:56:15] [PASSED] ttm_resource_fini_basic [14:56:15] [PASSED] ttm_resource_manager_init_basic [14:56:15] [PASSED] ttm_resource_manager_usage_basic [14:56:15] [PASSED] ttm_resource_manager_set_used_basic [14:56:15] [PASSED] ttm_sys_man_alloc_basic [14:56:15] [PASSED] ttm_sys_man_free_basic [14:56:15] ================== [PASSED] ttm_resource =================== [14:56:15] =================== ttm_tt (15 subtests) =================== [14:56:15] ==================== ttm_tt_init_basic ==================== [14:56:15] [PASSED] Page-aligned size [14:56:15] [PASSED] Extra pages requested [14:56:15] ================ [PASSED] ttm_tt_init_basic ================ [14:56:15] [PASSED] ttm_tt_init_misaligned [14:56:15] [PASSED] ttm_tt_fini_basic [14:56:15] [PASSED] ttm_tt_fini_sg [14:56:15] [PASSED] ttm_tt_fini_shmem [14:56:15] [PASSED] ttm_tt_create_basic [14:56:15] [PASSED] ttm_tt_create_invalid_bo_type [14:56:15] [PASSED] ttm_tt_create_ttm_exists [14:56:15] [PASSED] ttm_tt_create_failed [14:56:15] [PASSED] ttm_tt_destroy_basic [14:56:15] [PASSED] ttm_tt_populate_null_ttm [14:56:15] [PASSED] ttm_tt_populate_populated_ttm [14:56:15] [PASSED] ttm_tt_unpopulate_basic [14:56:15] [PASSED] ttm_tt_unpopulate_empty_ttm [14:56:15] [PASSED] ttm_tt_swapin_basic [14:56:15] ===================== [PASSED] ttm_tt ====================== [14:56:15] =================== ttm_bo (14 subtests) =================== [14:56:15] =========== ttm_bo_reserve_optimistic_no_ticket =========== [14:56:15] [PASSED] Cannot be interrupted and sleeps [14:56:15] [PASSED] Cannot be interrupted, locks straight away [14:56:15] [PASSED] Can be interrupted, sleeps [14:56:15] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket ======= [14:56:15] [PASSED] ttm_bo_reserve_locked_no_sleep [14:56:15] [PASSED] ttm_bo_reserve_no_wait_ticket [14:56:15] [PASSED] ttm_bo_reserve_double_resv [14:56:15] [PASSED] ttm_bo_reserve_interrupted [14:56:15] [PASSED] ttm_bo_reserve_deadlock [14:56:15] [PASSED] ttm_bo_unreserve_basic [14:56:15] [PASSED] ttm_bo_unreserve_pinned [14:56:15] [PASSED] ttm_bo_unreserve_bulk [14:56:15] [PASSED] ttm_bo_fini_basic [14:56:15] [PASSED] ttm_bo_fini_shared_resv [14:56:15] [PASSED] ttm_bo_pin_basic [14:56:15] [PASSED] ttm_bo_pin_unpin_resource [14:56:15] [PASSED] ttm_bo_multiple_pin_one_unpin [14:56:15] ===================== [PASSED] ttm_bo ====================== [14:56:15] ============== ttm_bo_validate (22 subtests) =============== [14:56:15] ============== ttm_bo_init_reserved_sys_man =============== [14:56:15] [PASSED] Buffer object for userspace [14:56:15] [PASSED] Kernel buffer object [14:56:15] [PASSED] Shared buffer object [14:56:15] ========== [PASSED] ttm_bo_init_reserved_sys_man =========== [14:56:15] ============== ttm_bo_init_reserved_mock_man ============== [14:56:15] [PASSED] Buffer object for userspace [14:56:15] [PASSED] Kernel buffer object [14:56:15] [PASSED] Shared buffer object [14:56:15] ========== [PASSED] ttm_bo_init_reserved_mock_man ========== [14:56:15] [PASSED] ttm_bo_init_reserved_resv [14:56:15] ================== ttm_bo_validate_basic ================== [14:56:15] [PASSED] Buffer object for userspace [14:56:15] [PASSED] Kernel buffer object [14:56:15] [PASSED] Shared buffer object [14:56:15] ============== [PASSED] ttm_bo_validate_basic ============== [14:56:15] [PASSED] ttm_bo_validate_invalid_placement [14:56:15] ============= ttm_bo_validate_same_placement ============== [14:56:15] [PASSED] System manager [14:56:15] [PASSED] VRAM manager [14:56:15] ========= [PASSED] ttm_bo_validate_same_placement ========== [14:56:15] [PASSED] ttm_bo_validate_failed_alloc [14:56:15] [PASSED] ttm_bo_validate_pinned [14:56:15] [PASSED] ttm_bo_validate_busy_placement [14:56:15] ================ ttm_bo_validate_multihop ================= [14:56:15] [PASSED] Buffer object for userspace [14:56:15] [PASSED] Kernel buffer object [14:56:15] [PASSED] Shared buffer object [14:56:15] ============ [PASSED] ttm_bo_validate_multihop ============= [14:56:15] ========== ttm_bo_validate_no_placement_signaled ========== [14:56:15] [PASSED] Buffer object in system domain, no page vector [14:56:15] [PASSED] Buffer object in system domain with an existing page vector [14:56:15] ====== [PASSED] ttm_bo_validate_no_placement_signaled ====== [14:56:15] ======== ttm_bo_validate_no_placement_not_signaled ======== [14:56:15] [PASSED] Buffer object for userspace [14:56:15] [PASSED] Kernel buffer object [14:56:15] [PASSED] Shared buffer object [14:56:15] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ==== [14:56:15] [PASSED] ttm_bo_validate_move_fence_signaled [14:56:15] ========= ttm_bo_validate_move_fence_not_signaled ========= [14:56:15] [PASSED] Waits for GPU [14:56:15] [PASSED] Tries to lock straight away [14:56:15] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled ===== [14:56:15] [PASSED] ttm_bo_validate_swapout [14:56:15] [PASSED] ttm_bo_validate_happy_evict [14:56:15] [PASSED] ttm_bo_validate_all_pinned_evict [14:56:15] [PASSED] ttm_bo_validate_allowed_only_evict [14:56:15] [PASSED] ttm_bo_validate_deleted_evict [14:56:15] [PASSED] ttm_bo_validate_busy_domain_evict [14:56:15] [PASSED] ttm_bo_validate_evict_gutting [14:56:15] [PASSED] ttm_bo_validate_recrusive_evict [14:56:15] ================= [PASSED] ttm_bo_validate ================= [14:56:15] ============================================================ [14:56:15] Testing complete. Ran 102 tests: passed: 102 [14:56:15] Elapsed time: 11.435s total, 1.784s configuring, 9.436s building, 0.185s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel