drm/gpusvm: share one HMM fault across per-device DMA mappings
Subsystems (4)
Honglei Huang
reviewerv2 cover drm/gpusvm: share one HMM fault across per-device DMA mappings
This series is a follow up to the earlier drm_gpusvm_pages decoupling series [1], and follows the direction Matt suggested [2].
drm_gpusvm_get_pages() does two things at once: the MM level HMM fault of the CPU range, and the device DMA mapping of the faulted pages. When one CPU range is mirrored on several devices, every device has to call get_pages() and redo the HMM fault. Matt suggested [2] passing an array of drm_gpusvm_pages plus a count so the fault is taken once and shared, while the notifier retry loop stays in common code so drivers never open code it.
The series builds up to that in small steps, no functional change until the last two patches:
- patch 1 moves the dma_addr allocation out of the notifier locked section, so the mapping step becomes self contained.
- patch 2 pulls the per-device mapping loop into drm_gpusvm_dma_map_pages(). Code motion only.
- patch 3 makes get_pages() take an array of drm_gpusvm_pages plus a
count: fault once, then DMA map each instance, one per owning drm_device, under a single notifier retry gate. Instances that are already mapped are skipped, so an -EAGAIN retry does not redo them. The common 1:1 case passes count == 1 and is unchanged.
- patch 4 adds a no_dma_map context flag so a driver that only needs the CPU pages faulted in can skip the device DMA mapping.
Patch 4 has no in-tree user yet, AMDXDNA is the intended consumer but that conversion is not ready. It is independent of patches 1-3, happy to drop it and repost it together with its user.
v2:
- Rebased on drm-tip. Matt asked for Stanislav's hmm_range_fault_unlocked_timeout() patch [3] to be carried at the base of this series, it has since landed in drm-tip, so this version is just rebased on top of it.
- Dropped v1 patch 1 ("drm/gpusvm: extract drm_gpusvm_hmm_fault() helper"), it is part of [3] now.
- patch 3: drm_gpusvm_pages_valid_unlocked() takes the array and the count itself, instead of get_pages() open coding an all_valid loop.
- patch 3: fixed the N:1 doc example, it used the wrong union member when the count is 1. Added a driver_pages() accessor.
- patch 3: documented that on error the instances mapped before the failing one stay mapped, the caller must unmap and free all of them.
- patch 4: reject no_dma_map together with devmem_only, without the DMA mapping step there is no page type check to enforce it.
- patch 4: documented that no_dma_map only returns a snapshot, the caller must recheck mmu_interval_read_retry() itself.
tests:
AMDGPU:
SVM:DRM N:1 multi device support is work in progress on top of this series. The single device (1:1) path was tested with the amdgpu SVM adaptation on top. Based on amdgpu SVM [4].
Tested on gfx943 (MI300X) and gfx906 (MI60) with XNACK on/off:
- KFD test: SVM all passed except the get attr refactor.
- ROCR test: all passed.
- HIP catch test: gfx943 (MI300X): 99% passed.
gfx906 (MI60): 99% passed.
links:
[1] drm_gpusvm_pages decoupling series:
https://lore.kernel.org/amd-gfx/[email protected]/ [2] Matt's suggested direction: https://lore.kernel.org/amd-gfx/[email protected]/ [3] drm/gpusvm: use hmm_range_fault_unlocked_timeout() for range faults: https://lore.kernel.org/[email protected] [4] amdgpu SVM: https://lore.kernel.org/amd-gfx/[email protected]/
Honglei Huang (4):
drm/gpusvm: move dma_addr allocation before the notifier lock drm/gpusvm: extract drm_gpusvm_dma_map_pages() helper drm/gpusvm: let drm_gpusvm_get_pages() map an array of pages drm/gpusvm: make the DMA mapping step in get_pages() optional
drivers/gpu/drm/drm_gpusvm.c | 336 +++++++++++++++++++++----------- drivers/gpu/drm/xe/xe_svm.c | 2 +- drivers/gpu/drm/xe/xe_userptr.c | 2 +- include/drm/drm_gpusvm.h | 10 + 4 files changed, 239 insertions(+), 111 deletions(-)
base-commit: c8420bcb1802510e5411ea4c98e2e07bdb43d74e
Signature · 1 line
2.34.1
Honglei Huang
reviewerPATCH v2 1/4 drm/gpusvm: move dma_addr allocation before the notifier lock
The dma_addr allocation was in a lazy allocation flow, it needs unlock and goto map_pages. The allocation only needs npages, so just do it before taking the lock. Drop the map_pages label and the relock flow, so the sequence becomes fault, allocate, then lock, validate, map and unlock. No functional change intended.
--- drivers/gpu/drm/drm_gpusvm.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-)
drivers/gpu/drm/drm_gpusvm.c +9 -13
@@ -1516,10 +1516,18 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,if (err) goto err_free; +if (!svm_pages->dma_addr) { + svm_pages->dma_addr = +kvzalloc_objs (*svm_pages->dma_addr, npages); +if (!svm_pages->dma_addr) { + err = -ENOMEM ; + goto err_free; + } + } + *state = (struct dma_iova_state ){}; svm_pages->state_offset =0 ; -map_pages:/* * Perform all dma mappings under the notifier lock to not * access freed pages. A notifier will either block on
@@ -1540,18 +1548,6 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, goto retry; } -if (!svm_pages->dma_addr) { -/* Unlock and restart mapping to allocate memory. */ -drm_gpusvm_notifier_unlock (gpusvm); - svm_pages->dma_addr = -kvzalloc_objs (*svm_pages->dma_addr, npages); -if (!svm_pages->dma_addr) { - err = -ENOMEM ; - goto err_free; - } - goto map_pages; - } - zdd =NULL ; pagemap =NULL ; num_dma_mapped =0 ;
Signature · 1 line
2.34.1
Re: [PATCH v2 1/4] drm/gpusvm: move dma_addr allocation before the notifier lock
Quoted 7 lines · Honglei Huang
The
dma_addrallocation was in a lazy allocation flow, it needs unlock and gotomap_pages. The allocation only needs npages, so just do it before taking the lock. Drop themap_pageslabel and the relock flow, so the sequence becomes fault, allocate, then lock, validate, map and unlock. No functional change intended.Signed-off-by Honglei Huang <[email protected]>
One follow up suggestion below - not blocker for merging this series. Feel free to implement this or at some point (we) Intel will get around to this.
This patch is:
Quoted 9 lines
--- drivers/gpu/drm/drm_gpusvm.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-)drivers/gpu/drm/drm_gpusvm.c +0
-0
drivers/gpu/drm/drm_gpusvm.c int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, · line 1521
Quoted 6 lines
drivers/gpu/drm/drm_gpusvm.c +3
-0@@ -1516,10 +1516,18 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,if (err) goto err_free; +if (!svm_pages->dma_addr) { + svm_pages->dma_addr = +kvzalloc_objs (*svm_pages->dma_addr, npages);
One thing that isn't great about the current code is that, regardless of npages, the overwhelming majority of cases result in exactly one DMA mapping. As a result, we end up wasting a significant amount of memory. If an IOVA is allocated, we only ever need a single DMA mapping. Even without IOVA support (e.g., iommu=off or iommu=pt), a 2 MiB backing store implemented as a THP would still yield a single DMA mapping via dma_map_page().
Longer term, I'd like to do something like the structure changes below. We would still preallocate unless npages == 1, but if drm_gpusvm_dma_map_pages() finds exactly one DMA mapping, we could free dma_addr, store the drm_pagemap_addr in inline_addr, and set an inline_dma_mapping flag. This would save 8 KiB per page of drm_gpusvm_pages for every 2 MiB THP-backed allocation.
Then the final piece is teach drivers to understand 'inline_dma_mapping' in their iterators (xe_res_cursor.h in Xe) to correctly walk the dma-mapping.
Matt
include/drm/drm_gpusvm.h +5 -1
@@ -121,6 +121,7 @@ struct drm_gpusvm_pages_flags { u16 unmapped : 1; u16 has_devmem_pages : 1; u16 has_dma_mapping : 1; + u16 inline_dma_mapping : 1; };u16 __flags; };
@@ -140,7 +141,10 @@ struct drm_gpusvm_pages_flags {*/ struct drm_gpusvm_pages {struct drm_device *drm; -struct drm_pagemap_addr *dma_addr; +union { +struct drm_pagemap_addr *dma_addr; +struct drm_pagemap_addr inline_addr; + };struct drm_pagemap *dpagemap;struct dma_iova_state state;unsigned long state_offset;
Quoted 35 lines
drivers/gpu/drm/drm_gpusvm.c +6
-13+if (!svm_pages->dma_addr) { + err = -ENOMEM ; + goto err_free; + } + } + *state = (struct dma_iova_state ){}; svm_pages->state_offset =0 ; -map_pages:/* * Perform all dma mappings under the notifier lock to not * access freed pages. A notifier will either block on @@ -1540,18 +1548,6 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, goto retry; } -if (!svm_pages->dma_addr) { -/* Unlock and restart mapping to allocate memory. */ -drm_gpusvm_notifier_unlock (gpusvm); - svm_pages->dma_addr = -kvzalloc_objs (*svm_pages->dma_addr, npages); -if (!svm_pages->dma_addr) { - err = -ENOMEM ; - goto err_free; - } - goto map_pages; - } - zdd =NULL ; pagemap =NULL ; num_dma_mapped =0 ;Signature · 1 line
2.34.1
Huang, Honglei
reviewerRe: [PATCH v2 1/4] drm/gpusvm: move dma_addr allocation before the notifier lock
Quoted 7 lines · Matthew Brost
Quoted 6 lines · Honglei Huang
The
dma_addrallocation was in a lazy allocation flow, it needs unlock and gotomap_pages. The allocation only needs npages, so just do it before taking the lock. Drop themap_pageslabel and the relock flow, so the sequence becomes fault, allocate, then lock, validate, map and unlock. No functional change intended.
Quoted 5 lines
Quoted 1 line
Signed-off-by Honglei Huang <[email protected]>One follow up suggestion below - not blocker for merging this series. Feel free to implement this or at some point (we) Intel will get around to this.
Got it, you can give me RB after you are really satisfied. I can keep modifying until you feel there are no problems.
Quoted 28 lines
This patch is:
Reviewed-by Matthew Brost <[email protected]>Quoted 9 lines
--- drivers/gpu/drm/drm_gpusvm.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-)drivers/gpu/drm/drm_gpusvm.c +0
-0drivers/gpu/drm/drm_gpusvm.c int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, · line 1521
Quoted 6 lines
drivers/gpu/drm/drm_gpusvm.c +3
-0@@ -1516,10 +1516,18 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,if (err) goto err_free; +if (!svm_pages->dma_addr) { + svm_pages->dma_addr = +kvzalloc_objs (*svm_pages->dma_addr, npages);One thing that isn't great about the current code is that, regardless of
npages, the overwhelming majority of cases result in exactly one DMA mapping. As a result, we end up wasting a significant amount of memory. If an IOVA is allocated, we only ever need a single DMA mapping. Even without IOVA support (e.g.,iommu=offoriommu=pt), a 2 MiB backing store implemented as a THP would still yield a single DMA mapping viadma_map_page().
Quoted 6 lines
Longer term, I'd like to do something like the structure changes below. We would still preallocate unless
npages == 1, but ifdrm_gpusvm_dma_map_pages()finds exactly one DMA mapping, we could freedma_addr, store thedrm_pagemap_addrininline_addr, and set aninline_dma_mappingflag. This would save 8 KiB per page ofdrm_gpusvm_pagesfor every 2 MiB THP-backed allocation.
Makes sense, working on it to reduce memory waste.
Quoted 4 lines
Then the final piece is teach drivers to understand '
inline_dma_mapping' in their iterators (xe_res_cursor.hin Xe) to correctly walk the dma-mapping.
Agreed, the important part is driver maybe miss this change and the compiles still fine, maybe worth changing xe_res_first_dma() to take a drm_gpusvm_pages instead of a bare pointer.
Quoted 17 lines
Matt
include/drm/drm_gpusvm.h +1
-0@@ -121,6 +121,7 @@ struct drm_gpusvm_pages_flags { u16 unmapped : 1; u16 has_devmem_pages : 1; u16 has_dma_mapping : 1; + u16 inline_dma_mapping : 1; };u16 __flags; };@@ -140,7 +141,10 @@ struct drm_gpusvm_pages_flags {*/
include/drm/drm_gpusvm.h struct drm_gpusvm_pages_flags { · line 150
Quoted 10 lines
include/drm/drm_gpusvm.h +4
-1struct drm_gpusvm_pages {struct drm_device *drm; -struct drm_pagemap_addr *dma_addr; +union { +struct drm_pagemap_addr *dma_addr; +struct drm_pagemap_addr inline_addr; + };struct drm_pagemap *dpagemap;struct dma_iova_state state;unsigned long state_offset;
Will modify the code according to your suggestion.
Regards,
Honglei
Quoted 37 lines
Quoted 37 lines
drivers/gpu/drm/drm_gpusvm.c +6
-13+if (!svm_pages->dma_addr) { + err = -ENOMEM ; + goto err_free; + } + } + *state = (struct dma_iova_state ){}; svm_pages->state_offset =0 ; -map_pages:/* * Perform all dma mappings under the notifier lock to not * access freed pages. A notifier will either block on @@ -1540,18 +1548,6 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, goto retry; } -if (!svm_pages->dma_addr) { -/* Unlock and restart mapping to allocate memory. */ -drm_gpusvm_notifier_unlock (gpusvm); - svm_pages->dma_addr = -kvzalloc_objs (*svm_pages->dma_addr, npages); -if (!svm_pages->dma_addr) { - err = -ENOMEM ; - goto err_free; - } - goto map_pages; - } - zdd =NULL ; pagemap =NULL ; num_dma_mapped =0 ;Signature · 1 line
2.34.1
Honglei Huang
reviewerPATCH v2 2/4 drm/gpusvm: extract drm_gpusvm_dma_map_pages() helper
In reply to Honglei HuangMove the per-device DMA mapping loop of drm_gpusvm_get_pages() into a helper drm_gpusvm_dma_map_pages(). The mapping logic is only moved, not changed, so there is no functional change.
The helper maps the already-faulted pfns into one drm_gpusvm_pages instance under the notifier lock and unwinds its own partial mapping on error. The HMM fault and the notifier retry loop stay in get_pages() common code rather than being pushed down to drivers, so no driver has to reimplement the subtle fault and retry logic.
With the mapping isolated per instance, get_pages() can later fault once and DMA map an array of drm_gpusvm_pages plus a count, one per owning drm_device.
--- drivers/gpu/drm/drm_gpusvm.c | 225 ++++++++++++++++++++--------------- 1 file changed, 129 insertions(+), 96 deletions(-)
drivers/gpu/drm/drm_gpusvm.c +129 -96
@@ -1442,115 +1442,41 @@ static bool drm_gpusvm_pages_valid_unlocked(struct drm_gpusvm *gpusvm, }/** -* drm_gpusvm_get_pages() - Get pages and populate GPU SVM pages struct +* drm_gpusvm_dma_map_pages() - DMA map one drm_gpusvm_pages instance * @gpusvm: Pointer to the GPU SVM structure -* @svm_pages: The SVM pages to populate. This will contain the dma-addresses -* @mm: The mm corresponding to the CPU range -* @notifier: The corresponding notifier for the given CPU range -* @pages_start: Start CPU address for the pages -* @pages_end: End CPU address for the pages (exclusive) +* @svm_pages: The SVM pages instance to populate with dma-addresses +* @pfns: The already-faulted pfn array (size @npages) +* @npages: Number of pages in the CPU range * @ctx: GPU SVM context +* @dma_dir: DMA data direction for the mappings * -* This function gets and maps pages for CPU range and ensures they are -* mapped for DMA access. +* Map the faulted @pfns into @svm_pages for DMA access through its owning +* drm_device. Must be called under the notifier lock. On failure this unwinds +* the partial mapping of this instance before returning. * * Return: 0 on success, negative error code on failure. */ -int drm_gpusvm_get_pages (struct drm_gpusvm *gpusvm, -struct drm_gpusvm_pages *svm_pages, -struct mm_struct *mm, -struct mmu_interval_notifier *notifier, -unsigned long pages_start,unsigned long pages_end, -const struct drm_gpusvm_ctx *ctx) +static int drm_gpusvm_dma_map_pages (struct drm_gpusvm *gpusvm, +struct drm_gpusvm_pages *svm_pages, +unsigned long *pfns, +unsigned long npages, +const struct drm_gpusvm_ctx *ctx, +enum dma_data_direction dma_dir) { -struct hmm_range hmm_range = { - .default_flags =HMM_PFN_REQ_FAULT | (ctx->read_only ?0 : -HMM_PFN_REQ_WRITE ), - .notifier = notifier, - .start = pages_start, - .end = pages_end, - .dev_private_owner = ctx->device_private_page_owner, - }; -void *zdd; -unsigned long timeout = - jiffies +msecs_to_jiffies (HMM_RANGE_DEFAULT_TIMEOUT ); -unsigned long remaining; +void *zdd =NULL ;unsigned long i, j; -unsigned long npages =npages_in_range (pages_start, pages_end); -unsigned long num_dma_mapped; +unsigned long num_dma_mapped =0 ;unsigned int order =0 ; -unsigned long *pfns;int err =0 ; -struct dev_pagemap *pagemap; +struct dev_pagemap *pagemap =NULL ;struct drm_pagemap *dpagemap;struct drm_gpusvm_pages_flags flags; -enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE : -DMA_BIDIRECTIONAL ;struct dma_iova_state *state = &svm_pages->state; -if (!svm_pages->drm) -return -EINVAL ; - -retry: - remaining = timeout - jiffies; - -if (time_after_eq (jiffies, timeout)) -return -EBUSY ; - - hmm_range.notifier_seq =mmu_interval_read_begin (notifier); -if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages)) - goto set_seqno; - - pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL ); -if (!pfns) -return -ENOMEM ; - -if (!mmget_not_zero (mm)) { - err = -EFAULT ; - goto err_free; - } - - hmm_range.hmm_pfns = pfns; - err =hmm_range_fault_unlocked_timeout (&hmm_range, remaining); -mmput (mm); -if (err) - goto err_free; - -if (!svm_pages->dma_addr) { - svm_pages->dma_addr = -kvzalloc_objs (*svm_pages->dma_addr, npages); -if (!svm_pages->dma_addr) { - err = -ENOMEM ; - goto err_free; - } - } - - *state = (struct dma_iova_state ){}; - svm_pages->state_offset =0 ; - -/* -* Perform all dma mappings under the notifier lock to not -* access freed pages. A notifier will either block on -* the notifier lock or unmap dma. -*/ -drm_gpusvm_notifier_lock (gpusvm); +lockdep_assert_held (&gpusvm->notifier_lock); flags.__flags = svm_pages->flags.__flags; -if (flags.unmapped) { -drm_gpusvm_notifier_unlock (gpusvm); - err = -EFAULT ; - goto err_free; - } - -if (mmu_interval_read_retry (notifier, hmm_range.notifier_seq)) { -drm_gpusvm_notifier_unlock (gpusvm); -kvfree (pfns); - goto retry; - } - zdd =NULL ; - pagemap =NULL ; - num_dma_mapped =0 ;for (i =0 , j =0 ; i < npages; ++j) {struct page *page =hmm_pfn_to_page (pfns[i]);
@@ -1666,17 +1592,124 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,/* WRITE_ONCE pairs with READ_ONCE for opportunistic checks */ WRITE_ONCE (svm_pages->flags.__flags, flags.__flags); +return 0 ; + +err_unmap: + svm_pages->flags.has_dma_mapping = true; +__drm_gpusvm_unmap_pages (gpusvm, svm_pages, num_dma_mapped); +return err; +} + +/** +* drm_gpusvm_get_pages() - Get pages and populate GPU SVM pages struct +* @gpusvm: Pointer to the GPU SVM structure +* @svm_pages: The SVM pages to populate. This will contain the dma-addresses +* @mm: The mm corresponding to the CPU range +* @notifier: The corresponding notifier for the given CPU range +* @pages_start: Start CPU address for the pages +* @pages_end: End CPU address for the pages (exclusive) +* @ctx: GPU SVM context +* +* This function gets and maps pages for CPU range and ensures they are +* mapped for DMA access. +* +* Return: 0 on success, negative error code on failure. +*/ +int drm_gpusvm_get_pages (struct drm_gpusvm *gpusvm, +struct drm_gpusvm_pages *svm_pages, +struct mm_struct *mm, +struct mmu_interval_notifier *notifier, +unsigned long pages_start,unsigned long pages_end, +const struct drm_gpusvm_ctx *ctx) +{ +struct hmm_range hmm_range = { + .default_flags =HMM_PFN_REQ_FAULT | (ctx->read_only ?0 : +HMM_PFN_REQ_WRITE ), + .notifier = notifier, + .start = pages_start, + .end = pages_end, + .dev_private_owner = ctx->device_private_page_owner, + }; +unsigned long timeout = + jiffies +msecs_to_jiffies (HMM_RANGE_DEFAULT_TIMEOUT ); +unsigned long remaining; +unsigned long npages =npages_in_range (pages_start, pages_end); +unsigned long *pfns; +int err =0 ; +enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE : +DMA_BIDIRECTIONAL ; + +if (!svm_pages->drm) +return -EINVAL ; + +retry: + remaining = timeout - jiffies; + +if (time_after_eq (jiffies, timeout)) +return -EBUSY ; + + hmm_range.notifier_seq =mmu_interval_read_begin (notifier); +if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages)) + goto set_seqno; + + pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL ); +if (!pfns) +return -ENOMEM ; + +if (!mmget_not_zero (mm)) { + err = -EFAULT ; + goto err_free; + } + + hmm_range.hmm_pfns = pfns; + err =hmm_range_fault_unlocked_timeout (&hmm_range, remaining); +mmput (mm); +if (err) + goto err_free; + +if (!svm_pages->dma_addr) { + svm_pages->dma_addr = +kvzalloc_objs (*svm_pages->dma_addr, npages); +if (!svm_pages->dma_addr) { + err = -ENOMEM ; + goto err_free; + } + } + + svm_pages->state = (struct dma_iova_state ){}; + svm_pages->state_offset =0 ; + +/* +* Perform all dma mappings under the notifier lock to not +* access freed pages. A notifier will either block on +* the notifier lock or unmap dma. +*/ +drm_gpusvm_notifier_lock (gpusvm); + +if (svm_pages->flags.unmapped) { +drm_gpusvm_notifier_unlock (gpusvm); + err = -EFAULT ; + goto err_free; + } + +if (mmu_interval_read_retry (notifier, hmm_range.notifier_seq)) { +drm_gpusvm_notifier_unlock (gpusvm); +kvfree (pfns); + goto retry; + } + + err =drm_gpusvm_dma_map_pages (gpusvm, svm_pages, pfns, npages, ctx, + dma_dir);drm_gpusvm_notifier_unlock (gpusvm); +if (err) + goto err_free; +kvfree (pfns); set_seqno: svm_pages->notifier_seq = hmm_range.notifier_seq;return 0 ; -err_unmap: - svm_pages->flags.has_dma_mapping = true; -__drm_gpusvm_unmap_pages (gpusvm, svm_pages, num_dma_mapped); -drm_gpusvm_notifier_unlock (gpusvm); err_free:kvfree (pfns);if (err == -EAGAIN )
Signature · 1 line
2.34.1
Re: [PATCH v2 2/4] drm/gpusvm: extract drm_gpusvm_dma_map_pages() helper
Quoted 10 lines · Honglei Huang
Move the per-device DMA mapping loop of
drm_gpusvm_get_pages()into a helperdrm_gpusvm_dma_map_pages(). The mapping logic is only moved, not changed, so there is no functional change.The helper maps the already-faulted pfns into one
drm_gpusvm_pagesinstance under the notifier lock and unwinds its own partial mapping on error. The HMM fault and the notifier retry loop stay inget_pages()common code rather than being pushed down to drivers, so no driver has to reimplement the subtle fault and retry logic.
Quoted 5 lines
With the mapping isolated per instance,
get_pages()can later fault once and DMA map an array ofdrm_gpusvm_pagesplus a count, one per owningdrm_device.Suggested-by Matthew Brost <[email protected]>
For some reason, Sashiko didn't run on this particular patch [1]. It would be good to have it run through the tooling in case I'm missing something.
That said, I can't spot anything incorrect, and this looks like a solid cleanup.
With that:
[1] https://sashiko.dev/#/patchset/20260901090100.2024933-1-honghuan%40amd.com
Quoted 275 lines
Signed-off-by Honglei Huang <[email protected]>--- drivers/gpu/drm/drm_gpusvm.c | 225 ++++++++++++++++++++--------------- 1 file changed, 129 insertions(+), 96 deletions(-)drivers/gpu/drm/drm_gpusvm.c +129
-96@@ -1442,115 +1442,41 @@ static bool drm_gpusvm_pages_valid_unlocked(struct drm_gpusvm *gpusvm, }/** -* drm_gpusvm_get_pages() - Get pages and populate GPU SVM pages struct +* drm_gpusvm_dma_map_pages() - DMA map one drm_gpusvm_pages instance * @gpusvm: Pointer to the GPU SVM structure -* @svm_pages: The SVM pages to populate. This will contain the dma-addresses -* @mm: The mm corresponding to the CPU range -* @notifier: The corresponding notifier for the given CPU range -* @pages_start: Start CPU address for the pages -* @pages_end: End CPU address for the pages (exclusive) +* @svm_pages: The SVM pages instance to populate with dma-addresses +* @pfns: The already-faulted pfn array (size @npages) +* @npages: Number of pages in the CPU range * @ctx: GPU SVM context +* @dma_dir: DMA data direction for the mappings * -* This function gets and maps pages for CPU range and ensures they are -* mapped for DMA access. +* Map the faulted @pfns into @svm_pages for DMA access through its owning +* drm_device. Must be called under the notifier lock. On failure this unwinds +* the partial mapping of this instance before returning. * * Return: 0 on success, negative error code on failure. */ -int drm_gpusvm_get_pages (struct drm_gpusvm *gpusvm, -struct drm_gpusvm_pages *svm_pages, -struct mm_struct *mm, -struct mmu_interval_notifier *notifier, -unsigned long pages_start,unsigned long pages_end, -const struct drm_gpusvm_ctx *ctx) +static int drm_gpusvm_dma_map_pages (struct drm_gpusvm *gpusvm, +struct drm_gpusvm_pages *svm_pages, +unsigned long *pfns, +unsigned long npages, +const struct drm_gpusvm_ctx *ctx, +enum dma_data_direction dma_dir) { -struct hmm_range hmm_range = { - .default_flags =HMM_PFN_REQ_FAULT | (ctx->read_only ?0 : -HMM_PFN_REQ_WRITE ), - .notifier = notifier, - .start = pages_start, - .end = pages_end, - .dev_private_owner = ctx->device_private_page_owner, - }; -void *zdd; -unsigned long timeout = - jiffies +msecs_to_jiffies (HMM_RANGE_DEFAULT_TIMEOUT ); -unsigned long remaining; +void *zdd =NULL ;unsigned long i, j; -unsigned long npages =npages_in_range (pages_start, pages_end); -unsigned long num_dma_mapped; +unsigned long num_dma_mapped =0 ;unsigned int order =0 ; -unsigned long *pfns;int err =0 ; -struct dev_pagemap *pagemap; +struct dev_pagemap *pagemap =NULL ;struct drm_pagemap *dpagemap;struct drm_gpusvm_pages_flags flags; -enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE : -DMA_BIDIRECTIONAL ;struct dma_iova_state *state = &svm_pages->state; -if (!svm_pages->drm) -return -EINVAL ; - -retry: - remaining = timeout - jiffies; - -if (time_after_eq (jiffies, timeout)) -return -EBUSY ; - - hmm_range.notifier_seq =mmu_interval_read_begin (notifier); -if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages)) - goto set_seqno; - - pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL ); -if (!pfns) -return -ENOMEM ; - -if (!mmget_not_zero (mm)) { - err = -EFAULT ; - goto err_free; - } - - hmm_range.hmm_pfns = pfns; - err =hmm_range_fault_unlocked_timeout (&hmm_range, remaining); -mmput (mm); -if (err) - goto err_free; - -if (!svm_pages->dma_addr) { - svm_pages->dma_addr = -kvzalloc_objs (*svm_pages->dma_addr, npages); -if (!svm_pages->dma_addr) { - err = -ENOMEM ; - goto err_free; - } - } - - *state = (struct dma_iova_state ){}; - svm_pages->state_offset =0 ; - -/* -* Perform all dma mappings under the notifier lock to not -* access freed pages. A notifier will either block on -* the notifier lock or unmap dma. -*/ -drm_gpusvm_notifier_lock (gpusvm); +lockdep_assert_held (&gpusvm->notifier_lock); flags.__flags = svm_pages->flags.__flags; -if (flags.unmapped) { -drm_gpusvm_notifier_unlock (gpusvm); - err = -EFAULT ; - goto err_free; - } - -if (mmu_interval_read_retry (notifier, hmm_range.notifier_seq)) { -drm_gpusvm_notifier_unlock (gpusvm); -kvfree (pfns); - goto retry; - } - zdd =NULL ; - pagemap =NULL ; - num_dma_mapped =0 ;for (i =0 , j =0 ; i < npages; ++j) {struct page *page =hmm_pfn_to_page (pfns[i]);@@ -1666,17 +1592,124 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,/* WRITE_ONCE pairs with READ_ONCE for opportunistic checks */ WRITE_ONCE (svm_pages->flags.__flags, flags.__flags); +return 0 ; + +err_unmap: + svm_pages->flags.has_dma_mapping = true; +__drm_gpusvm_unmap_pages (gpusvm, svm_pages, num_dma_mapped); +return err; +} + +/** +* drm_gpusvm_get_pages() - Get pages and populate GPU SVM pages struct +* @gpusvm: Pointer to the GPU SVM structure +* @svm_pages: The SVM pages to populate. This will contain the dma-addresses +* @mm: The mm corresponding to the CPU range +* @notifier: The corresponding notifier for the given CPU range +* @pages_start: Start CPU address for the pages +* @pages_end: End CPU address for the pages (exclusive) +* @ctx: GPU SVM context +* +* This function gets and maps pages for CPU range and ensures they are +* mapped for DMA access. +* +* Return: 0 on success, negative error code on failure. +*/ +int drm_gpusvm_get_pages (struct drm_gpusvm *gpusvm, +struct drm_gpusvm_pages *svm_pages, +struct mm_struct *mm, +struct mmu_interval_notifier *notifier, +unsigned long pages_start,unsigned long pages_end, +const struct drm_gpusvm_ctx *ctx) +{ +struct hmm_range hmm_range = { + .default_flags =HMM_PFN_REQ_FAULT | (ctx->read_only ?0 : +HMM_PFN_REQ_WRITE ), + .notifier = notifier, + .start = pages_start, + .end = pages_end, + .dev_private_owner = ctx->device_private_page_owner, + }; +unsigned long timeout = + jiffies +msecs_to_jiffies (HMM_RANGE_DEFAULT_TIMEOUT ); +unsigned long remaining; +unsigned long npages =npages_in_range (pages_start, pages_end); +unsigned long *pfns; +int err =0 ; +enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE : +DMA_BIDIRECTIONAL ; + +if (!svm_pages->drm) +return -EINVAL ; + +retry: + remaining = timeout - jiffies; + +if (time_after_eq (jiffies, timeout)) +return -EBUSY ; + + hmm_range.notifier_seq =mmu_interval_read_begin (notifier); +if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages)) + goto set_seqno; + + pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL ); +if (!pfns) +return -ENOMEM ; + +if (!mmget_not_zero (mm)) { + err = -EFAULT ; + goto err_free; + } + + hmm_range.hmm_pfns = pfns; + err =hmm_range_fault_unlocked_timeout (&hmm_range, remaining); +mmput (mm); +if (err) + goto err_free; + +if (!svm_pages->dma_addr) { + svm_pages->dma_addr = +kvzalloc_objs (*svm_pages->dma_addr, npages); +if (!svm_pages->dma_addr) { + err = -ENOMEM ; + goto err_free; + } + } + + svm_pages->state = (struct dma_iova_state ){}; + svm_pages->state_offset =0 ; + +/* +* Perform all dma mappings under the notifier lock to not +* access freed pages. A notifier will either block on +* the notifier lock or unmap dma. +*/ +drm_gpusvm_notifier_lock (gpusvm); + +if (svm_pages->flags.unmapped) { +drm_gpusvm_notifier_unlock (gpusvm); + err = -EFAULT ; + goto err_free; + } + +if (mmu_interval_read_retry (notifier, hmm_range.notifier_seq)) { +drm_gpusvm_notifier_unlock (gpusvm); +kvfree (pfns); + goto retry; + } + + err =drm_gpusvm_dma_map_pages (gpusvm, svm_pages, pfns, npages, ctx, + dma_dir);drm_gpusvm_notifier_unlock (gpusvm); +if (err) + goto err_free; +kvfree (pfns); set_seqno: svm_pages->notifier_seq = hmm_range.notifier_seq;return 0 ; -err_unmap: - svm_pages->flags.has_dma_mapping = true; -__drm_gpusvm_unmap_pages (gpusvm, svm_pages, num_dma_mapped); -drm_gpusvm_notifier_unlock (gpusvm); err_free:kvfree (pfns);if (err == -EAGAIN )Signature · 1 line
2.34.1
Huang, Honglei
reviewerRe: [PATCH v2 2/4] drm/gpusvm: extract drm_gpusvm_dma_map_pages() helper
Quoted 21 lines · Matthew Brost
Quoted 10 lines · Honglei Huang
Move the per-device DMA mapping loop of
drm_gpusvm_get_pages()into a helperdrm_gpusvm_dma_map_pages(). The mapping logic is only moved, not changed, so there is no functional change.The helper maps the already-faulted pfns into one
drm_gpusvm_pagesinstance under the notifier lock and unwinds its own partial mapping on error. The HMM fault and the notifier retry loop stay inget_pages()common code rather than being pushed down to drivers, so no driver has to reimplement the subtle fault and retry logic.Quoted 5 lines
With the mapping isolated per instance,
get_pages()can later fault once and DMA map an array ofdrm_gpusvm_pagesplus a count, one per owningdrm_device.Suggested-by Matthew Brost <[email protected]>For some reason, Sashiko didn't run on this particular patch [1]. It would be good to have it run through the tooling in case I'm missing something.
Quoted 5 lines
That said, I can't spot anything incorrect, and this looks like a solid cleanup.
With that:
Reviewed-by Matthew Brost <[email protected]>
Will resent this series only to intel-xe@list and dri-devel@list to retigger the Sashiko review.
Regards,
Honglei
Quoted 278 lines
[1] https://sashiko.dev/#/patchset/20260901090100.2024933-1-honghuan%40amd.com
Quoted 275 lines
Signed-off-by Honglei Huang <[email protected]>--- drivers/gpu/drm/drm_gpusvm.c | 225 ++++++++++++++++++++--------------- 1 file changed, 129 insertions(+), 96 deletions(-)drivers/gpu/drm/drm_gpusvm.c +129
-96@@ -1442,115 +1442,41 @@ static bool drm_gpusvm_pages_valid_unlocked(struct drm_gpusvm *gpusvm, }/** -* drm_gpusvm_get_pages() - Get pages and populate GPU SVM pages struct +* drm_gpusvm_dma_map_pages() - DMA map one drm_gpusvm_pages instance * @gpusvm: Pointer to the GPU SVM structure -* @svm_pages: The SVM pages to populate. This will contain the dma-addresses -* @mm: The mm corresponding to the CPU range -* @notifier: The corresponding notifier for the given CPU range -* @pages_start: Start CPU address for the pages -* @pages_end: End CPU address for the pages (exclusive) +* @svm_pages: The SVM pages instance to populate with dma-addresses +* @pfns: The already-faulted pfn array (size @npages) +* @npages: Number of pages in the CPU range * @ctx: GPU SVM context +* @dma_dir: DMA data direction for the mappings * -* This function gets and maps pages for CPU range and ensures they are -* mapped for DMA access. +* Map the faulted @pfns into @svm_pages for DMA access through its owning +* drm_device. Must be called under the notifier lock. On failure this unwinds +* the partial mapping of this instance before returning. * * Return: 0 on success, negative error code on failure. */ -int drm_gpusvm_get_pages (struct drm_gpusvm *gpusvm, -struct drm_gpusvm_pages *svm_pages, -struct mm_struct *mm, -struct mmu_interval_notifier *notifier, -unsigned long pages_start,unsigned long pages_end, -const struct drm_gpusvm_ctx *ctx) +static int drm_gpusvm_dma_map_pages (struct drm_gpusvm *gpusvm, +struct drm_gpusvm_pages *svm_pages, +unsigned long *pfns, +unsigned long npages, +const struct drm_gpusvm_ctx *ctx, +enum dma_data_direction dma_dir) { -struct hmm_range hmm_range = { - .default_flags =HMM_PFN_REQ_FAULT | (ctx->read_only ?0 : -HMM_PFN_REQ_WRITE ), - .notifier = notifier, - .start = pages_start, - .end = pages_end, - .dev_private_owner = ctx->device_private_page_owner, - }; -void *zdd; -unsigned long timeout = - jiffies +msecs_to_jiffies (HMM_RANGE_DEFAULT_TIMEOUT ); -unsigned long remaining; +void *zdd =NULL ;unsigned long i, j; -unsigned long npages =npages_in_range (pages_start, pages_end); -unsigned long num_dma_mapped; +unsigned long num_dma_mapped =0 ;unsigned int order =0 ; -unsigned long *pfns;int err =0 ; -struct dev_pagemap *pagemap; +struct dev_pagemap *pagemap =NULL ;struct drm_pagemap *dpagemap;struct drm_gpusvm_pages_flags flags; -enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE : -DMA_BIDIRECTIONAL ;struct dma_iova_state *state = &svm_pages->state; -if (!svm_pages->drm) -return -EINVAL ; - -retry: - remaining = timeout - jiffies; - -if (time_after_eq (jiffies, timeout)) -return -EBUSY ; - - hmm_range.notifier_seq =mmu_interval_read_begin (notifier); -if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages)) - goto set_seqno; - - pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL ); -if (!pfns) -return -ENOMEM ; - -if (!mmget_not_zero (mm)) { - err = -EFAULT ; - goto err_free; - } - - hmm_range.hmm_pfns = pfns; - err =hmm_range_fault_unlocked_timeout (&hmm_range, remaining); -mmput (mm); -if (err) - goto err_free; - -if (!svm_pages->dma_addr) { - svm_pages->dma_addr = -kvzalloc_objs (*svm_pages->dma_addr, npages); -if (!svm_pages->dma_addr) { - err = -ENOMEM ; - goto err_free; - } - } - - *state = (struct dma_iova_state ){}; - svm_pages->state_offset =0 ; - -/* -* Perform all dma mappings under the notifier lock to not -* access freed pages. A notifier will either block on -* the notifier lock or unmap dma. -*/ -drm_gpusvm_notifier_lock (gpusvm); +lockdep_assert_held (&gpusvm->notifier_lock); flags.__flags = svm_pages->flags.__flags; -if (flags.unmapped) { -drm_gpusvm_notifier_unlock (gpusvm); - err = -EFAULT ; - goto err_free; - } - -if (mmu_interval_read_retry (notifier, hmm_range.notifier_seq)) { -drm_gpusvm_notifier_unlock (gpusvm); -kvfree (pfns); - goto retry; - } - zdd =NULL ; - pagemap =NULL ; - num_dma_mapped =0 ;for (i =0 , j =0 ; i < npages; ++j) {struct page *page =hmm_pfn_to_page (pfns[i]);@@ -1666,17 +1592,124 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,/* WRITE_ONCE pairs with READ_ONCE for opportunistic checks */ WRITE_ONCE (svm_pages->flags.__flags, flags.__flags); +return 0 ; + +err_unmap: + svm_pages->flags.has_dma_mapping = true; +__drm_gpusvm_unmap_pages (gpusvm, svm_pages, num_dma_mapped); +return err; +} + +/** +* drm_gpusvm_get_pages() - Get pages and populate GPU SVM pages struct +* @gpusvm: Pointer to the GPU SVM structure +* @svm_pages: The SVM pages to populate. This will contain the dma-addresses +* @mm: The mm corresponding to the CPU range +* @notifier: The corresponding notifier for the given CPU range +* @pages_start: Start CPU address for the pages +* @pages_end: End CPU address for the pages (exclusive) +* @ctx: GPU SVM context +* +* This function gets and maps pages for CPU range and ensures they are +* mapped for DMA access. +* +* Return: 0 on success, negative error code on failure. +*/ +int drm_gpusvm_get_pages (struct drm_gpusvm *gpusvm, +struct drm_gpusvm_pages *svm_pages, +struct mm_struct *mm, +struct mmu_interval_notifier *notifier, +unsigned long pages_start,unsigned long pages_end, +const struct drm_gpusvm_ctx *ctx) +{ +struct hmm_range hmm_range = { + .default_flags =HMM_PFN_REQ_FAULT | (ctx->read_only ?0 : +HMM_PFN_REQ_WRITE ), + .notifier = notifier, + .start = pages_start, + .end = pages_end, + .dev_private_owner = ctx->device_private_page_owner, + }; +unsigned long timeout = + jiffies +msecs_to_jiffies (HMM_RANGE_DEFAULT_TIMEOUT ); +unsigned long remaining; +unsigned long npages =npages_in_range (pages_start, pages_end); +unsigned long *pfns; +int err =0 ; +enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE : +DMA_BIDIRECTIONAL ; + +if (!svm_pages->drm) +return -EINVAL ; + +retry: + remaining = timeout - jiffies; + +if (time_after_eq (jiffies, timeout)) +return -EBUSY ; + + hmm_range.notifier_seq =mmu_interval_read_begin (notifier); +if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages)) + goto set_seqno; + + pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL ); +if (!pfns) +return -ENOMEM ; + +if (!mmget_not_zero (mm)) { + err = -EFAULT ; + goto err_free; + } + + hmm_range.hmm_pfns = pfns; + err =hmm_range_fault_unlocked_timeout (&hmm_range, remaining); +mmput (mm); +if (err) + goto err_free; + +if (!svm_pages->dma_addr) { + svm_pages->dma_addr = +kvzalloc_objs (*svm_pages->dma_addr, npages); +if (!svm_pages->dma_addr) { + err = -ENOMEM ; + goto err_free; + } + } + + svm_pages->state = (struct dma_iova_state ){}; + svm_pages->state_offset =0 ; + +/* +* Perform all dma mappings under the notifier lock to not +* access freed pages. A notifier will either block on +* the notifier lock or unmap dma. +*/ +drm_gpusvm_notifier_lock (gpusvm); + +if (svm_pages->flags.unmapped) { +drm_gpusvm_notifier_unlock (gpusvm); + err = -EFAULT ; + goto err_free; + } + +if (mmu_interval_read_retry (notifier, hmm_range.notifier_seq)) { +drm_gpusvm_notifier_unlock (gpusvm); +kvfree (pfns); + goto retry; + } + + err =drm_gpusvm_dma_map_pages (gpusvm, svm_pages, pfns, npages, ctx, + dma_dir);drm_gpusvm_notifier_unlock (gpusvm); +if (err) + goto err_free; +kvfree (pfns); set_seqno: svm_pages->notifier_seq = hmm_range.notifier_seq;return 0 ; -err_unmap: - svm_pages->flags.has_dma_mapping = true; -__drm_gpusvm_unmap_pages (gpusvm, svm_pages, num_dma_mapped); -drm_gpusvm_notifier_unlock (gpusvm); err_free:kvfree (pfns);if (err == -EAGAIN )Signature · 1 line
2.34.1
Honglei Huang
reviewerPATCH v2 3/4 drm/gpusvm: let drm_gpusvm_get_pages() map an array of pages
In reply to Honglei HuangWith the N:1 drm_gpusvm_pages layout, one CPU range mirrored on several drm_devices, the caller had to invoke get_pages() once per device and repeat the HMM fault every time.
Make get_pages() take a contiguous array of drm_gpusvm_pages plus a
count: fault once, then DMA map each instance by drm_gpusvm_dma_map_pages() under a single read_retry gate. xe range and userptr callers are updated.
Document the N:1 array usage in the Overview, showing how get_pages() and drm_gpusvm_range_set_unmapped() take the whole array and its count while the unmap and free paths stay per-instance.
--- drivers/gpu/drm/drm_gpusvm.c | 141 ++++++++++++++++++++++++-------- drivers/gpu/drm/xe/xe_svm.c | 2 +- drivers/gpu/drm/xe/xe_userptr.c | 2 +- include/drm/drm_gpusvm.h | 1 + 4 files changed, 108 insertions(+), 38 deletions(-)
drivers/gpu/drm/drm_gpusvm.c +105 -36
@@ -80,6 +80,13 @@* }; * }; * +* static struct drm_gpusvm_pages * +* driver_pages(struct driver_range *drange) +* { +* return drange->num_pages == 1 ? &drange->inline_pages : +* drange->pages; +* } +* * In the N:1 case the driver allocates the pages array with a zeroing * allocator (e.g. kcalloc(num_pages, ...)), initialises each entry with * drm_gpusvm_init_pages(), and frees each entry with
@@ -89,6 +96,28 @@* Each drm_gpusvm_pages must be zero-initialised and initialised with * drm_gpusvm_init_pages(), called once per entry. * +* The 1:1 examples below pass @num_pages == 1 and &drange->pages. In the +* N:1 case the driver instead passes the whole array and its count, so a +* single call faults the CPU range once and DMA maps it for every owning +* drm_device, e.g.: +* +* .. code-block:: c +* +* // GPU fault handler: one fault, one DMA mapping per device +* err = drm_gpusvm_get_pages(gpusvm, driver_pages(drange), +* drange->num_pages, gpusvm->mm, +* &range->notifier->notifier, +* drm_gpusvm_range_start(range), +* drm_gpusvm_range_end(range), &ctx); +* +* // Notifier callback: mark every instance unmapped in one call +* drm_gpusvm_range_set_unmapped(range, driver_pages(drange), +* drange->num_pages, mmu_range); +* +* The unmap and free paths stay per-instance: iterate @num_pages over +* driver_pages(drange) and call drm_gpusvm_unmap_pages() / +* drm_gpusvm_free_pages() for each entry. +* * - Operations: * Define the interface for driver-specific GPU SVM operations such as * range allocation, notifier allocation, and invalidations.
@@ -232,7 +261,7 @@* goto retry; * } * -* err = drm_gpusvm_get_pages(gpusvm, &drange->pages, +* err = drm_gpusvm_get_pages(gpusvm, &drange->pages, 1, * gpusvm->mm, &range->notifier->notifier, * drm_gpusvm_range_start(range), * drm_gpusvm_range_end(range), &ctx);
@@ -1417,25 +1446,34 @@ EXPORT_SYMBOL_GPL(drm_gpusvm_pages_valid);/** * drm_gpusvm_pages_valid_unlocked() - GPU SVM pages valid unlocked * @gpusvm: Pointer to the GPU SVM structure -* @svm_pages: Pointer to the GPU SVM pages structure +* @svm_pages: Array of GPU SVM pages structures +* @num_pages: Number of drm_gpusvm_pages instances in @svm_pages * -* This function determines if a GPU SVM pages are valid. Expected be called +* This function determines if every GPU SVM pages instance is valid, dropping +* the stale dma_addr array of any instance which is not. Expected be called * without holding gpusvm->notifier_lock. * -* Return: True if GPU SVM pages are valid, False otherwise +* Return: True if all GPU SVM pages are valid, False otherwise */ static bool drm_gpusvm_pages_valid_unlocked (struct drm_gpusvm *gpusvm, -struct drm_gpusvm_pages *svm_pages) +struct drm_gpusvm_pages *svm_pages, +unsigned int num_pages) { -bool pages_valid; +bool pages_valid = true; +unsigned int p; -if (!svm_pages->dma_addr) -return false; +for (p =0 ; p < num_pages; ++p) { +if (!svm_pages[p].dma_addr) +return false; + }drm_gpusvm_notifier_lock (gpusvm); - pages_valid =drm_gpusvm_pages_valid (gpusvm, svm_pages); -if (!pages_valid) -__drm_gpusvm_free_pages (gpusvm, svm_pages); +for (p =0 ; p < num_pages; ++p) { +if (drm_gpusvm_pages_valid (gpusvm, &svm_pages[p])) +continue ; +__drm_gpusvm_free_pages (gpusvm, &svm_pages[p]); + pages_valid = false; + }drm_gpusvm_notifier_unlock (gpusvm);return pages_valid;
@@ -1451,8 +1489,9 @@ static bool drm_gpusvm_pages_valid_unlocked(struct drm_gpusvm *gpusvm,* @dma_dir: DMA data direction for the mappings * * Map the faulted @pfns into @svm_pages for DMA access through its owning -* drm_device. Must be called under the notifier lock. On failure this unwinds -* the partial mapping of this instance before returning. +* drm_device. Must be called under the notifier lock and only for an instance +* without a live mapping. On failure this unwinds the partial mapping of this +* instance before returning. * * Return: 0 on success, negative error code on failure. */
@@ -1475,6 +1514,9 @@ static int drm_gpusvm_dma_map_pages(struct drm_gpusvm *gpusvm,lockdep_assert_held (&gpusvm->notifier_lock); + *state = (struct dma_iova_state ){}; + svm_pages->state_offset =0 ; + flags.__flags = svm_pages->flags.__flags;for (i =0 , j =0 ; i < npages; ++j) {
@@ -1603,20 +1645,29 @@ static int drm_gpusvm_dma_map_pages(struct drm_gpusvm *gpusvm,/** * drm_gpusvm_get_pages() - Get pages and populate GPU SVM pages struct * @gpusvm: Pointer to the GPU SVM structure -* @svm_pages: The SVM pages to populate. This will contain the dma-addresses +* @svm_pages: Array of SVM pages instances to populate with dma addresses +* @num_pages: Number of drm_gpusvm_pages instances in @svm_pages * @mm: The mm corresponding to the CPU range * @notifier: The corresponding notifier for the given CPU range * @pages_start: Start CPU address for the pages * @pages_end: End CPU address for the pages (exclusive) * @ctx: GPU SVM context * -* This function gets and maps pages for CPU range and ensures they are -* mapped for DMA access. +* This function gets and maps pages for a CPU range and ensures they are +* mapped for DMA access. The HMM fault for the CPU range is performed once, +* the DMA mapping by drm_gpusvm_dma_map_pages() is then done per instance, +* one per owning drm_device. The retry against notifier races is kept here +* in common code so drivers never open code it. +* The common 1:1 case passes @num_pages == 1. +* +* On error the instances mapped before the failing one stay mapped, so the +* caller must unmap and free every instance regardless of the return value. * * Return: 0 on success, negative error code on failure. */ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, struct drm_gpusvm_pages *svm_pages, + unsigned int num_pages, struct mm_struct *mm, struct mmu_interval_notifier *notifier, unsigned long pages_start, unsigned long pages_end,
@@ -1638,9 +1689,11 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,int err =0 ;enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE :DMA_BIDIRECTIONAL ; +unsigned int p; -if (!svm_pages->drm) -return -EINVAL ; +for (p =0 ; p < num_pages; ++p) +if (!svm_pages[p].drm) +return -EINVAL ; retry: remaining = timeout - jiffies;
@@ -1649,7 +1702,8 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,return -EBUSY ; hmm_range.notifier_seq =mmu_interval_read_begin (notifier); -if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages)) + +if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages, num_pages)) goto set_seqno; pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL );
@@ -1667,18 +1721,17 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,if (err) goto err_free; -if (!svm_pages->dma_addr) { - svm_pages->dma_addr = -kvzalloc_objs (*svm_pages->dma_addr, npages); -if (!svm_pages->dma_addr) { +for (p =0 ; p < num_pages; ++p) { +if (svm_pages[p].dma_addr) +continue ; + svm_pages[p].dma_addr = +kvzalloc_objs (*svm_pages[p].dma_addr, npages); +if (!svm_pages[p].dma_addr) { err = -ENOMEM ; goto err_free; } } - svm_pages->state = (struct dma_iova_state ){}; - svm_pages->state_offset =0 ; -/* * Perform all dma mappings under the notifier lock to not * access freed pages. A notifier will either block on
@@ -1686,10 +1739,12 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,*/ drm_gpusvm_notifier_lock (gpusvm); -if (svm_pages->flags.unmapped) { -drm_gpusvm_notifier_unlock (gpusvm); - err = -EFAULT ; - goto err_free; +for (p =0 ; p < num_pages; ++p) { +if (svm_pages[p].flags.unmapped) { +drm_gpusvm_notifier_unlock (gpusvm); + err = -EFAULT ; + goto err_free; + } }if (mmu_interval_read_retry (notifier, hmm_range.notifier_seq)) {
@@ -1698,15 +1753,29 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, goto retry; } - err =drm_gpusvm_dma_map_pages (gpusvm, svm_pages, pfns, npages, ctx, - dma_dir); -drm_gpusvm_notifier_unlock (gpusvm); -if (err) - goto err_free; +for (p =0 ; p < num_pages; ++p) { +if (drm_gpusvm_pages_valid (gpusvm, &svm_pages[p])) +continue ; + err =drm_gpusvm_dma_map_pages (gpusvm, &svm_pages[p], pfns, + npages, ctx, dma_dir); +if (err) { +/* +* The failing instance was unwound by the helper. Keep +* the ones mapped earlier: the -EAGAIN retry reuses +* them, and the driver unmaps every instance with the +* range on the other error paths. +*/ +drm_gpusvm_notifier_unlock (gpusvm); + goto err_free; + } + } + +drm_gpusvm_notifier_unlock (gpusvm);kvfree (pfns); set_seqno: - svm_pages->notifier_seq = hmm_range.notifier_seq; +for (p =0 ; p < num_pages; ++p) + svm_pages[p].notifier_seq = hmm_range.notifier_seq;return 0 ;
drivers/gpu/drm/xe/xe_svm.c +1 -1
@@ -1598,7 +1598,7 @@ int xe_svm_range_get_pages(struct xe_vm *vm, struct xe_svm_range *range,lockdep_assert_held (&range->lock); - err = drm_gpusvm_get_pages(&vm->svm.gpusvm, &range->pages, + err = drm_gpusvm_get_pages(&vm->svm.gpusvm, &range->pages, 1, vm->svm.gpusvm.mm, &range->base.notifier->notifier, drm_gpusvm_range_start(&range->base),
drivers/gpu/drm/xe/xe_userptr.c +1 -1
@@ -91,7 +91,7 @@ int xe_vma_userptr_pin_pages(struct xe_userptr_vma *uvma)if (vma->gpuva.flags &XE_VMA_DESTROYED )return 0 ; - return drm_gpusvm_get_pages(&vm->svm.gpusvm, &uvma->userptr.pages, + return drm_gpusvm_get_pages(&vm->svm.gpusvm, &uvma->userptr.pages, 1, uvma->userptr.notifier.mm, &uvma->userptr.notifier, xe_vma_userptr(vma),
include/drm/drm_gpusvm.h +1 -0
@@ -324,6 +324,7 @@ void drm_gpusvm_range_set_unmapped(struct drm_gpusvm_range *range, int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, struct drm_gpusvm_pages *svm_pages, + unsigned int num_pages, struct mm_struct *mm, struct mmu_interval_notifier *notifier, unsigned long pages_start, unsigned long pages_end,
Signature · 1 line
2.34.1
Matthew Brost
maintainerRe: [PATCH v2 3/4] drm/gpusvm: let drm_gpusvm_get_pages() map an array of pages
Quoted 231 lines · Honglei Huang
With the N:1
drm_gpusvm_pageslayout, one CPU range mirrored on severaldrm_devices, the caller had to invokeget_pages()once per device and repeat the HMM fault every time.Make
get_pages()take a contiguous array ofdrm_gpusvm_pagesplus a
count: fault once, then DMA map each instance bydrm_gpusvm_dma_map_pages()under a singleread_retrygate. xe range and userptr callers are updated.Document the N:1 array usage in the Overview, showing how
get_pages()anddrm_gpusvm_range_set_unmapped()take the whole array and its count while the unmap and free paths stay per-instance.Suggested-by Matthew Brost <[email protected]>Signed-off-by Honglei Huang <[email protected]>--- drivers/gpu/drm/drm_gpusvm.c | 141 ++++++++++++++++++++++++-------- drivers/gpu/drm/xe/xe_svm.c | 2 +- drivers/gpu/drm/xe/xe_userptr.c | 2 +- include/drm/drm_gpusvm.h | 1 + 4 files changed, 108 insertions(+), 38 deletions(-)drivers/gpu/drm/drm_gpusvm.c +79
-26@@ -80,6 +80,13 @@* }; * }; * +* static struct drm_gpusvm_pages * +* driver_pages(struct driver_range *drange) +* { +* return drange->num_pages == 1 ? &drange->inline_pages : +* drange->pages; +* } +* * In the N:1 case the driver allocates the pages array with a zeroing * allocator (e.g. kcalloc(num_pages, ...)), initialises each entry with * drm_gpusvm_init_pages(), and frees each entry with @@ -89,6 +96,28 @@* Each drm_gpusvm_pages must be zero-initialised and initialised with * drm_gpusvm_init_pages(), called once per entry. * +* The 1:1 examples below pass @num_pages == 1 and &drange->pages. In the +* N:1 case the driver instead passes the whole array and its count, so a +* single call faults the CPU range once and DMA maps it for every owning +* drm_device, e.g.: +* +* .. code-block:: c +* +* // GPU fault handler: one fault, one DMA mapping per device +* err = drm_gpusvm_get_pages(gpusvm, driver_pages(drange), +* drange->num_pages, gpusvm->mm, +* &range->notifier->notifier, +* drm_gpusvm_range_start(range), +* drm_gpusvm_range_end(range), &ctx); +* +* // Notifier callback: mark every instance unmapped in one call +* drm_gpusvm_range_set_unmapped(range, driver_pages(drange), +* drange->num_pages, mmu_range); +* +* The unmap and free paths stay per-instance: iterate @num_pages over +* driver_pages(drange) and call drm_gpusvm_unmap_pages() / +* drm_gpusvm_free_pages() for each entry. +* * - Operations: * Define the interface for driver-specific GPU SVM operations such as * range allocation, notifier allocation, and invalidations. @@ -232,7 +261,7 @@* goto retry; * } * -* err = drm_gpusvm_get_pages(gpusvm, &drange->pages, +* err = drm_gpusvm_get_pages(gpusvm, &drange->pages, 1, * gpusvm->mm, &range->notifier->notifier, * drm_gpusvm_range_start(range), * drm_gpusvm_range_end(range), &ctx); @@ -1417,25 +1446,34 @@ EXPORT_SYMBOL_GPL(drm_gpusvm_pages_valid);/** * drm_gpusvm_pages_valid_unlocked() - GPU SVM pages valid unlocked * @gpusvm: Pointer to the GPU SVM structure -* @svm_pages: Pointer to the GPU SVM pages structure +* @svm_pages: Array of GPU SVM pages structures +* @num_pages: Number of drm_gpusvm_pages instances in @svm_pages * -* This function determines if a GPU SVM pages are valid. Expected be called +* This function determines if every GPU SVM pages instance is valid, dropping +* the stale dma_addr array of any instance which is not. Expected be called * without holding gpusvm->notifier_lock. * -* Return: True if GPU SVM pages are valid, False otherwise +* Return: True if all GPU SVM pages are valid, False otherwise */ static bool drm_gpusvm_pages_valid_unlocked (struct drm_gpusvm *gpusvm, -struct drm_gpusvm_pages *svm_pages) +struct drm_gpusvm_pages *svm_pages, +unsigned int num_pages) { -bool pages_valid; +bool pages_valid = true; +unsigned int p; -if (!svm_pages->dma_addr) -return false; +for (p =0 ; p < num_pages; ++p) { +if (!svm_pages[p].dma_addr) +return false; + }drm_gpusvm_notifier_lock (gpusvm); - pages_valid =drm_gpusvm_pages_valid (gpusvm, svm_pages); -if (!pages_valid) -__drm_gpusvm_free_pages (gpusvm, svm_pages); +for (p =0 ; p < num_pages; ++p) { +if (drm_gpusvm_pages_valid (gpusvm, &svm_pages[p])) +continue ; +__drm_gpusvm_free_pages (gpusvm, &svm_pages[p]); + pages_valid = false; + }drm_gpusvm_notifier_unlock (gpusvm);return pages_valid;@@ -1451,8 +1489,9 @@ static bool drm_gpusvm_pages_valid_unlocked(struct drm_gpusvm *gpusvm,* @dma_dir: DMA data direction for the mappings * * Map the faulted @pfns into @svm_pages for DMA access through its owning -* drm_device. Must be called under the notifier lock. On failure this unwinds -* the partial mapping of this instance before returning. +* drm_device. Must be called under the notifier lock and only for an instance +* without a live mapping. On failure this unwinds the partial mapping of this +* instance before returning. * * Return: 0 on success, negative error code on failure. */ @@ -1475,6 +1514,9 @@ static int drm_gpusvm_dma_map_pages(struct drm_gpusvm *gpusvm,lockdep_assert_held (&gpusvm->notifier_lock); + *state = (struct dma_iova_state ){}; + svm_pages->state_offset =0 ; + flags.__flags = svm_pages->flags.__flags;for (i =0 , j =0 ; i < npages; ++j) {@@ -1603,20 +1645,29 @@ static int drm_gpusvm_dma_map_pages(struct drm_gpusvm *gpusvm,/** * drm_gpusvm_get_pages() - Get pages and populate GPU SVM pages struct * @gpusvm: Pointer to the GPU SVM structure -* @svm_pages: The SVM pages to populate. This will contain the dma-addresses +* @svm_pages: Array of SVM pages instances to populate with dma addresses +* @num_pages: Number of drm_gpusvm_pages instances in @svm_pages * @mm: The mm corresponding to the CPU range * @notifier: The corresponding notifier for the given CPU range * @pages_start: Start CPU address for the pages * @pages_end: End CPU address for the pages (exclusive) * @ctx: GPU SVM context * -* This function gets and maps pages for CPU range and ensures they are -* mapped for DMA access. +* This function gets and maps pages for a CPU range and ensures they are +* mapped for DMA access. The HMM fault for the CPU range is performed once, +* the DMA mapping by drm_gpusvm_dma_map_pages() is then done per instance, +* one per owning drm_device. The retry against notifier races is kept here +* in common code so drivers never open code it. +* The common 1:1 case passes @num_pages == 1. +* +* On error the instances mapped before the failing one stay mapped, so the +* caller must unmap and free every instance regardless of the return value. * * Return: 0 on success, negative error code on failure. */ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, struct drm_gpusvm_pages *svm_pages, + unsigned int num_pages, struct mm_struct *mm, struct mmu_interval_notifier *notifier, unsigned long pages_start, unsigned long pages_end,@@ -1638,9 +1689,11 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,int err =0 ;enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE :DMA_BIDIRECTIONAL ; +unsigned int p; -if (!svm_pages->drm) -return -EINVAL ; +for (p =0 ; p < num_pages; ++p) +if (!svm_pages[p].drm) +return -EINVAL ; retry: remaining = timeout - jiffies;@@ -1649,7 +1702,8 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,return -EBUSY ; hmm_range.notifier_seq =mmu_interval_read_begin (notifier); -if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages)) + +if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages, num_pages)) goto set_seqno; pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL );@@ -1667,18 +1721,17 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,if (err) goto err_free; -if (!svm_pages->dma_addr) { - svm_pages->dma_addr = -kvzalloc_objs (*svm_pages->dma_addr, npages); -if (!svm_pages->dma_addr) { +for (p =0 ; p < num_pages; ++p) { +if (svm_pages[p].dma_addr) +continue ; + svm_pages[p].dma_addr = +kvzalloc_objs (*svm_pages[p].dma_addr, npages); +if (!svm_pages[p].dma_addr) { err = -ENOMEM ; goto err_free; } } - svm_pages->state = (struct dma_iova_state ){}; - svm_pages->state_offset =0 ; -/* * Perform all dma mappings under the notifier lock to not * access freed pages. A notifier will either block on @@ -1686,10 +1739,12 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,*/ drm_gpusvm_notifier_lock (gpusvm);
drivers/gpu/drm/drm_gpusvm.c int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, · line 1747
Quoted 10 lines
drivers/gpu/drm/drm_gpusvm.c +6
-4-if (svm_pages->flags.unmapped) { -drm_gpusvm_notifier_unlock (gpusvm); - err = -EFAULT ; - goto err_free; +for (p =0 ; p < num_pages; ++p) { +if (svm_pages[p].flags.unmapped) { +drm_gpusvm_notifier_unlock (gpusvm); + err = -EFAULT ; + goto err_free; + }
I believe, given how the notifiers work, that checking svm_pages[0].flags.unmapped is actually sufficient. It's a micro-optimization, so I'm fine with it either way.
Quoted 8 lines
drivers/gpu/drm/drm_gpusvm.c +0
-1}if (mmu_interval_read_retry (notifier, hmm_range.notifier_seq)) {@@ -1698,15 +1753,29 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, goto retry; } - err = drm_gpusvm_dma_map_pages(gpusvm, svm_pages, pfns, npages, ctx,
drivers/gpu/drm/drm_gpusvm.c int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, · line 1761
Quoted 10 lines
drivers/gpu/drm/drm_gpusvm.c +5
-4- dma_dir); -drm_gpusvm_notifier_unlock (gpusvm); -if (err) - goto err_free; +for (p =0 ; p < num_pages; ++p) { +if (drm_gpusvm_pages_valid (gpusvm, &svm_pages[p])) +continue ; + err =drm_gpusvm_dma_map_pages (gpusvm, &svm_pages[p], pfns, + npages, ctx, dma_dir);
One thing that is different here is that if drm_gpusvm_dma_map_pages() fails, say at p == 1, then p[0] will already contain valid DMA mappings. I think this is actually fine, though, because the existing cleanup paths will eventually release those mappings one way or another.
That said, it's probably worth confirming this through a code-path audit and adding a comment here explaining why this is safe.
Again, Sashiko didn't run on this patch, and it would be good to get a run before merging this series.
Matt
Quoted 62 lines
drivers/gpu/drm/drm_gpusvm.c +15
-1+if (err) { +/* +* The failing instance was unwound by the helper. Keep +* the ones mapped earlier: the -EAGAIN retry reuses +* them, and the driver unmaps every instance with the +* range on the other error paths. +*/ +drm_gpusvm_notifier_unlock (gpusvm); + goto err_free; + } + } + +drm_gpusvm_notifier_unlock (gpusvm);kvfree (pfns); set_seqno: - svm_pages->notifier_seq = hmm_range.notifier_seq; +for (p =0 ; p < num_pages; ++p) + svm_pages[p].notifier_seq = hmm_range.notifier_seq;return 0 ;drivers/gpu/drm/xe/xe_svm.c +1
-1@@ -1598,7 +1598,7 @@ int xe_svm_range_get_pages(struct xe_vm *vm, struct xe_svm_range *range,lockdep_assert_held (&range->lock); - err = drm_gpusvm_get_pages(&vm->svm.gpusvm, &range->pages, + err = drm_gpusvm_get_pages(&vm->svm.gpusvm, &range->pages, 1, vm->svm.gpusvm.mm, &range->base.notifier->notifier, drm_gpusvm_range_start(&range->base),drivers/gpu/drm/xe/xe_userptr.c +1
-1@@ -91,7 +91,7 @@ int xe_vma_userptr_pin_pages(struct xe_userptr_vma *uvma)if (vma->gpuva.flags &XE_VMA_DESTROYED )return 0 ; - return drm_gpusvm_get_pages(&vm->svm.gpusvm, &uvma->userptr.pages, + return drm_gpusvm_get_pages(&vm->svm.gpusvm, &uvma->userptr.pages, 1, uvma->userptr.notifier.mm, &uvma->userptr.notifier, xe_vma_userptr(vma),include/drm/drm_gpusvm.h +1
-0@@ -324,6 +324,7 @@ void drm_gpusvm_range_set_unmapped(struct drm_gpusvm_range *range, int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, struct drm_gpusvm_pages *svm_pages, + unsigned int num_pages, struct mm_struct *mm, struct mmu_interval_notifier *notifier, unsigned long pages_start, unsigned long pages_end,Signature · 1 line
2.34.1
Huang, Honglei
reviewerRe: [PATCH v2 3/4] drm/gpusvm: let drm_gpusvm_get_pages() map an array of pages
Quoted 232 lines · Matthew Brost
Quoted 231 lines · Honglei Huang
With the N:1
drm_gpusvm_pageslayout, one CPU range mirrored on severaldrm_devices, the caller had to invokeget_pages()once per device and repeat the HMM fault every time.Make
get_pages()take a contiguous array ofdrm_gpusvm_pagesplus a
count: fault once, then DMA map each instance bydrm_gpusvm_dma_map_pages()under a singleread_retrygate. xe range and userptr callers are updated.Document the N:1 array usage in the Overview, showing how
get_pages()anddrm_gpusvm_range_set_unmapped()take the whole array and its count while the unmap and free paths stay per-instance.Suggested-by Matthew Brost <[email protected]>Signed-off-by Honglei Huang <[email protected]>--- drivers/gpu/drm/drm_gpusvm.c | 141 ++++++++++++++++++++++++-------- drivers/gpu/drm/xe/xe_svm.c | 2 +- drivers/gpu/drm/xe/xe_userptr.c | 2 +- include/drm/drm_gpusvm.h | 1 + 4 files changed, 108 insertions(+), 38 deletions(-)drivers/gpu/drm/drm_gpusvm.c +79
-26@@ -80,6 +80,13 @@* }; * }; * +* static struct drm_gpusvm_pages * +* driver_pages(struct driver_range *drange) +* { +* return drange->num_pages == 1 ? &drange->inline_pages : +* drange->pages; +* } +* * In the N:1 case the driver allocates the pages array with a zeroing * allocator (e.g. kcalloc(num_pages, ...)), initialises each entry with * drm_gpusvm_init_pages(), and frees each entry with @@ -89,6 +96,28 @@* Each drm_gpusvm_pages must be zero-initialised and initialised with * drm_gpusvm_init_pages(), called once per entry. * +* The 1:1 examples below pass @num_pages == 1 and &drange->pages. In the +* N:1 case the driver instead passes the whole array and its count, so a +* single call faults the CPU range once and DMA maps it for every owning +* drm_device, e.g.: +* +* .. code-block:: c +* +* // GPU fault handler: one fault, one DMA mapping per device +* err = drm_gpusvm_get_pages(gpusvm, driver_pages(drange), +* drange->num_pages, gpusvm->mm, +* &range->notifier->notifier, +* drm_gpusvm_range_start(range), +* drm_gpusvm_range_end(range), &ctx); +* +* // Notifier callback: mark every instance unmapped in one call +* drm_gpusvm_range_set_unmapped(range, driver_pages(drange), +* drange->num_pages, mmu_range); +* +* The unmap and free paths stay per-instance: iterate @num_pages over +* driver_pages(drange) and call drm_gpusvm_unmap_pages() / +* drm_gpusvm_free_pages() for each entry. +* * - Operations: * Define the interface for driver-specific GPU SVM operations such as * range allocation, notifier allocation, and invalidations. @@ -232,7 +261,7 @@* goto retry; * } * -* err = drm_gpusvm_get_pages(gpusvm, &drange->pages, +* err = drm_gpusvm_get_pages(gpusvm, &drange->pages, 1, * gpusvm->mm, &range->notifier->notifier, * drm_gpusvm_range_start(range), * drm_gpusvm_range_end(range), &ctx); @@ -1417,25 +1446,34 @@ EXPORT_SYMBOL_GPL(drm_gpusvm_pages_valid);/** * drm_gpusvm_pages_valid_unlocked() - GPU SVM pages valid unlocked * @gpusvm: Pointer to the GPU SVM structure -* @svm_pages: Pointer to the GPU SVM pages structure +* @svm_pages: Array of GPU SVM pages structures +* @num_pages: Number of drm_gpusvm_pages instances in @svm_pages * -* This function determines if a GPU SVM pages are valid. Expected be called +* This function determines if every GPU SVM pages instance is valid, dropping +* the stale dma_addr array of any instance which is not. Expected be called * without holding gpusvm->notifier_lock. * -* Return: True if GPU SVM pages are valid, False otherwise +* Return: True if all GPU SVM pages are valid, False otherwise */ static bool drm_gpusvm_pages_valid_unlocked (struct drm_gpusvm *gpusvm, -struct drm_gpusvm_pages *svm_pages) +struct drm_gpusvm_pages *svm_pages, +unsigned int num_pages) { -bool pages_valid; +bool pages_valid = true; +unsigned int p; -if (!svm_pages->dma_addr) -return false; +for (p =0 ; p < num_pages; ++p) { +if (!svm_pages[p].dma_addr) +return false; + }drm_gpusvm_notifier_lock (gpusvm); - pages_valid =drm_gpusvm_pages_valid (gpusvm, svm_pages); -if (!pages_valid) -__drm_gpusvm_free_pages (gpusvm, svm_pages); +for (p =0 ; p < num_pages; ++p) { +if (drm_gpusvm_pages_valid (gpusvm, &svm_pages[p])) +continue ; +__drm_gpusvm_free_pages (gpusvm, &svm_pages[p]); + pages_valid = false; + }drm_gpusvm_notifier_unlock (gpusvm);return pages_valid;@@ -1451,8 +1489,9 @@ static bool drm_gpusvm_pages_valid_unlocked(struct drm_gpusvm *gpusvm,* @dma_dir: DMA data direction for the mappings * * Map the faulted @pfns into @svm_pages for DMA access through its owning -* drm_device. Must be called under the notifier lock. On failure this unwinds -* the partial mapping of this instance before returning. +* drm_device. Must be called under the notifier lock and only for an instance +* without a live mapping. On failure this unwinds the partial mapping of this +* instance before returning. * * Return: 0 on success, negative error code on failure. */ @@ -1475,6 +1514,9 @@ static int drm_gpusvm_dma_map_pages(struct drm_gpusvm *gpusvm,lockdep_assert_held (&gpusvm->notifier_lock); + *state = (struct dma_iova_state ){}; + svm_pages->state_offset =0 ; + flags.__flags = svm_pages->flags.__flags;for (i =0 , j =0 ; i < npages; ++j) {@@ -1603,20 +1645,29 @@ static int drm_gpusvm_dma_map_pages(struct drm_gpusvm *gpusvm,/** * drm_gpusvm_get_pages() - Get pages and populate GPU SVM pages struct * @gpusvm: Pointer to the GPU SVM structure -* @svm_pages: The SVM pages to populate. This will contain the dma-addresses +* @svm_pages: Array of SVM pages instances to populate with dma addresses +* @num_pages: Number of drm_gpusvm_pages instances in @svm_pages * @mm: The mm corresponding to the CPU range * @notifier: The corresponding notifier for the given CPU range * @pages_start: Start CPU address for the pages * @pages_end: End CPU address for the pages (exclusive) * @ctx: GPU SVM context * -* This function gets and maps pages for CPU range and ensures they are -* mapped for DMA access. +* This function gets and maps pages for a CPU range and ensures they are +* mapped for DMA access. The HMM fault for the CPU range is performed once, +* the DMA mapping by drm_gpusvm_dma_map_pages() is then done per instance, +* one per owning drm_device. The retry against notifier races is kept here +* in common code so drivers never open code it. +* The common 1:1 case passes @num_pages == 1. +* +* On error the instances mapped before the failing one stay mapped, so the +* caller must unmap and free every instance regardless of the return value. * * Return: 0 on success, negative error code on failure. */ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, struct drm_gpusvm_pages *svm_pages, + unsigned int num_pages, struct mm_struct *mm, struct mmu_interval_notifier *notifier, unsigned long pages_start, unsigned long pages_end,@@ -1638,9 +1689,11 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,int err =0 ;enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE :DMA_BIDIRECTIONAL ; +unsigned int p; -if (!svm_pages->drm) -return -EINVAL ; +for (p =0 ; p < num_pages; ++p) +if (!svm_pages[p].drm) +return -EINVAL ; retry: remaining = timeout - jiffies;@@ -1649,7 +1702,8 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,return -EBUSY ; hmm_range.notifier_seq =mmu_interval_read_begin (notifier); -if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages)) + +if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages, num_pages)) goto set_seqno; pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL );@@ -1667,18 +1721,17 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,if (err) goto err_free; -if (!svm_pages->dma_addr) { - svm_pages->dma_addr = -kvzalloc_objs (*svm_pages->dma_addr, npages); -if (!svm_pages->dma_addr) { +for (p =0 ; p < num_pages; ++p) { +if (svm_pages[p].dma_addr) +continue ; + svm_pages[p].dma_addr = +kvzalloc_objs (*svm_pages[p].dma_addr, npages); +if (!svm_pages[p].dma_addr) { err = -ENOMEM ; goto err_free; } } - svm_pages->state = (struct dma_iova_state ){}; - svm_pages->state_offset =0 ; -/* * Perform all dma mappings under the notifier lock to not * access freed pages. A notifier will either block on @@ -1686,10 +1739,12 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,*/ drm_gpusvm_notifier_lock (gpusvm);
Quoted 14 lines
drivers/gpu/drm/drm_gpusvm.c int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, · line 1747
Quoted 10 lines
drivers/gpu/drm/drm_gpusvm.c +6
-4-if (svm_pages->flags.unmapped) { -drm_gpusvm_notifier_unlock (gpusvm); - err = -EFAULT ; - goto err_free; +for (p =0 ; p < num_pages; ++p) { +if (svm_pages[p].flags.unmapped) { +drm_gpusvm_notifier_unlock (gpusvm); + err = -EFAULT ; + goto err_free; + }I believe, given how the notifiers work, that checking
svm_pages[0].flags.unmappedis actually sufficient. It's a micro-optimization, so I'm fine with it either way.
Agreed, will change to svm_pages[0].flags.unmapped .
Quoted 25 lines
Quoted 9 lines
drivers/gpu/drm/drm_gpusvm.c +0
-1}if (mmu_interval_read_retry (notifier, hmm_range.notifier_seq)) {@@ -1698,15 +1753,29 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, goto retry; } - err = drm_gpusvm_dma_map_pages(gpusvm, svm_pages, pfns, npages, ctx,drivers/gpu/drm/drm_gpusvm.c int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, · line 1761
Quoted 10 lines
drivers/gpu/drm/drm_gpusvm.c +5
-4- dma_dir); -drm_gpusvm_notifier_unlock (gpusvm); -if (err) - goto err_free; +for (p =0 ; p < num_pages; ++p) { +if (drm_gpusvm_pages_valid (gpusvm, &svm_pages[p])) +continue ; + err =drm_gpusvm_dma_map_pages (gpusvm, &svm_pages[p], pfns, + npages, ctx, dma_dir);One thing that is different here is that if
drm_gpusvm_dma_map_pages()fails, say atp == 1, thenp[0]will already contain valid DMA mappings. I think this is actually fine, though, because the existing cleanup paths will eventually release those mappings one way or another.
Quoted 6 lines
That said, it's probably worth confirming this through a code-path audit and adding a comment here explaining why this is safe.
Again, Sashiko didn't run on this patch, and it would be good to get a run before merging this series.
Actually, I hesitated when modifying the code whether to perform a rollback here. And I decided to not rollback here, driver can reuse the previous success mapping when return -EAGAIN, and for other error code,
driver will call drm_gpusvm_unmap_pages then range_free safely.
And actullay I put some comments below, after if (err), and int drm_gpusvm.c:1663, I put same documents for this situlation.
And I will also resent this series to trigger Sashiko review, and use AI to scan this part to ensure it is safe.
Regards,
Honglei
Quoted 64 lines
Matt
Quoted 62 lines
drivers/gpu/drm/drm_gpusvm.c +15
-1+if (err) { +/* +* The failing instance was unwound by the helper. Keep +* the ones mapped earlier: the -EAGAIN retry reuses +* them, and the driver unmaps every instance with the +* range on the other error paths. +*/ +drm_gpusvm_notifier_unlock (gpusvm); + goto err_free; + } + } + +drm_gpusvm_notifier_unlock (gpusvm);kvfree (pfns); set_seqno: - svm_pages->notifier_seq = hmm_range.notifier_seq; +for (p =0 ; p < num_pages; ++p) + svm_pages[p].notifier_seq = hmm_range.notifier_seq;return 0 ;drivers/gpu/drm/xe/xe_svm.c +1
-1@@ -1598,7 +1598,7 @@ int xe_svm_range_get_pages(struct xe_vm *vm, struct xe_svm_range *range,lockdep_assert_held (&range->lock); - err = drm_gpusvm_get_pages(&vm->svm.gpusvm, &range->pages, + err = drm_gpusvm_get_pages(&vm->svm.gpusvm, &range->pages, 1, vm->svm.gpusvm.mm, &range->base.notifier->notifier, drm_gpusvm_range_start(&range->base),drivers/gpu/drm/xe/xe_userptr.c +1
-1@@ -91,7 +91,7 @@ int xe_vma_userptr_pin_pages(struct xe_userptr_vma *uvma)if (vma->gpuva.flags &XE_VMA_DESTROYED )return 0 ; - return drm_gpusvm_get_pages(&vm->svm.gpusvm, &uvma->userptr.pages, + return drm_gpusvm_get_pages(&vm->svm.gpusvm, &uvma->userptr.pages, 1, uvma->userptr.notifier.mm, &uvma->userptr.notifier, xe_vma_userptr(vma),include/drm/drm_gpusvm.h +1
-0@@ -324,6 +324,7 @@ void drm_gpusvm_range_set_unmapped(struct drm_gpusvm_range *range, int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, struct drm_gpusvm_pages *svm_pages, + unsigned int num_pages, struct mm_struct *mm, struct mmu_interval_notifier *notifier, unsigned long pages_start, unsigned long pages_end,Signature · 1 line
2.34.1
Honglei Huang
reviewerPATCH v2 4/4 drm/gpusvm: make the DMA mapping step in get_pages() optional
In reply to Honglei HuangSome drivers (e.g. AMDXDNA) only need the CPU pages faulted in and tracked by the notifier, no need DMA mapping.
Add a drm_gpusvm_ctx::no_dma_map flag. When set, get_pages() does the shared HMM fault and records notifier_seq, but skips svm_pages->drm validation, the dma_addr allocation and drm_gpusvm_dma_map_pages(). With no mapping state to check, the fault is redone on every call. The default (no_dma_map == 0) is unchanged.
--- drivers/gpu/drm/drm_gpusvm.c | 44 ++++++++++++++++++++++++++---------- include/drm/drm_gpusvm.h | 9 ++++++++ 2 files changed, 41 insertions(+), 12 deletions(-)
drivers/gpu/drm/drm_gpusvm.c +32 -12
@@ -1663,6 +1663,12 @@ static int drm_gpusvm_dma_map_pages(struct drm_gpusvm *gpusvm,* On error the instances mapped before the failing one stay mapped, so the * caller must unmap and free every instance regardless of the return value. * +* With &drm_gpusvm_ctx.no_dma_map no mapping state is recorded, so +* drm_gpusvm_pages_valid() never returns true and success is only a snapshot: +* the caller must recheck mmu_interval_read_retry() against the recorded +* &drm_gpusvm_pages.notifier_seq under the notifier lock, and hold it until +* its work is visible to invalidation. +* * Return: 0 on success, negative error code on failure. */ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,
@@ -1689,11 +1695,18 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,int err =0 ;enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE :DMA_BIDIRECTIONAL ; +const bool map_dma = !ctx->no_dma_map;unsigned int p; -for (p =0 ; p < num_pages; ++p) -if (!svm_pages[p].drm) -return -EINVAL ; +if (ctx->no_dma_map && ctx->devmem_only) +return -EINVAL ; + +if (map_dma) { +for (p =0 ; p < num_pages; ++p) { +if (!svm_pages[p].drm) +return -EINVAL ; + } + } retry: remaining = timeout - jiffies;
@@ -1703,7 +1716,8 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, hmm_range.notifier_seq =mmu_interval_read_begin (notifier); -if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages, num_pages)) +if (map_dma && +drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages, num_pages)) goto set_seqno; pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL );
@@ -1721,14 +1735,16 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,if (err) goto err_free; -for (p =0 ; p < num_pages; ++p) { -if (svm_pages[p].dma_addr) -continue ; - svm_pages[p].dma_addr = -kvzalloc_objs (*svm_pages[p].dma_addr, npages); -if (!svm_pages[p].dma_addr) { - err = -ENOMEM ; - goto err_free; +if (map_dma) { +for (p =0 ; p < num_pages; ++p) { +if (svm_pages[p].dma_addr) +continue ; + svm_pages[p].dma_addr = +kvzalloc_objs (*svm_pages[p].dma_addr, npages); +if (!svm_pages[p].dma_addr) { + err = -ENOMEM ; + goto err_free; + } } }
@@ -1753,6 +1769,9 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, goto retry; } +if (!map_dma) + goto done_mapping; +for (p =0 ; p < num_pages; ++p) {if (drm_gpusvm_pages_valid (gpusvm, &svm_pages[p]))continue ;
@@ -1771,6 +1790,7 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, } } +done_mapping:drm_gpusvm_notifier_unlock (gpusvm);kvfree (pfns); set_seqno:
include/drm/drm_gpusvm.h +9 -0
@@ -254,6 +254,14 @@ struct drm_gpusvm {* @allow_mixed: Allow mixed mappings in get pages. Mixing between system and * single dpagemap is supported, mixing between multiple dpagemap * is unsupported. +* @no_dma_map: Only fault the CPU pages for the range; skip the device DMA +* mapping step. Used by drivers that consume the faulted pages +* without needing a DMA mapping. In this mode @drm on the +* drm_gpusvm_pages is not required, no mapping state is recorded +* and drm_gpusvm_pages_valid() therefore never reports these +* pages as valid; the caller revalidates the snapshot itself, see +* drm_gpusvm_get_pages(). @devmem_only is rejected and no page +* type check is performed, so @allow_mixed has no effect. * * Context that is DRM GPUSVM is operating in (i.e. user arguments). */
@@ -266,6 +274,7 @@ struct drm_gpusvm_ctx { unsigned int devmem_possible :1; unsigned int devmem_only :1; unsigned int allow_mixed :1; + unsigned int no_dma_map :1; }; int drm_gpusvm_init(struct drm_gpusvm *gpusvm,
Signature · 1 line
2.34.1
Re: [PATCH v2 4/4] drm/gpusvm: make the DMA mapping step in get_pages() optional
Quoted 10 lines · Honglei Huang
Some drivers (e.g. AMDXDNA) only need the CPU pages faulted in and tracked by the notifier, no need DMA mapping.
Add a
drm_gpusvm_ctx::no_dma_mapflag. When set,get_pages()does the shared HMM fault and recordsnotifier_seq, but skipssvm_pages->drmvalidation, thedma_addrallocation anddrm_gpusvm_dma_map_pages(). With no mapping state to check, the fault is redone on every call. The default (no_dma_map== 0) is unchanged.Suggested-by Matthew Brost <[email protected]>
Quoted 128 lines
Signed-off-by Honglei Huang <[email protected]>--- drivers/gpu/drm/drm_gpusvm.c | 44 ++++++++++++++++++++++++++---------- include/drm/drm_gpusvm.h | 9 ++++++++ 2 files changed, 41 insertions(+), 12 deletions(-)drivers/gpu/drm/drm_gpusvm.c +32
-12@@ -1663,6 +1663,12 @@ static int drm_gpusvm_dma_map_pages(struct drm_gpusvm *gpusvm,* On error the instances mapped before the failing one stay mapped, so the * caller must unmap and free every instance regardless of the return value. * +* With &drm_gpusvm_ctx.no_dma_map no mapping state is recorded, so +* drm_gpusvm_pages_valid() never returns true and success is only a snapshot: +* the caller must recheck mmu_interval_read_retry() against the recorded +* &drm_gpusvm_pages.notifier_seq under the notifier lock, and hold it until +* its work is visible to invalidation. +* * Return: 0 on success, negative error code on failure. */ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,@@ -1689,11 +1695,18 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,int err =0 ;enum dma_data_direction dma_dir = ctx->read_only ?DMA_TO_DEVICE :DMA_BIDIRECTIONAL ; +const bool map_dma = !ctx->no_dma_map;unsigned int p; -for (p =0 ; p < num_pages; ++p) -if (!svm_pages[p].drm) -return -EINVAL ; +if (ctx->no_dma_map && ctx->devmem_only) +return -EINVAL ; + +if (map_dma) { +for (p =0 ; p < num_pages; ++p) { +if (!svm_pages[p].drm) +return -EINVAL ; + } + } retry: remaining = timeout - jiffies;@@ -1703,7 +1716,8 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, hmm_range.notifier_seq =mmu_interval_read_begin (notifier); -if (drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages, num_pages)) +if (map_dma && +drm_gpusvm_pages_valid_unlocked (gpusvm, svm_pages, num_pages)) goto set_seqno; pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL );@@ -1721,14 +1735,16 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,if (err) goto err_free; -for (p =0 ; p < num_pages; ++p) { -if (svm_pages[p].dma_addr) -continue ; - svm_pages[p].dma_addr = -kvzalloc_objs (*svm_pages[p].dma_addr, npages); -if (!svm_pages[p].dma_addr) { - err = -ENOMEM ; - goto err_free; +if (map_dma) { +for (p =0 ; p < num_pages; ++p) { +if (svm_pages[p].dma_addr) +continue ; + svm_pages[p].dma_addr = +kvzalloc_objs (*svm_pages[p].dma_addr, npages); +if (!svm_pages[p].dma_addr) { + err = -ENOMEM ; + goto err_free; + } } }@@ -1753,6 +1769,9 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, goto retry; } +if (!map_dma) + goto done_mapping; +for (p =0 ; p < num_pages; ++p) {if (drm_gpusvm_pages_valid (gpusvm, &svm_pages[p]))continue ;@@ -1771,6 +1790,7 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, } } +done_mapping:drm_gpusvm_notifier_unlock (gpusvm);kvfree (pfns); set_seqno:include/drm/drm_gpusvm.h +9
-0@@ -254,6 +254,14 @@ struct drm_gpusvm {* @allow_mixed: Allow mixed mappings in get pages. Mixing between system and * single dpagemap is supported, mixing between multiple dpagemap * is unsupported. +* @no_dma_map: Only fault the CPU pages for the range; skip the device DMA +* mapping step. Used by drivers that consume the faulted pages +* without needing a DMA mapping. In this mode @drm on the +* drm_gpusvm_pages is not required, no mapping state is recorded +* and drm_gpusvm_pages_valid() therefore never reports these +* pages as valid; the caller revalidates the snapshot itself, see +* drm_gpusvm_get_pages(). @devmem_only is rejected and no page +* type check is performed, so @allow_mixed has no effect. * * Context that is DRM GPUSVM is operating in (i.e. user arguments). */ @@ -266,6 +274,7 @@ struct drm_gpusvm_ctx { unsigned int devmem_possible :1; unsigned int devmem_only :1; unsigned int allow_mixed :1; + unsigned int no_dma_map :1; }; int drm_gpusvm_init(struct drm_gpusvm *gpusvm,Signature · 1 line
2.34.1
Patchwork
CI✓ CI.KUnit: success for drm/gpusvm: share one HMM fault across per-device DMA mappings (rev2)
In reply to Honglei Huang== Series Details ==
== Series Details ==
Series: drm/gpusvm: share one HMM fault across per-device DMA mappings (rev2)
URL : https://patchwork.freedesktop.org/series/172838/
State : success
== Summary ==
+ trap cleanup EXIT
+ kunitconfigs=('/kernel/drivers/gpu/tests/.kunitconfig' '/kernel/drivers/gpu/drm/xe/.kunitconfig' '/kernel/drivers/gpu/drm/tests/.kunitconfig' '/kernel/drivers/gpu/drm/ttm/tests/.kunitconfig' '/kernel/drivers/dma-buf/.kunitconfig')
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/tests/.kunitconfig
[09:07:33] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [09:07:37] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48 [09:07:58] Starting KUnit Kernel (1/1)... [09:07:58] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [09:07:58] ============= refcount_interrupt (4 subtests) ============== [09:07:58] [PASSED] test_single_irq_change [09:07:58] [PASSED] test_nested_irq_change [09:07:58] [PASSED] test_multiple_irq_change [09:07:58] [PASSED] test_irq_save [09:07:58] =============== [PASSED] refcount_interrupt ================ [09:07:58] ================= gpu_buddy (14 subtests) ================== [09:07:58] [PASSED] gpu_test_buddy_alloc_limit [09:07:58] [PASSED] gpu_test_buddy_alloc_optimistic [09:07:58] [PASSED] gpu_test_buddy_alloc_pessimistic [09:07:58] [PASSED] gpu_test_buddy_alloc_pathological [09:07:58] [PASSED] gpu_test_buddy_alloc_contiguous [09:07:58] [PASSED] gpu_test_buddy_alloc_clear [09:07:58] [PASSED] gpu_test_buddy_alloc_range [09:07:58] [PASSED] gpu_test_buddy_alloc_range_bias [09:07:59] [PASSED] gpu_test_buddy_fragmentation_performance [09:08:00] [PASSED] gpu_test_buddy_dirty_tracker_performance [09:08:00] [PASSED] gpu_test_buddy_alloc_exceeds_max_order [09:08:00] [PASSED] gpu_test_buddy_offset_aligned_allocation [09:08:00] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress [09:08:00] [PASSED] gpu_test_buddy_addr_to_block [09:08:00] ==================== [PASSED] gpu_buddy ==================== [09:08:00] ============================================================ [09:08:00] Testing complete. Ran 18 tests: passed: 18 [09:08:00] Elapsed time: 26.775s total, 4.437s configuring, 20.371s building, 1.893s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/xe/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig [09:08:00] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [09:08:02] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48 [09:08:35] Starting KUnit Kernel (1/1)... [09:08:35] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [09:08:36] ============= refcount_interrupt (4 subtests) ============== [09:08:36] [PASSED] test_single_irq_change [09:08:36] [PASSED] test_nested_irq_change [09:08:36] [PASSED] test_multiple_irq_change [09:08:36] [PASSED] test_irq_save [09:08:36] =============== [PASSED] refcount_interrupt ================ [09:08:36] ================== guc_buf (11 subtests) =================== [09:08:36] [PASSED] test_smallest [09:08:36] [PASSED] test_largest [09:08:36] [PASSED] test_granular [09:08:36] [PASSED] test_unique [09:08:36] [PASSED] test_overlap [09:08:36] [PASSED] test_reusable [09:08:36] [PASSED] test_too_big [09:08:36] [PASSED] test_flush [09:08:36] [PASSED] test_lookup [09:08:36] [PASSED] test_data [09:08:36] [PASSED] test_class [09:08:36] ===================== [PASSED] guc_buf ===================== [09:08:36] =================== guc_dbm (7 subtests) =================== [09:08:36] [PASSED] test_empty [09:08:36] [PASSED] test_default [09:08:36] ======================== test_size ======================== [09:08:36] [PASSED] 4 [09:08:36] [PASSED] 8 [09:08:36] [PASSED] 32 [09:08:36] [PASSED] 256 [09:08:36] ==================== [PASSED] test_size ==================== [09:08:36] ======================= test_reuse ======================== [09:08:36] [PASSED] 4 [09:08:36] [PASSED] 8 [09:08:36] [PASSED] 32 [09:08:36] [PASSED] 256 [09:08:36] =================== [PASSED] test_reuse ==================== [09:08:36] =================== test_range_overlap ==================== [09:08:36] [PASSED] 4 [09:08:36] [PASSED] 8 [09:08:36] [PASSED] 32 [09:08:36] [PASSED] 256 [09:08:36] =============== [PASSED] test_range_overlap ================ [09:08:36] =================== test_range_compact ==================== [09:08:36] [PASSED] 4 [09:08:36] [PASSED] 8 [09:08:36] [PASSED] 32 [09:08:36] [PASSED] 256 [09:08:36] =============== [PASSED] test_range_compact ================ [09:08:36] ==================== test_range_spare ===================== [09:08:36] [PASSED] 4 [09:08:36] [PASSED] 8 [09:08:36] [PASSED] 32 [09:08:36] [PASSED] 256 [09:08:36] ================ [PASSED] test_range_spare ================= [09:08:36] ===================== [PASSED] guc_dbm ===================== [09:08:36] =================== guc_idm (6 subtests) =================== [09:08:36] [PASSED] bad_init [09:08:36] [PASSED] no_init [09:08:36] [PASSED] init_fini [09:08:36] [PASSED] check_used [09:08:36] [PASSED] check_quota [09:08:36] [PASSED] check_all [09:08:36] ===================== [PASSED] guc_idm ===================== [09:08:36] =============== guc_klv_helpers (9 subtests) =============== [09:08:36] [PASSED] test_count [09:08:36] [PASSED] test_encode_u32 [09:08:36] [PASSED] test_encode_u64 [09:08:36] [PASSED] test_encode_string [09:08:36] [PASSED] test_encode_object_raw [09:08:36] [PASSED] test_encode_object_klv [09:08:36] [PASSED] test_encode_object_nested [09:08:36] [PASSED] test_encode_object_basic [09:08:36] [PASSED] test_print [09:08:36] ================= [PASSED] guc_klv_helpers ================= [09:08:36] =================== xe_log (4 subtests) ==================== [09:08:36] [PASSED] demo_cper [09:08:36] [PASSED] demo_dmesg [09:08:36] ======================= test_dmesg ======================== [09:08:36] [PASSED] test_fatal [09:08:36] [PASSED] test_fatal_tile [09:08:36] [PASSED] test_fatal_gt [09:08:36] [PASSED] test_fatal_comp [09:08:36] [PASSED] test_fatal_comp_tile [09:08:36] [PASSED] test_fatal_comp_gt [09:08:36] [PASSED] test_fatal_all [09:08:36] [PASSED] test_recoverable [09:08:36] [PASSED] test_recoverable_tile [09:08:36] [PASSED] test_recoverable_gt [09:08:36] [PASSED] test_recoverable_comp [09:08:36] [PASSED] test_recoverable_comp_tile [09:08:36] [PASSED] test_recoverable_comp_gt [09:08:36] [PASSED] test_recoverable_all [09:08:36] [PASSED] test_info [09:08:36] [PASSED] test_info_tile [09:08:36] [PASSED] test_info_gt [09:08:36] [PASSED] test_info_err [09:08:36] [PASSED] test_info_comp [09:08:36] [PASSED] test_info_comp_tile [09:08:36] [PASSED] test_info_comp_gt [09:08:36] [PASSED] test_info_all [09:08:36] [PASSED] test_hw_fatal [09:08:36] [PASSED] test_hw_recoverable [09:08:36] [PASSED] test_hw_corrected [09:08:36] [PASSED] test_hw_informational [09:08:36] =================== [PASSED] test_dmesg ==================== [09:08:36] ====================== test_invalid ======================= [09:08:36] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG) [09:08:36] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG) [09:08:36] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG) [09:08:36] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG) [09:08:36] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG) [09:08:36] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG) [09:08:36] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG) [09:08:36] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG) [09:08:36] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG) [09:08:36] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG) [09:08:36] ================== [SKIPPED] test_invalid ================== [09:08:36] ===================== [PASSED] xe_log ====================== [09:08:36] ================== no_relay (3 subtests) =================== [09:08:36] [PASSED] xe_drops_guc2pf_if_not_ready [09:08:36] [PASSED] xe_drops_guc2vf_if_not_ready [09:08:36] [PASSED] xe_rejects_send_if_not_ready [09:08:36] ==================== [PASSED] no_relay ===================== [09:08:36] ================== pf_relay (14 subtests) ================== [09:08:36] [PASSED] pf_rejects_guc2pf_too_short [09:08:36] [PASSED] pf_rejects_guc2pf_too_long [09:08:36] [PASSED] pf_rejects_guc2pf_no_payload [09:08:36] [PASSED] pf_fails_no_payload [09:08:36] [PASSED] pf_fails_bad_origin [09:08:36] [PASSED] pf_fails_bad_type [09:08:36] [PASSED] pf_txn_reports_error [09:08:36] [PASSED] pf_txn_sends_pf2guc [09:08:36] [PASSED] pf_sends_pf2guc [09:08:36] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV) [09:08:36] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV) [09:08:36] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV) [09:08:36] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV) [09:08:36] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV) [09:08:36] ==================== [PASSED] pf_relay ===================== [09:08:36] ================== vf_relay (3 subtests) =================== [09:08:36] [PASSED] vf_rejects_guc2vf_too_short [09:08:36] [PASSED] vf_rejects_guc2vf_too_long [09:08:36] [PASSED] vf_rejects_guc2vf_no_payload [09:08:36] ==================== [PASSED] vf_relay ===================== [09:08:36] ================ pf_gt_config (9 subtests) ================= [09:08:36] [PASSED] fair_contexts_1vf [09:08:36] [PASSED] fair_doorbells_1vf [09:08:36] [PASSED] fair_ggtt_1vf [09:08:36] ====================== fair_vram_1vf ====================== [09:08:36] [PASSED] 3.50 GiB [09:08:36] [PASSED] 11.5 GiB [09:08:36] [PASSED] 15.5 GiB [09:08:36] [PASSED] 31.5 GiB [09:08:36] [PASSED] 63.5 GiB [09:08:36] [PASSED] 1.91 GiB [09:08:36] ================== [PASSED] fair_vram_1vf ================== [09:08:36] ================ fair_vram_1vf_admin_only ================= [09:08:36] [PASSED] 3.50 GiB [09:08:36] [PASSED] 11.5 GiB [09:08:36] [PASSED] 15.5 GiB [09:08:36] [PASSED] 31.5 GiB [09:08:36] [PASSED] 63.5 GiB [09:08:36] [PASSED] 1.91 GiB [09:08:36] ============ [PASSED] fair_vram_1vf_admin_only ============= [09:08:36] ====================== fair_contexts ====================== [09:08:36] [PASSED] 1 VF [09:08:36] [PASSED] 2 VFs [09:08:36] [PASSED] 3 VFs [09:08:36] [PASSED] 4 VFs [09:08:36] [PASSED] 5 VFs [09:08:36] [PASSED] 6 VFs [09:08:36] [PASSED] 7 VFs [09:08:36] [PASSED] 8 VFs [09:08:36] [PASSED] 9 VFs [09:08:36] [PASSED] 10 VFs [09:08:36] [PASSED] 11 VFs [09:08:36] [PASSED] 12 VFs [09:08:36] [PASSED] 13 VFs [09:08:36] [PASSED] 14 VFs [09:08:36] [PASSED] 15 VFs [09:08:36] [PASSED] 16 VFs [09:08:36] [PASSED] 17 VFs [09:08:36] [PASSED] 18 VFs [09:08:36] [PASSED] 19 VFs [09:08:36] [PASSED] 20 VFs [09:08:36] [PASSED] 21 VFs [09:08:36] [PASSED] 22 VFs [09:08:36] [PASSED] 23 VFs [09:08:36] [PASSED] 24 VFs [09:08:36] [PASSED] 25 VFs [09:08:36] [PASSED] 26 VFs [09:08:36] [PASSED] 27 VFs [09:08:36] [PASSED] 28 VFs [09:08:36] [PASSED] 29 VFs [09:08:36] [PASSED] 30 VFs [09:08:36] [PASSED] 31 VFs [09:08:36] [PASSED] 32 VFs [09:08:36] [PASSED] 33 VFs [09:08:36] [PASSED] 34 VFs [09:08:36] [PASSED] 35 VFs [09:08:36] [PASSED] 36 VFs [09:08:36] [PASSED] 37 VFs [09:08:36] [PASSED] 38 VFs [09:08:36] [PASSED] 39 VFs [09:08:36] [PASSED] 40 VFs [09:08:36] [PASSED] 41 VFs [09:08:36] [PASSED] 42 VFs [09:08:36] [PASSED] 43 VFs [09:08:36] [PASSED] 44 VFs [09:08:36] [PASSED] 45 VFs [09:08:36] [PASSED] 46 VFs [09:08:36] [PASSED] 47 VFs [09:08:36] [PASSED] 48 VFs [09:08:36] [PASSED] 49 VFs [09:08:36] [PASSED] 50 VFs [09:08:36] [PASSED] 51 VFs [09:08:36] [PASSED] 52 VFs [09:08:36] [PASSED] 53 VFs [09:08:36] [PASSED] 54 VFs [09:08:36] [PASSED] 55 VFs [09:08:36] [PASSED] 56 VFs [09:08:36] [PASSED] 57 VFs [09:08:36] [PASSED] 58 VFs [09:08:36] [PASSED] 59 VFs [09:08:36] [PASSED] 60 VFs [09:08:36] [PASSED] 61 VFs [09:08:36] [PASSED] 62 VFs [09:08:36] [PASSED] 63 VFs [09:08:36] ================== [PASSED] fair_contexts ================== [09:08:36] ===================== fair_doorbells ====================== [09:08:36] [PASSED] 1 VF [09:08:36] [PASSED] 2 VFs [09:08:36] [PASSED] 3 VFs [09:08:36] [PASSED] 4 VFs [09:08:36] [PASSED] 5 VFs [09:08:36] [PASSED] 6 VFs [09:08:36] [PASSED] 7 VFs [09:08:36] [PASSED] 8 VFs [09:08:36] [PASSED] 9 VFs [09:08:36] [PASSED] 10 VFs [09:08:36] [PASSED] 11 VFs [09:08:36] [PASSED] 12 VFs [09:08:36] [PASSED] 13 VFs [09:08:36] [PASSED] 14 VFs [09:08:36] [PASSED] 15 VFs [09:08:36] [PASSED] 16 VFs [09:08:36] [PASSED] 17 VFs [09:08:36] [PASSED] 18 VFs [09:08:36] [PASSED] 19 VFs [09:08:36] [PASSED] 20 VFs [09:08:36] [PASSED] 21 VFs [09:08:36] [PASSED] 22 VFs [09:08:36] [PASSED] 23 VFs [09:08:36] [PASSED] 24 VFs [09:08:36] [PASSED] 25 VFs [09:08:36] [PASSED] 26 VFs [09:08:36] [PASSED] 27 VFs [09:08:36] [PASSED] 28 VFs [09:08:36] [PASSED] 29 VFs [09:08:36] [PASSED] 30 VFs [09:08:36] [PASSED] 31 VFs [09:08:36] [PASSED] 32 VFs [09:08:36] [PASSED] 33 VFs [09:08:36] [PASSED] 34 VFs [09:08:36] [PASSED] 35 VFs [09:08:36] [PASSED] 36 VFs [09:08:36] [PASSED] 37 VFs [09:08:36] [PASSED] 38 VFs [09:08:36] [PASSED] 39 VFs [09:08:36] [PASSED] 40 VFs [09:08:36] [PASSED] 41 VFs [09:08:36] [PASSED] 42 VFs [09:08:36] [PASSED] 43 VFs [09:08:36] [PASSED] 44 VFs [09:08:36] [PASSED] 45 VFs [09:08:36] [PASSED] 46 VFs [09:08:36] [PASSED] 47 VFs [09:08:36] [PASSED] 48 VFs [09:08:36] [PASSED] 49 VFs [09:08:36] [PASSED] 50 VFs [09:08:36] [PASSED] 51 VFs [09:08:36] [PASSED] 52 VFs [09:08:36] [PASSED] 53 VFs [09:08:36] [PASSED] 54 VFs [09:08:36] [PASSED] 55 VFs [09:08:36] [PASSED] 56 VFs [09:08:36] [PASSED] 57 VFs [09:08:36] [PASSED] 58 VFs [09:08:36] [PASSED] 59 VFs [09:08:36] [PASSED] 60 VFs [09:08:36] [PASSED] 61 VFs [09:08:36] [PASSED] 62 VFs [09:08:36] [PASSED] 63 VFs [09:08:36] ================= [PASSED] fair_doorbells ================== [09:08:36] ======================== fair_ggtt ======================== [09:08:36] [PASSED] 1 VF [09:08:36] [PASSED] 2 VFs [09:08:36] [PASSED] 3 VFs [09:08:36] [PASSED] 4 VFs [09:08:36] [PASSED] 5 VFs [09:08:36] [PASSED] 6 VFs [09:08:36] [PASSED] 7 VFs [09:08:36] [PASSED] 8 VFs [09:08:36] [PASSED] 9 VFs [09:08:36] [PASSED] 10 VFs [09:08:36] [PASSED] 11 VFs [09:08:36] [PASSED] 12 VFs [09:08:36] [PASSED] 13 VFs [09:08:36] [PASSED] 14 VFs [09:08:36] [PASSED] 15 VFs [09:08:36] [PASSED] 16 VFs [09:08:36] [PASSED] 17 VFs [09:08:36] [PASSED] 18 VFs [09:08:36] [PASSED] 19 VFs [09:08:36] [PASSED] 20 VFs [09:08:36] [PASSED] 21 VFs [09:08:36] [PASSED] 22 VFs [09:08:36] [PASSED] 23 VFs [09:08:36] [PASSED] 24 VFs [09:08:36] [PASSED] 25 VFs [09:08:36] [PASSED] 26 VFs [09:08:36] [PASSED] 27 VFs [09:08:36] [PASSED] 28 VFs [09:08:36] [PASSED] 29 VFs [09:08:36] [PASSED] 30 VFs [09:08:36] [PASSED] 31 VFs [09:08:36] [PASSED] 32 VFs [09:08:36] [PASSED] 33 VFs [09:08:36] [PASSED] 34 VFs [09:08:36] [PASSED] 35 VFs [09:08:36] [PASSED] 36 VFs [09:08:36] [PASSED] 37 VFs [09:08:36] [PASSED] 38 VFs [09:08:36] [PASSED] 39 VFs [09:08:36] [PASSED] 40 VFs [09:08:36] [PASSED] 41 VFs [09:08:36] [PASSED] 42 VFs [09:08:36] [PASSED] 43 VFs [09:08:36] [PASSED] 44 VFs [09:08:36] [PASSED] 45 VFs [09:08:36] [PASSED] 46 VFs [09:08:36] [PASSED] 47 VFs [09:08:36] [PASSED] 48 VFs [09:08:36] [PASSED] 49 VFs [09:08:36] [PASSED] 50 VFs [09:08:36] [PASSED] 51 VFs [09:08:36] [PASSED] 52 VFs [09:08:36] [PASSED] 53 VFs [09:08:36] [PASSED] 54 VFs [09:08:36] [PASSED] 55 VFs [09:08:36] [PASSED] 56 VFs [09:08:36] [PASSED] 57 VFs [09:08:36] [PASSED] 58 VFs [09:08:36] [PASSED] 59 VFs [09:08:36] [PASSED] 60 VFs [09:08:36] [PASSED] 61 VFs [09:08:36] [PASSED] 62 VFs [09:08:36] [PASSED] 63 VFs [09:08:36] ==================== [PASSED] fair_ggtt ==================== [09:08:36] ======================== fair_vram ======================== [09:08:36] [PASSED] 1 VF [09:08:36] [PASSED] 2 VFs [09:08:36] [PASSED] 3 VFs [09:08:36] [PASSED] 4 VFs [09:08:36] [PASSED] 5 VFs [09:08:36] [PASSED] 6 VFs [09:08:36] [PASSED] 7 VFs [09:08:36] [PASSED] 8 VFs [09:08:36] [PASSED] 9 VFs [09:08:36] [PASSED] 10 VFs [09:08:36] [PASSED] 11 VFs [09:08:36] [PASSED] 12 VFs [09:08:36] [PASSED] 13 VFs [09:08:36] [PASSED] 14 VFs [09:08:36] [PASSED] 15 VFs [09:08:36] [PASSED] 16 VFs [09:08:36] [PASSED] 17 VFs [09:08:36] [PASSED] 18 VFs [09:08:36] [PASSED] 19 VFs [09:08:36] [PASSED] 20 VFs [09:08:36] [PASSED] 21 VFs [09:08:36] [PASSED] 22 VFs [09:08:36] [PASSED] 23 VFs [09:08:36] [PASSED] 24 VFs [09:08:36] [PASSED] 25 VFs [09:08:36] [PASSED] 26 VFs [09:08:36] [PASSED] 27 VFs [09:08:36] [PASSED] 28 VFs [09:08:36] [PASSED] 29 VFs [09:08:36] [PASSED] 30 VFs [09:08:36] [PASSED] 31 VFs [09:08:36] [PASSED] 32 VFs [09:08:36] [PASSED] 33 VFs [09:08:36] [PASSED] 34 VFs [09:08:36] [PASSED] 35 VFs [09:08:36] [PASSED] 36 VFs [09:08:36] [PASSED] 37 VFs [09:08:36] [PASSED] 38 VFs [09:08:36] [PASSED] 39 VFs [09:08:36] [PASSED] 40 VFs [09:08:36] [PASSED] 41 VFs [09:08:36] [PASSED] 42 VFs [09:08:36] [PASSED] 43 VFs [09:08:36] [PASSED] 44 VFs [09:08:36] [PASSED] 45 VFs [09:08:36] [PASSED] 46 VFs [09:08:36] [PASSED] 47 VFs [09:08:36] [PASSED] 48 VFs [09:08:36] [PASSED] 49 VFs [09:08:36] [PASSED] 50 VFs [09:08:36] [PASSED] 51 VFs [09:08:36] [PASSED] 52 VFs [09:08:36] [PASSED] 53 VFs [09:08:36] [PASSED] 54 VFs [09:08:36] [PASSED] 55 VFs [09:08:36] [PASSED] 56 VFs [09:08:36] [PASSED] 57 VFs [09:08:36] [PASSED] 58 VFs [09:08:36] [PASSED] 59 VFs [09:08:36] [PASSED] 60 VFs [09:08:36] [PASSED] 61 VFs [09:08:36] [PASSED] 62 VFs [09:08:36] [PASSED] 63 VFs [09:08:36] ==================== [PASSED] fair_vram ==================== [09:08:36] ================== [PASSED] pf_gt_config =================== [09:08:36] ===================== lmtt (1 subtest) ===================== [09:08:36] ======================== test_ops ========================= [09:08:36] [PASSED] 2-level [09:08:36] [PASSED] multi-level [09:08:36] ==================== [PASSED] test_ops ===================== [09:08:36] ====================== [PASSED] lmtt ======================= [09:08:36] ================= sriov_packet (1 subtest) ================= [09:08:36] [PASSED] test_descriptor_init [09:08:36] ================== [PASSED] sriov_packet =================== [09:08:36] ================= pf_service (11 subtests) ================= [09:08:36] [PASSED] pf_negotiate_any [09:08:36] [PASSED] pf_negotiate_base_match [09:08:36] [PASSED] pf_negotiate_base_newer [09:08:36] [PASSED] pf_negotiate_base_next [09:08:36] [SKIPPED] pf_negotiate_base_older (no older minor) [09:08:36] [PASSED] pf_negotiate_base_prev [09:08:36] [PASSED] pf_negotiate_latest_match [09:08:36] [PASSED] pf_negotiate_latest_newer [09:08:36] [PASSED] pf_negotiate_latest_next [09:08:36] [SKIPPED] pf_negotiate_latest_older (no older minor) [09:08:36] [SKIPPED] pf_negotiate_latest_prev (no prev major) [09:08:36] =================== [PASSED] pf_service ==================== [09:08:36] ================= xe_guc_g2g (2 subtests) ================== [09:08:36] ============== xe_live_guc_g2g_kunit_default ============== [09:08:36] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ========== [09:08:36] ============== xe_live_guc_g2g_kunit_allmem =============== [09:08:36] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ========== [09:08:36] =================== [SKIPPED] xe_guc_g2g =================== [09:08:36] =================== xe_mocs (2 subtests) =================== [09:08:36] ================ xe_live_mocs_kernel_kunit ================ [09:08:36] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============ [09:08:36] ================ xe_live_mocs_reset_kunit ================= [09:08:36] ============ [SKIPPED] xe_live_mocs_reset_kunit ============ [09:08:36] ==================== [SKIPPED] xe_mocs ===================== [09:08:36] ================= xe_migrate (2 subtests) ================== [09:08:36] ================= xe_migrate_sanity_kunit ================= [09:08:36] ============ [SKIPPED] xe_migrate_sanity_kunit ============= [09:08:36] ================== xe_validate_ccs_kunit ================== [09:08:36] ============= [SKIPPED] xe_validate_ccs_kunit ============== [09:08:36] =================== [SKIPPED] xe_migrate =================== [09:08:36] ================== xe_dma_buf (1 subtest) ================== [09:08:36] ==================== xe_dma_buf_kunit ===================== [09:08:36] ================ [SKIPPED] xe_dma_buf_kunit ================ [09:08:36] =================== [SKIPPED] xe_dma_buf =================== [09:08:36] ================= xe_bo_shrink (1 subtest) ================= [09:08:36] =================== xe_bo_shrink_kunit ==================== [09:08:36] =============== [SKIPPED] xe_bo_shrink_kunit =============== [09:08:36] ================== [SKIPPED] xe_bo_shrink ================== [09:08:36] ==================== xe_bo (2 subtests) ==================== [09:08:36] ================== xe_ccs_migrate_kunit =================== [09:08:36] ============== [SKIPPED] xe_ccs_migrate_kunit ============== [09:08:36] ==================== xe_bo_evict_kunit ==================== [09:08:36] =============== [SKIPPED] xe_bo_evict_kunit ================ [09:08:36] ===================== [SKIPPED] xe_bo ====================== [09:08:36] =================== xe_any (9 subtests) ==================== [09:08:36] [PASSED] test_to_xe [09:08:36] [PASSED] test_to_dev [09:08:36] [PASSED] test_to_pdev [09:08:36] [PASSED] test_to_drm [09:08:36] [PASSED] test_if_pdev [09:08:36] [PASSED] test_if_xe [09:08:36] [PASSED] test_if_tile [09:08:36] [PASSED] test_if_gt [09:08:36] [PASSED] test_to_id [09:08:36] ===================== [PASSED] xe_any ====================== [09:08:36] ==================== args (13 subtests) ==================== [09:08:36] [PASSED] count_args_test [09:08:36] [PASSED] call_args_example [09:08:36] [PASSED] call_args_test [09:08:36] [PASSED] drop_first_arg_example [09:08:36] [PASSED] drop_first_arg_test [09:08:36] [PASSED] first_arg_example [09:08:36] [PASSED] first_arg_test [09:08:36] [PASSED] last_arg_example [09:08:36] [PASSED] last_arg_test [09:08:36] [PASSED] pick_arg_example [09:08:36] [PASSED] if_args_example [09:08:36] [PASSED] if_args_test [09:08:36] [PASSED] sep_comma_example [09:08:36] ====================== [PASSED] args ======================= [09:08:36] =================== xe_pci (3 subtests) ==================== [09:08:36] ==================== check_graphics_ip ==================== [09:08:36] [PASSED] 12.00 Xe_LP [09:08:36] [PASSED] 12.10 Xe_LP+ [09:08:36] [PASSED] 12.55 Xe_HPG [09:08:36] [PASSED] 12.60 Xe_HPC [09:08:36] [PASSED] 12.70 Xe_LPG [09:08:36] [PASSED] 12.71 Xe_LPG [09:08:36] [PASSED] 12.74 Xe_LPG+ [09:08:36] [PASSED] 20.01 Xe2_HPG [09:08:36] [PASSED] 20.02 Xe2_HPG [09:08:36] [PASSED] 20.04 Xe2_LPG [09:08:36] [PASSED] 30.00 Xe3_LPG [09:08:36] [PASSED] 30.01 Xe3_LPG [09:08:36] [PASSED] 30.03 Xe3_LPG [09:08:36] [PASSED] 30.04 Xe3_LPG [09:08:36] [PASSED] 30.05 Xe3_LPG [09:08:36] [PASSED] 35.10 Xe3p_LPG [09:08:36] [PASSED] 35.11 Xe3p_XPC [09:08:36] ================ [PASSED] check_graphics_ip ================ [09:08:36] ===================== check_media_ip ====================== [09:08:36] [PASSED] 12.00 Xe_M [09:08:36] [PASSED] 12.55 Xe_HPM [09:08:36] [PASSED] 13.00 Xe_LPM+ [09:08:36] [PASSED] 13.01 Xe2_HPM [09:08:36] [PASSED] 20.00 Xe2_LPM [09:08:36] [PASSED] 30.00 Xe3_LPM [09:08:36] [PASSED] 30.02 Xe3_LPM [09:08:36] [PASSED] 35.00 Xe3p_LPM [09:08:36] [PASSED] 35.03 Xe3p_HPM [09:08:36] ================= [PASSED] check_media_ip ================== [09:08:36] =================== check_platform_desc =================== [09:08:36] [PASSED] 0x9A60 (TIGERLAKE) [09:08:36] [PASSED] 0x9A68 (TIGERLAKE) [09:08:36] [PASSED] 0x9A70 (TIGERLAKE) [09:08:36] [PASSED] 0x9A40 (TIGERLAKE) [09:08:36] [PASSED] 0x9A49 (TIGERLAKE) [09:08:36] [PASSED] 0x9A59 (TIGERLAKE) [09:08:36] [PASSED] 0x9A78 (TIGERLAKE) [09:08:36] [PASSED] 0x9AC0 (TIGERLAKE) [09:08:36] [PASSED] 0x9AC9 (TIGERLAKE) [09:08:36] [PASSED] 0x9AD9 (TIGERLAKE) [09:08:36] [PASSED] 0x9AF8 (TIGERLAKE) [09:08:36] [PASSED] 0x4C80 (ROCKETLAKE) [09:08:36] [PASSED] 0x4C8A (ROCKETLAKE) [09:08:36] [PASSED] 0x4C8B (ROCKETLAKE) [09:08:36] [PASSED] 0x4C8C (ROCKETLAKE) [09:08:36] [PASSED] 0x4C90 (ROCKETLAKE) [09:08:36] [PASSED] 0x4C9A (ROCKETLAKE) [09:08:36] [PASSED] 0x4680 (ALDERLAKE_S) [09:08:36] [PASSED] 0x4682 (ALDERLAKE_S) [09:08:36] [PASSED] 0x4688 (ALDERLAKE_S) [09:08:36] [PASSED] 0x468A (ALDERLAKE_S) [09:08:36] [PASSED] 0x468B (ALDERLAKE_S) [09:08:36] [PASSED] 0x4690 (ALDERLAKE_S) [09:08:36] [PASSED] 0x4692 (ALDERLAKE_S) [09:08:36] [PASSED] 0x4693 (ALDERLAKE_S) [09:08:36] [PASSED] 0x46A0 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46A1 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46A2 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46A3 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46A6 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46A8 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46AA (ALDERLAKE_P) [09:08:36] [PASSED] 0x462A (ALDERLAKE_P) [09:08:36] [PASSED] 0x4626 (ALDERLAKE_P) [09:08:36] [PASSED] 0x4628 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46B0 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46B1 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46B2 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46B3 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46C0 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46C1 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46C2 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46C3 (ALDERLAKE_P) [09:08:36] [PASSED] 0x46D0 (ALDERLAKE_N) [09:08:36] [PASSED] 0x46D1 (ALDERLAKE_N) [09:08:36] [PASSED] 0x46D2 (ALDERLAKE_N) [09:08:36] [PASSED] 0x46D3 (ALDERLAKE_N) [09:08:36] [PASSED] 0x46D4 (ALDERLAKE_N) [09:08:36] [PASSED] 0xA721 (ALDERLAKE_P) [09:08:36] [PASSED] 0xA7A1 (ALDERLAKE_P) [09:08:36] [PASSED] 0xA7A9 (ALDERLAKE_P) [09:08:36] [PASSED] 0xA7AC (ALDERLAKE_P) [09:08:36] [PASSED] 0xA7AD (ALDERLAKE_P) [09:08:36] [PASSED] 0xA720 (ALDERLAKE_P) [09:08:36] [PASSED] 0xA7A0 (ALDERLAKE_P) [09:08:36] [PASSED] 0xA7A8 (ALDERLAKE_P) [09:08:36] [PASSED] 0xA7AA (ALDERLAKE_P) [09:08:36] [PASSED] 0xA7AB (ALDERLAKE_P) [09:08:36] [PASSED] 0xA780 (ALDERLAKE_S) [09:08:36] [PASSED] 0xA781 (ALDERLAKE_S) [09:08:36] [PASSED] 0xA782 (ALDERLAKE_S) [09:08:36] [PASSED] 0xA783 (ALDERLAKE_S) [09:08:36] [PASSED] 0xA788 (ALDERLAKE_S) [09:08:36] [PASSED] 0xA789 (ALDERLAKE_S) [09:08:36] [PASSED] 0xA78A (ALDERLAKE_S) [09:08:36] [PASSED] 0xA78B (ALDERLAKE_S) [09:08:36] [PASSED] 0x4905 (DG1) [09:08:36] [PASSED] 0x4906 (DG1) [09:08:36] [PASSED] 0x4907 (DG1) [09:08:36] [PASSED] 0x4908 (DG1) [09:08:36] [PASSED] 0x4909 (DG1) [09:08:36] [PASSED] 0x56C0 (DG2) [09:08:36] [PASSED] 0x56C2 (DG2) [09:08:36] [PASSED] 0x56C1 (DG2) [09:08:36] [PASSED] 0x7D51 (METEORLAKE) [09:08:36] [PASSED] 0x7DD1 (METEORLAKE) [09:08:36] [PASSED] 0x7D41 (METEORLAKE) [09:08:36] [PASSED] 0x7D67 (METEORLAKE) [09:08:36] [PASSED] 0xB640 (METEORLAKE) [09:08:36] [PASSED] 0x56A0 (DG2) [09:08:36] [PASSED] 0x56A1 (DG2) [09:08:36] [PASSED] 0x56A2 (DG2) [09:08:36] [PASSED] 0x56BE (DG2) [09:08:36] [PASSED] 0x56BF (DG2) [09:08:36] [PASSED] 0x5690 (DG2) [09:08:36] [PASSED] 0x5691 (DG2) [09:08:36] [PASSED] 0x5692 (DG2) [09:08:36] [PASSED] 0x56A5 (DG2) [09:08:36] [PASSED] 0x56A6 (DG2) [09:08:36] [PASSED] 0x56B0 (DG2) [09:08:36] [PASSED] 0x56B1 (DG2) [09:08:36] [PASSED] 0x56BA (DG2) [09:08:36] [PASSED] 0x56BB (DG2) [09:08:36] [PASSED] 0x56BC (DG2) [09:08:36] [PASSED] 0x56BD (DG2) [09:08:36] [PASSED] 0x5693 (DG2) [09:08:36] [PASSED] 0x5694 (DG2) [09:08:36] [PASSED] 0x5695 (DG2) [09:08:36] [PASSED] 0x56A3 (DG2) [09:08:36] [PASSED] 0x56A4 (DG2) [09:08:36] [PASSED] 0x56B2 (DG2) [09:08:36] [PASSED] 0x56B3 (DG2) [09:08:36] [PASSED] 0x5696 (DG2) [09:08:36] [PASSED] 0x5697 (DG2) [09:08:36] [PASSED] 0xB69 (PVC) [09:08:36] [PASSED] 0xB6E (PVC) [09:08:36] [PASSED] 0xBD4 (PVC) [09:08:36] [PASSED] 0xBD5 (PVC) [09:08:36] [PASSED] 0xBD6 (PVC) [09:08:36] [PASSED] 0xBD7 (PVC) [09:08:36] [PASSED] 0xBD8 (PVC) [09:08:36] [PASSED] 0xBD9 (PVC) [09:08:36] [PASSED] 0xBDA (PVC) [09:08:36] [PASSED] 0xBDB (PVC) [09:08:36] [PASSED] 0xBE0 (PVC) [09:08:36] [PASSED] 0xBE1 (PVC) [09:08:36] [PASSED] 0xBE5 (PVC) [09:08:36] [PASSED] 0x7D40 (METEORLAKE) [09:08:36] [PASSED] 0x7D45 (METEORLAKE) [09:08:36] [PASSED] 0x7D55 (METEORLAKE) [09:08:36] [PASSED] 0x7D60 (METEORLAKE) [09:08:36] [PASSED] 0x7DD5 (METEORLAKE) [09:08:36] [PASSED] 0x6420 (LUNARLAKE) [09:08:36] [PASSED] 0x64A0 (LUNARLAKE) [09:08:36] [PASSED] 0x64B0 (LUNARLAKE) [09:08:36] [PASSED] 0xE202 (BATTLEMAGE) [09:08:36] [PASSED] 0xE209 (BATTLEMAGE) [09:08:36] [PASSED] 0xE20B (BATTLEMAGE) [09:08:36] [PASSED] 0xE20C (BATTLEMAGE) [09:08:36] [PASSED] 0xE20D (BATTLEMAGE) [09:08:36] [PASSED] 0xE210 (BATTLEMAGE) [09:08:36] [PASSED] 0xE211 (BATTLEMAGE) [09:08:36] [PASSED] 0xE212 (BATTLEMAGE) [09:08:36] [PASSED] 0xE216 (BATTLEMAGE) [09:08:36] [PASSED] 0xE220 (BATTLEMAGE) [09:08:36] [PASSED] 0xE221 (BATTLEMAGE) [09:08:36] [PASSED] 0xE222 (BATTLEMAGE) [09:08:36] [PASSED] 0xE223 (BATTLEMAGE) [09:08:36] [PASSED] 0xB080 (PANTHERLAKE) [09:08:36] [PASSED] 0xB081 (PANTHERLAKE) [09:08:36] [PASSED] 0xB082 (PANTHERLAKE) [09:08:36] [PASSED] 0xB083 (PANTHERLAKE) [09:08:36] [PASSED] 0xB084 (PANTHERLAKE) [09:08:36] [PASSED] 0xB085 (PANTHERLAKE) [09:08:36] [PASSED] 0xB086 (PANTHERLAKE) [09:08:36] [PASSED] 0xB087 (PANTHERLAKE) [09:08:36] [PASSED] 0xB08F (PANTHERLAKE) [09:08:36] [PASSED] 0xB090 (PANTHERLAKE) [09:08:36] [PASSED] 0xB0A0 (PANTHERLAKE) [09:08:36] [PASSED] 0xB0B0 (PANTHERLAKE) [09:08:36] [PASSED] 0xFD80 (PANTHERLAKE) [09:08:36] [PASSED] 0xFD81 (PANTHERLAKE) [09:08:36] [PASSED] 0xD740 (NOVALAKE_S) [09:08:36] [PASSED] 0xD741 (NOVALAKE_S) [09:08:36] [PASSED] 0xD742 (NOVALAKE_S) [09:08:36] [PASSED] 0xD743 (NOVALAKE_S) [09:08:36] [PASSED] 0xD745 (NOVALAKE_S) [09:08:36] [PASSED] 0xD74A (NOVALAKE_S) [09:08:36] [PASSED] 0xD74B (NOVALAKE_S) [09:08:36] [PASSED] 0x674C (CRESCENTISLAND) [09:08:36] [PASSED] 0x674D (CRESCENTISLAND) [09:08:36] [PASSED] 0x674E (CRESCENTISLAND) [09:08:36] [PASSED] 0x674F (CRESCENTISLAND) [09:08:36] [PASSED] 0x6750 (CRESCENTISLAND) [09:08:36] [PASSED] 0xD750 (NOVALAKE_P) [09:08:36] [PASSED] 0xD751 (NOVALAKE_P) [09:08:36] [PASSED] 0xD752 (NOVALAKE_P) [09:08:36] [PASSED] 0xD753 (NOVALAKE_P) [09:08:36] [PASSED] 0xD754 (NOVALAKE_P) [09:08:36] [PASSED] 0xD755 (NOVALAKE_P) [09:08:36] [PASSED] 0xD756 (NOVALAKE_P) [09:08:36] [PASSED] 0xD757 (NOVALAKE_P) [09:08:36] [PASSED] 0xD75F (NOVALAKE_P) [09:08:36] =============== [PASSED] check_platform_desc =============== [09:08:36] ===================== [PASSED] xe_pci ====================== [09:08:36] ============= xe_rtp_tables_test (5 subtests) ============== [09:08:36] ================== xe_rtp_table_gt_test =================== [09:08:36] [PASSED] gt_was/14011060649 [09:08:36] [PASSED] gt_was/14011059788 [09:08:36] [PASSED] gt_was/14015795083 [09:08:36] [PASSED] gt_was/16021867713 [09:08:36] [PASSED] gt_was/14019449301 [09:08:36] [PASSED] gt_was/16028005424 [09:08:36] [PASSED] gt_was/14026578760 [09:08:36] [PASSED] gt_was/1409420604 [09:08:36] [PASSED] gt_was/1408615072 [09:08:36] [PASSED] gt_was/22010523718 [09:08:36] [PASSED] gt_was/14011006942 [09:08:36] [PASSED] gt_was/14014830051 [09:08:36] [PASSED] gt_was/18018781329 [09:08:36] [PASSED] gt_was/1509235366 [09:08:36] [PASSED] gt_was/18018781329 [09:08:36] [PASSED] gt_was/16016694945 [09:08:36] [PASSED] gt_was/14018575942 [09:08:36] [PASSED] gt_was/22016670082 [09:08:36] [PASSED] gt_was/22016670082 [09:08:36] [PASSED] gt_was/14017421178 [09:08:36] [PASSED] gt_was/16025250150 [09:08:36] [PASSED] gt_was/14021871409 [09:08:36] [PASSED] gt_was/16021865536 [09:08:36] [PASSED] gt_was/14021486841 [09:08:36] [PASSED] gt_was/14025160223 [09:08:36] [PASSED] gt_was/14026144927, 16029437861, 14026127056 [09:08:36] [PASSED] gt_was/14025635424 [09:08:36] [PASSED] gt_was/16028005424 [09:08:36] ============== [PASSED] xe_rtp_table_gt_test =============== [09:08:36] ================== xe_rtp_table_gt_test =================== [09:08:36] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable [09:08:36] [PASSED] gt_tunings/Tuning: 32B Access Enable [09:08:36] [PASSED] gt_tunings/Tuning: L3 cache [09:08:36] [PASSED] gt_tunings/Tuning: L3 cache - media [09:08:36] [PASSED] gt_tunings/Tuning: Compression Overfetch [09:08:36] [PASSED] gt_tunings/Tuning: Compression Overfetch - media [09:08:36] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 [09:08:36] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media [09:08:36] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only [09:08:36] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media [09:08:36] [PASSED] gt_tunings/Tuning: Stateless compression control [09:08:36] [PASSED] gt_tunings/Tuning: Stateless compression control - media [09:08:36] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache [09:08:36] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media [09:08:36] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB [09:08:36] ============== [PASSED] xe_rtp_table_gt_test =============== [09:08:36] ================== xe_rtp_table_oob_test ================== [09:08:36] [PASSED] oob_was/1607983814 [09:08:36] [PASSED] oob_was/16010904313 [09:08:36] [PASSED] oob_was/18022495364 [09:08:36] [PASSED] oob_was/22012773006 [09:08:36] [PASSED] oob_was/14014475959 [09:08:36] [PASSED] oob_was/22011391025 [09:08:36] [PASSED] oob_was/22012727170 [09:08:36] [PASSED] oob_was/22012727685 [09:08:36] [PASSED] oob_was/22016596838 [09:08:36] [PASSED] oob_was/18020744125 [09:08:36] [PASSED] oob_was/1409600907 [09:08:36] [PASSED] oob_was/22014953428 [09:08:36] [PASSED] oob_was/16017236439 [09:08:36] [PASSED] oob_was/14019821291 [09:08:36] [PASSED] oob_was/14015076503 [09:08:36] [PASSED] oob_was/14018913170 [09:08:36] [PASSED] oob_was/14018094691 [09:08:36] [PASSED] oob_was/18024947630 [09:08:36] [PASSED] oob_was/16022287689 [09:08:36] [PASSED] oob_was/13011645652 [09:08:36] [PASSED] oob_was/14022293748 [09:08:36] [PASSED] oob_was/22019794406 [09:08:36] [PASSED] oob_was/22019338487 [09:08:36] [PASSED] oob_was/16023588340 [09:08:36] [PASSED] oob_was/14019789679 [09:08:36] [PASSED] oob_was/14022866841 [09:08:36] [PASSED] oob_was/16021333562 [09:08:36] [PASSED] oob_was/14016712196 [09:08:36] [PASSED] oob_was/14015568240 [09:08:36] [PASSED] oob_was/18013179988 [09:08:36] [PASSED] oob_was/1508761755 [09:08:36] [PASSED] oob_was/16023105232 [09:08:36] [PASSED] oob_was/16026508708 [09:08:36] [PASSED] oob_was/14020001231 [09:08:36] [PASSED] oob_was/16023683509 [09:08:36] [PASSED] oob_was/14025515070 [09:08:36] [PASSED] oob_was/15015404425_disable [09:08:36] [PASSED] oob_was/16026007364 [09:08:36] [PASSED] oob_was/14020316580 [09:08:36] [PASSED] oob_was/14025883347 [09:08:36] [PASSED] oob_was/16029380221 [09:08:36] [PASSED] oob_was/22022079272 [09:08:36] [PASSED] oob_was/16029897822 [09:08:36] [PASSED] oob_was/14027054324 [09:08:36] ============== [PASSED] xe_rtp_table_oob_test ============== [09:08:36] ================ xe_rtp_table_dev_oob_test ================ [09:08:36] [PASSED] device_oob_was/22010954014 [09:08:36] [PASSED] device_oob_was/15015404425 [09:08:36] [PASSED] device_oob_was/22019338487_display [09:08:36] [PASSED] device_oob_was/14022085890 [09:08:36] [PASSED] device_oob_was/14026539277 [09:08:36] [PASSED] device_oob_was/14026633728 [09:08:36] [PASSED] device_oob_was/14026746987 [09:08:36] [PASSED] device_oob_was/14026779378 [09:08:36] ============ [PASSED] xe_rtp_table_dev_oob_test ============ [09:08:36] ========== xe_rtp_table_missing_upper_bound_test ========== [09:08:36] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865 [09:08:36] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037 [09:08:36] [PASSED] register_whitelist/1806527549 [09:08:36] [PASSED] register_whitelist/allow_read_ctx_timestamp [09:08:36] [PASSED] register_whitelist/allow_read_queue_timestamp [09:08:36] [PASSED] register_whitelist/16014440446 [09:08:36] [PASSED] register_whitelist/16017236439 [09:08:36] [PASSED] register_whitelist/16020183090 [09:08:36] [PASSED] register_whitelist/14024997852 [09:08:36] [PASSED] register_whitelist/14024997852 [09:08:36] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ====== [09:08:36] =============== [PASSED] xe_rtp_tables_test ================ [09:08:36] =================== xe_rtp (3 subtests) ==================== [09:08:36] =================== xe_rtp_rules_tests ==================== [09:08:36] [PASSED] no [09:08:36] [PASSED] yes [09:08:36] [PASSED] no-and-no [09:08:36] [PASSED] no-and-yes [09:08:36] [PASSED] yes-and-no [09:08:36] [PASSED] yes-and-yes [09:08:36] [PASSED] no-or-no [09:08:36] [PASSED] no-or-yes [09:08:36] [PASSED] yes-or-no [09:08:36] [PASSED] yes-or-yes [09:08:36] [PASSED] no-yes-or-yes-no [09:08:36] [PASSED] no-yes-or-yes-yes [09:08:36] [PASSED] yes-yes-or-no-yes [09:08:36] [PASSED] yes-yes-or-yes-yes [09:08:36] [PASSED] no-no-or-yes-or-no [09:08:36] [PASSED] or [09:08:36] [PASSED] or-yes [09:08:36] [PASSED] or-no [09:08:36] [PASSED] yes-or [09:08:36] [PASSED] no-or [09:08:36] [PASSED] no-or-or-yes [09:08:36] [PASSED] yes-or-or-no [09:08:36] [PASSED] no-or-or-no [09:08:36] [PASSED] missing-context-engine-class [09:08:36] [PASSED] missing-context-engine-class-or-yes [09:08:36] [PASSED] missing-context-engine-class-or-or-yes [09:08:36] =============== [PASSED] xe_rtp_rules_tests ================ [09:08:36] =============== xe_rtp_process_to_sr_tests ================ [09:08:36] [PASSED] coalesce-same-reg [09:08:36] [PASSED] coalesce-same-reg-literal-and-func [09:08:36] [PASSED] no-match-no-add [09:08:36] [PASSED] two-regs-two-entries [09:08:36] [PASSED] clr-one-set-other [09:08:36] [PASSED] set-field [09:08:36] [PASSED] conflict-duplicate [09:08:36] [PASSED] conflict-not-disjoint [09:08:36] [PASSED] conflict-not-disjoint-literal-and-func [09:08:36] [PASSED] conflict-reg-type [09:08:36] [PASSED] bad-mcr-reg-forced-to-regular [09:08:36] [PASSED] bad-regular-reg-forced-to-mcr [09:08:36] =========== [PASSED] xe_rtp_process_to_sr_tests ============ [09:08:36] ================== xe_rtp_process_tests =================== [09:08:36] [PASSED] active1 [09:08:36] [PASSED] active2 [09:08:36] [PASSED] active-inactive [09:08:36] [PASSED] inactive-active [09:08:36] [PASSED] inactive-active-inactive [09:08:36] [PASSED] inactive-inactive-inactive [09:08:36] ============== [PASSED] xe_rtp_process_tests =============== [09:08:36] ===================== [PASSED] xe_rtp ====================== [09:08:36] ==================== xe_wa (1 subtest) ===================== [09:08:36] ======================== xe_wa_gt ========================= [09:08:36] [PASSED] TIGERLAKE B0 [09:08:36] [PASSED] DG1 A0 [09:08:36] [PASSED] DG1 B0 [09:08:36] [PASSED] ALDERLAKE_S A0 [09:08:36] [PASSED] ALDERLAKE_S B0 [09:08:36] [PASSED] ALDERLAKE_S C0 [09:08:36] [PASSED] ALDERLAKE_S D0 [09:08:36] [PASSED] ALDERLAKE_P A0 [09:08:36] [PASSED] ALDERLAKE_P B0 [09:08:36] [PASSED] ALDERLAKE_P C0 [09:08:36] [PASSED] ALDERLAKE_S RPLS D0 [09:08:36] [PASSED] ALDERLAKE_P RPLU E0 [09:08:36] [PASSED] DG2 G10 C0 [09:08:36] [PASSED] DG2 G11 B1 [09:08:36] [PASSED] DG2 G12 A1 [09:08:36] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0 [09:08:36] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0 [09:08:36] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0 [09:08:36] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0 [09:08:36] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0 [09:08:36] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1 [09:08:36] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0 [09:08:36] ==================== [PASSED] xe_wa_gt ===================== [09:08:36] ====================== [PASSED] xe_wa ====================== [09:08:36] ============================================================ [09:08:36] Testing complete. Ran 793 tests: passed: 765, skipped: 28 [09:08:36] Elapsed time: 36.223s total, 1.810s configuring, 33.697s building, 0.683s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig [09:08:36] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [09:08:38] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48 [09:09:03] Starting KUnit Kernel (1/1)... [09:09:03] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [09:09:03] ============= refcount_interrupt (4 subtests) ============== [09:09:03] [PASSED] test_single_irq_change [09:09:03] [PASSED] test_nested_irq_change [09:09:03] [PASSED] test_multiple_irq_change [09:09:03] [PASSED] test_irq_save [09:09:03] =============== [PASSED] refcount_interrupt ================ [09:09:03] ============ drm_test_pick_cmdline (2 subtests) ============ [09:09:03] [PASSED] drm_test_pick_cmdline_res_1920_1080_60 [09:09:03] =============== drm_test_pick_cmdline_named =============== [09:09:03] [PASSED] NTSC [09:09:03] [PASSED] NTSC-J [09:09:03] [PASSED] PAL [09:09:03] [PASSED] PAL-M [09:09:03] =========== [PASSED] drm_test_pick_cmdline_named =========== [09:09:03] ============== [PASSED] drm_test_pick_cmdline ============== [09:09:03] == drm_test_atomic_get_connector_for_encoder (1 subtest) === [09:09:03] [PASSED] drm_test_drm_atomic_get_connector_for_encoder [09:09:03] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ==== [09:09:03] =========== drm_validate_clone_mode (2 subtests) =========== [09:09:03] ============== drm_test_check_in_clone_mode =============== [09:09:03] [PASSED] in_clone_mode [09:09:03] [PASSED] not_in_clone_mode [09:09:03] ========== [PASSED] drm_test_check_in_clone_mode =========== [09:09:03] =============== drm_test_check_valid_clones =============== [09:09:03] [PASSED] not_in_clone_mode [09:09:03] [PASSED] valid_clone [09:09:03] [PASSED] invalid_clone [09:09:03] =========== [PASSED] drm_test_check_valid_clones =========== [09:09:03] ============= [PASSED] drm_validate_clone_mode ============= [09:09:03] ============= drm_validate_modeset (1 subtest) ============= [09:09:03] [PASSED] drm_test_check_connector_changed_modeset [09:09:03] ============== [PASSED] drm_validate_modeset =============== [09:09:03] ====== drm_test_bridge_get_current_state (1 subtest) ======= [09:09:03] [PASSED] drm_test_drm_bridge_get_current_state_atomic [09:09:03] ======== [PASSED] drm_test_bridge_get_current_state ======== [09:09:03] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ====== [09:09:03] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic [09:09:03] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled [09:09:03] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts [09:09:03] ======== [PASSED] drm_test_bridge_helper_reset_crtc ======== [09:09:03] ============== drm_bridge_alloc (2 subtests) =============== [09:09:03] [PASSED] drm_test_drm_bridge_alloc_basic [09:09:03] [PASSED] drm_test_drm_bridge_alloc_get_put [09:09:03] ================ [PASSED] drm_bridge_alloc ================= [09:09:03] ============= drm_bridge_bus_fmt (5 subtests) ============== [09:09:03] [PASSED] drm_test_bridge_rgb_yuv_rgb [09:09:03] [PASSED] drm_test_bridge_must_convert_to_yuv444 [09:09:03] [PASSED] drm_test_bridge_hdmi_auto_rgb [09:09:03] [PASSED] drm_test_bridge_auto_first [09:09:03] [PASSED] drm_test_bridge_rgb_yuv_no_path [09:09:03] =============== [PASSED] drm_bridge_bus_fmt ================ [09:09:03] ============= drm_cmdline_parser (40 subtests) ============= [09:09:03] [PASSED] drm_test_cmdline_force_d_only [09:09:03] [PASSED] drm_test_cmdline_force_D_only_dvi [09:09:03] [PASSED] drm_test_cmdline_force_D_only_hdmi [09:09:03] [PASSED] drm_test_cmdline_force_D_only_not_digital [09:09:03] [PASSED] drm_test_cmdline_force_e_only [09:09:03] [PASSED] drm_test_cmdline_res [09:09:03] [PASSED] drm_test_cmdline_res_vesa [09:09:03] [PASSED] drm_test_cmdline_res_vesa_rblank [09:09:03] [PASSED] drm_test_cmdline_res_rblank [09:09:03] [PASSED] drm_test_cmdline_res_bpp [09:09:03] [PASSED] drm_test_cmdline_res_refresh [09:09:03] [PASSED] drm_test_cmdline_res_bpp_refresh [09:09:03] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced [09:09:03] [PASSED] drm_test_cmdline_res_bpp_refresh_margins [09:09:03] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off [09:09:03] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on [09:09:03] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog [09:09:03] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital [09:09:03] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on [09:09:03] [PASSED] drm_test_cmdline_res_margins_force_on [09:09:03] [PASSED] drm_test_cmdline_res_vesa_margins [09:09:03] [PASSED] drm_test_cmdline_name [09:09:03] [PASSED] drm_test_cmdline_name_bpp [09:09:03] [PASSED] drm_test_cmdline_name_option [09:09:03] [PASSED] drm_test_cmdline_name_bpp_option [09:09:03] [PASSED] drm_test_cmdline_rotate_0 [09:09:03] [PASSED] drm_test_cmdline_rotate_90 [09:09:03] [PASSED] drm_test_cmdline_rotate_180 [09:09:03] [PASSED] drm_test_cmdline_rotate_270 [09:09:03] [PASSED] drm_test_cmdline_hmirror [09:09:03] [PASSED] drm_test_cmdline_vmirror [09:09:03] [PASSED] drm_test_cmdline_margin_options [09:09:03] [PASSED] drm_test_cmdline_multiple_options [09:09:03] [PASSED] drm_test_cmdline_bpp_extra_and_option [09:09:03] [PASSED] drm_test_cmdline_extra_and_option [09:09:03] [PASSED] drm_test_cmdline_freestanding_options [09:09:03] [PASSED] drm_test_cmdline_freestanding_force_e_and_options [09:09:03] [PASSED] drm_test_cmdline_panel_orientation [09:09:03] ================ drm_test_cmdline_invalid ================= [09:09:03] [PASSED] margin_only [09:09:03] [PASSED] interlace_only [09:09:03] [PASSED] res_missing_x [09:09:03] [PASSED] res_missing_y [09:09:03] [PASSED] res_bad_y [09:09:03] [PASSED] res_missing_y_bpp [09:09:03] [PASSED] res_bad_bpp [09:09:03] [PASSED] res_bad_refresh [09:09:03] [PASSED] res_bpp_refresh_force_on_off [09:09:03] [PASSED] res_invalid_mode [09:09:03] [PASSED] res_bpp_wrong_place_mode [09:09:03] [PASSED] name_bpp_refresh [09:09:03] [PASSED] name_refresh [09:09:03] [PASSED] name_refresh_wrong_mode [09:09:03] [PASSED] name_refresh_invalid_mode [09:09:03] [PASSED] rotate_multiple [09:09:03] [PASSED] rotate_invalid_val [09:09:03] [PASSED] rotate_truncated [09:09:03] [PASSED] invalid_option [09:09:03] [PASSED] invalid_tv_option [09:09:03] [PASSED] truncated_tv_option [09:09:03] ============ [PASSED] drm_test_cmdline_invalid ============= [09:09:03] =============== drm_test_cmdline_tv_options =============== [09:09:03] [PASSED] NTSC [09:09:03] [PASSED] NTSC_443 [09:09:03] [PASSED] NTSC_J [09:09:03] [PASSED] PAL [09:09:03] [PASSED] PAL_M [09:09:03] [PASSED] PAL_N [09:09:03] [PASSED] SECAM [09:09:03] [PASSED] MONO_525 [09:09:03] [PASSED] MONO_625 [09:09:03] =========== [PASSED] drm_test_cmdline_tv_options =========== [09:09:03] =============== [PASSED] drm_cmdline_parser ================ [09:09:03] ========== drmm_connector_hdmi_init (20 subtests) ========== [09:09:03] [PASSED] drm_test_connector_hdmi_init_valid [09:09:03] [PASSED] drm_test_connector_hdmi_init_bpc_8 [09:09:03] [PASSED] drm_test_connector_hdmi_init_bpc_10 [09:09:03] [PASSED] drm_test_connector_hdmi_init_bpc_12 [09:09:03] [PASSED] drm_test_connector_hdmi_init_bpc_invalid [09:09:03] [PASSED] drm_test_connector_hdmi_init_bpc_null [09:09:03] [PASSED] drm_test_connector_hdmi_init_formats_empty [09:09:03] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb [09:09:03] === drm_test_connector_hdmi_init_formats_yuv420_allowed === [09:09:03] [PASSED] supported_formats=0x9 yuv420_allowed=1 [09:09:03] [PASSED] supported_formats=0x9 yuv420_allowed=0 [09:09:03] [PASSED] supported_formats=0x5 yuv420_allowed=1 [09:09:03] [PASSED] supported_formats=0x5 yuv420_allowed=0 [09:09:03] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed === [09:09:03] [PASSED] drm_test_connector_hdmi_init_null_ddc [09:09:03] [PASSED] drm_test_connector_hdmi_init_null_product [09:09:03] [PASSED] drm_test_connector_hdmi_init_null_vendor [09:09:03] [PASSED] drm_test_connector_hdmi_init_product_length_exact [09:09:03] [PASSED] drm_test_connector_hdmi_init_product_length_too_long [09:09:03] [PASSED] drm_test_connector_hdmi_init_product_valid [09:09:03] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact [09:09:03] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long [09:09:03] [PASSED] drm_test_connector_hdmi_init_vendor_valid [09:09:03] ========= drm_test_connector_hdmi_init_type_valid ========= [09:09:03] [PASSED] HDMI-A [09:09:03] [PASSED] HDMI-B [09:09:03] ===== [PASSED] drm_test_connector_hdmi_init_type_valid ===== [09:09:03] ======== drm_test_connector_hdmi_init_type_invalid ======== [09:09:03] [PASSED] Unknown [09:09:03] [PASSED] VGA [09:09:03] [PASSED] DVI-I [09:09:03] [PASSED] DVI-D [09:09:03] [PASSED] DVI-A [09:09:03] [PASSED] Composite [09:09:03] [PASSED] SVIDEO [09:09:03] [PASSED] LVDS [09:09:03] [PASSED] Component [09:09:03] [PASSED] DIN [09:09:03] [PASSED] DP [09:09:03] [PASSED] TV [09:09:03] [PASSED] eDP [09:09:03] [PASSED] Virtual [09:09:03] [PASSED] DSI [09:09:03] [PASSED] DPI [09:09:03] [PASSED] Writeback [09:09:03] [PASSED] SPI [09:09:03] [PASSED] USB [09:09:03] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ==== [09:09:03] ============ [PASSED] drmm_connector_hdmi_init ============= [09:09:03] ============= drmm_connector_init (3 subtests) ============= [09:09:03] [PASSED] drm_test_drmm_connector_init [09:09:03] [PASSED] drm_test_drmm_connector_init_null_ddc [09:09:03] ========= drm_test_drmm_connector_init_type_valid ========= [09:09:03] [PASSED] Unknown [09:09:03] [PASSED] VGA [09:09:03] [PASSED] DVI-I [09:09:03] [PASSED] DVI-D [09:09:03] [PASSED] DVI-A [09:09:03] [PASSED] Composite [09:09:03] [PASSED] SVIDEO [09:09:03] [PASSED] LVDS [09:09:03] [PASSED] Component [09:09:03] [PASSED] DIN [09:09:03] [PASSED] DP [09:09:03] [PASSED] HDMI-A [09:09:03] [PASSED] HDMI-B [09:09:03] [PASSED] TV [09:09:03] [PASSED] eDP [09:09:03] [PASSED] Virtual [09:09:03] [PASSED] DSI [09:09:03] [PASSED] DPI [09:09:03] [PASSED] Writeback [09:09:03] [PASSED] SPI [09:09:03] [PASSED] USB [09:09:03] ===== [PASSED] drm_test_drmm_connector_init_type_valid ===== [09:09:03] =============== [PASSED] drmm_connector_init =============== [09:09:03] ========= drm_connector_dynamic_init (6 subtests) ========== [09:09:03] [PASSED] drm_test_drm_connector_dynamic_init [09:09:03] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc [09:09:03] [PASSED] drm_test_drm_connector_dynamic_init_not_added [09:09:03] [PASSED] drm_test_drm_connector_dynamic_init_properties [09:09:03] ===== drm_test_drm_connector_dynamic_init_type_valid ====== [09:09:03] [PASSED] Unknown [09:09:03] [PASSED] VGA [09:09:03] [PASSED] DVI-I [09:09:03] [PASSED] DVI-D [09:09:03] [PASSED] DVI-A [09:09:03] [PASSED] Composite [09:09:03] [PASSED] SVIDEO [09:09:03] [PASSED] LVDS [09:09:03] [PASSED] Component [09:09:03] [PASSED] DIN [09:09:03] [PASSED] DP [09:09:03] [PASSED] HDMI-A [09:09:03] [PASSED] HDMI-B [09:09:03] [PASSED] TV [09:09:03] [PASSED] eDP [09:09:03] [PASSED] Virtual [09:09:03] [PASSED] DSI [09:09:03] [PASSED] DPI [09:09:03] [PASSED] Writeback [09:09:03] [PASSED] SPI [09:09:03] [PASSED] USB [09:09:03] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid == [09:09:03] ======== drm_test_drm_connector_dynamic_init_name ========= [09:09:03] [PASSED] Unknown [09:09:03] [PASSED] VGA [09:09:03] [PASSED] DVI-I [09:09:03] [PASSED] DVI-D [09:09:03] [PASSED] DVI-A [09:09:03] [PASSED] Composite [09:09:03] [PASSED] SVIDEO [09:09:03] [PASSED] LVDS [09:09:03] [PASSED] Component [09:09:03] [PASSED] DIN [09:09:03] [PASSED] DP [09:09:03] [PASSED] HDMI-A [09:09:03] [PASSED] HDMI-B [09:09:03] [PASSED] TV [09:09:03] [PASSED] eDP [09:09:03] [PASSED] Virtual [09:09:03] [PASSED] DSI [09:09:03] [PASSED] DPI [09:09:03] [PASSED] Writeback [09:09:03] [PASSED] SPI [09:09:03] [PASSED] USB [09:09:03] ==== [PASSED] drm_test_drm_connector_dynamic_init_name ===== [09:09:03] =========== [PASSED] drm_connector_dynamic_init ============ [09:09:03] ==== drm_connector_dynamic_register_early (4 subtests) ===== [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_early_defer [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object [09:09:03] ====== [PASSED] drm_connector_dynamic_register_early ======= [09:09:03] ======= drm_connector_dynamic_register (7 subtests) ======== [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_on_list [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_no_defer [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_no_init [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_mode_object [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_sysfs [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name [09:09:03] [PASSED] drm_test_drm_connector_dynamic_register_debugfs [09:09:03] ========= [PASSED] drm_connector_dynamic_register ========== [09:09:03] = drm_connector_attach_broadcast_rgb_property (2 subtests) = [09:09:03] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property [09:09:03] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector [09:09:03] === [PASSED] drm_connector_attach_broadcast_rgb_property === [09:09:03] ========== drm_get_tv_mode_from_name (2 subtests) ========== [09:09:03] ========== drm_test_get_tv_mode_from_name_valid =========== [09:09:03] [PASSED] NTSC [09:09:03] [PASSED] NTSC-443 [09:09:03] [PASSED] NTSC-J [09:09:03] [PASSED] PAL [09:09:03] [PASSED] PAL-M [09:09:03] [PASSED] PAL-N [09:09:03] [PASSED] SECAM [09:09:03] [PASSED] Mono [09:09:03] ====== [PASSED] drm_test_get_tv_mode_from_name_valid ======= [09:09:03] [PASSED] drm_test_get_tv_mode_from_name_truncated [09:09:03] ============ [PASSED] drm_get_tv_mode_from_name ============ [09:09:03] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) = [09:09:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb [09:09:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc [09:09:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1 [09:09:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc [09:09:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1 [09:09:03] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double [09:09:03] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid = [09:09:03] [PASSED] VIC 96 [09:09:03] [PASSED] VIC 97 [09:09:03] [PASSED] VIC 101 [09:09:03] [PASSED] VIC 102 [09:09:03] [PASSED] VIC 106 [09:09:03] [PASSED] VIC 107 [09:09:03] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid === [09:09:03] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc [09:09:03] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc [09:09:03] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc [09:09:03] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc [09:09:03] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc [09:09:03] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ==== [09:09:03] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) == [09:09:03] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ==== [09:09:03] [PASSED] Automatic [09:09:03] [PASSED] Full [09:09:03] [PASSED] Limited 16:235 [09:09:03] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name === [09:09:03] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid [09:09:03] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ==== [09:09:03] == drm_hdmi_connector_get_output_format_name (2 subtests) == [09:09:03] === drm_test_drm_hdmi_connector_get_output_format_name ==== [09:09:03] [PASSED] RGB [09:09:03] [PASSED] YUV 4:2:0 [09:09:03] [PASSED] YUV 4:2:2 [09:09:03] [PASSED] YUV 4:4:4 [09:09:03] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name === [09:09:03] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid [09:09:03] ==== [PASSED] drm_hdmi_connector_get_output_format_name ==== [09:09:03] ============= drm_damage_helper (21 subtests) ============== [09:09:03] [PASSED] drm_test_damage_iter_no_damage [09:09:03] [PASSED] drm_test_damage_iter_no_damage_fractional_src [09:09:03] [PASSED] drm_test_damage_iter_no_damage_src_moved [09:09:03] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved [09:09:03] [PASSED] drm_test_damage_iter_no_damage_not_visible [09:09:03] [PASSED] drm_test_damage_iter_no_damage_no_crtc [09:09:03] [PASSED] drm_test_damage_iter_no_damage_no_fb [09:09:03] [PASSED] drm_test_damage_iter_simple_damage [09:09:03] [PASSED] drm_test_damage_iter_single_damage [09:09:03] [PASSED] drm_test_damage_iter_single_damage_intersect_src [09:09:03] [PASSED] drm_test_damage_iter_single_damage_outside_src [09:09:03] [PASSED] drm_test_damage_iter_single_damage_fractional_src [09:09:03] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src [09:09:03] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src [09:09:03] [PASSED] drm_test_damage_iter_single_damage_src_moved [09:09:03] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved [09:09:03] [PASSED] drm_test_damage_iter_damage [09:09:03] [PASSED] drm_test_damage_iter_damage_one_intersect [09:09:03] [PASSED] drm_test_damage_iter_damage_one_outside [09:09:03] [PASSED] drm_test_damage_iter_damage_src_moved [09:09:03] [PASSED] drm_test_damage_iter_damage_not_visible [09:09:03] ================ [PASSED] drm_damage_helper ================ [09:09:03] ============== drm_dp_mst_helper (3 subtests) ============== [09:09:03] ============== drm_test_dp_mst_calc_pbn_mode ============== [09:09:03] [PASSED] Clock 154000 BPP 30 DSC disabled [09:09:03] [PASSED] Clock 234000 BPP 30 DSC disabled [09:09:03] [PASSED] Clock 297000 BPP 24 DSC disabled [09:09:03] [PASSED] Clock 332880 BPP 24 DSC enabled [09:09:03] [PASSED] Clock 324540 BPP 24 DSC enabled [09:09:03] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ========== [09:09:03] ============== drm_test_dp_mst_calc_pbn_div =============== [09:09:03] [PASSED] Link rate 2000000 lane count 4 [09:09:03] [PASSED] Link rate 2000000 lane count 2 [09:09:03] [PASSED] Link rate 2000000 lane count 1 [09:09:03] [PASSED] Link rate 1350000 lane count 4 [09:09:03] [PASSED] Link rate 1350000 lane count 2 [09:09:03] [PASSED] Link rate 1350000 lane count 1 [09:09:03] [PASSED] Link rate 1000000 lane count 4 [09:09:03] [PASSED] Link rate 1000000 lane count 2 [09:09:03] [PASSED] Link rate 1000000 lane count 1 [09:09:03] [PASSED] Link rate 810000 lane count 4 [09:09:03] [PASSED] Link rate 810000 lane count 2 [09:09:03] [PASSED] Link rate 810000 lane count 1 [09:09:03] [PASSED] Link rate 540000 lane count 4 [09:09:03] [PASSED] Link rate 540000 lane count 2 [09:09:03] [PASSED] Link rate 540000 lane count 1 [09:09:03] [PASSED] Link rate 270000 lane count 4 [09:09:03] [PASSED] Link rate 270000 lane count 2 [09:09:03] [PASSED] Link rate 270000 lane count 1 [09:09:03] [PASSED] Link rate 162000 lane count 4 [09:09:03] [PASSED] Link rate 162000 lane count 2 [09:09:03] [PASSED] Link rate 162000 lane count 1 [09:09:03] ========== [PASSED] drm_test_dp_mst_calc_pbn_div =========== [09:09:03] ========= drm_test_dp_mst_sideband_msg_req_decode ========= [09:09:03] [PASSED] DP_ENUM_PATH_RESOURCES with port number [09:09:03] [PASSED] DP_POWER_UP_PHY with port number [09:09:03] [PASSED] DP_POWER_DOWN_PHY with port number [09:09:03] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks [09:09:03] [PASSED] DP_ALLOCATE_PAYLOAD with port number [09:09:03] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI [09:09:03] [PASSED] DP_ALLOCATE_PAYLOAD with PBN [09:09:03] [PASSED] DP_QUERY_PAYLOAD with port number [09:09:03] [PASSED] DP_QUERY_PAYLOAD with VCPI [09:09:03] [PASSED] DP_REMOTE_DPCD_READ with port number [09:09:03] [PASSED] DP_REMOTE_DPCD_READ with DPCD address [09:09:03] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes [09:09:03] [PASSED] DP_REMOTE_DPCD_WRITE with port number [09:09:03] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address [09:09:03] [PASSED] DP_REMOTE_DPCD_WRITE with data array [09:09:03] [PASSED] DP_REMOTE_I2C_READ with port number [09:09:03] [PASSED] DP_REMOTE_I2C_READ with I2C device ID [09:09:03] [PASSED] DP_REMOTE_I2C_READ with transactions array [09:09:03] [PASSED] DP_REMOTE_I2C_WRITE with port number [09:09:03] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID [09:09:03] [PASSED] DP_REMOTE_I2C_WRITE with data array [09:09:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID [09:09:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID [09:09:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event [09:09:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event [09:09:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior [09:09:03] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior [09:09:03] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode ===== [09:09:03] ================ [PASSED] drm_dp_mst_helper ================ [09:09:03] ================== drm_exec (7 subtests) =================== [09:09:03] [PASSED] sanitycheck [09:09:03] [PASSED] test_lock [09:09:03] [PASSED] test_lock_unlock [09:09:03] [PASSED] test_duplicates [09:09:03] [PASSED] test_prepare [09:09:03] [PASSED] test_prepare_array [09:09:03] [PASSED] test_multiple_loops [09:09:03] ==================== [PASSED] drm_exec ===================== [09:09:03] =========== drm_format_helper_test (17 subtests) =========== [09:09:03] ============== drm_test_fb_xrgb8888_to_gray8 ============== [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ========== [09:09:03] ============= drm_test_fb_xrgb8888_to_rgb332 ============== [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ========== [09:09:03] ============= drm_test_fb_xrgb8888_to_rgb565 ============== [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ========== [09:09:03] ============ drm_test_fb_xrgb8888_to_xrgb1555 ============= [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 ========= [09:09:03] ============ drm_test_fb_xrgb8888_to_argb1555 ============= [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 ========= [09:09:03] ============ drm_test_fb_xrgb8888_to_rgba5551 ============= [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 ========= [09:09:03] ============= drm_test_fb_xrgb8888_to_rgb888 ============== [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ========== [09:09:03] ============= drm_test_fb_xrgb8888_to_bgr888 ============== [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ========== [09:09:03] ============ drm_test_fb_xrgb8888_to_argb8888 ============= [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 ========= [09:09:03] =========== drm_test_fb_xrgb8888_to_xrgb2101010 =========== [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 ======= [09:09:03] =========== drm_test_fb_xrgb8888_to_argb2101010 =========== [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 ======= [09:09:03] ============== drm_test_fb_xrgb8888_to_mono =============== [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ========== [PASSED] drm_test_fb_xrgb8888_to_mono =========== [09:09:03] ==================== drm_test_fb_swab ===================== [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ================ [PASSED] drm_test_fb_swab ================= [09:09:03] ============ drm_test_fb_xrgb8888_to_xbgr8888 ============= [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 ========= [09:09:03] ============ drm_test_fb_xrgb8888_to_abgr8888 ============= [09:09:03] [PASSED] single_pixel_source_buffer [09:09:03] [PASSED] single_pixel_clip_rectangle [09:09:03] [PASSED] well_known_colors [09:09:03] [PASSED] destination_pitch [09:09:03] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 ========= [09:09:03] ================= drm_test_fb_clip_offset ================= [09:09:03] [PASSED] pass through [09:09:03] [PASSED] horizontal offset [09:09:03] [PASSED] vertical offset [09:09:03] [PASSED] horizontal and vertical offset [09:09:03] [PASSED] horizontal offset (custom pitch) [09:09:03] [PASSED] vertical offset (custom pitch) [09:09:03] [PASSED] horizontal and vertical offset (custom pitch) [09:09:03] ============= [PASSED] drm_test_fb_clip_offset ============= [09:09:03] =================== drm_test_fb_memcpy ==================== [09:09:03] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258) [09:09:03] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258) [09:09:03] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559) [09:09:03] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258) [09:09:03] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258) [09:09:03] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559) [09:09:03] [PASSED] well_known_colors: XB24 little-endian (0x34324258) [09:09:03] [PASSED] well_known_colors: XRA8 little-endian (0x38415258) [09:09:03] [PASSED] well_known_colors: YU24 little-endian (0x34325559) [09:09:03] [PASSED] destination_pitch: XB24 little-endian (0x34324258) [09:09:03] [PASSED] destination_pitch: XRA8 little-endian (0x38415258) [09:09:03] [PASSED] destination_pitch: YU24 little-endian (0x34325559) [09:09:03] =============== [PASSED] drm_test_fb_memcpy ================ [09:09:03] ============= [PASSED] drm_format_helper_test ============== [09:09:03] ================= drm_format (18 subtests) ================= [09:09:03] [PASSED] drm_test_format_block_width_invalid [09:09:03] [PASSED] drm_test_format_block_width_one_plane [09:09:03] [PASSED] drm_test_format_block_width_two_plane [09:09:03] [PASSED] drm_test_format_block_width_three_plane [09:09:03] [PASSED] drm_test_format_block_width_tiled [09:09:03] [PASSED] drm_test_format_block_height_invalid [09:09:03] [PASSED] drm_test_format_block_height_one_plane [09:09:03] [PASSED] drm_test_format_block_height_two_plane [09:09:03] [PASSED] drm_test_format_block_height_three_plane [09:09:03] [PASSED] drm_test_format_block_height_tiled [09:09:03] [PASSED] drm_test_format_min_pitch_invalid [09:09:03] [PASSED] drm_test_format_min_pitch_one_plane_8bpp [09:09:03] [PASSED] drm_test_format_min_pitch_one_plane_16bpp [09:09:03] [PASSED] drm_test_format_min_pitch_one_plane_24bpp [09:09:03] [PASSED] drm_test_format_min_pitch_one_plane_32bpp [09:09:03] [PASSED] drm_test_format_min_pitch_two_plane [09:09:03] [PASSED] drm_test_format_min_pitch_three_plane_8bpp [09:09:03] [PASSED] drm_test_format_min_pitch_tiled [09:09:03] =================== [PASSED] drm_format ==================== [09:09:03] ============== drm_framebuffer (10 subtests) =============== [09:09:03] ========== drm_test_framebuffer_check_src_coords ========== [09:09:03] [PASSED] Success: source fits into fb [09:09:03] [PASSED] Fail: overflowing fb with x-axis coordinate [09:09:03] [PASSED] Fail: overflowing fb with y-axis coordinate [09:09:03] [PASSED] Fail: overflowing fb with source width [09:09:03] [PASSED] Fail: overflowing fb with source height [09:09:03] ====== [PASSED] drm_test_framebuffer_check_src_coords ====== [09:09:03] [PASSED] drm_test_framebuffer_cleanup [09:09:03] =============== drm_test_framebuffer_create =============== [09:09:03] [PASSED] ABGR8888 normal sizes [09:09:03] [PASSED] ABGR8888 max sizes [09:09:03] [PASSED] ABGR8888 pitch greater than min required [09:09:03] [PASSED] ABGR8888 pitch less than min required [09:09:03] [PASSED] ABGR8888 Invalid width [09:09:03] [PASSED] ABGR8888 Invalid buffer handle [09:09:03] [PASSED] No pixel format [09:09:03] [PASSED] ABGR8888 Width 0 [09:09:03] [PASSED] ABGR8888 Height 0 [09:09:03] [PASSED] ABGR8888 Out of bound height * pitch combination [09:09:03] [PASSED] ABGR8888 Large buffer offset [09:09:03] [PASSED] ABGR8888 Buffer offset for inexistent plane [09:09:03] [PASSED] ABGR8888 Invalid flag [09:09:03] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers [09:09:03] [PASSED] ABGR8888 Valid buffer modifier [09:09:03] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE) [09:09:03] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS [09:09:03] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS [09:09:03] [PASSED] NV12 Normal sizes [09:09:03] [PASSED] NV12 Max sizes [09:09:03] [PASSED] NV12 Invalid pitch [09:09:03] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag [09:09:03] [PASSED] NV12 different modifier per-plane [09:09:03] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE [09:09:03] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS [09:09:03] [PASSED] NV12 Modifier for inexistent plane [09:09:03] [PASSED] NV12 Handle for inexistent plane [09:09:03] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS [09:09:03] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier [09:09:03] [PASSED] YVU420 Normal sizes [09:09:03] [PASSED] YVU420 Max sizes [09:09:03] [PASSED] YVU420 Invalid pitch [09:09:03] [PASSED] YVU420 Different pitches [09:09:03] [PASSED] YVU420 Different buffer offsets/pitches [09:09:03] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS [09:09:03] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS [09:09:03] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS [09:09:03] [PASSED] YVU420 Valid modifier [09:09:03] [PASSED] YVU420 Different modifiers per plane [09:09:03] [PASSED] YVU420 Modifier for inexistent plane [09:09:03] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR) [09:09:03] [PASSED] X0L2 Normal sizes [09:09:03] [PASSED] X0L2 Max sizes [09:09:03] [PASSED] X0L2 Invalid pitch [09:09:03] [PASSED] X0L2 Pitch greater than minimum required [09:09:03] [PASSED] X0L2 Handle for inexistent plane [09:09:03] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set [09:09:03] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set [09:09:03] [PASSED] X0L2 Valid modifier [09:09:03] [PASSED] X0L2 Modifier for inexistent plane [09:09:03] =========== [PASSED] drm_test_framebuffer_create =========== [09:09:03] [PASSED] drm_test_framebuffer_free [09:09:03] [PASSED] drm_test_framebuffer_init [09:09:03] [PASSED] drm_test_framebuffer_init_bad_format [09:09:03] [PASSED] drm_test_framebuffer_init_dev_mismatch [09:09:03] [PASSED] drm_test_framebuffer_lookup [09:09:03] [PASSED] drm_test_framebuffer_lookup_inexistent [09:09:03] [PASSED] drm_test_framebuffer_modifiers_not_supported [09:09:03] ================= [PASSED] drm_framebuffer ================= [09:09:03] ================ drm_gem_shmem (8 subtests) ================ [09:09:03] [PASSED] drm_gem_shmem_test_obj_create [09:09:03] [PASSED] drm_gem_shmem_test_obj_create_private [09:09:03] [PASSED] drm_gem_shmem_test_pin_pages [09:09:03] [PASSED] drm_gem_shmem_test_vmap [09:09:03] [PASSED] drm_gem_shmem_test_get_sg_table [09:09:03] [PASSED] drm_gem_shmem_test_get_pages_sgt [09:09:03] [PASSED] drm_gem_shmem_test_madvise [09:09:03] [PASSED] drm_gem_shmem_test_purge [09:09:03] ================== [PASSED] drm_gem_shmem ================== [09:09:03] === drm_atomic_helper_connector_hdmi_check (29 subtests) === [09:09:03] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode [09:09:03] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1 [09:09:03] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode [09:09:03] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1 [09:09:03] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode [09:09:03] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1 [09:09:03] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 ======= [09:09:03] [PASSED] Automatic [09:09:03] [PASSED] Full [09:09:03] [PASSED] Limited 16:235 [09:09:03] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 === [09:09:03] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed [09:09:03] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed [09:09:03] [PASSED] drm_test_check_disable_connector [09:09:03] [PASSED] drm_test_check_hdmi_funcs_reject_rate [09:09:03] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb [09:09:03] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420 [09:09:03] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422 [09:09:03] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420 [09:09:03] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420 [09:09:03] [PASSED] drm_test_check_output_bpc_crtc_mode_changed [09:09:03] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed [09:09:03] [PASSED] drm_test_check_output_bpc_dvi [09:09:03] [PASSED] drm_test_check_output_bpc_format_vic_1 [09:09:03] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only [09:09:03] [PASSED] drm_test_check_output_bpc_format_display_rgb_only [09:09:03] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only [09:09:03] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only [09:09:03] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc [09:09:03] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc [09:09:03] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc [09:09:03] ============ drm_test_check_hdmi_color_format ============= [09:09:03] [PASSED] AUTO -> RGB [09:09:03] [PASSED] YCBCR422 -> YUV422 [09:09:03] [PASSED] YCBCR420 -> YUV420 [09:09:03] [PASSED] YCBCR444 -> YUV444 [09:09:03] [PASSED] RGB -> RGB [09:09:03] ======== [PASSED] drm_test_check_hdmi_color_format ========= [09:09:03] ======== drm_test_check_hdmi_color_format_420_only ======== [09:09:03] [PASSED] RGB should fail [09:09:03] [PASSED] YUV444 should fail [09:09:03] [PASSED] YUV422 should fail [09:09:03] [PASSED] YUV420 should work [09:09:03] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ==== [09:09:03] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ====== [09:09:03] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ==== [09:09:03] [PASSED] drm_test_check_broadcast_rgb_value [09:09:03] [PASSED] drm_test_check_bpc_8_value [09:09:03] [PASSED] drm_test_check_bpc_10_value [09:09:03] [PASSED] drm_test_check_bpc_12_value [09:09:03] [PASSED] drm_test_check_format_value [09:09:03] [PASSED] drm_test_check_tmds_char_value [09:09:03] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ====== [09:09:03] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) = [09:09:03] [PASSED] drm_test_check_mode_valid [09:09:03] [PASSED] drm_test_check_mode_valid_reject [09:09:03] [PASSED] drm_test_check_mode_valid_reject_rate [09:09:03] [PASSED] drm_test_check_mode_valid_reject_max_clock [09:09:03] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock [09:09:03] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector [09:09:03] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb [09:09:03] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid === [09:09:03] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) = [09:09:03] [PASSED] drm_test_check_infoframes [09:09:03] [PASSED] drm_test_check_reject_avi_infoframe [09:09:03] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8 [09:09:03] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10 [09:09:03] [PASSED] drm_test_check_reject_audio_infoframe [09:09:03] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes === [09:09:03] ================= drm_managed (2 subtests) ================= [09:09:03] [PASSED] drm_test_managed_release_action [09:09:03] [PASSED] drm_test_managed_run_action [09:09:03] =================== [PASSED] drm_managed =================== [09:09:03] =================== drm_mm (6 subtests) ==================== [09:09:03] [PASSED] drm_test_mm_init [09:09:03] [PASSED] drm_test_mm_debug [09:09:03] [PASSED] drm_test_mm_align32 [09:09:03] [PASSED] drm_test_mm_align64 [09:09:03] [PASSED] drm_test_mm_lowest [09:09:03] [PASSED] drm_test_mm_highest [09:09:03] ===================== [PASSED] drm_mm ====================== [09:09:03] ============= drm_modes_analog_tv (5 subtests) ============= [09:09:03] [PASSED] drm_test_modes_analog_tv_mono_576i [09:09:03] [PASSED] drm_test_modes_analog_tv_ntsc_480i [09:09:03] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined [09:09:03] [PASSED] drm_test_modes_analog_tv_pal_576i [09:09:03] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined [09:09:03] =============== [PASSED] drm_modes_analog_tv =============== [09:09:03] ============== drm_plane_helper (2 subtests) =============== [09:09:03] =============== drm_test_check_plane_state ================ [09:09:03] [PASSED] clipping_simple [09:09:03] [PASSED] clipping_rotate_reflect [09:09:03] [PASSED] positioning_simple [09:09:03] [PASSED] upscaling [09:09:03] [PASSED] downscaling [09:09:03] [PASSED] rounding1 [09:09:03] [PASSED] rounding2 [09:09:03] [PASSED] rounding3 [09:09:03] [PASSED] rounding4 [09:09:03] =========== [PASSED] drm_test_check_plane_state ============ [09:09:03] =========== drm_test_check_invalid_plane_state ============ [09:09:03] [PASSED] positioning_invalid [09:09:03] [PASSED] upscaling_invalid [09:09:03] [PASSED] downscaling_invalid [09:09:03] ======= [PASSED] drm_test_check_invalid_plane_state ======== [09:09:03] ================ [PASSED] drm_plane_helper ================= [09:09:03] ====== drm_connector_helper_tv_get_modes (1 subtest) ======= [09:09:03] ====== drm_test_connector_helper_tv_get_modes_check ======= [09:09:03] [PASSED] None [09:09:03] [PASSED] PAL [09:09:03] [PASSED] NTSC [09:09:03] [PASSED] Both, NTSC Default [09:09:03] [PASSED] Both, PAL Default [09:09:03] [PASSED] Both, NTSC Default, with PAL on command-line [09:09:03] [PASSED] Both, PAL Default, with NTSC on command-line [09:09:03] == [PASSED] drm_test_connector_helper_tv_get_modes_check === [09:09:03] ======== [PASSED] drm_connector_helper_tv_get_modes ======== [09:09:03] ================== drm_rect (9 subtests) =================== [09:09:03] [PASSED] drm_test_rect_clip_scaled_div_by_zero [09:09:03] [PASSED] drm_test_rect_clip_scaled_not_clipped [09:09:03] [PASSED] drm_test_rect_clip_scaled_clipped [09:09:03] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned [09:09:03] ================= drm_test_rect_intersect ================= [09:09:03] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0 [09:09:03] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1 [09:09:03] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0 [09:09:03] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1 [09:09:03] [PASSED] right x left: 2x1+0+0 x 3x1+1+0 [09:09:03] [PASSED] left x right: 3x1+1+0 x 2x1+0+0 [09:09:03] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1 [09:09:03] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0 [09:09:03] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1 [09:09:03] [PASSED] touching side: 1x1+0+0 x 1x1+1+0 [09:09:03] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0 [09:09:03] [PASSED] inside another: 2x2+0+0 x 1x1+1+1 [09:09:03] [PASSED] far away: 1x1+0+0 x 1x1+3+6 [09:09:03] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10 [09:09:03] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10 [09:09:03] ============= [PASSED] drm_test_rect_intersect ============= [09:09:03] ================ drm_test_rect_calc_hscale ================ [09:09:03] [PASSED] normal use [09:09:03] [PASSED] out of max range [09:09:03] [PASSED] out of min range [09:09:03] [PASSED] zero dst [09:09:03] [PASSED] negative src [09:09:03] [PASSED] negative dst [09:09:03] ============ [PASSED] drm_test_rect_calc_hscale ============ [09:09:03] ================ drm_test_rect_calc_vscale ================ [09:09:03] [PASSED] normal use [09:09:03] [PASSED] out of max range [09:09:03] [PASSED] out of min range [09:09:03] [PASSED] zero dst [09:09:03] [PASSED] negative src [09:09:03] [PASSED] negative dst [09:09:03] ============ [PASSED] drm_test_rect_calc_vscale ============ [09:09:03] ================== drm_test_rect_rotate =================== [09:09:03] [PASSED] reflect-x [09:09:03] [PASSED] reflect-y [09:09:03] [PASSED] rotate-0 [09:09:03] [PASSED] rotate-90 [09:09:03] [PASSED] rotate-180 [09:09:03] [PASSED] rotate-270 [09:09:03] ============== [PASSED] drm_test_rect_rotate =============== [09:09:03] ================ drm_test_rect_rotate_inv ================= [09:09:03] [PASSED] reflect-x [09:09:03] [PASSED] reflect-y [09:09:03] [PASSED] rotate-0 [09:09:03] [PASSED] rotate-90 [09:09:03] [PASSED] rotate-180 [09:09:03] [PASSED] rotate-270 [09:09:03] ============ [PASSED] drm_test_rect_rotate_inv ============= [09:09:03] ==================== [PASSED] drm_rect ===================== [09:09:03] ============ drm_sysfb_modeset_test (1 subtest) ============ [09:09:03] ============ drm_test_sysfb_build_fourcc_list ============= [09:09:03] [PASSED] no native formats [09:09:03] [PASSED] XRGB8888 as native format [09:09:03] [PASSED] remove duplicates [09:09:03] [PASSED] convert alpha formats [09:09:03] [PASSED] random formats [09:09:03] ======== [PASSED] drm_test_sysfb_build_fourcc_list ========= [09:09:03] ============= [PASSED] drm_sysfb_modeset_test ============== [09:09:03] ================== drm_fixp (2 subtests) =================== [09:09:03] [PASSED] drm_test_int2fixp [09:09:03] [PASSED] drm_test_sm2fixp [09:09:03] ==================== [PASSED] drm_fixp ===================== [09:09:03] ============================================================ [09:09:03] Testing complete. Ran 641 tests: passed: 641 [09:09:03] Elapsed time: 26.768s total, 1.783s configuring, 24.768s building, 0.196s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig [09:09:03] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [09:09: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 [09:09:15] Starting KUnit Kernel (1/1)... [09:09:15] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [09:09:15] ============= refcount_interrupt (4 subtests) ============== [09:09:15] [PASSED] test_single_irq_change [09:09:15] [PASSED] test_nested_irq_change [09:09:15] [PASSED] test_multiple_irq_change [09:09:15] [PASSED] test_irq_save [09:09:15] =============== [PASSED] refcount_interrupt ================ [09:09:15] ================= ttm_device (5 subtests) ================== [09:09:15] [PASSED] ttm_device_init_basic [09:09:15] [PASSED] ttm_device_init_multiple [09:09:15] [PASSED] ttm_device_fini_basic [09:09:15] [PASSED] ttm_device_init_no_vma_man [09:09:15] ================== ttm_device_init_pools ================== [09:09:15] [PASSED] No DMA allocations, no DMA32 required [09:09:15] [PASSED] DMA allocations, DMA32 required [09:09:15] [PASSED] No DMA allocations, DMA32 required [09:09:15] [PASSED] DMA allocations, no DMA32 required [09:09:15] ============== [PASSED] ttm_device_init_pools ============== [09:09:15] =================== [PASSED] ttm_device ==================== [09:09:15] ================== ttm_pool (8 subtests) =================== [09:09:15] ================== ttm_pool_alloc_basic =================== [09:09:15] [PASSED] One page [09:09:15] [PASSED] More than one page [09:09:15] [PASSED] Above the allocation limit [09:09:15] [PASSED] One page, with coherent DMA mappings enabled [09:09:15] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [09:09:15] ============== [PASSED] ttm_pool_alloc_basic =============== [09:09:15] ============== ttm_pool_alloc_basic_dma_addr ============== [09:09:15] [PASSED] One page [09:09:15] [PASSED] More than one page [09:09:15] [PASSED] Above the allocation limit [09:09:15] [PASSED] One page, with coherent DMA mappings enabled [09:09:15] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [09:09:15] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ========== [09:09:15] [PASSED] ttm_pool_alloc_order_caching_match [09:09:15] [PASSED] ttm_pool_alloc_caching_mismatch [09:09:15] [PASSED] ttm_pool_alloc_order_mismatch [09:09:15] [PASSED] ttm_pool_free_dma_alloc [09:09:15] [PASSED] ttm_pool_free_no_dma_alloc [09:09:15] [PASSED] ttm_pool_fini_basic [09:09:15] ==================== [PASSED] ttm_pool ===================== [09:09:15] ================ ttm_resource (8 subtests) ================= [09:09:15] ================= ttm_resource_init_basic ================= [09:09:15] [PASSED] Init resource in TTM_PL_SYSTEM [09:09:15] [PASSED] Init resource in TTM_PL_VRAM [09:09:15] [PASSED] Init resource in a private placement [09:09:15] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags [09:09:15] ============= [PASSED] ttm_resource_init_basic ============= [09:09:15] [PASSED] ttm_resource_init_pinned [09:09:15] [PASSED] ttm_resource_fini_basic [09:09:15] [PASSED] ttm_resource_manager_init_basic [09:09:15] [PASSED] ttm_resource_manager_usage_basic [09:09:15] [PASSED] ttm_resource_manager_set_used_basic [09:09:15] [PASSED] ttm_sys_man_alloc_basic [09:09:15] [PASSED] ttm_sys_man_free_basic [09:09:15] ================== [PASSED] ttm_resource =================== [09:09:15] =================== ttm_tt (15 subtests) =================== [09:09:15] ==================== ttm_tt_init_basic ==================== [09:09:15] [PASSED] Page-aligned size [09:09:15] [PASSED] Extra pages requested [09:09:15] ================ [PASSED] ttm_tt_init_basic ================ [09:09:15] [PASSED] ttm_tt_init_misaligned [09:09:15] [PASSED] ttm_tt_fini_basic [09:09:15] [PASSED] ttm_tt_fini_sg [09:09:15] [PASSED] ttm_tt_fini_shmem [09:09:15] [PASSED] ttm_tt_create_basic [09:09:15] [PASSED] ttm_tt_create_invalid_bo_type [09:09:15] [PASSED] ttm_tt_create_ttm_exists [09:09:15] [PASSED] ttm_tt_create_failed [09:09:15] [PASSED] ttm_tt_destroy_basic [09:09:15] [PASSED] ttm_tt_populate_null_ttm [09:09:15] [PASSED] ttm_tt_populate_populated_ttm [09:09:15] [PASSED] ttm_tt_unpopulate_basic [09:09:15] [PASSED] ttm_tt_unpopulate_empty_ttm [09:09:15] [PASSED] ttm_tt_swapin_basic [09:09:15] ===================== [PASSED] ttm_tt ====================== [09:09:15] =================== ttm_bo (14 subtests) =================== [09:09:15] =========== ttm_bo_reserve_optimistic_no_ticket =========== [09:09:15] [PASSED] Cannot be interrupted and sleeps [09:09:15] [PASSED] Cannot be interrupted, locks straight away [09:09:15] [PASSED] Can be interrupted, sleeps [09:09:15] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket ======= [09:09:15] [PASSED] ttm_bo_reserve_locked_no_sleep [09:09:15] [PASSED] ttm_bo_reserve_no_wait_ticket [09:09:15] [PASSED] ttm_bo_reserve_double_resv [09:09:15] [PASSED] ttm_bo_reserve_interrupted [09:09:15] [PASSED] ttm_bo_reserve_deadlock [09:09:15] [PASSED] ttm_bo_unreserve_basic [09:09:15] [PASSED] ttm_bo_unreserve_pinned [09:09:15] [PASSED] ttm_bo_unreserve_bulk [09:09:15] [PASSED] ttm_bo_fini_basic [09:09:15] [PASSED] ttm_bo_fini_shared_resv [09:09:15] [PASSED] ttm_bo_pin_basic [09:09:15] [PASSED] ttm_bo_pin_unpin_resource [09:09:15] [PASSED] ttm_bo_multiple_pin_one_unpin [09:09:15] ===================== [PASSED] ttm_bo ====================== [09:09:15] ============== ttm_bo_validate (22 subtests) =============== [09:09:15] ============== ttm_bo_init_reserved_sys_man =============== [09:09:15] [PASSED] Buffer object for userspace [09:09:15] [PASSED] Kernel buffer object [09:09:15] [PASSED] Shared buffer object [09:09:15] ========== [PASSED] ttm_bo_init_reserved_sys_man =========== [09:09:15] ============== ttm_bo_init_reserved_mock_man ============== [09:09:15] [PASSED] Buffer object for userspace [09:09:15] [PASSED] Kernel buffer object [09:09:15] [PASSED] Shared buffer object [09:09:15] ========== [PASSED] ttm_bo_init_reserved_mock_man ========== [09:09:15] [PASSED] ttm_bo_init_reserved_resv [09:09:15] ================== ttm_bo_validate_basic ================== [09:09:15] [PASSED] Buffer object for userspace [09:09:15] [PASSED] Kernel buffer object [09:09:15] [PASSED] Shared buffer object [09:09:15] ============== [PASSED] ttm_bo_validate_basic ============== [09:09:15] [PASSED] ttm_bo_validate_invalid_placement [09:09:15] ============= ttm_bo_validate_same_placement ============== [09:09:15] [PASSED] System manager [09:09:15] [PASSED] VRAM manager [09:09:15] ========= [PASSED] ttm_bo_validate_same_placement ========== [09:09:15] [PASSED] ttm_bo_validate_failed_alloc [09:09:15] [PASSED] ttm_bo_validate_pinned [09:09:15] [PASSED] ttm_bo_validate_busy_placement [09:09:15] ================ ttm_bo_validate_multihop ================= [09:09:15] [PASSED] Buffer object for userspace [09:09:15] [PASSED] Kernel buffer object [09:09:15] [PASSED] Shared buffer object [09:09:15] ============ [PASSED] ttm_bo_validate_multihop ============= [09:09:15] ========== ttm_bo_validate_no_placement_signaled ========== [09:09:15] [PASSED] Buffer object in system domain, no page vector [09:09:15] [PASSED] Buffer object in system domain with an existing page vector [09:09:15] ====== [PASSED] ttm_bo_validate_no_placement_signaled ====== [09:09:15] ======== ttm_bo_validate_no_placement_not_signaled ======== [09:09:15] [PASSED] Buffer object for userspace [09:09:15] [PASSED] Kernel buffer object [09:09:15] [PASSED] Shared buffer object [09:09:15] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ==== [09:09:15] [PASSED] ttm_bo_validate_move_fence_signaled [09:09:15] ========= ttm_bo_validate_move_fence_not_signaled ========= [09:09:15] [PASSED] Waits for GPU [09:09:15] [PASSED] Tries to lock straight away [09:09:15] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled ===== [09:09:15] [PASSED] ttm_bo_validate_swapout [09:09:15] [PASSED] ttm_bo_validate_happy_evict [09:09:15] [PASSED] ttm_bo_validate_all_pinned_evict [09:09:15] [PASSED] ttm_bo_validate_allowed_only_evict [09:09:15] [PASSED] ttm_bo_validate_deleted_evict [09:09:15] [PASSED] ttm_bo_validate_busy_domain_evict [09:09:15] [PASSED] ttm_bo_validate_evict_gutting [09:09:15] [PASSED] ttm_bo_validate_recrusive_evict [09:09:15] ================= [PASSED] ttm_bo_validate ================= [09:09:15] ============================================================ [09:09:15] Testing complete. Ran 106 tests: passed: 106 [09:09:15] Elapsed time: 11.954s total, 1.785s configuring, 9.904s building, 0.227s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig [09:09:15] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [09:09:17] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48 [09:09:26] Starting KUnit Kernel (1/1)... [09:09:26] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [09:09:26] ============= refcount_interrupt (4 subtests) ============== [09:09:26] [PASSED] test_single_irq_change [09:09:26] [PASSED] test_nested_irq_change [09:09:26] [PASSED] test_multiple_irq_change [09:09:26] [PASSED] test_irq_save [09:09:26] =============== [PASSED] refcount_interrupt ================ [09:09:26] =============== dma-buf-fence (12 subtests) ================ [09:09:26] [PASSED] test_sanitycheck [09:09:26] [PASSED] test_signaling [09:09:26] [PASSED] test_add_callback [09:09:26] [PASSED] test_late_add_callback [09:09:26] [PASSED] test_rm_callback [09:09:26] [PASSED] test_late_rm_callback [09:09:26] [PASSED] test_status [09:09:26] [PASSED] test_error [09:09:26] [PASSED] test_wait [09:09:26] [PASSED] test_wait_timeout [09:09:26] [PASSED] test_stub [09:09:26] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs) [09:09:26] ================== [PASSED] dma-buf-fence ================== [09:09:26] ============ dma-buf-fence-chain (11 subtests) ============= [09:09:26] [PASSED] test_sanitycheck [09:09:26] [PASSED] test_find_seqno [09:09:26] [PASSED] test_find_signaled [09:09:26] [PASSED] test_find_out_of_order [09:09:31] [PASSED] test_find_gap [09:09:31] [PASSED] test_find_race [09:09:31] [PASSED] test_signal_forward [09:09:31] [PASSED] test_signal_backward [09:09:31] [PASSED] test_wait_forward [09:09:31] [PASSED] test_wait_backward [09:09:31] [PASSED] test_wait_random [09:09:31] =============== [PASSED] dma-buf-fence-chain =============== [09:09:31] ============ dma-buf-fence-unwrap (10 subtests) ============ [09:09:31] [PASSED] test_sanitycheck [09:09:31] [PASSED] test_unwrap_array [09:09:31] [PASSED] test_unwrap_chain [09:09:31] [PASSED] test_unwrap_chain_array [09:09:31] [PASSED] test_unwrap_merge [09:09:31] [PASSED] test_unwrap_merge_duplicate [09:09:31] [PASSED] test_unwrap_merge_seqno [09:09:31] [PASSED] test_unwrap_merge_order [09:09:31] [PASSED] test_unwrap_merge_complex [09:09:31] [PASSED] test_unwrap_merge_complex_seqno [09:09:31] ============== [PASSED] dma-buf-fence-unwrap =============== [09:09:31] ================ dma-buf-resv (5 subtests) ================= [09:09:31] [PASSED] test_sanitycheck [09:09:31] ===================== test_signaling ====================== [09:09:31] [PASSED] kernel [09:09:31] [PASSED] write [09:09:31] [PASSED] read [09:09:31] [PASSED] bookkeep [09:09:31] ================= [PASSED] test_signaling ================== [09:09:31] ====================== test_for_each ====================== [09:09:31] [PASSED] kernel [09:09:31] [PASSED] write [09:09:31] [PASSED] read [09:09:31] [PASSED] bookkeep [09:09:31] ================== [PASSED] test_for_each ================== [09:09:31] ================= test_for_each_unlocked ================== [09:09:31] [PASSED] kernel [09:09:31] [PASSED] write [09:09:31] [PASSED] read [09:09:31] [PASSED] bookkeep [09:09:31] ============= [PASSED] test_for_each_unlocked ============== [09:09:31] ===================== test_get_fences ===================== [09:09:31] [PASSED] kernel [09:09:31] [PASSED] write [09:09:31] [PASSED] read [09:09:31] [PASSED] bookkeep [09:09:31] ================= [PASSED] test_get_fences ================= [09:09:31] ================== [PASSED] dma-buf-resv =================== [09:09:31] ============================================================ [09:09:31] Testing complete. Ran 54 tests: passed: 53, skipped: 1 [09:09:31] Elapsed time: 15.844s total, 1.802s configuring, 8.720s building, 5.272s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
Patchwork
CI✓ Xe.CI.BAT: success for drm/gpusvm: share one HMM fault across per-device DMA mappings (rev2)
In reply to Honglei Huang== Series Details ==
== Series Details ==
Series: drm/gpusvm: share one HMM fault across per-device DMA mappings (rev2)
URL : https://patchwork.freedesktop.org/series/172838/
State : success
== Summary ==
CI Bug Log - changes from xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f_BAT -> xe-pw-172838v2_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f -> xe-pw-172838v2
IGT_9078: 9078
xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f: 43b9a5e9d30783bb6f4d7dacdd1739184666940f
xe-pw-172838v2: 172838v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/index.html
Patchwork
CI✓ Xe.CI.FULL: success for drm/gpusvm: share one HMM fault across per-device DMA mappings (rev2)
In reply to Honglei Huang== Series Details ==
== Series Details ==
Series: drm/gpusvm: share one HMM fault across per-device DMA mappings (rev2)
URL : https://patchwork.freedesktop.org/series/172838/
State : success
== Summary ==
CI Bug Log - changes from xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f_FULL -> xe-pw-172838v2_FULL
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-172838v2_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@intel_hwmon@hwmon-write:
- shard-lnl: NOTRUN -> [SKIP][1] ([Intel XE#1125] / [Intel XE#7312])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_big_fb@4-tiled-8bpp-rotate-270:
- shard-lnl: NOTRUN -> [SKIP][2] ([Intel XE#1407]) +5 other tests skip
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip:
- shard-lnl: NOTRUN -> [SKIP][3] ([Intel XE#7059] / [Intel XE#7085])
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@kms_big_fb@y-tiled-32bpp-rotate-0:
- shard-bmg: NOTRUN -> [SKIP][4] ([Intel XE#1124]) +2 other tests skip
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_big_fb@y-tiled-addfb:
- shard-lnl: NOTRUN -> [SKIP][5] ([Intel XE#1467] / [Intel XE#7367])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip:
- shard-lnl: NOTRUN -> [SKIP][6] ([Intel XE#1124]) +8 other tests skip
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_bw@connected-linear-tiling-4-displays-target-2560x1440p:
- shard-lnl: NOTRUN -> [SKIP][7] ([Intel XE#8365]) +1 other test skip
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@kms_bw@connected-linear-tiling-4-displays-target-3840x2160p:
- shard-bmg: NOTRUN -> [SKIP][8] ([Intel XE#7679])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_bw@linear-tiling-2-displays-target-1920x1080p:
- shard-lnl: NOTRUN -> [SKIP][9] ([Intel XE#367]) +1 other test skip
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs@pipe-b-edp-1:
- shard-lnl: NOTRUN -> [SKIP][10] ([Intel XE#2669] / [Intel XE#7389]) +3 other tests skip
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@kms_ccs@[email protected]
* igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs:
- shard-lnl: NOTRUN -> [SKIP][11] ([Intel XE#2887]) +11 other tests skip
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-a-edp-1:
- shard-lnl: NOTRUN -> [SKIP][12] ([Intel XE#2669] / [Intel XE#3433] / [Intel XE#7389]) +3 other tests skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@kms_ccs@[email protected]
* igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc:
- shard-lnl: NOTRUN -> [SKIP][13] ([Intel XE#3432]) +2 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#2887]) +4 other tests skip
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_cdclk@plane-scaling:
- shard-lnl: NOTRUN -> [SKIP][15] ([Intel XE#4416] / [Intel XE#7381]) +3 other tests skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_chamelium_audio@hdmi-audio-after-suspend:
- shard-lnl: NOTRUN -> [SKIP][16] ([Intel XE#2252])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@kms_chamelium_color@ctm-blue-to-red:
- shard-lnl: NOTRUN -> [SKIP][17] ([Intel XE#306] / [Intel XE#7358])
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_chamelium_color@ctm-red-to-blue:
- shard-bmg: NOTRUN -> [SKIP][18] ([Intel XE#2325] / [Intel XE#7358])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_chamelium_edid@hdmi-edid-change-during-suspend:
- shard-lnl: NOTRUN -> [SKIP][19] ([Intel XE#373]) +8 other tests skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_chamelium_hpd@dp-hpd-storm-disable:
- shard-bmg: NOTRUN -> [SKIP][20] ([Intel XE#2252])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_content_protection@content-type-change:
- shard-lnl: NOTRUN -> [SKIP][21] ([Intel XE#7642])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_content_protection@dp-mst-type-0:
- shard-lnl: NOTRUN -> [SKIP][22] ([Intel XE#307] / [Intel XE#6974])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_content_protection@dp-mst-type-1-suspend-resume:
- shard-bmg: NOTRUN -> [SKIP][23] ([Intel XE#6974])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_content_protection@mei-interface:
- shard-lnl: NOTRUN -> [SKIP][24] ([Intel XE#1468] / [Intel XE#7396])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_cursor_crc@cursor-onscreen-128x42:
- shard-lnl: NOTRUN -> [SKIP][25] ([Intel XE#1424]) +5 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_cursor_crc@cursor-onscreen-512x170:
- shard-lnl: NOTRUN -> [SKIP][26] ([Intel XE#2321] / [Intel XE#7355])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_cursor_legacy@cursorb-vs-flipa-legacy:
- shard-lnl: NOTRUN -> [SKIP][27] ([Intel XE#309] / [Intel XE#7343]) +6 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_cursor_legacy@flip-vs-cursor-legacy:
- shard-bmg: [PASS][28] -> [FAIL][29] ([Intel XE#7809])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-10/igt@[email protected]
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_display_modes@extended-mode-basic:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#4302])
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_dp_link_training@non-uhbr-mst:
- shard-bmg: NOTRUN -> [SKIP][31] ([Intel XE#4354] / [Intel XE#5882])
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_dsc@dsc-fractional-bpp:
- shard-bmg: NOTRUN -> [SKIP][32] ([Intel XE#8265])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_dsc@dsc-with-output-formats-with-bpc-ultrajoiner:
- shard-lnl: NOTRUN -> [SKIP][33] ([Intel XE#8265]) +4 other tests skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@kms_feature_discovery@display-2x:
- shard-lnl: NOTRUN -> [SKIP][34] ([Intel XE#702] / [Intel XE#7344])
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_flip@2x-flip-vs-dpms:
- shard-lnl: NOTRUN -> [SKIP][35] ([Intel XE#1421]) +9 other tests skip
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
- shard-bmg: NOTRUN -> [SKIP][36] ([Intel XE#7178] / [Intel XE#7351])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-downscaling:
- shard-lnl: NOTRUN -> [SKIP][37] ([Intel XE#1397] / [Intel XE#1745] / [Intel XE#7385]) +2 other tests skip
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-default-mode:
- shard-lnl: NOTRUN -> [SKIP][38] ([Intel XE#1397] / [Intel XE#7385]) +2 other tests skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling:
- shard-lnl: NOTRUN -> [SKIP][39] ([Intel XE#7178] / [Intel XE#7351]) +3 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling.html
* igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x:
- shard-bmg: NOTRUN -> [SKIP][40] ([Intel XE#7179])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x.html
* igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw:
- shard-bmg: NOTRUN -> [SKIP][41] ([Intel XE#2311]) +13 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][42] ([Intel XE#656] / [Intel XE#7905]) +37 other tests skip
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@drrs-modesetfrombusy:
- shard-lnl: NOTRUN -> [SKIP][43] ([Intel XE#6312] / [Intel XE#651]) +8 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_frontbuffer_tracking@drrshdr-abgr161616f-draw-render:
- shard-lnl: NOTRUN -> [SKIP][44] ([Intel XE#7061]) +4 other tests skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-msflip-blt:
- shard-bmg: NOTRUN -> [SKIP][45] ([Intel XE#4141]) +3 other tests skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscreen-pri-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][46] ([Intel XE#6312]) +19 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscreen-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-cur-indfb-draw-render:
- shard-lnl: NOTRUN -> [SKIP][47] ([Intel XE#7905]) +44 other tests skip
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbchdr-argb161616f-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][48] ([Intel XE#7061])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-cur-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][49] ([Intel XE#7865]) +27 other tests skip
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-cur-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-y:
- shard-bmg: NOTRUN -> [SKIP][50] ([Intel XE#7399])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_frontbuffer_tracking@psr-argb161616f-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][51] ([Intel XE#7061] / [Intel XE#7356]) +3 other tests skip
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@kms_frontbuffer_tracking@psrhdr-1p-pri-indfb-multidraw:
- shard-bmg: NOTRUN -> [SKIP][52] ([Intel XE#2313]) +12 other tests skip
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_hdr@brightness-with-hdr:
- shard-lnl: NOTRUN -> [SKIP][53] ([Intel XE#3374] / [Intel XE#3544])
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_hdr@static-swap:
- shard-lnl: NOTRUN -> [SKIP][54] ([Intel XE#1503])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@kms_joiner@invalid-modeset-force-big-joiner:
- shard-lnl: NOTRUN -> [SKIP][55] ([Intel XE#7086] / [Intel XE#7390])
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_mst@mst-suspend-read-crc:
- shard-lnl: NOTRUN -> [SKIP][56] ([Intel XE#8348])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier:
- shard-bmg: NOTRUN -> [SKIP][57] ([Intel XE#7283]) +1 other test skip
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_plane@pixel-format-4-tiled-lnl-ccs-modifier@pipe-a-plane-5:
- shard-lnl: NOTRUN -> [SKIP][58] ([Intel XE#8303]) +1 other test skip
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@kms_plane@[email protected]
* igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier:
- shard-lnl: NOTRUN -> [SKIP][59] ([Intel XE#7283]) +4 other tests skip
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_plane_lowres@tiling-none@pipe-b-edp-1:
- shard-lnl: NOTRUN -> [SKIP][60] ([Intel XE#599] / [Intel XE#7382]) +3 other tests skip
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@kms_plane_lowres@[email protected]
* igt@kms_plane_multiple@2x-tiling-y:
- shard-lnl: NOTRUN -> [SKIP][61] ([Intel XE#4596] / [Intel XE#5854]) +1 other test skip
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-a:
- shard-lnl: NOTRUN -> [SKIP][62] ([Intel XE#2763] / [Intel XE#6886]) +9 other tests skip
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@kms_plane_scaling@[email protected]
* igt@kms_pm_backlight@bad-brightness:
- shard-bmg: NOTRUN -> [SKIP][63] ([Intel XE#7376] / [Intel XE#7760] / [Intel XE#870])
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_pm_rpm@dpms-non-lpsp:
- shard-lnl: NOTRUN -> [SKIP][64] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#7383])
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@kms_pm_rpm@package-g7:
- shard-lnl: NOTRUN -> [SKIP][65] ([Intel XE#6813])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf:
- shard-lnl: NOTRUN -> [SKIP][66] ([Intel XE#2893] / [Intel XE#4608] / [Intel XE#7304])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf@pipe-a-edp-1:
- shard-lnl: NOTRUN -> [SKIP][67] ([Intel XE#4608])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf@pipe-a-edp-1.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf@pipe-b-edp-1:
- shard-lnl: NOTRUN -> [SKIP][68] ([Intel XE#4608] / [Intel XE#7304])
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf@pipe-b-edp-1.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf:
- shard-bmg: NOTRUN -> [SKIP][69] ([Intel XE#1489])
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@pr-overlay-plane-move-continuous-sf:
- shard-lnl: NOTRUN -> [SKIP][70] ([Intel XE#2893] / [Intel XE#7304]) +4 other tests skip
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_psr2_su@page_flip-nv12:
- shard-lnl: NOTRUN -> [SKIP][71] ([Intel XE#1128] / [Intel XE#7413])
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@kms_psr2_su@page_flip-nv12.html
* igt@kms_psr@fbc-psr2-primary-blt@edp-1:
- shard-lnl: NOTRUN -> [SKIP][72] ([Intel XE#1406] / [Intel XE#4609] / [Intel XE#7345]) +2 other tests skip
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@kms_psr@[email protected]
* igt@kms_psr@fbc-psr2-primary-render:
- shard-lnl: NOTRUN -> [SKIP][73] ([Intel XE#1406] / [Intel XE#7345]) +2 other tests skip
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_psr@pr-basic:
- shard-bmg: NOTRUN -> [SKIP][74] ([Intel XE#2234] / [Intel XE#2850]) +1 other test skip
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_psr@pr-cursor-plane-move:
- shard-lnl: NOTRUN -> [SKIP][75] ([Intel XE#1406]) +2 other tests skip
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_rotation_crc@primary-rotation-90:
- shard-lnl: NOTRUN -> [SKIP][76] ([Intel XE#3414] / [Intel XE#3904] / [Intel XE#7342]) +2 other tests skip
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-bmg: NOTRUN -> [SKIP][77] ([Intel XE#2330] / [Intel XE#5813])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_setmode@invalid-clone-exclusive-crtc:
- shard-lnl: NOTRUN -> [SKIP][78] ([Intel XE#1435])
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@kms_vrr@seamless-rr-switch-drrs:
- shard-lnl: NOTRUN -> [SKIP][79] ([Intel XE#1499])
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@xe_ccs@vm-bind-decompress:
- shard-lnl: NOTRUN -> [SKIP][80] ([Intel XE#7644])
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_compute_preempt@compute-preempt-many-vram-evict:
- shard-lnl: NOTRUN -> [SKIP][81] ([Intel XE#5191] / [Intel XE#7316] / [Intel XE#7346])
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@xe_configfs@survivability-mode:
- shard-lnl: NOTRUN -> [SKIP][82] ([Intel XE#8428])
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@xe_create@multigpu-create-massive-size:
- shard-bmg: NOTRUN -> [SKIP][83] ([Intel XE#2504] / [Intel XE#7319] / [Intel XE#7350])
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@xe_evict@evict-beng-cm-threads-small:
- shard-lnl: NOTRUN -> [SKIP][84] ([Intel XE#6540] / [Intel XE#688]) +10 other tests skip
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate-race:
- shard-lnl: NOTRUN -> [SKIP][85] ([Intel XE#7482]) +19 other tests skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_exec_basic@multigpu-once-userptr-invalidate:
- shard-lnl: NOTRUN -> [SKIP][86] ([Intel XE#1392]) +9 other tests skip
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_exec_basic@multigpu-once-userptr-rebind:
- shard-bmg: NOTRUN -> [SKIP][87] ([Intel XE#2322] / [Intel XE#7372]) +1 other test skip
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@xe_exec_fault_mode@many-execqueues-multi-queue-userptr-invalidate-imm:
- shard-bmg: NOTRUN -> [SKIP][88] ([Intel XE#8374]) +1 other test skip
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@xe_exec_fault_mode@many-execqueues-multi-queue-userptr-invalidate-imm.html
* igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind:
- shard-lnl: NOTRUN -> [SKIP][89] ([Intel XE#8374]) +10 other tests skip
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_exec_multi_queue@many-execs-preempt-mode-userptr:
- shard-lnl: NOTRUN -> [SKIP][90] ([Intel XE#8364]) +28 other tests skip
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_exec_multi_queue@two-queues-preempt-mode-priority-smem:
- shard-bmg: NOTRUN -> [SKIP][91] ([Intel XE#8364]) +6 other tests skip
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@xe_exec_reset@multi-queue-close-execqueues:
- shard-lnl: NOTRUN -> [SKIP][92] ([Intel XE#8369]) +1 other test skip
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@xe_exec_reset@multi-queue-long-spin-reuse-many-queue-switch:
- shard-bmg: NOTRUN -> [SKIP][93] ([Intel XE#8369])
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr:
- shard-bmg: NOTRUN -> [SKIP][94] ([Intel XE#8378]) +2 other tests skip
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@xe_exec_threads@threads-multi-queue-cm-rebind:
- shard-lnl: NOTRUN -> [SKIP][95] ([Intel XE#8378]) +9 other tests skip
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit:
- shard-lnl: NOTRUN -> [SKIP][96] ([Intel XE#2229])
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit.html
* igt@xe_madvise@atomic-device:
- shard-lnl: NOTRUN -> [SKIP][97] ([Intel XE#7980])
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_multigpu_svm@mgpu-coherency-prefetch:
- shard-lnl: NOTRUN -> [SKIP][98] ([Intel XE#6964]) +3 other tests skip
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@xe_page_reclaim@binds-null-vma:
- shard-lnl: NOTRUN -> [SKIP][99] ([Intel XE#7793]) +1 other test skip
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_page_reclaim@boundary-split:
- shard-bmg: NOTRUN -> [SKIP][100] ([Intel XE#7793])
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@xe_pat@pat-sw-hw-reset-compare:
- shard-lnl: NOTRUN -> [FAIL][101] ([Intel XE#7695]) +2 other tests fail
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_pat@xa-app-transient-media-off:
- shard-lnl: NOTRUN -> [SKIP][102] ([Intel XE#7590] / [Intel XE#7772])
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@xe_pm@d3cold-multiple-execs:
- shard-lnl: NOTRUN -> [SKIP][103] ([Intel XE#2284] / [Intel XE#366] / [Intel XE#7370])
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@xe_pm@s3-vm-bind-userptr:
- shard-lnl: NOTRUN -> [SKIP][104] ([Intel XE#584] / [Intel XE#7369]) +1 other test skip
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@xe_pm@vram-d3cold-threshold:
- shard-lnl: NOTRUN -> [SKIP][105] ([Intel XE#579] / [Intel XE#7329] / [Intel XE#7456])
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@xe_pm_residency@aspm_link_residency:
- shard-lnl: NOTRUN -> [SKIP][106] ([Intel XE#7271])
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@xe_pm_residency@aspm_link_residency.html
* igt@xe_pmu@fn-engine-activity-sched-if-idle:
- shard-lnl: NOTRUN -> [SKIP][107] ([Intel XE#4650] / [Intel XE#7347])
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@xe_query@multigpu-query-invalid-cs-cycles:
- shard-lnl: NOTRUN -> [SKIP][108] ([Intel XE#944]) +3 other tests skip
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@xe_sriov_auto_provisioning@selfconfig-basic:
- shard-lnl: NOTRUN -> [SKIP][109] ([Intel XE#4130] / [Intel XE#7366]) +1 other test skip
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-4/igt@[email protected]
* igt@xe_sriov_scheduling@default-enabled-fair-scheduling:
- shard-lnl: NOTRUN -> [SKIP][110] ([Intel XE#8339])
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_sriov_vfio@region-info:
- shard-lnl: NOTRUN -> [SKIP][111] ([Intel XE#7724])
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@xe_vm@overcommit-nonfault-vram-lr-external-nodefer:
- shard-lnl: NOTRUN -> [SKIP][112] ([Intel XE#7892]) +1 other test skip
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-1/igt@[email protected]
* igt@xe_wedged@wedged-at-any-timeout:
- shard-bmg: NOTRUN -> [DMESG-WARN][113] ([Intel XE#8963])
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
#### Possible fixes ####
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
- shard-bmg: [FAIL][114] ([Intel XE#8098]) -> [PASS][115] +1 other test pass
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-10/igt@[email protected]
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@[email protected]
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-lnl: [FAIL][116] ([Intel XE#301]) -> [PASS][117] +1 other test pass
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-lnl-3/igt@[email protected]
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-2/igt@[email protected]
* igt@kms_flip@plain-flip-fb-recreate-interruptible:
- shard-lnl: [FAIL][118] ([Intel XE#3098] / [Intel XE#3149]) -> [PASS][119] +1 other test pass
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-lnl-6/igt@[email protected]
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-6/igt@[email protected]
* igt@kms_hdr@invalid-hdr:
- shard-bmg: [SKIP][120] ([Intel XE#1503]) -> [PASS][121]
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-4/igt@[email protected]
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-8/igt@[email protected]
* igt@xe_exec_threads@threads-hang-userptr-invalidate-race:
- shard-bmg: [FAIL][122] ([Intel XE#9096]) -> [PASS][123]
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-2/igt@[email protected]
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-2/igt@[email protected]
* igt@xe_fault_injection@inject-fault-probe-function-xe_wa_gt_init:
- shard-bmg: [ABORT][124] ([Intel XE#8007]) -> [PASS][125]
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-10/igt@xe_fault_injection@inject-fault-probe-function-xe_wa_gt_init.html
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-4/igt@xe_fault_injection@inject-fault-probe-function-xe_wa_gt_init.html
#### Warnings ####
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
- shard-lnl: [SKIP][126] ([Intel XE#309] / [Intel XE#7343]) -> [SKIP][127] ([Intel XE#309] / [Intel XE#7343] / [Intel XE#7935])
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-lnl-2/igt@[email protected]
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-lnl-8/igt@[email protected]
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [SKIP][128] ([Intel XE#2426] / [Intel XE#5848]) -> [FAIL][129] ([Intel XE#1729] / [Intel XE#7424])
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-8/igt@[email protected]
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/shard-bmg-1/igt@[email protected]
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1125]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1125
[Intel XE#1128]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1128
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1397
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1467]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1467
[Intel XE#1468]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1468
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
[Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2504
[Intel XE#2669]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2669
[Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3098
[Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#3433]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3433
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#4130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4130
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4302]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4302
[Intel XE#4354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4354
[Intel XE#4416]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4416
[Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
[Intel XE#4608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4608
[Intel XE#4609]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4609
[Intel XE#4650]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4650
[Intel XE#5191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5191
[Intel XE#579]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/579
[Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
[Intel XE#584]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/584
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#5854]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5854
[Intel XE#5882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5882
[Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
[Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#6540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6540
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#6813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6813
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
[Intel XE#702]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/702
[Intel XE#7059]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7059
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7085]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7085
[Intel XE#7086]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7086
[Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
[Intel XE#7179]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7179
[Intel XE#7271]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7271
[Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
[Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
[Intel XE#7312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7312
[Intel XE#7316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7316
[Intel XE#7319]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7319
[Intel XE#7329]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7329
[Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
[Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
[Intel XE#7344]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7344
[Intel XE#7345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7345
[Intel XE#7346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7346
[Intel XE#7347]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7347
[Intel XE#7350]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7350
[Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
[Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
[Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
[Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
[Intel XE#7366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7366
[Intel XE#7367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7367
[Intel XE#7369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7369
[Intel XE#7370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7370
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
[Intel XE#7381]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7381
[Intel XE#7382]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7382
[Intel XE#7383]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7383
[Intel XE#7385]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7385
[Intel XE#7389]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7389
[Intel XE#7390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7390
[Intel XE#7396]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7396
[Intel XE#7399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7399
[Intel XE#7413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7413
[Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
[Intel XE#7456]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7456
[Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
[Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
[Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
[Intel XE#7644]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7644
[Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
[Intel XE#7695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7695
[Intel XE#7724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7724
[Intel XE#7760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7760
[Intel XE#7772]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7772
[Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
[Intel XE#7809]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7809
[Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
[Intel XE#7892]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7892
[Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
[Intel XE#7935]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7935
[Intel XE#7980]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7980
[Intel XE#8007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8007
[Intel XE#8098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8098
[Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
[Intel XE#8303]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8303
[Intel XE#8339]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8339
[Intel XE#8348]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8348
[Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
[Intel XE#8365]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8365
[Intel XE#8369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8369
[Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
[Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
[Intel XE#8428]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8428
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#8963]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8963
[Intel XE#9096]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9096
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
Build changes
-------------
* Linux: xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f -> xe-pw-172838v2
IGT_9078: 9078
xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f: 43b9a5e9d30783bb6f4d7dacdd1739184666940f
xe-pw-172838v2: 172838v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172838v2/index.html