Dynamic drm_pagemaps and Initial multi-device SVM
Subsystems (5)
Thomas Hellström
maintainerv6 cover Dynamic drm_pagemaps and Initial multi-device SVM
This series aims at providing an initial implementation of multi-device SVM, where communitcation with peers (migration and direct execution out of peer memory) uses some form of fast interconnect. In this series we're using pcie p2p.
In a multi-device environment, the struct pages for device-private memory (the dev_pagemap) may take up a significant amount of system memory. We therefore want to provide a means of revoking / removing the dev_pagemaps not in use. In particular when a device is offlined, we want to block migrating *to* the device memory and migrate data already existing in the devices memory to system. The dev_pagemap then becomes unused and can be removed.
Removing and setting up a large dev_pagemap is also quite time-consuming, so removal of unused dev_pagemaps only happens on system memory pressure using a shrinker.
Patch 1 is a small debug printout fix.
Patch 2 removes some dead code.
Patch 3 fixes a condition where memory was used while being cleared. Patches 4-9 deals with dynamic drm_pagemaps as described above. Patches 10-14 adds infrastructure to handle remote drm_pagemaps with fast interconnects.
Patch 15 extends the xe madvise() UAPI to handle remote drm_pagemaps. Patch 16 adds a pcie-p2p dma SVM interconnect to the xe driver. Patch 17 adds some SVM-related debug printouts for xe.
Patch 18 adds documentation on how the drm_pagemaps are reference counted. Patch 19 Cleans up the usage of the dev_private owner.
Patch 20 Introduces a gpusvm function to scan the current CPU address space. Patch 21 Uses the above function in Xe to avoid unnecessary migrations. Patch 22 Adds drm_pagemap support for p2p destination migration. Patch 23 Adds drm_pagemap support for p2p source migration. Patch 24 Adds an rwsem to optionally serialize migration.
What's still missing is implementation of migration policies. That will be implemented in follow-up series.
v2:
- Address review comments from Matt Brost.
- Fix compilation issues reported by automated testing
- Add patch 1, 17.
- What's now patch 16 was extended to support p2p migration. v3:
- Add patches 2, 18, 19, 10, 22. Main functionality is the address space scan to avoid unnecessary migration, and p2p source migration which is needed on Xe to decompress and to flush out the L2 cache.
- Rework what's now Patch 21 slightly.
- Minor fixes all over the place.
v4:
- Fix a build error (CI)
- Fix possibly incorrect waiting for the pre_migrate_fence. v5:
- New patch: broken out from patch 22: drm/pagemap: Remove some dead code (Matt Brost)
- New patch: drm/xe/svm: Serialize migration to device if racing (Matt Brost)
- Fix a UAF in what's now patch 3. (CI)
- Release the migrate fence early in patch 3.
- Address review comments to patch 3. See the patch for details.
- Address review comments to patch 22. See the patch for details.
- Rebase, update R-Bs.
v6:
- Fix in patch 3. (Matt Brost)
- Rebase patch 23 on fix in patch 3.
- Update R-Bs.
Test-with: [email protected]
Thomas Hellström (24):
drm/xe/svm: Fix a debug printout
drm/pagemap: Remove some dead code
drm/pagemap, drm/xe: Ensure that the devmem allocation is idle before
use
drm/pagemap, drm/xe: Add refcounting to struct drm_pagemap drm/pagemap: Add a refcounted drm_pagemap backpointer to struct
drm_pagemap_zdd
drm/pagemap, drm/xe: Manage drm_pagemap provider lifetimes drm/pagemap: Add a drm_pagemap cache and shrinker
drm/xe: Use the drm_pagemap cache and shrinker drm/pagemap: Remove the drm_pagemap_create() interface drm/pagemap_util: Add a utility to assign an owner to a set of
interconnected gpus
drm/xe: Use the drm_pagemap_util helper to get a svm pagemap owner drm/xe: Pass a drm_pagemap pointer around with the memory advise
attributes
drm/xe: Use the vma attibute drm_pagemap to select where to migrate drm/xe: Simplify madvise_preferred_mem_loc()
drm/xe/uapi: Extend the madvise functionality to support foreign
pagemap placement for svm
drm/xe: Support pcie p2p dma as a fast interconnect drm/xe/vm: Add a couple of VM debug printouts
drm/xe/svm: Document how xe keeps drm_pagemap references drm/pagemap, drm/xe: Clean up the use of the device-private page owner drm/gpusvm: Introduce a function to scan the current migration state drm/xe: Use drm_gpusvm_scan_mm()
drm/pagemap, drm/xe: Support destination migration over interconnect drm/pagemap: Support source migration over interconnect drm/xe/svm: Serialize migration to device if racing
drivers/gpu/drm/Makefile | 3 +- drivers/gpu/drm/drm_gpusvm.c | 124 +++++ drivers/gpu/drm/drm_pagemap.c | 565 +++++++++++++++++---- drivers/gpu/drm/drm_pagemap_util.c | 568 +++++++++++++++++++++ drivers/gpu/drm/xe/xe_device.c | 20 + drivers/gpu/drm/xe/xe_device.h | 2 + drivers/gpu/drm/xe/xe_device_types.h | 5 + drivers/gpu/drm/xe/xe_migrate.c | 29 +- drivers/gpu/drm/xe/xe_migrate.h | 6 +- drivers/gpu/drm/xe/xe_svm.c | 721 ++++++++++++++++++++++----- drivers/gpu/drm/xe/xe_svm.h | 85 +++- drivers/gpu/drm/xe/xe_tile.c | 34 +- drivers/gpu/drm/xe/xe_tile.h | 21 + drivers/gpu/drm/xe/xe_userptr.c | 2 +- drivers/gpu/drm/xe/xe_vm.c | 65 ++- drivers/gpu/drm/xe/xe_vm.h | 1 + drivers/gpu/drm/xe/xe_vm_madvise.c | 106 +++- drivers/gpu/drm/xe/xe_vm_types.h | 21 +- drivers/gpu/drm/xe/xe_vram_types.h | 15 +- include/drm/drm_gpusvm.h | 29 ++ include/drm/drm_pagemap.h | 128 ++++- include/drm/drm_pagemap_util.h | 92 ++++ include/uapi/drm/xe_drm.h | 18 +- 23 files changed, 2359 insertions(+), 301 deletions(-) create mode 100644 drivers/gpu/drm/drm_pagemap_util.c create mode 100644 include/drm/drm_pagemap_util.h
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 1/24 drm/xe/svm: Fix a debug printout
Avoid spamming the log with drm_info(). Use drm_dbg() instead.
--- drivers/gpu/drm/xe/xe_svm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/xe/xe_svm.c +1 -1
@@ -937,7 +937,7 @@ bool xe_svm_range_needs_migrate_to_vram(struct xe_svm_range *range, struct xe_vmxe_assert (vm->xe,IS_DGFX (vm->xe));if (xe_svm_range_in_vram (range)) { -drm_info (&vm->xe->drm,"Range is already in VRAM\n" ); +drm_dbg (&vm->xe->drm,"Range is already in VRAM\n" );return false; }
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 2/24 drm/pagemap: Remove some dead code
In reply to Thomas HellströmThe page pointer can't be NULL.
v5:
- New patch. (Matt Brost)
--- drivers/gpu/drm/drm_pagemap.c | 13 ------------- 1 file changed, 13 deletions(-)
drivers/gpu/drm/drm_pagemap.c +0 -13
@@ -702,19 +702,6 @@ static int __drm_pagemap_migrate_to_ram(struct vm_area_struct *vas,if (!migrate.cpages) goto err_free; -if (!page) { -for (i =0 ; i < npages; ++i) { -if (!(migrate.src[i] &MIGRATE_PFN_MIGRATE )) -continue ; - - page =migrate_pfn_to_page (migrate.src[i]); -break ; - } - -if (!page) - goto err_finalize; - } - zdd = page->zone_device_data; ops = zdd->devmem_allocation->ops; dev = zdd->devmem_allocation->dev;
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 3/24 drm/pagemap, drm/xe: Ensure that the devmem allocation is idle before use
In reply to Thomas HellströmIn situations where no system memory is migrated to devmem, and in upcoming patches where another GPU is performing the migration to the newly allocated devmem buffer, there is nothing to ensure any ongoing clear to the devmem allocation or async eviction from the devmem allocation is complete.
Address that by passing a struct dma_fence down to the copy functions, and ensure it is waited for before migration is marked complete.
v3:
- New patch.
v4:
- Update the logic used for determining when to wait for the pre_migrate_fence.
- Update the logic used for determining when to warn for the pre_migrate_fence since the scheduler fences apparently can signal out-of-order.
v5:
- Fix a UAF (CI)
- Remove references to source P2P migration (Himal)
- Put the pre_migrate_fence after migration.
v6:
- Pipeline the pre_migrate_fence dependency (Matt Brost)
--- drivers/gpu/drm/drm_pagemap.c | 17 +++++++++--- drivers/gpu/drm/xe/xe_migrate.c | 25 +++++++++++++---- drivers/gpu/drm/xe/xe_migrate.h | 6 ++-- drivers/gpu/drm/xe/xe_svm.c | 49 +++++++++++++++++++++++++-------- include/drm/drm_pagemap.h | 17 ++++++++++-- 5 files changed, 88 insertions(+), 26 deletions(-)
drivers/gpu/drm/drm_pagemap.c +13 -4
@@ -3,6 +3,7 @@* Copyright © 2024-2025 Intel Corporation */ +#include <linux/dma-fence.h> #include <linux/dma-mapping.h> #include <linux/migrate.h> #include <linux/pagemap.h>
@@ -408,10 +409,14 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,drm_pagemap_get_devmem_page (page, zdd); } - err = ops->copy_to_devmem (pages, pagemap_addr, npages); + err = ops->copy_to_devmem (pages, pagemap_addr, npages, + devmem_allocation->pre_migrate_fence);if (err) goto err_finalize; +dma_fence_put (devmem_allocation->pre_migrate_fence); + devmem_allocation->pre_migrate_fence =NULL ; +/* Upon success bind devmem allocation to range and zdd */ devmem_allocation->timeslice_expiration =get_jiffies_64 () +msecs_to_jiffies (timeslice_ms);
@@ -596,7 +601,7 @@ int drm_pagemap_evict_to_ram(struct drm_pagemap_devmem *devmem_allocation)for (i =0 ; i < npages; ++i) pages[i] =migrate_pfn_to_page (src[i]); - err = ops->copy_to_ram (pages, pagemap_addr, npages); + err = ops->copy_to_ram (pages, pagemap_addr, npages,NULL );if (err) goto err_finalize;
@@ -719,7 +724,7 @@ static int __drm_pagemap_migrate_to_ram(struct vm_area_struct *vas,for (i =0 ; i < npages; ++i) pages[i] =migrate_pfn_to_page (migrate.src[i]); - err = ops->copy_to_ram (pages, pagemap_addr, npages); + err = ops->copy_to_ram (pages, pagemap_addr, npages,NULL );if (err) goto err_finalize;
@@ -800,11 +805,14 @@ EXPORT_SYMBOL_GPL(drm_pagemap_pagemap_ops_get);* @ops: Pointer to the operations structure for GPU SVM device memory * @dpagemap: The struct drm_pagemap we're allocating from. * @size: Size of device memory allocation +* @pre_migrate_fence: Fence to wait for or pipeline behind before migration starts. +* (May be NULL). */ void drm_pagemap_devmem_init (struct drm_pagemap_devmem *devmem_allocation,struct device *dev,struct mm_struct *mm,const struct drm_pagemap_devmem_ops *ops, -struct drm_pagemap *dpagemap,size_t size) +struct drm_pagemap *dpagemap,size_t size, +struct dma_fence *pre_migrate_fence) {init_completion (&devmem_allocation->detached); devmem_allocation->dev = dev;
@@ -812,6 +820,7 @@ void drm_pagemap_devmem_init(struct drm_pagemap_devmem *devmem_allocation, devmem_allocation->ops = ops; devmem_allocation->dpagemap = dpagemap; devmem_allocation->size = size; + devmem_allocation->pre_migrate_fence = pre_migrate_fence; }EXPORT_SYMBOL_GPL (drm_pagemap_devmem_init);
drivers/gpu/drm/xe/xe_migrate.c +20 -5
@@ -2113,6 +2113,7 @@ static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,unsigned long sram_offset, struct drm_pagemap_addr *sram_addr, u64 vram_addr, + struct dma_fence *deps, const enum xe_migrate_copy_dir dir) { struct xe_gt *gt = m->tile->primary_gt;
@@ -2201,6 +2202,14 @@ static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,xe_sched_job_add_migrate_flush (job,MI_INVALIDATE_TLB ); +if (deps && !dma_fence_is_signaled (deps)) { +dma_fence_get (deps); + err =drm_sched_job_add_dependency (&job->drm, deps); +if (err) +dma_fence_wait (deps, false); + err =0 ; + } +mutex_lock (&m->job_mutex);xe_sched_job_arm (job); fence =dma_fence_get (&job->drm.s_fence->finished);
@@ -2226,6 +2235,8 @@ static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,* @npages: Number of pages to migrate. * @src_addr: Array of DMA information (source of migrate) * @dst_addr: Device physical address of VRAM (destination of migrate) +* @deps: struct dma_fence representing the dependencies that need +* to be signaled before migration. * * Copy from an array dma addresses to a VRAM device physical address *
@@ -2235,10 +2246,11 @@ static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,struct dma_fence *xe_migrate_to_vram (struct xe_migrate *m,unsigned long npages,struct drm_pagemap_addr *src_addr, -u64 dst_addr) +u64 dst_addr, +struct dma_fence *deps) {return xe_migrate_vram (m, npages *PAGE_SIZE ,0 , src_addr, dst_addr, -XE_MIGRATE_COPY_TO_VRAM ); + deps,XE_MIGRATE_COPY_TO_VRAM ); }/**
@@ -2247,6 +2259,8 @@ struct dma_fence *xe_migrate_to_vram(struct xe_migrate *m,* @npages: Number of pages to migrate. * @src_addr: Device physical address of VRAM (source of migrate) * @dst_addr: Array of DMA information (destination of migrate) +* @deps: struct dma_fence representing the dependencies that need +* to be signaled before migration. * * Copy from a VRAM device physical address to an array dma addresses *
@@ -2256,10 +2270,11 @@ struct dma_fence *xe_migrate_to_vram(struct xe_migrate *m,struct dma_fence *xe_migrate_from_vram (struct xe_migrate *m,unsigned long npages,u64 src_addr, -struct drm_pagemap_addr *dst_addr) +struct drm_pagemap_addr *dst_addr, +struct dma_fence *deps) {return xe_migrate_vram (m, npages *PAGE_SIZE ,0 , dst_addr, src_addr, -XE_MIGRATE_COPY_TO_SRAM ); + deps,XE_MIGRATE_COPY_TO_SRAM ); } static void xe_migrate_dma_unmap(struct xe_device *xe,
@@ -2435,7 +2450,7 @@ int xe_migrate_access_memory(struct xe_migrate *m, struct xe_bo *bo, __fence =xe_migrate_vram (m, current_bytes, (unsigned long )buf & ~PAGE_MASK , &pagemap_addr[current_page], - vram_addr, write ? + vram_addr,NULL , write ?XE_MIGRATE_COPY_TO_VRAM :XE_MIGRATE_COPY_TO_SRAM );if (IS_ERR (__fence)) {
drivers/gpu/drm/xe/xe_migrate.h +4 -2
@@ -116,12 +116,14 @@ int xe_migrate_init(struct xe_migrate *m);struct dma_fence *xe_migrate_to_vram (struct xe_migrate *m,unsigned long npages,struct drm_pagemap_addr *src_addr, -u64 dst_addr); +u64 dst_addr, +struct dma_fence *deps);struct dma_fence *xe_migrate_from_vram (struct xe_migrate *m,unsigned long npages,u64 src_addr, -struct drm_pagemap_addr *dst_addr); +struct drm_pagemap_addr *dst_addr, +struct dma_fence *deps); struct dma_fence *xe_migrate_copy(struct xe_migrate *m, struct xe_bo *src_bo,
drivers/gpu/drm/xe/xe_svm.c +37 -12
126 lines not on this page · raw message
include/drm/drm_pagemap.h +14 -3
@@ -8,6 +8,7 @@#define NR_PAGES (order) (1U << (order)) +struct dma_fence ;struct drm_pagemap ;struct drm_pagemap_zdd ;struct device ;
@@ -174,6 +175,8 @@ struct drm_pagemap_devmem_ops {* @pages: Pointer to array of device memory pages (destination) * @pagemap_addr: Pointer to array of DMA information (source) * @npages: Number of pages to copy +* @pre_migrate_fence: dma-fence to wait for before migration start. +* May be NULL. * * Copy pages to device memory. If the order of a @pagemap_addr entry * is greater than 0, the entry is populated but subsequent entries
@@ -183,13 +186,16 @@ struct drm_pagemap_devmem_ops {*/ int (*copy_to_devmem)(struct page **pages,struct drm_pagemap_addr *pagemap_addr, -unsigned long npages); +unsigned long npages, +struct dma_fence *pre_migrate_fence);/** * @copy_to_ram: Copy to system RAM (required for migration) * @pages: Pointer to array of device memory pages (source) * @pagemap_addr: Pointer to array of DMA information (destination) * @npages: Number of pages to copy +* @pre_migrate_fence: dma-fence to wait for before migration start. +* May be NULL. * * Copy pages to system RAM. If the order of a @pagemap_addr entry * is greater than 0, the entry is populated but subsequent entries
@@ -199,7 +205,8 @@ struct drm_pagemap_devmem_ops {*/ int (*copy_to_ram)(struct page **pages,struct drm_pagemap_addr *pagemap_addr, -unsigned long npages); +unsigned long npages, +struct dma_fence *pre_migrate_fence); };/**
@@ -212,6 +219,8 @@ struct drm_pagemap_devmem_ops {* @dpagemap: The struct drm_pagemap of the pages this allocation belongs to. * @size: Size of device memory allocation * @timeslice_expiration: Timeslice expiration in jiffies +* @pre_migrate_fence: Fence to wait for or pipeline behind before migration starts. +* (May be NULL). */ struct drm_pagemap_devmem {struct device *dev;
@@ -221,6 +230,7 @@ struct drm_pagemap_devmem {struct drm_pagemap *dpagemap;size_t size;u64 timeslice_expiration; +struct dma_fence *pre_migrate_fence; }; int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
@@ -238,7 +248,8 @@ struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page);void drm_pagemap_devmem_init (struct drm_pagemap_devmem *devmem_allocation,struct device *dev,struct mm_struct *mm,const struct drm_pagemap_devmem_ops *ops, -struct drm_pagemap *dpagemap,size_t size); +struct drm_pagemap *dpagemap,size_t size, +struct dma_fence *pre_migrate_fence); int drm_pagemap_populate_mm(struct drm_pagemap *dpagemap, unsigned long start, unsigned long end,
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 4/24 drm/pagemap, drm/xe: Add refcounting to struct drm_pagemap
In reply to Thomas HellströmWith the end goal of being able to free unused pagemaps and allocate them on demand, add a refcount to struct drm_pagemap, remove the xe embedded drm_pagemap, allocating and freeing it explicitly.
v2:
- Make the drm_pagemap pointer in drm_gpusvm_pages reference-counted. v3:
- Call drm_pagemap_get() before drm_pagemap_put() in drm_gpusvm_pages (Himal Prasad Ghimiray)
--- drivers/gpu/drm/drm_gpusvm.c | 3 ++ drivers/gpu/drm/drm_pagemap.c | 51 ++++++++++++++++++++++++++++++ drivers/gpu/drm/xe/xe_svm.c | 26 ++++++++++----- drivers/gpu/drm/xe/xe_vram_types.h | 2 +- include/drm/drm_pagemap.h | 36 +++++++++++++++++++++ 5 files changed, 109 insertions(+), 9 deletions(-)
drivers/gpu/drm/drm_gpusvm.c +3 -0
@@ -1038,6 +1038,7 @@ static void __drm_gpusvm_unmap_pages(struct drm_gpusvm *gpusvm, flags.has_dma_mapping = false;WRITE_ONCE (svm_pages->flags.__flags, flags.__flags); +drm_pagemap_put (svm_pages->dpagemap); svm_pages->dpagemap =NULL ; } }
@@ -1434,6 +1435,8 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,if (pagemap) { flags.has_devmem_pages = true; +drm_pagemap_get (dpagemap); +drm_pagemap_put (svm_pages->dpagemap); svm_pages->dpagemap = dpagemap; }
drivers/gpu/drm/drm_pagemap.c +51 -0
57 lines not on this page · raw message
drivers/gpu/drm/xe/xe_svm.c +18 -8
@@ -868,7 +868,7 @@ static int xe_drm_pagemap_populate_mm(struct drm_pagemap *dpagemap,struct mm_struct *mm, unsigned long timeslice_ms) { - struct xe_vram_region *vr = container_of(dpagemap, typeof(*vr), dpagemap); + struct xe_vram_region *vr = container_of(dpagemap->pagemap, typeof(*vr), pagemap);struct dma_fence *pre_migrate_fence =NULL ;struct xe_device *xe = vr->xe;struct device *dev = xe->drm.dev;
@@ -1392,7 +1392,7 @@ u8 xe_svm_ranges_zap_ptes_in_range(struct xe_vm *vm, u64 start, u64 end)static struct drm_pagemap *tile_local_pagemap (struct xe_tile *tile) { -return &tile->mem.vram->dpagemap; +return tile->mem.vram->dpagemap; }/**
@@ -1502,6 +1502,15 @@ int xe_devm_add(struct xe_tile *tile, struct xe_vram_region *vr)return ret; } + vr->dpagemap =drm_pagemap_create (dev, &vr->pagemap, + &xe_drm_pagemap_ops); +if (IS_ERR (vr->dpagemap)) { +drm_err (&xe->drm,"Failed to create drm_pagemap tile %d memory: %pe\n" , + tile->id, vr->dpagemap); + ret =PTR_ERR (vr->dpagemap); + goto out_no_dpagemap; + } + vr->pagemap.type =MEMORY_DEVICE_PRIVATE ; vr->pagemap.range.start = res->start; vr->pagemap.range.end = res->end;
@@ -1509,22 +1518,23 @@ int xe_devm_add(struct xe_tile *tile, struct xe_vram_region *vr) vr->pagemap.ops =drm_pagemap_pagemap_ops_get (); vr->pagemap.owner =xe_svm_devm_owner (xe); addr =devm_memremap_pages (dev, &vr->pagemap); - - vr->dpagemap.dev = dev; - vr->dpagemap.ops = &xe_drm_pagemap_ops; -if (IS_ERR (addr)) { -devm_release_mem_region (dev, res->start,resource_size (res)); ret =PTR_ERR (addr);drm_err (&xe->drm,"Failed to remap tile %d memory, errno %pe\n" , tile->id,ERR_PTR (ret)); -return ret; + goto out_failed_memremap; } vr->hpa_base = res->start;drm_dbg (&xe->drm,"Added tile %d memory [%llx-%llx] to devm, remapped to %pr\n" , tile->id, vr->io_start, vr->io_start + vr->usable_size, res);return 0 ; + +out_failed_memremap: +drm_pagemap_put (vr->dpagemap); +out_no_dpagemap: +devm_release_mem_region (dev, res->start,resource_size (res)); +return ret; }#else int xe_svm_alloc_vram(struct xe_tile *tile,
drivers/gpu/drm/xe/xe_vram_types.h +1 -1
@@ -72,7 +72,7 @@ struct xe_vram_region {* @dpagemap: The struct drm_pagemap of the ZONE_DEVICE memory * pages of this tile. */ -struct drm_pagemap dpagemap; +struct drm_pagemap *dpagemap;/** * @hpa_base: base host physical address *
include/drm/drm_pagemap.h +36 -0
@@ -130,11 +130,15 @@ struct drm_pagemap_ops {* struct drm_pagemap: Additional information for a struct dev_pagemap * used for device p2p handshaking. * @ops: The struct drm_pagemap_ops. +* @ref: Reference count. * @dev: The struct drevice owning the device-private memory. +* @pagemap: Pointer to the underlying dev_pagemap. */ struct drm_pagemap {const struct drm_pagemap_ops *ops; +struct kref ref;struct device *dev; +struct dev_pagemap *pagemap; };struct drm_pagemap_devmem ;
@@ -209,6 +213,37 @@ struct drm_pagemap_devmem_ops { struct dma_fence *pre_migrate_fence); }; +struct drm_pagemap *drm_pagemap_create (struct device *dev, +struct dev_pagemap *pagemap, +const struct drm_pagemap_ops *ops); + +#if IS_ENABLED (CONFIG_DRM_GPUSVM ) + +void drm_pagemap_put (struct drm_pagemap *dpagemap); + +#else + +static inline void drm_pagemap_put (struct drm_pagemap *dpagemap) +{ +} + +#endif /* IS_ENABLED(CONFIG_DRM_GPUSVM) */ + +/** +* drm_pagemap_get() - Obtain a reference on a struct drm_pagemap +* @dpagemap: Pointer to the struct drm_pagemap. +* +* Return: Pointer to the struct drm_pagemap. +*/ +static inline struct drm_pagemap * +drm_pagemap_get (struct drm_pagemap *dpagemap) +{ +if (likely (dpagemap)) +kref_get (&dpagemap->ref); + +return dpagemap; +} +/** * struct drm_pagemap_devmem - Structure representing a GPU SVM device memory allocation *
@@ -257,3 +292,4 @@ int drm_pagemap_populate_mm(struct drm_pagemap *dpagemap, unsigned long timeslice_ms);#endif +
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 5/24 drm/pagemap: Add a refcounted drm_pagemap backpointer to struct drm_pagemap_zdd
In reply to Thomas HellströmTo be able to keep track of drm_pagemap usage, add a refcounted backpointer to struct drm_pagemap_zdd. This will keep the drm_pagemap reference count from dropping to zero as long as there are drm_pagemap pages present in a CPU address space.
--- drivers/gpu/drm/drm_pagemap.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
drivers/gpu/drm/drm_pagemap.c +8 -2
@@ -63,6 +63,7 @@* * @refcount: Reference count for the zdd * @devmem_allocation: device memory allocation +* @dpagemap: Refcounted pointer to the underlying struct drm_pagemap. * @device_private_page_owner: Device private pages owner * * This structure serves as a generic wrapper installed in
@@ -75,11 +76,13 @@struct drm_pagemap_zdd {struct kref refcount;struct drm_pagemap_devmem *devmem_allocation; +struct drm_pagemap *dpagemap;void *device_private_page_owner; };/** * drm_pagemap_zdd_alloc() - Allocate a zdd structure. +* @dpagemap: Pointer to the underlying struct drm_pagemap. * @device_private_page_owner: Device private pages owner * * This function allocates and initializes a new zdd structure. It sets up the
@@ -88,7 +91,7 @@ struct drm_pagemap_zdd {* Return: Pointer to the allocated zdd on success, ERR_PTR() on failure. */ static struct drm_pagemap_zdd * -drm_pagemap_zdd_alloc (void *device_private_page_owner) +drm_pagemap_zdd_alloc (struct drm_pagemap *dpagemap,void *device_private_page_owner) {struct drm_pagemap_zdd *zdd;
@@ -99,6 +102,7 @@ drm_pagemap_zdd_alloc(void *device_private_page_owner)kref_init (&zdd->refcount); zdd->devmem_allocation =NULL ; zdd->device_private_page_owner = device_private_page_owner; + zdd->dpagemap =drm_pagemap_get (dpagemap);return zdd; }
@@ -128,6 +132,7 @@ static void drm_pagemap_zdd_destroy(struct kref *ref)struct drm_pagemap_zdd *zdd = container_of(ref, struct drm_pagemap_zdd, refcount);struct drm_pagemap_devmem *devmem = zdd->devmem_allocation; +struct drm_pagemap *dpagemap = zdd->dpagemap;if (devmem) {complete_all (&devmem->detached);
@@ -135,6 +140,7 @@ static void drm_pagemap_zdd_destroy(struct kref *ref) devmem->ops->devmem_release (devmem); }kfree (zdd); +drm_pagemap_put (dpagemap); }/**
@@ -367,7 +373,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, pagemap_addr = buf + (2 *sizeof (*migrate.src) * npages); pages = buf + (2 *sizeof (*migrate.src) +sizeof (*pagemap_addr)) * npages; - zdd =drm_pagemap_zdd_alloc (pgmap_owner); + zdd =drm_pagemap_zdd_alloc (devmem_allocation->dpagemap, pgmap_owner);if (!zdd) { err = -ENOMEM ; goto err_free;
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 6/24 drm/pagemap, drm/xe: Manage drm_pagemap provider lifetimes
In reply to Thomas HellströmIf a device holds a reference on a foregin device's drm_pagemap, and a device unbind is executed on the foreign device, Typically that foreign device would evict its device-private pages and then continue its device-managed cleanup eventually releasing its drm device and possibly allow for module unload. However, since we're still holding a reference on a drm_pagemap, when that reference is released and the provider module is unloaded we'd execute out of undefined memory.
Therefore keep a reference on the provider device and module until the last drm_pagemap reference is gone.
Note that in theory, the drm_gpusvm_helper module may be unloaded as soon as the final module_put() of the provider driver module is executed, so we need to add a module_exit() function that waits for the work item executing the module_put() has completed.
v2:
- Better commit message (Matt Brost)
--- drivers/gpu/drm/drm_pagemap.c | 101 ++++++++++++++++++++++++++++++++-- drivers/gpu/drm/xe/xe_svm.c | 15 ++++- include/drm/drm_pagemap.h | 10 +++- 3 files changed, 117 insertions(+), 9 deletions(-)
drivers/gpu/drm/drm_pagemap.c +97 -4
@@ -9,6 +9,7 @@#include <linux/pagemap.h> #include <drm/drm_drv.h> #include <drm/drm_pagemap.h> +#include <drm/drm_print.h> /** * DOC: Overview
@@ -549,16 +550,92 @@ static int drm_pagemap_migrate_populate_ram_pfn(struct vm_area_struct *vas,return -ENOMEM ; } +static void drm_pagemap_dev_unhold_work (struct work_struct *work); +static LLIST_HEAD (drm_pagemap_unhold_list); +static DECLARE_WORK(drm_pagemap_work, drm_pagemap_dev_unhold_work); + +/** +* struct drm_pagemap_dev_hold - Struct to aid in drm_device release. +* @link: Link into drm_pagemap_unhold_list for deferred reference releases. +* @drm: drm device to put. +* +* When a struct drm_pagemap is released, we also need to release the +* reference it holds on the drm device. However, typically that needs +* to be done separately from a system-wide workqueue. +* Each time a struct drm_pagemap is initialized +* (or re-initialized if cached) therefore allocate a separate +* drm_pagemap_dev_hold item, from which we put the drm device and +* associated module. +*/ +struct drm_pagemap_dev_hold { +struct llist_node link; +struct drm_device *drm; +}; +static void drm_pagemap_release (struct kref *ref) {struct drm_pagemap *dpagemap =container_of (ref,typeof (*dpagemap), ref); - +struct drm_pagemap_dev_hold *dev_hold = dpagemap->dev_hold; + +/* +* We know the pagemap provider is alive at this point, since +* the struct drm_pagemap_dev_hold holds a reference to the +* pagemap provider drm_device and its module. +*/ + dpagemap->dev_hold =NULL ;kfree (dpagemap); +llist_add (&dev_hold->link, &drm_pagemap_unhold_list); +schedule_work (&drm_pagemap_work); +/* +* Here, either the provider device is still alive, since if called from +* page_free(), the caller is holding a reference on the dev_pagemap, +* or if called from drm_pagemap_put(), the direct caller is still alive. +* This ensures we can't race with THIS module unload. +*/ +} + +static void drm_pagemap_dev_unhold_work (struct work_struct *work) +{ +struct llist_node *node =llist_del_all (&drm_pagemap_unhold_list); +struct drm_pagemap_dev_hold *dev_hold, *next; + +/* +* Deferred release of drm_pagemap provider device and module. +* THIS module is kept alive during the release by the +* flush_work() in the drm_pagemap_exit() function. +*/ +llist_for_each_entry_safe (dev_hold, next, node, link) { +struct drm_device *drm = dev_hold->drm; +struct module *module = drm->driver->fops->owner; + +drm_dbg (drm,"Releasing reference on provider device and module.\n" ); +drm_dev_put (drm); +module_put (module); +kfree (dev_hold); + } +} + +static struct drm_pagemap_dev_hold * +drm_pagemap_dev_hold (struct drm_pagemap *dpagemap) +{ +struct drm_pagemap_dev_hold *dev_hold; +struct drm_device *drm = dpagemap->drm; + + dev_hold =kzalloc (sizeof (*dev_hold),GFP_KERNEL ); +if (!dev_hold) +return ERR_PTR (-ENOMEM ); + +init_llist_node (&dev_hold->link); + dev_hold->drm = drm; + (void )try_module_get (drm->driver->fops->owner); +drm_dev_get (drm); + +return dev_hold; }/** * drm_pagemap_create() - Create a struct drm_pagemap. -* @dev: Pointer to a struct device providing the device-private memory. +* @drm: Pointer to a struct drm_device providing the device-private memory. * @pagemap: Pointer to a pre-setup struct dev_pagemap providing the struct pages. * @ops: Pointer to the struct drm_pagemap_ops. *
@@ -568,20 +645,28 @@ static void drm_pagemap_release(struct kref *ref)* Error pointer on error. */ struct drm_pagemap * -drm_pagemap_create (struct device *dev, +drm_pagemap_create (struct drm_device *drm,struct dev_pagemap *pagemap,const struct drm_pagemap_ops *ops) {struct drm_pagemap *dpagemap =kzalloc (sizeof (*dpagemap),GFP_KERNEL ); +struct drm_pagemap_dev_hold *dev_hold;if (!dpagemap)return ERR_PTR (-ENOMEM );kref_init (&dpagemap->ref); - dpagemap->dev = dev; + dpagemap->drm = drm; dpagemap->ops = ops; dpagemap->pagemap = pagemap; + dev_hold =drm_pagemap_dev_hold (dpagemap); +if (IS_ERR (dev_hold)) { +kfree (dpagemap); +return ERR_CAST (dev_hold); + } + dpagemap->dev_hold = dev_hold; +return dpagemap; }EXPORT_SYMBOL (drm_pagemap_create);
@@ -933,3 +1018,11 @@ int drm_pagemap_populate_mm(struct drm_pagemap *dpagemap,return err; }EXPORT_SYMBOL (drm_pagemap_populate_mm); + +static void drm_pagemap_exit (void ) +{ +flush_work (&drm_pagemap_work); +if (WARN_ON (!llist_empty (&drm_pagemap_unhold_list))) +disable_work_sync (&drm_pagemap_work); +} +module_exit (drm_pagemap_exit);
drivers/gpu/drm/xe/xe_svm.c +13 -2
@@ -1457,7 +1457,7 @@ xe_drm_pagemap_device_map(struct drm_pagemap *dpagemap, unsigned int order, enum dma_data_direction dir) { -struct device *pgmap_dev = dpagemap->dev; +struct device *pgmap_dev = dpagemap->drm->dev;enum drm_interconnect_protocol prot;dma_addr_t addr;
@@ -1477,6 +1477,14 @@ static const struct drm_pagemap_ops xe_drm_pagemap_ops = { .populate_mm = xe_drm_pagemap_populate_mm, }; +static void xe_devm_release (void *data) +{ +struct xe_vram_region *vr = data; + +drm_pagemap_put (vr->dpagemap); + vr->dpagemap =NULL ; +} +/** * xe_devm_add: Remap and provide memmap backing for device memory * @tile: tile that the memory region belongs to
@@ -1502,7 +1510,7 @@ int xe_devm_add(struct xe_tile *tile, struct xe_vram_region *vr)return ret; } - vr->dpagemap =drm_pagemap_create (dev, &vr->pagemap, + vr->dpagemap =drm_pagemap_create (&xe->drm, &vr->pagemap, &xe_drm_pagemap_ops);if (IS_ERR (vr->dpagemap)) { drm_err(&xe->drm, "Failed to create drm_pagemap tile %d memory: %pe\n",
@@ -1510,6 +1518,9 @@ int xe_devm_add(struct xe_tile *tile, struct xe_vram_region *vr) ret =PTR_ERR (vr->dpagemap); goto out_no_dpagemap; } + ret =devm_add_action_or_reset (dev, xe_devm_release, vr); +if (ret) + goto out_no_dpagemap; vr->pagemap.type =MEMORY_DEVICE_PRIVATE ; vr->pagemap.range.start = res->start;
include/drm/drm_pagemap.h +7 -3
@@ -10,6 +10,7 @@struct dma_fence ;struct drm_pagemap ; +struct drm_pagemap_dev_hold ;struct drm_pagemap_zdd ;struct device ;
@@ -131,14 +132,17 @@ struct drm_pagemap_ops {* used for device p2p handshaking. * @ops: The struct drm_pagemap_ops. * @ref: Reference count. -* @dev: The struct drevice owning the device-private memory. +* @drm: The struct drm device owning the device-private memory. * @pagemap: Pointer to the underlying dev_pagemap. +* @dev_hold: Pointer to a struct drm_pagemap_dev_hold for +* device referencing. */ struct drm_pagemap {const struct drm_pagemap_ops *ops;struct kref ref; -struct device *dev; +struct drm_device *drm;struct dev_pagemap *pagemap; +struct drm_pagemap_dev_hold *dev_hold; };struct drm_pagemap_devmem ;
@@ -213,7 +217,7 @@ struct drm_pagemap_devmem_ops { struct dma_fence *pre_migrate_fence); }; -struct drm_pagemap *drm_pagemap_create (struct device *dev, +struct drm_pagemap *drm_pagemap_create (struct drm_device *drm,struct dev_pagemap *pagemap,const struct drm_pagemap_ops *ops);
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 7/24 drm/pagemap: Add a drm_pagemap cache and shrinker
In reply to Thomas HellströmPagemaps are costly to set up and tear down, and they consume a lot of system memory for the struct pages. Ideally they should be created only when needed.
Add a caching mechanism to allow doing just that: Create the drm_pagemaps when needed for migration. Keep them around to avoid destruction and re-creation latencies and destroy inactive/unused drm_pagemaps on memory pressure using a shrinker.
Only add the helper functions. They will be hooked up to the xe driver in the upcoming patch.
v2:
- Add lockdep checking for drm_pagemap_put(). (Matt Brost)
- Add a copyright notice. (Matt Brost)
--- drivers/gpu/drm/Makefile | 3 +- drivers/gpu/drm/drm_pagemap.c | 83 +++++- drivers/gpu/drm/drm_pagemap_util.c | 450 +++++++++++++++++++++++++++++ include/drm/drm_pagemap.h | 53 +++- include/drm/drm_pagemap_util.h | 42 +++ 5 files changed, 613 insertions(+), 18 deletions(-) create mode 100644 drivers/gpu/drm/drm_pagemap_util.c create mode 100644 include/drm/drm_pagemap_util.h
drivers/gpu/drm/Makefile +2 -1
@@ -109,7 +109,8 @@ obj-$(CONFIG_DRM_GPUVM) += drm_gpuvm.o drm_gpusvm_helper-y := \ drm_gpusvm.o\ - drm_pagemap.o + drm_pagemap.o\ + drm_pagemap_util.o obj-$(CONFIG_DRM_GPUSVM) += drm_gpusvm_helper.o obj-$(CONFIG_DRM_BUDDY) += drm_buddy.o
drivers/gpu/drm/drm_pagemap.c +69 -14
124 lines not on this page · raw message
drivers/gpu/drm/drm_pagemap_util.c new file +450 -0
450 lines not on this page · raw message
include/drm/drm_pagemap.h +50 -3
100 lines not on this page · raw message
include/drm/drm_pagemap_util.h new file +42 -0
42 lines not on this page · raw message
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 8/24 drm/xe: Use the drm_pagemap cache and shrinker
In reply to Thomas HellströmDefine a struct xe_pagemap that embeds all pagemap-related data used by xekmd, and use the drm_pagemap cache- and shrinker to manage lifetime.
--- drivers/gpu/drm/xe/xe_device.c | 6 + drivers/gpu/drm/xe/xe_device_types.h | 5 + drivers/gpu/drm/xe/xe_svm.c | 354 +++++++++++++++++++++------ drivers/gpu/drm/xe/xe_svm.h | 38 ++- drivers/gpu/drm/xe/xe_tile.c | 34 ++- drivers/gpu/drm/xe/xe_tile.h | 21 ++ drivers/gpu/drm/xe/xe_vm_types.h | 1 + drivers/gpu/drm/xe/xe_vram_types.h | 15 +- 8 files changed, 379 insertions(+), 95 deletions(-)
drivers/gpu/drm/xe/xe_device.c +6 -0
@@ -16,6 +16,7 @@#include <drm/drm_gem_ttm_helper.h> #include <drm/drm_ioctl.h> #include <drm/drm_managed.h> +#include <drm/drm_pagemap_util.h> #include <drm/drm_print.h> #include <uapi/drm/xe_drm.h>
@@ -63,6 +64,7 @@#include "xe_shrinker.h" #include "xe_survivability_mode.h" #include "xe_sriov.h" +#include "xe_svm.h" #include "xe_tile.h" #include "xe_ttm_stolen_mgr.h" #include "xe_ttm_sys_mgr.h"
@@ -472,6 +474,10 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,init_rwsem (&xe->usm.lock); + err =xe_pagemap_shrinker_create (xe); +if (err) + goto err; +xa_init_flags (&xe->usm.asid_to_vm,XA_FLAGS_ALLOC );if (IS_ENABLED (CONFIG_DRM_XE_DEBUG )) {
drivers/gpu/drm/xe/xe_device_types.h +5 -0
@@ -36,6 +36,7 @@#define TEST_VM_OPS_ERROR #endif +struct drm_pagemap_shrinker ;struct intel_display ;struct intel_dg_nvm_dev ;struct xe_ggtt ;
@@ -449,6 +450,10 @@ struct xe_device {#define XE_PAGEFAULT_QUEUE_COUNT 4/** @usm.pf_queue: Page fault queues */ struct xe_pagefault_queue pf_queue[XE_PAGEFAULT_QUEUE_COUNT ]; +#if IS_ENABLED (CONFIG_DRM_XE_PAGEMAP ) +/** @usm.pagemap_shrinker: Shrinker for unused pagemaps */ +struct drm_pagemap_shrinker *dpagemap_shrinker; +#endif } usm;/** @pinned: pinned BO state */
drivers/gpu/drm/xe/xe_svm.c +277 -77
508 lines not on this page · raw message
drivers/gpu/drm/xe/xe_svm.h +37 -1
@@ -27,8 +27,13 @@ static inline void *xe_svm_devm_owner(struct xe_device *xe)#define XE_INTERCONNECT_VRAM DRM_INTERCONNECT_DRIVER +struct drm_device ; +struct drm_file ; +struct xe_bo ;struct xe_gt ; +struct xe_device ; +struct xe_vram_region ;struct xe_tile ;struct xe_vm ;struct xe_vma ;
@@ -55,6 +60,22 @@ struct xe_svm_range {u8 tile_invalidated; }; +/** +* struct xe_pagemap - Manages xe device_private memory for SVM. +* @pagemap: The struct dev_pagemap providing the struct pages. +* @dpagemap: The drm_pagemap managing allocation and migration. +* @destroy_work: Handles asnynchronous destruction and caching. +* @hpa_base: The host physical address base for the managemd memory. +* @vr: Backpointer to the xe_vram region. +*/ +struct xe_pagemap { +struct dev_pagemap pagemap; +struct drm_pagemap dpagemap; +struct work_struct destroy_work; +resource_size_t hpa_base; +struct xe_vram_region *vr; +}; +/** * xe_svm_range_pages_valid() - SVM range pages valid * @range: SVM range
@@ -171,6 +192,10 @@ static inline unsigned long xe_svm_range_size(struct xe_svm_range *range)void xe_svm_flush (struct xe_vm *vm); +int xe_pagemap_shrinker_create (struct xe_device *xe); + +int xe_pagemap_cache_create (struct xe_tile *tile); +#else #include <linux/interval_tree.h> #include "xe_vm.h"
@@ -179,7 +204,7 @@ struct drm_pagemap_addr;struct drm_gpusvm_ctx ;struct drm_gpusvm_range ;struct xe_bo ; -struct xe_gt ; +struct xe_device ;struct xe_vm ;struct xe_vma ;struct xe_tile ;
@@ -346,6 +371,17 @@ struct drm_pagemap *xe_vma_resolve_pagemap(struct xe_vma *vma, struct xe_tile *tstatic inline void xe_svm_flush (struct xe_vm *vm) { } + +static inline int xe_pagemap_shrinker_create (struct xe_device *xe) +{ +return 0 ; +} + +static inline int xe_pagemap_cache_create (struct xe_tile *tile) +{ +return 0 ; +} +#define xe_svm_range_has_dma_mapping (...) false#endif /* CONFIG_DRM_XE_GPUSVM */
drivers/gpu/drm/xe/xe_tile.c +30 -4
@@ -6,6 +6,7 @@#include <linux/fault-inject.h> #include <drm/drm_managed.h> +#include <drm/drm_pagemap_util.h> #include "xe_bo.h" #include "xe_device.h"
@@ -180,17 +181,19 @@ ALLOW_ERROR_INJECTION(xe_tile_init_early, ERRNO); /* See xe_pci_probe() */int xe_tile_init_noalloc (struct xe_tile *tile) {struct xe_device *xe =tile_to_xe (tile); +int err;xe_wa_apply_tile_workarounds (tile); -if (xe->info.has_usm &&IS_DGFX (xe)) -xe_devm_add (tile, tile->mem.vram); + err =xe_pagemap_cache_create (tile); +if (err) +return err;if (IS_DGFX (xe) && !ttm_resource_manager_used (&tile->mem.vram->ttm.manager)) { -int err =xe_ttm_vram_mgr_init (xe, tile->mem.vram); - + err =xe_ttm_vram_mgr_init (xe, tile->mem.vram);if (err)return err; + xe->info.mem_region_mask |=BIT (tile->mem.vram->id) <<1 ; }
@@ -220,3 +223,26 @@ void xe_tile_migrate_wait(struct xe_tile *tile) {xe_migrate_wait (tile->migrate); } + +#if IS_ENABLED (CONFIG_DRM_XE_PAGEMAP ) +/** +* xe_tile_local_pagemap() - Return a pointer to the tile's local drm_pagemap if any +* @tile: The tile. +* +* Return: A pointer to the tile's local drm_pagemap, or NULL if local pagemap +* support has been compiled out. +*/ +struct drm_pagemap *xe_tile_local_pagemap (struct xe_tile *tile) +{ +struct drm_pagemap *dpagemap = +drm_pagemap_get_from_cache_if_active (xe_tile_to_vr (tile)->dpagemap_cache); + +if (dpagemap) { +xe_assert (tile_to_xe (tile),kref_read (&dpagemap->ref) >=2 ); +drm_pagemap_put (dpagemap); + } + +return dpagemap; +} +#endif +
drivers/gpu/drm/xe/xe_tile.h +21 -0
@@ -8,6 +8,7 @@#include "xe_device_types.h" +struct xe_pagemap ;struct xe_tile ;int xe_tile_init_early (struct xe_tile *tile,struct xe_device *xe,u8 id);
@@ -23,4 +24,24 @@ static inline bool xe_tile_is_root(struct xe_tile *tile) return tile->id == 0; } +/** +* xe_tile_to_vr() - Return the struct xe_vram_region pointer from a +* struct xe_tile pointer +* @tile: Pointer to the struct xe_tile. +* +* Return: Pointer to the struct xe_vram_region embedded in *@tile. +*/ +static inline struct xe_vram_region *xe_tile_to_vr (struct xe_tile *tile) +{ +return tile->mem.vram; +} + +#if IS_ENABLED (CONFIG_DRM_XE_PAGEMAP ) +struct drm_pagemap *xe_tile_local_pagemap (struct xe_tile *tile); +#else +static inline struct drm_pagemap *xe_tile_local_pagemap (struct xe_tile *tile) +{ +return NULL ; +} +#endif #endif
drivers/gpu/drm/xe/xe_vm_types.h +1 -0
@@ -191,6 +191,7 @@ struct xe_vm {*/ struct work_struct work; } garbage_collector; +struct xe_pagemap *pagemaps[XE_MAX_TILES_PER_DEVICE ]; } svm;struct xe_device *xe;
drivers/gpu/drm/xe/xe_vram_types.h +2 -13
@@ -66,19 +66,8 @@ struct xe_vram_region {#if IS_ENABLED (CONFIG_DRM_XE_PAGEMAP )/** @migrate: Back pointer to migrate */ struct xe_migrate *migrate; -/** @pagemap: Used to remap device memory as ZONE_DEVICE */ -struct dev_pagemap pagemap; -/** -* @dpagemap: The struct drm_pagemap of the ZONE_DEVICE memory -* pages of this tile. -*/ -struct drm_pagemap *dpagemap; -/** -* @hpa_base: base host physical address -* -* This is generated when remap device memory as ZONE_DEVICE -*/ -resource_size_t hpa_base; +/** @dpagemap_cache: drm_pagemap cache. */ +struct drm_pagemap_cache *dpagemap_cache;#endif };
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 9/24 drm/pagemap: Remove the drm_pagemap_create() interface
In reply to Thomas HellströmWith the drm_pagemap_init() interface, drm_pagemap_create() is not used anymore.
v2:
- Slightly more verbose commit message. (Matt Brost)
--- drivers/gpu/drm/drm_pagemap.c | 30 ------------------------------ 1 file changed, 30 deletions(-)
drivers/gpu/drm/drm_pagemap.c +0 -30
@@ -686,36 +686,6 @@ int drm_pagemap_init(struct drm_pagemap *dpagemap, }EXPORT_SYMBOL (drm_pagemap_init); -/** -* drm_pagemap_create() - Create a struct drm_pagemap. -* @drm: Pointer to a struct drm_device providing the device-private memory. -* @pagemap: Pointer to a pre-setup struct dev_pagemap providing the struct pages. -* @ops: Pointer to the struct drm_pagemap_ops. -* -* Allocate and initialize a struct drm_pagemap. -* -* Return: A refcounted pointer to a struct drm_pagemap on success. -* Error pointer on error. -*/ -struct drm_pagemap * -drm_pagemap_create (struct drm_device *drm, -struct dev_pagemap *pagemap, -const struct drm_pagemap_ops *ops) -{ -struct drm_pagemap *dpagemap =kzalloc (sizeof (*dpagemap),GFP_KERNEL ); -int err; - -if (!dpagemap) -return ERR_PTR (-ENOMEM ); - - err =drm_pagemap_init (dpagemap, pagemap, drm, ops); -if (err) -return ERR_PTR (err); - -return dpagemap; -} -EXPORT_SYMBOL (drm_pagemap_create); -/** * drm_pagemap_put() - Put a struct drm_pagemap reference * @dpagemap: Pointer to a struct drm_pagemap object.
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 10/24 drm/pagemap_util: Add a utility to assign an owner to a set of interconnected gpus
In reply to Thomas HellströmThe hmm_range_fault() and the migration helpers currently need a common "owner" to identify pagemaps and clients with fast interconnect. Add a drm_pagemap utility to setup such owners by registering drm_pagemaps, in a registry, and for each new drm_pagemap, query which existing drm_pagemaps have fast interconnects with the new drm_pagemap.
The "owner" scheme is limited in that it is static at drm_pagemap creation. Ideally one would want the owner to be adjusted at run-time, but that requires changes to hmm. If the proposed scheme becomes too limited, we need to revisit.
v2:
- Improve documentation of DRM_PAGEMAP_OWNER_LIST_DEFINE(). (Matt Brost)
--- drivers/gpu/drm/drm_pagemap_util.c | 118 +++++++++++++++++++++++++++++ include/drm/drm_pagemap_util.h | 50 ++++++++++++ 2 files changed, 168 insertions(+)
drivers/gpu/drm/drm_pagemap_util.c +118 -0
@@ -3,6 +3,8 @@* Copyright © 2025 Intel Corporation */ +#include <linux/slab.h> +#include <drm/drm_drv.h> #include <drm/drm_managed.h> #include <drm/drm_pagemap.h>
@@ -448,3 +450,119 @@ struct drm_pagemap_shrinker *drm_pagemap_shrinker_create_devm(struct drm_devicereturn shrinker; }EXPORT_SYMBOL (drm_pagemap_shrinker_create_devm); + +/** +* struct drm_pagemap_owner - Device interconnect group +* @kref: Reference count. +* +* A struct drm_pagemap_owner identifies a device interconnect group. +*/ +struct drm_pagemap_owner { +struct kref kref; +}; + +static void drm_pagemap_owner_release (struct kref *kref) +{ +kfree (container_of(kref ,struct drm_pagemap_owner ,kref )); +} + +/** +* drm_pagemap_release_owner() - Stop participating in an interconnect group +* @peer: Pointer to the struct drm_pagemap_peer used when joining the group +* +* Stop participating in an interconnect group. This function is typically +* called when a pagemap is removed to indicate that it doesn't need to +* be taken into account. +*/ +void drm_pagemap_release_owner (struct drm_pagemap_peer *peer) +{ +struct drm_pagemap_owner_list *owner_list = peer->list; + +if (!owner_list) +return ; + +mutex_lock (&owner_list->lock); +list_del (&peer->link); +kref_put (&peer->owner->kref, drm_pagemap_owner_release); + peer->owner =NULL ; +mutex_unlock (&owner_list->lock); +} +EXPORT_SYMBOL (drm_pagemap_release_owner); + +/** +* typedef interconnect_fn - Callback function to identify fast interconnects +* @peer1: First endpoint. +* @peer2: Second endpont. +* +* The function returns %true iff @peer1 and @peer2 have a fast interconnect. +* Note that this is symmetrical. The function has no notion of client and provider, +* which may not be sufficient in some cases. However, since the callback is intended +* to guide in providing common pagemap owners, the notion of a common owner to +* indicate fast interconnects would then have to change as well. +* +* Return: %true iff @peer1 and @peer2 have a fast interconnect. Otherwise @false. +*/ +typedef bool (*interconnect_fn )(struct drm_pagemap_peer *peer1,struct drm_pagemap_peer *peer2); + +/** +* drm_pagemap_acquire_owner() - Join an interconnect group +* @peer: A struct drm_pagemap_peer keeping track of the device interconnect +* @owner_list: Pointer to the owner_list, keeping track of all interconnects +* @has_interconnect: Callback function to determine whether two peers have a +* fast local interconnect. +* +* Repeatedly calls @has_interconnect for @peer and other peers on @owner_list to +* determine a set of peers for which @peer has a fast interconnect. That set will +* have common &struct drm_pagemap_owner, and upon successful return, @peer::owner +* will point to that struct, holding a reference, and @peer will be registered in +* @owner_list. If @peer doesn't have any fast interconnects to other @peers, a +* new unique &struct drm_pagemap_owner will be allocated for it, and that +* may be shared with other peers that, at a later point, are determined to have +* a fast interconnect with @peer. +* +* When @peer no longer participates in an interconnect group, +* drm_pagemap_release_owner() should be called to drop the reference on the +* struct drm_pagemap_owner. +* +* Return: %0 on success, negative error code on failure. +*/ +int drm_pagemap_acquire_owner (struct drm_pagemap_peer *peer, +struct drm_pagemap_owner_list *owner_list, +interconnect_fn has_interconnect) +{ +struct drm_pagemap_peer *cur_peer; +struct drm_pagemap_owner *owner =NULL ; +bool interconnect = false; + +mutex_lock (&owner_list->lock); +might_alloc (GFP_KERNEL ); +list_for_each_entry (cur_peer, &owner_list->peers, link) { +if (cur_peer->owner != owner) { +if (owner && interconnect) +break ; + owner = cur_peer->owner; + interconnect = true; + } +if (interconnect && !has_interconnect (peer, cur_peer)) + interconnect = false; + } + +if (!interconnect) { + owner =kmalloc (sizeof (*owner),GFP_KERNEL ); +if (!owner) { +mutex_unlock (&owner_list->lock); +return -ENOMEM ; + } +kref_init (&owner->kref); +list_add_tail (&peer->link, &owner_list->peers); + }else { +kref_get (&owner->kref); +list_add_tail (&peer->link, &cur_peer->link); + } + peer->owner = owner; + peer->list = owner_list; +mutex_unlock (&owner_list->lock); + +return 0 ; +} +EXPORT_SYMBOL (drm_pagemap_acquire_owner);
include/drm/drm_pagemap_util.h +50 -0
65 lines not on this page · raw message
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 11/24 drm/xe: Use the drm_pagemap_util helper to get a svm pagemap owner
In reply to Thomas HellströmRegister a driver-wide owner list, provide a callback to identify fast interconnects and use the drm_pagemap_util helper to allocate or reuse a suitable owner struct. For now we consider pagemaps on different tiles on the same device as having fast interconnect and thus the same owner.
v2:
- Fix up the error onion unwind in xe_pagemap_create(). (Matt Brost)
--- drivers/gpu/drm/xe/xe_svm.c | 64 ++++++++++++++++++++++++++++---- drivers/gpu/drm/xe/xe_svm.h | 24 +++++------- drivers/gpu/drm/xe/xe_userptr.c | 2 +- drivers/gpu/drm/xe/xe_vm.c | 2 +- drivers/gpu/drm/xe/xe_vm_types.h | 3 ++ 5 files changed, 71 insertions(+), 24 deletions(-)
drivers/gpu/drm/xe/xe_svm.c +56 -8
@@ -22,8 +22,17 @@#include "xe_vm_types.h" #include "xe_vram_types.h" +/* Identifies subclasses of struct drm_pagemap_peer */ +#define XE_PEER_PAGEMAP ((void *)0ul) +#define XE_PEER_VM ((void *)1ul) +static int xe_svm_get_pagemaps (struct xe_vm *vm); +void *xe_svm_private_page_owner (struct xe_vm *vm,bool force_smem) +{ +return force_smem ?NULL : vm->svm.peer.owner; +} +static bool xe_svm_range_in_vram (struct xe_svm_range *range) {/*
@@ -777,6 +786,25 @@ static void xe_svm_put_pagemaps(struct xe_vm *vm) } } +static struct device *xe_peer_to_dev (struct drm_pagemap_peer *peer) +{ +if (peer->private ==XE_PEER_PAGEMAP ) + return container_of(peer, struct xe_pagemap, peer)->dpagemap.drm->dev; + + return container_of(peer, struct xe_vm, svm.peer)->xe->drm.dev; +} + +static bool xe_has_interconnect (struct drm_pagemap_peer *peer1, +struct drm_pagemap_peer *peer2) +{ +struct device *dev1 =xe_peer_to_dev (peer1); +struct device *dev2 =xe_peer_to_dev (peer2); + +return dev1 == dev2; +} + +static DRM_PAGEMAP_OWNER_LIST_DEFINE (xe_owner_list); +/** * xe_svm_init() - SVM initialize * @vm: The VM.
@@ -795,10 +823,18 @@ int xe_svm_init(struct xe_vm *vm)INIT_WORK (&vm->svm.garbage_collector.work, xe_svm_garbage_collector_work_func); - err =xe_svm_get_pagemaps (vm); + vm->svm.peer.private =XE_PEER_VM ; + err =drm_pagemap_acquire_owner (&vm->svm.peer, &xe_owner_list, + xe_has_interconnect);if (err)return err; + err =xe_svm_get_pagemaps (vm); +if (err) { +drm_pagemap_release_owner (&vm->svm.peer); +return err; + } + err = drm_gpusvm_init(&vm->svm.gpusvm, "Xe SVM", &vm->xe->drm, current->mm, 0, vm->size, xe_modparam.svm_notifier_size * SZ_1M,
@@ -808,6 +844,7 @@ int xe_svm_init(struct xe_vm *vm)if (err) {xe_svm_put_pagemaps (vm); +drm_pagemap_release_owner (&vm->svm.peer);return err; } }else {
@@ -830,6 +867,7 @@ void xe_svm_close(struct xe_vm *vm)xe_assert (vm->xe,xe_vm_is_closed (vm));flush_work (&vm->svm.garbage_collector.work);xe_svm_put_pagemaps (vm); +drm_pagemap_release_owner (&vm->svm.peer); }/**
@@ -977,7 +1015,7 @@ static int xe_drm_pagemap_populate_mm(struct drm_pagemap *dpagemap,xe_pm_runtime_get_noresume (xe); err =drm_pagemap_migrate_to_devmem (&bo->devmem_allocation, mm, start, end, timeslice_ms, -xe_svm_devm_owner (xe)); + xpagemap->pagemap.owner);if (err)xe_svm_devmem_release (&bo->devmem_allocation);xe_bo_unlock (bo);
@@ -1092,7 +1130,6 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma, .devmem_only = need_vram && devmem_possible, .timeslice_ms = need_vram && devmem_possible ? vm->xe->atomic_svm_timeslice_ms : 0, - .device_private_page_owner = xe_svm_devm_owner(vm->xe), };struct xe_validation_ctx vctx;struct drm_exec exec;
@@ -1116,8 +1153,8 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,return err; dpagemap =xe_vma_resolve_pagemap (vma, tile); -if (!dpagemap && !ctx.devmem_only) - ctx.device_private_page_owner =NULL ; + ctx.device_private_page_owner = +xe_svm_private_page_owner (vm, !dpagemap && !ctx.devmem_only); range =xe_svm_range_find_or_insert (vm, fault_addr, vma, &ctx);if (IS_ERR (range))
@@ -1541,6 +1578,8 @@ static void xe_pagemap_destroy_work(struct work_struct *work) pagemap->range.end - pagemap->range.start + 1);drm_dev_exit (idx); } + +drm_pagemap_release_owner (&xpagemap->peer);kfree (xpagemap); }
@@ -1591,6 +1630,7 @@ static struct xe_pagemap *xe_pagemap_create(struct xe_device *xe, struct xe_vram dpagemap = &xpagemap->dpagemap;INIT_WORK (&xpagemap->destroy_work, xe_pagemap_destroy_work); xpagemap->vr = vr; + xpagemap->peer.private =XE_PEER_PAGEMAP ; err =drm_pagemap_init (dpagemap, pagemap, &xe->drm, &xe_drm_pagemap_ops);if (err)
@@ -1603,21 +1643,29 @@ static struct xe_pagemap *xe_pagemap_create(struct xe_device *xe, struct xe_vram goto out_err; } + err =drm_pagemap_acquire_owner (&xpagemap->peer, &xe_owner_list, + xe_has_interconnect); +if (err) + goto out_no_owner; + pagemap->type =MEMORY_DEVICE_PRIVATE ; pagemap->range.start = res->start; pagemap->range.end = res->end; pagemap->nr_range =1 ; - pagemap->owner =xe_svm_devm_owner (xe); + pagemap->owner = xpagemap->peer.owner; pagemap->ops =drm_pagemap_pagemap_ops_get (); addr =devm_memremap_pages (dev, pagemap);if (IS_ERR (addr)) { err =PTR_ERR (addr); -devm_release_mem_region (dev, res->start, res->end - res->start +1 ); - goto out_err; + goto out_no_pages; } xpagemap->hpa_base = res->start;return xpagemap; +out_no_pages: +drm_pagemap_release_owner (&xpagemap->peer); +out_no_owner: +devm_release_mem_region (dev, res->start, res->end - res->start +1 ); out_err:drm_pagemap_put (dpagemap);return ERR_PTR (err);
drivers/gpu/drm/xe/xe_svm.h +10 -14
@@ -6,24 +6,11 @@#ifndef _XE_SVM_H_#define _XE_SVM_H_ -struct xe_device ; - -/** -* xe_svm_devm_owner() - Return the owner of device private memory -* @xe: The xe device. -* -* Return: The owner of this device's device private memory to use in -* hmm_range_fault()- -*/ -static inline void *xe_svm_devm_owner (struct xe_device *xe) -{ -return xe; -} -#if IS_ENABLED (CONFIG_DRM_XE_GPUSVM )#include <drm/drm_pagemap.h> #include <drm/drm_gpusvm.h> +#include <drm/drm_pagemap_util.h> #define XE_INTERCONNECT_VRAM DRM_INTERCONNECT_DRIVER
@@ -65,6 +52,7 @@ struct xe_svm_range {* @pagemap: The struct dev_pagemap providing the struct pages. * @dpagemap: The drm_pagemap managing allocation and migration. * @destroy_work: Handles asnynchronous destruction and caching. +* @peer: Used for pagemap owner computation. * @hpa_base: The host physical address base for the managemd memory. * @vr: Backpointer to the xe_vram region. */
@@ -72,6 +60,7 @@ struct xe_pagemap {struct dev_pagemap pagemap;struct drm_pagemap dpagemap;struct work_struct destroy_work; +struct drm_pagemap_peer peer;resource_size_t hpa_base;struct xe_vram_region *vr; };
@@ -131,6 +120,8 @@ u8 xe_svm_ranges_zap_ptes_in_range(struct xe_vm *vm, u64 start, u64 end);struct drm_pagemap *xe_vma_resolve_pagemap (struct xe_vma *vma,struct xe_tile *tile); +void *xe_svm_private_page_owner (struct xe_vm *vm,bool force_smem); +/** * xe_svm_range_has_dma_mapping() - SVM range has DMA mapping * @range: SVM range
@@ -368,6 +359,11 @@ struct drm_pagemap *xe_vma_resolve_pagemap(struct xe_vma *vma, struct xe_tile *treturn NULL ; } +static inline void *xe_svm_private_page_owner (struct xe_vm *vm,bool force_smem) +{ +return NULL ; +} +static inline void xe_svm_flush (struct xe_vm *vm) { }
drivers/gpu/drm/xe/xe_userptr.c +1 -1
@@ -55,7 +55,7 @@ int xe_vma_userptr_pin_pages(struct xe_userptr_vma *uvma)struct xe_device *xe = vm->xe;struct drm_gpusvm_ctx ctx = { .read_only =xe_vma_read_only (vma), - .device_private_page_owner =xe_svm_devm_owner (xe), + .device_private_page_owner =xe_svm_private_page_owner (vm, false), .allow_mixed = true, };
drivers/gpu/drm/xe/xe_vm.c +1 -1
@@ -2908,7 +2908,7 @@ static int prefetch_ranges(struct xe_vm *vm, struct xe_vma_op *op) ctx.read_only =xe_vma_read_only (vma); ctx.devmem_possible = devmem_possible; ctx.check_pages_threshold = devmem_possible ?SZ_64K :0 ; - ctx.device_private_page_owner =xe_svm_devm_owner (vm->xe); + ctx.device_private_page_owner =xe_svm_private_page_owner (vm, !tile);/* TODO: Threading the migration */ xa_for_each (&op->prefetch_range.range, i, svm_range) {
drivers/gpu/drm/xe/xe_vm_types.h +3 -0
@@ -8,6 +8,7 @@#include <drm/drm_gpusvm.h> #include <drm/drm_gpuvm.h> +#include <drm/drm_pagemap_util.h> #include <linux/dma-resv.h> #include <linux/kref.h>
@@ -192,6 +193,8 @@ struct xe_vm {struct work_struct work; } garbage_collector;struct xe_pagemap *pagemaps[XE_MAX_TILES_PER_DEVICE ]; +/** @svm.peer: Used for pagemap connectivity computations. */ +struct drm_pagemap_peer peer; } svm;struct xe_device *xe;
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 12/24 drm/xe: Pass a drm_pagemap pointer around with the memory advise attributes
In reply to Thomas HellströmAs a consequence, struct xe_vma_mem_attr() can't simply be assigned or freed without taking the reference count of individual members into account. Also add helpers to do that.
v2:
- Move some calls to xe_vma_mem_attr_fini() to xe_vma_free(). (Matt Brost) v3:
- Rebase.
--- drivers/gpu/drm/xe/xe_svm.c | 12 +++++++---- drivers/gpu/drm/xe/xe_vm.c | 34 +++++++++++++++++++++++++----- drivers/gpu/drm/xe/xe_vm.h | 1 + drivers/gpu/drm/xe/xe_vm_madvise.c | 1 + drivers/gpu/drm/xe/xe_vm_types.h | 9 ++++++++ 5 files changed, 48 insertions(+), 9 deletions(-)
drivers/gpu/drm/xe/xe_svm.c +8 -4
@@ -290,10 +290,14 @@ static int __xe_svm_garbage_collector(struct xe_vm *vm,static void xe_vma_set_default_attributes (struct xe_vma *vma) { - vma->attr.preferred_loc.devmem_fd =DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE ; - vma->attr.preferred_loc.migration_policy =DRM_XE_MIGRATE_ALL_PAGES ; - vma->attr.pat_index = vma->attr.default_pat_index; - vma->attr.atomic_access =DRM_XE_ATOMIC_UNDEFINED ; +struct xe_vma_mem_attr default_attr = { + .preferred_loc.devmem_fd =DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE , + .preferred_loc.migration_policy =DRM_XE_MIGRATE_ALL_PAGES , + .pat_index = vma->attr.default_pat_index, + .atomic_access =DRM_XE_ATOMIC_UNDEFINED , + }; + +xe_vma_mem_attr_copy (&vma->attr, &default_attr); }static int xe_svm_range_set_default_attr (struct xe_vm *vm,u64 start,u64 end)
drivers/gpu/drm/xe/xe_vm.c +29 -5
@@ -957,14 +957,37 @@ struct dma_fence *xe_vm_range_unbind(struct xe_vm *vm,return fence; } +static void xe_vma_mem_attr_fini (struct xe_vma_mem_attr *attr) +{ +drm_pagemap_put (attr->preferred_loc.dpagemap); +} +static void xe_vma_free (struct xe_vma *vma) { +xe_vma_mem_attr_fini (&vma->attr); +if (xe_vma_is_userptr (vma))kfree (to_userptr_vma (vma));else kfree (vma); } +/** +* xe_vma_mem_attr_copy() - copy an xe_vma_mem_attr structure. +* @to: Destination. +* @from: Source. +* +* Copies an xe_vma_mem_attr structure taking care to get reference +* counting of individual members right. +*/ +void xe_vma_mem_attr_copy (struct xe_vma_mem_attr *to,struct xe_vma_mem_attr *from) +{ +xe_vma_mem_attr_fini (to); + *to = *from; +if (to->preferred_loc.dpagemap) +drm_pagemap_get (to->preferred_loc.dpagemap); +} + static struct xe_vma *xe_vma_create(struct xe_vm *vm, struct xe_bo *bo, u64 bo_offset_or_userptr,
@@ -1015,8 +1038,7 @@ static struct xe_vma *xe_vma_create(struct xe_vm *vm,if (vm->xe->info.has_atomic_enable_pte_bit) vma->gpuva.flags |=XE_VMA_ATOMIC_PTE_BIT ; - vma->attr = *attr; - +xe_vma_mem_attr_copy (&vma->attr, attr);if (bo) {struct drm_gpuvm_bo *vm_bo;
@@ -4324,7 +4346,7 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,struct drm_gpuva_op *__op;unsigned int vma_flags =0 ;bool remap_op = false; -struct xe_vma_mem_attr tmp_attr; +struct xe_vma_mem_attr tmp_attr = {};u16 default_pat;int err;
@@ -4419,7 +4441,7 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,* VMA, so they can be assigned to newly MAP created vma. */ if (is_madvise) - tmp_attr = vma->attr; +xe_vma_mem_attr_copy (&tmp_attr, &vma->attr);xe_vma_destroy (gpuva_to_vma (op->base.remap.unmap->va),NULL ); }else if (__op->op ==DRM_GPUVA_OP_MAP ) {
@@ -4429,12 +4451,13 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,* copy them to new vma. */ if (is_madvise) - vma->attr = tmp_attr; +xe_vma_mem_attr_copy (&vma->attr, &tmp_attr); } }xe_vm_unlock (vm);drm_gpuva_ops_free (&vm->gpuvm, ops); +xe_vma_mem_attr_fini (&tmp_attr);return 0 ; unwind_ops:
@@ -4532,3 +4555,4 @@ int xe_vm_alloc_cpu_addr_mirror_vma(struct xe_vm *vm, uint64_t start, uint64_t rreturn xe_vm_alloc_vma (vm, &map_req, false); } +
drivers/gpu/drm/xe/xe_vm.h +1 -0
@@ -414,4 +414,5 @@ static inline struct drm_exec *xe_vm_validation_exec(struct xe_vm *vm)#define xe_vm_has_valid_gpu_mapping (tile, tile_present, tile_invalidated) \ ((READ_ONCE(tile_present) & ~READ_ONCE(tile_invalidated)) & BIT((tile)->id)) +void xe_vma_mem_attr_copy (struct xe_vma_mem_attr *to,struct xe_vma_mem_attr *from);#endif
drivers/gpu/drm/xe/xe_vm_madvise.c +1 -0
@@ -95,6 +95,7 @@ static void madvise_preferred_mem_loc(struct xe_device *xe, struct xe_vm *vm,*/ vmas[i]->attr.preferred_loc.migration_policy = op->preferred_mem_loc.migration_policy; + vmas[i]->attr.preferred_loc.dpagemap =NULL ; } } }
drivers/gpu/drm/xe/xe_vm_types.h +9 -0
@@ -20,6 +20,8 @@#include "xe_range_fence.h" #include "xe_userptr.h" +struct drm_pagemap ; +struct xe_bo ;struct xe_svm_range ;struct xe_sync_entry ;
@@ -65,6 +67,13 @@ struct xe_vma_mem_attr {* closest device memory respectively. */ u32 devmem_fd; +/** +* @preferred_loc.dpagemap: Reference-counted pointer to the drm_pagemap preferred +* for migration on a SVM page-fault. The pointer is protected by the +* vm lock, and is %NULL if @devmem_fd should be consulted for special +* values. +*/ +struct drm_pagemap *dpagemap; } preferred_loc;/**
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 13/24 drm/xe: Use the vma attibute drm_pagemap to select where to migrate
In reply to Thomas HellströmHonor the drm_pagemap vma attribute when migrating SVM pages. Ensure that when the desired placement is validated as device memory, that we also check that the requested drm_pagemap is consistent with the current.
v2:
- Initialize a struct drm_pagemap pointer to NULL that could otherwise be dereferenced uninitialized. (CI)
- Remove a redundant assignment (Matt Brost)
- Slightly improved commit message (Matt Brost)
- Extended drm_pagemap validation.
v3:
- Fix a compilation error if CONFIG_DRM_GPUSVM is not enabled. (kernel test robot <[email protected]>)
--- drivers/gpu/drm/xe/xe_svm.c | 86 ++++++++++++++++++++------------ drivers/gpu/drm/xe/xe_svm.h | 14 +++--- drivers/gpu/drm/xe/xe_vm.c | 24 ++++----- drivers/gpu/drm/xe/xe_vm_types.h | 6 +-- 4 files changed, 72 insertions(+), 58 deletions(-)
drivers/gpu/drm/xe/xe_svm.c +53 -33
@@ -887,13 +887,34 @@ void xe_svm_fini(struct xe_vm *vm)drm_gpusvm_fini (&vm->svm.gpusvm); } +static bool xe_svm_range_has_pagemap_locked (const struct xe_svm_range *range, +const struct drm_pagemap *dpagemap) +{ +return range->base.pages.dpagemap == dpagemap; +} + +static bool xe_svm_range_has_pagemap (struct xe_svm_range *range, +const struct drm_pagemap *dpagemap) +{ +struct xe_vm *vm =range_to_vm (&range->base); +bool ret; + +xe_svm_notifier_lock (vm); + ret =xe_svm_range_has_pagemap_locked (range, dpagemap); +xe_svm_notifier_unlock (vm); + +return ret; +} +static bool xe_svm_range_is_valid (struct xe_svm_range *range,struct xe_tile *tile, -bool devmem_only) +bool devmem_only, +const struct drm_pagemap *dpagemap) + {return (xe_vm_has_valid_gpu_mapping (tile, range->tile_present, range->tile_invalidated) && - (!devmem_only ||xe_svm_range_in_vram (range))); + (!devmem_only ||xe_svm_range_has_pagemap (range, dpagemap))); }/** xe_svm_range_migrate_to_smem() - Move range pages from VRAM to SMEM
@@ -914,7 +935,8 @@ void xe_svm_range_migrate_to_smem(struct xe_vm *vm, struct xe_svm_range *range)* @vm: xe_vm pointer * @range: Pointer to the SVM range structure * @tile_mask: Mask representing the tiles to be checked -* @devmem_preferred : if true range needs to be in devmem +* @dpagemap: if !%NULL, the range is expected to be present +* in device memory identified by this parameter. * * The xe_svm_range_validate() function checks if a range is * valid and located in the desired memory region.
@@ -923,14 +945,15 @@ void xe_svm_range_migrate_to_smem(struct xe_vm *vm, struct xe_svm_range *range)*/ bool xe_svm_range_validate (struct xe_vm *vm,struct xe_svm_range *range, -u8 tile_mask,bool devmem_preferred) +u8 tile_mask,const struct drm_pagemap *dpagemap) {bool ret;xe_svm_notifier_lock (vm); - ret = (range->tile_present & ~range->tile_invalidated & tile_mask) == tile_mask && - (devmem_preferred == range->base.pages.flags.has_devmem_pages); + ret = (range->tile_present & ~range->tile_invalidated & tile_mask) == tile_mask; +if (dpagemap) + ret = ret &&xe_svm_range_has_pagemap_locked (range, dpagemap);xe_svm_notifier_unlock (vm);
@@ -1044,22 +1067,22 @@ static bool supports_4K_migration(struct xe_device *xe)* xe_svm_range_needs_migrate_to_vram() - SVM range needs migrate to VRAM or not * @range: SVM range for which migration needs to be decided * @vma: vma which has range -* @preferred_region_is_vram: preferred region for range is vram +* @dpagemap: The preferred struct drm_pagemap to migrate to. * * Return: True for range needing migration and migration is supported else false */ bool xe_svm_range_needs_migrate_to_vram (struct xe_svm_range *range,struct xe_vma *vma, -bool preferred_region_is_vram) +const struct drm_pagemap *dpagemap) {struct xe_vm *vm =range_to_vm (&range->base);u64 range_size =xe_svm_range_size (range); -if (!range->base.pages.flags.migrate_devmem || !preferred_region_is_vram) +if (!range->base.pages.flags.migrate_devmem || !dpagemap)return false;xe_assert (vm->xe,IS_DGFX (vm->xe)); -if (xe_svm_range_in_vram (range)) { +if (xe_svm_range_has_pagemap (range, dpagemap)) {drm_dbg (&vm->xe->drm,"Range is already in VRAM\n" );return false; }
@@ -1156,9 +1179,9 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,if (err)return err; - dpagemap =xe_vma_resolve_pagemap (vma, tile); - ctx.device_private_page_owner = -xe_svm_private_page_owner (vm, !dpagemap && !ctx.devmem_only); + dpagemap = ctx.devmem_only ?xe_tile_local_pagemap (tile) : +xe_vma_resolve_pagemap (vma, tile); + ctx.device_private_page_owner =xe_svm_private_page_owner (vm, !dpagemap); range =xe_svm_range_find_or_insert (vm, fault_addr, vma, &ctx);if (IS_ERR (range))
@@ -1171,7 +1194,7 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma, goto out; } -if (xe_svm_range_is_valid (range, tile, ctx.devmem_only)) { +if (xe_svm_range_is_valid (range, tile, ctx.devmem_only, dpagemap)) {xe_svm_range_valid_fault_count_stats_incr (gt, range);range_debug (range,"PAGE FAULT - VALID" ); goto out;
@@ -1180,16 +1203,11 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,range_debug (range,"PAGE FAULT" );if (--migrate_try_count >=0 && -xe_svm_range_needs_migrate_to_vram (range, vma, !!dpagemap || ctx.devmem_only)) { +xe_svm_range_needs_migrate_to_vram (range, vma, dpagemap)) {ktime_t migrate_start =xe_gt_stats_ktime_get (); -/* TODO : For multi-device dpagemap will be used to find the -* remote tile and remote device. Will need to modify -* xe_svm_alloc_vram to use dpagemap for future multi-device -* support. -*/ xe_svm_range_migrate_count_stats_incr (gt, range); - err =xe_svm_alloc_vram (tile, range, &ctx); + err =xe_svm_alloc_vram (range, &ctx, dpagemap);xe_svm_range_migrate_us_stats_incr (gt, range, migrate_start); ctx.timeslice_ms <<=1 ;/* Double timeslice if we have to retry */ if (err) {
@@ -1506,7 +1524,13 @@ u8 xe_svm_ranges_zap_ptes_in_range(struct xe_vm *vm, u64 start, u64 end)*/ struct drm_pagemap *xe_vma_resolve_pagemap (struct xe_vma *vma,struct xe_tile *tile) { -s32 fd = (s32 )vma->attr.preferred_loc.devmem_fd; +struct drm_pagemap *dpagemap = vma->attr.preferred_loc.dpagemap; +s32 fd; + +if (dpagemap) +return dpagemap; + + fd = (s32 )vma->attr.preferred_loc.devmem_fd;if (fd ==DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM )return NULL ;
@@ -1514,28 +1538,24 @@ struct drm_pagemap *xe_vma_resolve_pagemap(struct xe_vma *vma, struct xe_tile *tif (fd ==DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE )return IS_DGFX (tile_to_xe (tile)) ?xe_tile_local_pagemap (tile) :NULL ; -/* TODO: Support multi-device with drm_pagemap_from_fd(fd) */ return NULL ; }/** * xe_svm_alloc_vram()- Allocate device memory pages for range, * migrating existing data. -* @tile: tile to allocate vram from * @range: SVM range * @ctx: DRM GPU SVM context +* @dpagemap: The struct drm_pagemap representing the memory to allocate. * * Return: 0 on success, error code on failure. */ -int xe_svm_alloc_vram (struct xe_tile *tile,struct xe_svm_range *range, -const struct drm_gpusvm_ctx *ctx) +int xe_svm_alloc_vram (struct xe_svm_range *range,const struct drm_gpusvm_ctx *ctx, +struct drm_pagemap *dpagemap) { -struct drm_pagemap *dpagemap; - -xe_assert (tile_to_xe (tile), range->base.pages.flags.migrate_devmem); +xe_assert (range_to_vm (&range->base)->xe, range->base.pages.flags.migrate_devmem);range_debug (range,"ALLOCATE VRAM" ); - dpagemap =xe_tile_local_pagemap (tile); return drm_pagemap_populate_mm(dpagemap, xe_svm_range_start(range), xe_svm_range_end(range), range->base.gpusvm->mm,
@@ -1805,9 +1825,9 @@ int xe_pagemap_cache_create(struct xe_tile *tile)return 0 ; } -int xe_svm_alloc_vram (struct xe_tile *tile, -struct xe_svm_range *range, -const struct drm_gpusvm_ctx *ctx) +int xe_svm_alloc_vram (struct xe_svm_range *range, +const struct drm_gpusvm_ctx *ctx, +struct drm_pagemap *dpagemap) {return -EOPNOTSUPP ; }
drivers/gpu/drm/xe/xe_svm.h +7 -7
@@ -94,8 +94,8 @@ int xe_svm_bo_evict(struct xe_bo *bo);void xe_svm_range_debug (struct xe_svm_range *range,const char *operation); -int xe_svm_alloc_vram (struct xe_tile *tile,struct xe_svm_range *range, -const struct drm_gpusvm_ctx *ctx); +int xe_svm_alloc_vram (struct xe_svm_range *range,const struct drm_gpusvm_ctx *ctx, +struct drm_pagemap *dpagemap);struct xe_svm_range *xe_svm_range_find_or_insert (struct xe_vm *vm,u64 addr,struct xe_vma *vma,struct drm_gpusvm_ctx *ctx);
@@ -104,13 +104,13 @@ int xe_svm_range_get_pages(struct xe_vm *vm, struct xe_svm_range *range, struct drm_gpusvm_ctx *ctx);bool xe_svm_range_needs_migrate_to_vram (struct xe_svm_range *range,struct xe_vma *vma, -bool preferred_region_is_vram); +const struct drm_pagemap *dpagemap);void xe_svm_range_migrate_to_smem (struct xe_vm *vm,struct xe_svm_range *range);bool xe_svm_range_validate (struct xe_vm *vm,struct xe_svm_range *range, -u8 tile_mask,bool devmem_preferred); +u8 tile_mask,const struct drm_pagemap *dpagemap);u64 xe_svm_find_vma_start (struct xe_vm *vm,u64 addr,u64 end,struct xe_vma *vma);
@@ -276,8 +276,8 @@ void xe_svm_range_debug(struct xe_svm_range *range, const char *operation) }static inline int -xe_svm_alloc_vram (struct xe_tile *tile,struct xe_svm_range *range, -const struct drm_gpusvm_ctx *ctx) +xe_svm_alloc_vram (struct xe_svm_range *range,const struct drm_gpusvm_ctx *ctx, +struct drm_pagemap *dpagemap) {return -EOPNOTSUPP ; }
@@ -318,7 +318,7 @@ static inline unsigned long xe_svm_range_size(struct xe_svm_range *range)static inline bool xe_svm_range_needs_migrate_to_vram (struct xe_svm_range *range,struct xe_vma *vma, -u32 region) +const struct drm_pagemap *dpagemap) {return false; }
drivers/gpu/drm/xe/xe_vm.c +9 -15
@@ -2342,7 +2342,7 @@ vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_vma_ops *vops,struct xe_tile *tile;struct xe_svm_range *svm_range;struct drm_gpusvm_ctx ctx = {}; -struct drm_pagemap *dpagemap; +struct drm_pagemap *dpagemap =NULL ;u8 id, tile_mask =0 ;u32 i;
@@ -2360,23 +2360,17 @@ vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_vma_ops *vops,xa_init_flags (&op->prefetch_range.range,XA_FLAGS_ALLOC ); op->prefetch_range.ranges_count =0 ; - tile =NULL ;if (prefetch_region ==DRM_XE_CONSULT_MEM_ADVISE_PREF_LOC ) { dpagemap =xe_vma_resolve_pagemap (vma,xe_device_get_root_tile (vm->xe)); -/* -* TODO: Once multigpu support is enabled will need -* something to dereference tile from dpagemap. -*/ -if (dpagemap) - tile =xe_device_get_root_tile (vm->xe); }else if (prefetch_region) { tile = &vm->xe->tiles[region_to_mem_type[prefetch_region] -XE_PL_VRAM0 ]; + dpagemap =xe_tile_local_pagemap (tile); } - op->prefetch_range.tile = tile; + op->prefetch_range.dpagemap = dpagemap; alloc_next_range: svm_range =xe_svm_range_find_or_insert (vm, addr, vma, &ctx);
@@ -2395,7 +2389,7 @@ vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_vma_ops *vops, goto unwind_prefetch_ops; } -if (xe_svm_range_validate (vm, svm_range, tile_mask, !!tile)) { +if (xe_svm_range_validate (vm, svm_range, tile_mask, dpagemap)) {xe_svm_range_debug (svm_range,"PREFETCH - RANGE IS VALID" ); goto check_next_range; }
@@ -2917,7 +2911,7 @@ static int prefetch_ranges(struct xe_vm *vm, struct xe_vma_op *op) {bool devmem_possible =IS_DGFX (vm->xe) &&IS_ENABLED (CONFIG_DRM_XE_PAGEMAP );struct xe_vma *vma =gpuva_to_vma (op->base.prefetch.va); -struct xe_tile *tile = op->prefetch_range.tile; +struct drm_pagemap *dpagemap = op->prefetch_range.dpagemap;int err =0 ;struct xe_svm_range *svm_range;
@@ -2930,15 +2924,15 @@ static int prefetch_ranges(struct xe_vm *vm, struct xe_vma_op *op) ctx.read_only =xe_vma_read_only (vma); ctx.devmem_possible = devmem_possible; ctx.check_pages_threshold = devmem_possible ?SZ_64K :0 ; - ctx.device_private_page_owner =xe_svm_private_page_owner (vm, !tile); + ctx.device_private_page_owner =xe_svm_private_page_owner (vm, !dpagemap);/* TODO: Threading the migration */ xa_for_each (&op->prefetch_range.range, i, svm_range) { -if (!tile) +if (!dpagemap)xe_svm_range_migrate_to_smem (vm, svm_range); -if (xe_svm_range_needs_migrate_to_vram (svm_range, vma, !!tile)) { - err =xe_svm_alloc_vram (tile, svm_range, &ctx); +if (xe_svm_range_needs_migrate_to_vram (svm_range, vma, dpagemap)) { + err =xe_svm_alloc_vram (svm_range, &ctx, dpagemap);if (err) {drm_dbg (&vm->xe->drm,"VRAM allocation failed, retry from userspace, asid=%u, gpusvm=%p, errno=%pe\n" , vm->usm.asid, &vm->svm.gpusvm,ERR_PTR (err));
drivers/gpu/drm/xe/xe_vm_types.h +3 -3
@@ -408,10 +408,10 @@ struct xe_vma_op_prefetch_range {/** @ranges_count: number of svm ranges to map */ u32 ranges_count;/** -* @tile: Pointer to the tile structure containing memory to prefetch. -* NULL if prefetch requested region is smem +* @dpagemap: Pointer to the dpagemap structure containing memory to prefetch. +* NULL if prefetch requested region is smem */ -struct xe_tile *tile; +struct drm_pagemap *dpagemap; };/** enum xe_vma_op_flags - flags for VMA operation */
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 14/24 drm/xe: Simplify madvise_preferred_mem_loc()
In reply to Thomas HellströmSimplify madvise_preferred_mem_loc by removing repetitive patterns in favour of local variables.
--- drivers/gpu/drm/xe/xe_vm_madvise.c | 21 +++++++++++---------- drivers/gpu/drm/xe/xe_vm_types.h | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-)
drivers/gpu/drm/xe/xe_vm_madvise.c +11 -10
@@ -81,21 +81,22 @@ static void madvise_preferred_mem_loc(struct xe_device *xe, struct xe_vm *vm,xe_assert (vm->xe, op->type ==DRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC );for (i =0 ; i < num_vmas; i++) { +struct xe_vma *vma = vmas[i]; +struct xe_vma_preferred_loc *loc = &vma->attr.preferred_loc; +/*TODO: Extend attributes to bo based vmas */ -if ((vmas[i]->attr.preferred_loc.devmem_fd == op->preferred_mem_loc.devmem_fd && - vmas[i]->attr.preferred_loc.migration_policy == - op->preferred_mem_loc.migration_policy) || - !xe_vma_is_cpu_addr_mirror (vmas[i])) { - vmas[i]->skip_invalidation = true; +if ((loc->devmem_fd == op->preferred_mem_loc.devmem_fd && + loc->migration_policy == op->preferred_mem_loc.migration_policy) || + !xe_vma_is_cpu_addr_mirror (vma)) { + vma->skip_invalidation = true; }else { - vmas[i]->skip_invalidation = false; - vmas[i]->attr.preferred_loc.devmem_fd = op->preferred_mem_loc.devmem_fd; + vma->skip_invalidation = false; + loc->devmem_fd = op->preferred_mem_loc.devmem_fd;/* Till multi-device support is not added migration_policy * is of no use and can be ignored. */ - vmas[i]->attr.preferred_loc.migration_policy = - op->preferred_mem_loc.migration_policy; - vmas[i]->attr.preferred_loc.dpagemap =NULL ; + loc->migration_policy = op->preferred_mem_loc.migration_policy; + loc->dpagemap =NULL ; } } }
drivers/gpu/drm/xe/xe_vm_types.h +1 -1
@@ -56,7 +56,7 @@ struct xe_vm_pgtable_update_op;*/ struct xe_vma_mem_attr {/** @preferred_loc: preferred memory_location */ -struct { +struct xe_vma_preferred_loc {/** @preferred_loc.migration_policy: Pages migration policy */ u32 migration_policy;
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 15/24 drm/xe/uapi: Extend the madvise functionality to support foreign pagemap placement for svm
In reply to Thomas HellströmUse device file descriptors and regions to represent pagemaps on foreign or local devices.
The underlying files are type-checked at madvise time, and references are kept on the drm_pagemap as long as there is are madvises pointing to it.
Extend the madvise preferred_location UAPI to support the region instance to identify the foreign placement.
v2:
- Improve UAPI documentation. (Matt Brost)
- Sanitize preferred_mem_loc.region_instance madvise. (Matt Brost)
- Clarify madvise drm_pagemap vs xe_pagemap refcounting. (Matt Brost)
- Don't allow a foreign drm_pagemap madvise without a fast interconnect.
v3:
- Add a comment about reference-counting in xe_devmem_open() and remove the reference-count get-and-put. (Matt Brost)
--- drivers/gpu/drm/xe/xe_device.c | 14 +++++ drivers/gpu/drm/xe/xe_device.h | 2 + drivers/gpu/drm/xe/xe_svm.c | 75 ++++++++++++++++++++++++++ drivers/gpu/drm/xe/xe_svm.h | 7 +++ drivers/gpu/drm/xe/xe_vm_madvise.c | 86 ++++++++++++++++++++++++++---- include/uapi/drm/xe_drm.h | 18 +++++-- 6 files changed, 188 insertions(+), 14 deletions(-)
drivers/gpu/drm/xe/xe_device.c +14 -0
@@ -378,6 +378,20 @@ static const struct file_operations xe_driver_fops = { .fop_flags = FOP_UNSIGNED_OFFSET, }; +/** +* xe_is_xe_file() - Is the file an xe device file? +* @file: The file. +* +* Checks whether the file is opened against +* an xe device. +* +* Return: %true if an xe file, %false if not. +*/ +bool xe_is_xe_file (const struct file *file) +{ +return file->f_op == &xe_driver_fops; +} +static struct drm_driver driver = {/* Don't use MTRRs here; the Xserver or userspace app should * deal with them for Intel hardware.
drivers/gpu/drm/xe/xe_device.h +2 -0
@@ -200,6 +200,8 @@ void xe_file_put(struct xe_file *xef);int xe_is_injection_active (void ); +bool xe_is_xe_file (const struct file *file); +/* * Occasionally it is seen that the G2H worker starts running after a delay of more than * a second even after being queued and activated by the Linux workqueue subsystem. This
drivers/gpu/drm/xe/xe_svm.c +75 -0
87 lines not on this page · raw message
drivers/gpu/drm/xe/xe_svm.h +7 -0
@@ -187,6 +187,8 @@ int xe_pagemap_shrinker_create(struct xe_device *xe);int xe_pagemap_cache_create (struct xe_tile *tile); +struct drm_pagemap *xe_drm_pagemap_from_fd (int fd,u32 region_instance); +#else #include <linux/interval_tree.h> #include "xe_vm.h"
@@ -378,6 +380,11 @@ static inline int xe_pagemap_cache_create(struct xe_tile *tile) return 0; } +static inline struct drm_pagemap *xe_drm_pagemap_from_fd (int fd,u32 region_instance) +{ +return ERR_PTR (-ENOENT ); +} +#define xe_svm_range_has_dma_mapping (...) false#endif /* CONFIG_DRM_XE_GPUSVM */
drivers/gpu/drm/xe/xe_vm_madvise.c +75 -11
172 lines not on this page · raw message
include/uapi/drm/xe_drm.h +15 -3
@@ -2123,7 +2123,13 @@ struct drm_xe_madvise {struct {#define DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE 0#define DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM -1 -/** @preferred_mem_loc.devmem_fd: fd for preferred loc */ +/** +* @preferred_mem_loc.devmem_fd: +* Device file-descriptor of the device where the +* preferred memory is located, or one of the +* above special values. Please also see +* @preferred_mem_loc.region_instance below. +*/ __u32 devmem_fd;#define DRM_XE_MIGRATE_ALL_PAGES 0
@@ -2131,8 +2137,14 @@ struct drm_xe_madvise {/** @preferred_mem_loc.migration_policy: Page migration policy */ __u16 migration_policy; -/** @preferred_mem_loc.pad : MBZ */ -__u16 pad; +/** +* @preferred_mem_loc.region_instance : Region instance. +* MBZ if @devmem_fd <= &DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE. +* Otherwise should point to the desired device +* VRAM instance of the device indicated by +* @preferred_mem_loc.devmem_fd. +*/ +__u16 region_instance;/** @preferred_mem_loc.reserved : Reserved */ __u64 reserved;
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 16/24 drm/xe: Support pcie p2p dma as a fast interconnect
In reply to Thomas HellströmMimic the dma-buf method using dma_[map|unmap]_resource to map for pcie-p2p dma.
There's an ongoing area of work upstream to sort out how this best should be done. One method proposed is to add an additional pci_p2p_dma_pagemap aliasing the device_private pagemap and use the corresponding pci_p2p_dma_pagemap page as input for dma_map_page(). However, that would incur double the amount of memory and latency to set up the drm_pagemap and given the huge amount of memory present on modern GPUs, that would really not work. Hence the simple approach used in this patch.
v2:
- Simplify xe_page_to_pcie(). (Matt Brost)
--- drivers/gpu/drm/xe/xe_svm.c | 34 +++++++++++++++++++++++++++++++--- drivers/gpu/drm/xe/xe_svm.h | 1 + 2 files changed, 32 insertions(+), 3 deletions(-)
drivers/gpu/drm/xe/xe_svm.c +31 -3
@@ -3,6 +3,8 @@* Copyright © 2024 Intel Corporation */ +#include <linux/pci-p2pdma.h> +#include <drm/drm_drv.h> #include <drm/drm_managed.h> #include <drm/drm_pagemap.h>
@@ -441,6 +443,14 @@ static u64 xe_page_to_dpa(struct page *page)return dpa; } +static u64 xe_page_to_pcie (struct page *page) +{ +struct xe_pagemap *xpagemap =xe_page_to_pagemap (page); +struct xe_vram_region *vr =xe_pagemap_to_vr (xpagemap); + +return xe_page_to_dpa (page) - vr->dpa_base + vr->io_start; +} +enum xe_svm_copy_dir {XE_SVM_COPY_TO_VRAM ,XE_SVM_COPY_TO_SRAM ,
@@ -804,7 +814,10 @@ static bool xe_has_interconnect(struct drm_pagemap_peer *peer1,struct device *dev1 =xe_peer_to_dev (peer1);struct device *dev2 =xe_peer_to_dev (peer2); -return dev1 == dev2; +if (dev1 == dev2) +return true; + +return pci_p2pdma_distance (to_pci_dev (dev1), dev2, true) >=0 ; }static DRM_PAGEMAP_OWNER_LIST_DEFINE (xe_owner_list);
@@ -1577,13 +1590,27 @@ xe_drm_pagemap_device_map(struct drm_pagemap *dpagemap, addr =xe_page_to_dpa (page); prot =XE_INTERCONNECT_VRAM ; }else { - addr =DMA_MAPPING_ERROR ; - prot =0 ; + addr =dma_map_resource (dev, +xe_page_to_pcie (page), +PAGE_SIZE << order, dir, +DMA_ATTR_SKIP_CPU_SYNC ); + prot =XE_INTERCONNECT_P2P ; }return drm_pagemap_addr_encode (addr, prot, order, dir); } +static void xe_drm_pagemap_device_unmap (struct drm_pagemap *dpagemap, +struct device *dev, +struct drm_pagemap_addr addr) +{ +if (addr.proto !=XE_INTERCONNECT_P2P ) +return ; + +dma_unmap_resource (dev, addr.addr,PAGE_SIZE << addr.order, + addr.dir,DMA_ATTR_SKIP_CPU_SYNC ); +} +static void xe_pagemap_destroy_work (struct work_struct *work) {struct xe_pagemap *xpagemap =container_of (work,typeof (*xpagemap), destroy_work);
@@ -1620,6 +1647,7 @@ static void xe_pagemap_destroy(struct drm_pagemap *dpagemap, bool from_atomic_orstatic const struct drm_pagemap_ops xe_drm_pagemap_ops = { .device_map = xe_drm_pagemap_device_map, + .device_unmap = xe_drm_pagemap_device_unmap, .populate_mm = xe_drm_pagemap_populate_mm, .destroy = xe_pagemap_destroy, };
drivers/gpu/drm/xe/xe_svm.h +1 -0
@@ -13,6 +13,7 @@#include <drm/drm_pagemap_util.h> #define XE_INTERCONNECT_VRAM DRM_INTERCONNECT_DRIVER +#define XE_INTERCONNECT_P2P (XE_INTERCONNECT_VRAM + 1)struct drm_device ;struct drm_file ;
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 17/24 drm/xe/vm: Add a couple of VM debug printouts
In reply to Thomas HellströmAdd debug printouts that are valueable for pagemap prefetch, migration and page collection.
v2:
- Add additional debug prinouts around migration and page collection.
- Require CONFIG_DRM_XE_DEBUG_VM.
--- drivers/gpu/drm/xe/xe_svm.c | 10 ++++++++++ drivers/gpu/drm/xe/xe_vm.c | 7 +++++++ 2 files changed, 17 insertions(+)
drivers/gpu/drm/xe/xe_svm.c +10 -0
@@ -1271,6 +1271,10 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,if (err) {range_debug (range,"PAGE FAULT - FAIL PAGE COLLECT" ); goto out; + }else if (IS_ENABLED (CONFIG_DRM_XE_DEBUG_VM )) { +drm_dbg (&vm->xe->drm,"After page collect data location is %sin \"%s\".\n" , +xe_svm_range_has_pagemap (range, dpagemap) ?"" :"NOT " , + dpagemap ? dpagemap->drm->unique :"System." ); }xe_svm_range_get_pages_us_stats_incr (gt, range, get_pages_start);
@@ -1566,9 +1570,15 @@ struct drm_pagemap *xe_vma_resolve_pagemap(struct xe_vma *vma, struct xe_tile *tint xe_svm_alloc_vram (struct xe_svm_range *range,const struct drm_gpusvm_ctx *ctx,struct drm_pagemap *dpagemap) { +struct xe_device *xe =range_to_vm (&range->base)->xe; +xe_assert (range_to_vm (&range->base)->xe, range->base.pages.flags.migrate_devmem);range_debug (range,"ALLOCATE VRAM" ); +if (IS_ENABLED (CONFIG_DRM_XE_DEBUG_VM )) +drm_dbg (&xe->drm,"Request migration to device memory on \"%s\".\n" , + dpagemap->drm->unique); + return drm_pagemap_populate_mm(dpagemap, xe_svm_range_start(range), xe_svm_range_end(range), range->base.gpusvm->mm,
drivers/gpu/drm/xe/xe_vm.c +7 -0
@@ -2931,6 +2931,13 @@ static int prefetch_ranges(struct xe_vm *vm, struct xe_vma_op *op)if (!dpagemap)xe_svm_range_migrate_to_smem (vm, svm_range); +if (IS_ENABLED (CONFIG_DRM_XE_DEBUG_VM )) { +drm_dbg (&vm->xe->drm, +"Prefetch pagemap is %s start 0x%016lx end 0x%016lx\n" , + dpagemap ? dpagemap->drm->unique :"system" , +xe_svm_range_start (svm_range),xe_svm_range_end (svm_range)); + } +if (xe_svm_range_needs_migrate_to_vram (svm_range, vma, dpagemap)) { err =xe_svm_alloc_vram (svm_range, &ctx, dpagemap);if (err) {
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 18/24 drm/xe/svm: Document how xe keeps drm_pagemap references
In reply to Thomas HellströmAs an aid to understanding the lifetime of the drm_pagemaps used by the xe driver, document how the xe driver keeps the drm_pagemap references.
v3:
- Fix formatting (Matt Brost)
--- drivers/gpu/drm/xe/xe_svm.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
drivers/gpu/drm/xe/xe_svm.c +21 -0
@@ -28,6 +28,27 @@#define XE_PEER_PAGEMAP ((void *)0ul)#define XE_PEER_VM ((void *)1ul) +/** +* DOC: drm_pagemap reference-counting in xe: +* +* In addition to the drm_pagemap internal reference counting by its zone +* device data, the xe driver holds the following long-time references: +* +* - struct xe_pagemap: +* The xe_pagemap struct derives from struct drm_pagemap and uses its +* reference count. +* - SVM-enabled VMs: +* SVM-enabled VMs look up and keeps a reference to all xe_pagemaps on +* the same device. +* - VMAs: +* vmas keep a reference on the drm_pagemap indicated by a gpu_madvise() +* call. +* +* In addition, all drm_pagemap or xe_pagemap pointers where lifetime cannot +* be guaranteed by a vma reference under the vm lock should keep a reference. +* That includes the range->pages.dpagemap pointer. +*/ +static int xe_svm_get_pagemaps (struct xe_vm *vm);void *xe_svm_private_page_owner (struct xe_vm *vm,bool force_smem)
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 19/24 drm/pagemap, drm/xe: Clean up the use of the device-private page owner
In reply to Thomas HellströmUse the dev_pagemap->owner field wherever possible, simplifying the code slightly.
v3: New patch
--- drivers/gpu/drm/drm_pagemap.c | 32 +++++++++++--------------------- drivers/gpu/drm/xe/xe_svm.c | 3 +-- include/drm/drm_pagemap.h | 3 +-- 3 files changed, 13 insertions(+), 25 deletions(-)
drivers/gpu/drm/drm_pagemap.c +11 -21
@@ -66,7 +66,6 @@* @refcount: Reference count for the zdd * @devmem_allocation: device memory allocation * @dpagemap: Refcounted pointer to the underlying struct drm_pagemap. -* @device_private_page_owner: Device private pages owner * * This structure serves as a generic wrapper installed in * page->zone_device_data. It provides infrastructure for looking up a device
@@ -79,13 +78,11 @@ struct drm_pagemap_zdd {struct kref refcount;struct drm_pagemap_devmem *devmem_allocation;struct drm_pagemap *dpagemap; -void *device_private_page_owner; };/** * drm_pagemap_zdd_alloc() - Allocate a zdd structure. * @dpagemap: Pointer to the underlying struct drm_pagemap. -* @device_private_page_owner: Device private pages owner * * This function allocates and initializes a new zdd structure. It sets up the * reference count and initializes the destroy work.
@@ -93,7 +90,7 @@ struct drm_pagemap_zdd {* Return: Pointer to the allocated zdd on success, ERR_PTR() on failure. */ static struct drm_pagemap_zdd * -drm_pagemap_zdd_alloc (struct drm_pagemap *dpagemap,void *device_private_page_owner) +drm_pagemap_zdd_alloc (struct drm_pagemap *dpagemap) {struct drm_pagemap_zdd *zdd;
@@ -103,7 +100,6 @@ drm_pagemap_zdd_alloc(struct drm_pagemap *dpagemap, void *device_private_page_owkref_init (&zdd->refcount); zdd->devmem_allocation =NULL ; - zdd->device_private_page_owner = device_private_page_owner; zdd->dpagemap =drm_pagemap_get (dpagemap);return zdd;
@@ -308,7 +304,6 @@ npages_in_range(unsigned long start, unsigned long end)* @end: End of the virtual address range to migrate. * @timeslice_ms: The time requested for the migrated pagemap pages to * be present in @mm before being allowed to be migrated back. -* @pgmap_owner: Not used currently, since only system memory is considered. * * This function migrates the specified virtual address range to device memory. * It performs the necessary setup and invokes the driver-specific operations for
@@ -326,14 +321,15 @@ npages_in_range(unsigned long start, unsigned long end)int drm_pagemap_migrate_to_devmem (struct drm_pagemap_devmem *devmem_allocation,struct mm_struct *mm,unsigned long start,unsigned long end, -unsigned long timeslice_ms, -void *pgmap_owner) +unsigned long timeslice_ms) {const struct drm_pagemap_devmem_ops *ops = devmem_allocation->ops; +struct drm_pagemap *dpagemap = devmem_allocation->dpagemap; +struct dev_pagemap *pagemap = dpagemap->pagemap;struct migrate_vma migrate = { .start = start, .end = end, - .pgmap_owner = pgmap_owner, + .pgmap_owner = pagemap->owner, .flags =MIGRATE_VMA_SELECT_SYSTEM , };unsigned long i, npages =npages_in_range (start, end);
@@ -375,7 +371,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, pagemap_addr = buf + (2 *sizeof (*migrate.src) * npages); pages = buf + (2 *sizeof (*migrate.src) +sizeof (*pagemap_addr)) * npages; - zdd =drm_pagemap_zdd_alloc (devmem_allocation->dpagemap, pgmap_owner); + zdd =drm_pagemap_zdd_alloc (dpagemap);if (!zdd) { err = -ENOMEM ; goto err_free;
@@ -791,8 +787,7 @@ EXPORT_SYMBOL_GPL(drm_pagemap_evict_to_ram);/** * __drm_pagemap_migrate_to_ram() - Migrate GPU SVM range to RAM (internal) * @vas: Pointer to the VM area structure -* @device_private_page_owner: Device private pages owner -* @page: Pointer to the page for fault handling (can be NULL) +* @page: Pointer to the page for fault handling. * @fault_addr: Fault address * @size: Size of migration *
@@ -803,14 +798,13 @@ EXPORT_SYMBOL_GPL(drm_pagemap_evict_to_ram);* Return: 0 on success, negative error code on failure. */ static int __drm_pagemap_migrate_to_ram (struct vm_area_struct *vas, -void *device_private_page_owner,struct page *page,unsigned long fault_addr,unsigned long size) {struct migrate_vma migrate = { .vma = vas, - .pgmap_owner = device_private_page_owner, + .pgmap_owner =page_pgmap (page)->owner, .flags =MIGRATE_VMA_SELECT_DEVICE_PRIVATE |MIGRATE_VMA_SELECT_DEVICE_COHERENT , .fault_page = page,
@@ -825,12 +819,9 @@ static int __drm_pagemap_migrate_to_ram(struct vm_area_struct *vas,void *buf;int i, err =0 ; -if (page) { - zdd = page->zone_device_data; -if (time_before64 (get_jiffies_64 (), - zdd->devmem_allocation->timeslice_expiration)) -return 0 ; - } + zdd = page->zone_device_data; +if (time_before64 (get_jiffies_64 (), zdd->devmem_allocation->timeslice_expiration)) +return 0 ; start =ALIGN_DOWN (fault_addr, size); end =ALIGN (fault_addr +1 , size);
@@ -931,7 +922,6 @@ static vm_fault_t drm_pagemap_migrate_to_ram(struct vm_fault *vmf)int err; err =__drm_pagemap_migrate_to_ram (vmf->vma, - zdd->device_private_page_owner, vmf->page, vmf->address, zdd->devmem_allocation->size);
drivers/gpu/drm/xe/xe_svm.c +1 -2
@@ -1075,8 +1075,7 @@ static int xe_drm_pagemap_populate_mm(struct drm_pagemap *dpagemap,/* Ensure the device has a pm ref while there are device pages active. */ xe_pm_runtime_get_noresume (xe); err =drm_pagemap_migrate_to_devmem (&bo->devmem_allocation, mm, - start, end, timeslice_ms, - xpagemap->pagemap.owner); + start, end, timeslice_ms);if (err)xe_svm_devmem_release (&bo->devmem_allocation);xe_bo_unlock (bo);
include/drm/drm_pagemap.h +1 -2
@@ -320,8 +320,7 @@ struct drm_pagemap_devmem {int drm_pagemap_migrate_to_devmem (struct drm_pagemap_devmem *devmem_allocation,struct mm_struct *mm,unsigned long start,unsigned long end, -unsigned long timeslice_ms, -void *pgmap_owner); +unsigned long timeslice_ms);int drm_pagemap_evict_to_ram (struct drm_pagemap_devmem *devmem_allocation);
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 20/24 drm/gpusvm: Introduce a function to scan the current migration state
In reply to Thomas HellströmWith multi-device we are much more likely to have multiple drm-gpusvm ranges pointing to the same struct mm range.
To avoid calling into drm_pagemap_populate_mm(), which is always very costly, introduce a much less costly drm_gpusvm function, drm_gpusvm_scan_mm() to scan the current migration state. The device fault-handler and prefetcher can use this function to determine whether migration is really necessary.
There are a couple of performance improvements that can be done for this function if it turns out to be too costly. Those are documented in the code.
v3:
- New patch.
--- drivers/gpu/drm/drm_gpusvm.c | 121 +++++++++++++++++++++++++++++++++++ include/drm/drm_gpusvm.h | 29 +++++++++ 2 files changed, 150 insertions(+)
drivers/gpu/drm/drm_gpusvm.c +121 -0
@@ -743,6 +743,127 @@ static bool drm_gpusvm_check_pages(struct drm_gpusvm *gpusvm,return err ? false : true; } +/** +* drm_gpusvm_scan_mm() - Check the migration state of a drm_gpusvm_range +* @range: Pointer to the struct drm_gpusvm_range to check. +* @dev_private_owner: The struct dev_private_owner to use to determine +* compatible device-private pages. +* @pagemap: The struct dev_pagemap pointer to use for pagemap-specific +* checks. +* +* Scan the CPU address space corresponding to @range and return the +* current migration state. Note that the result may be invalid as +* soon as the function returns. It's an advisory check. +* +* TODO: Bail early and call hmm_range_fault() for subranges. +* +* Return: See &enum drm_gpusvm_scan_result. +*/ +enum drm_gpusvm_scan_result drm_gpusvm_scan_mm (struct drm_gpusvm_range *range, +void *dev_private_owner, +const struct dev_pagemap *pagemap) +{ +struct mmu_interval_notifier *notifier = &range->notifier->notifier; +unsigned long start =drm_gpusvm_range_start (range); +unsigned long end =drm_gpusvm_range_end (range); +struct hmm_range hmm_range = { + .default_flags =0 , + .notifier = notifier, + .start = start, + .end = end, + .dev_private_owner = dev_private_owner, + }; +unsigned long timeout = + jiffies +msecs_to_jiffies (HMM_RANGE_DEFAULT_TIMEOUT ); +enum drm_gpusvm_scan_result state =DRM_GPUSVM_SCAN_UNPOPULATED , new_state; +unsigned long *pfns; +unsigned long npages =npages_in_range (start, end); +const struct dev_pagemap *other =NULL ; +int err, i; + + pfns =kvmalloc_array (npages,sizeof (*pfns),GFP_KERNEL ); +if (!pfns) +return DRM_GPUSVM_SCAN_UNPOPULATED ; + + hmm_range.hmm_pfns = pfns; + +retry: + hmm_range.notifier_seq =mmu_interval_read_begin (notifier); +mmap_read_lock (range->gpusvm->mm); + +while (true) { + err =hmm_range_fault (&hmm_range); +if (err == -EBUSY ) { +if (time_after (jiffies, timeout)) +break ; + + hmm_range.notifier_seq = +mmu_interval_read_begin (notifier); +continue ; + } +break ; + } +mmap_read_unlock (range->gpusvm->mm); +if (err) + goto err_free; + +drm_gpusvm_notifier_lock (range->gpusvm); +if (mmu_interval_read_retry (notifier, hmm_range.notifier_seq)) { +drm_gpusvm_notifier_unlock (range->gpusvm); + goto retry; + } + +for (i =0 ; i < npages;) { +struct page *page; +const struct dev_pagemap *cur =NULL ; + +if (!(pfns[i] &HMM_PFN_VALID )) { + state =DRM_GPUSVM_SCAN_UNPOPULATED ; + goto err_free; + } + + page =hmm_pfn_to_page (pfns[i]); +if (is_device_private_page (page) || +is_device_coherent_page (page)) + cur =page_pgmap (page); + +if (cur == pagemap) { + new_state =DRM_GPUSVM_SCAN_EQUAL ; + }else if (cur && (cur == other || !other)) { + new_state =DRM_GPUSVM_SCAN_OTHER ; + other = cur; + }else if (cur) { + new_state =DRM_GPUSVM_SCAN_MIXED_DEVICE ; + }else { + new_state =DRM_GPUSVM_SCAN_SYSTEM ; + } + +/* +* TODO: Could use an array for state +* transitions, and caller might want it +* to bail early for some results. +*/ +if (state ==DRM_GPUSVM_SCAN_UNPOPULATED ) { + state = new_state; + }else if (state != new_state) { +if (new_state ==DRM_GPUSVM_SCAN_SYSTEM || + state ==DRM_GPUSVM_SCAN_SYSTEM ) + state =DRM_GPUSVM_SCAN_MIXED ; +else if (state !=DRM_GPUSVM_SCAN_MIXED ) + state =DRM_GPUSVM_SCAN_MIXED_DEVICE ; + } + + i +=1ul <<drm_gpusvm_hmm_pfn_to_order (pfns[i], i, npages); + } + +err_free: +drm_gpusvm_notifier_unlock (range->gpusvm); + +kvfree (pfns); +return state; +} +EXPORT_SYMBOL (drm_gpusvm_scan_mm); +/** * drm_gpusvm_range_chunk_size() - Determine chunk size for GPU SVM range * @gpusvm: Pointer to the GPU SVM structure
include/drm/drm_gpusvm.h +29 -0
@@ -328,6 +328,35 @@ void drm_gpusvm_free_pages(struct drm_gpusvm *gpusvm,struct drm_gpusvm_pages *svm_pages, unsigned long npages); +/** +* enum drm_gpusvm_scan_result - Scan result from the drm_gpusvm_scan_mm() function. +* @DRM_GPUSVM_SCAN_UNPOPULATED: At least one page was not present or inaccessible. +* @DRM_GPUSVM_SCAN_EQUAL: All pages belong to the struct dev_pagemap indicated as +* the @pagemap argument to the drm_gpusvm_scan_mm() function. +* @DRM_GPUSVM_SCAN_OTHER: All pages belong to exactly one dev_pagemap, which is +* *NOT* the @pagemap argument to the drm_gpusvm_scan_mm(). All pages belong to +* the same device private owner. +* @DRM_GPUSVM_SCAN_SYSTEM: All pages are present and system pages. +* @DRM_GPUSVM_SCAN_MIXED_DEVICE: All pages are device pages and belong to at least +* two different struct dev_pagemaps. All pages belong to the same device private +* owner. +* @DRM_GPUSVM_SCAN_MIXED: Pages are present and are a mix of system pages +* and device-private pages. All device-private pages belong to the same device +* private owner. +*/ +enum drm_gpusvm_scan_result { +DRM_GPUSVM_SCAN_UNPOPULATED , +DRM_GPUSVM_SCAN_EQUAL , +DRM_GPUSVM_SCAN_OTHER , +DRM_GPUSVM_SCAN_SYSTEM , +DRM_GPUSVM_SCAN_MIXED_DEVICE , +DRM_GPUSVM_SCAN_MIXED , +}; + +enum drm_gpusvm_scan_result drm_gpusvm_scan_mm (struct drm_gpusvm_range *range, +void *dev_private_owner, +const struct dev_pagemap *pagemap); +#ifdef CONFIG_LOCKDEP /** * drm_gpusvm_driver_set_lock() - Set the lock protecting accesses to GPU SVM
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 21/24 drm/xe: Use drm_gpusvm_scan_mm()
In reply to Thomas HellströmUse drm_gpusvm_scan_mm() to avoid unnecessarily calling into drm_pagemap_populate_mm();
v3:
- New patch.
--- drivers/gpu/drm/xe/xe_svm.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
drivers/gpu/drm/xe/xe_svm.c +13 -1
@@ -1590,11 +1590,23 @@ struct drm_pagemap *xe_vma_resolve_pagemap(struct xe_vma *vma, struct xe_tile *tint xe_svm_alloc_vram (struct xe_svm_range *range,const struct drm_gpusvm_ctx *ctx,struct drm_pagemap *dpagemap) { -struct xe_device *xe =range_to_vm (&range->base)->xe; +struct xe_vm *vm =range_to_vm (&range->base); +enum drm_gpusvm_scan_result migration_state; +struct xe_device *xe = vm->xe;xe_assert (range_to_vm (&range->base)->xe, range->base.pages.flags.migrate_devmem);range_debug (range,"ALLOCATE VRAM" ); + migration_state =drm_gpusvm_scan_mm (&range->base, +xe_svm_private_page_owner (vm, false), + dpagemap->pagemap); + +if (migration_state ==DRM_GPUSVM_SCAN_EQUAL ) { +if (IS_ENABLED (CONFIG_DRM_XE_DEBUG_VM )) +drm_dbg (dpagemap->drm,"Already migrated!\n" ); +return 0 ; + } +if (IS_ENABLED (CONFIG_DRM_XE_DEBUG_VM ))drm_dbg (&xe->drm,"Request migration to device memory on \"%s\".\n" , dpagemap->drm->unique);
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 22/24 drm/pagemap, drm/xe: Support destination migration over interconnect
In reply to Thomas HellströmSupport destination migration over interconnect when migrating from device-private pages with the same dev_pagemap owner.
Since we now also collect device-private pages to migrate, also abort migration if the range to migrate is already fully populated with pages from the desired pagemap.
Finally return -EBUSY from drm_pagemap_populate_mm() if the migration can't be completed without first migrating all pages in the range to system. It is expected that the caller will perform that before retrying the call to drm_pagemap_populate_mm().
v3:
- Fix a bug where the p2p dma-address was never used.
- Postpone enabling destination interconnect migration, since xe devices require source interconnect migration to ensure the source L2 cache is flushed at migration time.
- Update the drm_pagemap_migrate_to_devmem() interface to pass migration details.
v4:
- Define XE_INTERCONNECT_P2P unconditionally (CI)
- Include a missing header (CI)
v5:
- Use page order increments where possible (Matt Brost).
- Fix a negated value of can_migrate_same_pagemap.
- Move removal of some dead code to a separate patch (Matt Brost).
- Remove an unnecessary zdd get() and put() (Matt Brost).
--- drivers/gpu/drm/drm_pagemap.c | 184 +++++++++++++++++++++++++------- drivers/gpu/drm/xe/xe_migrate.c | 4 +- drivers/gpu/drm/xe/xe_svm.c | 26 +++-- drivers/gpu/drm/xe/xe_svm.h | 1 + include/drm/drm_pagemap.h | 19 +++- 5 files changed, 187 insertions(+), 47 deletions(-)
drivers/gpu/drm/drm_pagemap.c +146 -38
@@ -207,10 +207,12 @@ static void drm_pagemap_get_devmem_page(struct page *page,/** * drm_pagemap_migrate_map_pages() - Map migration pages for GPU SVM migration * @dev: The device for which the pages are being mapped +* @local_dpagemap: The drm_pagemap pointer of the local drm_pagemap. * @pagemap_addr: Array to store DMA information corresponding to mapped pages * @migrate_pfn: Array of migrate page frame numbers to map * @npages: Number of pages to map * @dir: Direction of data transfer (e.g., DMA_BIDIRECTIONAL) +* @mdetails: Details governing the migration behaviour. * * This function maps pages of memory for migration usage in GPU SVM. It * iterates over each page frame number provided in @migrate_pfn, maps the
@@ -220,12 +222,15 @@ static void drm_pagemap_get_devmem_page(struct page *page,* Returns: 0 on success, -EFAULT if an error occurs during mapping. */ static int drm_pagemap_migrate_map_pages (struct device *dev, +struct drm_pagemap *local_dpagemap,struct drm_pagemap_addr *pagemap_addr,unsigned long *migrate_pfn,unsigned long npages, -enum dma_data_direction dir) +enum dma_data_direction dir, +const struct drm_pagemap_migrate_details *mdetails) {unsigned long i; +unsigned long num_peer_pages =0 ;for (i =0 ; i < npages;) {struct page *page =migrate_pfn_to_page (migrate_pfn[i]);
@@ -236,31 +241,50 @@ static int drm_pagemap_migrate_map_pages(struct device *dev,if (!page) goto next; -if (WARN_ON_ONCE (is_zone_device_page (page))) -return -EFAULT ; - folio =page_folio (page); order =folio_order (folio); - dma_addr =dma_map_page (dev, page,0 ,page_size (page), dir); -if (dma_mapping_error (dev, dma_addr)) -return -EFAULT ; +if (is_device_private_page (page)) { +struct drm_pagemap_zdd *zdd = page->zone_device_data; +struct drm_pagemap *dpagemap = zdd->dpagemap; +struct drm_pagemap_addr addr; + +if (dpagemap == local_dpagemap && !mdetails->can_migrate_same_pagemap) + goto next; - pagemap_addr[i] = -drm_pagemap_addr_encode (dma_addr, -DRM_INTERCONNECT_SYSTEM , - order, dir); + num_peer_pages +=NR_PAGES (order); + addr = dpagemap->ops->device_map (dpagemap, dev, page, order, dir); +if (dma_mapping_error (dev, addr.addr)) +return -EFAULT ; + + pagemap_addr[i] = addr; + }else { + dma_addr =dma_map_page (dev, page,0 ,page_size (page), dir); +if (dma_mapping_error (dev, dma_addr)) +return -EFAULT ; + + pagemap_addr[i] = +drm_pagemap_addr_encode (dma_addr, +DRM_INTERCONNECT_SYSTEM , + order, dir); + } next: i +=NR_PAGES (order); } +if (num_peer_pages) +drm_dbg (local_dpagemap->drm,"Migrating %lu peer pages over interconnect.\n" , + num_peer_pages); +return 0 ; }/** * drm_pagemap_migrate_unmap_pages() - Unmap pages previously mapped for GPU SVM migration * @dev: The device for which the pages were mapped +* @migrate_pfn: Array of migrate pfns set up for the mapped pages. Used to +* determine the drm_pagemap of a peer device private page. * @pagemap_addr: Array of DMA information corresponding to mapped pages * @npages: Number of pages to unmap * @dir: Direction of data transfer (e.g., DMA_BIDIRECTIONAL)
@@ -271,16 +295,27 @@ static int drm_pagemap_migrate_map_pages(struct device *dev,*/ static void drm_pagemap_migrate_unmap_pages (struct device *dev,struct drm_pagemap_addr *pagemap_addr, +unsigned long *migrate_pfn,unsigned long npages,enum dma_data_direction dir) {unsigned long i;for (i =0 ; i < npages;) { -if (!pagemap_addr[i].addr ||dma_mapping_error (dev, pagemap_addr[i].addr)) +struct page *page =migrate_pfn_to_page (migrate_pfn[i]); + +if (!page || !pagemap_addr[i].addr ||dma_mapping_error (dev, pagemap_addr[i].addr)) goto next; -dma_unmap_page (dev, pagemap_addr[i].addr,PAGE_SIZE << pagemap_addr[i].order, dir); +if (is_zone_device_page (page)) { +struct drm_pagemap_zdd *zdd = page->zone_device_data; +struct drm_pagemap *dpagemap = zdd->dpagemap; + + dpagemap->ops->device_unmap (dpagemap, dev, pagemap_addr[i]); + }else { +dma_unmap_page (dev, pagemap_addr[i].addr, +PAGE_SIZE << pagemap_addr[i].order, dir); + } next: i +=NR_PAGES (pagemap_addr[i].order);
@@ -297,13 +332,12 @@ npages_in_range(unsigned long start, unsigned long end)* drm_pagemap_migrate_to_devmem() - Migrate a struct mm_struct range to device memory * @devmem_allocation: The device memory allocation to migrate to. * The caller should hold a reference to the device memory allocation, -* and the reference is consumed by this function unless it returns with +* and the reference is consumed by this function even if it returns with * an error. * @mm: Pointer to the struct mm_struct. * @start: Start of the virtual address range to migrate. * @end: End of the virtual address range to migrate. -* @timeslice_ms: The time requested for the migrated pagemap pages to -* be present in @mm before being allowed to be migrated back. +* @mdetails: Details to govern the migration. * * This function migrates the specified virtual address range to device memory. * It performs the necessary setup and invokes the driver-specific operations for
@@ -321,7 +355,7 @@ npages_in_range(unsigned long start, unsigned long end)int drm_pagemap_migrate_to_devmem (struct drm_pagemap_devmem *devmem_allocation,struct mm_struct *mm,unsigned long start,unsigned long end, -unsigned long timeslice_ms) +const struct drm_pagemap_migrate_details *mdetails) {const struct drm_pagemap_devmem_ops *ops = devmem_allocation->ops;struct drm_pagemap *dpagemap = devmem_allocation->dpagemap;
@@ -330,9 +364,11 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, .start = start, .end = end, .pgmap_owner = pagemap->owner, - .flags = MIGRATE_VMA_SELECT_SYSTEM, + .flags = MIGRATE_VMA_SELECT_SYSTEM | MIGRATE_VMA_SELECT_DEVICE_COHERENT | + (mdetails->source_peer_migrates ? 0 : MIGRATE_VMA_SELECT_DEVICE_PRIVATE), };unsigned long i, npages =npages_in_range (start, end); +unsigned long own_pages =0 , migrated_pages =0 ;struct vm_area_struct *vas;struct drm_pagemap_zdd *zdd =NULL ;struct page **pages;
@@ -374,8 +410,10 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, zdd =drm_pagemap_zdd_alloc (dpagemap);if (!zdd) { err = -ENOMEM ; - goto err_free; +kvfree (buf); + goto err_out; } + zdd->devmem_allocation = devmem_allocation;/* Owns ref */ migrate.vma = vas; migrate.src = buf;
@@ -386,35 +424,84 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, goto err_free;if (!migrate.cpages) { - err = -EFAULT ; +/* No pages to migrate. Raced or unknown device pages. */ + err = -EBUSY ; goto err_free; }if (migrate.cpages != npages) { +/* +* Some pages to migrate. But we want to migrate all or +* nothing. Raced or unknown device pages. +*/ err = -EBUSY ; - goto err_finalize; + goto err_aborted_migration; + } + +/* Count device-private pages to migrate */ +for (i =0 ; i < npages;) { +struct page *src_page =migrate_pfn_to_page (migrate.src[i]); +unsigned long nr_pages = src_page ?NR_PAGES (folio_order (page_folio (src_page))) :1 ; + +if (src_page &&is_zone_device_page (src_page)) { +if (page_pgmap (src_page) == pagemap) + own_pages += nr_pages; + } + + i += nr_pages; + } + +drm_dbg (dpagemap->drm,"Total pages %lu; Own pages: %lu.\n" , + npages, own_pages); +if (own_pages == npages) { + err =0 ; +drm_dbg (dpagemap->drm,"Migration wasn't necessary.\n" ); + goto err_aborted_migration; + }else if (own_pages && !mdetails->can_migrate_same_pagemap) { + err = -EBUSY ; +drm_dbg (dpagemap->drm,"Migration aborted due to fragmentation.\n" ); + goto err_aborted_migration; } err = ops->populate_devmem_pfn (devmem_allocation, npages, migrate.dst);if (err) goto err_finalize; - err =drm_pagemap_migrate_map_pages (devmem_allocation->dev, pagemap_addr, - migrate.src, npages,DMA_TO_DEVICE ); + err =drm_pagemap_migrate_map_pages (devmem_allocation->dev, + devmem_allocation->dpagemap, pagemap_addr, + migrate.src, npages,DMA_TO_DEVICE , + mdetails); + +if (err) { +drm_pagemap_migrate_unmap_pages (devmem_allocation->dev, pagemap_addr, + migrate.src, npages,DMA_TO_DEVICE ); -if (err) goto err_finalize; + } + own_pages =0 ;for (i =0 ; i < npages; ++i) {struct page *page =pfn_to_page (migrate.dst[i]); - +struct page *src_page =migrate_pfn_to_page (migrate.src[i]); + +if (unlikely (src_page &&is_zone_device_page (src_page) && +page_pgmap (src_page) == pagemap && + !mdetails->can_migrate_same_pagemap)) { + migrate.dst[i] =0 ; + pages[i] =NULL ; + own_pages++; +continue ; + } pages[i] = page; migrate.dst[i] =migrate_pfn (migrate.dst[i]);drm_pagemap_get_devmem_page (page, zdd); } +drm_WARN_ON (dpagemap->drm, !!own_pages); err = ops->copy_to_devmem (pages, pagemap_addr, npages, devmem_allocation->pre_migrate_fence); +drm_pagemap_migrate_unmap_pages (devmem_allocation->dev, pagemap_addr, + migrate.src, npages,DMA_TO_DEVICE );if (err) goto err_finalize;
@@ -423,21 +510,37 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,/* Upon success bind devmem allocation to range and zdd */ devmem_allocation->timeslice_expiration =get_jiffies_64 () + -msecs_to_jiffies (timeslice_ms); - zdd->devmem_allocation = devmem_allocation;/* Owns ref */ +msecs_to_jiffies (mdetails->timeslice_ms); err_finalize:if (err)drm_pagemap_migration_unlock_put_pages (npages, migrate.dst); +err_aborted_migration:migrate_vma_pages (&migrate); + +for (i =0 ; i < npages;) { +struct page *page =migrate_pfn_to_page (migrate.src[i]); +unsigned long nr_pages = page ?NR_PAGES (folio_order (page_folio (page))) :1 ; + +if (migrate.src[i] &MIGRATE_PFN_MIGRATE ) + migrated_pages += nr_pages; + + i += nr_pages; + } + +if (!err && migrated_pages < npages - own_pages) { +drm_dbg (dpagemap->drm,"Raced while finalizing migration.\n" ); + err = -EBUSY ; + } +migrate_vma_finalize (&migrate); -drm_pagemap_migrate_unmap_pages (devmem_allocation->dev, pagemap_addr, npages, -DMA_TO_DEVICE ); err_free: -if (zdd) -drm_pagemap_zdd_put (zdd); +drm_pagemap_zdd_put (zdd);kvfree (buf); +return err; + err_out: + devmem_allocation->ops->devmem_release (devmem_allocation);return err; }EXPORT_SYMBOL_GPL (drm_pagemap_migrate_to_devmem);
@@ -710,6 +813,7 @@ EXPORT_SYMBOL(drm_pagemap_put);int drm_pagemap_evict_to_ram (struct drm_pagemap_devmem *devmem_allocation) {const struct drm_pagemap_devmem_ops *ops = devmem_allocation->ops; +struct drm_pagemap_migrate_details mdetails = {};unsigned long npages, mpages =0 ;struct page **pages;unsigned long *src, *dst;
@@ -748,8 +852,10 @@ int drm_pagemap_evict_to_ram(struct drm_pagemap_devmem *devmem_allocation)if (err || !mpages) goto err_finalize; - err =drm_pagemap_migrate_map_pages (devmem_allocation->dev, pagemap_addr, - dst, npages,DMA_FROM_DEVICE ); + err =drm_pagemap_migrate_map_pages (devmem_allocation->dev, + devmem_allocation->dpagemap, pagemap_addr, + dst, npages,DMA_FROM_DEVICE , + &mdetails);if (err) goto err_finalize;
@@ -765,8 +871,9 @@ int drm_pagemap_evict_to_ram(struct drm_pagemap_devmem *devmem_allocation)drm_pagemap_migration_unlock_put_pages (npages, dst);migrate_device_pages (src, dst, npages);migrate_device_finalize (src, dst, npages); -drm_pagemap_migrate_unmap_pages (devmem_allocation->dev, pagemap_addr, npages, +drm_pagemap_migrate_unmap_pages (devmem_allocation->dev, pagemap_addr, dst, npages,DMA_FROM_DEVICE ); + err_free:kvfree (buf); err_out:
@@ -809,6 +916,7 @@ static int __drm_pagemap_migrate_to_ram(struct vm_area_struct *vas, MIGRATE_VMA_SELECT_DEVICE_COHERENT, .fault_page = page, }; +struct drm_pagemap_migrate_details mdetails = {};struct drm_pagemap_zdd *zdd;const struct drm_pagemap_devmem_ops *ops;struct device *dev =NULL ;
@@ -866,8 +974,8 @@ static int __drm_pagemap_migrate_to_ram(struct vm_area_struct *vas,if (err) goto err_finalize; - err =drm_pagemap_migrate_map_pages (dev, pagemap_addr, migrate.dst, npages, -DMA_FROM_DEVICE ); + err =drm_pagemap_migrate_map_pages (dev, zdd->dpagemap, pagemap_addr, migrate.dst, npages, +DMA_FROM_DEVICE , &mdetails);if (err) goto err_finalize;
@@ -884,8 +992,8 @@ static int __drm_pagemap_migrate_to_ram(struct vm_area_struct *vas,migrate_vma_pages (&migrate);migrate_vma_finalize (&migrate);if (dev) -drm_pagemap_migrate_unmap_pages (dev, pagemap_addr, npages, -DMA_FROM_DEVICE ); +drm_pagemap_migrate_unmap_pages (dev, pagemap_addr, migrate.dst, + npages,DMA_FROM_DEVICE ); err_free:kvfree (buf); err_out:
drivers/gpu/drm/xe/xe_migrate.c +3 -1
@@ -35,6 +35,7 @@#include "xe_sa.h" #include "xe_sched_job.h" #include "xe_sriov_vf_ccs.h" +#include "xe_svm.h" #include "xe_sync.h" #include "xe_trace_bo.h" #include "xe_validation.h"
@@ -2048,7 +2049,8 @@ static void build_pt_update_batch_sram(struct xe_migrate *m,u64 pte;xe_tile_assert (m->tile, sram_addr[i].proto == -DRM_INTERCONNECT_SYSTEM ); +DRM_INTERCONNECT_SYSTEM || + sram_addr[i].proto ==XE_INTERCONNECT_P2P );xe_tile_assert (m->tile, addr);xe_tile_assert (m->tile,PAGE_ALIGNED (addr));
drivers/gpu/drm/xe/xe_svm.c +19 -7
@@ -1023,6 +1023,10 @@ static int xe_drm_pagemap_populate_mm(struct drm_pagemap *dpagemap, unsigned long timeslice_ms) {struct xe_pagemap *xpagemap =container_of (dpagemap,typeof (*xpagemap), dpagemap); +struct drm_pagemap_migrate_details mdetails = { + .timeslice_ms = timeslice_ms, + .source_peer_migrates =1 , + };struct xe_vram_region *vr =xe_pagemap_to_vr (xpagemap);struct dma_fence *pre_migrate_fence =NULL ;struct xe_device *xe = vr->xe;
@@ -1074,10 +1078,9 @@ static int xe_drm_pagemap_populate_mm(struct drm_pagemap *dpagemap,/* Ensure the device has a pm ref while there are device pages active. */ xe_pm_runtime_get_noresume (xe); +/* Consumes the devmem allocation ref. */ err =drm_pagemap_migrate_to_devmem (&bo->devmem_allocation, mm, - start, end, timeslice_ms); -if (err) -xe_svm_devmem_release (&bo->devmem_allocation); + start, end, &mdetails);xe_bo_unlock (bo);xe_bo_put (bo); }
@@ -1593,6 +1596,7 @@ int xe_svm_alloc_vram(struct xe_svm_range *range, const struct drm_gpusvm_ctx *cstruct xe_vm *vm =range_to_vm (&range->base);enum drm_gpusvm_scan_result migration_state;struct xe_device *xe = vm->xe; +int err, retries =1 ;xe_assert (range_to_vm (&range->base)->xe, range->base.pages.flags.migrate_devmem);range_debug (range,"ALLOCATE VRAM" );
@@ -1611,10 +1615,18 @@ int xe_svm_alloc_vram(struct xe_svm_range *range, const struct drm_gpusvm_ctx *cdrm_dbg (&xe->drm,"Request migration to device memory on \"%s\".\n" , dpagemap->drm->unique); -return drm_pagemap_populate_mm (dpagemap,xe_svm_range_start (range), -xe_svm_range_end (range), - range->base.gpusvm->mm, - ctx->timeslice_ms); +do { + err =drm_pagemap_populate_mm (dpagemap,xe_svm_range_start (range), +xe_svm_range_end (range), + range->base.gpusvm->mm, + ctx->timeslice_ms); + +if (err == -EBUSY && retries) +drm_gpusvm_range_evict (range->base.gpusvm, &range->base); + + }while (err == -EBUSY && retries--); + +return err; } static struct drm_pagemap_addr
drivers/gpu/drm/xe/xe_svm.h +1 -0
@@ -205,6 +205,7 @@ struct xe_tile;struct xe_vram_region ;#define XE_INTERCONNECT_VRAM 1 +#define XE_INTERCONNECT_P2P (XE_INTERCONNECT_VRAM + 1) struct xe_svm_range { struct {
include/drm/drm_pagemap.h +18 -1
@@ -317,10 +317,27 @@ struct drm_pagemap_devmem {struct dma_fence *pre_migrate_fence; }; +/** +* struct drm_pagemap_migrate_details - Details to govern migration. +* @timeslice_ms: The time requested for the migrated pagemap pages to +* be present in @mm before being allowed to be migrated back. +* @can_migrate_same_pagemap: Whether the copy function as indicated by +* the @source_peer_migrates flag, can migrate device pages within a +* single drm_pagemap. +* @source_peer_migrates: Whether on p2p migration, The source drm_pagemap +* should use the copy_to_ram() callback rather than the destination +* drm_pagemap should use the copy_to_devmem() callback. +*/ +struct drm_pagemap_migrate_details { +unsigned long timeslice_ms; +u32 can_migrate_same_pagemap :1 ; +u32 source_peer_migrates :1 ; +}; +int drm_pagemap_migrate_to_devmem (struct drm_pagemap_devmem *devmem_allocation,struct mm_struct *mm,unsigned long start,unsigned long end, -unsigned long timeslice_ms); +const struct drm_pagemap_migrate_details *mdetails);int drm_pagemap_evict_to_ram (struct drm_pagemap_devmem *devmem_allocation);
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 23/24 drm/pagemap: Support source migration over interconnect
In reply to Thomas HellströmSupport source interconnect migration by using the copy_to_ram() op of the source device private pages.
Source interconnect migration is required to flush the L2 cache of the source device, which among other things is a requirement for correct global atomic operation. It also enables the source GPU to potentially decompress any compressed content which is not understood by peers, and finally for the PCIe case, it's expected that writes over PCIe will be faster than reads.
The implementation can probably be improved by coalescing subregions with the same source.
v5:
- Update waiting for the pre_migrate_fence and comments around that, previously in another patch. (Himal).
- Actually select device private pages to migrate when source_peer_migrates is true.
--- drivers/gpu/drm/drm_pagemap.c | 204 +++++++++++++++++++++++++++------- 1 file changed, 166 insertions(+), 38 deletions(-)
drivers/gpu/drm/drm_pagemap.c +166 -38
@@ -206,11 +206,11 @@ static void drm_pagemap_get_devmem_page(struct page *page,/** * drm_pagemap_migrate_map_pages() - Map migration pages for GPU SVM migration -* @dev: The device for which the pages are being mapped -* @local_dpagemap: The drm_pagemap pointer of the local drm_pagemap. -* @pagemap_addr: Array to store DMA information corresponding to mapped pages -* @migrate_pfn: Array of migrate page frame numbers to map -* @npages: Number of pages to map +* @dev: The device performing the migration. +* @local_dpagemap: The drm_pagemap local to the migrating device. +* @pagemap_addr: Array to store DMA information corresponding to mapped pages. +* @migrate_pfn: Array of page frame numbers of system pages or peer pages to map. +* @npages: Number of system pages or peer pages to map. * @dir: Direction of data transfer (e.g., DMA_BIDIRECTIONAL) * @mdetails: Details governing the migration behaviour. *
@@ -229,8 +229,7 @@ static int drm_pagemap_migrate_map_pages(struct device *dev,enum dma_data_direction dir, const struct drm_pagemap_migrate_details *mdetails) { - unsigned long i; -unsigned long num_peer_pages =0 ; + unsigned long num_peer_pages = 0, num_local_pages = 0, i;for (i =0 ; i < npages;) {struct page *page =migrate_pfn_to_page (migrate_pfn[i]);
@@ -249,10 +248,15 @@ static int drm_pagemap_migrate_map_pages(struct device *dev,struct drm_pagemap *dpagemap = zdd->dpagemap;struct drm_pagemap_addr addr; -if (dpagemap == local_dpagemap && !mdetails->can_migrate_same_pagemap) - goto next; +if (dpagemap == local_dpagemap) { +if (!mdetails->can_migrate_same_pagemap) + goto next; + + num_local_pages +=NR_PAGES (order); + }else { + num_peer_pages +=NR_PAGES (order); + } - num_peer_pages +=NR_PAGES (order); addr = dpagemap->ops->device_map (dpagemap, dev, page, order, dir);if (dma_mapping_error (dev, addr.addr))return -EFAULT ;
@@ -276,6 +280,9 @@ static int drm_pagemap_migrate_map_pages(struct device *dev,if (num_peer_pages)drm_dbg (local_dpagemap->drm,"Migrating %lu peer pages over interconnect.\n" , num_peer_pages); +if (num_local_pages) +drm_dbg (local_dpagemap->drm,"Migrating %lu local pages over interconnect.\n" , + num_local_pages);return 0 ; }
@@ -328,6 +335,115 @@ npages_in_range(unsigned long start, unsigned long end)return (end - start) >>PAGE_SHIFT ; } +static int +drm_pagemap_migrate_remote_to_local (struct drm_pagemap_devmem *devmem, +struct device *remote_device, +struct drm_pagemap *remote_dpagemap, +unsigned long local_pfns[], +struct page *remote_pages[], +struct drm_pagemap_addr pagemap_addr[], +unsigned long npages, +const struct drm_pagemap_devmem_ops *ops, +const struct drm_pagemap_migrate_details *mdetails) + +{ +int err =drm_pagemap_migrate_map_pages (remote_device, remote_dpagemap, + pagemap_addr, local_pfns, + npages,DMA_FROM_DEVICE , mdetails); + +if (err) + goto out; + + err = ops->copy_to_ram (remote_pages, pagemap_addr, npages, + devmem->pre_migrate_fence); +out: +drm_pagemap_migrate_unmap_pages (remote_device, pagemap_addr, local_pfns, + npages,DMA_FROM_DEVICE ); +return err; +} + +static int +drm_pagemap_migrate_sys_to_dev (struct drm_pagemap_devmem *devmem, +unsigned long sys_pfns[], +struct page *local_pages[], +struct drm_pagemap_addr pagemap_addr[], +unsigned long npages, +const struct drm_pagemap_devmem_ops *ops, +const struct drm_pagemap_migrate_details *mdetails) +{ +int err =drm_pagemap_migrate_map_pages (devmem->dev, devmem->dpagemap, + pagemap_addr, sys_pfns, npages, +DMA_TO_DEVICE , mdetails); + +if (err) + goto out; + + err = ops->copy_to_devmem (local_pages, pagemap_addr, npages, + devmem->pre_migrate_fence); +out: +drm_pagemap_migrate_unmap_pages (devmem->dev, pagemap_addr, sys_pfns, npages, +DMA_TO_DEVICE ); +return err; +} + +/** +* struct migrate_range_loc - Cursor into the loop over migrate_pfns for migrating to +* device. +* @start: The current loop index. +* @device: migrating device. +* @dpagemap: Pointer to struct drm_pagemap used by the migrating device. +* @ops: The copy ops to be used for the migrating device. +*/ +struct migrate_range_loc { +unsigned long start; +struct device *device; +struct drm_pagemap *dpagemap; +const struct drm_pagemap_devmem_ops *ops; +}; + +static int drm_pagemap_migrate_range (struct drm_pagemap_devmem *devmem, +unsigned long src_pfns[], +unsigned long dst_pfns[], +struct page *pages[], +struct drm_pagemap_addr pagemap_addr[], +struct migrate_range_loc *last, +const struct migrate_range_loc *cur, +const struct drm_pagemap_migrate_details *mdetails) +{ +int ret =0 ; + +if (cur->start ==0 ) + goto out; + +if (cur->start <= last->start) +return 0 ; + +if (cur->dpagemap == last->dpagemap && cur->ops == last->ops) +return 0 ; + +if (last->dpagemap) + ret =drm_pagemap_migrate_remote_to_local (devmem, + last->device, + last->dpagemap, + &dst_pfns[last->start], + &pages[last->start], + &pagemap_addr[last->start], + cur->start - last->start, + last->ops, mdetails); + +else + ret =drm_pagemap_migrate_sys_to_dev (devmem, + &src_pfns[last->start], + &pages[last->start], + &pagemap_addr[last->start], + cur->start - last->start, + last->ops, mdetails); + +out: + *last = *cur; +return ret; +} +/** * drm_pagemap_migrate_to_devmem() - Migrate a struct mm_struct range to device memory * @devmem_allocation: The device memory allocation to migrate to.
@@ -365,10 +481,11 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, .end = end, .pgmap_owner = pagemap->owner, .flags = MIGRATE_VMA_SELECT_SYSTEM | MIGRATE_VMA_SELECT_DEVICE_COHERENT | - (mdetails->source_peer_migrates ? 0 : MIGRATE_VMA_SELECT_DEVICE_PRIVATE), + MIGRATE_VMA_SELECT_DEVICE_PRIVATE, };unsigned long i, npages =npages_in_range (start, end);unsigned long own_pages =0 , migrated_pages =0 ; +struct migrate_range_loc cur, last = {.device = dpagemap->drm->dev, .ops = ops};struct vm_area_struct *vas;struct drm_pagemap_zdd *zdd =NULL ;struct page **pages;
@@ -467,44 +584,55 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,if (err) goto err_finalize; - err =drm_pagemap_migrate_map_pages (devmem_allocation->dev, - devmem_allocation->dpagemap, pagemap_addr, - migrate.src, npages,DMA_TO_DEVICE , - mdetails); - -if (err) { -drm_pagemap_migrate_unmap_pages (devmem_allocation->dev, pagemap_addr, - migrate.src, npages,DMA_TO_DEVICE ); - - goto err_finalize; - } - own_pages =0 ; +for (i =0 ; i < npages; ++i) {struct page *page =pfn_to_page (migrate.dst[i]);struct page *src_page =migrate_pfn_to_page (migrate.src[i]); - -if (unlikely (src_page &&is_zone_device_page (src_page) && -page_pgmap (src_page) == pagemap && - !mdetails->can_migrate_same_pagemap)) { - migrate.dst[i] =0 ; - pages[i] =NULL ; - own_pages++; -continue ; + cur.start = i; + + pages[i] =NULL ; +if (src_page &&is_device_private_page (src_page)) { +struct drm_pagemap_zdd *src_zdd = src_page->zone_device_data; + +if (page_pgmap (src_page) == pagemap && + !mdetails->can_migrate_same_pagemap) { + migrate.dst[i] =0 ; + own_pages++; +continue ; + } +if (mdetails->source_peer_migrates) { + cur.dpagemap = src_zdd->dpagemap; + cur.ops = src_zdd->devmem_allocation->ops; + cur.device = cur.dpagemap->drm->dev; + pages[i] = src_page; + } + } +if (!pages[i]) { + cur.dpagemap =NULL ; + cur.ops = ops; + cur.device = dpagemap->drm->dev; + pages[i] = page; } - pages[i] = page; migrate.dst[i] =migrate_pfn (migrate.dst[i]);drm_pagemap_get_devmem_page (page, zdd); - } -drm_WARN_ON (dpagemap->drm, !!own_pages); - err = ops->copy_to_devmem (pages, pagemap_addr, npages, - devmem_allocation->pre_migrate_fence); -drm_pagemap_migrate_unmap_pages (devmem_allocation->dev, pagemap_addr, - migrate.src, npages,DMA_TO_DEVICE ); +/* If we switched the migrating drm_pagemap, migrate previous pages now */ + err =drm_pagemap_migrate_range (devmem_allocation, migrate.src, migrate.dst, + pages, pagemap_addr, &last, &cur, + mdetails); +if (err) + goto err_finalize; + } + cur.start = npages; + cur.ops =NULL ;/* Force migration */ + err =drm_pagemap_migrate_range (devmem_allocation, migrate.src, migrate.dst, + pages, pagemap_addr, &last, &cur, mdetails);if (err) goto err_finalize; +drm_WARN_ON (dpagemap->drm, !!own_pages); +dma_fence_put (devmem_allocation->pre_migrate_fence); devmem_allocation->pre_migrate_fence =NULL ;
Signature · 1 line
2.51.1
Thomas Hellström
maintainerPATCH v6 24/24 drm/xe/svm: Serialize migration to device if racing
In reply to Thomas HellströmIntroduce an rw-semaphore to serialize migration to device if it's likely that migration races with another device migration of the same CPU address space range.
This is a temporary fix to attempt to mitigate a livelock that might happen if many devices try to migrate a range at the same time, and it affects only devices using the xe driver. A longer term fix is probably improvements in the core mm migration layer.
--- drivers/gpu/drm/xe/xe_svm.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-)
drivers/gpu/drm/xe/xe_svm.c +20 -2
@@ -1593,10 +1593,12 @@ struct drm_pagemap *xe_vma_resolve_pagemap(struct xe_vma *vma, struct xe_tile *tint xe_svm_alloc_vram (struct xe_svm_range *range,const struct drm_gpusvm_ctx *ctx,struct drm_pagemap *dpagemap) { +static DECLARE_RWSEM (driver_migrate_lock);struct xe_vm *vm =range_to_vm (&range->base);enum drm_gpusvm_scan_result migration_state;struct xe_device *xe = vm->xe;int err, retries =1 ; +bool write_locked = false;xe_assert (range_to_vm (&range->base)->xe, range->base.pages.flags.migrate_devmem);range_debug (range,"ALLOCATE VRAM" );
@@ -1615,16 +1617,32 @@ int xe_svm_alloc_vram(struct xe_svm_range *range, const struct drm_gpusvm_ctx *cdrm_dbg (&xe->drm,"Request migration to device memory on \"%s\".\n" , dpagemap->drm->unique); + err =down_read_interruptible (&driver_migrate_lock); +if (err) +return err;do { err =drm_pagemap_populate_mm (dpagemap,xe_svm_range_start (range),xe_svm_range_end (range), range->base.gpusvm->mm, ctx->timeslice_ms); -if (err == -EBUSY && retries) -drm_gpusvm_range_evict (range->base.gpusvm, &range->base); +if (err == -EBUSY && retries) { +if (!write_locked) { +int lock_err; +up_read (&driver_migrate_lock); + lock_err =down_write_killable (&driver_migrate_lock); +if (lock_err) +return lock_err; + write_locked = true; + } +drm_gpusvm_range_evict (range->base.gpusvm, &range->base); + } }while (err == -EBUSY && retries--); +if (write_locked) +up_write (&driver_migrate_lock); +else +up_read (&driver_migrate_lock);return err; }
Signature · 1 line
2.51.1
Hey,
For merging the pagemap patches through drm-xe:
Den 2025-12-19 kl. 12:32, skrev Thomas Hellström:
Quoted 126 lines
This series aims at providing an initial implementation of multi-device SVM, where communitcation with peers (migration and direct execution out of peer memory) uses some form of fast interconnect. In this series we're using pcie p2p.
In a multi-device environment, the struct pages for device-private memory (the
dev_pagemap) may take up a significant amount of system memory. We therefore want to provide a means of revoking / removing thedev_pagemapsnot in use. In particular when a device is offlined, we want to block migrating *to* the device memory and migrate data already existing in the devices memory to system. Thedev_pagemapthen becomes unused and can be removed.Removing and setting up a large
dev_pagemapis also quite time-consuming, so removal of unuseddev_pagemapsonly happens on system memory pressure using a shrinker.Patch 1 is a small debug printout fix.
Patch 2 removes some dead code.
Patch 3 fixes a condition where memory was used while being cleared. Patches 4-9 deals with dynamicdrm_pagemapsas described above. Patches 10-14 adds infrastructure to handle remotedrm_pagemapswith fast interconnects.
Patch 15 extends the xemadvise()UAPI to handle remotedrm_pagemaps. Patch 16 adds a pcie-p2p dma SVM interconnect to the xe driver. Patch 17 adds some SVM-related debug printouts for xe.
Patch 18 adds documentation on how thedrm_pagemapsare reference counted. Patch 19 Cleans up the usage of thedev_privateowner.
Patch 20 Introduces a gpusvm function to scan the current CPU address space. Patch 21 Uses the above function in Xe to avoid unnecessary migrations. Patch 22 Addsdrm_pagemapsupport for p2p destination migration. Patch 23 Addsdrm_pagemapsupport for p2p source migration. Patch 24 Adds an rwsem to optionally serialize migration.What's still missing is implementation of migration policies. That will be implemented in follow-up series.
v2:
- Address review comments from Matt Brost.
- Fix compilation issues reported by automated testing
- Add patch 1, 17.
- What's now patch 16 was extended to support p2p migration. v3:
- Add patches 2, 18, 19, 10, 22. Main functionality is the address space scan to avoid unnecessary migration, and p2p source migration which is needed on Xe to decompress and to flush out the L2 cache.
- Rework what's now Patch 21 slightly.
- Minor fixes all over the place.
v4:
- Fix a build error (CI)
- Fix possibly incorrect waiting for thepre_migrate_fence. v5:
- New patch: broken out from patch 22: drm/pagemap: Remove some dead code (Matt Brost)
- New patch: drm/xe/svm: Serialize migration to device if racing (Matt Brost)
- Fix a UAF in what's now patch 3. (CI)
- Release the migrate fence early in patch 3.
- Address review comments to patch 3. See the patch for details.
- Address review comments to patch 22. See the patch for details.
- Rebase, update R-Bs.
v6:
- Fix in patch 3. (Matt Brost)
- Rebase patch 23 on fix in patch 3.
- Update R-Bs.Test-with: [email protected]
Thomas Hellström (24):
drm/xe/svm: Fix a debug printout
drm/pagemap: Remove some dead code
drm/pagemap, drm/xe: Ensure that the devmem allocation is idle before
use
drm/pagemap, drm/xe: Add refcounting to structdrm_pagemapdrm/pagemap: Add a refcounteddrm_pagemapbackpointer to struct
drm_pagemap_zdd
drm/pagemap, drm/xe: Managedrm_pagemapprovider lifetimes drm/pagemap: Add adrm_pagemapcache and shrinker
drm/xe: Use thedrm_pagemapcache and shrinker drm/pagemap: Remove thedrm_pagemap_create()interface drm/pagemap_util: Add a utility to assign an owner to a set of
interconnected gpus
drm/xe: Use thedrm_pagemap_utilhelper to get a svm pagemap owner drm/xe: Pass adrm_pagemappointer around with the memory advise
attributes
drm/xe: Use the vma attibutedrm_pagemapto select where to migrate drm/xe: Simplifymadvise_preferred_mem_loc()
drm/xe/uapi: Extend the madvise functionality to support foreign
pagemap placement for svm
drm/xe: Support pcie p2p dma as a fast interconnect drm/xe/vm: Add a couple of VM debug printouts
drm/xe/svm: Document how xe keepsdrm_pagemapreferences drm/pagemap, drm/xe: Clean up the use of the device-private page owner drm/gpusvm: Introduce a function to scan the current migration state drm/xe: Usedrm_gpusvm_scan_mm()
drm/pagemap, drm/xe: Support destination migration over interconnect drm/pagemap: Support source migration over interconnect drm/xe/svm: Serialize migration to device if racingdrivers/gpu/drm/Makefile | 3 +- drivers/gpu/drm/drm_gpusvm.c | 124 +++++ drivers/gpu/drm/drm_pagemap.c | 565 +++++++++++++++++---- drivers/gpu/drm/drm_pagemap_util.c | 568 +++++++++++++++++++++ drivers/gpu/drm/xe/xe_device.c | 20 + drivers/gpu/drm/xe/xe_device.h | 2 + drivers/gpu/drm/xe/xe_device_types.h | 5 + drivers/gpu/drm/xe/xe_migrate.c | 29 +- drivers/gpu/drm/xe/xe_migrate.h | 6 +- drivers/gpu/drm/xe/xe_svm.c | 721 ++++++++++++++++++++++----- drivers/gpu/drm/xe/xe_svm.h | 85 +++- drivers/gpu/drm/xe/xe_tile.c | 34 +- drivers/gpu/drm/xe/xe_tile.h | 21 + drivers/gpu/drm/xe/xe_userptr.c | 2 +- drivers/gpu/drm/xe/xe_vm.c | 65 ++- drivers/gpu/drm/xe/xe_vm.h | 1 + drivers/gpu/drm/xe/xe_vm_madvise.c | 106 +++- drivers/gpu/drm/xe/xe_vm_types.h | 21 +- drivers/gpu/drm/xe/xe_vram_types.h | 15 +- include/drm/drm_gpusvm.h | 29 ++ include/drm/drm_pagemap.h | 128 ++++- include/drm/drm_pagemap_util.h | 92 ++++ include/uapi/drm/xe_drm.h | 18 +- 23 files changed, 2359 insertions(+), 301 deletions(-) create mode 100644 drivers/gpu/drm/drm_pagemap_util.c create mode 100644 include/drm/drm_pagemap_util.h
✗ CI.checkpatch: warning for Dynamic drm_pagemaps and Initial multi-device SVM (rev7)
In reply to Thomas Hellström== Series Details ==
== Series Details ==
Series: Dynamic drm_pagemaps and Initial multi-device SVM (rev7)
URL : https://patchwork.freedesktop.org/series/156525/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master 99339247d1ae4378b24366da182e712bdc623311
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit abec65093d8fa7fa506a8ea8477e2ff6d790b41c
Author: Thomas Hellström <[email protected]> Date: Fri Dec 19 12:33:20 2025 +0100
drm/xe/svm: Serialize migration to device if racing
Introduce an rw-semaphore to serialize migration to device if it's likely that migration races with another device migration of the same CPU address space range.
This is a temporary fix to attempt to mitigate a livelock that might happen if many devices try to migrate a range at the same time, and it affects only devices using the xe driver. A longer term fix is probably improvements in the core mm migration layer.
+ /mt/dim checkpatch f101d56dc32350daa45c130ff7a6d46512f614a9 drm-intel 352552776ef3 drm/xe/svm: Fix a debug printout00c1b29abd29 drm/pagemap: Remove some dead code97c84c301127 drm/pagemap, drm/xe: Ensure that the devmem allocation is idle before use f78a6b72577e drm/pagemap, drm/xe: Add refcounting to struct drm_pagemap 36c42d702f05 drm/pagemap: Add a refcounted drm_pagemap backpointer to struct drm_pagemap_zdd 2e7e18b49ad4 drm/pagemap, drm/xe: Manage drm_pagemap provider lifetimes a9a721429203 drm/pagemap: Add a drm_pagemap cache and shrinker
-:177: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating? #177:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 725 lines checked8c7fa46eaad0 drm/xe: Use the drm_pagemap cache and shrinker95a892491e28 drm/pagemap: Remove the drm_pagemap_create() interface676155ee4fcb drm/pagemap_util: Add a utility to assign an owner to a set of interconnected gpus -:213: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_name' - possible side-effects? #213: FILE: include/drm/drm_pagemap_util.h:53:
+#define DRM_PAGEMAP_OWNER_LIST_DEFINE(_name) \
+ struct drm_pagemap_owner_list _name = { \
+ .lock = __MUTEX_INITIALIZER((_name).lock), \
+ .peers = LIST_HEAD_INIT((_name).peers) }
total: 0 errors, 0 warnings, 1 checks, 192 lines checked9c3481ca40cb drm/xe: Use the drm_pagemap_util helper to get a svm pagemap owner c1a158d1b5f8 drm/xe: Pass a drm_pagemap pointer around with the memory advise attributes 5db62104b410 drm/xe: Use the vma attibute drm_pagemap to select where to migrate d44a483ccbdf drm/xe: Simplify madvise_preferred_mem_loc()d6b967f189cb drm/xe/uapi: Extend the madvise functionality to support foreign pagemap placement for svm 4fc7e3290a77 drm/xe: Support pcie p2p dma as a fast interconnecteaa6449fa0f9 drm/xe/vm: Add a couple of VM debug printoutsd19c1b92372b drm/xe/svm: Document how xe keeps drm_pagemap references975b4bf7f4e5 drm/pagemap, drm/xe: Clean up the use of the device-private page owner 4bda664e3a9c drm/gpusvm: Introduce a function to scan the current migration state 241c3cd735b6 drm/xe: Use drm_gpusvm_scan_mm()4a2424e7bb4d drm/pagemap, drm/xe: Support destination migration over interconnect ce3c89d1c4c4 drm/pagemap: Support source migration over interconnectabec65093d8f drm/xe/svm: Serialize migration to device if racing
Patchwork
CI✓ CI.KUnit: success for Dynamic drm_pagemaps and Initial multi-device SVM (rev7)
In reply to Thomas Hellström== Series Details ==
== Series Details ==
Series: Dynamic drm_pagemaps and Initial multi-device SVM (rev7)
URL : https://patchwork.freedesktop.org/series/156525/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig [18:44:08] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [18:44:12] 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 [18:44:44] Starting KUnit Kernel (1/1)... [18:44:44] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [18:44:44] ================== guc_buf (11 subtests) =================== [18:44:44] [PASSED] test_smallest [18:44:44] [PASSED] test_largest [18:44:44] [PASSED] test_granular [18:44:44] [PASSED] test_unique [18:44:44] [PASSED] test_overlap [18:44:44] [PASSED] test_reusable [18:44:44] [PASSED] test_too_big [18:44:44] [PASSED] test_flush [18:44:44] [PASSED] test_lookup [18:44:44] [PASSED] test_data [18:44:44] [PASSED] test_class [18:44:44] ===================== [PASSED] guc_buf ===================== [18:44:44] =================== guc_dbm (7 subtests) =================== [18:44:44] [PASSED] test_empty [18:44:44] [PASSED] test_default [18:44:44] ======================== test_size ======================== [18:44:44] [PASSED] 4 [18:44:44] [PASSED] 8 [18:44:44] [PASSED] 32 [18:44:44] [PASSED] 256 [18:44:44] ==================== [PASSED] test_size ==================== [18:44:44] ======================= test_reuse ======================== [18:44:44] [PASSED] 4 [18:44:44] [PASSED] 8 [18:44:44] [PASSED] 32 [18:44:44] [PASSED] 256 [18:44:44] =================== [PASSED] test_reuse ==================== [18:44:44] =================== test_range_overlap ==================== [18:44:44] [PASSED] 4 [18:44:44] [PASSED] 8 [18:44:44] [PASSED] 32 [18:44:44] [PASSED] 256 [18:44:44] =============== [PASSED] test_range_overlap ================ [18:44:44] =================== test_range_compact ==================== [18:44:44] [PASSED] 4 [18:44:44] [PASSED] 8 [18:44:44] [PASSED] 32 [18:44:44] [PASSED] 256 [18:44:44] =============== [PASSED] test_range_compact ================ [18:44:44] ==================== test_range_spare ===================== [18:44:44] [PASSED] 4 [18:44:44] [PASSED] 8 [18:44:44] [PASSED] 32 [18:44:44] [PASSED] 256 [18:44:44] ================ [PASSED] test_range_spare ================= [18:44:44] ===================== [PASSED] guc_dbm ===================== [18:44:44] =================== guc_idm (6 subtests) =================== [18:44:44] [PASSED] bad_init [18:44:44] [PASSED] no_init [18:44:44] [PASSED] init_fini [18:44:44] [PASSED] check_used [18:44:44] [PASSED] check_quota [18:44:44] [PASSED] check_all [18:44:44] ===================== [PASSED] guc_idm ===================== [18:44:44] ================== no_relay (3 subtests) =================== [18:44:44] [PASSED] xe_drops_guc2pf_if_not_ready [18:44:44] [PASSED] xe_drops_guc2vf_if_not_ready [18:44:44] [PASSED] xe_rejects_send_if_not_ready [18:44:44] ==================== [PASSED] no_relay ===================== [18:44:44] ================== pf_relay (14 subtests) ================== [18:44:44] [PASSED] pf_rejects_guc2pf_too_short [18:44:44] [PASSED] pf_rejects_guc2pf_too_long [18:44:44] [PASSED] pf_rejects_guc2pf_no_payload [18:44:44] [PASSED] pf_fails_no_payload [18:44:44] [PASSED] pf_fails_bad_origin [18:44:44] [PASSED] pf_fails_bad_type [18:44:44] [PASSED] pf_txn_reports_error [18:44:44] [PASSED] pf_txn_sends_pf2guc [18:44:44] [PASSED] pf_sends_pf2guc [18:44:44] [SKIPPED] pf_loopback_nop [18:44:44] [SKIPPED] pf_loopback_echo [18:44:44] [SKIPPED] pf_loopback_fail [18:44:44] [SKIPPED] pf_loopback_busy [18:44:44] [SKIPPED] pf_loopback_retry [18:44:44] ==================== [PASSED] pf_relay ===================== [18:44:44] ================== vf_relay (3 subtests) =================== [18:44:44] [PASSED] vf_rejects_guc2vf_too_short [18:44:44] [PASSED] vf_rejects_guc2vf_too_long [18:44:44] [PASSED] vf_rejects_guc2vf_no_payload [18:44:44] ==================== [PASSED] vf_relay ===================== [18:44:44] ================ pf_gt_config (6 subtests) ================= [18:44:44] [PASSED] fair_contexts_1vf [18:44:44] [PASSED] fair_doorbells_1vf [18:44:44] [PASSED] fair_ggtt_1vf [18:44:44] ====================== fair_contexts ====================== [18:44:44] [PASSED] 1 VF [18:44:44] [PASSED] 2 VFs [18:44:44] [PASSED] 3 VFs [18:44:44] [PASSED] 4 VFs [18:44:44] [PASSED] 5 VFs [18:44:44] [PASSED] 6 VFs [18:44:44] [PASSED] 7 VFs [18:44:44] [PASSED] 8 VFs [18:44:44] [PASSED] 9 VFs [18:44:44] [PASSED] 10 VFs [18:44:44] [PASSED] 11 VFs [18:44:44] [PASSED] 12 VFs [18:44:44] [PASSED] 13 VFs [18:44:44] [PASSED] 14 VFs [18:44:44] [PASSED] 15 VFs [18:44:44] [PASSED] 16 VFs [18:44:44] [PASSED] 17 VFs [18:44:44] [PASSED] 18 VFs [18:44:44] [PASSED] 19 VFs [18:44:44] [PASSED] 20 VFs [18:44:44] [PASSED] 21 VFs [18:44:44] [PASSED] 22 VFs [18:44:44] [PASSED] 23 VFs [18:44:44] [PASSED] 24 VFs [18:44:44] [PASSED] 25 VFs [18:44:44] [PASSED] 26 VFs [18:44:44] [PASSED] 27 VFs [18:44:44] [PASSED] 28 VFs [18:44:44] [PASSED] 29 VFs [18:44:44] [PASSED] 30 VFs [18:44:44] [PASSED] 31 VFs [18:44:44] [PASSED] 32 VFs [18:44:44] [PASSED] 33 VFs [18:44:44] [PASSED] 34 VFs [18:44:44] [PASSED] 35 VFs [18:44:44] [PASSED] 36 VFs [18:44:44] [PASSED] 37 VFs [18:44:44] [PASSED] 38 VFs [18:44:44] [PASSED] 39 VFs [18:44:44] [PASSED] 40 VFs [18:44:44] [PASSED] 41 VFs [18:44:44] [PASSED] 42 VFs [18:44:44] [PASSED] 43 VFs [18:44:44] [PASSED] 44 VFs [18:44:44] [PASSED] 45 VFs [18:44:44] [PASSED] 46 VFs [18:44:44] [PASSED] 47 VFs [18:44:44] [PASSED] 48 VFs [18:44:44] [PASSED] 49 VFs [18:44:44] [PASSED] 50 VFs [18:44:44] [PASSED] 51 VFs [18:44:44] [PASSED] 52 VFs [18:44:44] [PASSED] 53 VFs [18:44:44] [PASSED] 54 VFs [18:44:44] [PASSED] 55 VFs [18:44:44] [PASSED] 56 VFs [18:44:44] [PASSED] 57 VFs [18:44:44] [PASSED] 58 VFs [18:44:44] [PASSED] 59 VFs [18:44:44] [PASSED] 60 VFs [18:44:44] [PASSED] 61 VFs [18:44:44] [PASSED] 62 VFs [18:44:44] [PASSED] 63 VFs [18:44:44] ================== [PASSED] fair_contexts ================== [18:44:44] ===================== fair_doorbells ====================== [18:44:44] [PASSED] 1 VF [18:44:44] [PASSED] 2 VFs [18:44:44] [PASSED] 3 VFs [18:44:44] [PASSED] 4 VFs [18:44:44] [PASSED] 5 VFs [18:44:44] [PASSED] 6 VFs [18:44:44] [PASSED] 7 VFs [18:44:44] [PASSED] 8 VFs [18:44:44] [PASSED] 9 VFs [18:44:44] [PASSED] 10 VFs [18:44:44] [PASSED] 11 VFs [18:44:44] [PASSED] 12 VFs [18:44:44] [PASSED] 13 VFs [18:44:44] [PASSED] 14 VFs [18:44:44] [PASSED] 15 VFs [18:44:44] [PASSED] 16 VFs [18:44:44] [PASSED] 17 VFs [18:44:44] [PASSED] 18 VFs [18:44:44] [PASSED] 19 VFs [18:44:44] [PASSED] 20 VFs [18:44:44] [PASSED] 21 VFs [18:44:44] [PASSED] 22 VFs [18:44:44] [PASSED] 23 VFs [18:44:44] [PASSED] 24 VFs [18:44:44] [PASSED] 25 VFs [18:44:44] [PASSED] 26 VFs [18:44:44] [PASSED] 27 VFs [18:44:44] [PASSED] 28 VFs [18:44:44] [PASSED] 29 VFs [18:44:44] [PASSED] 30 VFs [18:44:44] [PASSED] 31 VFs [18:44:44] [PASSED] 32 VFs [18:44:44] [PASSED] 33 VFs [18:44:44] [PASSED] 34 VFs [18:44:44] [PASSED] 35 VFs [18:44:44] [PASSED] 36 VFs [18:44:44] [PASSED] 37 VFs [18:44:44] [PASSED] 38 VFs [18:44:44] [PASSED] 39 VFs [18:44:44] [PASSED] 40 VFs [18:44:44] [PASSED] 41 VFs [18:44:44] [PASSED] 42 VFs [18:44:44] [PASSED] 43 VFs [18:44:44] [PASSED] 44 VFs [18:44:44] [PASSED] 45 VFs [18:44:44] [PASSED] 46 VFs [18:44:44] [PASSED] 47 VFs [18:44:44] [PASSED] 48 VFs [18:44:44] [PASSED] 49 VFs [18:44:44] [PASSED] 50 VFs [18:44:44] [PASSED] 51 VFs [18:44:44] [PASSED] 52 VFs [18:44:44] [PASSED] 53 VFs [18:44:44] [PASSED] 54 VFs [18:44:44] [PASSED] 55 VFs [18:44:44] [PASSED] 56 VFs [18:44:44] [PASSED] 57 VFs [18:44:44] [PASSED] 58 VFs [18:44:44] [PASSED] 59 VFs [18:44:44] [PASSED] 60 VFs [18:44:44] [PASSED] 61 VFs [18:44:44] [PASSED] 62 VFs [18:44:44] [PASSED] 63 VFs [18:44:44] ================= [PASSED] fair_doorbells ================== [18:44:44] ======================== fair_ggtt ======================== [18:44:44] [PASSED] 1 VF [18:44:44] [PASSED] 2 VFs [18:44:44] [PASSED] 3 VFs [18:44:44] [PASSED] 4 VFs [18:44:44] [PASSED] 5 VFs [18:44:44] [PASSED] 6 VFs [18:44:44] [PASSED] 7 VFs [18:44:44] [PASSED] 8 VFs [18:44:44] [PASSED] 9 VFs [18:44:44] [PASSED] 10 VFs [18:44:44] [PASSED] 11 VFs [18:44:44] [PASSED] 12 VFs [18:44:44] [PASSED] 13 VFs [18:44:44] [PASSED] 14 VFs [18:44:44] [PASSED] 15 VFs [18:44:44] [PASSED] 16 VFs [18:44:44] [PASSED] 17 VFs [18:44:44] [PASSED] 18 VFs [18:44:44] [PASSED] 19 VFs [18:44:44] [PASSED] 20 VFs [18:44:44] [PASSED] 21 VFs [18:44:44] [PASSED] 22 VFs [18:44:44] [PASSED] 23 VFs [18:44:44] [PASSED] 24 VFs [18:44:44] [PASSED] 25 VFs [18:44:44] [PASSED] 26 VFs [18:44:44] [PASSED] 27 VFs [18:44:44] [PASSED] 28 VFs [18:44:44] [PASSED] 29 VFs [18:44:44] [PASSED] 30 VFs [18:44:44] [PASSED] 31 VFs [18:44:44] [PASSED] 32 VFs [18:44:44] [PASSED] 33 VFs [18:44:44] [PASSED] 34 VFs [18:44:44] [PASSED] 35 VFs [18:44:44] [PASSED] 36 VFs [18:44:44] [PASSED] 37 VFs [18:44:44] [PASSED] 38 VFs [18:44:44] [PASSED] 39 VFs [18:44:44] [PASSED] 40 VFs [18:44:44] [PASSED] 41 VFs [18:44:44] [PASSED] 42 VFs [18:44:44] [PASSED] 43 VFs [18:44:44] [PASSED] 44 VFs [18:44:44] [PASSED] 45 VFs [18:44:44] [PASSED] 46 VFs [18:44:44] [PASSED] 47 VFs [18:44:44] [PASSED] 48 VFs [18:44:44] [PASSED] 49 VFs [18:44:44] [PASSED] 50 VFs [18:44:44] [PASSED] 51 VFs [18:44:44] [PASSED] 52 VFs [18:44:44] [PASSED] 53 VFs [18:44:44] [PASSED] 54 VFs [18:44:44] [PASSED] 55 VFs [18:44:44] [PASSED] 56 VFs [18:44:44] [PASSED] 57 VFs [18:44:44] [PASSED] 58 VFs [18:44:44] [PASSED] 59 VFs [18:44:44] [PASSED] 60 VFs [18:44:44] [PASSED] 61 VFs [18:44:44] [PASSED] 62 VFs [18:44:44] [PASSED] 63 VFs [18:44:44] ==================== [PASSED] fair_ggtt ==================== [18:44:44] ================== [PASSED] pf_gt_config =================== [18:44:44] ===================== lmtt (1 subtest) ===================== [18:44:44] ======================== test_ops ========================= [18:44:44] [PASSED] 2-level [18:44:44] [PASSED] multi-level [18:44:44] ==================== [PASSED] test_ops ===================== [18:44:44] ====================== [PASSED] lmtt ======================= [18:44:44] ================= pf_service (11 subtests) ================= [18:44:44] [PASSED] pf_negotiate_any [18:44:44] [PASSED] pf_negotiate_base_match [18:44:44] [PASSED] pf_negotiate_base_newer [18:44:44] [PASSED] pf_negotiate_base_next [18:44:44] [SKIPPED] pf_negotiate_base_older [18:44:44] [PASSED] pf_negotiate_base_prev [18:44:44] [PASSED] pf_negotiate_latest_match [18:44:44] [PASSED] pf_negotiate_latest_newer [18:44:44] [PASSED] pf_negotiate_latest_next [18:44:44] [SKIPPED] pf_negotiate_latest_older [18:44:44] [SKIPPED] pf_negotiate_latest_prev [18:44:44] =================== [PASSED] pf_service ==================== [18:44:44] ================= xe_guc_g2g (2 subtests) ================== [18:44:44] ============== xe_live_guc_g2g_kunit_default ============== [18:44:44] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ========== [18:44:44] ============== xe_live_guc_g2g_kunit_allmem =============== [18:44:44] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ========== [18:44:44] =================== [SKIPPED] xe_guc_g2g =================== [18:44:44] =================== xe_mocs (2 subtests) =================== [18:44:44] ================ xe_live_mocs_kernel_kunit ================ [18:44:44] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============ [18:44:44] ================ xe_live_mocs_reset_kunit ================= [18:44:44] ============ [SKIPPED] xe_live_mocs_reset_kunit ============ [18:44:44] ==================== [SKIPPED] xe_mocs ===================== [18:44:44] ================= xe_migrate (2 subtests) ================== [18:44:44] ================= xe_migrate_sanity_kunit ================= [18:44:44] ============ [SKIPPED] xe_migrate_sanity_kunit ============= [18:44:44] ================== xe_validate_ccs_kunit ================== [18:44:44] ============= [SKIPPED] xe_validate_ccs_kunit ============== [18:44:44] =================== [SKIPPED] xe_migrate =================== [18:44:44] ================== xe_dma_buf (1 subtest) ================== [18:44:44] ==================== xe_dma_buf_kunit ===================== [18:44:44] ================ [SKIPPED] xe_dma_buf_kunit ================ [18:44:44] =================== [SKIPPED] xe_dma_buf =================== [18:44:44] ================= xe_bo_shrink (1 subtest) ================= [18:44:44] =================== xe_bo_shrink_kunit ==================== [18:44:44] =============== [SKIPPED] xe_bo_shrink_kunit =============== [18:44:44] ================== [SKIPPED] xe_bo_shrink ================== [18:44:44] ==================== xe_bo (2 subtests) ==================== [18:44:44] ================== xe_ccs_migrate_kunit =================== [18:44:44] ============== [SKIPPED] xe_ccs_migrate_kunit ============== [18:44:44] ==================== xe_bo_evict_kunit ==================== [18:44:44] =============== [SKIPPED] xe_bo_evict_kunit ================ [18:44:44] ===================== [SKIPPED] xe_bo ====================== [18:44:44] ==================== args (13 subtests) ==================== [18:44:44] [PASSED] count_args_test [18:44:44] [PASSED] call_args_example [18:44:44] [PASSED] call_args_test [18:44:44] [PASSED] drop_first_arg_example [18:44:44] [PASSED] drop_first_arg_test [18:44:44] [PASSED] first_arg_example [18:44:44] [PASSED] first_arg_test [18:44:44] [PASSED] last_arg_example [18:44:44] [PASSED] last_arg_test [18:44:44] [PASSED] pick_arg_example [18:44:44] [PASSED] if_args_example [18:44:44] [PASSED] if_args_test [18:44:44] [PASSED] sep_comma_example [18:44:44] ====================== [PASSED] args ======================= [18:44:44] =================== xe_pci (3 subtests) ==================== [18:44:44] ==================== check_graphics_ip ==================== [18:44:44] [PASSED] 12.00 Xe_LP [18:44:44] [PASSED] 12.10 Xe_LP+ [18:44:44] [PASSED] 12.55 Xe_HPG [18:44:44] [PASSED] 12.60 Xe_HPC [18:44:44] [PASSED] 12.70 Xe_LPG [18:44:44] [PASSED] 12.71 Xe_LPG [18:44:44] [PASSED] 12.74 Xe_LPG+ [18:44:44] [PASSED] 20.01 Xe2_HPG [18:44:44] [PASSED] 20.02 Xe2_HPG [18:44:44] [PASSED] 20.04 Xe2_LPG [18:44:44] [PASSED] 30.00 Xe3_LPG [18:44:44] [PASSED] 30.01 Xe3_LPG [18:44:44] [PASSED] 30.03 Xe3_LPG [18:44:44] [PASSED] 30.04 Xe3_LPG [18:44:44] [PASSED] 30.05 Xe3_LPG [18:44:44] [PASSED] 35.11 Xe3p_XPC [18:44:44] ================ [PASSED] check_graphics_ip ================ [18:44:44] ===================== check_media_ip ====================== [18:44:44] [PASSED] 12.00 Xe_M [18:44:44] [PASSED] 12.55 Xe_HPM [18:44:44] [PASSED] 13.00 Xe_LPM+ [18:44:44] [PASSED] 13.01 Xe2_HPM [18:44:44] [PASSED] 20.00 Xe2_LPM [18:44:44] [PASSED] 30.00 Xe3_LPM [18:44:44] [PASSED] 30.02 Xe3_LPM [18:44:44] [PASSED] 35.00 Xe3p_LPM [18:44:44] [PASSED] 35.03 Xe3p_HPM [18:44:44] ================= [PASSED] check_media_ip ================== [18:44:44] =================== check_platform_desc =================== [18:44:44] [PASSED] 0x9A60 (TIGERLAKE) [18:44:44] [PASSED] 0x9A68 (TIGERLAKE) [18:44:44] [PASSED] 0x9A70 (TIGERLAKE) [18:44:44] [PASSED] 0x9A40 (TIGERLAKE) [18:44:44] [PASSED] 0x9A49 (TIGERLAKE) [18:44:44] [PASSED] 0x9A59 (TIGERLAKE) [18:44:44] [PASSED] 0x9A78 (TIGERLAKE) [18:44:44] [PASSED] 0x9AC0 (TIGERLAKE) [18:44:44] [PASSED] 0x9AC9 (TIGERLAKE) [18:44:44] [PASSED] 0x9AD9 (TIGERLAKE) [18:44:44] [PASSED] 0x9AF8 (TIGERLAKE) [18:44:44] [PASSED] 0x4C80 (ROCKETLAKE) [18:44:44] [PASSED] 0x4C8A (ROCKETLAKE) [18:44:44] [PASSED] 0x4C8B (ROCKETLAKE) [18:44:44] [PASSED] 0x4C8C (ROCKETLAKE) [18:44:44] [PASSED] 0x4C90 (ROCKETLAKE) [18:44:44] [PASSED] 0x4C9A (ROCKETLAKE) [18:44:44] [PASSED] 0x4680 (ALDERLAKE_S) [18:44:44] [PASSED] 0x4682 (ALDERLAKE_S) [18:44:44] [PASSED] 0x4688 (ALDERLAKE_S) [18:44:44] [PASSED] 0x468A (ALDERLAKE_S) [18:44:44] [PASSED] 0x468B (ALDERLAKE_S) [18:44:44] [PASSED] 0x4690 (ALDERLAKE_S) [18:44:44] [PASSED] 0x4692 (ALDERLAKE_S) [18:44:44] [PASSED] 0x4693 (ALDERLAKE_S) [18:44:44] [PASSED] 0x46A0 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46A1 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46A2 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46A3 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46A6 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46A8 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46AA (ALDERLAKE_P) [18:44:44] [PASSED] 0x462A (ALDERLAKE_P) [18:44:44] [PASSED] 0x4626 (ALDERLAKE_P) [18:44:44] [PASSED] 0x4628 (ALDERLAKE_P) stty: 'standard input': Inappropriate ioctl for device [18:44:44] [PASSED] 0x46B0 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46B1 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46B2 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46B3 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46C0 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46C1 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46C2 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46C3 (ALDERLAKE_P) [18:44:44] [PASSED] 0x46D0 (ALDERLAKE_N) [18:44:44] [PASSED] 0x46D1 (ALDERLAKE_N) [18:44:44] [PASSED] 0x46D2 (ALDERLAKE_N) [18:44:44] [PASSED] 0x46D3 (ALDERLAKE_N) [18:44:44] [PASSED] 0x46D4 (ALDERLAKE_N) [18:44:44] [PASSED] 0xA721 (ALDERLAKE_P) [18:44:44] [PASSED] 0xA7A1 (ALDERLAKE_P) [18:44:44] [PASSED] 0xA7A9 (ALDERLAKE_P) [18:44:44] [PASSED] 0xA7AC (ALDERLAKE_P) [18:44:44] [PASSED] 0xA7AD (ALDERLAKE_P) [18:44:44] [PASSED] 0xA720 (ALDERLAKE_P) [18:44:44] [PASSED] 0xA7A0 (ALDERLAKE_P) [18:44:44] [PASSED] 0xA7A8 (ALDERLAKE_P) [18:44:44] [PASSED] 0xA7AA (ALDERLAKE_P) [18:44:44] [PASSED] 0xA7AB (ALDERLAKE_P) [18:44:44] [PASSED] 0xA780 (ALDERLAKE_S) [18:44:44] [PASSED] 0xA781 (ALDERLAKE_S) [18:44:44] [PASSED] 0xA782 (ALDERLAKE_S) [18:44:44] [PASSED] 0xA783 (ALDERLAKE_S) [18:44:44] [PASSED] 0xA788 (ALDERLAKE_S) [18:44:44] [PASSED] 0xA789 (ALDERLAKE_S) [18:44:44] [PASSED] 0xA78A (ALDERLAKE_S) [18:44:44] [PASSED] 0xA78B (ALDERLAKE_S) [18:44:44] [PASSED] 0x4905 (DG1) [18:44:44] [PASSED] 0x4906 (DG1) [18:44:44] [PASSED] 0x4907 (DG1) [18:44:44] [PASSED] 0x4908 (DG1) [18:44:44] [PASSED] 0x4909 (DG1) [18:44:44] [PASSED] 0x56C0 (DG2) [18:44:44] [PASSED] 0x56C2 (DG2) [18:44:44] [PASSED] 0x56C1 (DG2) [18:44:44] [PASSED] 0x7D51 (METEORLAKE) [18:44:44] [PASSED] 0x7DD1 (METEORLAKE) [18:44:44] [PASSED] 0x7D41 (METEORLAKE) [18:44:44] [PASSED] 0x7D67 (METEORLAKE) [18:44:44] [PASSED] 0xB640 (METEORLAKE) [18:44:44] [PASSED] 0x56A0 (DG2) [18:44:44] [PASSED] 0x56A1 (DG2) [18:44:44] [PASSED] 0x56A2 (DG2) [18:44:44] [PASSED] 0x56BE (DG2) [18:44:44] [PASSED] 0x56BF (DG2) [18:44:44] [PASSED] 0x5690 (DG2) [18:44:44] [PASSED] 0x5691 (DG2) [18:44:44] [PASSED] 0x5692 (DG2) [18:44:44] [PASSED] 0x56A5 (DG2) [18:44:44] [PASSED] 0x56A6 (DG2) [18:44:44] [PASSED] 0x56B0 (DG2) [18:44:44] [PASSED] 0x56B1 (DG2) [18:44:44] [PASSED] 0x56BA (DG2) [18:44:44] [PASSED] 0x56BB (DG2) [18:44:44] [PASSED] 0x56BC (DG2) [18:44:44] [PASSED] 0x56BD (DG2) [18:44:44] [PASSED] 0x5693 (DG2) [18:44:44] [PASSED] 0x5694 (DG2) [18:44:44] [PASSED] 0x5695 (DG2) [18:44:44] [PASSED] 0x56A3 (DG2) [18:44:44] [PASSED] 0x56A4 (DG2) [18:44:44] [PASSED] 0x56B2 (DG2) [18:44:44] [PASSED] 0x56B3 (DG2) [18:44:44] [PASSED] 0x5696 (DG2) [18:44:44] [PASSED] 0x5697 (DG2) [18:44:44] [PASSED] 0xB69 (PVC) [18:44:44] [PASSED] 0xB6E (PVC) [18:44:44] [PASSED] 0xBD4 (PVC) [18:44:44] [PASSED] 0xBD5 (PVC) [18:44:44] [PASSED] 0xBD6 (PVC) [18:44:44] [PASSED] 0xBD7 (PVC) [18:44:44] [PASSED] 0xBD8 (PVC) [18:44:44] [PASSED] 0xBD9 (PVC) [18:44:44] [PASSED] 0xBDA (PVC) [18:44:44] [PASSED] 0xBDB (PVC) [18:44:44] [PASSED] 0xBE0 (PVC) [18:44:44] [PASSED] 0xBE1 (PVC) [18:44:44] [PASSED] 0xBE5 (PVC) [18:44:44] [PASSED] 0x7D40 (METEORLAKE) [18:44:44] [PASSED] 0x7D45 (METEORLAKE) [18:44:44] [PASSED] 0x7D55 (METEORLAKE) [18:44:44] [PASSED] 0x7D60 (METEORLAKE) [18:44:44] [PASSED] 0x7DD5 (METEORLAKE) [18:44:44] [PASSED] 0x6420 (LUNARLAKE) [18:44:44] [PASSED] 0x64A0 (LUNARLAKE) [18:44:44] [PASSED] 0x64B0 (LUNARLAKE) [18:44:44] [PASSED] 0xE202 (BATTLEMAGE) [18:44:44] [PASSED] 0xE209 (BATTLEMAGE) [18:44:44] [PASSED] 0xE20B (BATTLEMAGE) [18:44:44] [PASSED] 0xE20C (BATTLEMAGE) [18:44:44] [PASSED] 0xE20D (BATTLEMAGE) [18:44:44] [PASSED] 0xE210 (BATTLEMAGE) [18:44:44] [PASSED] 0xE211 (BATTLEMAGE) [18:44:44] [PASSED] 0xE212 (BATTLEMAGE) [18:44:44] [PASSED] 0xE216 (BATTLEMAGE) [18:44:44] [PASSED] 0xE220 (BATTLEMAGE) [18:44:44] [PASSED] 0xE221 (BATTLEMAGE) [18:44:44] [PASSED] 0xE222 (BATTLEMAGE) [18:44:44] [PASSED] 0xE223 (BATTLEMAGE) [18:44:44] [PASSED] 0xB080 (PANTHERLAKE) [18:44:44] [PASSED] 0xB081 (PANTHERLAKE) [18:44:44] [PASSED] 0xB082 (PANTHERLAKE) [18:44:44] [PASSED] 0xB083 (PANTHERLAKE) [18:44:44] [PASSED] 0xB084 (PANTHERLAKE) [18:44:44] [PASSED] 0xB085 (PANTHERLAKE) [18:44:44] [PASSED] 0xB086 (PANTHERLAKE) [18:44:44] [PASSED] 0xB087 (PANTHERLAKE) [18:44:44] [PASSED] 0xB08F (PANTHERLAKE) [18:44:44] [PASSED] 0xB090 (PANTHERLAKE) [18:44:44] [PASSED] 0xB0A0 (PANTHERLAKE) [18:44:44] [PASSED] 0xB0B0 (PANTHERLAKE) [18:44:44] [PASSED] 0xFD80 (PANTHERLAKE) [18:44:44] [PASSED] 0xFD81 (PANTHERLAKE) [18:44:44] [PASSED] 0xD740 (NOVALAKE_S) [18:44:44] [PASSED] 0xD741 (NOVALAKE_S) [18:44:44] [PASSED] 0xD742 (NOVALAKE_S) [18:44:44] [PASSED] 0xD743 (NOVALAKE_S) [18:44:44] [PASSED] 0xD744 (NOVALAKE_S) [18:44:44] [PASSED] 0xD745 (NOVALAKE_S) [18:44:44] [PASSED] 0x674C (CRESCENTISLAND) [18:44:44] =============== [PASSED] check_platform_desc =============== [18:44:44] ===================== [PASSED] xe_pci ====================== [18:44:44] =================== xe_rtp (2 subtests) ==================== [18:44:44] =============== xe_rtp_process_to_sr_tests ================ [18:44:44] [PASSED] coalesce-same-reg [18:44:44] [PASSED] no-match-no-add [18:44:44] [PASSED] match-or [18:44:44] [PASSED] match-or-xfail [18:44:44] [PASSED] no-match-no-add-multiple-rules [18:44:44] [PASSED] two-regs-two-entries [18:44:44] [PASSED] clr-one-set-other [18:44:44] [PASSED] set-field [18:44:44] [PASSED] conflict-duplicate [18:44:44] [PASSED] conflict-not-disjoint [18:44:44] [PASSED] conflict-reg-type [18:44:44] =========== [PASSED] xe_rtp_process_to_sr_tests ============ [18:44:44] ================== xe_rtp_process_tests =================== [18:44:44] [PASSED] active1 [18:44:44] [PASSED] active2 [18:44:44] [PASSED] active-inactive [18:44:44] [PASSED] inactive-active [18:44:44] [PASSED] inactive-1st_or_active-inactive [18:44:44] [PASSED] inactive-2nd_or_active-inactive [18:44:44] [PASSED] inactive-last_or_active-inactive [18:44:44] [PASSED] inactive-no_or_active-inactive [18:44:44] ============== [PASSED] xe_rtp_process_tests =============== [18:44:44] ===================== [PASSED] xe_rtp ====================== [18:44:44] ==================== xe_wa (1 subtest) ===================== [18:44:44] ======================== xe_wa_gt ========================= [18:44:44] [PASSED] TIGERLAKE B0 [18:44:44] [PASSED] DG1 A0 [18:44:44] [PASSED] DG1 B0 [18:44:44] [PASSED] ALDERLAKE_S A0 [18:44:44] [PASSED] ALDERLAKE_S B0 [18:44:44] [PASSED] ALDERLAKE_S C0 [18:44:44] [PASSED] ALDERLAKE_S D0 [18:44:44] [PASSED] ALDERLAKE_P A0 [18:44:44] [PASSED] ALDERLAKE_P B0 [18:44:44] [PASSED] ALDERLAKE_P C0 [18:44:44] [PASSED] ALDERLAKE_S RPLS D0 [18:44:44] [PASSED] ALDERLAKE_P RPLU E0 [18:44:44] [PASSED] DG2 G10 C0 [18:44:44] [PASSED] DG2 G11 B1 [18:44:44] [PASSED] DG2 G12 A1 [18:44:44] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0 [18:44:44] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0 [18:44:44] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0 [18:44:44] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0 [18:44:44] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0 [18:44:44] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1 [18:44:44] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0 [18:44:44] ==================== [PASSED] xe_wa_gt ===================== [18:44:44] ====================== [PASSED] xe_wa ====================== [18:44:44] ============================================================ [18:44:44] Testing complete. Ran 512 tests: passed: 494, skipped: 18 [18:44:44] Elapsed time: 36.244s total, 4.202s configuring, 31.525s building, 0.465s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig [18:44:44] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [18:44:46] 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 [18:45:11] Starting KUnit Kernel (1/1)... [18:45:11] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [18:45:11] ============ drm_test_pick_cmdline (2 subtests) ============ [18:45:11] [PASSED] drm_test_pick_cmdline_res_1920_1080_60 [18:45:11] =============== drm_test_pick_cmdline_named =============== [18:45:11] [PASSED] NTSC [18:45:11] [PASSED] NTSC-J [18:45:11] [PASSED] PAL [18:45:11] [PASSED] PAL-M [18:45:11] =========== [PASSED] drm_test_pick_cmdline_named =========== [18:45:11] ============== [PASSED] drm_test_pick_cmdline ============== [18:45:11] == drm_test_atomic_get_connector_for_encoder (1 subtest) === [18:45:11] [PASSED] drm_test_drm_atomic_get_connector_for_encoder [18:45:11] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ==== [18:45:11] =========== drm_validate_clone_mode (2 subtests) =========== [18:45:11] ============== drm_test_check_in_clone_mode =============== [18:45:11] [PASSED] in_clone_mode [18:45:11] [PASSED] not_in_clone_mode [18:45:11] ========== [PASSED] drm_test_check_in_clone_mode =========== [18:45:11] =============== drm_test_check_valid_clones =============== [18:45:11] [PASSED] not_in_clone_mode [18:45:11] [PASSED] valid_clone [18:45:11] [PASSED] invalid_clone [18:45:11] =========== [PASSED] drm_test_check_valid_clones =========== [18:45:11] ============= [PASSED] drm_validate_clone_mode ============= [18:45:11] ============= drm_validate_modeset (1 subtest) ============= [18:45:11] [PASSED] drm_test_check_connector_changed_modeset [18:45:11] ============== [PASSED] drm_validate_modeset =============== [18:45:11] ====== drm_test_bridge_get_current_state (2 subtests) ====== [18:45:11] [PASSED] drm_test_drm_bridge_get_current_state_atomic [18:45:11] [PASSED] drm_test_drm_bridge_get_current_state_legacy [18:45:11] ======== [PASSED] drm_test_bridge_get_current_state ======== [18:45:11] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ====== [18:45:11] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic [18:45:11] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled [18:45:11] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy [18:45:11] ======== [PASSED] drm_test_bridge_helper_reset_crtc ======== [18:45:11] ============== drm_bridge_alloc (2 subtests) =============== [18:45:11] [PASSED] drm_test_drm_bridge_alloc_basic [18:45:11] [PASSED] drm_test_drm_bridge_alloc_get_put [18:45:11] ================ [PASSED] drm_bridge_alloc ================= [18:45:11] ================== drm_buddy (8 subtests) ================== [18:45:11] [PASSED] drm_test_buddy_alloc_limit [18:45:11] [PASSED] drm_test_buddy_alloc_optimistic [18:45:11] [PASSED] drm_test_buddy_alloc_pessimistic [18:45:11] [PASSED] drm_test_buddy_alloc_pathological [18:45:11] [PASSED] drm_test_buddy_alloc_contiguous [18:45:11] [PASSED] drm_test_buddy_alloc_clear [18:45:11] [PASSED] drm_test_buddy_alloc_range_bias [18:45:11] [PASSED] drm_test_buddy_fragmentation_performance [18:45:11] ==================== [PASSED] drm_buddy ==================== [18:45:11] ============= drm_cmdline_parser (40 subtests) ============= [18:45:11] [PASSED] drm_test_cmdline_force_d_only [18:45:11] [PASSED] drm_test_cmdline_force_D_only_dvi [18:45:11] [PASSED] drm_test_cmdline_force_D_only_hdmi [18:45:11] [PASSED] drm_test_cmdline_force_D_only_not_digital [18:45:11] [PASSED] drm_test_cmdline_force_e_only [18:45:11] [PASSED] drm_test_cmdline_res [18:45:11] [PASSED] drm_test_cmdline_res_vesa [18:45:11] [PASSED] drm_test_cmdline_res_vesa_rblank [18:45:11] [PASSED] drm_test_cmdline_res_rblank [18:45:11] [PASSED] drm_test_cmdline_res_bpp [18:45:11] [PASSED] drm_test_cmdline_res_refresh [18:45:11] [PASSED] drm_test_cmdline_res_bpp_refresh [18:45:11] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced [18:45:11] [PASSED] drm_test_cmdline_res_bpp_refresh_margins [18:45:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off [18:45:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on [18:45:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog [18:45:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital [18:45:11] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on [18:45:11] [PASSED] drm_test_cmdline_res_margins_force_on [18:45:11] [PASSED] drm_test_cmdline_res_vesa_margins [18:45:11] [PASSED] drm_test_cmdline_name [18:45:11] [PASSED] drm_test_cmdline_name_bpp [18:45:11] [PASSED] drm_test_cmdline_name_option [18:45:11] [PASSED] drm_test_cmdline_name_bpp_option [18:45:11] [PASSED] drm_test_cmdline_rotate_0 [18:45:11] [PASSED] drm_test_cmdline_rotate_90 [18:45:11] [PASSED] drm_test_cmdline_rotate_180 [18:45:11] [PASSED] drm_test_cmdline_rotate_270 [18:45:11] [PASSED] drm_test_cmdline_hmirror [18:45:11] [PASSED] drm_test_cmdline_vmirror [18:45:11] [PASSED] drm_test_cmdline_margin_options [18:45:11] [PASSED] drm_test_cmdline_multiple_options [18:45:11] [PASSED] drm_test_cmdline_bpp_extra_and_option [18:45:11] [PASSED] drm_test_cmdline_extra_and_option [18:45:11] [PASSED] drm_test_cmdline_freestanding_options [18:45:11] [PASSED] drm_test_cmdline_freestanding_force_e_and_options [18:45:11] [PASSED] drm_test_cmdline_panel_orientation [18:45:11] ================ drm_test_cmdline_invalid ================= [18:45:11] [PASSED] margin_only [18:45:11] [PASSED] interlace_only [18:45:11] [PASSED] res_missing_x [18:45:11] [PASSED] res_missing_y [18:45:11] [PASSED] res_bad_y [18:45:11] [PASSED] res_missing_y_bpp [18:45:11] [PASSED] res_bad_bpp [18:45:11] [PASSED] res_bad_refresh [18:45:11] [PASSED] res_bpp_refresh_force_on_off [18:45:11] [PASSED] res_invalid_mode [18:45:11] [PASSED] res_bpp_wrong_place_mode [18:45:11] [PASSED] name_bpp_refresh [18:45:11] [PASSED] name_refresh [18:45:11] [PASSED] name_refresh_wrong_mode [18:45:11] [PASSED] name_refresh_invalid_mode [18:45:11] [PASSED] rotate_multiple [18:45:11] [PASSED] rotate_invalid_val [18:45:11] [PASSED] rotate_truncated [18:45:11] [PASSED] invalid_option [18:45:11] [PASSED] invalid_tv_option [18:45:11] [PASSED] truncated_tv_option [18:45:11] ============ [PASSED] drm_test_cmdline_invalid ============= [18:45:11] =============== drm_test_cmdline_tv_options =============== [18:45:11] [PASSED] NTSC [18:45:11] [PASSED] NTSC_443 [18:45:11] [PASSED] NTSC_J [18:45:11] [PASSED] PAL [18:45:11] [PASSED] PAL_M [18:45:11] [PASSED] PAL_N [18:45:11] [PASSED] SECAM [18:45:11] [PASSED] MONO_525 [18:45:11] [PASSED] MONO_625 [18:45:11] =========== [PASSED] drm_test_cmdline_tv_options =========== [18:45:11] =============== [PASSED] drm_cmdline_parser ================ [18:45:11] ========== drmm_connector_hdmi_init (20 subtests) ========== [18:45:11] [PASSED] drm_test_connector_hdmi_init_valid [18:45:11] [PASSED] drm_test_connector_hdmi_init_bpc_8 [18:45:11] [PASSED] drm_test_connector_hdmi_init_bpc_10 [18:45:11] [PASSED] drm_test_connector_hdmi_init_bpc_12 [18:45:11] [PASSED] drm_test_connector_hdmi_init_bpc_invalid [18:45:11] [PASSED] drm_test_connector_hdmi_init_bpc_null [18:45:11] [PASSED] drm_test_connector_hdmi_init_formats_empty [18:45:11] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb [18:45:11] === drm_test_connector_hdmi_init_formats_yuv420_allowed === [18:45:11] [PASSED] supported_formats=0x9 yuv420_allowed=1 [18:45:11] [PASSED] supported_formats=0x9 yuv420_allowed=0 [18:45:11] [PASSED] supported_formats=0x3 yuv420_allowed=1 [18:45:11] [PASSED] supported_formats=0x3 yuv420_allowed=0 [18:45:11] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed === [18:45:11] [PASSED] drm_test_connector_hdmi_init_null_ddc [18:45:11] [PASSED] drm_test_connector_hdmi_init_null_product [18:45:11] [PASSED] drm_test_connector_hdmi_init_null_vendor [18:45:11] [PASSED] drm_test_connector_hdmi_init_product_length_exact [18:45:11] [PASSED] drm_test_connector_hdmi_init_product_length_too_long [18:45:11] [PASSED] drm_test_connector_hdmi_init_product_valid [18:45:11] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact [18:45:11] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long [18:45:11] [PASSED] drm_test_connector_hdmi_init_vendor_valid [18:45:11] ========= drm_test_connector_hdmi_init_type_valid ========= [18:45:11] [PASSED] HDMI-A [18:45:11] [PASSED] HDMI-B [18:45:11] ===== [PASSED] drm_test_connector_hdmi_init_type_valid ===== [18:45:11] ======== drm_test_connector_hdmi_init_type_invalid ======== [18:45:11] [PASSED] Unknown [18:45:11] [PASSED] VGA [18:45:11] [PASSED] DVI-I [18:45:11] [PASSED] DVI-D [18:45:11] [PASSED] DVI-A [18:45:11] [PASSED] Composite [18:45:11] [PASSED] SVIDEO [18:45:11] [PASSED] LVDS [18:45:11] [PASSED] Component [18:45:11] [PASSED] DIN [18:45:11] [PASSED] DP [18:45:11] [PASSED] TV [18:45:11] [PASSED] eDP [18:45:11] [PASSED] Virtual [18:45:11] [PASSED] DSI [18:45:11] [PASSED] DPI [18:45:11] [PASSED] Writeback [18:45:11] [PASSED] SPI [18:45:11] [PASSED] USB [18:45:11] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ==== [18:45:11] ============ [PASSED] drmm_connector_hdmi_init ============= [18:45:11] ============= drmm_connector_init (3 subtests) ============= [18:45:11] [PASSED] drm_test_drmm_connector_init [18:45:11] [PASSED] drm_test_drmm_connector_init_null_ddc [18:45:11] ========= drm_test_drmm_connector_init_type_valid ========= [18:45:11] [PASSED] Unknown [18:45:11] [PASSED] VGA [18:45:11] [PASSED] DVI-I [18:45:11] [PASSED] DVI-D [18:45:11] [PASSED] DVI-A [18:45:11] [PASSED] Composite [18:45:11] [PASSED] SVIDEO [18:45:11] [PASSED] LVDS [18:45:11] [PASSED] Component [18:45:11] [PASSED] DIN [18:45:11] [PASSED] DP [18:45:11] [PASSED] HDMI-A [18:45:11] [PASSED] HDMI-B [18:45:11] [PASSED] TV [18:45:11] [PASSED] eDP [18:45:11] [PASSED] Virtual [18:45:11] [PASSED] DSI [18:45:11] [PASSED] DPI [18:45:11] [PASSED] Writeback [18:45:11] [PASSED] SPI [18:45:11] [PASSED] USB [18:45:11] ===== [PASSED] drm_test_drmm_connector_init_type_valid ===== [18:45:11] =============== [PASSED] drmm_connector_init =============== [18:45:11] ========= drm_connector_dynamic_init (6 subtests) ========== [18:45:11] [PASSED] drm_test_drm_connector_dynamic_init [18:45:11] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc [18:45:11] [PASSED] drm_test_drm_connector_dynamic_init_not_added [18:45:11] [PASSED] drm_test_drm_connector_dynamic_init_properties [18:45:11] ===== drm_test_drm_connector_dynamic_init_type_valid ====== [18:45:11] [PASSED] Unknown [18:45:11] [PASSED] VGA [18:45:11] [PASSED] DVI-I [18:45:11] [PASSED] DVI-D [18:45:11] [PASSED] DVI-A [18:45:11] [PASSED] Composite [18:45:11] [PASSED] SVIDEO [18:45:11] [PASSED] LVDS [18:45:11] [PASSED] Component [18:45:11] [PASSED] DIN [18:45:11] [PASSED] DP [18:45:11] [PASSED] HDMI-A [18:45:11] [PASSED] HDMI-B [18:45:11] [PASSED] TV [18:45:11] [PASSED] eDP [18:45:11] [PASSED] Virtual [18:45:11] [PASSED] DSI [18:45:11] [PASSED] DPI [18:45:11] [PASSED] Writeback [18:45:11] [PASSED] SPI [18:45:11] [PASSED] USB [18:45:11] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid == [18:45:11] ======== drm_test_drm_connector_dynamic_init_name ========= [18:45:11] [PASSED] Unknown [18:45:11] [PASSED] VGA [18:45:11] [PASSED] DVI-I [18:45:11] [PASSED] DVI-D [18:45:11] [PASSED] DVI-A [18:45:11] [PASSED] Composite [18:45:11] [PASSED] SVIDEO [18:45:11] [PASSED] LVDS [18:45:11] [PASSED] Component [18:45:11] [PASSED] DIN [18:45:11] [PASSED] DP [18:45:11] [PASSED] HDMI-A [18:45:11] [PASSED] HDMI-B [18:45:11] [PASSED] TV [18:45:11] [PASSED] eDP [18:45:11] [PASSED] Virtual [18:45:11] [PASSED] DSI [18:45:11] [PASSED] DPI [18:45:11] [PASSED] Writeback [18:45:11] [PASSED] SPI [18:45:11] [PASSED] USB [18:45:11] ==== [PASSED] drm_test_drm_connector_dynamic_init_name ===== [18:45:11] =========== [PASSED] drm_connector_dynamic_init ============ [18:45:11] ==== drm_connector_dynamic_register_early (4 subtests) ===== [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_early_defer [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object [18:45:11] ====== [PASSED] drm_connector_dynamic_register_early ======= [18:45:11] ======= drm_connector_dynamic_register (7 subtests) ======== [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_on_list [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_no_defer [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_no_init [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_mode_object [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_sysfs [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name [18:45:11] [PASSED] drm_test_drm_connector_dynamic_register_debugfs [18:45:11] ========= [PASSED] drm_connector_dynamic_register ========== [18:45:11] = drm_connector_attach_broadcast_rgb_property (2 subtests) = [18:45:11] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property [18:45:11] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector [18:45:11] === [PASSED] drm_connector_attach_broadcast_rgb_property === [18:45:11] ========== drm_get_tv_mode_from_name (2 subtests) ========== [18:45:11] ========== drm_test_get_tv_mode_from_name_valid =========== [18:45:11] [PASSED] NTSC [18:45:11] [PASSED] NTSC-443 [18:45:11] [PASSED] NTSC-J [18:45:11] [PASSED] PAL [18:45:11] [PASSED] PAL-M [18:45:11] [PASSED] PAL-N [18:45:11] [PASSED] SECAM [18:45:11] [PASSED] Mono [18:45:11] ====== [PASSED] drm_test_get_tv_mode_from_name_valid ======= [18:45:11] [PASSED] drm_test_get_tv_mode_from_name_truncated [18:45:11] ============ [PASSED] drm_get_tv_mode_from_name ============ [18:45:11] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) = [18:45:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb [18:45:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc [18:45:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1 [18:45:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc [18:45:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1 [18:45:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double [18:45:11] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid = [18:45:11] [PASSED] VIC 96 [18:45:11] [PASSED] VIC 97 [18:45:11] [PASSED] VIC 101 [18:45:11] [PASSED] VIC 102 [18:45:11] [PASSED] VIC 106 [18:45:11] [PASSED] VIC 107 [18:45:11] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid === [18:45:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc [18:45:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc [18:45:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc [18:45:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc [18:45:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc [18:45:11] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ==== [18:45:11] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) == [18:45:11] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ==== [18:45:11] [PASSED] Automatic [18:45:11] [PASSED] Full [18:45:11] [PASSED] Limited 16:235 [18:45:11] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name === [18:45:11] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid [18:45:11] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ==== [18:45:11] == drm_hdmi_connector_get_output_format_name (2 subtests) == [18:45:11] === drm_test_drm_hdmi_connector_get_output_format_name ==== [18:45:11] [PASSED] RGB [18:45:11] [PASSED] YUV 4:2:0 [18:45:11] [PASSED] YUV 4:2:2 [18:45:11] [PASSED] YUV 4:4:4 [18:45:11] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name === [18:45:11] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid [18:45:11] ==== [PASSED] drm_hdmi_connector_get_output_format_name ==== [18:45:11] ============= drm_damage_helper (21 subtests) ============== [18:45:11] [PASSED] drm_test_damage_iter_no_damage [18:45:11] [PASSED] drm_test_damage_iter_no_damage_fractional_src [18:45:11] [PASSED] drm_test_damage_iter_no_damage_src_moved [18:45:11] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved [18:45:11] [PASSED] drm_test_damage_iter_no_damage_not_visible [18:45:11] [PASSED] drm_test_damage_iter_no_damage_no_crtc [18:45:11] [PASSED] drm_test_damage_iter_no_damage_no_fb [18:45:11] [PASSED] drm_test_damage_iter_simple_damage [18:45:11] [PASSED] drm_test_damage_iter_single_damage [18:45:11] [PASSED] drm_test_damage_iter_single_damage_intersect_src [18:45:11] [PASSED] drm_test_damage_iter_single_damage_outside_src [18:45:11] [PASSED] drm_test_damage_iter_single_damage_fractional_src [18:45:11] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src [18:45:11] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src [18:45:11] [PASSED] drm_test_damage_iter_single_damage_src_moved [18:45:11] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved [18:45:11] [PASSED] drm_test_damage_iter_damage [18:45:11] [PASSED] drm_test_damage_iter_damage_one_intersect [18:45:11] [PASSED] drm_test_damage_iter_damage_one_outside [18:45:11] [PASSED] drm_test_damage_iter_damage_src_moved [18:45:11] [PASSED] drm_test_damage_iter_damage_not_visible [18:45:11] ================ [PASSED] drm_damage_helper ================ [18:45:11] ============== drm_dp_mst_helper (3 subtests) ============== [18:45:11] ============== drm_test_dp_mst_calc_pbn_mode ============== [18:45:11] [PASSED] Clock 154000 BPP 30 DSC disabled [18:45:11] [PASSED] Clock 234000 BPP 30 DSC disabled [18:45:11] [PASSED] Clock 297000 BPP 24 DSC disabled [18:45:11] [PASSED] Clock 332880 BPP 24 DSC enabled [18:45:11] [PASSED] Clock 324540 BPP 24 DSC enabled [18:45:11] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ========== [18:45:11] ============== drm_test_dp_mst_calc_pbn_div =============== [18:45:11] [PASSED] Link rate 2000000 lane count 4 [18:45:11] [PASSED] Link rate 2000000 lane count 2 [18:45:11] [PASSED] Link rate 2000000 lane count 1 [18:45:11] [PASSED] Link rate 1350000 lane count 4 [18:45:11] [PASSED] Link rate 1350000 lane count 2 [18:45:11] [PASSED] Link rate 1350000 lane count 1 [18:45:11] [PASSED] Link rate 1000000 lane count 4 [18:45:11] [PASSED] Link rate 1000000 lane count 2 [18:45:11] [PASSED] Link rate 1000000 lane count 1 [18:45:11] [PASSED] Link rate 810000 lane count 4 [18:45:11] [PASSED] Link rate 810000 lane count 2 [18:45:11] [PASSED] Link rate 810000 lane count 1 [18:45:11] [PASSED] Link rate 540000 lane count 4 [18:45:11] [PASSED] Link rate 540000 lane count 2 [18:45:11] [PASSED] Link rate 540000 lane count 1 [18:45:11] [PASSED] Link rate 270000 lane count 4 [18:45:11] [PASSED] Link rate 270000 lane count 2 [18:45:11] [PASSED] Link rate 270000 lane count 1 [18:45:11] [PASSED] Link rate 162000 lane count 4 [18:45:11] [PASSED] Link rate 162000 lane count 2 [18:45:11] [PASSED] Link rate 162000 lane count 1 [18:45:11] ========== [PASSED] drm_test_dp_mst_calc_pbn_div =========== [18:45:11] ========= drm_test_dp_mst_sideband_msg_req_decode ========= [18:45:11] [PASSED] DP_ENUM_PATH_RESOURCES with port number [18:45:11] [PASSED] DP_POWER_UP_PHY with port number [18:45:11] [PASSED] DP_POWER_DOWN_PHY with port number [18:45:11] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks [18:45:11] [PASSED] DP_ALLOCATE_PAYLOAD with port number [18:45:11] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI [18:45:11] [PASSED] DP_ALLOCATE_PAYLOAD with PBN [18:45:11] [PASSED] DP_QUERY_PAYLOAD with port number [18:45:11] [PASSED] DP_QUERY_PAYLOAD with VCPI [18:45:11] [PASSED] DP_REMOTE_DPCD_READ with port number [18:45:11] [PASSED] DP_REMOTE_DPCD_READ with DPCD address [18:45:11] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes [18:45:11] [PASSED] DP_REMOTE_DPCD_WRITE with port number [18:45:11] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address [18:45:11] [PASSED] DP_REMOTE_DPCD_WRITE with data array [18:45:11] [PASSED] DP_REMOTE_I2C_READ with port number [18:45:11] [PASSED] DP_REMOTE_I2C_READ with I2C device ID [18:45:11] [PASSED] DP_REMOTE_I2C_READ with transactions array [18:45:11] [PASSED] DP_REMOTE_I2C_WRITE with port number [18:45:11] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID [18:45:11] [PASSED] DP_REMOTE_I2C_WRITE with data array [18:45:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID [18:45:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID [18:45:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event [18:45:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event [18:45:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior [18:45:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior [18:45:11] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode ===== [18:45:11] ================ [PASSED] drm_dp_mst_helper ================ [18:45:11] ================== drm_exec (7 subtests) =================== [18:45:11] [PASSED] sanitycheck [18:45:11] [PASSED] test_lock [18:45:11] [PASSED] test_lock_unlock [18:45:11] [PASSED] test_duplicates [18:45:11] [PASSED] test_prepare [18:45:11] [PASSED] test_prepare_array [18:45:11] [PASSED] test_multiple_loops [18:45:11] ==================== [PASSED] drm_exec ===================== [18:45:11] =========== drm_format_helper_test (17 subtests) =========== [18:45:11] ============== drm_test_fb_xrgb8888_to_gray8 ============== [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ========== [18:45:11] ============= drm_test_fb_xrgb8888_to_rgb332 ============== [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ========== [18:45:11] ============= drm_test_fb_xrgb8888_to_rgb565 ============== [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ========== [18:45:11] ============ drm_test_fb_xrgb8888_to_xrgb1555 ============= [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 ========= [18:45:11] ============ drm_test_fb_xrgb8888_to_argb1555 ============= [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 ========= [18:45:11] ============ drm_test_fb_xrgb8888_to_rgba5551 ============= [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 ========= [18:45:11] ============= drm_test_fb_xrgb8888_to_rgb888 ============== [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ========== [18:45:11] ============= drm_test_fb_xrgb8888_to_bgr888 ============== [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ========== [18:45:11] ============ drm_test_fb_xrgb8888_to_argb8888 ============= [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 ========= [18:45:11] =========== drm_test_fb_xrgb8888_to_xrgb2101010 =========== [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 ======= [18:45:11] =========== drm_test_fb_xrgb8888_to_argb2101010 =========== [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 ======= [18:45:11] ============== drm_test_fb_xrgb8888_to_mono =============== [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ========== [PASSED] drm_test_fb_xrgb8888_to_mono =========== [18:45:11] ==================== drm_test_fb_swab ===================== [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ================ [PASSED] drm_test_fb_swab ================= [18:45:11] ============ drm_test_fb_xrgb8888_to_xbgr8888 ============= [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 ========= [18:45:11] ============ drm_test_fb_xrgb8888_to_abgr8888 ============= [18:45:11] [PASSED] single_pixel_source_buffer [18:45:11] [PASSED] single_pixel_clip_rectangle [18:45:11] [PASSED] well_known_colors [18:45:11] [PASSED] destination_pitch [18:45:11] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 ========= [18:45:11] ================= drm_test_fb_clip_offset ================= [18:45:11] [PASSED] pass through [18:45:11] [PASSED] horizontal offset [18:45:11] [PASSED] vertical offset [18:45:11] [PASSED] horizontal and vertical offset [18:45:11] [PASSED] horizontal offset (custom pitch) [18:45:11] [PASSED] vertical offset (custom pitch) [18:45:11] [PASSED] horizontal and vertical offset (custom pitch) [18:45:11] ============= [PASSED] drm_test_fb_clip_offset ============= [18:45:11] =================== drm_test_fb_memcpy ==================== [18:45:11] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258) [18:45:11] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258) [18:45:11] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559) [18:45:11] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258) [18:45:11] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258) [18:45:11] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559) [18:45:11] [PASSED] well_known_colors: XB24 little-endian (0x34324258) [18:45:11] [PASSED] well_known_colors: XRA8 little-endian (0x38415258) [18:45:11] [PASSED] well_known_colors: YU24 little-endian (0x34325559) [18:45:11] [PASSED] destination_pitch: XB24 little-endian (0x34324258) [18:45:11] [PASSED] destination_pitch: XRA8 little-endian (0x38415258) [18:45:11] [PASSED] destination_pitch: YU24 little-endian (0x34325559) [18:45:11] =============== [PASSED] drm_test_fb_memcpy ================ [18:45:11] ============= [PASSED] drm_format_helper_test ============== [18:45:11] ================= drm_format (18 subtests) ================= [18:45:11] [PASSED] drm_test_format_block_width_invalid [18:45:11] [PASSED] drm_test_format_block_width_one_plane [18:45:11] [PASSED] drm_test_format_block_width_two_plane [18:45:11] [PASSED] drm_test_format_block_width_three_plane [18:45:11] [PASSED] drm_test_format_block_width_tiled [18:45:11] [PASSED] drm_test_format_block_height_invalid [18:45:11] [PASSED] drm_test_format_block_height_one_plane [18:45:11] [PASSED] drm_test_format_block_height_two_plane [18:45:11] [PASSED] drm_test_format_block_height_three_plane [18:45:11] [PASSED] drm_test_format_block_height_tiled [18:45:11] [PASSED] drm_test_format_min_pitch_invalid [18:45:11] [PASSED] drm_test_format_min_pitch_one_plane_8bpp [18:45:11] [PASSED] drm_test_format_min_pitch_one_plane_16bpp [18:45:11] [PASSED] drm_test_format_min_pitch_one_plane_24bpp [18:45:11] [PASSED] drm_test_format_min_pitch_one_plane_32bpp [18:45:11] [PASSED] drm_test_format_min_pitch_two_plane [18:45:11] [PASSED] drm_test_format_min_pitch_three_plane_8bpp [18:45:11] [PASSED] drm_test_format_min_pitch_tiled [18:45:11] =================== [PASSED] drm_format ==================== [18:45:11] ============== drm_framebuffer (10 subtests) =============== [18:45:11] ========== drm_test_framebuffer_check_src_coords ========== [18:45:11] [PASSED] Success: source fits into fb [18:45:11] [PASSED] Fail: overflowing fb with x-axis coordinate [18:45:11] [PASSED] Fail: overflowing fb with y-axis coordinate [18:45:11] [PASSED] Fail: overflowing fb with source width [18:45:11] [PASSED] Fail: overflowing fb with source height [18:45:11] ====== [PASSED] drm_test_framebuffer_check_src_coords ====== [18:45:11] [PASSED] drm_test_framebuffer_cleanup [18:45:11] =============== drm_test_framebuffer_create =============== [18:45:11] [PASSED] ABGR8888 normal sizes [18:45:11] [PASSED] ABGR8888 max sizes [18:45:11] [PASSED] ABGR8888 pitch greater than min required [18:45:11] [PASSED] ABGR8888 pitch less than min required [18:45:11] [PASSED] ABGR8888 Invalid width [18:45:11] [PASSED] ABGR8888 Invalid buffer handle [18:45:11] [PASSED] No pixel format [18:45:11] [PASSED] ABGR8888 Width 0 [18:45:11] [PASSED] ABGR8888 Height 0 [18:45:11] [PASSED] ABGR8888 Out of bound height * pitch combination [18:45:11] [PASSED] ABGR8888 Large buffer offset [18:45:11] [PASSED] ABGR8888 Buffer offset for inexistent plane [18:45:11] [PASSED] ABGR8888 Invalid flag [18:45:11] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers [18:45:11] [PASSED] ABGR8888 Valid buffer modifier [18:45:11] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE) [18:45:11] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS [18:45:11] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS [18:45:11] [PASSED] NV12 Normal sizes [18:45:11] [PASSED] NV12 Max sizes [18:45:11] [PASSED] NV12 Invalid pitch [18:45:11] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag [18:45:11] [PASSED] NV12 different modifier per-plane [18:45:11] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE [18:45:11] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS [18:45:11] [PASSED] NV12 Modifier for inexistent plane [18:45:11] [PASSED] NV12 Handle for inexistent plane [18:45:11] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS [18:45:11] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier [18:45:11] [PASSED] YVU420 Normal sizes [18:45:11] [PASSED] YVU420 Max sizes [18:45:11] [PASSED] YVU420 Invalid pitch [18:45:11] [PASSED] YVU420 Different pitches [18:45:11] [PASSED] YVU420 Different buffer offsets/pitches [18:45:11] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS [18:45:11] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS [18:45:11] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS [18:45:11] [PASSED] YVU420 Valid modifier [18:45:11] [PASSED] YVU420 Different modifiers per plane [18:45:11] [PASSED] YVU420 Modifier for inexistent plane [18:45:11] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR) [18:45:11] [PASSED] X0L2 Normal sizes [18:45:11] [PASSED] X0L2 Max sizes [18:45:11] [PASSED] X0L2 Invalid pitch [18:45:11] [PASSED] X0L2 Pitch greater than minimum required [18:45:11] [PASSED] X0L2 Handle for inexistent plane [18:45:11] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set [18:45:11] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set [18:45:11] [PASSED] X0L2 Valid modifier [18:45:11] [PASSED] X0L2 Modifier for inexistent plane [18:45:11] =========== [PASSED] drm_test_framebuffer_create =========== [18:45:11] [PASSED] drm_test_framebuffer_free [18:45:11] [PASSED] drm_test_framebuffer_init [18:45:11] [PASSED] drm_test_framebuffer_init_bad_format [18:45:11] [PASSED] drm_test_framebuffer_init_dev_mismatch [18:45:11] [PASSED] drm_test_framebuffer_lookup [18:45:11] [PASSED] drm_test_framebuffer_lookup_inexistent [18:45:11] [PASSED] drm_test_framebuffer_modifiers_not_supported [18:45:11] ================= [PASSED] drm_framebuffer ================= [18:45:11] ================ drm_gem_shmem (8 subtests) ================ [18:45:11] [PASSED] drm_gem_shmem_test_obj_create [18:45:11] [PASSED] drm_gem_shmem_test_obj_create_private [18:45:11] [PASSED] drm_gem_shmem_test_pin_pages [18:45:11] [PASSED] drm_gem_shmem_test_vmap [18:45:11] [PASSED] drm_gem_shmem_test_get_sg_table [18:45:11] [PASSED] drm_gem_shmem_test_get_pages_sgt [18:45:11] [PASSED] drm_gem_shmem_test_madvise [18:45:11] [PASSED] drm_gem_shmem_test_purge [18:45:11] ================== [PASSED] drm_gem_shmem ================== [18:45:11] === drm_atomic_helper_connector_hdmi_check (27 subtests) === [18:45:11] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode [18:45:11] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1 [18:45:11] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode [18:45:11] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1 [18:45:11] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode [18:45:11] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1 [18:45:11] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 ======= [18:45:11] [PASSED] Automatic [18:45:11] [PASSED] Full [18:45:11] [PASSED] Limited 16:235 [18:45:11] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 === [18:45:11] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed [18:45:11] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed [18:45:11] [PASSED] drm_test_check_disable_connector [18:45:11] [PASSED] drm_test_check_hdmi_funcs_reject_rate [18:45:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb [18:45:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420 [18:45:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422 [18:45:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420 [18:45:11] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420 [18:45:11] [PASSED] drm_test_check_output_bpc_crtc_mode_changed [18:45:11] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed [18:45:11] [PASSED] drm_test_check_output_bpc_dvi [18:45:11] [PASSED] drm_test_check_output_bpc_format_vic_1 [18:45:11] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only [18:45:11] [PASSED] drm_test_check_output_bpc_format_display_rgb_only [18:45:11] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only [18:45:11] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only [18:45:11] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc [18:45:11] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc [18:45:11] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc [18:45:11] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ====== [18:45:11] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ==== [18:45:11] [PASSED] drm_test_check_broadcast_rgb_value [18:45:11] [PASSED] drm_test_check_bpc_8_value [18:45:11] [PASSED] drm_test_check_bpc_10_value [18:45:11] [PASSED] drm_test_check_bpc_12_value [18:45:11] [PASSED] drm_test_check_format_value [18:45:11] [PASSED] drm_test_check_tmds_char_value [18:45:11] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ====== [18:45:11] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) = [18:45:11] [PASSED] drm_test_check_mode_valid [18:45:11] [PASSED] drm_test_check_mode_valid_reject [18:45:11] [PASSED] drm_test_check_mode_valid_reject_rate [18:45:11] [PASSED] drm_test_check_mode_valid_reject_max_clock [18:45:11] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid === [18:45:11] ================= drm_managed (2 subtests) ================= [18:45:11] [PASSED] drm_test_managed_release_action [18:45:11] [PASSED] drm_test_managed_run_action [18:45:11] =================== [PASSED] drm_managed =================== [18:45:11] =================== drm_mm (6 subtests) ==================== [18:45:11] [PASSED] drm_test_mm_init [18:45:11] [PASSED] drm_test_mm_debug [18:45:11] [PASSED] drm_test_mm_align32 [18:45:11] [PASSED] drm_test_mm_align64 [18:45:11] [PASSED] drm_test_mm_lowest [18:45:11] [PASSED] drm_test_mm_highest [18:45:11] ===================== [PASSED] drm_mm ====================== [18:45:11] ============= drm_modes_analog_tv (5 subtests) ============= [18:45:11] [PASSED] drm_test_modes_analog_tv_mono_576i [18:45:11] [PASSED] drm_test_modes_analog_tv_ntsc_480i [18:45:11] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined [18:45:11] [PASSED] drm_test_modes_analog_tv_pal_576i [18:45:11] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined [18:45:11] =============== [PASSED] drm_modes_analog_tv =============== [18:45:11] ============== drm_plane_helper (2 subtests) =============== [18:45:11] =============== drm_test_check_plane_state ================ [18:45:11] [PASSED] clipping_simple [18:45:11] [PASSED] clipping_rotate_reflect [18:45:11] [PASSED] positioning_simple [18:45:11] [PASSED] upscaling [18:45:11] [PASSED] downscaling [18:45:11] [PASSED] rounding1 [18:45:11] [PASSED] rounding2 [18:45:11] [PASSED] rounding3 [18:45:11] [PASSED] rounding4 [18:45:11] =========== [PASSED] drm_test_check_plane_state ============ [18:45:11] =========== drm_test_check_invalid_plane_state ============ [18:45:11] [PASSED] positioning_invalid [18:45:11] [PASSED] upscaling_invalid [18:45:11] [PASSED] downscaling_invalid [18:45:11] ======= [PASSED] drm_test_check_invalid_plane_state ======== [18:45:11] ================ [PASSED] drm_plane_helper ================= [18:45:11] ====== drm_connector_helper_tv_get_modes (1 subtest) ======= [18:45:11] ====== drm_test_connector_helper_tv_get_modes_check ======= [18:45:11] [PASSED] None [18:45:11] [PASSED] PAL [18:45:11] [PASSED] NTSC [18:45:11] [PASSED] Both, NTSC Default [18:45:11] [PASSED] Both, PAL Default [18:45:11] [PASSED] Both, NTSC Default, with PAL on command-line [18:45:11] [PASSED] Both, PAL Default, with NTSC on command-line [18:45:11] == [PASSED] drm_test_connector_helper_tv_get_modes_check === [18:45:11] ======== [PASSED] drm_connector_helper_tv_get_modes ======== [18:45:11] ================== drm_rect (9 subtests) =================== [18:45:11] [PASSED] drm_test_rect_clip_scaled_div_by_zero [18:45:11] [PASSED] drm_test_rect_clip_scaled_not_clipped [18:45:11] [PASSED] drm_test_rect_clip_scaled_clipped [18:45:11] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned [18:45:11] ================= drm_test_rect_intersect ================= [18:45:11] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0 [18:45:11] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1 [18:45:11] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0 [18:45:11] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1 [18:45:11] [PASSED] right x left: 2x1+0+0 x 3x1+1+0 [18:45:11] [PASSED] left x right: 3x1+1+0 x 2x1+0+0 [18:45:11] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1 [18:45:11] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0 [18:45:11] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1 [18:45:11] [PASSED] touching side: 1x1+0+0 x 1x1+1+0 [18:45:11] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0 [18:45:11] [PASSED] inside another: 2x2+0+0 x 1x1+1+1 [18:45:11] [PASSED] far away: 1x1+0+0 x 1x1+3+6 [18:45:11] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10 [18:45:11] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10 [18:45:11] ============= [PASSED] drm_test_rect_intersect ============= [18:45:11] ================ drm_test_rect_calc_hscale ================ [18:45:11] [PASSED] normal use [18:45:11] [PASSED] out of max range [18:45:11] [PASSED] out of min range [18:45:11] [PASSED] zero dst [18:45:11] [PASSED] negative src [18:45:11] [PASSED] negative dst [18:45:11] ============ [PASSED] drm_test_rect_calc_hscale ============ [18:45:11] ================ drm_test_rect_calc_vscale ================ [18:45:11] [PASSED] normal use stty: 'standard input': Inappropriate ioctl for device [18:45:11] [PASSED] out of max range [18:45:11] [PASSED] out of min range [18:45:11] [PASSED] zero dst [18:45:11] [PASSED] negative src [18:45:11] [PASSED] negative dst [18:45:11] ============ [PASSED] drm_test_rect_calc_vscale ============ [18:45:11] ================== drm_test_rect_rotate =================== [18:45:11] [PASSED] reflect-x [18:45:11] [PASSED] reflect-y [18:45:11] [PASSED] rotate-0 [18:45:11] [PASSED] rotate-90 [18:45:11] [PASSED] rotate-180 [18:45:11] [PASSED] rotate-270 [18:45:11] ============== [PASSED] drm_test_rect_rotate =============== [18:45:11] ================ drm_test_rect_rotate_inv ================= [18:45:11] [PASSED] reflect-x [18:45:11] [PASSED] reflect-y [18:45:11] [PASSED] rotate-0 [18:45:11] [PASSED] rotate-90 [18:45:11] [PASSED] rotate-180 [18:45:11] [PASSED] rotate-270 [18:45:11] ============ [PASSED] drm_test_rect_rotate_inv ============= [18:45:11] ==================== [PASSED] drm_rect ===================== [18:45:11] ============ drm_sysfb_modeset_test (1 subtest) ============ [18:45:11] ============ drm_test_sysfb_build_fourcc_list ============= [18:45:11] [PASSED] no native formats [18:45:11] [PASSED] XRGB8888 as native format [18:45:11] [PASSED] remove duplicates [18:45:11] [PASSED] convert alpha formats [18:45:11] [PASSED] random formats [18:45:11] ======== [PASSED] drm_test_sysfb_build_fourcc_list ========= [18:45:11] ============= [PASSED] drm_sysfb_modeset_test ============== [18:45:11] ================== drm_fixp (2 subtests) =================== [18:45:11] [PASSED] drm_test_int2fixp [18:45:11] [PASSED] drm_test_sm2fixp [18:45:11] ==================== [PASSED] drm_fixp ===================== [18:45:11] ============================================================ [18:45:11] Testing complete. Ran 624 tests: passed: 624 [18:45:12] Elapsed time: 27.239s total, 1.699s configuring, 25.074s building, 0.410s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig [18:45:12] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [18:45:13] 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 [18:45:23] Starting KUnit Kernel (1/1)... [18:45:23] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [18:45:23] ================= ttm_device (5 subtests) ================== [18:45:23] [PASSED] ttm_device_init_basic [18:45:23] [PASSED] ttm_device_init_multiple [18:45:23] [PASSED] ttm_device_fini_basic [18:45:23] [PASSED] ttm_device_init_no_vma_man [18:45:23] ================== ttm_device_init_pools ================== [18:45:23] [PASSED] No DMA allocations, no DMA32 required [18:45:23] [PASSED] DMA allocations, DMA32 required [18:45:23] [PASSED] No DMA allocations, DMA32 required [18:45:23] [PASSED] DMA allocations, no DMA32 required [18:45:23] ============== [PASSED] ttm_device_init_pools ============== [18:45:23] =================== [PASSED] ttm_device ==================== [18:45:23] ================== ttm_pool (8 subtests) =================== [18:45:23] ================== ttm_pool_alloc_basic =================== [18:45:23] [PASSED] One page [18:45:23] [PASSED] More than one page [18:45:23] [PASSED] Above the allocation limit [18:45:23] [PASSED] One page, with coherent DMA mappings enabled [18:45:23] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [18:45:23] ============== [PASSED] ttm_pool_alloc_basic =============== [18:45:23] ============== ttm_pool_alloc_basic_dma_addr ============== [18:45:23] [PASSED] One page [18:45:23] [PASSED] More than one page [18:45:23] [PASSED] Above the allocation limit [18:45:23] [PASSED] One page, with coherent DMA mappings enabled [18:45:23] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [18:45:23] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ========== [18:45:23] [PASSED] ttm_pool_alloc_order_caching_match [18:45:23] [PASSED] ttm_pool_alloc_caching_mismatch [18:45:23] [PASSED] ttm_pool_alloc_order_mismatch [18:45:23] [PASSED] ttm_pool_free_dma_alloc [18:45:23] [PASSED] ttm_pool_free_no_dma_alloc [18:45:23] [PASSED] ttm_pool_fini_basic [18:45:23] ==================== [PASSED] ttm_pool ===================== [18:45:23] ================ ttm_resource (8 subtests) ================= [18:45:23] ================= ttm_resource_init_basic ================= [18:45:23] [PASSED] Init resource in TTM_PL_SYSTEM [18:45:23] [PASSED] Init resource in TTM_PL_VRAM [18:45:23] [PASSED] Init resource in a private placement [18:45:23] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags [18:45:23] ============= [PASSED] ttm_resource_init_basic ============= [18:45:23] [PASSED] ttm_resource_init_pinned [18:45:23] [PASSED] ttm_resource_fini_basic [18:45:23] [PASSED] ttm_resource_manager_init_basic [18:45:23] [PASSED] ttm_resource_manager_usage_basic [18:45:23] [PASSED] ttm_resource_manager_set_used_basic [18:45:23] [PASSED] ttm_sys_man_alloc_basic [18:45:23] [PASSED] ttm_sys_man_free_basic [18:45:23] ================== [PASSED] ttm_resource =================== [18:45:23] =================== ttm_tt (15 subtests) =================== [18:45:23] ==================== ttm_tt_init_basic ==================== [18:45:23] [PASSED] Page-aligned size [18:45:23] [PASSED] Extra pages requested [18:45:23] ================ [PASSED] ttm_tt_init_basic ================ [18:45:23] [PASSED] ttm_tt_init_misaligned [18:45:23] [PASSED] ttm_tt_fini_basic [18:45:23] [PASSED] ttm_tt_fini_sg [18:45:23] [PASSED] ttm_tt_fini_shmem [18:45:23] [PASSED] ttm_tt_create_basic [18:45:23] [PASSED] ttm_tt_create_invalid_bo_type [18:45:23] [PASSED] ttm_tt_create_ttm_exists [18:45:23] [PASSED] ttm_tt_create_failed [18:45:23] [PASSED] ttm_tt_destroy_basic [18:45:23] [PASSED] ttm_tt_populate_null_ttm [18:45:23] [PASSED] ttm_tt_populate_populated_ttm [18:45:23] [PASSED] ttm_tt_unpopulate_basic [18:45:23] [PASSED] ttm_tt_unpopulate_empty_ttm [18:45:23] [PASSED] ttm_tt_swapin_basic [18:45:23] ===================== [PASSED] ttm_tt ====================== [18:45:23] =================== ttm_bo (14 subtests) =================== [18:45:23] =========== ttm_bo_reserve_optimistic_no_ticket =========== [18:45:23] [PASSED] Cannot be interrupted and sleeps [18:45:23] [PASSED] Cannot be interrupted, locks straight away [18:45:23] [PASSED] Can be interrupted, sleeps [18:45:23] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket ======= [18:45:23] [PASSED] ttm_bo_reserve_locked_no_sleep [18:45:23] [PASSED] ttm_bo_reserve_no_wait_ticket [18:45:23] [PASSED] ttm_bo_reserve_double_resv [18:45:23] [PASSED] ttm_bo_reserve_interrupted [18:45:23] [PASSED] ttm_bo_reserve_deadlock [18:45:23] [PASSED] ttm_bo_unreserve_basic [18:45:23] [PASSED] ttm_bo_unreserve_pinned [18:45:23] [PASSED] ttm_bo_unreserve_bulk [18:45:23] [PASSED] ttm_bo_fini_basic [18:45:23] [PASSED] ttm_bo_fini_shared_resv [18:45:23] [PASSED] ttm_bo_pin_basic [18:45:23] [PASSED] ttm_bo_pin_unpin_resource [18:45:23] [PASSED] ttm_bo_multiple_pin_one_unpin [18:45:23] ===================== [PASSED] ttm_bo ====================== [18:45:23] ============== ttm_bo_validate (21 subtests) =============== [18:45:23] ============== ttm_bo_init_reserved_sys_man =============== [18:45:23] [PASSED] Buffer object for userspace [18:45:23] [PASSED] Kernel buffer object [18:45:23] [PASSED] Shared buffer object [18:45:23] ========== [PASSED] ttm_bo_init_reserved_sys_man =========== [18:45:23] ============== ttm_bo_init_reserved_mock_man ============== [18:45:23] [PASSED] Buffer object for userspace [18:45:23] [PASSED] Kernel buffer object [18:45:23] [PASSED] Shared buffer object [18:45:23] ========== [PASSED] ttm_bo_init_reserved_mock_man ========== [18:45:23] [PASSED] ttm_bo_init_reserved_resv [18:45:23] ================== ttm_bo_validate_basic ================== [18:45:23] [PASSED] Buffer object for userspace [18:45:23] [PASSED] Kernel buffer object [18:45:23] [PASSED] Shared buffer object [18:45:23] ============== [PASSED] ttm_bo_validate_basic ============== [18:45:23] [PASSED] ttm_bo_validate_invalid_placement [18:45:23] ============= ttm_bo_validate_same_placement ============== [18:45:23] [PASSED] System manager [18:45:23] [PASSED] VRAM manager [18:45:23] ========= [PASSED] ttm_bo_validate_same_placement ========== [18:45:23] [PASSED] ttm_bo_validate_failed_alloc [18:45:23] [PASSED] ttm_bo_validate_pinned [18:45:23] [PASSED] ttm_bo_validate_busy_placement [18:45:23] ================ ttm_bo_validate_multihop ================= [18:45:23] [PASSED] Buffer object for userspace [18:45:23] [PASSED] Kernel buffer object [18:45:23] [PASSED] Shared buffer object [18:45:23] ============ [PASSED] ttm_bo_validate_multihop ============= [18:45:23] ========== ttm_bo_validate_no_placement_signaled ========== [18:45:23] [PASSED] Buffer object in system domain, no page vector [18:45:23] [PASSED] Buffer object in system domain with an existing page vector [18:45:23] ====== [PASSED] ttm_bo_validate_no_placement_signaled ====== [18:45:23] ======== ttm_bo_validate_no_placement_not_signaled ======== [18:45:23] [PASSED] Buffer object for userspace [18:45:23] [PASSED] Kernel buffer object [18:45:23] [PASSED] Shared buffer object [18:45:23] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ==== [18:45:23] [PASSED] ttm_bo_validate_move_fence_signaled [18:45:23] ========= ttm_bo_validate_move_fence_not_signaled ========= [18:45:23] [PASSED] Waits for GPU [18:45:23] [PASSED] Tries to lock straight away [18:45:23] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled ===== [18:45:23] [PASSED] ttm_bo_validate_happy_evict [18:45:23] [PASSED] ttm_bo_validate_all_pinned_evict [18:45:23] [PASSED] ttm_bo_validate_allowed_only_evict [18:45:23] [PASSED] ttm_bo_validate_deleted_evict [18:45:23] [PASSED] ttm_bo_validate_busy_domain_evict [18:45:23] [PASSED] ttm_bo_validate_evict_gutting [18:45:23] [PASSED] ttm_bo_validate_recrusive_evict stty: 'standard input': Inappropriate ioctl for device [18:45:23] ================= [PASSED] ttm_bo_validate ================= [18:45:23] ============================================================ [18:45:23] Testing complete. Ran 101 tests: passed: 101 [18:45:23] Elapsed time: 11.165s total, 1.683s configuring, 9.267s building, 0.179s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
Patchwork
CI✓ Xe.CI.BAT: success for Dynamic drm_pagemaps and Initial multi-device SVM (rev7)
In reply to Thomas Hellström== Series Details ==
== Series Details ==
Series: Dynamic drm_pagemaps and Initial multi-device SVM (rev7)
URL : https://patchwork.freedesktop.org/series/156525/
State : success
== Summary ==
CI Bug Log - changes from xe-4294-92cfd765fcc4d84dbc90a99e775aed679f33efce_BAT -> xe-pw-156525v7_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (11 -> 12)
------------------------------
Additional (1): bat-adlp-vm
Known issues
------------
Here are the changes found in xe-pw-156525v7_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@xe_evict@evict-small-external-cm:
- bat-adlp-vm: NOTRUN -> [SKIP][1] ([Intel XE#261] / [Intel XE#5564] / [Intel XE#688]) +9 other tests skip
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v7/bat-adlp-vm/igt@[email protected]
* igt@xe_evict_ccs@evict-overcommit-simple:
- bat-adlp-vm: NOTRUN -> [SKIP][2] ([Intel XE#688])
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v7/bat-adlp-vm/igt@[email protected]
* igt@xe_exec_fault_mode@twice-userptr-invalidate-imm:
- bat-adlp-vm: NOTRUN -> [SKIP][3] ([Intel XE#288] / [Intel XE#5561]) +32 other tests skip
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v7/bat-adlp-vm/igt@[email protected]
* igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit:
- bat-adlp-vm: NOTRUN -> [SKIP][4] ([Intel XE#2229] / [Intel XE#5488])
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v7/bat-adlp-vm/igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit.html
* igt@xe_mmap@vram:
- bat-adlp-vm: NOTRUN -> [SKIP][5] ([Intel XE#1008] / [Intel XE#5591])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v7/bat-adlp-vm/igt@[email protected]
* igt@xe_pat@pat-index-xe2:
- bat-adlp-vm: NOTRUN -> [SKIP][6] ([Intel XE#977])
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v7/bat-adlp-vm/igt@[email protected]
* igt@xe_pat@pat-index-xehpc:
- bat-adlp-vm: NOTRUN -> [SKIP][7] ([Intel XE#2838] / [Intel XE#979])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v7/bat-adlp-vm/igt@[email protected]
* igt@xe_pat@pat-index-xelpg:
- bat-adlp-vm: NOTRUN -> [SKIP][8] ([Intel XE#979])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v7/bat-adlp-vm/igt@[email protected]
#### Possible fixes ####
* igt@xe_waitfence@reltime:
- bat-dg2-oem2: [FAIL][9] ([Intel XE#6520]) -> [PASS][10]
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4294-92cfd765fcc4d84dbc90a99e775aed679f33efce/bat-dg2-oem2/igt@[email protected]
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v7/bat-dg2-oem2/igt@[email protected]
[Intel XE#1008]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1008
[Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
[Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
[Intel XE#2838]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2838
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#5488]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5488
[Intel XE#5561]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5561
[Intel XE#5564]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5564
[Intel XE#5591]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5591
[Intel XE#6520]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6520
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#977]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/977
[Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979
Build changes
-------------
* Linux: xe-4294-92cfd765fcc4d84dbc90a99e775aed679f33efce -> xe-pw-156525v7
IGT_8674: f38f4d8e9c65aff45ac807e646d06e38bc3193a2 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-4294-92cfd765fcc4d84dbc90a99e775aed679f33efce: 92cfd765fcc4d84dbc90a99e775aed679f33efce
xe-pw-156525v7: 156525v7
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v7/index.html
✗ CI.checkpatch: warning for Dynamic drm_pagemaps and Initial multi-device SVM (rev8)
In reply to Thomas Hellström== Series Details ==
== Series Details ==
Series: Dynamic drm_pagemaps and Initial multi-device SVM (rev8)
URL : https://patchwork.freedesktop.org/series/156525/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master 99339247d1ae4378b24366da182e712bdc623311
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 6364fa9f39bd90a43c3c9a4f9840e21f80622906
Author: Thomas Hellström <[email protected]> Date: Fri Dec 19 12:33:20 2025 +0100
drm/xe/svm: Serialize migration to device if racing
Introduce an rw-semaphore to serialize migration to device if it's likely that migration races with another device migration of the same CPU address space range.
This is a temporary fix to attempt to mitigate a livelock that might happen if many devices try to migrate a range at the same time, and it affects only devices using the xe driver. A longer term fix is probably improvements in the core mm migration layer.
+ /mt/dim checkpatch f101d56dc32350daa45c130ff7a6d46512f614a9 drm-intel 2cdebd397a70 drm/xe/svm: Fix a debug printoutc78b26d1ffd7 drm/pagemap: Remove some dead coded495dcac2857 drm/pagemap, drm/xe: Ensure that the devmem allocation is idle before use dc914a21ea37 drm/pagemap, drm/xe: Add refcounting to struct drm_pagemap a55b83943e37 drm/pagemap: Add a refcounted drm_pagemap backpointer to struct drm_pagemap_zdd a1e7dc82c10a drm/pagemap, drm/xe: Manage drm_pagemap provider lifetimes 08c5c7197849 drm/pagemap: Add a drm_pagemap cache and shrinker
-:177: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating? #177:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 725 lines checked4510e8ea28f0 drm/xe: Use the drm_pagemap cache and shrinkerbaeb759ef4c9 drm/pagemap: Remove the drm_pagemap_create() interface442ab0e14404 drm/pagemap_util: Add a utility to assign an owner to a set of interconnected gpus -:213: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_name' - possible side-effects? #213: FILE: include/drm/drm_pagemap_util.h:53:
+#define DRM_PAGEMAP_OWNER_LIST_DEFINE(_name) \
+ struct drm_pagemap_owner_list _name = { \
+ .lock = __MUTEX_INITIALIZER((_name).lock), \
+ .peers = LIST_HEAD_INIT((_name).peers) }
total: 0 errors, 0 warnings, 1 checks, 192 lines checked81428e9c0008 drm/xe: Use the drm_pagemap_util helper to get a svm pagemap owner 6daa772d333f drm/xe: Pass a drm_pagemap pointer around with the memory advise attributes 584b260c9913 drm/xe: Use the vma attibute drm_pagemap to select where to migrate ae78dc448f90 drm/xe: Simplify madvise_preferred_mem_loc()0d4c9d47c8e8 drm/xe/uapi: Extend the madvise functionality to support foreign pagemap placement for svm d23b1005a27b drm/xe: Support pcie p2p dma as a fast interconnect3f65458c4a63 drm/xe/vm: Add a couple of VM debug printouts714e3fa43d9a drm/xe/svm: Document how xe keeps drm_pagemap referencescef35fbf3827 drm/pagemap, drm/xe: Clean up the use of the device-private page owner 054907b37dcf drm/gpusvm: Introduce a function to scan the current migration state 619b5ad76f8c drm/xe: Use drm_gpusvm_scan_mm()e64d87cb2951 drm/pagemap, drm/xe: Support destination migration over interconnect 076f25f3b09c drm/pagemap: Support source migration over interconnect6364fa9f39bd drm/xe/svm: Serialize migration to device if racing
Patchwork
CI✓ CI.KUnit: success for Dynamic drm_pagemaps and Initial multi-device SVM (rev8)
In reply to Thomas Hellström== Series Details ==
== Series Details ==
Series: Dynamic drm_pagemaps and Initial multi-device SVM (rev8)
URL : https://patchwork.freedesktop.org/series/156525/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig [20:14:52] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [20:14:56] 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 [20:15:28] Starting KUnit Kernel (1/1)... [20:15:28] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [20:15:28] ================== guc_buf (11 subtests) =================== [20:15:28] [PASSED] test_smallest [20:15:28] [PASSED] test_largest [20:15:28] [PASSED] test_granular [20:15:28] [PASSED] test_unique [20:15:28] [PASSED] test_overlap [20:15:28] [PASSED] test_reusable [20:15:28] [PASSED] test_too_big [20:15:28] [PASSED] test_flush [20:15:28] [PASSED] test_lookup [20:15:28] [PASSED] test_data [20:15:28] [PASSED] test_class [20:15:28] ===================== [PASSED] guc_buf ===================== [20:15:28] =================== guc_dbm (7 subtests) =================== [20:15:28] [PASSED] test_empty [20:15:28] [PASSED] test_default [20:15:28] ======================== test_size ======================== [20:15:28] [PASSED] 4 [20:15:28] [PASSED] 8 [20:15:28] [PASSED] 32 [20:15:28] [PASSED] 256 [20:15:28] ==================== [PASSED] test_size ==================== [20:15:28] ======================= test_reuse ======================== [20:15:28] [PASSED] 4 [20:15:28] [PASSED] 8 [20:15:28] [PASSED] 32 [20:15:28] [PASSED] 256 [20:15:28] =================== [PASSED] test_reuse ==================== [20:15:28] =================== test_range_overlap ==================== [20:15:28] [PASSED] 4 [20:15:28] [PASSED] 8 [20:15:28] [PASSED] 32 [20:15:28] [PASSED] 256 [20:15:28] =============== [PASSED] test_range_overlap ================ [20:15:28] =================== test_range_compact ==================== [20:15:28] [PASSED] 4 [20:15:28] [PASSED] 8 [20:15:28] [PASSED] 32 [20:15:28] [PASSED] 256 [20:15:28] =============== [PASSED] test_range_compact ================ [20:15:28] ==================== test_range_spare ===================== [20:15:28] [PASSED] 4 [20:15:28] [PASSED] 8 [20:15:28] [PASSED] 32 [20:15:28] [PASSED] 256 [20:15:28] ================ [PASSED] test_range_spare ================= [20:15:28] ===================== [PASSED] guc_dbm ===================== [20:15:28] =================== guc_idm (6 subtests) =================== [20:15:28] [PASSED] bad_init [20:15:28] [PASSED] no_init [20:15:28] [PASSED] init_fini [20:15:28] [PASSED] check_used [20:15:28] [PASSED] check_quota [20:15:28] [PASSED] check_all [20:15:28] ===================== [PASSED] guc_idm ===================== [20:15:28] ================== no_relay (3 subtests) =================== [20:15:28] [PASSED] xe_drops_guc2pf_if_not_ready [20:15:28] [PASSED] xe_drops_guc2vf_if_not_ready [20:15:28] [PASSED] xe_rejects_send_if_not_ready [20:15:28] ==================== [PASSED] no_relay ===================== [20:15:28] ================== pf_relay (14 subtests) ================== [20:15:28] [PASSED] pf_rejects_guc2pf_too_short [20:15:28] [PASSED] pf_rejects_guc2pf_too_long [20:15:28] [PASSED] pf_rejects_guc2pf_no_payload [20:15:28] [PASSED] pf_fails_no_payload [20:15:28] [PASSED] pf_fails_bad_origin [20:15:28] [PASSED] pf_fails_bad_type [20:15:28] [PASSED] pf_txn_reports_error [20:15:28] [PASSED] pf_txn_sends_pf2guc [20:15:28] [PASSED] pf_sends_pf2guc [20:15:28] [SKIPPED] pf_loopback_nop [20:15:28] [SKIPPED] pf_loopback_echo [20:15:28] [SKIPPED] pf_loopback_fail [20:15:28] [SKIPPED] pf_loopback_busy [20:15:28] [SKIPPED] pf_loopback_retry [20:15:28] ==================== [PASSED] pf_relay ===================== [20:15:28] ================== vf_relay (3 subtests) =================== [20:15:28] [PASSED] vf_rejects_guc2vf_too_short [20:15:28] [PASSED] vf_rejects_guc2vf_too_long [20:15:28] [PASSED] vf_rejects_guc2vf_no_payload [20:15:28] ==================== [PASSED] vf_relay ===================== [20:15:28] ================ pf_gt_config (6 subtests) ================= [20:15:28] [PASSED] fair_contexts_1vf [20:15:28] [PASSED] fair_doorbells_1vf [20:15:28] [PASSED] fair_ggtt_1vf [20:15:28] ====================== fair_contexts ====================== [20:15:28] [PASSED] 1 VF [20:15:28] [PASSED] 2 VFs [20:15:28] [PASSED] 3 VFs [20:15:28] [PASSED] 4 VFs [20:15:28] [PASSED] 5 VFs [20:15:28] [PASSED] 6 VFs [20:15:28] [PASSED] 7 VFs [20:15:28] [PASSED] 8 VFs [20:15:28] [PASSED] 9 VFs [20:15:28] [PASSED] 10 VFs [20:15:28] [PASSED] 11 VFs [20:15:28] [PASSED] 12 VFs [20:15:28] [PASSED] 13 VFs [20:15:28] [PASSED] 14 VFs [20:15:28] [PASSED] 15 VFs [20:15:28] [PASSED] 16 VFs [20:15:28] [PASSED] 17 VFs [20:15:28] [PASSED] 18 VFs [20:15:28] [PASSED] 19 VFs [20:15:28] [PASSED] 20 VFs [20:15:28] [PASSED] 21 VFs [20:15:28] [PASSED] 22 VFs [20:15:28] [PASSED] 23 VFs [20:15:28] [PASSED] 24 VFs [20:15:28] [PASSED] 25 VFs [20:15:28] [PASSED] 26 VFs [20:15:28] [PASSED] 27 VFs [20:15:28] [PASSED] 28 VFs [20:15:28] [PASSED] 29 VFs [20:15:28] [PASSED] 30 VFs [20:15:28] [PASSED] 31 VFs [20:15:28] [PASSED] 32 VFs [20:15:28] [PASSED] 33 VFs [20:15:28] [PASSED] 34 VFs [20:15:28] [PASSED] 35 VFs [20:15:28] [PASSED] 36 VFs [20:15:28] [PASSED] 37 VFs [20:15:28] [PASSED] 38 VFs [20:15:28] [PASSED] 39 VFs [20:15:28] [PASSED] 40 VFs [20:15:28] [PASSED] 41 VFs [20:15:28] [PASSED] 42 VFs [20:15:28] [PASSED] 43 VFs [20:15:28] [PASSED] 44 VFs [20:15:28] [PASSED] 45 VFs [20:15:28] [PASSED] 46 VFs [20:15:28] [PASSED] 47 VFs [20:15:28] [PASSED] 48 VFs [20:15:28] [PASSED] 49 VFs [20:15:28] [PASSED] 50 VFs [20:15:28] [PASSED] 51 VFs [20:15:28] [PASSED] 52 VFs [20:15:28] [PASSED] 53 VFs [20:15:28] [PASSED] 54 VFs [20:15:28] [PASSED] 55 VFs [20:15:28] [PASSED] 56 VFs [20:15:28] [PASSED] 57 VFs [20:15:28] [PASSED] 58 VFs [20:15:28] [PASSED] 59 VFs [20:15:28] [PASSED] 60 VFs [20:15:28] [PASSED] 61 VFs [20:15:28] [PASSED] 62 VFs [20:15:28] [PASSED] 63 VFs [20:15:28] ================== [PASSED] fair_contexts ================== [20:15:28] ===================== fair_doorbells ====================== [20:15:28] [PASSED] 1 VF [20:15:28] [PASSED] 2 VFs [20:15:28] [PASSED] 3 VFs [20:15:28] [PASSED] 4 VFs [20:15:28] [PASSED] 5 VFs [20:15:28] [PASSED] 6 VFs [20:15:28] [PASSED] 7 VFs [20:15:28] [PASSED] 8 VFs [20:15:28] [PASSED] 9 VFs [20:15:28] [PASSED] 10 VFs [20:15:28] [PASSED] 11 VFs [20:15:28] [PASSED] 12 VFs [20:15:28] [PASSED] 13 VFs [20:15:28] [PASSED] 14 VFs [20:15:28] [PASSED] 15 VFs [20:15:28] [PASSED] 16 VFs [20:15:28] [PASSED] 17 VFs [20:15:28] [PASSED] 18 VFs [20:15:28] [PASSED] 19 VFs [20:15:28] [PASSED] 20 VFs [20:15:28] [PASSED] 21 VFs [20:15:28] [PASSED] 22 VFs [20:15:28] [PASSED] 23 VFs [20:15:28] [PASSED] 24 VFs [20:15:28] [PASSED] 25 VFs [20:15:28] [PASSED] 26 VFs [20:15:28] [PASSED] 27 VFs [20:15:28] [PASSED] 28 VFs [20:15:28] [PASSED] 29 VFs [20:15:28] [PASSED] 30 VFs [20:15:28] [PASSED] 31 VFs [20:15:28] [PASSED] 32 VFs [20:15:28] [PASSED] 33 VFs [20:15:28] [PASSED] 34 VFs [20:15:28] [PASSED] 35 VFs [20:15:28] [PASSED] 36 VFs [20:15:28] [PASSED] 37 VFs [20:15:28] [PASSED] 38 VFs [20:15:28] [PASSED] 39 VFs [20:15:28] [PASSED] 40 VFs [20:15:28] [PASSED] 41 VFs [20:15:28] [PASSED] 42 VFs [20:15:28] [PASSED] 43 VFs [20:15:28] [PASSED] 44 VFs [20:15:28] [PASSED] 45 VFs [20:15:28] [PASSED] 46 VFs [20:15:28] [PASSED] 47 VFs [20:15:28] [PASSED] 48 VFs [20:15:28] [PASSED] 49 VFs [20:15:28] [PASSED] 50 VFs [20:15:28] [PASSED] 51 VFs [20:15:28] [PASSED] 52 VFs [20:15:28] [PASSED] 53 VFs [20:15:28] [PASSED] 54 VFs [20:15:28] [PASSED] 55 VFs [20:15:28] [PASSED] 56 VFs [20:15:28] [PASSED] 57 VFs [20:15:28] [PASSED] 58 VFs [20:15:28] [PASSED] 59 VFs [20:15:28] [PASSED] 60 VFs [20:15:28] [PASSED] 61 VFs [20:15:28] [PASSED] 62 VFs [20:15:28] [PASSED] 63 VFs [20:15:28] ================= [PASSED] fair_doorbells ================== [20:15:28] ======================== fair_ggtt ======================== [20:15:28] [PASSED] 1 VF [20:15:28] [PASSED] 2 VFs [20:15:28] [PASSED] 3 VFs [20:15:28] [PASSED] 4 VFs [20:15:28] [PASSED] 5 VFs [20:15:28] [PASSED] 6 VFs [20:15:28] [PASSED] 7 VFs [20:15:28] [PASSED] 8 VFs [20:15:28] [PASSED] 9 VFs [20:15:28] [PASSED] 10 VFs [20:15:28] [PASSED] 11 VFs [20:15:28] [PASSED] 12 VFs [20:15:28] [PASSED] 13 VFs [20:15:28] [PASSED] 14 VFs [20:15:28] [PASSED] 15 VFs [20:15:28] [PASSED] 16 VFs [20:15:28] [PASSED] 17 VFs [20:15:28] [PASSED] 18 VFs [20:15:28] [PASSED] 19 VFs [20:15:28] [PASSED] 20 VFs [20:15:28] [PASSED] 21 VFs [20:15:28] [PASSED] 22 VFs [20:15:28] [PASSED] 23 VFs [20:15:28] [PASSED] 24 VFs [20:15:28] [PASSED] 25 VFs [20:15:28] [PASSED] 26 VFs [20:15:28] [PASSED] 27 VFs [20:15:28] [PASSED] 28 VFs [20:15:28] [PASSED] 29 VFs [20:15:28] [PASSED] 30 VFs [20:15:28] [PASSED] 31 VFs [20:15:28] [PASSED] 32 VFs [20:15:28] [PASSED] 33 VFs [20:15:28] [PASSED] 34 VFs [20:15:28] [PASSED] 35 VFs [20:15:28] [PASSED] 36 VFs [20:15:28] [PASSED] 37 VFs [20:15:28] [PASSED] 38 VFs [20:15:28] [PASSED] 39 VFs [20:15:28] [PASSED] 40 VFs [20:15:28] [PASSED] 41 VFs [20:15:28] [PASSED] 42 VFs [20:15:28] [PASSED] 43 VFs [20:15:28] [PASSED] 44 VFs [20:15:28] [PASSED] 45 VFs [20:15:28] [PASSED] 46 VFs [20:15:28] [PASSED] 47 VFs [20:15:28] [PASSED] 48 VFs [20:15:28] [PASSED] 49 VFs [20:15:28] [PASSED] 50 VFs [20:15:28] [PASSED] 51 VFs [20:15:28] [PASSED] 52 VFs [20:15:28] [PASSED] 53 VFs [20:15:28] [PASSED] 54 VFs [20:15:28] [PASSED] 55 VFs [20:15:28] [PASSED] 56 VFs [20:15:28] [PASSED] 57 VFs [20:15:28] [PASSED] 58 VFs [20:15:28] [PASSED] 59 VFs [20:15:28] [PASSED] 60 VFs [20:15:28] [PASSED] 61 VFs [20:15:28] [PASSED] 62 VFs [20:15:28] [PASSED] 63 VFs [20:15:28] ==================== [PASSED] fair_ggtt ==================== [20:15:28] ================== [PASSED] pf_gt_config =================== [20:15:28] ===================== lmtt (1 subtest) ===================== [20:15:28] ======================== test_ops ========================= [20:15:28] [PASSED] 2-level [20:15:28] [PASSED] multi-level [20:15:28] ==================== [PASSED] test_ops ===================== [20:15:28] ====================== [PASSED] lmtt ======================= [20:15:28] ================= pf_service (11 subtests) ================= [20:15:28] [PASSED] pf_negotiate_any [20:15:28] [PASSED] pf_negotiate_base_match [20:15:28] [PASSED] pf_negotiate_base_newer [20:15:28] [PASSED] pf_negotiate_base_next [20:15:28] [SKIPPED] pf_negotiate_base_older [20:15:28] [PASSED] pf_negotiate_base_prev [20:15:28] [PASSED] pf_negotiate_latest_match [20:15:28] [PASSED] pf_negotiate_latest_newer [20:15:28] [PASSED] pf_negotiate_latest_next [20:15:28] [SKIPPED] pf_negotiate_latest_older [20:15:28] [SKIPPED] pf_negotiate_latest_prev [20:15:28] =================== [PASSED] pf_service ==================== [20:15:28] ================= xe_guc_g2g (2 subtests) ================== [20:15:28] ============== xe_live_guc_g2g_kunit_default ============== [20:15:28] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ========== [20:15:28] ============== xe_live_guc_g2g_kunit_allmem =============== [20:15:28] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ========== [20:15:28] =================== [SKIPPED] xe_guc_g2g =================== [20:15:28] =================== xe_mocs (2 subtests) =================== [20:15:28] ================ xe_live_mocs_kernel_kunit ================ [20:15:28] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============ [20:15:28] ================ xe_live_mocs_reset_kunit ================= [20:15:28] ============ [SKIPPED] xe_live_mocs_reset_kunit ============ [20:15:28] ==================== [SKIPPED] xe_mocs ===================== [20:15:28] ================= xe_migrate (2 subtests) ================== [20:15:28] ================= xe_migrate_sanity_kunit ================= [20:15:28] ============ [SKIPPED] xe_migrate_sanity_kunit ============= [20:15:28] ================== xe_validate_ccs_kunit ================== [20:15:28] ============= [SKIPPED] xe_validate_ccs_kunit ============== [20:15:28] =================== [SKIPPED] xe_migrate =================== [20:15:28] ================== xe_dma_buf (1 subtest) ================== [20:15:28] ==================== xe_dma_buf_kunit ===================== [20:15:28] ================ [SKIPPED] xe_dma_buf_kunit ================ [20:15:28] =================== [SKIPPED] xe_dma_buf =================== [20:15:28] ================= xe_bo_shrink (1 subtest) ================= [20:15:28] =================== xe_bo_shrink_kunit ==================== [20:15:28] =============== [SKIPPED] xe_bo_shrink_kunit =============== [20:15:28] ================== [SKIPPED] xe_bo_shrink ================== [20:15:28] ==================== xe_bo (2 subtests) ==================== [20:15:28] ================== xe_ccs_migrate_kunit =================== [20:15:28] ============== [SKIPPED] xe_ccs_migrate_kunit ============== [20:15:28] ==================== xe_bo_evict_kunit ==================== [20:15:28] =============== [SKIPPED] xe_bo_evict_kunit ================ [20:15:28] ===================== [SKIPPED] xe_bo ====================== [20:15:28] ==================== args (13 subtests) ==================== [20:15:28] [PASSED] count_args_test [20:15:28] [PASSED] call_args_example [20:15:28] [PASSED] call_args_test [20:15:28] [PASSED] drop_first_arg_example [20:15:28] [PASSED] drop_first_arg_test [20:15:28] [PASSED] first_arg_example [20:15:28] [PASSED] first_arg_test [20:15:28] [PASSED] last_arg_example [20:15:28] [PASSED] last_arg_test [20:15:28] [PASSED] pick_arg_example [20:15:28] [PASSED] if_args_example [20:15:28] [PASSED] if_args_test [20:15:28] [PASSED] sep_comma_example [20:15:28] ====================== [PASSED] args ======================= [20:15:28] =================== xe_pci (3 subtests) ==================== [20:15:28] ==================== check_graphics_ip ==================== [20:15:28] [PASSED] 12.00 Xe_LP [20:15:28] [PASSED] 12.10 Xe_LP+ [20:15:28] [PASSED] 12.55 Xe_HPG [20:15:28] [PASSED] 12.60 Xe_HPC [20:15:28] [PASSED] 12.70 Xe_LPG [20:15:28] [PASSED] 12.71 Xe_LPG [20:15:28] [PASSED] 12.74 Xe_LPG+ [20:15:28] [PASSED] 20.01 Xe2_HPG [20:15:28] [PASSED] 20.02 Xe2_HPG [20:15:28] [PASSED] 20.04 Xe2_LPG [20:15:28] [PASSED] 30.00 Xe3_LPG [20:15:28] [PASSED] 30.01 Xe3_LPG [20:15:28] [PASSED] 30.03 Xe3_LPG [20:15:28] [PASSED] 30.04 Xe3_LPG [20:15:28] [PASSED] 30.05 Xe3_LPG [20:15:28] [PASSED] 35.11 Xe3p_XPC [20:15:28] ================ [PASSED] check_graphics_ip ================ [20:15:28] ===================== check_media_ip ====================== [20:15:28] [PASSED] 12.00 Xe_M [20:15:28] [PASSED] 12.55 Xe_HPM [20:15:28] [PASSED] 13.00 Xe_LPM+ [20:15:28] [PASSED] 13.01 Xe2_HPM [20:15:28] [PASSED] 20.00 Xe2_LPM [20:15:28] [PASSED] 30.00 Xe3_LPM [20:15:28] [PASSED] 30.02 Xe3_LPM [20:15:28] [PASSED] 35.00 Xe3p_LPM [20:15:28] [PASSED] 35.03 Xe3p_HPM [20:15:28] ================= [PASSED] check_media_ip ================== [20:15:28] =================== check_platform_desc =================== [20:15:28] [PASSED] 0x9A60 (TIGERLAKE) [20:15:28] [PASSED] 0x9A68 (TIGERLAKE) [20:15:28] [PASSED] 0x9A70 (TIGERLAKE) [20:15:28] [PASSED] 0x9A40 (TIGERLAKE) [20:15:28] [PASSED] 0x9A49 (TIGERLAKE) [20:15:28] [PASSED] 0x9A59 (TIGERLAKE) [20:15:28] [PASSED] 0x9A78 (TIGERLAKE) [20:15:28] [PASSED] 0x9AC0 (TIGERLAKE) [20:15:28] [PASSED] 0x9AC9 (TIGERLAKE) [20:15:28] [PASSED] 0x9AD9 (TIGERLAKE) [20:15:28] [PASSED] 0x9AF8 (TIGERLAKE) [20:15:28] [PASSED] 0x4C80 (ROCKETLAKE) [20:15:28] [PASSED] 0x4C8A (ROCKETLAKE) [20:15:28] [PASSED] 0x4C8B (ROCKETLAKE) [20:15:28] [PASSED] 0x4C8C (ROCKETLAKE) [20:15:28] [PASSED] 0x4C90 (ROCKETLAKE) [20:15:28] [PASSED] 0x4C9A (ROCKETLAKE) [20:15:28] [PASSED] 0x4680 (ALDERLAKE_S) [20:15:28] [PASSED] 0x4682 (ALDERLAKE_S) [20:15:28] [PASSED] 0x4688 (ALDERLAKE_S) [20:15:28] [PASSED] 0x468A (ALDERLAKE_S) [20:15:28] [PASSED] 0x468B (ALDERLAKE_S) [20:15:28] [PASSED] 0x4690 (ALDERLAKE_S) [20:15:28] [PASSED] 0x4692 (ALDERLAKE_S) [20:15:28] [PASSED] 0x4693 (ALDERLAKE_S) [20:15:28] [PASSED] 0x46A0 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46A1 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46A2 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46A3 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46A6 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46A8 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46AA (ALDERLAKE_P) [20:15:28] [PASSED] 0x462A (ALDERLAKE_P) [20:15:28] [PASSED] 0x4626 (ALDERLAKE_P) [20:15:28] [PASSED] 0x4628 (ALDERLAKE_P) stty: 'standard input': Inappropriate ioctl for device [20:15:28] [PASSED] 0x46B0 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46B1 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46B2 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46B3 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46C0 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46C1 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46C2 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46C3 (ALDERLAKE_P) [20:15:28] [PASSED] 0x46D0 (ALDERLAKE_N) [20:15:28] [PASSED] 0x46D1 (ALDERLAKE_N) [20:15:28] [PASSED] 0x46D2 (ALDERLAKE_N) [20:15:28] [PASSED] 0x46D3 (ALDERLAKE_N) [20:15:28] [PASSED] 0x46D4 (ALDERLAKE_N) [20:15:28] [PASSED] 0xA721 (ALDERLAKE_P) [20:15:28] [PASSED] 0xA7A1 (ALDERLAKE_P) [20:15:28] [PASSED] 0xA7A9 (ALDERLAKE_P) [20:15:28] [PASSED] 0xA7AC (ALDERLAKE_P) [20:15:28] [PASSED] 0xA7AD (ALDERLAKE_P) [20:15:28] [PASSED] 0xA720 (ALDERLAKE_P) [20:15:28] [PASSED] 0xA7A0 (ALDERLAKE_P) [20:15:28] [PASSED] 0xA7A8 (ALDERLAKE_P) [20:15:28] [PASSED] 0xA7AA (ALDERLAKE_P) [20:15:28] [PASSED] 0xA7AB (ALDERLAKE_P) [20:15:28] [PASSED] 0xA780 (ALDERLAKE_S) [20:15:28] [PASSED] 0xA781 (ALDERLAKE_S) [20:15:28] [PASSED] 0xA782 (ALDERLAKE_S) [20:15:28] [PASSED] 0xA783 (ALDERLAKE_S) [20:15:28] [PASSED] 0xA788 (ALDERLAKE_S) [20:15:28] [PASSED] 0xA789 (ALDERLAKE_S) [20:15:28] [PASSED] 0xA78A (ALDERLAKE_S) [20:15:28] [PASSED] 0xA78B (ALDERLAKE_S) [20:15:28] [PASSED] 0x4905 (DG1) [20:15:28] [PASSED] 0x4906 (DG1) [20:15:28] [PASSED] 0x4907 (DG1) [20:15:28] [PASSED] 0x4908 (DG1) [20:15:28] [PASSED] 0x4909 (DG1) [20:15:28] [PASSED] 0x56C0 (DG2) [20:15:28] [PASSED] 0x56C2 (DG2) [20:15:28] [PASSED] 0x56C1 (DG2) [20:15:28] [PASSED] 0x7D51 (METEORLAKE) [20:15:28] [PASSED] 0x7DD1 (METEORLAKE) [20:15:28] [PASSED] 0x7D41 (METEORLAKE) [20:15:28] [PASSED] 0x7D67 (METEORLAKE) [20:15:28] [PASSED] 0xB640 (METEORLAKE) [20:15:28] [PASSED] 0x56A0 (DG2) [20:15:28] [PASSED] 0x56A1 (DG2) [20:15:28] [PASSED] 0x56A2 (DG2) [20:15:28] [PASSED] 0x56BE (DG2) [20:15:28] [PASSED] 0x56BF (DG2) [20:15:28] [PASSED] 0x5690 (DG2) [20:15:28] [PASSED] 0x5691 (DG2) [20:15:28] [PASSED] 0x5692 (DG2) [20:15:28] [PASSED] 0x56A5 (DG2) [20:15:28] [PASSED] 0x56A6 (DG2) [20:15:28] [PASSED] 0x56B0 (DG2) [20:15:28] [PASSED] 0x56B1 (DG2) [20:15:28] [PASSED] 0x56BA (DG2) [20:15:28] [PASSED] 0x56BB (DG2) [20:15:28] [PASSED] 0x56BC (DG2) [20:15:28] [PASSED] 0x56BD (DG2) [20:15:28] [PASSED] 0x5693 (DG2) [20:15:28] [PASSED] 0x5694 (DG2) [20:15:28] [PASSED] 0x5695 (DG2) [20:15:28] [PASSED] 0x56A3 (DG2) [20:15:28] [PASSED] 0x56A4 (DG2) [20:15:28] [PASSED] 0x56B2 (DG2) [20:15:28] [PASSED] 0x56B3 (DG2) [20:15:28] [PASSED] 0x5696 (DG2) [20:15:28] [PASSED] 0x5697 (DG2) [20:15:28] [PASSED] 0xB69 (PVC) [20:15:28] [PASSED] 0xB6E (PVC) [20:15:28] [PASSED] 0xBD4 (PVC) [20:15:28] [PASSED] 0xBD5 (PVC) [20:15:28] [PASSED] 0xBD6 (PVC) [20:15:28] [PASSED] 0xBD7 (PVC) [20:15:28] [PASSED] 0xBD8 (PVC) [20:15:28] [PASSED] 0xBD9 (PVC) [20:15:28] [PASSED] 0xBDA (PVC) [20:15:28] [PASSED] 0xBDB (PVC) [20:15:28] [PASSED] 0xBE0 (PVC) [20:15:28] [PASSED] 0xBE1 (PVC) [20:15:28] [PASSED] 0xBE5 (PVC) [20:15:28] [PASSED] 0x7D40 (METEORLAKE) [20:15:28] [PASSED] 0x7D45 (METEORLAKE) [20:15:28] [PASSED] 0x7D55 (METEORLAKE) [20:15:28] [PASSED] 0x7D60 (METEORLAKE) [20:15:28] [PASSED] 0x7DD5 (METEORLAKE) [20:15:28] [PASSED] 0x6420 (LUNARLAKE) [20:15:28] [PASSED] 0x64A0 (LUNARLAKE) [20:15:28] [PASSED] 0x64B0 (LUNARLAKE) [20:15:28] [PASSED] 0xE202 (BATTLEMAGE) [20:15:28] [PASSED] 0xE209 (BATTLEMAGE) [20:15:28] [PASSED] 0xE20B (BATTLEMAGE) [20:15:28] [PASSED] 0xE20C (BATTLEMAGE) [20:15:28] [PASSED] 0xE20D (BATTLEMAGE) [20:15:28] [PASSED] 0xE210 (BATTLEMAGE) [20:15:28] [PASSED] 0xE211 (BATTLEMAGE) [20:15:28] [PASSED] 0xE212 (BATTLEMAGE) [20:15:28] [PASSED] 0xE216 (BATTLEMAGE) [20:15:28] [PASSED] 0xE220 (BATTLEMAGE) [20:15:28] [PASSED] 0xE221 (BATTLEMAGE) [20:15:28] [PASSED] 0xE222 (BATTLEMAGE) [20:15:28] [PASSED] 0xE223 (BATTLEMAGE) [20:15:28] [PASSED] 0xB080 (PANTHERLAKE) [20:15:28] [PASSED] 0xB081 (PANTHERLAKE) [20:15:28] [PASSED] 0xB082 (PANTHERLAKE) [20:15:28] [PASSED] 0xB083 (PANTHERLAKE) [20:15:28] [PASSED] 0xB084 (PANTHERLAKE) [20:15:28] [PASSED] 0xB085 (PANTHERLAKE) [20:15:28] [PASSED] 0xB086 (PANTHERLAKE) [20:15:28] [PASSED] 0xB087 (PANTHERLAKE) [20:15:28] [PASSED] 0xB08F (PANTHERLAKE) [20:15:28] [PASSED] 0xB090 (PANTHERLAKE) [20:15:28] [PASSED] 0xB0A0 (PANTHERLAKE) [20:15:28] [PASSED] 0xB0B0 (PANTHERLAKE) [20:15:28] [PASSED] 0xFD80 (PANTHERLAKE) [20:15:28] [PASSED] 0xFD81 (PANTHERLAKE) [20:15:28] [PASSED] 0xD740 (NOVALAKE_S) [20:15:28] [PASSED] 0xD741 (NOVALAKE_S) [20:15:28] [PASSED] 0xD742 (NOVALAKE_S) [20:15:28] [PASSED] 0xD743 (NOVALAKE_S) [20:15:28] [PASSED] 0xD744 (NOVALAKE_S) [20:15:28] [PASSED] 0xD745 (NOVALAKE_S) [20:15:28] [PASSED] 0x674C (CRESCENTISLAND) [20:15:28] =============== [PASSED] check_platform_desc =============== [20:15:28] ===================== [PASSED] xe_pci ====================== [20:15:28] =================== xe_rtp (2 subtests) ==================== [20:15:28] =============== xe_rtp_process_to_sr_tests ================ [20:15:28] [PASSED] coalesce-same-reg [20:15:28] [PASSED] no-match-no-add [20:15:28] [PASSED] match-or [20:15:28] [PASSED] match-or-xfail [20:15:28] [PASSED] no-match-no-add-multiple-rules [20:15:28] [PASSED] two-regs-two-entries [20:15:28] [PASSED] clr-one-set-other [20:15:28] [PASSED] set-field [20:15:28] [PASSED] conflict-duplicate [20:15:28] [PASSED] conflict-not-disjoint [20:15:28] [PASSED] conflict-reg-type [20:15:28] =========== [PASSED] xe_rtp_process_to_sr_tests ============ [20:15:28] ================== xe_rtp_process_tests =================== [20:15:28] [PASSED] active1 [20:15:28] [PASSED] active2 [20:15:28] [PASSED] active-inactive [20:15:28] [PASSED] inactive-active [20:15:28] [PASSED] inactive-1st_or_active-inactive [20:15:28] [PASSED] inactive-2nd_or_active-inactive [20:15:28] [PASSED] inactive-last_or_active-inactive [20:15:28] [PASSED] inactive-no_or_active-inactive [20:15:28] ============== [PASSED] xe_rtp_process_tests =============== [20:15:28] ===================== [PASSED] xe_rtp ====================== [20:15:28] ==================== xe_wa (1 subtest) ===================== [20:15:28] ======================== xe_wa_gt ========================= [20:15:28] [PASSED] TIGERLAKE B0 [20:15:28] [PASSED] DG1 A0 [20:15:28] [PASSED] DG1 B0 [20:15:28] [PASSED] ALDERLAKE_S A0 [20:15:28] [PASSED] ALDERLAKE_S B0 [20:15:28] [PASSED] ALDERLAKE_S C0 [20:15:28] [PASSED] ALDERLAKE_S D0 [20:15:28] [PASSED] ALDERLAKE_P A0 [20:15:28] [PASSED] ALDERLAKE_P B0 [20:15:28] [PASSED] ALDERLAKE_P C0 [20:15:28] [PASSED] ALDERLAKE_S RPLS D0 [20:15:28] [PASSED] ALDERLAKE_P RPLU E0 [20:15:28] [PASSED] DG2 G10 C0 [20:15:28] [PASSED] DG2 G11 B1 [20:15:28] [PASSED] DG2 G12 A1 [20:15:28] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0 [20:15:28] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0 [20:15:28] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0 [20:15:28] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0 [20:15:28] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0 [20:15:28] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1 [20:15:28] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0 [20:15:28] ==================== [PASSED] xe_wa_gt ===================== [20:15:28] ====================== [PASSED] xe_wa ====================== [20:15:28] ============================================================ [20:15:28] Testing complete. Ran 512 tests: passed: 494, skipped: 18 [20:15:28] Elapsed time: 36.111s total, 4.195s configuring, 31.398s building, 0.465s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig [20:15:28] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [20:15:30] 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 [20:15:55] Starting KUnit Kernel (1/1)... [20:15:55] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [20:15:55] ============ drm_test_pick_cmdline (2 subtests) ============ [20:15:55] [PASSED] drm_test_pick_cmdline_res_1920_1080_60 [20:15:55] =============== drm_test_pick_cmdline_named =============== [20:15:55] [PASSED] NTSC [20:15:55] [PASSED] NTSC-J [20:15:55] [PASSED] PAL [20:15:55] [PASSED] PAL-M [20:15:55] =========== [PASSED] drm_test_pick_cmdline_named =========== [20:15:55] ============== [PASSED] drm_test_pick_cmdline ============== [20:15:55] == drm_test_atomic_get_connector_for_encoder (1 subtest) === [20:15:55] [PASSED] drm_test_drm_atomic_get_connector_for_encoder [20:15:55] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ==== [20:15:55] =========== drm_validate_clone_mode (2 subtests) =========== [20:15:55] ============== drm_test_check_in_clone_mode =============== [20:15:55] [PASSED] in_clone_mode [20:15:55] [PASSED] not_in_clone_mode [20:15:55] ========== [PASSED] drm_test_check_in_clone_mode =========== [20:15:55] =============== drm_test_check_valid_clones =============== [20:15:55] [PASSED] not_in_clone_mode [20:15:55] [PASSED] valid_clone [20:15:55] [PASSED] invalid_clone [20:15:55] =========== [PASSED] drm_test_check_valid_clones =========== [20:15:55] ============= [PASSED] drm_validate_clone_mode ============= [20:15:55] ============= drm_validate_modeset (1 subtest) ============= [20:15:55] [PASSED] drm_test_check_connector_changed_modeset [20:15:55] ============== [PASSED] drm_validate_modeset =============== [20:15:55] ====== drm_test_bridge_get_current_state (2 subtests) ====== [20:15:55] [PASSED] drm_test_drm_bridge_get_current_state_atomic [20:15:55] [PASSED] drm_test_drm_bridge_get_current_state_legacy [20:15:55] ======== [PASSED] drm_test_bridge_get_current_state ======== [20:15:55] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ====== [20:15:55] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic [20:15:55] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled [20:15:55] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy [20:15:55] ======== [PASSED] drm_test_bridge_helper_reset_crtc ======== [20:15:55] ============== drm_bridge_alloc (2 subtests) =============== [20:15:55] [PASSED] drm_test_drm_bridge_alloc_basic [20:15:55] [PASSED] drm_test_drm_bridge_alloc_get_put [20:15:55] ================ [PASSED] drm_bridge_alloc ================= [20:15:55] ================== drm_buddy (8 subtests) ================== [20:15:55] [PASSED] drm_test_buddy_alloc_limit [20:15:55] [PASSED] drm_test_buddy_alloc_optimistic [20:15:55] [PASSED] drm_test_buddy_alloc_pessimistic [20:15:55] [PASSED] drm_test_buddy_alloc_pathological [20:15:55] [PASSED] drm_test_buddy_alloc_contiguous [20:15:55] [PASSED] drm_test_buddy_alloc_clear [20:15:55] [PASSED] drm_test_buddy_alloc_range_bias [20:15:55] [PASSED] drm_test_buddy_fragmentation_performance [20:15:55] ==================== [PASSED] drm_buddy ==================== [20:15:55] ============= drm_cmdline_parser (40 subtests) ============= [20:15:55] [PASSED] drm_test_cmdline_force_d_only [20:15:55] [PASSED] drm_test_cmdline_force_D_only_dvi [20:15:55] [PASSED] drm_test_cmdline_force_D_only_hdmi [20:15:55] [PASSED] drm_test_cmdline_force_D_only_not_digital [20:15:55] [PASSED] drm_test_cmdline_force_e_only [20:15:55] [PASSED] drm_test_cmdline_res [20:15:55] [PASSED] drm_test_cmdline_res_vesa [20:15:55] [PASSED] drm_test_cmdline_res_vesa_rblank [20:15:55] [PASSED] drm_test_cmdline_res_rblank [20:15:55] [PASSED] drm_test_cmdline_res_bpp [20:15:55] [PASSED] drm_test_cmdline_res_refresh [20:15:55] [PASSED] drm_test_cmdline_res_bpp_refresh [20:15:55] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced [20:15:55] [PASSED] drm_test_cmdline_res_bpp_refresh_margins [20:15:55] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off [20:15:55] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on [20:15:55] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog [20:15:55] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital [20:15:55] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on [20:15:55] [PASSED] drm_test_cmdline_res_margins_force_on [20:15:55] [PASSED] drm_test_cmdline_res_vesa_margins [20:15:55] [PASSED] drm_test_cmdline_name [20:15:55] [PASSED] drm_test_cmdline_name_bpp [20:15:55] [PASSED] drm_test_cmdline_name_option [20:15:55] [PASSED] drm_test_cmdline_name_bpp_option [20:15:55] [PASSED] drm_test_cmdline_rotate_0 [20:15:55] [PASSED] drm_test_cmdline_rotate_90 [20:15:55] [PASSED] drm_test_cmdline_rotate_180 [20:15:55] [PASSED] drm_test_cmdline_rotate_270 [20:15:55] [PASSED] drm_test_cmdline_hmirror [20:15:55] [PASSED] drm_test_cmdline_vmirror [20:15:55] [PASSED] drm_test_cmdline_margin_options [20:15:55] [PASSED] drm_test_cmdline_multiple_options [20:15:55] [PASSED] drm_test_cmdline_bpp_extra_and_option [20:15:55] [PASSED] drm_test_cmdline_extra_and_option [20:15:55] [PASSED] drm_test_cmdline_freestanding_options [20:15:55] [PASSED] drm_test_cmdline_freestanding_force_e_and_options [20:15:55] [PASSED] drm_test_cmdline_panel_orientation [20:15:55] ================ drm_test_cmdline_invalid ================= [20:15:55] [PASSED] margin_only [20:15:55] [PASSED] interlace_only [20:15:55] [PASSED] res_missing_x [20:15:55] [PASSED] res_missing_y [20:15:55] [PASSED] res_bad_y [20:15:55] [PASSED] res_missing_y_bpp [20:15:55] [PASSED] res_bad_bpp [20:15:55] [PASSED] res_bad_refresh [20:15:55] [PASSED] res_bpp_refresh_force_on_off [20:15:55] [PASSED] res_invalid_mode [20:15:55] [PASSED] res_bpp_wrong_place_mode [20:15:55] [PASSED] name_bpp_refresh [20:15:55] [PASSED] name_refresh [20:15:55] [PASSED] name_refresh_wrong_mode [20:15:55] [PASSED] name_refresh_invalid_mode [20:15:55] [PASSED] rotate_multiple [20:15:55] [PASSED] rotate_invalid_val [20:15:55] [PASSED] rotate_truncated [20:15:55] [PASSED] invalid_option [20:15:55] [PASSED] invalid_tv_option [20:15:55] [PASSED] truncated_tv_option [20:15:55] ============ [PASSED] drm_test_cmdline_invalid ============= [20:15:55] =============== drm_test_cmdline_tv_options =============== [20:15:55] [PASSED] NTSC [20:15:55] [PASSED] NTSC_443 [20:15:55] [PASSED] NTSC_J [20:15:55] [PASSED] PAL [20:15:55] [PASSED] PAL_M [20:15:55] [PASSED] PAL_N [20:15:55] [PASSED] SECAM [20:15:55] [PASSED] MONO_525 [20:15:55] [PASSED] MONO_625 [20:15:55] =========== [PASSED] drm_test_cmdline_tv_options =========== [20:15:55] =============== [PASSED] drm_cmdline_parser ================ [20:15:55] ========== drmm_connector_hdmi_init (20 subtests) ========== [20:15:55] [PASSED] drm_test_connector_hdmi_init_valid [20:15:55] [PASSED] drm_test_connector_hdmi_init_bpc_8 [20:15:55] [PASSED] drm_test_connector_hdmi_init_bpc_10 [20:15:55] [PASSED] drm_test_connector_hdmi_init_bpc_12 [20:15:55] [PASSED] drm_test_connector_hdmi_init_bpc_invalid [20:15:55] [PASSED] drm_test_connector_hdmi_init_bpc_null [20:15:55] [PASSED] drm_test_connector_hdmi_init_formats_empty [20:15:55] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb [20:15:55] === drm_test_connector_hdmi_init_formats_yuv420_allowed === [20:15:55] [PASSED] supported_formats=0x9 yuv420_allowed=1 [20:15:55] [PASSED] supported_formats=0x9 yuv420_allowed=0 [20:15:55] [PASSED] supported_formats=0x3 yuv420_allowed=1 [20:15:55] [PASSED] supported_formats=0x3 yuv420_allowed=0 [20:15:55] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed === [20:15:55] [PASSED] drm_test_connector_hdmi_init_null_ddc [20:15:55] [PASSED] drm_test_connector_hdmi_init_null_product [20:15:55] [PASSED] drm_test_connector_hdmi_init_null_vendor [20:15:55] [PASSED] drm_test_connector_hdmi_init_product_length_exact [20:15:55] [PASSED] drm_test_connector_hdmi_init_product_length_too_long [20:15:55] [PASSED] drm_test_connector_hdmi_init_product_valid [20:15:55] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact [20:15:55] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long [20:15:55] [PASSED] drm_test_connector_hdmi_init_vendor_valid [20:15:55] ========= drm_test_connector_hdmi_init_type_valid ========= [20:15:55] [PASSED] HDMI-A [20:15:55] [PASSED] HDMI-B [20:15:55] ===== [PASSED] drm_test_connector_hdmi_init_type_valid ===== [20:15:55] ======== drm_test_connector_hdmi_init_type_invalid ======== [20:15:55] [PASSED] Unknown [20:15:55] [PASSED] VGA [20:15:55] [PASSED] DVI-I [20:15:55] [PASSED] DVI-D [20:15:55] [PASSED] DVI-A [20:15:55] [PASSED] Composite [20:15:55] [PASSED] SVIDEO [20:15:55] [PASSED] LVDS [20:15:55] [PASSED] Component [20:15:55] [PASSED] DIN [20:15:55] [PASSED] DP [20:15:55] [PASSED] TV [20:15:55] [PASSED] eDP [20:15:55] [PASSED] Virtual [20:15:55] [PASSED] DSI [20:15:55] [PASSED] DPI [20:15:55] [PASSED] Writeback [20:15:55] [PASSED] SPI [20:15:55] [PASSED] USB [20:15:55] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ==== [20:15:55] ============ [PASSED] drmm_connector_hdmi_init ============= [20:15:55] ============= drmm_connector_init (3 subtests) ============= [20:15:55] [PASSED] drm_test_drmm_connector_init [20:15:55] [PASSED] drm_test_drmm_connector_init_null_ddc [20:15:55] ========= drm_test_drmm_connector_init_type_valid ========= [20:15:55] [PASSED] Unknown [20:15:55] [PASSED] VGA [20:15:55] [PASSED] DVI-I [20:15:55] [PASSED] DVI-D [20:15:55] [PASSED] DVI-A [20:15:55] [PASSED] Composite [20:15:55] [PASSED] SVIDEO [20:15:55] [PASSED] LVDS [20:15:55] [PASSED] Component [20:15:55] [PASSED] DIN [20:15:55] [PASSED] DP [20:15:55] [PASSED] HDMI-A [20:15:55] [PASSED] HDMI-B [20:15:55] [PASSED] TV [20:15:55] [PASSED] eDP [20:15:55] [PASSED] Virtual [20:15:55] [PASSED] DSI [20:15:55] [PASSED] DPI [20:15:55] [PASSED] Writeback [20:15:55] [PASSED] SPI [20:15:55] [PASSED] USB [20:15:55] ===== [PASSED] drm_test_drmm_connector_init_type_valid ===== [20:15:55] =============== [PASSED] drmm_connector_init =============== [20:15:55] ========= drm_connector_dynamic_init (6 subtests) ========== [20:15:55] [PASSED] drm_test_drm_connector_dynamic_init [20:15:55] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc [20:15:55] [PASSED] drm_test_drm_connector_dynamic_init_not_added [20:15:55] [PASSED] drm_test_drm_connector_dynamic_init_properties [20:15:55] ===== drm_test_drm_connector_dynamic_init_type_valid ====== [20:15:55] [PASSED] Unknown [20:15:55] [PASSED] VGA [20:15:55] [PASSED] DVI-I [20:15:55] [PASSED] DVI-D [20:15:55] [PASSED] DVI-A [20:15:55] [PASSED] Composite [20:15:55] [PASSED] SVIDEO [20:15:55] [PASSED] LVDS [20:15:55] [PASSED] Component [20:15:55] [PASSED] DIN [20:15:55] [PASSED] DP [20:15:55] [PASSED] HDMI-A [20:15:55] [PASSED] HDMI-B [20:15:55] [PASSED] TV [20:15:55] [PASSED] eDP [20:15:55] [PASSED] Virtual [20:15:55] [PASSED] DSI [20:15:55] [PASSED] DPI [20:15:55] [PASSED] Writeback [20:15:55] [PASSED] SPI [20:15:55] [PASSED] USB [20:15:55] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid == [20:15:55] ======== drm_test_drm_connector_dynamic_init_name ========= [20:15:55] [PASSED] Unknown [20:15:55] [PASSED] VGA [20:15:55] [PASSED] DVI-I [20:15:55] [PASSED] DVI-D [20:15:55] [PASSED] DVI-A [20:15:55] [PASSED] Composite [20:15:55] [PASSED] SVIDEO [20:15:55] [PASSED] LVDS [20:15:55] [PASSED] Component [20:15:55] [PASSED] DIN [20:15:55] [PASSED] DP [20:15:55] [PASSED] HDMI-A [20:15:55] [PASSED] HDMI-B [20:15:55] [PASSED] TV [20:15:55] [PASSED] eDP [20:15:55] [PASSED] Virtual [20:15:55] [PASSED] DSI [20:15:55] [PASSED] DPI [20:15:55] [PASSED] Writeback [20:15:55] [PASSED] SPI [20:15:55] [PASSED] USB [20:15:55] ==== [PASSED] drm_test_drm_connector_dynamic_init_name ===== [20:15:55] =========== [PASSED] drm_connector_dynamic_init ============ [20:15:55] ==== drm_connector_dynamic_register_early (4 subtests) ===== [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_early_defer [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object [20:15:55] ====== [PASSED] drm_connector_dynamic_register_early ======= [20:15:55] ======= drm_connector_dynamic_register (7 subtests) ======== [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_on_list [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_no_defer [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_no_init [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_mode_object [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_sysfs [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name [20:15:55] [PASSED] drm_test_drm_connector_dynamic_register_debugfs [20:15:55] ========= [PASSED] drm_connector_dynamic_register ========== [20:15:55] = drm_connector_attach_broadcast_rgb_property (2 subtests) = [20:15:55] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property [20:15:55] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector [20:15:55] === [PASSED] drm_connector_attach_broadcast_rgb_property === [20:15:55] ========== drm_get_tv_mode_from_name (2 subtests) ========== [20:15:55] ========== drm_test_get_tv_mode_from_name_valid =========== [20:15:55] [PASSED] NTSC [20:15:55] [PASSED] NTSC-443 [20:15:55] [PASSED] NTSC-J [20:15:55] [PASSED] PAL [20:15:55] [PASSED] PAL-M [20:15:55] [PASSED] PAL-N [20:15:55] [PASSED] SECAM [20:15:55] [PASSED] Mono [20:15:55] ====== [PASSED] drm_test_get_tv_mode_from_name_valid ======= [20:15:55] [PASSED] drm_test_get_tv_mode_from_name_truncated [20:15:55] ============ [PASSED] drm_get_tv_mode_from_name ============ [20:15:55] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) = [20:15:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb [20:15:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc [20:15:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1 [20:15:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc [20:15:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1 [20:15:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double [20:15:55] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid = [20:15:55] [PASSED] VIC 96 [20:15:55] [PASSED] VIC 97 [20:15:55] [PASSED] VIC 101 [20:15:55] [PASSED] VIC 102 [20:15:55] [PASSED] VIC 106 [20:15:55] [PASSED] VIC 107 [20:15:55] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid === [20:15:55] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc [20:15:55] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc [20:15:55] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc [20:15:55] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc [20:15:55] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc [20:15:55] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ==== [20:15:55] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) == [20:15:55] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ==== [20:15:55] [PASSED] Automatic [20:15:55] [PASSED] Full [20:15:55] [PASSED] Limited 16:235 [20:15:55] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name === [20:15:55] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid [20:15:55] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ==== [20:15:55] == drm_hdmi_connector_get_output_format_name (2 subtests) == [20:15:55] === drm_test_drm_hdmi_connector_get_output_format_name ==== [20:15:55] [PASSED] RGB [20:15:55] [PASSED] YUV 4:2:0 [20:15:55] [PASSED] YUV 4:2:2 [20:15:55] [PASSED] YUV 4:4:4 [20:15:55] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name === [20:15:55] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid [20:15:55] ==== [PASSED] drm_hdmi_connector_get_output_format_name ==== [20:15:55] ============= drm_damage_helper (21 subtests) ============== [20:15:55] [PASSED] drm_test_damage_iter_no_damage [20:15:55] [PASSED] drm_test_damage_iter_no_damage_fractional_src [20:15:55] [PASSED] drm_test_damage_iter_no_damage_src_moved [20:15:55] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved [20:15:55] [PASSED] drm_test_damage_iter_no_damage_not_visible [20:15:55] [PASSED] drm_test_damage_iter_no_damage_no_crtc [20:15:55] [PASSED] drm_test_damage_iter_no_damage_no_fb [20:15:55] [PASSED] drm_test_damage_iter_simple_damage [20:15:55] [PASSED] drm_test_damage_iter_single_damage [20:15:55] [PASSED] drm_test_damage_iter_single_damage_intersect_src [20:15:55] [PASSED] drm_test_damage_iter_single_damage_outside_src [20:15:55] [PASSED] drm_test_damage_iter_single_damage_fractional_src [20:15:55] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src [20:15:55] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src [20:15:55] [PASSED] drm_test_damage_iter_single_damage_src_moved [20:15:55] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved [20:15:55] [PASSED] drm_test_damage_iter_damage [20:15:55] [PASSED] drm_test_damage_iter_damage_one_intersect [20:15:55] [PASSED] drm_test_damage_iter_damage_one_outside [20:15:55] [PASSED] drm_test_damage_iter_damage_src_moved [20:15:55] [PASSED] drm_test_damage_iter_damage_not_visible [20:15:55] ================ [PASSED] drm_damage_helper ================ [20:15:55] ============== drm_dp_mst_helper (3 subtests) ============== [20:15:55] ============== drm_test_dp_mst_calc_pbn_mode ============== [20:15:55] [PASSED] Clock 154000 BPP 30 DSC disabled [20:15:55] [PASSED] Clock 234000 BPP 30 DSC disabled [20:15:55] [PASSED] Clock 297000 BPP 24 DSC disabled [20:15:55] [PASSED] Clock 332880 BPP 24 DSC enabled [20:15:55] [PASSED] Clock 324540 BPP 24 DSC enabled [20:15:55] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ========== [20:15:55] ============== drm_test_dp_mst_calc_pbn_div =============== [20:15:55] [PASSED] Link rate 2000000 lane count 4 [20:15:55] [PASSED] Link rate 2000000 lane count 2 [20:15:55] [PASSED] Link rate 2000000 lane count 1 [20:15:55] [PASSED] Link rate 1350000 lane count 4 [20:15:55] [PASSED] Link rate 1350000 lane count 2 [20:15:55] [PASSED] Link rate 1350000 lane count 1 [20:15:55] [PASSED] Link rate 1000000 lane count 4 [20:15:55] [PASSED] Link rate 1000000 lane count 2 [20:15:55] [PASSED] Link rate 1000000 lane count 1 [20:15:55] [PASSED] Link rate 810000 lane count 4 [20:15:55] [PASSED] Link rate 810000 lane count 2 [20:15:55] [PASSED] Link rate 810000 lane count 1 [20:15:55] [PASSED] Link rate 540000 lane count 4 [20:15:55] [PASSED] Link rate 540000 lane count 2 [20:15:55] [PASSED] Link rate 540000 lane count 1 [20:15:55] [PASSED] Link rate 270000 lane count 4 [20:15:55] [PASSED] Link rate 270000 lane count 2 [20:15:55] [PASSED] Link rate 270000 lane count 1 [20:15:55] [PASSED] Link rate 162000 lane count 4 [20:15:55] [PASSED] Link rate 162000 lane count 2 [20:15:55] [PASSED] Link rate 162000 lane count 1 [20:15:55] ========== [PASSED] drm_test_dp_mst_calc_pbn_div =========== [20:15:55] ========= drm_test_dp_mst_sideband_msg_req_decode ========= [20:15:55] [PASSED] DP_ENUM_PATH_RESOURCES with port number [20:15:55] [PASSED] DP_POWER_UP_PHY with port number [20:15:55] [PASSED] DP_POWER_DOWN_PHY with port number [20:15:55] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks [20:15:55] [PASSED] DP_ALLOCATE_PAYLOAD with port number [20:15:55] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI [20:15:55] [PASSED] DP_ALLOCATE_PAYLOAD with PBN [20:15:55] [PASSED] DP_QUERY_PAYLOAD with port number [20:15:55] [PASSED] DP_QUERY_PAYLOAD with VCPI [20:15:55] [PASSED] DP_REMOTE_DPCD_READ with port number [20:15:55] [PASSED] DP_REMOTE_DPCD_READ with DPCD address [20:15:55] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes [20:15:55] [PASSED] DP_REMOTE_DPCD_WRITE with port number [20:15:55] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address [20:15:55] [PASSED] DP_REMOTE_DPCD_WRITE with data array [20:15:55] [PASSED] DP_REMOTE_I2C_READ with port number [20:15:55] [PASSED] DP_REMOTE_I2C_READ with I2C device ID [20:15:55] [PASSED] DP_REMOTE_I2C_READ with transactions array [20:15:55] [PASSED] DP_REMOTE_I2C_WRITE with port number [20:15:55] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID [20:15:55] [PASSED] DP_REMOTE_I2C_WRITE with data array [20:15:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID [20:15:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID [20:15:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event [20:15:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event [20:15:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior [20:15:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior [20:15:55] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode ===== [20:15:55] ================ [PASSED] drm_dp_mst_helper ================ [20:15:55] ================== drm_exec (7 subtests) =================== [20:15:55] [PASSED] sanitycheck [20:15:55] [PASSED] test_lock [20:15:55] [PASSED] test_lock_unlock [20:15:55] [PASSED] test_duplicates [20:15:55] [PASSED] test_prepare [20:15:55] [PASSED] test_prepare_array [20:15:55] [PASSED] test_multiple_loops [20:15:55] ==================== [PASSED] drm_exec ===================== [20:15:55] =========== drm_format_helper_test (17 subtests) =========== [20:15:55] ============== drm_test_fb_xrgb8888_to_gray8 ============== [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ========== [20:15:55] ============= drm_test_fb_xrgb8888_to_rgb332 ============== [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ========== [20:15:55] ============= drm_test_fb_xrgb8888_to_rgb565 ============== [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ========== [20:15:55] ============ drm_test_fb_xrgb8888_to_xrgb1555 ============= [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 ========= [20:15:55] ============ drm_test_fb_xrgb8888_to_argb1555 ============= [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 ========= [20:15:55] ============ drm_test_fb_xrgb8888_to_rgba5551 ============= [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 ========= [20:15:55] ============= drm_test_fb_xrgb8888_to_rgb888 ============== [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ========== [20:15:55] ============= drm_test_fb_xrgb8888_to_bgr888 ============== [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ========== [20:15:55] ============ drm_test_fb_xrgb8888_to_argb8888 ============= [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 ========= [20:15:55] =========== drm_test_fb_xrgb8888_to_xrgb2101010 =========== [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 ======= [20:15:55] =========== drm_test_fb_xrgb8888_to_argb2101010 =========== [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 ======= [20:15:55] ============== drm_test_fb_xrgb8888_to_mono =============== [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ========== [PASSED] drm_test_fb_xrgb8888_to_mono =========== [20:15:55] ==================== drm_test_fb_swab ===================== [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ================ [PASSED] drm_test_fb_swab ================= [20:15:55] ============ drm_test_fb_xrgb8888_to_xbgr8888 ============= [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 ========= [20:15:55] ============ drm_test_fb_xrgb8888_to_abgr8888 ============= [20:15:55] [PASSED] single_pixel_source_buffer [20:15:55] [PASSED] single_pixel_clip_rectangle [20:15:55] [PASSED] well_known_colors [20:15:55] [PASSED] destination_pitch [20:15:55] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 ========= [20:15:55] ================= drm_test_fb_clip_offset ================= [20:15:55] [PASSED] pass through [20:15:55] [PASSED] horizontal offset [20:15:55] [PASSED] vertical offset [20:15:55] [PASSED] horizontal and vertical offset [20:15:55] [PASSED] horizontal offset (custom pitch) [20:15:55] [PASSED] vertical offset (custom pitch) [20:15:55] [PASSED] horizontal and vertical offset (custom pitch) [20:15:55] ============= [PASSED] drm_test_fb_clip_offset ============= [20:15:55] =================== drm_test_fb_memcpy ==================== [20:15:55] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258) [20:15:55] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258) [20:15:55] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559) [20:15:55] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258) [20:15:55] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258) [20:15:55] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559) [20:15:55] [PASSED] well_known_colors: XB24 little-endian (0x34324258) [20:15:55] [PASSED] well_known_colors: XRA8 little-endian (0x38415258) [20:15:55] [PASSED] well_known_colors: YU24 little-endian (0x34325559) [20:15:55] [PASSED] destination_pitch: XB24 little-endian (0x34324258) [20:15:55] [PASSED] destination_pitch: XRA8 little-endian (0x38415258) [20:15:55] [PASSED] destination_pitch: YU24 little-endian (0x34325559) [20:15:55] =============== [PASSED] drm_test_fb_memcpy ================ [20:15:55] ============= [PASSED] drm_format_helper_test ============== [20:15:55] ================= drm_format (18 subtests) ================= [20:15:55] [PASSED] drm_test_format_block_width_invalid [20:15:55] [PASSED] drm_test_format_block_width_one_plane [20:15:55] [PASSED] drm_test_format_block_width_two_plane [20:15:55] [PASSED] drm_test_format_block_width_three_plane [20:15:55] [PASSED] drm_test_format_block_width_tiled [20:15:55] [PASSED] drm_test_format_block_height_invalid [20:15:55] [PASSED] drm_test_format_block_height_one_plane [20:15:55] [PASSED] drm_test_format_block_height_two_plane [20:15:55] [PASSED] drm_test_format_block_height_three_plane [20:15:55] [PASSED] drm_test_format_block_height_tiled [20:15:55] [PASSED] drm_test_format_min_pitch_invalid [20:15:55] [PASSED] drm_test_format_min_pitch_one_plane_8bpp [20:15:55] [PASSED] drm_test_format_min_pitch_one_plane_16bpp [20:15:55] [PASSED] drm_test_format_min_pitch_one_plane_24bpp [20:15:55] [PASSED] drm_test_format_min_pitch_one_plane_32bpp [20:15:55] [PASSED] drm_test_format_min_pitch_two_plane [20:15:55] [PASSED] drm_test_format_min_pitch_three_plane_8bpp [20:15:55] [PASSED] drm_test_format_min_pitch_tiled [20:15:55] =================== [PASSED] drm_format ==================== [20:15:55] ============== drm_framebuffer (10 subtests) =============== [20:15:55] ========== drm_test_framebuffer_check_src_coords ========== [20:15:55] [PASSED] Success: source fits into fb [20:15:55] [PASSED] Fail: overflowing fb with x-axis coordinate [20:15:55] [PASSED] Fail: overflowing fb with y-axis coordinate [20:15:55] [PASSED] Fail: overflowing fb with source width [20:15:55] [PASSED] Fail: overflowing fb with source height [20:15:55] ====== [PASSED] drm_test_framebuffer_check_src_coords ====== [20:15:55] [PASSED] drm_test_framebuffer_cleanup [20:15:55] =============== drm_test_framebuffer_create =============== [20:15:55] [PASSED] ABGR8888 normal sizes [20:15:55] [PASSED] ABGR8888 max sizes [20:15:55] [PASSED] ABGR8888 pitch greater than min required [20:15:55] [PASSED] ABGR8888 pitch less than min required [20:15:55] [PASSED] ABGR8888 Invalid width [20:15:55] [PASSED] ABGR8888 Invalid buffer handle [20:15:55] [PASSED] No pixel format [20:15:55] [PASSED] ABGR8888 Width 0 [20:15:55] [PASSED] ABGR8888 Height 0 [20:15:55] [PASSED] ABGR8888 Out of bound height * pitch combination [20:15:55] [PASSED] ABGR8888 Large buffer offset [20:15:55] [PASSED] ABGR8888 Buffer offset for inexistent plane [20:15:55] [PASSED] ABGR8888 Invalid flag [20:15:55] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers [20:15:55] [PASSED] ABGR8888 Valid buffer modifier [20:15:55] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE) [20:15:55] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS [20:15:55] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS [20:15:55] [PASSED] NV12 Normal sizes [20:15:55] [PASSED] NV12 Max sizes [20:15:55] [PASSED] NV12 Invalid pitch [20:15:55] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag [20:15:55] [PASSED] NV12 different modifier per-plane [20:15:55] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE [20:15:55] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS [20:15:55] [PASSED] NV12 Modifier for inexistent plane [20:15:55] [PASSED] NV12 Handle for inexistent plane [20:15:55] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS [20:15:55] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier [20:15:55] [PASSED] YVU420 Normal sizes [20:15:55] [PASSED] YVU420 Max sizes [20:15:55] [PASSED] YVU420 Invalid pitch [20:15:55] [PASSED] YVU420 Different pitches [20:15:55] [PASSED] YVU420 Different buffer offsets/pitches [20:15:55] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS [20:15:55] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS [20:15:55] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS [20:15:55] [PASSED] YVU420 Valid modifier [20:15:55] [PASSED] YVU420 Different modifiers per plane [20:15:55] [PASSED] YVU420 Modifier for inexistent plane [20:15:55] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR) [20:15:55] [PASSED] X0L2 Normal sizes [20:15:55] [PASSED] X0L2 Max sizes [20:15:55] [PASSED] X0L2 Invalid pitch [20:15:55] [PASSED] X0L2 Pitch greater than minimum required [20:15:55] [PASSED] X0L2 Handle for inexistent plane [20:15:55] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set [20:15:55] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set [20:15:55] [PASSED] X0L2 Valid modifier [20:15:55] [PASSED] X0L2 Modifier for inexistent plane [20:15:55] =========== [PASSED] drm_test_framebuffer_create =========== [20:15:55] [PASSED] drm_test_framebuffer_free [20:15:55] [PASSED] drm_test_framebuffer_init [20:15:55] [PASSED] drm_test_framebuffer_init_bad_format [20:15:55] [PASSED] drm_test_framebuffer_init_dev_mismatch [20:15:55] [PASSED] drm_test_framebuffer_lookup [20:15:55] [PASSED] drm_test_framebuffer_lookup_inexistent [20:15:55] [PASSED] drm_test_framebuffer_modifiers_not_supported [20:15:55] ================= [PASSED] drm_framebuffer ================= [20:15:55] ================ drm_gem_shmem (8 subtests) ================ [20:15:55] [PASSED] drm_gem_shmem_test_obj_create [20:15:55] [PASSED] drm_gem_shmem_test_obj_create_private [20:15:55] [PASSED] drm_gem_shmem_test_pin_pages [20:15:55] [PASSED] drm_gem_shmem_test_vmap [20:15:55] [PASSED] drm_gem_shmem_test_get_sg_table [20:15:55] [PASSED] drm_gem_shmem_test_get_pages_sgt [20:15:55] [PASSED] drm_gem_shmem_test_madvise [20:15:55] [PASSED] drm_gem_shmem_test_purge [20:15:55] ================== [PASSED] drm_gem_shmem ================== [20:15:55] === drm_atomic_helper_connector_hdmi_check (27 subtests) === [20:15:55] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode [20:15:55] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1 [20:15:55] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode [20:15:55] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1 [20:15:55] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode [20:15:55] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1 [20:15:55] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 ======= [20:15:55] [PASSED] Automatic [20:15:55] [PASSED] Full [20:15:55] [PASSED] Limited 16:235 [20:15:55] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 === [20:15:55] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed [20:15:55] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed [20:15:55] [PASSED] drm_test_check_disable_connector [20:15:55] [PASSED] drm_test_check_hdmi_funcs_reject_rate [20:15:55] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb [20:15:55] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420 [20:15:55] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422 [20:15:55] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420 [20:15:55] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420 [20:15:55] [PASSED] drm_test_check_output_bpc_crtc_mode_changed [20:15:55] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed [20:15:55] [PASSED] drm_test_check_output_bpc_dvi [20:15:55] [PASSED] drm_test_check_output_bpc_format_vic_1 [20:15:55] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only [20:15:55] [PASSED] drm_test_check_output_bpc_format_display_rgb_only [20:15:55] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only [20:15:55] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only [20:15:55] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc [20:15:55] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc [20:15:55] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc [20:15:55] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ====== [20:15:55] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ==== [20:15:55] [PASSED] drm_test_check_broadcast_rgb_value [20:15:55] [PASSED] drm_test_check_bpc_8_value [20:15:55] [PASSED] drm_test_check_bpc_10_value [20:15:55] [PASSED] drm_test_check_bpc_12_value [20:15:55] [PASSED] drm_test_check_format_value [20:15:55] [PASSED] drm_test_check_tmds_char_value [20:15:55] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ====== [20:15:55] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) = [20:15:55] [PASSED] drm_test_check_mode_valid [20:15:55] [PASSED] drm_test_check_mode_valid_reject [20:15:55] [PASSED] drm_test_check_mode_valid_reject_rate [20:15:55] [PASSED] drm_test_check_mode_valid_reject_max_clock [20:15:55] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid === [20:15:55] ================= drm_managed (2 subtests) ================= [20:15:55] [PASSED] drm_test_managed_release_action [20:15:55] [PASSED] drm_test_managed_run_action [20:15:55] =================== [PASSED] drm_managed =================== [20:15:55] =================== drm_mm (6 subtests) ==================== [20:15:55] [PASSED] drm_test_mm_init [20:15:55] [PASSED] drm_test_mm_debug [20:15:55] [PASSED] drm_test_mm_align32 [20:15:55] [PASSED] drm_test_mm_align64 [20:15:55] [PASSED] drm_test_mm_lowest [20:15:55] [PASSED] drm_test_mm_highest [20:15:55] ===================== [PASSED] drm_mm ====================== [20:15:55] ============= drm_modes_analog_tv (5 subtests) ============= [20:15:55] [PASSED] drm_test_modes_analog_tv_mono_576i [20:15:55] [PASSED] drm_test_modes_analog_tv_ntsc_480i [20:15:55] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined [20:15:55] [PASSED] drm_test_modes_analog_tv_pal_576i [20:15:55] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined [20:15:55] =============== [PASSED] drm_modes_analog_tv =============== [20:15:55] ============== drm_plane_helper (2 subtests) =============== [20:15:55] =============== drm_test_check_plane_state ================ [20:15:55] [PASSED] clipping_simple [20:15:55] [PASSED] clipping_rotate_reflect [20:15:55] [PASSED] positioning_simple [20:15:55] [PASSED] upscaling [20:15:55] [PASSED] downscaling [20:15:55] [PASSED] rounding1 [20:15:55] [PASSED] rounding2 [20:15:55] [PASSED] rounding3 [20:15:55] [PASSED] rounding4 [20:15:55] =========== [PASSED] drm_test_check_plane_state ============ [20:15:55] =========== drm_test_check_invalid_plane_state ============ [20:15:55] [PASSED] positioning_invalid [20:15:55] [PASSED] upscaling_invalid [20:15:55] [PASSED] downscaling_invalid [20:15:55] ======= [PASSED] drm_test_check_invalid_plane_state ======== [20:15:55] ================ [PASSED] drm_plane_helper ================= [20:15:55] ====== drm_connector_helper_tv_get_modes (1 subtest) ======= [20:15:55] ====== drm_test_connector_helper_tv_get_modes_check ======= [20:15:55] [PASSED] None [20:15:55] [PASSED] PAL [20:15:55] [PASSED] NTSC [20:15:55] [PASSED] Both, NTSC Default [20:15:55] [PASSED] Both, PAL Default [20:15:55] [PASSED] Both, NTSC Default, with PAL on command-line [20:15:55] [PASSED] Both, PAL Default, with NTSC on command-line [20:15:55] == [PASSED] drm_test_connector_helper_tv_get_modes_check === [20:15:55] ======== [PASSED] drm_connector_helper_tv_get_modes ======== [20:15:55] ================== drm_rect (9 subtests) =================== [20:15:55] [PASSED] drm_test_rect_clip_scaled_div_by_zero [20:15:55] [PASSED] drm_test_rect_clip_scaled_not_clipped [20:15:55] [PASSED] drm_test_rect_clip_scaled_clipped [20:15:55] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned [20:15:55] ================= drm_test_rect_intersect ================= [20:15:55] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0 [20:15:55] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1 [20:15:55] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0 [20:15:55] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1 [20:15:55] [PASSED] right x left: 2x1+0+0 x 3x1+1+0 [20:15:55] [PASSED] left x right: 3x1+1+0 x 2x1+0+0 [20:15:55] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1 [20:15:55] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0 [20:15:55] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1 [20:15:55] [PASSED] touching side: 1x1+0+0 x 1x1+1+0 [20:15:55] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0 [20:15:55] [PASSED] inside another: 2x2+0+0 x 1x1+1+1 [20:15:55] [PASSED] far away: 1x1+0+0 x 1x1+3+6 [20:15:55] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10 [20:15:55] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10 [20:15:55] ============= [PASSED] drm_test_rect_intersect ============= [20:15:55] ================ drm_test_rect_calc_hscale ================ [20:15:55] [PASSED] normal use [20:15:55] [PASSED] out of max range [20:15:55] [PASSED] out of min range [20:15:55] [PASSED] zero dst [20:15:55] [PASSED] negative src [20:15:55] [PASSED] negative dst [20:15:55] ============ [PASSED] drm_test_rect_calc_hscale ============ [20:15:55] ================ drm_test_rect_calc_vscale ================ [20:15:55] [PASSED] normal use stty: 'standard input': Inappropriate ioctl for device [20:15:55] [PASSED] out of max range [20:15:55] [PASSED] out of min range [20:15:55] [PASSED] zero dst [20:15:55] [PASSED] negative src [20:15:55] [PASSED] negative dst [20:15:55] ============ [PASSED] drm_test_rect_calc_vscale ============ [20:15:55] ================== drm_test_rect_rotate =================== [20:15:55] [PASSED] reflect-x [20:15:55] [PASSED] reflect-y [20:15:55] [PASSED] rotate-0 [20:15:55] [PASSED] rotate-90 [20:15:55] [PASSED] rotate-180 [20:15:55] [PASSED] rotate-270 [20:15:55] ============== [PASSED] drm_test_rect_rotate =============== [20:15:55] ================ drm_test_rect_rotate_inv ================= [20:15:55] [PASSED] reflect-x [20:15:55] [PASSED] reflect-y [20:15:55] [PASSED] rotate-0 [20:15:55] [PASSED] rotate-90 [20:15:55] [PASSED] rotate-180 [20:15:55] [PASSED] rotate-270 [20:15:55] ============ [PASSED] drm_test_rect_rotate_inv ============= [20:15:55] ==================== [PASSED] drm_rect ===================== [20:15:55] ============ drm_sysfb_modeset_test (1 subtest) ============ [20:15:55] ============ drm_test_sysfb_build_fourcc_list ============= [20:15:55] [PASSED] no native formats [20:15:55] [PASSED] XRGB8888 as native format [20:15:55] [PASSED] remove duplicates [20:15:55] [PASSED] convert alpha formats [20:15:55] [PASSED] random formats [20:15:55] ======== [PASSED] drm_test_sysfb_build_fourcc_list ========= [20:15:55] ============= [PASSED] drm_sysfb_modeset_test ============== [20:15:55] ================== drm_fixp (2 subtests) =================== [20:15:55] [PASSED] drm_test_int2fixp [20:15:55] [PASSED] drm_test_sm2fixp [20:15:55] ==================== [PASSED] drm_fixp ===================== [20:15:55] ============================================================ [20:15:55] Testing complete. Ran 624 tests: passed: 624 [20:15:55] Elapsed time: 27.140s total, 1.562s configuring, 25.162s building, 0.363s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig [20:15:55] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig [20:15:57] 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 [20:16:06] Starting KUnit Kernel (1/1)... [20:16:06] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [20:16:07] ================= ttm_device (5 subtests) ================== [20:16:07] [PASSED] ttm_device_init_basic [20:16:07] [PASSED] ttm_device_init_multiple [20:16:07] [PASSED] ttm_device_fini_basic [20:16:07] [PASSED] ttm_device_init_no_vma_man [20:16:07] ================== ttm_device_init_pools ================== [20:16:07] [PASSED] No DMA allocations, no DMA32 required [20:16:07] [PASSED] DMA allocations, DMA32 required [20:16:07] [PASSED] No DMA allocations, DMA32 required [20:16:07] [PASSED] DMA allocations, no DMA32 required [20:16:07] ============== [PASSED] ttm_device_init_pools ============== [20:16:07] =================== [PASSED] ttm_device ==================== [20:16:07] ================== ttm_pool (8 subtests) =================== [20:16:07] ================== ttm_pool_alloc_basic =================== [20:16:07] [PASSED] One page [20:16:07] [PASSED] More than one page [20:16:07] [PASSED] Above the allocation limit [20:16:07] [PASSED] One page, with coherent DMA mappings enabled [20:16:07] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [20:16:07] ============== [PASSED] ttm_pool_alloc_basic =============== [20:16:07] ============== ttm_pool_alloc_basic_dma_addr ============== [20:16:07] [PASSED] One page [20:16:07] [PASSED] More than one page [20:16:07] [PASSED] Above the allocation limit [20:16:07] [PASSED] One page, with coherent DMA mappings enabled [20:16:07] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [20:16:07] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ========== [20:16:07] [PASSED] ttm_pool_alloc_order_caching_match [20:16:07] [PASSED] ttm_pool_alloc_caching_mismatch [20:16:07] [PASSED] ttm_pool_alloc_order_mismatch [20:16:07] [PASSED] ttm_pool_free_dma_alloc [20:16:07] [PASSED] ttm_pool_free_no_dma_alloc [20:16:07] [PASSED] ttm_pool_fini_basic [20:16:07] ==================== [PASSED] ttm_pool ===================== [20:16:07] ================ ttm_resource (8 subtests) ================= [20:16:07] ================= ttm_resource_init_basic ================= [20:16:07] [PASSED] Init resource in TTM_PL_SYSTEM [20:16:07] [PASSED] Init resource in TTM_PL_VRAM [20:16:07] [PASSED] Init resource in a private placement [20:16:07] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags [20:16:07] ============= [PASSED] ttm_resource_init_basic ============= [20:16:07] [PASSED] ttm_resource_init_pinned [20:16:07] [PASSED] ttm_resource_fini_basic [20:16:07] [PASSED] ttm_resource_manager_init_basic [20:16:07] [PASSED] ttm_resource_manager_usage_basic [20:16:07] [PASSED] ttm_resource_manager_set_used_basic [20:16:07] [PASSED] ttm_sys_man_alloc_basic [20:16:07] [PASSED] ttm_sys_man_free_basic [20:16:07] ================== [PASSED] ttm_resource =================== [20:16:07] =================== ttm_tt (15 subtests) =================== [20:16:07] ==================== ttm_tt_init_basic ==================== [20:16:07] [PASSED] Page-aligned size [20:16:07] [PASSED] Extra pages requested [20:16:07] ================ [PASSED] ttm_tt_init_basic ================ [20:16:07] [PASSED] ttm_tt_init_misaligned [20:16:07] [PASSED] ttm_tt_fini_basic [20:16:07] [PASSED] ttm_tt_fini_sg [20:16:07] [PASSED] ttm_tt_fini_shmem [20:16:07] [PASSED] ttm_tt_create_basic [20:16:07] [PASSED] ttm_tt_create_invalid_bo_type [20:16:07] [PASSED] ttm_tt_create_ttm_exists [20:16:07] [PASSED] ttm_tt_create_failed [20:16:07] [PASSED] ttm_tt_destroy_basic [20:16:07] [PASSED] ttm_tt_populate_null_ttm [20:16:07] [PASSED] ttm_tt_populate_populated_ttm [20:16:07] [PASSED] ttm_tt_unpopulate_basic [20:16:07] [PASSED] ttm_tt_unpopulate_empty_ttm [20:16:07] [PASSED] ttm_tt_swapin_basic [20:16:07] ===================== [PASSED] ttm_tt ====================== [20:16:07] =================== ttm_bo (14 subtests) =================== [20:16:07] =========== ttm_bo_reserve_optimistic_no_ticket =========== [20:16:07] [PASSED] Cannot be interrupted and sleeps [20:16:07] [PASSED] Cannot be interrupted, locks straight away [20:16:07] [PASSED] Can be interrupted, sleeps [20:16:07] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket ======= [20:16:07] [PASSED] ttm_bo_reserve_locked_no_sleep [20:16:07] [PASSED] ttm_bo_reserve_no_wait_ticket [20:16:07] [PASSED] ttm_bo_reserve_double_resv [20:16:07] [PASSED] ttm_bo_reserve_interrupted [20:16:07] [PASSED] ttm_bo_reserve_deadlock [20:16:07] [PASSED] ttm_bo_unreserve_basic [20:16:07] [PASSED] ttm_bo_unreserve_pinned [20:16:07] [PASSED] ttm_bo_unreserve_bulk [20:16:07] [PASSED] ttm_bo_fini_basic [20:16:07] [PASSED] ttm_bo_fini_shared_resv [20:16:07] [PASSED] ttm_bo_pin_basic [20:16:07] [PASSED] ttm_bo_pin_unpin_resource [20:16:07] [PASSED] ttm_bo_multiple_pin_one_unpin [20:16:07] ===================== [PASSED] ttm_bo ====================== [20:16:07] ============== ttm_bo_validate (21 subtests) =============== [20:16:07] ============== ttm_bo_init_reserved_sys_man =============== [20:16:07] [PASSED] Buffer object for userspace [20:16:07] [PASSED] Kernel buffer object [20:16:07] [PASSED] Shared buffer object [20:16:07] ========== [PASSED] ttm_bo_init_reserved_sys_man =========== [20:16:07] ============== ttm_bo_init_reserved_mock_man ============== [20:16:07] [PASSED] Buffer object for userspace [20:16:07] [PASSED] Kernel buffer object [20:16:07] [PASSED] Shared buffer object [20:16:07] ========== [PASSED] ttm_bo_init_reserved_mock_man ========== [20:16:07] [PASSED] ttm_bo_init_reserved_resv [20:16:07] ================== ttm_bo_validate_basic ================== [20:16:07] [PASSED] Buffer object for userspace [20:16:07] [PASSED] Kernel buffer object [20:16:07] [PASSED] Shared buffer object [20:16:07] ============== [PASSED] ttm_bo_validate_basic ============== [20:16:07] [PASSED] ttm_bo_validate_invalid_placement [20:16:07] ============= ttm_bo_validate_same_placement ============== [20:16:07] [PASSED] System manager [20:16:07] [PASSED] VRAM manager [20:16:07] ========= [PASSED] ttm_bo_validate_same_placement ========== [20:16:07] [PASSED] ttm_bo_validate_failed_alloc [20:16:07] [PASSED] ttm_bo_validate_pinned [20:16:07] [PASSED] ttm_bo_validate_busy_placement [20:16:07] ================ ttm_bo_validate_multihop ================= [20:16:07] [PASSED] Buffer object for userspace [20:16:07] [PASSED] Kernel buffer object [20:16:07] [PASSED] Shared buffer object [20:16:07] ============ [PASSED] ttm_bo_validate_multihop ============= [20:16:07] ========== ttm_bo_validate_no_placement_signaled ========== [20:16:07] [PASSED] Buffer object in system domain, no page vector [20:16:07] [PASSED] Buffer object in system domain with an existing page vector [20:16:07] ====== [PASSED] ttm_bo_validate_no_placement_signaled ====== [20:16:07] ======== ttm_bo_validate_no_placement_not_signaled ======== [20:16:07] [PASSED] Buffer object for userspace [20:16:07] [PASSED] Kernel buffer object [20:16:07] [PASSED] Shared buffer object [20:16:07] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ==== [20:16:07] [PASSED] ttm_bo_validate_move_fence_signaled [20:16:07] ========= ttm_bo_validate_move_fence_not_signaled ========= [20:16:07] [PASSED] Waits for GPU [20:16:07] [PASSED] Tries to lock straight away [20:16:07] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled ===== [20:16:07] [PASSED] ttm_bo_validate_happy_evict [20:16:07] [PASSED] ttm_bo_validate_all_pinned_evict [20:16:07] [PASSED] ttm_bo_validate_allowed_only_evict [20:16:07] [PASSED] ttm_bo_validate_deleted_evict [20:16:07] [PASSED] ttm_bo_validate_busy_domain_evict [20:16:07] [PASSED] ttm_bo_validate_evict_gutting [20:16:07] [PASSED] ttm_bo_validate_recrusive_evict stty: 'standard input': Inappropriate ioctl for device [20:16:07] ================= [PASSED] ttm_bo_validate ================= [20:16:07] ============================================================ [20:16:07] Testing complete. Ran 101 tests: passed: 101 [20:16:07] Elapsed time: 11.257s total, 1.661s configuring, 9.379s building, 0.187s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
Patchwork
CI✓ Xe.CI.BAT: success for Dynamic drm_pagemaps and Initial multi-device SVM (rev8)
In reply to Thomas Hellström== Series Details ==
== Series Details ==
Series: Dynamic drm_pagemaps and Initial multi-device SVM (rev8)
URL : https://patchwork.freedesktop.org/series/156525/
State : success
== Summary ==
CI Bug Log - changes from xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9_BAT -> xe-pw-156525v8_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (12 -> 12)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-156525v8_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@xe_waitfence@reltime:
- bat-dg2-oem2: [PASS][1] -> [FAIL][2] ([Intel XE#6520])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/bat-dg2-oem2/igt@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/bat-dg2-oem2/igt@[email protected]
[Intel XE#6520]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6520
Build changes
-------------
* Linux: xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9 -> xe-pw-156525v8
IGT_8674: f38f4d8e9c65aff45ac807e646d06e38bc3193a2 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9: f101d56dc32350daa45c130ff7a6d46512f614a9
xe-pw-156525v8: 156525v8
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/index.html
Patchwork
CI✓ Xe.CI.Full: success for Dynamic drm_pagemaps and Initial multi-device SVM (rev8)
In reply to Thomas Hellström== Series Details ==
== Series Details ==
Series: Dynamic drm_pagemaps and Initial multi-device SVM (rev8)
URL : https://patchwork.freedesktop.org/series/156525/
State : success
== Summary ==
CI Bug Log - changes from xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9_FULL -> xe-pw-156525v8_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-156525v8_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@core_hotunplug@hotunplug-rescan:
- shard-bmg: [PASS][1] -> [SKIP][2] ([Intel XE#6779])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-2/igt@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_big_fb@4-tiled-64bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][3] ([Intel XE#2327]) +1 other test skip
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@[email protected]
* igt@kms_big_fb@y-tiled-16bpp-rotate-180:
- shard-bmg: NOTRUN -> [SKIP][4] ([Intel XE#1124]) +5 other tests skip
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p:
- shard-bmg: NOTRUN -> [SKIP][5] ([Intel XE#2314] / [Intel XE#2894])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-10/igt@[email protected]
* igt@kms_bw@linear-tiling-1-displays-3840x2160p:
- shard-bmg: NOTRUN -> [SKIP][6] ([Intel XE#367]) +1 other test skip
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][7] ([Intel XE#2887]) +6 other tests skip
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-d-hdmi-a-3:
- shard-bmg: NOTRUN -> [SKIP][8] ([Intel XE#2652] / [Intel XE#787]) +8 other tests skip
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@kms_ccs@[email protected]
* igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][9] ([Intel XE#3432]) +1 other test skip
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_chamelium_color@ctm-0-25:
- shard-bmg: NOTRUN -> [SKIP][10] ([Intel XE#2325]) +1 other test skip
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-10/igt@[email protected]
* igt@kms_chamelium_edid@dp-edid-resolution-list:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#2252]) +7 other tests skip
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_content_protection@legacy:
- shard-bmg: NOTRUN -> [FAIL][12] ([Intel XE#1178]) +1 other test fail
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_cursor_crc@cursor-offscreen-128x42:
- shard-bmg: NOTRUN -> [SKIP][13] ([Intel XE#2320]) +2 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@kms_cursor_crc@cursor-onscreen-512x512:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#2321])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@[email protected]
* igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic:
- shard-bmg: [PASS][15] -> [SKIP][16] ([Intel XE#2291]) +1 other test skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-9/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html
* igt@kms_dirtyfb@psr-dirtyfb-ioctl:
- shard-bmg: NOTRUN -> [SKIP][17] ([Intel XE#1508])
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_dsc@dsc-basic:
- shard-bmg: NOTRUN -> [SKIP][18] ([Intel XE#2244])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@[email protected]
* igt@kms_feature_discovery@display-3x:
- shard-bmg: NOTRUN -> [SKIP][19] ([Intel XE#2373])
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-10/igt@[email protected]
* igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset:
- shard-bmg: [PASS][20] -> [SKIP][21] ([Intel XE#2316]) +4 other tests skip
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-10/igt@[email protected]
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@kms_flip@flip-vs-dpms-off-vs-modeset-interruptible@a-dp2:
- shard-bmg: [PASS][22] -> [ABORT][23] ([Intel XE#5545]) +1 other test abort
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-7/igt@kms_flip@[email protected]
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@kms_flip@[email protected]
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling:
- shard-bmg: NOTRUN -> [SKIP][24] ([Intel XE#2293] / [Intel XE#2380]) +3 other tests skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode:
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#2293]) +6 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff:
- shard-bmg: NOTRUN -> [SKIP][26] ([Intel XE#4141]) +10 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-cur-indfb-move:
- shard-bmg: NOTRUN -> [SKIP][27] ([Intel XE#2312]) +4 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][28] ([Intel XE#2311]) +19 other tests skip
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#2352])
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][30] ([Intel XE#2313]) +15 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@plane-fbc-rte:
- shard-bmg: NOTRUN -> [SKIP][31] ([Intel XE#2350])
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@kms_hdr@static-swap:
- shard-bmg: [PASS][32] -> [ABORT][33] ([Intel XE#6740]) +1 other test abort
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-4/igt@[email protected]
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-9/igt@[email protected]
* igt@kms_joiner@invalid-modeset-big-joiner:
- shard-bmg: NOTRUN -> [SKIP][34] ([Intel XE#6901])
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
- shard-bmg: NOTRUN -> [SKIP][35] ([Intel XE#2925])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-10/igt@[email protected]
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-b:
- shard-bmg: NOTRUN -> [SKIP][36] ([Intel XE#6886]) +7 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@kms_plane_scaling@[email protected]
* igt@kms_pm_backlight@bad-brightness:
- shard-bmg: NOTRUN -> [SKIP][37] ([Intel XE#870])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_pm_dc@dc6-psr:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#2392]) +1 other test skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-10/igt@[email protected]
* igt@kms_pm_rpm@dpms-mode-unset-lpsp:
- shard-bmg: NOTRUN -> [SKIP][39] ([Intel XE#1439] / [Intel XE#836])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@[email protected]
* igt@kms_pm_rpm@modeset-non-lpsp-stress:
- shard-bmg: [PASS][40] -> [SKIP][41] ([Intel XE#6693])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-sf:
- shard-bmg: NOTRUN -> [SKIP][42] ([Intel XE#1406] / [Intel XE#1489]) +6 other tests skip
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@kms_psr2_su@page_flip-nv12:
- shard-bmg: NOTRUN -> [SKIP][43] ([Intel XE#1406] / [Intel XE#2387])
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-10/igt@kms_psr2_su@page_flip-nv12.html
* igt@kms_psr@fbc-psr2-cursor-plane-move:
- shard-bmg: NOTRUN -> [SKIP][44] ([Intel XE#1406] / [Intel XE#2234] / [Intel XE#2850]) +10 other tests skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_psr@psr2-primary-render:
- shard-bmg: NOTRUN -> [SKIP][45] ([Intel XE#1406] / [Intel XE#2234])
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@[email protected]
* igt@kms_rotation_crc@multiplane-rotation:
- shard-lnl: [PASS][46] -> [FAIL][47] ([Intel XE#1874])
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-lnl-4/igt@[email protected]
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-lnl-4/igt@[email protected]
* igt@kms_rotation_crc@primary-rotation-90:
- shard-bmg: NOTRUN -> [SKIP][48] ([Intel XE#3414] / [Intel XE#3904]) +2 other tests skip
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-bmg: NOTRUN -> [SKIP][49] ([Intel XE#2330])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-10/igt@[email protected]
* igt@kms_scaling_modes@scaling-mode-full:
- shard-bmg: NOTRUN -> [SKIP][50] ([Intel XE#2413])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@kms_setmode@invalid-clone-exclusive-crtc:
- shard-bmg: NOTRUN -> [SKIP][51] ([Intel XE#1435])
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: NOTRUN -> [SKIP][52] ([Intel XE#2426])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@xe_eudebug@discovery-empty:
- shard-bmg: NOTRUN -> [SKIP][53] ([Intel XE#4837]) +4 other tests skip
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@xe_eudebug_online@basic-breakpoint:
- shard-bmg: NOTRUN -> [SKIP][54] ([Intel XE#4837] / [Intel XE#6665])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@[email protected]
* igt@xe_eudebug_online@pagefault-one-of-many:
- shard-bmg: NOTRUN -> [SKIP][55] ([Intel XE#6665])
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@xe_eudebug_sriov@deny-sriov:
- shard-bmg: NOTRUN -> [SKIP][56] ([Intel XE#5793])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@[email protected]
* igt@xe_evict@evict-beng-mixed-many-threads-small:
- shard-bmg: [PASS][57] -> [INCOMPLETE][58] ([Intel XE#6321])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-9/igt@[email protected]
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate:
- shard-bmg: NOTRUN -> [SKIP][59] ([Intel XE#2322]) +5 other tests skip
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate.html
* igt@xe_exec_multi_queue@max-queues-preempt-mode-basic-smem:
- shard-bmg: NOTRUN -> [SKIP][60] ([Intel XE#6874]) +20 other tests skip
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-10/igt@[email protected]
* igt@xe_exec_system_allocator@many-execqueues-mmap-free-huge:
- shard-bmg: NOTRUN -> [SKIP][61] ([Intel XE#4943]) +13 other tests skip
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-10/igt@[email protected]
* igt@xe_exec_system_allocator@many-stride-new-prefetch:
- shard-bmg: [PASS][62] -> [INCOMPLETE][63] ([Intel XE#6480])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-10/igt@[email protected]
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@xe_exec_system_allocator@once-large-new-busy-nomemset:
- shard-bmg: [PASS][64] -> [SKIP][65] ([Intel XE#6703]) +155 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@xe_exec_system_allocator@process-many-execqueues-mmap-remap:
- shard-bmg: [PASS][66] -> [ABORT][67] ([Intel XE#3970])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-4/igt@[email protected]
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@xe_live_ktest@xe_eudebug:
- shard-bmg: NOTRUN -> [SKIP][68] ([Intel XE#2833])
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@xe_live_ktest@xe_eudebug.html
* igt@xe_media_fill@media-fill:
- shard-bmg: NOTRUN -> [SKIP][69] ([Intel XE#2459] / [Intel XE#2596])
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-10/igt@[email protected]
* igt@xe_pm@s2idle-d3cold-basic-exec:
- shard-bmg: NOTRUN -> [SKIP][70] ([Intel XE#2284]) +1 other test skip
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@[email protected]
* igt@xe_pmu@engine-activity-accuracy-90:
- shard-lnl: [PASS][71] -> [FAIL][72] ([Intel XE#6251]) +1 other test fail
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-lnl-1/igt@[email protected]
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-lnl-1/igt@[email protected]
* igt@xe_pxp@pxp-stale-bo-bind-post-termination-irq:
- shard-bmg: NOTRUN -> [SKIP][73] ([Intel XE#4733]) +2 other tests skip
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@[email protected]
* igt@xe_query@multigpu-query-mem-usage:
- shard-bmg: NOTRUN -> [SKIP][74] ([Intel XE#944])
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-2/igt@[email protected]
#### Possible fixes ####
* igt@core_hotunplug@hotreplug-lateclose:
- shard-bmg: [SKIP][75] ([Intel XE#6779]) -> [PASS][76]
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@device_reset@unbind-reset-rebind:
- shard-bmg: [SKIP][77] ([Intel XE#6815]) -> [PASS][78]
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_async_flips@alternate-sync-async-flip-atomic:
- shard-bmg: [FAIL][79] ([Intel XE#3718] / [Intel XE#6078]) -> [PASS][80]
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-2/igt@[email protected]
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-9/igt@[email protected]
* igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-dp-2:
- shard-bmg: [FAIL][81] ([Intel XE#6078]) -> [PASS][82]
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-2/igt@kms_async_flips@[email protected]
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-9/igt@kms_async_flips@[email protected]
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
- shard-bmg: [INCOMPLETE][83] ([Intel XE#3862]) -> [PASS][84]
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-10/igt@[email protected]
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@kms_cursor_legacy@cursorb-vs-flipb-legacy:
- shard-bmg: [SKIP][85] ([Intel XE#2291]) -> [PASS][86]
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-4/igt@[email protected]
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-9/igt@[email protected]
* igt@kms_flip@2x-flip-vs-panning-vs-hang:
- shard-bmg: [SKIP][87] ([Intel XE#2316]) -> [PASS][88] +1 other test pass
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-4/igt@[email protected]
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-9/igt@[email protected]
* igt@kms_hdr@invalid-metadata-sizes:
- shard-bmg: [ABORT][89] ([Intel XE#6740]) -> [PASS][90] +3 other tests pass
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-9/igt@[email protected]
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
- shard-bmg: [SKIP][91] ([Intel XE#6693]) -> [PASS][92] +2 other tests pass
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@xe_exec_balancer@many-execqueues-cm-virtual-rebind:
- shard-bmg: [SKIP][93] ([Intel XE#6557] / [Intel XE#6703]) -> [PASS][94] +1 other test pass
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready:
- shard-bmg: [SKIP][95] ([Intel XE#6703]) -> [PASS][96] +444 other tests pass
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready.html
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready.html
* igt@xe_live_ktest@xe_bo:
- shard-bmg: [SKIP][97] ([Intel XE#2229]) -> [PASS][98] +1 other test pass
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@xe_live_ktest@xe_bo.html
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@xe_live_ktest@xe_bo.html
#### Warnings ####
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- shard-bmg: [SKIP][99] ([Intel XE#2233]) -> [SKIP][100] ([Intel XE#6703])
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_big_fb@y-tiled-32bpp-rotate-270:
- shard-bmg: [SKIP][101] ([Intel XE#1124]) -> [SKIP][102] ([Intel XE#6703]) +3 other tests skip
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip:
- shard-bmg: [SKIP][103] ([Intel XE#6703]) -> [SKIP][104] ([Intel XE#1124]) +8 other tests skip
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow:
- shard-bmg: [SKIP][105] ([Intel XE#6703]) -> [SKIP][106] ([Intel XE#607])
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@kms_bw@linear-tiling-1-displays-2160x1440p:
- shard-bmg: [SKIP][107] ([Intel XE#6703]) -> [SKIP][108] ([Intel XE#367]) +2 other tests skip
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_bw@linear-tiling-2-displays-2160x1440p:
- shard-bmg: [SKIP][109] ([Intel XE#367]) -> [SKIP][110] ([Intel XE#6703])
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs:
- shard-bmg: [SKIP][111] ([Intel XE#2887]) -> [SKIP][112] ([Intel XE#6703]) +4 other tests skip
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs:
- shard-bmg: [SKIP][113] ([Intel XE#6703]) -> [SKIP][114] ([Intel XE#3432]) +1 other test skip
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs:
- shard-bmg: [SKIP][115] ([Intel XE#6703]) -> [SKIP][116] ([Intel XE#2887]) +10 other tests skip
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@kms_cdclk@plane-scaling:
- shard-bmg: [SKIP][117] ([Intel XE#6703]) -> [SKIP][118] ([Intel XE#2724])
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_chamelium_color@ctm-blue-to-red:
- shard-bmg: [SKIP][119] ([Intel XE#2325]) -> [SKIP][120] ([Intel XE#6703])
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_chamelium_frames@hdmi-aspect-ratio:
- shard-bmg: [SKIP][121] ([Intel XE#2252]) -> [SKIP][122] ([Intel XE#6703]) +2 other tests skip
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_chamelium_hpd@dp-hpd-with-enabled-mode:
- shard-bmg: [SKIP][123] ([Intel XE#6703]) -> [SKIP][124] ([Intel XE#2252]) +6 other tests skip
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@kms_content_protection@dp-mst-type-0:
- shard-bmg: [SKIP][125] ([Intel XE#6703]) -> [SKIP][126] ([Intel XE#2390])
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_content_protection@dp-mst-type-1:
- shard-bmg: [SKIP][127] ([Intel XE#2390]) -> [SKIP][128] ([Intel XE#6703])
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_cursor_crc@cursor-onscreen-max-size:
- shard-bmg: [SKIP][129] ([Intel XE#6703]) -> [SKIP][130] ([Intel XE#2320]) +3 other tests skip
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_cursor_crc@cursor-rapid-movement-256x85:
- shard-bmg: [SKIP][131] ([Intel XE#6557] / [Intel XE#6703]) -> [SKIP][132] ([Intel XE#2320])
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_cursor_crc@cursor-rapid-movement-512x512:
- shard-bmg: [SKIP][133] ([Intel XE#6703]) -> [SKIP][134] ([Intel XE#2321])
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@kms_cursor_crc@cursor-sliding-256x85:
- shard-bmg: [SKIP][135] ([Intel XE#2320]) -> [SKIP][136] ([Intel XE#6703]) +1 other test skip
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
- shard-bmg: [SKIP][137] ([Intel XE#2286]) -> [SKIP][138] ([Intel XE#6703])
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
* igt@kms_dp_link_training@non-uhbr-mst:
- shard-bmg: [SKIP][139] ([Intel XE#6703]) -> [SKIP][140] ([Intel XE#4354])
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_dsc@dsc-with-formats:
- shard-bmg: [SKIP][141] ([Intel XE#6703]) -> [SKIP][142] ([Intel XE#2244])
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@kms_dsc@dsc-with-output-formats-with-bpc:
- shard-bmg: [SKIP][143] ([Intel XE#2244]) -> [SKIP][144] ([Intel XE#6703])
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_fbcon_fbt@psr-suspend:
- shard-bmg: [SKIP][145] ([Intel XE#6703]) -> [SKIP][146] ([Intel XE#776])
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_feature_discovery@dp-mst:
- shard-bmg: [SKIP][147] ([Intel XE#6703]) -> [SKIP][148] ([Intel XE#2375])
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@kms_feature_discovery@psr2:
- shard-bmg: [SKIP][149] ([Intel XE#6703]) -> [SKIP][150] ([Intel XE#2374])
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling:
- shard-bmg: [SKIP][151] ([Intel XE#6703]) -> [SKIP][152] ([Intel XE#2293] / [Intel XE#2380]) +2 other tests skip
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling.html
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling.html
* igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-render:
- shard-bmg: [SKIP][153] ([Intel XE#2311]) -> [SKIP][154] ([Intel XE#6703]) +6 other tests skip
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-render.html
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][155] ([Intel XE#2311]) -> [SKIP][156] ([Intel XE#2312]) +3 other tests skip
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-9/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-wc.html
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrs-rgb565-draw-render:
- shard-bmg: [SKIP][157] ([Intel XE#6703]) -> [SKIP][158] ([Intel XE#2311]) +20 other tests skip
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-blt:
- shard-bmg: [SKIP][159] ([Intel XE#6703]) -> [SKIP][160] ([Intel XE#4141]) +6 other tests skip
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-blt.html
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-mmap-wc:
- shard-bmg: [SKIP][161] ([Intel XE#4141]) -> [SKIP][162] ([Intel XE#6703]) +3 other tests skip
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-mmap-wc.html
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-blt:
- shard-bmg: [SKIP][163] ([Intel XE#2312]) -> [SKIP][164] ([Intel XE#4141])
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-4/igt@[email protected]
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-9/igt@[email protected]
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render:
- shard-bmg: [SKIP][165] ([Intel XE#4141]) -> [SKIP][166] ([Intel XE#2312]) +1 other test skip
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-9/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render.html
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-msflip-blt:
- shard-bmg: [SKIP][167] ([Intel XE#2312]) -> [SKIP][168] ([Intel XE#2311]) +2 other tests skip
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-msflip-blt.html
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-9/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][169] ([Intel XE#2313]) -> [SKIP][170] ([Intel XE#6703]) +6 other tests skip
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-mmap-wc.html
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-onoff:
- shard-bmg: [SKIP][171] ([Intel XE#2312]) -> [SKIP][172] ([Intel XE#2313]) +1 other test skip
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-4/igt@[email protected]
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-9/igt@[email protected]
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-pgflip-blt:
- shard-bmg: [SKIP][173] ([Intel XE#6703]) -> [SKIP][174] ([Intel XE#2313]) +22 other tests skip
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-shrfb-pgflip-blt:
- shard-bmg: [SKIP][175] ([Intel XE#2313]) -> [SKIP][176] ([Intel XE#2312]) +4 other tests skip
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-10/igt@[email protected]
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@kms_joiner@basic-ultra-joiner:
- shard-bmg: [SKIP][177] ([Intel XE#6703]) -> [SKIP][178] ([Intel XE#6911])
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@kms_panel_fitting@legacy:
- shard-bmg: [SKIP][179] ([Intel XE#6703]) -> [SKIP][180] ([Intel XE#2486])
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@kms_pipe_stress@stress-xrgb8888-ytiled:
- shard-bmg: [SKIP][181] ([Intel XE#6703]) -> [SKIP][182] ([Intel XE#4329])
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@kms_plane_lowres@tiling-y:
- shard-bmg: [SKIP][183] ([Intel XE#6703]) -> [SKIP][184] ([Intel XE#2393])
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_plane_multiple@2x-tiling-y:
- shard-bmg: [SKIP][185] ([Intel XE#5021]) -> [SKIP][186] ([Intel XE#4596])
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-10/igt@[email protected]
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-4/igt@[email protected]
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5:
- shard-bmg: [SKIP][187] ([Intel XE#6703]) -> [SKIP][188] ([Intel XE#6886]) +1 other test skip
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@kms_pm_backlight@brightness-with-dpms:
- shard-bmg: [SKIP][189] ([Intel XE#6703]) -> [SKIP][190] ([Intel XE#2938])
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf:
- shard-bmg: [SKIP][191] ([Intel XE#1406] / [Intel XE#1489]) -> [SKIP][192] ([Intel XE#1406] / [Intel XE#6703]) +1 other test skip
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf.html
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf:
- shard-bmg: [SKIP][193] ([Intel XE#1406] / [Intel XE#6703]) -> [SKIP][194] ([Intel XE#1406] / [Intel XE#1489]) +3 other tests skip
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@kms_psr2_su@page_flip-p010:
- shard-bmg: [SKIP][195] ([Intel XE#1406] / [Intel XE#2387]) -> [SKIP][196] ([Intel XE#1406] / [Intel XE#6703])
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@kms_psr2_su@page_flip-p010.html
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@kms_psr2_su@page_flip-p010.html
* igt@kms_psr@psr-dpms:
- shard-bmg: [SKIP][197] ([Intel XE#1406] / [Intel XE#2234] / [Intel XE#2850]) -> [SKIP][198] ([Intel XE#1406] / [Intel XE#6703]) +2 other tests skip
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_psr@psr2-no-drrs:
- shard-bmg: [SKIP][199] ([Intel XE#1406] / [Intel XE#6703]) -> [SKIP][200] ([Intel XE#1406] / [Intel XE#2234] / [Intel XE#2850]) +11 other tests skip
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
- shard-bmg: [SKIP][201] ([Intel XE#3414] / [Intel XE#3904]) -> [SKIP][202] ([Intel XE#6703])
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_sharpness_filter@invalid-filter-with-scaler:
- shard-bmg: [SKIP][203] ([Intel XE#6703]) -> [SKIP][204] ([Intel XE#6503]) +1 other test skip
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@kms_sharpness_filter@invalid-plane-with-filter:
- shard-bmg: [SKIP][205] ([Intel XE#6503]) -> [SKIP][206] ([Intel XE#6703])
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@kms_vrr@flip-suspend:
- shard-bmg: [SKIP][207] ([Intel XE#6703]) -> [SKIP][208] ([Intel XE#1499]) +1 other test skip
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@xe_compute@ccs-mode-compute-kernel:
- shard-bmg: [SKIP][209] ([Intel XE#6599]) -> [SKIP][210] ([Intel XE#6703])
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@xe_eudebug@basic-exec-queues-enable:
- shard-bmg: [SKIP][211] ([Intel XE#4837]) -> [SKIP][212] ([Intel XE#6703]) +1 other test skip
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@xe_eudebug@basic-vm-access-userptr:
- shard-bmg: [SKIP][213] ([Intel XE#6703]) -> [SKIP][214] ([Intel XE#4837]) +7 other tests skip
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@xe_eudebug_online@set-breakpoint-sigint-debugger:
- shard-bmg: [SKIP][215] ([Intel XE#6703]) -> [SKIP][216] ([Intel XE#4837] / [Intel XE#6665]) +3 other tests skip
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@xe_eudebug_online@stopped-thread:
- shard-bmg: [SKIP][217] ([Intel XE#4837] / [Intel XE#6665]) -> [SKIP][218] ([Intel XE#6703]) +1 other test skip
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@xe_exec_basic@multigpu-once-basic-defer-bind:
- shard-bmg: [SKIP][219] ([Intel XE#2322]) -> [SKIP][220] ([Intel XE#6703]) +2 other tests skip
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-rebind:
- shard-bmg: [SKIP][221] ([Intel XE#6703]) -> [SKIP][222] ([Intel XE#2322]) +5 other tests skip
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[222]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@xe_exec_multi_queue@two-queues-basic-smem:
- shard-bmg: [SKIP][223] ([Intel XE#6703]) -> [SKIP][224] ([Intel XE#6874]) +19 other tests skip
[223]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[224]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@xe_exec_multi_queue@two-queues-preempt-mode-userptr:
- shard-bmg: [SKIP][225] ([Intel XE#6874]) -> [SKIP][226] ([Intel XE#6703]) +9 other tests skip
[225]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[226]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@xe_exec_system_allocator@many-64k-mmap-huge:
- shard-bmg: [SKIP][227] ([Intel XE#6703]) -> [SKIP][228] ([Intel XE#5007])
[227]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[228]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@xe_exec_system_allocator@process-many-large-mmap-new-huge:
- shard-bmg: [SKIP][229] ([Intel XE#4943]) -> [SKIP][230] ([Intel XE#6703]) +1 other test skip
[229]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[230]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@xe_exec_system_allocator@threads-many-mmap-new-huge-nomemset:
- shard-bmg: [SKIP][231] ([Intel XE#6703]) -> [SKIP][232] ([Intel XE#4943]) +15 other tests skip
[231]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@xe_exec_system_allocator@threads-many-mmap-new-huge-nomemset.html
[232]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@xe_exec_system_allocator@threads-many-mmap-new-huge-nomemset.html
* igt@xe_fault_injection@exec-queue-create-fail-xe_pxp_exec_queue_add:
- shard-bmg: [SKIP][233] ([Intel XE#6703]) -> [SKIP][234] ([Intel XE#6281])
[233]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@xe_fault_injection@exec-queue-create-fail-xe_pxp_exec_queue_add.html
[234]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@xe_fault_injection@exec-queue-create-fail-xe_pxp_exec_queue_add.html
* igt@xe_mmap@vram-system:
- shard-bmg: [DMESG-WARN][235] -> [SKIP][236] ([Intel XE#6703])
[235]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-2/igt@[email protected]
[236]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@xe_pat@pat-index-xehpc:
- shard-bmg: [SKIP][237] ([Intel XE#6703]) -> [SKIP][238] ([Intel XE#1420])
[237]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[238]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@xe_pat@pat-index-xelp:
- shard-bmg: [SKIP][239] ([Intel XE#6703]) -> [SKIP][240] ([Intel XE#2245])
[239]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[240]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
* igt@xe_pm@d3cold-multiple-execs:
- shard-bmg: [SKIP][241] ([Intel XE#2284]) -> [SKIP][242] ([Intel XE#6703])
[241]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-1/igt@[email protected]
[242]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-5/igt@[email protected]
* igt@xe_pm@d3hot-i2c:
- shard-bmg: [SKIP][243] ([Intel XE#6703]) -> [SKIP][244] ([Intel XE#5742])
[243]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[244]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-8/igt@[email protected]
* igt@xe_pxp@pxp-termination-key-update-post-suspend:
- shard-bmg: [SKIP][245] ([Intel XE#6703]) -> [SKIP][246] ([Intel XE#4733]) +1 other test skip
[245]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[246]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-7/igt@[email protected]
* igt@xe_query@multigpu-query-invalid-cs-cycles:
- shard-bmg: [SKIP][247] ([Intel XE#6703]) -> [SKIP][248] ([Intel XE#944]) +1 other test skip
[247]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9/shard-bmg-5/igt@[email protected]
[248]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/shard-bmg-3/igt@[email protected]
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1420]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1420
[Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
[Intel XE#1508]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1508
[Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
[Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
[Intel XE#2233]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2233
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
[Intel XE#2245]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2245
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286
[Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
[Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
[Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
[Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
[Intel XE#2350]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2350
[Intel XE#2352]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2352
[Intel XE#2373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2373
[Intel XE#2374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2374
[Intel XE#2375]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2375
[Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
[Intel XE#2387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2387
[Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
[Intel XE#2392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2392
[Intel XE#2393]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2393
[Intel XE#2413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2413
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2459]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2459
[Intel XE#2486]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2486
[Intel XE#2596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2596
[Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
[Intel XE#2724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2724
[Intel XE#2833]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2833
[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#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
[Intel XE#2925]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2925
[Intel XE#2938]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2938
[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#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
[Intel XE#3862]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3862
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#3970]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3970
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4329]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4329
[Intel XE#4354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4354
[Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
[Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
[Intel XE#4837]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4837
[Intel XE#4943]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4943
[Intel XE#5007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5007
[Intel XE#5021]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5021
[Intel XE#5545]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5545
[Intel XE#5742]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5742
[Intel XE#5793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5793
[Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607
[Intel XE#6078]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6078
[Intel XE#6251]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6251
[Intel XE#6281]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6281
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#6480]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6480
[Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
[Intel XE#6557]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6557
[Intel XE#6599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6599
[Intel XE#6665]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6665
[Intel XE#6693]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6693
[Intel XE#6703]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6703
[Intel XE#6740]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6740
[Intel XE#6779]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6779
[Intel XE#6815]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6815
[Intel XE#6874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6874
[Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
[Intel XE#6901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6901
[Intel XE#6911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6911
[Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
Build changes
-------------
* Linux: xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9 -> xe-pw-156525v8
IGT_8674: f38f4d8e9c65aff45ac807e646d06e38bc3193a2 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-4295-f101d56dc32350daa45c130ff7a6d46512f614a9: f101d56dc32350daa45c130ff7a6d46512f614a9
xe-pw-156525v8: 156525v8
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-156525v8/index.html