Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path
@ 2026-09-08 13:49 Matthew Auld
  2026-09-08 13:49 ` [PATCH v4 1/8] drm/xe/mmio_gem: forbid VMA split Matthew Auld
                   ` (9 more replies)
  0 siblings, 10 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 13:49 UTC (permalink / raw)
  To: intel-xe

Picking up the series from Ilia:
https://lore.kernel.org/intel-xe/20260723161832.137153-1-ilia.levi@intel.com/

This series fixes several issues in xe_mmio_gem, introduced by
1ffcf8b8ae8a ("drm/xe: Support for mmap-ing mmio regions"):
split VMA handling, WB/UC aliasing of the dummy page, a rb-tree
leak on destroy, dummy page accumulation, and use-after-free / MMIO
access after destroy. It also converts the existing PCI barrier mmap
to build on xe_mmio_gem now that the infrastructure is in place.

v4:
- One extra patch for VM_EXEC and DONTCOPY.
- Tweak the commit message in "use write-back mapping for dummy page" wrt x86.
v3: (Matt Auld)
- New patch using the xe_mmio_gem infra for PCI barrier mmap
- New patch for rejecting VMA split
- Using dma_resv lock for synchronization
- SIGBUS instead of dummy page on access after destroy
- Some changes in patch splitting (e.g. the vm_pgoff handling now lives
  in the destroy-flow patch alongside the zap that needs it)
v2:
- New patch 1/5: fix dummy page WB/UC aliasing (Sashiko)
- Patch 2/5: no longer modifies xe_mmio_gem_vm_fault_dummy_page() (handled by 1/5)
- Patch 3/5: unchanged
- Patch 4/5: compute pfn inside scoped_guard
- Patch 5/5: adapt to xe_mmio_gem_vm_fault_dummy_page() signature change, fix "objecthas" typo

-- 
2.55.0


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH v4 1/8] drm/xe/mmio_gem: forbid VMA split
  2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
@ 2026-09-08 13:49 ` Matthew Auld
  2026-09-08 13:49 ` [PATCH v4 2/8] drm/xe/mmio_gem: use write-back mapping for dummy page Matthew Auld
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 13:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Ilia Levi

From: Ilia Levi <ilia.levi@intel.com>

The fault handler assumes it always operates on a VMA spanning the entire
GEM object. This does not hold when the VMA has been split, e.g. by a
partial munmap or mprotect. In that case the handler may map wrong
physical pages or cause SIGBUS.

Handle this by forbidding VMA split, as partial unmaps are not deemed
useful for MMIO GEMs.

Suggested-by: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Ilia Levi <ilia.levi@intel.com>
Fixes: 1ffcf8b8ae8a ("drm/xe: Support for mmap-ing mmio regions")
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
---
 drivers/gpu/drm/xe/xe_mmio_gem.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.c b/drivers/gpu/drm/xe/xe_mmio_gem.c
index 3741ae60f532..d54477b93b6e 100644
--- a/drivers/gpu/drm/xe/xe_mmio_gem.c
+++ b/drivers/gpu/drm/xe/xe_mmio_gem.c
@@ -39,10 +39,20 @@ struct xe_mmio_gem {
 	phys_addr_t phys_addr;
 };
 
+static int xe_mmio_gem_vm_may_split(struct vm_area_struct *area, unsigned long addr)
+{
+	/*
+	 * Forbid splitting. Together with VM_DONTEXPAND, this keeps the VMA
+	 * matching the GEM object exactly.
+	 */
+	return -EINVAL;
+}
+
 static const struct vm_operations_struct vm_ops = {
 	.open = drm_gem_vm_open,
 	.close = drm_gem_vm_close,
 	.fault = xe_mmio_gem_vm_fault,
+	.may_split = xe_mmio_gem_vm_may_split,
 };
 
 static const struct drm_gem_object_funcs xe_mmio_gem_funcs = {
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 2/8] drm/xe/mmio_gem: use write-back mapping for dummy page
  2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
  2026-09-08 13:49 ` [PATCH v4 1/8] drm/xe/mmio_gem: forbid VMA split Matthew Auld
@ 2026-09-08 13:49 ` Matthew Auld
  2026-09-08 13:49 ` [PATCH v4 3/8] drm/xe/mmio_gem: simplify fault handler loop Matthew Auld
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 13:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Ilia Levi, Sashiko

From: Ilia Levi <ilia.levi@intel.com>

Currently vmf_insert_pfn() maps the dummy page as UC, inheriting the
VMA's page protection which was set for the real MMIO region. This
conflicts with the direct map's WB mapping of the same page, creating a
cache type alias which is architecturally undefined on some platforms.

Use vmf_insert_pfn_prot() with a WB pgprot instead. Also simplify to
fault in the requested page instead of the whole VMA.

Fixes: 1ffcf8b8ae8a ("drm/xe: Support for mmap-ing mmio regions")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://sashiko.dev/#/patchset/20260525125801.975038-6-ilia.levi%40intel.com
Assisted-by: GitHub-Copilot:claude-opus-4.6
Signed-off-by: Ilia Levi <ilia.levi@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
---
 drivers/gpu/drm/xe/xe_mmio_gem.c | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.c b/drivers/gpu/drm/xe/xe_mmio_gem.c
index d54477b93b6e..96f3bf46fd75 100644
--- a/drivers/gpu/drm/xe/xe_mmio_gem.c
+++ b/drivers/gpu/drm/xe/xe_mmio_gem.c
@@ -172,14 +172,13 @@ static void xe_mmio_gem_release_dummy_page(struct drm_device *dev, void *res)
 	__free_page((struct page *)res);
 }
 
-static vm_fault_t xe_mmio_gem_vm_fault_dummy_page(struct vm_area_struct *vma)
+static vm_fault_t xe_mmio_gem_vm_fault_dummy_page(struct vm_fault *vmf)
 {
+	struct vm_area_struct *vma = vmf->vma;
 	struct drm_gem_object *base = vma->vm_private_data;
 	struct drm_device *dev = base->dev;
-	vm_fault_t ret = VM_FAULT_NOPAGE;
 	struct page *page;
 	unsigned long pfn;
-	unsigned long i;
 
 	page = alloc_page(GFP_KERNEL | __GFP_ZERO);
 	if (!page)
@@ -190,16 +189,8 @@ static vm_fault_t xe_mmio_gem_vm_fault_dummy_page(struct vm_area_struct *vma)
 
 	pfn = page_to_pfn(page);
 
-	/* Map the entire VMA to the same dummy page */
-	for (i = 0; i < base->size; i += PAGE_SIZE) {
-		unsigned long addr = vma->vm_start + i;
-
-		ret = vmf_insert_pfn(vma, addr, pfn);
-		if (ret & VM_FAULT_ERROR)
-			break;
-	}
-
-	return ret;
+	return vmf_insert_pfn_prot(vma, vmf->address, pfn,
+				   vm_get_page_prot(vma->vm_flags));
 }
 
 static vm_fault_t xe_mmio_gem_vm_fault(struct vm_fault *vmf)
@@ -219,7 +210,7 @@ static vm_fault_t xe_mmio_gem_vm_fault(struct vm_fault *vmf)
 		 * It is assumed the userspace will receive the notification via some
 		 * other channel (e.g. drm uevent).
 		 */
-		return xe_mmio_gem_vm_fault_dummy_page(vma);
+		return xe_mmio_gem_vm_fault_dummy_page(vmf);
 	}
 
 	for (i = 0; i < base->size; i += PAGE_SIZE) {
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 3/8] drm/xe/mmio_gem: simplify fault handler loop
  2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
  2026-09-08 13:49 ` [PATCH v4 1/8] drm/xe/mmio_gem: forbid VMA split Matthew Auld
  2026-09-08 13:49 ` [PATCH v4 2/8] drm/xe/mmio_gem: use write-back mapping for dummy page Matthew Auld
@ 2026-09-08 13:49 ` Matthew Auld
  2026-09-08 13:50 ` [PATCH v4 4/8] drm/xe/mmio_gem: Revoke drm_vma_node on xe_mmio_gem destroy Matthew Auld
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 13:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Ilia Levi

From: Ilia Levi <ilia.levi@intel.com>

Make the iteration over the addresses in the VMA more explicit.
No functional change, as the VMA matches the GEM object exactly.

Signed-off-by: Ilia Levi <ilia.levi@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
---
 drivers/gpu/drm/xe/xe_mmio_gem.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.c b/drivers/gpu/drm/xe/xe_mmio_gem.c
index 96f3bf46fd75..3b6d04efe81a 100644
--- a/drivers/gpu/drm/xe/xe_mmio_gem.c
+++ b/drivers/gpu/drm/xe/xe_mmio_gem.c
@@ -200,7 +200,7 @@ static vm_fault_t xe_mmio_gem_vm_fault(struct vm_fault *vmf)
 	struct xe_mmio_gem *obj = to_xe_mmio_gem(base);
 	struct drm_device *dev = base->dev;
 	vm_fault_t ret = VM_FAULT_NOPAGE;
-	unsigned long i;
+	unsigned long addr, pfn;
 	int idx;
 
 	if (!drm_dev_enter(dev, &idx)) {
@@ -213,13 +213,13 @@ static vm_fault_t xe_mmio_gem_vm_fault(struct vm_fault *vmf)
 		return xe_mmio_gem_vm_fault_dummy_page(vmf);
 	}
 
-	for (i = 0; i < base->size; i += PAGE_SIZE) {
-		unsigned long addr = vma->vm_start + i;
-		unsigned long phys_addr = obj->phys_addr + i;
-
-		ret = vmf_insert_pfn(vma, addr, PHYS_PFN(phys_addr));
+	pfn = PHYS_PFN(obj->phys_addr);
+	for (addr = vma->vm_start; addr < vma->vm_end; addr += PAGE_SIZE) {
+		ret = vmf_insert_pfn(vma, addr, pfn);
 		if (ret & VM_FAULT_ERROR)
 			break;
+
+		pfn++;
 	}
 
 	drm_dev_exit(idx);
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 4/8] drm/xe/mmio_gem: Revoke drm_vma_node on xe_mmio_gem destroy
  2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
                   ` (2 preceding siblings ...)
  2026-09-08 13:49 ` [PATCH v4 3/8] drm/xe/mmio_gem: simplify fault handler loop Matthew Auld
@ 2026-09-08 13:50 ` Matthew Auld
  2026-09-08 13:50 ` [PATCH v4 5/8] drm/xe/mmio_gem: cache the dummy page per object Matthew Auld
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 13:50 UTC (permalink / raw)
  To: intel-xe; +Cc: Shuicheng Lin, Ilia Levi

From: Shuicheng Lin <shuicheng.lin@intel.com>

xe_mmio_gem_create() calls drm_vma_node_allow() but nothing ever calls
drm_vma_node_revoke(). The drm_vma_offset_file rb-tree entry allocated
by drm_vma_node_allow() is not freed by drm_gem_object_release(), so
it is leaked on every create/destroy cycle.

Add a struct drm_file * parameter to xe_mmio_gem_destroy() and call
drm_vma_node_revoke() from there, mirroring the drm_vma_node_allow()
call in xe_mmio_gem_create().

Fixes: 1ffcf8b8ae8a ("drm/xe: Support for mmap-ing mmio regions")
Suggested-by: Ilia Levi <ilia.levi@intel.com>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
Reviewed-by: Ilia Levi <ilia.levi@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
---
 drivers/gpu/drm/xe/xe_mmio_gem.c | 4 +++-
 drivers/gpu/drm/xe/xe_mmio_gem.h | 2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.c b/drivers/gpu/drm/xe/xe_mmio_gem.c
index 3b6d04efe81a..3c42d8358c7d 100644
--- a/drivers/gpu/drm/xe/xe_mmio_gem.c
+++ b/drivers/gpu/drm/xe/xe_mmio_gem.c
@@ -138,14 +138,16 @@ static void xe_mmio_gem_free(struct drm_gem_object *base)
 /**
  * xe_mmio_gem_destroy - Destroy the GEM object that exposes an MMIO region
  * @gem: the GEM object to destroy
+ * @file: DRM file descriptor previously passed to xe_mmio_gem_create()
  *
  * This function releases resources associated with the GEM object created by
  * xe_mmio_gem_create().
  *
  * See: "Exposing MMIO regions to userspace"
  */
-void xe_mmio_gem_destroy(struct xe_mmio_gem *gem)
+void xe_mmio_gem_destroy(struct xe_mmio_gem *gem, struct drm_file *file)
 {
+	drm_vma_node_revoke(&gem->base.vma_node, file);
 	xe_mmio_gem_free(&gem->base);
 }
 
diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.h b/drivers/gpu/drm/xe/xe_mmio_gem.h
index 4b76d5586ebb..80d7795f07c8 100644
--- a/drivers/gpu/drm/xe/xe_mmio_gem.h
+++ b/drivers/gpu/drm/xe/xe_mmio_gem.h
@@ -15,6 +15,6 @@ struct xe_mmio_gem;
 struct xe_mmio_gem *xe_mmio_gem_create(struct xe_device *xe, struct drm_file *file,
 				       phys_addr_t phys_addr, size_t size);
 u64 xe_mmio_gem_mmap_offset(struct xe_mmio_gem *gem);
-void xe_mmio_gem_destroy(struct xe_mmio_gem *gem);
+void xe_mmio_gem_destroy(struct xe_mmio_gem *gem, struct drm_file *file);
 
 #endif /* _XE_MMIO_GEM_H_ */
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 5/8] drm/xe/mmio_gem: cache the dummy page per object
  2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
                   ` (3 preceding siblings ...)
  2026-09-08 13:50 ` [PATCH v4 4/8] drm/xe/mmio_gem: Revoke drm_vma_node on xe_mmio_gem destroy Matthew Auld
@ 2026-09-08 13:50 ` Matthew Auld
  2026-09-08 13:50 ` [PATCH v4 6/8] drm/xe/mmio_gem: fix destroy flow Matthew Auld
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 13:50 UTC (permalink / raw)
  To: intel-xe; +Cc: Ilia Levi

From: Ilia Levi <ilia.levi@intel.com>

Currently, when the fault handler provides a dummy page, it
allocates a new one on every invocation and ties its lifetime to
the drm_device via drmm_add_action_or_reset(). Concurrent faults
after hot-unplug therefore accumulate pages that persist until
device teardown.

Cache a single dummy page in the xe_mmio_gem object and use dma_resv
lock to protect its allocation. Free it with the object.

v2: use dma_resv lock to protect the allocation (Matt Auld)

Assisted-by: GitHub-Copilot:claude-opus-4.6
Signed-off-by: Ilia Levi <ilia.levi@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
---
 drivers/gpu/drm/xe/xe_mmio_gem.c | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.c b/drivers/gpu/drm/xe/xe_mmio_gem.c
index 3c42d8358c7d..970b1e2f4981 100644
--- a/drivers/gpu/drm/xe/xe_mmio_gem.c
+++ b/drivers/gpu/drm/xe/xe_mmio_gem.c
@@ -5,9 +5,9 @@
 
 #include "xe_mmio_gem.h"
 
+#include <linux/dma-resv.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_gem.h>
-#include <drm/drm_managed.h>
 
 #include "xe_device_types.h"
 
@@ -37,6 +37,7 @@ static vm_fault_t xe_mmio_gem_vm_fault(struct vm_fault *);
 struct xe_mmio_gem {
 	struct drm_gem_object base;
 	phys_addr_t phys_addr;
+	struct page *dummy_page; /* protected by the GEM's dma_resv */
 };
 
 static int xe_mmio_gem_vm_may_split(struct vm_area_struct *area, unsigned long addr)
@@ -131,6 +132,8 @@ static void xe_mmio_gem_free(struct drm_gem_object *base)
 {
 	struct xe_mmio_gem *obj = to_xe_mmio_gem(base);
 
+	if (obj->dummy_page)
+		__free_page(obj->dummy_page);
 	drm_gem_object_release(base);
 	kfree(obj);
 }
@@ -169,27 +172,29 @@ static int xe_mmio_gem_mmap(struct drm_gem_object *base, struct vm_area_struct *
 	return 0;
 }
 
-static void xe_mmio_gem_release_dummy_page(struct drm_device *dev, void *res)
+static int alloc_dummy_page_if_needed(struct drm_gem_object *base)
 {
-	__free_page((struct page *)res);
+	struct xe_mmio_gem *obj = to_xe_mmio_gem(base);
+
+	dma_resv_lock(base->resv, NULL);
+	if (!obj->dummy_page)
+		obj->dummy_page = alloc_page(GFP_KERNEL | __GFP_ZERO);
+	dma_resv_unlock(base->resv);
+
+	return obj->dummy_page ? 0 : -ENOMEM;
 }
 
 static vm_fault_t xe_mmio_gem_vm_fault_dummy_page(struct vm_fault *vmf)
 {
 	struct vm_area_struct *vma = vmf->vma;
 	struct drm_gem_object *base = vma->vm_private_data;
-	struct drm_device *dev = base->dev;
-	struct page *page;
+	struct xe_mmio_gem *obj = to_xe_mmio_gem(base);
 	unsigned long pfn;
 
-	page = alloc_page(GFP_KERNEL | __GFP_ZERO);
-	if (!page)
+	if (alloc_dummy_page_if_needed(base))
 		return VM_FAULT_OOM;
 
-	if (drmm_add_action_or_reset(dev, xe_mmio_gem_release_dummy_page, page))
-		return VM_FAULT_OOM;
-
-	pfn = page_to_pfn(page);
+	pfn = page_to_pfn(obj->dummy_page);
 
 	return vmf_insert_pfn_prot(vma, vmf->address, pfn,
 				   vm_get_page_prot(vma->vm_flags));
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 6/8] drm/xe/mmio_gem: fix destroy flow
  2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
                   ` (4 preceding siblings ...)
  2026-09-08 13:50 ` [PATCH v4 5/8] drm/xe/mmio_gem: cache the dummy page per object Matthew Auld
@ 2026-09-08 13:50 ` Matthew Auld
  2026-09-08 13:50 ` [PATCH v4 7/8] drm/xe/mmio_gem: reject VM_EXEC and drop VM_DONTCOPY Matthew Auld
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 13:50 UTC (permalink / raw)
  To: intel-xe; +Cc: Ilia Levi

From: Ilia Levi <ilia.levi@intel.com>

xe_mmio_gem_destroy() currently frees the GEM object directly, bypassing
reference counting.  Since existing VMAs hold a reference and the fault
handler accesses the object through vma->vm_private_data, this is
use-after-free.  Additionally, nothing prevents the fault handler from
installing PTEs to the real MMIO after destroy.

Fix this with proper synchronization and refcounting. Also, do not set
vm_pgoff to zero. Many DRM drivers do this because helpers like
dma_mmap_pages() interpret vm_pgoff as an intra-buffer page offset;
leaving the DRM fake offset there would break these helpers.
Those drivers can get away with zeroing it because they map eagerly -
all PTEs are established before mmap returns, so vm_pgoff is never
consulted again. Our driver does not use such helpers and the newly
introduced call to drm_vma_node_unmap() relies on vm_pgoff being untouched.

v2: (Matt Auld)
- use dma_resv lock to serialize fault handler with destroy
- SIGBUS on access after destroy

Fixes: 1ffcf8b8ae8a ("drm/xe: Support for mmap-ing mmio regions")
Assisted-by: GitHub-Copilot:claude-opus-4.6
Signed-off-by: Ilia Levi <ilia.levi@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
---
 drivers/gpu/drm/xe/xe_mmio_gem.c | 42 ++++++++++++++++++++++++++------
 1 file changed, 35 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.c b/drivers/gpu/drm/xe/xe_mmio_gem.c
index 970b1e2f4981..5ffe03d36190 100644
--- a/drivers/gpu/drm/xe/xe_mmio_gem.c
+++ b/drivers/gpu/drm/xe/xe_mmio_gem.c
@@ -38,6 +38,7 @@ struct xe_mmio_gem {
 	struct drm_gem_object base;
 	phys_addr_t phys_addr;
 	struct page *dummy_page; /* protected by the GEM's dma_resv */
+	bool destroyed; /* protected by the GEM's dma_resv */
 };
 
 static int xe_mmio_gem_vm_may_split(struct vm_area_struct *area, unsigned long addr)
@@ -150,8 +151,22 @@ static void xe_mmio_gem_free(struct drm_gem_object *base)
  */
 void xe_mmio_gem_destroy(struct xe_mmio_gem *gem, struct drm_file *file)
 {
-	drm_vma_node_revoke(&gem->base.vma_node, file);
-	xe_mmio_gem_free(&gem->base);
+	struct drm_gem_object *base = &gem->base;
+	struct drm_device *dev = base->dev;
+
+	drm_vma_node_revoke(&base->vma_node, file);
+
+	dma_resv_lock(base->resv, NULL);
+	gem->destroyed = true;
+	dma_resv_unlock(base->resv);
+	/*
+	 * Setting 'destroyed' under lock takes care of the subsequent faults.
+	 * Zap the existing PTEs to cut off access to the real MMIO through
+	 * currently mapped pages.
+	 */
+	drm_vma_node_unmap(&base->vma_node, dev->anon_inode->i_mapping);
+
+	drm_gem_object_put(base);
 }
 
 static int xe_mmio_gem_mmap(struct drm_gem_object *base, struct vm_area_struct *vma)
@@ -162,8 +177,6 @@ static int xe_mmio_gem_mmap(struct drm_gem_object *base, struct vm_area_struct *
 	if ((vma->vm_flags & VM_SHARED) == 0)
 		return -EINVAL;
 
-	/* Set vm_pgoff (used as a fake buffer offset by DRM) to 0 */
-	vma->vm_pgoff = 0;
 	vma->vm_page_prot = pgprot_noncached(vma_get_page_prot(vma));
 	vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP |
 		     VM_DONTCOPY | VM_NORESERVE);
@@ -176,10 +189,9 @@ static int alloc_dummy_page_if_needed(struct drm_gem_object *base)
 {
 	struct xe_mmio_gem *obj = to_xe_mmio_gem(base);
 
-	dma_resv_lock(base->resv, NULL);
+	dma_resv_assert_held(base->resv);
 	if (!obj->dummy_page)
 		obj->dummy_page = alloc_page(GFP_KERNEL | __GFP_ZERO);
-	dma_resv_unlock(base->resv);
 
 	return obj->dummy_page ? 0 : -ENOMEM;
 }
@@ -200,7 +212,7 @@ static vm_fault_t xe_mmio_gem_vm_fault_dummy_page(struct vm_fault *vmf)
 				   vm_get_page_prot(vma->vm_flags));
 }
 
-static vm_fault_t xe_mmio_gem_vm_fault(struct vm_fault *vmf)
+static vm_fault_t xe_mmio_gem_vm_fault_locked(struct vm_fault *vmf)
 {
 	struct vm_area_struct *vma = vmf->vma;
 	struct drm_gem_object *base = vma->vm_private_data;
@@ -210,6 +222,10 @@ static vm_fault_t xe_mmio_gem_vm_fault(struct vm_fault *vmf)
 	unsigned long addr, pfn;
 	int idx;
 
+	dma_resv_assert_held(base->resv);
+	if (obj->destroyed)
+		return VM_FAULT_SIGBUS;
+
 	if (!drm_dev_enter(dev, &idx)) {
 		/*
 		 * Provide a dummy page to avoid SIGBUS for events such as hot-unplug.
@@ -232,3 +248,15 @@ static vm_fault_t xe_mmio_gem_vm_fault(struct vm_fault *vmf)
 	drm_dev_exit(idx);
 	return ret;
 }
+
+static vm_fault_t xe_mmio_gem_vm_fault(struct vm_fault *vmf)
+{
+	struct vm_area_struct *vma = vmf->vma;
+	struct drm_gem_object *base = vma->vm_private_data;
+	vm_fault_t ret;
+
+	dma_resv_lock(base->resv, NULL);
+	ret = xe_mmio_gem_vm_fault_locked(vmf);
+	dma_resv_unlock(base->resv);
+	return ret;
+}
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 7/8] drm/xe/mmio_gem: reject VM_EXEC and drop VM_DONTCOPY
  2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
                   ` (5 preceding siblings ...)
  2026-09-08 13:50 ` [PATCH v4 6/8] drm/xe/mmio_gem: fix destroy flow Matthew Auld
@ 2026-09-08 13:50 ` Matthew Auld
  2026-09-08 14:57   ` Thomas Hellström
  2026-09-08 13:50 ` [PATCH v4 8/8] drm/xe: convert PCI barrier mmap to use xe_mmio_gem Matthew Auld
                   ` (2 subsequent siblings)
  9 siblings, 1 reply; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 13:50 UTC (permalink / raw)
  To: intel-xe; +Cc: Thomas Hellström, Tejas Upadhyay, Matthew Brost, Ilia Levi

Hardware MMIO registers should never be executable; reject VM_EXEC
at mmap time and clear VM_MAYEXEC to prevent later mprotect attempts.

Also drop VM_DONTCOPY so that child processes across fork() can
inherit the mapping and lazily fault in the PFNs, matching standard
DRM GEM semantics and making the existing drm_gem_vm_open() callback
functional.

This aligns with existing PCI_BARRIER, which will use this in the next
patch. We don't want any noticeable behaviour change there, since this
will be user visible. This will also be the first user.

Assisted-by: LLM
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Ilia Levi <ilia.levi@intel.com>
---
 drivers/gpu/drm/xe/xe_mmio_gem.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.c b/drivers/gpu/drm/xe/xe_mmio_gem.c
index 5ffe03d36190..3cdc9538957d 100644
--- a/drivers/gpu/drm/xe/xe_mmio_gem.c
+++ b/drivers/gpu/drm/xe/xe_mmio_gem.c
@@ -177,9 +177,12 @@ static int xe_mmio_gem_mmap(struct drm_gem_object *base, struct vm_area_struct *
 	if ((vma->vm_flags & VM_SHARED) == 0)
 		return -EINVAL;
 
+	if (vma->vm_flags & VM_EXEC)
+		return -EINVAL;
+
 	vma->vm_page_prot = pgprot_noncached(vma_get_page_prot(vma));
-	vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP |
-		     VM_DONTCOPY | VM_NORESERVE);
+	vm_flags_mod(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP |
+		     VM_NORESERVE, VM_MAYEXEC);
 
 	/* Defer actual mapping to the fault handler. */
 	return 0;
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v4 8/8] drm/xe: convert PCI barrier mmap to use xe_mmio_gem
  2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
                   ` (6 preceding siblings ...)
  2026-09-08 13:50 ` [PATCH v4 7/8] drm/xe/mmio_gem: reject VM_EXEC and drop VM_DONTCOPY Matthew Auld
@ 2026-09-08 13:50 ` Matthew Auld
  2026-09-08 14:09   ` sashiko-bot
  2026-09-08 15:07   ` Thomas Hellström
  2026-09-08 14:48 ` ✓ CI.KUnit: success for drm/xe/mmio_gem: fix fault handler and destroy path (rev4) Patchwork
  2026-09-08 15:25 ` ✓ Xe.CI.BAT: " Patchwork
  9 siblings, 2 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 13:50 UTC (permalink / raw)
  To: intel-xe; +Cc: Thomas Hellström, Tejas Upadhyay, Matthew Brost, Ilia Levi

Convert the PCI barrier mmap over to use xe_mmio_gem, which is a good
match for this functionality. This has the following advantages:

 1. Removes a bunch of code.
 2. Replaces the fragile hard coded fake offset design.
 3. Adds the first user for xe_mmio_gem, which is preferred over nuking
    it. There are also potentially other upcoming usecases wanting this
    type of functionality, so having standard component to do this would
    be good.

There shouldn't be any big functional change here. From userspace pov,
they still query the fake offset like before, just that now it is no
longer hard coded in the KMD.

Assisted-by: LLM
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Ilia Levi <ilia.levi@intel.com>
Reviewed-by: Ilia Levi <ilia.levi@intel.com>
---
 drivers/gpu/drm/xe/xe_bo.c           |  24 +++++--
 drivers/gpu/drm/xe/xe_bo.h           |   1 -
 drivers/gpu/drm/xe/xe_device.c       | 104 +++------------------------
 drivers/gpu/drm/xe/xe_device_types.h |  12 ++++
 4 files changed, 41 insertions(+), 100 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index b162753cebb7..8de1b9a94315 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -28,6 +28,7 @@
 #include "xe_ggtt.h"
 #include "xe_map.h"
 #include "xe_migrate.h"
+#include "xe_mmio_gem.h"
 #include "xe_pat.h"
 #include "xe_pm.h"
 #include "xe_preempt_fence.h"
@@ -3680,18 +3681,31 @@ int xe_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
 		return -EINVAL;
 
 	if (args->flags & DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER) {
+		struct xe_file *xef = file->driver_priv;
+
 		if (XE_IOCTL_DBG(xe, !IS_DGFX(xe)))
 			return -EINVAL;
 
 		if (XE_IOCTL_DBG(xe, args->handle))
 			return -EINVAL;
 
-		if (XE_IOCTL_DBG(xe, PAGE_SIZE > SZ_4K))
-			return -EINVAL;
+		guard(mutex)(&xef->mmio_gem.lock);
+		if (!xef->mmio_gem.pci_barrier) {
+			phys_addr_t phys_addr;
+			int err;
 
-		BUILD_BUG_ON(((XE_PCI_BARRIER_MMAP_OFFSET >> XE_PTE_SHIFT) +
-			      SZ_4K) >= DRM_FILE_PAGE_OFFSET_START);
-		args->offset = XE_PCI_BARRIER_MMAP_OFFSET;
+#define LAST_DB_PAGE_OFFSET 0x7ff000
+			phys_addr = pci_resource_start(to_pci_dev(dev->dev), 0) +
+				LAST_DB_PAGE_OFFSET;
+			xef->mmio_gem.pci_barrier = xe_mmio_gem_create(xe, file, phys_addr, SZ_4K);
+			if (IS_ERR(xef->mmio_gem.pci_barrier)) {
+				err = PTR_ERR(xef->mmio_gem.pci_barrier);
+				xef->mmio_gem.pci_barrier = NULL;
+				return err;
+			}
+		}
+
+		args->offset = xe_mmio_gem_mmap_offset(xef->mmio_gem.pci_barrier);
 		return 0;
 	}
 
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index eede678ad303..290ca624e2a7 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -87,7 +87,6 @@
 
 #define XE_BO_PROPS_INVALID	(-1)
 
-#define XE_PCI_BARRIER_MMAP_OFFSET	(0x50 << XE_PTE_SHIFT)
 
 /**
  * enum xe_madv_purgeable_state - Buffer object purgeable state enumeration
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 8583b2e9ecf4..515fae065178 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -50,6 +50,7 @@
 #include "xe_late_bind_fw.h"
 #include "xe_log.h"
 #include "xe_mmio.h"
+#include "xe_mmio_gem.h"
 #include "xe_module.h"
 #include "xe_nvm.h"
 #include "xe_oa.h"
@@ -111,6 +112,8 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
 	mutex_init(&xef->exec_queue.lock);
 	xa_init_flags(&xef->exec_queue.xa, XA_FLAGS_ALLOC1);
 
+	mutex_init(&xef->mmio_gem.lock);
+
 	file->driver_priv = xef;
 	kref_init(&xef->refcount);
 
@@ -133,6 +136,8 @@ static void xe_file_destroy(struct kref *ref)
 	xa_destroy(&xef->vm.xa);
 	mutex_destroy(&xef->vm.lock);
 
+	mutex_destroy(&xef->mmio_gem.lock);
+
 	xe_drm_client_put(xef->client);
 	kfree(xef->process_name);
 	kfree(xef);
@@ -189,6 +194,11 @@ static void xe_file_close(struct drm_device *dev, struct drm_file *file)
 	xa_for_each(&xef->vm.xa, idx, vm)
 		xe_vm_close_and_put(vm);
 
+	if (xef->mmio_gem.pci_barrier) {
+		xe_mmio_gem_destroy(xef->mmio_gem.pci_barrier, file);
+		xef->mmio_gem.pci_barrier = NULL;
+	}
+
 	xe_file_put(xef);
 }
 
@@ -258,95 +268,6 @@ static long xe_drm_compat_ioctl(struct file *file, unsigned int cmd, unsigned lo
 #define xe_drm_compat_ioctl NULL
 #endif
 
-static void barrier_open(struct vm_area_struct *vma)
-{
-	drm_dev_get(vma->vm_private_data);
-}
-
-static void barrier_close(struct vm_area_struct *vma)
-{
-	drm_dev_put(vma->vm_private_data);
-}
-
-static void barrier_release_dummy_page(struct drm_device *dev, void *res)
-{
-	struct page *dummy_page = (struct page *)res;
-
-	__free_page(dummy_page);
-}
-
-static vm_fault_t barrier_fault(struct vm_fault *vmf)
-{
-	struct drm_device *dev = vmf->vma->vm_private_data;
-	struct vm_area_struct *vma = vmf->vma;
-	vm_fault_t ret = VM_FAULT_NOPAGE;
-	pgprot_t prot;
-	int idx;
-
-	prot = vma_get_page_prot(vma);
-
-	if (drm_dev_enter(dev, &idx)) {
-		unsigned long pfn;
-
-#define LAST_DB_PAGE_OFFSET 0x7ff001
-		pfn = PHYS_PFN(pci_resource_start(to_pci_dev(dev->dev), 0) +
-				LAST_DB_PAGE_OFFSET);
-		ret = vmf_insert_pfn_prot(vma, vma->vm_start, pfn,
-					  pgprot_noncached(prot));
-		drm_dev_exit(idx);
-	} else {
-		struct page *page;
-
-		/* Allocate new dummy page to map all the VA range in this VMA to it*/
-		page = alloc_page(GFP_KERNEL | __GFP_ZERO);
-		if (!page)
-			return VM_FAULT_OOM;
-
-		/* Set the page to be freed using drmm release action */
-		if (drmm_add_action_or_reset(dev, barrier_release_dummy_page, page))
-			return VM_FAULT_OOM;
-
-		ret = vmf_insert_pfn_prot(vma, vma->vm_start, page_to_pfn(page),
-					  prot);
-	}
-
-	return ret;
-}
-
-static const struct vm_operations_struct vm_ops_barrier = {
-	.open = barrier_open,
-	.close = barrier_close,
-	.fault = barrier_fault,
-};
-
-static int xe_pci_barrier_mmap(struct file *filp,
-			       struct vm_area_struct *vma)
-{
-	struct drm_file *priv = filp->private_data;
-	struct drm_device *dev = priv->minor->dev;
-	struct xe_device *xe = to_xe_device(dev);
-
-	if (!IS_DGFX(xe))
-		return -EINVAL;
-
-	if (vma->vm_end - vma->vm_start > SZ_4K)
-		return -EINVAL;
-
-	if (vma_is_cow_mapping(vma))
-		return -EINVAL;
-
-	if (vma->vm_flags & (VM_READ | VM_EXEC))
-		return -EINVAL;
-
-	vm_flags_clear(vma, VM_MAYREAD | VM_MAYEXEC);
-	vm_flags_set(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP | VM_IO);
-	vma->vm_ops = &vm_ops_barrier;
-	vma->vm_private_data = dev;
-	drm_dev_get(vma->vm_private_data);
-
-	return 0;
-}
-
 static int xe_mmap(struct file *filp, struct vm_area_struct *vma)
 {
 	struct drm_file *priv = filp->private_data;
@@ -355,11 +276,6 @@ static int xe_mmap(struct file *filp, struct vm_area_struct *vma)
 	if (drm_dev_is_unplugged(dev))
 		return -ENODEV;
 
-	switch (vma->vm_pgoff) {
-	case XE_PCI_BARRIER_MMAP_OFFSET >> XE_PTE_SHIFT:
-		return xe_pci_barrier_mmap(filp, vma);
-	}
-
 	return drm_gem_mmap(filp, vma);
 }
 
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 180d450a6deb..0391a20646cf 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -40,6 +40,7 @@ struct intel_display;
 struct intel_dg_nvm_dev;
 struct xe_ggtt;
 struct xe_i2c;
+struct xe_mmio_gem;
 struct xe_pat_ops;
 struct xe_pxp;
 struct xe_ttm_stolen_mgr;
@@ -676,6 +677,17 @@ struct xe_file {
 
 	/** @refcount: ref count of this xe file */
 	struct kref refcount;
+
+	/** @mmio_gem: MMIO GEM objects for this xe file */
+	struct {
+		/**
+		 * @mmio_gem.lock: Protects allocation and attach of MMIO GEM
+		 * objects (singleton).
+		 */
+		struct mutex lock;
+		/** @mmio_gem.pci_barrier: MMIO GEM object for PCI barrier mmap. */
+		struct xe_mmio_gem *pci_barrier;
+	} mmio_gem;
 };
 
 #endif
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH v4 8/8] drm/xe: convert PCI barrier mmap to use xe_mmio_gem
  2026-09-08 13:50 ` [PATCH v4 8/8] drm/xe: convert PCI barrier mmap to use xe_mmio_gem Matthew Auld
@ 2026-09-08 14:09   ` sashiko-bot
  2026-09-08 14:21     ` Matthew Auld
  2026-09-08 15:07   ` Thomas Hellström
  1 sibling, 1 reply; 15+ messages in thread
From: sashiko-bot @ 2026-09-08 14:09 UTC (permalink / raw)
  To: Matthew Auld; +Cc: intel-xe

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The migration of the PCI barrier mmap to use `xe_mmio_gem` removed the `VM_READ` restriction, allowing userspace to map and read from the doorbell register.
--

commit 545a53278606e03a94bbfc5ae72975b8ad8c6cae
Author: Matthew Auld <matthew.auld@intel.com>

drm/xe: convert PCI barrier mmap to use xe_mmio_gem

This commit converts the PCI barrier mmap over to use xe_mmio_gem, simplifying
the codebase and replacing the hard coded fake offset design. It introduces the
first user of xe_mmio_gem for mapping the PCIe doorbell register.

> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
[ ... ]
> -static int xe_pci_barrier_mmap(struct file *filp,
> -			       struct vm_area_struct *vma)
> -{
[ ... ]
> -	if (vma->vm_flags & (VM_READ | VM_EXEC))
> -		return -EINVAL;
> -
> -	vm_flags_clear(vma, VM_MAYREAD | VM_MAYEXEC);

[Severity: High]
Does removing this VM_READ restriction allow userspace to map the PCIe
doorbell register with read permissions?

The original xe_pci_barrier_mmap implementation explicitly restricted mappings
to write-only by rejecting VM_READ and clearing VM_MAYREAD. By migrating to
the generic xe_mmio_gem_mmap implementation in xe_mmio_gem.c, this read
restriction is dropped, as the generic code only restricts VM_EXEC:

drivers/gpu/drm/xe/xe_mmio_gem.c:xe_mmio_gem_mmap() {
        if (vma->vm_flags & VM_EXEC)
                return -EINVAL;

        vma->vm_page_prot = pgprot_noncached(vma_get_page_prot(vma));
        vm_flags_mod(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP |
                     VM_NORESERVE, VM_MAYEXEC);
}

Reading from write-only PCIe doorbell registers can trigger an Unsupported
Request or PCIe completion timeout, resulting in a Machine Check Exception
and a full system hang. Because this mapping is accessible to unprivileged
userspace, could this introduce a denial of service vulnerability?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260908134955.1344429-10-matthew.auld@intel.com?part=8

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v4 8/8] drm/xe: convert PCI barrier mmap to use xe_mmio_gem
  2026-09-08 14:09   ` sashiko-bot
@ 2026-09-08 14:21     ` Matthew Auld
  0 siblings, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 14:21 UTC (permalink / raw)
  To: sashiko-reviews; +Cc: intel-xe

On 08/09/2026 15:09, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [High] The migration of the PCI barrier mmap to use `xe_mmio_gem` removed the `VM_READ` restriction, allowing userspace to map and read from the doorbell register.
> --
> 
> commit 545a53278606e03a94bbfc5ae72975b8ad8c6cae
> Author: Matthew Auld <matthew.auld@intel.com>
> 
> drm/xe: convert PCI barrier mmap to use xe_mmio_gem
> 
> This commit converts the PCI barrier mmap over to use xe_mmio_gem, simplifying
> the codebase and replacing the hard coded fake offset design. It introduces the
> first user of xe_mmio_gem for mapping the PCIe doorbell register.
> 
>> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
>> --- a/drivers/gpu/drm/xe/xe_device.c
>> +++ b/drivers/gpu/drm/xe/xe_device.c
> [ ... ]
>> -static int xe_pci_barrier_mmap(struct file *filp,
>> -			       struct vm_area_struct *vma)
>> -{
> [ ... ]
>> -	if (vma->vm_flags & (VM_READ | VM_EXEC))
>> -		return -EINVAL;
>> -
>> -	vm_flags_clear(vma, VM_MAYREAD | VM_MAYEXEC);
> 
> [Severity: High]
> Does removing this VM_READ restriction allow userspace to map the PCIe
> doorbell register with read permissions?
> 
> The original xe_pci_barrier_mmap implementation explicitly restricted mappings
> to write-only by rejecting VM_READ and clearing VM_MAYREAD. By migrating to
> the generic xe_mmio_gem_mmap implementation in xe_mmio_gem.c, this read
> restriction is dropped, as the generic code only restricts VM_EXEC:
> 
> drivers/gpu/drm/xe/xe_mmio_gem.c:xe_mmio_gem_mmap() {
>          if (vma->vm_flags & VM_EXEC)
>                  return -EINVAL;
> 
>          vma->vm_page_prot = pgprot_noncached(vma_get_page_prot(vma));
>          vm_flags_mod(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP |
>                       VM_NORESERVE, VM_MAYEXEC);
> }
> 
> Reading from write-only PCIe doorbell registers can trigger an Unsupported
> Request or PCIe completion timeout, resulting in a Machine Check Exception
> and a full system hang. Because this mapping is accessible to unprivileged
> userspace, could this introduce a denial of service vulnerability?

I think you could anyway do that with write + fault and then do a read 
to get past it. At least on x86 where there is no 
write-only/read-disable bit in the PTE. So no way to actually prevent 
it. Also, for upcoming usecase I want read support for mmio_gem, so 
figured just drop this so I don't have to special case it later.

> 


^ permalink raw reply	[flat|nested] 15+ messages in thread

* ✓ CI.KUnit: success for drm/xe/mmio_gem: fix fault handler and destroy path (rev4)
  2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
                   ` (7 preceding siblings ...)
  2026-09-08 13:50 ` [PATCH v4 8/8] drm/xe: convert PCI barrier mmap to use xe_mmio_gem Matthew Auld
@ 2026-09-08 14:48 ` Patchwork
  2026-09-08 15:25 ` ✓ Xe.CI.BAT: " Patchwork
  9 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-09-08 14:48 UTC (permalink / raw)
  To: Levi, Ilia; +Cc: intel-xe

== Series Details ==

Series: drm/xe/mmio_gem: fix fault handler and destroy path (rev4)
URL   : https://patchwork.freedesktop.org/series/167217/
State : success

== Summary ==

+ trap cleanup EXIT
+ kunitconfigs=('/kernel/drivers/gpu/tests/.kunitconfig' '/kernel/drivers/gpu/drm/xe/.kunitconfig' '/kernel/drivers/gpu/drm/tests/.kunitconfig' '/kernel/drivers/gpu/drm/ttm/tests/.kunitconfig' '/kernel/drivers/dma-buf/.kunitconfig')
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/tests/.kunitconfig
[14:46:29] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[14:46:33] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[14:46:53] Starting KUnit Kernel (1/1)...
[14:46:53] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[14:46:53] ============= refcount_interrupt (4 subtests) ==============
[14:46:53] [PASSED] test_single_irq_change
[14:46:53] [PASSED] test_nested_irq_change
[14:46:53] [PASSED] test_multiple_irq_change
[14:46:53] [PASSED] test_irq_save
[14:46:53] =============== [PASSED] refcount_interrupt ================
[14:46:53] ================= gpu_buddy (14 subtests) ==================
[14:46:53] [PASSED] gpu_test_buddy_alloc_limit
[14:46:53] [PASSED] gpu_test_buddy_alloc_optimistic
[14:46:53] [PASSED] gpu_test_buddy_alloc_pessimistic
[14:46:53] [PASSED] gpu_test_buddy_alloc_pathological
[14:46:53] [PASSED] gpu_test_buddy_alloc_contiguous
[14:46:53] [PASSED] gpu_test_buddy_alloc_clear
[14:46:53] [PASSED] gpu_test_buddy_alloc_range
[14:46:54] [PASSED] gpu_test_buddy_alloc_range_bias
[14:46:55] [PASSED] gpu_test_buddy_fragmentation_performance
[14:46:55] [PASSED] gpu_test_buddy_dirty_tracker_performance
[14:46:55] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[14:46:55] [PASSED] gpu_test_buddy_offset_aligned_allocation
[14:46:55] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[14:46:55] [PASSED] gpu_test_buddy_addr_to_block
[14:46:55] ==================== [PASSED] gpu_buddy ====================
[14:46:55] ============================================================
[14:46:55] Testing complete. Ran 18 tests: passed: 18
[14:46:55] Elapsed time: 26.317s total, 4.378s configuring, 19.972s building, 1.893s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/xe/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[14:46:55] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[14:46: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
[14:47:31] Starting KUnit Kernel (1/1)...
[14:47:31] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[14:47:31] ============= refcount_interrupt (4 subtests) ==============
[14:47:31] [PASSED] test_single_irq_change
[14:47:31] [PASSED] test_nested_irq_change
[14:47:31] [PASSED] test_multiple_irq_change
[14:47:31] [PASSED] test_irq_save
[14:47:31] =============== [PASSED] refcount_interrupt ================
[14:47:31] ================== guc_buf (11 subtests) ===================
[14:47:31] [PASSED] test_smallest
[14:47:31] [PASSED] test_largest
[14:47:31] [PASSED] test_granular
[14:47:31] [PASSED] test_unique
[14:47:31] [PASSED] test_overlap
[14:47:31] [PASSED] test_reusable
[14:47:31] [PASSED] test_too_big
[14:47:31] [PASSED] test_flush
[14:47:31] [PASSED] test_lookup
[14:47:31] [PASSED] test_data
[14:47:31] [PASSED] test_class
[14:47:31] ===================== [PASSED] guc_buf =====================
[14:47:31] =================== guc_dbm (7 subtests) ===================
[14:47:31] [PASSED] test_empty
[14:47:31] [PASSED] test_default
[14:47:31] ======================== test_size  ========================
[14:47:31] [PASSED] 4
[14:47:31] [PASSED] 8
[14:47:31] [PASSED] 32
[14:47:31] [PASSED] 256
[14:47:31] ==================== [PASSED] test_size ====================
[14:47:31] ======================= test_reuse  ========================
[14:47:31] [PASSED] 4
[14:47:31] [PASSED] 8
[14:47:31] [PASSED] 32
[14:47:31] [PASSED] 256
[14:47:31] =================== [PASSED] test_reuse ====================
[14:47:31] =================== test_range_overlap  ====================
[14:47:31] [PASSED] 4
[14:47:31] [PASSED] 8
[14:47:31] [PASSED] 32
[14:47:31] [PASSED] 256
[14:47:31] =============== [PASSED] test_range_overlap ================
[14:47:31] =================== test_range_compact  ====================
[14:47:31] [PASSED] 4
[14:47:31] [PASSED] 8
[14:47:31] [PASSED] 32
[14:47:31] [PASSED] 256
[14:47:31] =============== [PASSED] test_range_compact ================
[14:47:31] ==================== test_range_spare  =====================
[14:47:31] [PASSED] 4
[14:47:31] [PASSED] 8
[14:47:31] [PASSED] 32
[14:47:31] [PASSED] 256
[14:47:31] ================ [PASSED] test_range_spare =================
[14:47:31] ===================== [PASSED] guc_dbm =====================
[14:47:31] =================== guc_idm (6 subtests) ===================
[14:47:31] [PASSED] bad_init
[14:47:31] [PASSED] no_init
[14:47:31] [PASSED] init_fini
[14:47:31] [PASSED] check_used
[14:47:31] [PASSED] check_quota
[14:47:31] [PASSED] check_all
[14:47:31] ===================== [PASSED] guc_idm =====================
[14:47:31] =============== guc_klv_helpers (9 subtests) ===============
[14:47:31] [PASSED] test_count
[14:47:31] [PASSED] test_encode_u32
[14:47:31] [PASSED] test_encode_u64
[14:47:31] [PASSED] test_encode_string
[14:47:31] [PASSED] test_encode_object_raw
[14:47:31] [PASSED] test_encode_object_klv
[14:47:31] [PASSED] test_encode_object_nested
[14:47:31] [PASSED] test_encode_object_basic
[14:47:31] [PASSED] test_print
[14:47:31] ================= [PASSED] guc_klv_helpers =================
[14:47:31] =================== xe_log (4 subtests) ====================
[14:47:31] [PASSED] demo_cper
[14:47:31] [PASSED] demo_dmesg
[14:47:31] ======================= test_dmesg  ========================
[14:47:31] [PASSED] test_fatal
[14:47:31] [PASSED] test_fatal_tile
[14:47:31] [PASSED] test_fatal_gt
[14:47:31] [PASSED] test_fatal_comp
[14:47:31] [PASSED] test_fatal_comp_tile
[14:47:31] [PASSED] test_fatal_comp_gt
[14:47:31] [PASSED] test_fatal_all
[14:47:31] [PASSED] test_recoverable
[14:47:31] [PASSED] test_recoverable_tile
[14:47:31] [PASSED] test_recoverable_gt
[14:47:31] [PASSED] test_recoverable_comp
[14:47:31] [PASSED] test_recoverable_comp_tile
[14:47:31] [PASSED] test_recoverable_comp_gt
[14:47:31] [PASSED] test_recoverable_all
[14:47:31] [PASSED] test_info
[14:47:31] [PASSED] test_info_tile
[14:47:31] [PASSED] test_info_gt
[14:47:31] [PASSED] test_info_err
[14:47:31] [PASSED] test_info_comp
[14:47:31] [PASSED] test_info_comp_tile
[14:47:31] [PASSED] test_info_comp_gt
[14:47:31] [PASSED] test_info_all
[14:47:31] [PASSED] test_hw_fatal
[14:47:31] [PASSED] test_hw_recoverable
[14:47:31] [PASSED] test_hw_corrected
[14:47:31] [PASSED] test_hw_informational
[14:47:31] =================== [PASSED] test_dmesg ====================
[14:47:31] ====================== test_invalid  =======================
[14:47:31] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[14:47:31] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[14:47:31] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[14:47:31] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[14:47:31] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[14:47:31] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[14:47:31] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[14:47:31] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[14:47:31] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[14:47:31] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[14:47:31] ================== [SKIPPED] test_invalid ==================
[14:47:31] ===================== [PASSED] xe_log ======================
[14:47:31] ================== no_relay (3 subtests) ===================
[14:47:31] [PASSED] xe_drops_guc2pf_if_not_ready
[14:47:31] [PASSED] xe_drops_guc2vf_if_not_ready
[14:47:31] [PASSED] xe_rejects_send_if_not_ready
[14:47:31] ==================== [PASSED] no_relay =====================
[14:47:31] ================== pf_relay (14 subtests) ==================
[14:47:31] [PASSED] pf_rejects_guc2pf_too_short
[14:47:31] [PASSED] pf_rejects_guc2pf_too_long
[14:47:31] [PASSED] pf_rejects_guc2pf_no_payload
[14:47:31] [PASSED] pf_fails_no_payload
[14:47:31] [PASSED] pf_fails_bad_origin
[14:47:31] [PASSED] pf_fails_bad_type
[14:47:31] [PASSED] pf_txn_reports_error
[14:47:31] [PASSED] pf_txn_sends_pf2guc
[14:47:31] [PASSED] pf_sends_pf2guc
[14:47:31] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:47:31] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:47:31] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:47:31] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:47:31] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:47:31] ==================== [PASSED] pf_relay =====================
[14:47:31] ================== vf_relay (3 subtests) ===================
[14:47:31] [PASSED] vf_rejects_guc2vf_too_short
[14:47:31] [PASSED] vf_rejects_guc2vf_too_long
[14:47:31] [PASSED] vf_rejects_guc2vf_no_payload
[14:47:31] ==================== [PASSED] vf_relay =====================
[14:47:31] ================ pf_gt_config (9 subtests) =================
[14:47:31] [PASSED] fair_contexts_1vf
[14:47:31] [PASSED] fair_doorbells_1vf
[14:47:31] [PASSED] fair_ggtt_1vf
[14:47:31] ====================== fair_vram_1vf  ======================
[14:47:31] [PASSED] 3.50 GiB
[14:47:31] [PASSED] 11.5 GiB
[14:47:31] [PASSED] 15.5 GiB
[14:47:31] [PASSED] 31.5 GiB
[14:47:31] [PASSED] 63.5 GiB
[14:47:31] [PASSED] 1.91 GiB
[14:47:31] ================== [PASSED] fair_vram_1vf ==================
[14:47:31] ================ fair_vram_1vf_admin_only  =================
[14:47:31] [PASSED] 3.50 GiB
[14:47:31] [PASSED] 11.5 GiB
[14:47:31] [PASSED] 15.5 GiB
[14:47:31] [PASSED] 31.5 GiB
[14:47:31] [PASSED] 63.5 GiB
[14:47:31] [PASSED] 1.91 GiB
[14:47:31] ============ [PASSED] fair_vram_1vf_admin_only =============
[14:47:31] ====================== fair_contexts  ======================
[14:47:31] [PASSED] 1 VF
[14:47:31] [PASSED] 2 VFs
[14:47:31] [PASSED] 3 VFs
[14:47:31] [PASSED] 4 VFs
[14:47:31] [PASSED] 5 VFs
[14:47:31] [PASSED] 6 VFs
[14:47:31] [PASSED] 7 VFs
[14:47:31] [PASSED] 8 VFs
[14:47:31] [PASSED] 9 VFs
[14:47:31] [PASSED] 10 VFs
[14:47:31] [PASSED] 11 VFs
[14:47:31] [PASSED] 12 VFs
[14:47:31] [PASSED] 13 VFs
[14:47:31] [PASSED] 14 VFs
[14:47:31] [PASSED] 15 VFs
[14:47:31] [PASSED] 16 VFs
[14:47:31] [PASSED] 17 VFs
[14:47:31] [PASSED] 18 VFs
[14:47:31] [PASSED] 19 VFs
[14:47:31] [PASSED] 20 VFs
[14:47:31] [PASSED] 21 VFs
[14:47:31] [PASSED] 22 VFs
[14:47:31] [PASSED] 23 VFs
[14:47:31] [PASSED] 24 VFs
[14:47:31] [PASSED] 25 VFs
[14:47:31] [PASSED] 26 VFs
[14:47:31] [PASSED] 27 VFs
[14:47:31] [PASSED] 28 VFs
[14:47:31] [PASSED] 29 VFs
[14:47:31] [PASSED] 30 VFs
[14:47:31] [PASSED] 31 VFs
[14:47:31] [PASSED] 32 VFs
[14:47:31] [PASSED] 33 VFs
[14:47:31] [PASSED] 34 VFs
[14:47:31] [PASSED] 35 VFs
[14:47:31] [PASSED] 36 VFs
[14:47:31] [PASSED] 37 VFs
[14:47:31] [PASSED] 38 VFs
[14:47:31] [PASSED] 39 VFs
[14:47:31] [PASSED] 40 VFs
[14:47:31] [PASSED] 41 VFs
[14:47:31] [PASSED] 42 VFs
[14:47:31] [PASSED] 43 VFs
[14:47:31] [PASSED] 44 VFs
[14:47:31] [PASSED] 45 VFs
[14:47:31] [PASSED] 46 VFs
[14:47:31] [PASSED] 47 VFs
[14:47:31] [PASSED] 48 VFs
[14:47:31] [PASSED] 49 VFs
[14:47:31] [PASSED] 50 VFs
[14:47:31] [PASSED] 51 VFs
[14:47:31] [PASSED] 52 VFs
[14:47:31] [PASSED] 53 VFs
[14:47:31] [PASSED] 54 VFs
[14:47:31] [PASSED] 55 VFs
[14:47:31] [PASSED] 56 VFs
[14:47:31] [PASSED] 57 VFs
[14:47:31] [PASSED] 58 VFs
[14:47:31] [PASSED] 59 VFs
[14:47:31] [PASSED] 60 VFs
[14:47:31] [PASSED] 61 VFs
[14:47:31] [PASSED] 62 VFs
[14:47:31] [PASSED] 63 VFs
[14:47:31] ================== [PASSED] fair_contexts ==================
[14:47:31] ===================== fair_doorbells  ======================
[14:47:31] [PASSED] 1 VF
[14:47:31] [PASSED] 2 VFs
[14:47:31] [PASSED] 3 VFs
[14:47:31] [PASSED] 4 VFs
[14:47:31] [PASSED] 5 VFs
[14:47:31] [PASSED] 6 VFs
[14:47:31] [PASSED] 7 VFs
[14:47:31] [PASSED] 8 VFs
[14:47:31] [PASSED] 9 VFs
[14:47:31] [PASSED] 10 VFs
[14:47:31] [PASSED] 11 VFs
[14:47:31] [PASSED] 12 VFs
[14:47:31] [PASSED] 13 VFs
[14:47:31] [PASSED] 14 VFs
[14:47:31] [PASSED] 15 VFs
[14:47:31] [PASSED] 16 VFs
[14:47:31] [PASSED] 17 VFs
[14:47:31] [PASSED] 18 VFs
[14:47:31] [PASSED] 19 VFs
[14:47:31] [PASSED] 20 VFs
[14:47:31] [PASSED] 21 VFs
[14:47:31] [PASSED] 22 VFs
[14:47:31] [PASSED] 23 VFs
[14:47:31] [PASSED] 24 VFs
[14:47:31] [PASSED] 25 VFs
[14:47:31] [PASSED] 26 VFs
[14:47:31] [PASSED] 27 VFs
[14:47:31] [PASSED] 28 VFs
[14:47:31] [PASSED] 29 VFs
[14:47:31] [PASSED] 30 VFs
[14:47:31] [PASSED] 31 VFs
[14:47:31] [PASSED] 32 VFs
[14:47:31] [PASSED] 33 VFs
[14:47:31] [PASSED] 34 VFs
[14:47:31] [PASSED] 35 VFs
[14:47:31] [PASSED] 36 VFs
[14:47:31] [PASSED] 37 VFs
[14:47:31] [PASSED] 38 VFs
[14:47:31] [PASSED] 39 VFs
[14:47:31] [PASSED] 40 VFs
[14:47:31] [PASSED] 41 VFs
[14:47:31] [PASSED] 42 VFs
[14:47:31] [PASSED] 43 VFs
[14:47:31] [PASSED] 44 VFs
[14:47:31] [PASSED] 45 VFs
[14:47:31] [PASSED] 46 VFs
[14:47:31] [PASSED] 47 VFs
[14:47:31] [PASSED] 48 VFs
[14:47:31] [PASSED] 49 VFs
[14:47:31] [PASSED] 50 VFs
[14:47:31] [PASSED] 51 VFs
[14:47:31] [PASSED] 52 VFs
[14:47:31] [PASSED] 53 VFs
[14:47:31] [PASSED] 54 VFs
[14:47:31] [PASSED] 55 VFs
[14:47:31] [PASSED] 56 VFs
[14:47:31] [PASSED] 57 VFs
[14:47:31] [PASSED] 58 VFs
[14:47:31] [PASSED] 59 VFs
[14:47:31] [PASSED] 60 VFs
[14:47:31] [PASSED] 61 VFs
[14:47:31] [PASSED] 62 VFs
[14:47:31] [PASSED] 63 VFs
[14:47:31] ================= [PASSED] fair_doorbells ==================
[14:47:31] ======================== fair_ggtt  ========================
[14:47:31] [PASSED] 1 VF
[14:47:31] [PASSED] 2 VFs
[14:47:31] [PASSED] 3 VFs
[14:47:31] [PASSED] 4 VFs
[14:47:31] [PASSED] 5 VFs
[14:47:31] [PASSED] 6 VFs
[14:47:31] [PASSED] 7 VFs
[14:47:31] [PASSED] 8 VFs
[14:47:31] [PASSED] 9 VFs
[14:47:31] [PASSED] 10 VFs
[14:47:31] [PASSED] 11 VFs
[14:47:31] [PASSED] 12 VFs
[14:47:31] [PASSED] 13 VFs
[14:47:31] [PASSED] 14 VFs
[14:47:31] [PASSED] 15 VFs
[14:47:31] [PASSED] 16 VFs
[14:47:31] [PASSED] 17 VFs
[14:47:31] [PASSED] 18 VFs
[14:47:31] [PASSED] 19 VFs
[14:47:31] [PASSED] 20 VFs
[14:47:31] [PASSED] 21 VFs
[14:47:31] [PASSED] 22 VFs
[14:47:31] [PASSED] 23 VFs
[14:47:31] [PASSED] 24 VFs
[14:47:31] [PASSED] 25 VFs
[14:47:31] [PASSED] 26 VFs
[14:47:31] [PASSED] 27 VFs
[14:47:31] [PASSED] 28 VFs
[14:47:31] [PASSED] 29 VFs
[14:47:31] [PASSED] 30 VFs
[14:47:31] [PASSED] 31 VFs
[14:47:31] [PASSED] 32 VFs
[14:47:31] [PASSED] 33 VFs
[14:47:31] [PASSED] 34 VFs
[14:47:31] [PASSED] 35 VFs
[14:47:31] [PASSED] 36 VFs
[14:47:31] [PASSED] 37 VFs
[14:47:31] [PASSED] 38 VFs
[14:47:31] [PASSED] 39 VFs
[14:47:31] [PASSED] 40 VFs
[14:47:31] [PASSED] 41 VFs
[14:47:31] [PASSED] 42 VFs
[14:47:31] [PASSED] 43 VFs
[14:47:31] [PASSED] 44 VFs
[14:47:31] [PASSED] 45 VFs
[14:47:31] [PASSED] 46 VFs
[14:47:31] [PASSED] 47 VFs
[14:47:31] [PASSED] 48 VFs
[14:47:31] [PASSED] 49 VFs
[14:47:31] [PASSED] 50 VFs
[14:47:31] [PASSED] 51 VFs
[14:47:31] [PASSED] 52 VFs
[14:47:31] [PASSED] 53 VFs
[14:47:31] [PASSED] 54 VFs
[14:47:31] [PASSED] 55 VFs
[14:47:31] [PASSED] 56 VFs
[14:47:31] [PASSED] 57 VFs
[14:47:31] [PASSED] 58 VFs
[14:47:31] [PASSED] 59 VFs
[14:47:31] [PASSED] 60 VFs
[14:47:31] [PASSED] 61 VFs
[14:47:31] [PASSED] 62 VFs
[14:47:31] [PASSED] 63 VFs
[14:47:31] ==================== [PASSED] fair_ggtt ====================
[14:47:31] ======================== fair_vram  ========================
[14:47:31] [PASSED] 1 VF
[14:47:31] [PASSED] 2 VFs
[14:47:31] [PASSED] 3 VFs
[14:47:31] [PASSED] 4 VFs
[14:47:31] [PASSED] 5 VFs
[14:47:31] [PASSED] 6 VFs
[14:47:31] [PASSED] 7 VFs
[14:47:31] [PASSED] 8 VFs
[14:47:31] [PASSED] 9 VFs
[14:47:31] [PASSED] 10 VFs
[14:47:31] [PASSED] 11 VFs
[14:47:31] [PASSED] 12 VFs
[14:47:31] [PASSED] 13 VFs
[14:47:31] [PASSED] 14 VFs
[14:47:31] [PASSED] 15 VFs
[14:47:31] [PASSED] 16 VFs
[14:47:31] [PASSED] 17 VFs
[14:47:31] [PASSED] 18 VFs
[14:47:31] [PASSED] 19 VFs
[14:47:31] [PASSED] 20 VFs
[14:47:31] [PASSED] 21 VFs
[14:47:31] [PASSED] 22 VFs
[14:47:31] [PASSED] 23 VFs
[14:47:31] [PASSED] 24 VFs
[14:47:31] [PASSED] 25 VFs
[14:47:31] [PASSED] 26 VFs
[14:47:31] [PASSED] 27 VFs
[14:47:31] [PASSED] 28 VFs
[14:47:31] [PASSED] 29 VFs
[14:47:31] [PASSED] 30 VFs
[14:47:31] [PASSED] 31 VFs
[14:47:31] [PASSED] 32 VFs
[14:47:31] [PASSED] 33 VFs
[14:47:31] [PASSED] 34 VFs
[14:47:31] [PASSED] 35 VFs
[14:47:31] [PASSED] 36 VFs
[14:47:31] [PASSED] 37 VFs
[14:47:31] [PASSED] 38 VFs
[14:47:31] [PASSED] 39 VFs
[14:47:31] [PASSED] 40 VFs
[14:47:31] [PASSED] 41 VFs
[14:47:31] [PASSED] 42 VFs
[14:47:31] [PASSED] 43 VFs
[14:47:31] [PASSED] 44 VFs
[14:47:31] [PASSED] 45 VFs
[14:47:31] [PASSED] 46 VFs
[14:47:31] [PASSED] 47 VFs
[14:47:31] [PASSED] 48 VFs
[14:47:31] [PASSED] 49 VFs
[14:47:31] [PASSED] 50 VFs
[14:47:31] [PASSED] 51 VFs
[14:47:31] [PASSED] 52 VFs
[14:47:31] [PASSED] 53 VFs
[14:47:31] [PASSED] 54 VFs
[14:47:31] [PASSED] 55 VFs
[14:47:31] [PASSED] 56 VFs
[14:47:31] [PASSED] 57 VFs
[14:47:31] [PASSED] 58 VFs
[14:47:31] [PASSED] 59 VFs
[14:47:31] [PASSED] 60 VFs
[14:47:31] [PASSED] 61 VFs
[14:47:31] [PASSED] 62 VFs
[14:47:31] [PASSED] 63 VFs
[14:47:31] ==================== [PASSED] fair_vram ====================
[14:47:31] ================== [PASSED] pf_gt_config ===================
[14:47:31] ===================== lmtt (1 subtest) =====================
[14:47:31] ======================== test_ops  =========================
[14:47:31] [PASSED] 2-level
[14:47:31] [PASSED] multi-level
[14:47:31] ==================== [PASSED] test_ops =====================
[14:47:31] ====================== [PASSED] lmtt =======================
[14:47:31] ================= sriov_packet (1 subtest) =================
[14:47:31] [PASSED] test_descriptor_init
[14:47:31] ================== [PASSED] sriov_packet ===================
[14:47:31] ================= pf_service (11 subtests) =================
[14:47:31] [PASSED] pf_negotiate_any
[14:47:31] [PASSED] pf_negotiate_base_match
[14:47:31] [PASSED] pf_negotiate_base_newer
[14:47:31] [PASSED] pf_negotiate_base_next
[14:47:31] [SKIPPED] pf_negotiate_base_older (no older minor)
[14:47:31] [PASSED] pf_negotiate_base_prev
[14:47:31] [PASSED] pf_negotiate_latest_match
[14:47:31] [PASSED] pf_negotiate_latest_newer
[14:47:31] [PASSED] pf_negotiate_latest_next
[14:47:31] [SKIPPED] pf_negotiate_latest_older (no older minor)
[14:47:31] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[14:47:31] =================== [PASSED] pf_service ====================
[14:47:31] ================= xe_guc_g2g (2 subtests) ==================
[14:47:31] ============== xe_live_guc_g2g_kunit_default  ==============
[14:47:31] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[14:47:31] ============== xe_live_guc_g2g_kunit_allmem  ===============
[14:47:31] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[14:47:31] =================== [SKIPPED] xe_guc_g2g ===================
[14:47:31] =================== xe_mocs (2 subtests) ===================
[14:47:31] ================ xe_live_mocs_kernel_kunit  ================
[14:47:31] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[14:47:31] ================ xe_live_mocs_reset_kunit  =================
[14:47:31] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[14:47:31] ==================== [SKIPPED] xe_mocs =====================
[14:47:31] ================= xe_migrate (2 subtests) ==================
[14:47:31] ================= xe_migrate_sanity_kunit  =================
[14:47:31] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[14:47:31] ================== xe_validate_ccs_kunit  ==================
[14:47:31] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[14:47:31] =================== [SKIPPED] xe_migrate ===================
[14:47:31] ================== xe_dma_buf (1 subtest) ==================
[14:47:31] ==================== xe_dma_buf_kunit  =====================
[14:47:31] ================ [SKIPPED] xe_dma_buf_kunit ================
[14:47:31] =================== [SKIPPED] xe_dma_buf ===================
[14:47:31] ================= xe_bo_shrink (1 subtest) =================
[14:47:31] =================== xe_bo_shrink_kunit  ====================
[14:47:31] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[14:47:31] ================== [SKIPPED] xe_bo_shrink ==================
[14:47:31] ==================== xe_bo (2 subtests) ====================
[14:47:31] ================== xe_ccs_migrate_kunit  ===================
[14:47:31] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[14:47:31] ==================== xe_bo_evict_kunit  ====================
[14:47:31] =============== [SKIPPED] xe_bo_evict_kunit ================
[14:47:31] ===================== [SKIPPED] xe_bo ======================
[14:47:31] =================== xe_any (9 subtests) ====================
[14:47:31] [PASSED] test_to_xe
[14:47:32] [PASSED] test_to_dev
[14:47:32] [PASSED] test_to_pdev
[14:47:32] [PASSED] test_to_drm
[14:47:32] [PASSED] test_if_pdev
[14:47:32] [PASSED] test_if_xe
[14:47:32] [PASSED] test_if_tile
[14:47:32] [PASSED] test_if_gt
[14:47:32] [PASSED] test_to_id
[14:47:32] ===================== [PASSED] xe_any ======================
[14:47:32] ==================== args (13 subtests) ====================
[14:47:32] [PASSED] count_args_test
[14:47:32] [PASSED] call_args_example
[14:47:32] [PASSED] call_args_test
[14:47:32] [PASSED] drop_first_arg_example
[14:47:32] [PASSED] drop_first_arg_test
[14:47:32] [PASSED] first_arg_example
[14:47:32] [PASSED] first_arg_test
[14:47:32] [PASSED] last_arg_example
[14:47:32] [PASSED] last_arg_test
[14:47:32] [PASSED] pick_arg_example
[14:47:32] [PASSED] if_args_example
[14:47:32] [PASSED] if_args_test
[14:47:32] [PASSED] sep_comma_example
[14:47:32] ====================== [PASSED] args =======================
[14:47:32] =================== xe_pci (3 subtests) ====================
[14:47:32] ==================== check_graphics_ip  ====================
[14:47:32] [PASSED] 12.00 Xe_LP
[14:47:32] [PASSED] 12.10 Xe_LP+
[14:47:32] [PASSED] 12.55 Xe_HPG
[14:47:32] [PASSED] 12.60 Xe_HPC
[14:47:32] [PASSED] 12.70 Xe_LPG
[14:47:32] [PASSED] 12.71 Xe_LPG
[14:47:32] [PASSED] 12.74 Xe_LPG+
[14:47:32] [PASSED] 20.01 Xe2_HPG
[14:47:32] [PASSED] 20.02 Xe2_HPG
[14:47:32] [PASSED] 20.04 Xe2_LPG
[14:47:32] [PASSED] 30.00 Xe3_LPG
[14:47:32] [PASSED] 30.01 Xe3_LPG
[14:47:32] [PASSED] 30.03 Xe3_LPG
[14:47:32] [PASSED] 30.04 Xe3_LPG
[14:47:32] [PASSED] 30.05 Xe3_LPG
[14:47:32] [PASSED] 35.10 Xe3p_LPG
[14:47:32] [PASSED] 35.11 Xe3p_XPC
[14:47:32] ================ [PASSED] check_graphics_ip ================
[14:47:32] ===================== check_media_ip  ======================
[14:47:32] [PASSED] 12.00 Xe_M
[14:47:32] [PASSED] 12.55 Xe_HPM
[14:47:32] [PASSED] 13.00 Xe_LPM+
[14:47:32] [PASSED] 13.01 Xe2_HPM
[14:47:32] [PASSED] 20.00 Xe2_LPM
[14:47:32] [PASSED] 30.00 Xe3_LPM
[14:47:32] [PASSED] 30.02 Xe3_LPM
[14:47:32] [PASSED] 35.00 Xe3p_LPM
[14:47:32] [PASSED] 35.03 Xe3p_HPM
[14:47:32] ================= [PASSED] check_media_ip ==================
[14:47:32] =================== check_platform_desc  ===================
[14:47:32] [PASSED] 0x9A60 (TIGERLAKE)
[14:47:32] [PASSED] 0x9A68 (TIGERLAKE)
[14:47:32] [PASSED] 0x9A70 (TIGERLAKE)
[14:47:32] [PASSED] 0x9A40 (TIGERLAKE)
[14:47:32] [PASSED] 0x9A49 (TIGERLAKE)
[14:47:32] [PASSED] 0x9A59 (TIGERLAKE)
[14:47:32] [PASSED] 0x9A78 (TIGERLAKE)
[14:47:32] [PASSED] 0x9AC0 (TIGERLAKE)
[14:47:32] [PASSED] 0x9AC9 (TIGERLAKE)
[14:47:32] [PASSED] 0x9AD9 (TIGERLAKE)
[14:47:32] [PASSED] 0x9AF8 (TIGERLAKE)
[14:47:32] [PASSED] 0x4C80 (ROCKETLAKE)
[14:47:32] [PASSED] 0x4C8A (ROCKETLAKE)
[14:47:32] [PASSED] 0x4C8B (ROCKETLAKE)
[14:47:32] [PASSED] 0x4C8C (ROCKETLAKE)
[14:47:32] [PASSED] 0x4C90 (ROCKETLAKE)
[14:47:32] [PASSED] 0x4C9A (ROCKETLAKE)
[14:47:32] [PASSED] 0x4680 (ALDERLAKE_S)
[14:47:32] [PASSED] 0x4682 (ALDERLAKE_S)
[14:47:32] [PASSED] 0x4688 (ALDERLAKE_S)
[14:47:32] [PASSED] 0x468A (ALDERLAKE_S)
[14:47:32] [PASSED] 0x468B (ALDERLAKE_S)
[14:47:32] [PASSED] 0x4690 (ALDERLAKE_S)
[14:47:32] [PASSED] 0x4692 (ALDERLAKE_S)
[14:47:32] [PASSED] 0x4693 (ALDERLAKE_S)
[14:47:32] [PASSED] 0x46A0 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46A1 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46A2 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46A3 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46A6 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46A8 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46AA (ALDERLAKE_P)
[14:47:32] [PASSED] 0x462A (ALDERLAKE_P)
[14:47:32] [PASSED] 0x4626 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x4628 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46B0 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46B1 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46B2 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46B3 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46C0 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46C1 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46C2 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46C3 (ALDERLAKE_P)
[14:47:32] [PASSED] 0x46D0 (ALDERLAKE_N)
[14:47:32] [PASSED] 0x46D1 (ALDERLAKE_N)
[14:47:32] [PASSED] 0x46D2 (ALDERLAKE_N)
[14:47:32] [PASSED] 0x46D3 (ALDERLAKE_N)
[14:47:32] [PASSED] 0x46D4 (ALDERLAKE_N)
[14:47:32] [PASSED] 0xA721 (ALDERLAKE_P)
[14:47:32] [PASSED] 0xA7A1 (ALDERLAKE_P)
[14:47:32] [PASSED] 0xA7A9 (ALDERLAKE_P)
[14:47:32] [PASSED] 0xA7AC (ALDERLAKE_P)
[14:47:32] [PASSED] 0xA7AD (ALDERLAKE_P)
[14:47:32] [PASSED] 0xA720 (ALDERLAKE_P)
[14:47:32] [PASSED] 0xA7A0 (ALDERLAKE_P)
[14:47:32] [PASSED] 0xA7A8 (ALDERLAKE_P)
[14:47:32] [PASSED] 0xA7AA (ALDERLAKE_P)
[14:47:32] [PASSED] 0xA7AB (ALDERLAKE_P)
[14:47:32] [PASSED] 0xA780 (ALDERLAKE_S)
[14:47:32] [PASSED] 0xA781 (ALDERLAKE_S)
[14:47:32] [PASSED] 0xA782 (ALDERLAKE_S)
[14:47:32] [PASSED] 0xA783 (ALDERLAKE_S)
[14:47:32] [PASSED] 0xA788 (ALDERLAKE_S)
[14:47:32] [PASSED] 0xA789 (ALDERLAKE_S)
[14:47:32] [PASSED] 0xA78A (ALDERLAKE_S)
[14:47:32] [PASSED] 0xA78B (ALDERLAKE_S)
[14:47:32] [PASSED] 0x4905 (DG1)
[14:47:32] [PASSED] 0x4906 (DG1)
[14:47:32] [PASSED] 0x4907 (DG1)
[14:47:32] [PASSED] 0x4908 (DG1)
[14:47:32] [PASSED] 0x4909 (DG1)
[14:47:32] [PASSED] 0x56C0 (DG2)
[14:47:32] [PASSED] 0x56C2 (DG2)
[14:47:32] [PASSED] 0x56C1 (DG2)
[14:47:32] [PASSED] 0x7D51 (METEORLAKE)
[14:47:32] [PASSED] 0x7DD1 (METEORLAKE)
[14:47:32] [PASSED] 0x7D41 (METEORLAKE)
[14:47:32] [PASSED] 0x7D67 (METEORLAKE)
[14:47:32] [PASSED] 0xB640 (METEORLAKE)
[14:47:32] [PASSED] 0x56A0 (DG2)
[14:47:32] [PASSED] 0x56A1 (DG2)
[14:47:32] [PASSED] 0x56A2 (DG2)
[14:47:32] [PASSED] 0x56BE (DG2)
[14:47:32] [PASSED] 0x56BF (DG2)
[14:47:32] [PASSED] 0x5690 (DG2)
[14:47:32] [PASSED] 0x5691 (DG2)
[14:47:32] [PASSED] 0x5692 (DG2)
[14:47:32] [PASSED] 0x56A5 (DG2)
[14:47:32] [PASSED] 0x56A6 (DG2)
[14:47:32] [PASSED] 0x56B0 (DG2)
[14:47:32] [PASSED] 0x56B1 (DG2)
[14:47:32] [PASSED] 0x56BA (DG2)
[14:47:32] [PASSED] 0x56BB (DG2)
[14:47:32] [PASSED] 0x56BC (DG2)
[14:47:32] [PASSED] 0x56BD (DG2)
[14:47:32] [PASSED] 0x5693 (DG2)
[14:47:32] [PASSED] 0x5694 (DG2)
[14:47:32] [PASSED] 0x5695 (DG2)
[14:47:32] [PASSED] 0x56A3 (DG2)
[14:47:32] [PASSED] 0x56A4 (DG2)
[14:47:32] [PASSED] 0x56B2 (DG2)
[14:47:32] [PASSED] 0x56B3 (DG2)
[14:47:32] [PASSED] 0x5696 (DG2)
[14:47:32] [PASSED] 0x5697 (DG2)
[14:47:32] [PASSED] 0xB69 (PVC)
[14:47:32] [PASSED] 0xB6E (PVC)
[14:47:32] [PASSED] 0xBD4 (PVC)
[14:47:32] [PASSED] 0xBD5 (PVC)
[14:47:32] [PASSED] 0xBD6 (PVC)
[14:47:32] [PASSED] 0xBD7 (PVC)
[14:47:32] [PASSED] 0xBD8 (PVC)
[14:47:32] [PASSED] 0xBD9 (PVC)
[14:47:32] [PASSED] 0xBDA (PVC)
[14:47:32] [PASSED] 0xBDB (PVC)
[14:47:32] [PASSED] 0xBE0 (PVC)
[14:47:32] [PASSED] 0xBE1 (PVC)
[14:47:32] [PASSED] 0xBE5 (PVC)
[14:47:32] [PASSED] 0x7D40 (METEORLAKE)
[14:47:32] [PASSED] 0x7D45 (METEORLAKE)
[14:47:32] [PASSED] 0x7D55 (METEORLAKE)
[14:47:32] [PASSED] 0x7D60 (METEORLAKE)
[14:47:32] [PASSED] 0x7DD5 (METEORLAKE)
[14:47:32] [PASSED] 0x6420 (LUNARLAKE)
[14:47:32] [PASSED] 0x64A0 (LUNARLAKE)
[14:47:32] [PASSED] 0x64B0 (LUNARLAKE)
[14:47:32] [PASSED] 0xE202 (BATTLEMAGE)
[14:47:32] [PASSED] 0xE209 (BATTLEMAGE)
[14:47:32] [PASSED] 0xE20B (BATTLEMAGE)
[14:47:32] [PASSED] 0xE20C (BATTLEMAGE)
[14:47:32] [PASSED] 0xE20D (BATTLEMAGE)
[14:47:32] [PASSED] 0xE210 (BATTLEMAGE)
[14:47:32] [PASSED] 0xE211 (BATTLEMAGE)
[14:47:32] [PASSED] 0xE212 (BATTLEMAGE)
[14:47:32] [PASSED] 0xE216 (BATTLEMAGE)
[14:47:32] [PASSED] 0xE220 (BATTLEMAGE)
[14:47:32] [PASSED] 0xE221 (BATTLEMAGE)
[14:47:32] [PASSED] 0xE222 (BATTLEMAGE)
[14:47:32] [PASSED] 0xE223 (BATTLEMAGE)
[14:47:32] [PASSED] 0xB080 (PANTHERLAKE)
[14:47:32] [PASSED] 0xB081 (PANTHERLAKE)
[14:47:32] [PASSED] 0xB082 (PANTHERLAKE)
[14:47:32] [PASSED] 0xB083 (PANTHERLAKE)
[14:47:32] [PASSED] 0xB084 (PANTHERLAKE)
[14:47:32] [PASSED] 0xB085 (PANTHERLAKE)
[14:47:32] [PASSED] 0xB086 (PANTHERLAKE)
[14:47:32] [PASSED] 0xB087 (PANTHERLAKE)
[14:47:32] [PASSED] 0xB08F (PANTHERLAKE)
[14:47:32] [PASSED] 0xB090 (PANTHERLAKE)
[14:47:32] [PASSED] 0xB0A0 (PANTHERLAKE)
[14:47:32] [PASSED] 0xB0B0 (PANTHERLAKE)
[14:47:32] [PASSED] 0xFD80 (PANTHERLAKE)
[14:47:32] [PASSED] 0xFD81 (PANTHERLAKE)
[14:47:32] [PASSED] 0xD740 (NOVALAKE_S)
[14:47:32] [PASSED] 0xD741 (NOVALAKE_S)
[14:47:32] [PASSED] 0xD742 (NOVALAKE_S)
[14:47:32] [PASSED] 0xD743 (NOVALAKE_S)
[14:47:32] [PASSED] 0xD745 (NOVALAKE_S)
[14:47:32] [PASSED] 0xD74A (NOVALAKE_S)
[14:47:32] [PASSED] 0xD74B (NOVALAKE_S)
[14:47:32] [PASSED] 0x674C (CRESCENTISLAND)
[14:47:32] [PASSED] 0x674D (CRESCENTISLAND)
[14:47:32] [PASSED] 0x674E (CRESCENTISLAND)
[14:47:32] [PASSED] 0x674F (CRESCENTISLAND)
[14:47:32] [PASSED] 0x6750 (CRESCENTISLAND)
[14:47:32] [PASSED] 0xD750 (NOVALAKE_P)
[14:47:32] [PASSED] 0xD751 (NOVALAKE_P)
[14:47:32] [PASSED] 0xD752 (NOVALAKE_P)
[14:47:32] [PASSED] 0xD753 (NOVALAKE_P)
[14:47:32] [PASSED] 0xD754 (NOVALAKE_P)
[14:47:32] [PASSED] 0xD755 (NOVALAKE_P)
[14:47:32] [PASSED] 0xD756 (NOVALAKE_P)
[14:47:32] [PASSED] 0xD757 (NOVALAKE_P)
[14:47:32] [PASSED] 0xD75F (NOVALAKE_P)
[14:47:32] =============== [PASSED] check_platform_desc ===============
[14:47:32] ===================== [PASSED] xe_pci ======================
[14:47:32] ============= xe_rtp_tables_test (5 subtests) ==============
[14:47:32] ================== xe_rtp_table_gt_test  ===================
[14:47:32] [PASSED] gt_was/14011060649
[14:47:32] [PASSED] gt_was/14011059788
[14:47:32] [PASSED] gt_was/14015795083
[14:47:32] [PASSED] gt_was/16021867713
[14:47:32] [PASSED] gt_was/14019449301
[14:47:32] [PASSED] gt_was/16028005424
[14:47:32] [PASSED] gt_was/14026578760
[14:47:32] [PASSED] gt_was/1409420604
[14:47:32] [PASSED] gt_was/1408615072
[14:47:32] [PASSED] gt_was/22010523718
[14:47:32] [PASSED] gt_was/14011006942
[14:47:32] [PASSED] gt_was/14014830051
[14:47:32] [PASSED] gt_was/18018781329
[14:47:32] [PASSED] gt_was/1509235366
[14:47:32] [PASSED] gt_was/18018781329
[14:47:32] [PASSED] gt_was/16016694945
[14:47:32] [PASSED] gt_was/14018575942
[14:47:32] [PASSED] gt_was/22016670082
[14:47:32] [PASSED] gt_was/22016670082
[14:47:32] [PASSED] gt_was/14017421178
[14:47:32] [PASSED] gt_was/16025250150
[14:47:32] [PASSED] gt_was/14021871409
[14:47:32] [PASSED] gt_was/16021865536
[14:47:32] [PASSED] gt_was/14021486841
[14:47:32] [PASSED] gt_was/14025160223
[14:47:32] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[14:47:32] [PASSED] gt_was/14025635424
[14:47:32] [PASSED] gt_was/16028005424
[14:47:32] ============== [PASSED] xe_rtp_table_gt_test ===============
[14:47:32] ================== xe_rtp_table_gt_test  ===================
[14:47:32] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[14:47:32] [PASSED] gt_tunings/Tuning: 32B Access Enable
[14:47:32] [PASSED] gt_tunings/Tuning: L3 cache
[14:47:32] [PASSED] gt_tunings/Tuning: L3 cache - media
[14:47:32] [PASSED] gt_tunings/Tuning: Compression Overfetch
[14:47:32] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[14:47:32] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[14:47:32] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[14:47:32] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[14:47:32] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[14:47:32] [PASSED] gt_tunings/Tuning: Stateless compression control
[14:47:32] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[14:47:32] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[14:47:32] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[14:47:32] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[14:47:32] ============== [PASSED] xe_rtp_table_gt_test ===============
[14:47:32] ================== xe_rtp_table_oob_test  ==================
[14:47:32] [PASSED] oob_was/1607983814
[14:47:32] [PASSED] oob_was/16010904313
[14:47:32] [PASSED] oob_was/18022495364
[14:47:32] [PASSED] oob_was/22012773006
[14:47:32] [PASSED] oob_was/14014475959
[14:47:32] [PASSED] oob_was/22011391025
[14:47:32] [PASSED] oob_was/22012727170
[14:47:32] [PASSED] oob_was/22012727685
[14:47:32] [PASSED] oob_was/22016596838
[14:47:32] [PASSED] oob_was/18020744125
[14:47:32] [PASSED] oob_was/1409600907
[14:47:32] [PASSED] oob_was/22014953428
[14:47:32] [PASSED] oob_was/16017236439
[14:47:32] [PASSED] oob_was/14019821291
[14:47:32] [PASSED] oob_was/14015076503
[14:47:32] [PASSED] oob_was/14018913170
[14:47:32] [PASSED] oob_was/14018094691
[14:47:32] [PASSED] oob_was/18024947630
[14:47:32] [PASSED] oob_was/16022287689
[14:47:32] [PASSED] oob_was/13011645652
[14:47:32] [PASSED] oob_was/14022293748
[14:47:32] [PASSED] oob_was/22019794406
[14:47:32] [PASSED] oob_was/22019338487
[14:47:32] [PASSED] oob_was/16023588340
[14:47:32] [PASSED] oob_was/14019789679
[14:47:32] [PASSED] oob_was/14022866841
[14:47:32] [PASSED] oob_was/16021333562
[14:47:32] [PASSED] oob_was/14016712196
[14:47:32] [PASSED] oob_was/14015568240
[14:47:32] [PASSED] oob_was/18013179988
[14:47:32] [PASSED] oob_was/1508761755
[14:47:32] [PASSED] oob_was/16023105232
[14:47:32] [PASSED] oob_was/16026508708
[14:47:32] [PASSED] oob_was/14020001231
[14:47:32] [PASSED] oob_was/16023683509
[14:47:32] [PASSED] oob_was/14025515070
[14:47:32] [PASSED] oob_was/15015404425_disable
[14:47:32] [PASSED] oob_was/16026007364
[14:47:32] [PASSED] oob_was/14020316580
[14:47:32] [PASSED] oob_was/14025883347
[14:47:32] [PASSED] oob_was/16029380221
[14:47:32] [PASSED] oob_was/22022079272
[14:47:32] [PASSED] oob_was/16029897822
[14:47:32] [PASSED] oob_was/14027054324
[14:47:32] ============== [PASSED] xe_rtp_table_oob_test ==============
[14:47:32] ================ xe_rtp_table_dev_oob_test  ================
[14:47:32] [PASSED] device_oob_was/22010954014
[14:47:32] [PASSED] device_oob_was/15015404425
[14:47:32] [PASSED] device_oob_was/22019338487_display
[14:47:32] [PASSED] device_oob_was/14022085890
[14:47:32] [PASSED] device_oob_was/14026539277
[14:47:32] [PASSED] device_oob_was/14026633728
[14:47:32] [PASSED] device_oob_was/14026746987
[14:47:32] [PASSED] device_oob_was/14026779378
[14:47:32] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[14:47:32] ========== xe_rtp_table_missing_upper_bound_test  ==========
[14:47:32] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[14:47:32] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[14:47:32] [PASSED] register_whitelist/1806527549
[14:47:32] [PASSED] register_whitelist/allow_read_ctx_timestamp
[14:47:32] [PASSED] register_whitelist/allow_read_queue_timestamp
[14:47:32] [PASSED] register_whitelist/16014440446
[14:47:32] [PASSED] register_whitelist/16017236439
[14:47:32] [PASSED] register_whitelist/16020183090
[14:47:32] [PASSED] register_whitelist/14024997852
[14:47:32] [PASSED] register_whitelist/14024997852
[14:47:32] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[14:47:32] =============== [PASSED] xe_rtp_tables_test ================
[14:47:32] =================== xe_rtp (3 subtests) ====================
[14:47:32] =================== xe_rtp_rules_tests  ====================
[14:47:32] [PASSED] no
[14:47:32] [PASSED] yes
[14:47:32] [PASSED] no-and-no
[14:47:32] [PASSED] no-and-yes
[14:47:32] [PASSED] yes-and-no
[14:47:32] [PASSED] yes-and-yes
[14:47:32] [PASSED] no-or-no
[14:47:32] [PASSED] no-or-yes
[14:47:32] [PASSED] yes-or-no
[14:47:32] [PASSED] yes-or-yes
[14:47:32] [PASSED] no-yes-or-yes-no
[14:47:32] [PASSED] no-yes-or-yes-yes
[14:47:32] [PASSED] yes-yes-or-no-yes
[14:47:32] [PASSED] yes-yes-or-yes-yes
[14:47:32] [PASSED] no-no-or-yes-or-no
[14:47:32] [PASSED] or
[14:47:32] [PASSED] or-yes
[14:47:32] [PASSED] or-no
[14:47:32] [PASSED] yes-or
[14:47:32] [PASSED] no-or
[14:47:32] [PASSED] no-or-or-yes
[14:47:32] [PASSED] yes-or-or-no
[14:47:32] [PASSED] no-or-or-no
[14:47:32] [PASSED] missing-context-engine-class
[14:47:32] [PASSED] missing-context-engine-class-or-yes
[14:47:32] [PASSED] missing-context-engine-class-or-or-yes
[14:47:32] =============== [PASSED] xe_rtp_rules_tests ================
[14:47:32] =============== xe_rtp_process_to_sr_tests  ================
[14:47:32] [PASSED] coalesce-same-reg
[14:47:32] [PASSED] coalesce-same-reg-literal-and-func
[14:47:32] [PASSED] no-match-no-add
[14:47:32] [PASSED] two-regs-two-entries
[14:47:32] [PASSED] clr-one-set-other
[14:47:32] [PASSED] set-field
[14:47:32] [PASSED] conflict-duplicate
[14:47:32] [PASSED] conflict-not-disjoint
[14:47:32] [PASSED] conflict-not-disjoint-literal-and-func
[14:47:32] [PASSED] conflict-reg-type
[14:47:32] [PASSED] bad-mcr-reg-forced-to-regular
[14:47:32] [PASSED] bad-regular-reg-forced-to-mcr
[14:47:32] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[14:47:32] ================== xe_rtp_process_tests  ===================
[14:47:32] [PASSED] active1
[14:47:32] [PASSED] active2
[14:47:32] [PASSED] active-inactive
[14:47:32] [PASSED] inactive-active
[14:47:32] [PASSED] inactive-active-inactive
[14:47:32] [PASSED] inactive-inactive-inactive
[14:47:32] ============== [PASSED] xe_rtp_process_tests ===============
[14:47:32] ===================== [PASSED] xe_rtp ======================
[14:47:32] ==================== xe_wa (1 subtest) =====================
[14:47:32] ======================== xe_wa_gt  =========================
[14:47:32] [PASSED] TIGERLAKE B0
[14:47:32] [PASSED] DG1 A0
[14:47:32] [PASSED] DG1 B0
[14:47:32] [PASSED] ALDERLAKE_S A0
[14:47:32] [PASSED] ALDERLAKE_S B0
[14:47:32] [PASSED] ALDERLAKE_S C0
[14:47:32] [PASSED] ALDERLAKE_S D0
[14:47:32] [PASSED] ALDERLAKE_P A0
[14:47:32] [PASSED] ALDERLAKE_P B0
[14:47:32] [PASSED] ALDERLAKE_P C0
[14:47:32] [PASSED] ALDERLAKE_S RPLS D0
[14:47:32] [PASSED] ALDERLAKE_P RPLU E0
[14:47:32] [PASSED] DG2 G10 C0
[14:47:32] [PASSED] DG2 G11 B1
[14:47:32] [PASSED] DG2 G12 A1
[14:47:32] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[14:47:32] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[14:47:32] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[14:47:32] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[14:47:32] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[14:47:32] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[14:47:32] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[14:47:32] ==================== [PASSED] xe_wa_gt =====================
[14:47:32] ====================== [PASSED] xe_wa ======================
[14:47:32] ============================================================
[14:47:32] Testing complete. Ran 793 tests: passed: 765, skipped: 28
[14:47:32] Elapsed time: 36.246s total, 1.776s configuring, 33.754s building, 0.705s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[14:47:32] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[14:47:34] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[14:47:58] Starting KUnit Kernel (1/1)...
[14:47:58] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[14:47:58] ============= refcount_interrupt (4 subtests) ==============
[14:47:58] [PASSED] test_single_irq_change
[14:47:58] [PASSED] test_nested_irq_change
[14:47:58] [PASSED] test_multiple_irq_change
[14:47:58] [PASSED] test_irq_save
[14:47:58] =============== [PASSED] refcount_interrupt ================
[14:47:58] ============ drm_test_pick_cmdline (2 subtests) ============
[14:47:58] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[14:47:58] =============== drm_test_pick_cmdline_named  ===============
[14:47:58] [PASSED] NTSC
[14:47:58] [PASSED] NTSC-J
[14:47:58] [PASSED] PAL
[14:47:58] [PASSED] PAL-M
[14:47:58] =========== [PASSED] drm_test_pick_cmdline_named ===========
[14:47:58] ============== [PASSED] drm_test_pick_cmdline ==============
[14:47:58] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[14:47:58] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[14:47:58] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[14:47:58] =========== drm_validate_clone_mode (2 subtests) ===========
[14:47:58] ============== drm_test_check_in_clone_mode  ===============
[14:47:58] [PASSED] in_clone_mode
[14:47:58] [PASSED] not_in_clone_mode
[14:47:58] ========== [PASSED] drm_test_check_in_clone_mode ===========
[14:47:58] =============== drm_test_check_valid_clones  ===============
[14:47:58] [PASSED] not_in_clone_mode
[14:47:58] [PASSED] valid_clone
[14:47:58] [PASSED] invalid_clone
[14:47:58] =========== [PASSED] drm_test_check_valid_clones ===========
[14:47:58] ============= [PASSED] drm_validate_clone_mode =============
[14:47:58] ============= drm_validate_modeset (1 subtest) =============
[14:47:58] [PASSED] drm_test_check_connector_changed_modeset
[14:47:58] ============== [PASSED] drm_validate_modeset ===============
[14:47:58] ====== drm_test_bridge_get_current_state (1 subtest) =======
[14:47:58] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[14:47:58] ======== [PASSED] drm_test_bridge_get_current_state ========
[14:47:58] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[14:47:58] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[14:47:58] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[14:47:58] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[14:47:58] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[14:47:58] ============== drm_bridge_alloc (2 subtests) ===============
[14:47:58] [PASSED] drm_test_drm_bridge_alloc_basic
[14:47:58] [PASSED] drm_test_drm_bridge_alloc_get_put
[14:47:58] ================ [PASSED] drm_bridge_alloc =================
[14:47:58] ============= drm_bridge_bus_fmt (5 subtests) ==============
[14:47:58] [PASSED] drm_test_bridge_rgb_yuv_rgb
[14:47:58] [PASSED] drm_test_bridge_must_convert_to_yuv444
[14:47:58] [PASSED] drm_test_bridge_hdmi_auto_rgb
[14:47:58] [PASSED] drm_test_bridge_auto_first
[14:47:58] [PASSED] drm_test_bridge_rgb_yuv_no_path
[14:47:58] =============== [PASSED] drm_bridge_bus_fmt ================
[14:47:58] ============= drm_cmdline_parser (40 subtests) =============
[14:47:58] [PASSED] drm_test_cmdline_force_d_only
[14:47:58] [PASSED] drm_test_cmdline_force_D_only_dvi
[14:47:58] [PASSED] drm_test_cmdline_force_D_only_hdmi
[14:47:58] [PASSED] drm_test_cmdline_force_D_only_not_digital
[14:47:58] [PASSED] drm_test_cmdline_force_e_only
[14:47:58] [PASSED] drm_test_cmdline_res
[14:47:58] [PASSED] drm_test_cmdline_res_vesa
[14:47:58] [PASSED] drm_test_cmdline_res_vesa_rblank
[14:47:58] [PASSED] drm_test_cmdline_res_rblank
[14:47:58] [PASSED] drm_test_cmdline_res_bpp
[14:47:58] [PASSED] drm_test_cmdline_res_refresh
[14:47:58] [PASSED] drm_test_cmdline_res_bpp_refresh
[14:47:58] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[14:47:58] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[14:47:58] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[14:47:58] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[14:47:58] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[14:47:58] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[14:47:58] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[14:47:58] [PASSED] drm_test_cmdline_res_margins_force_on
[14:47:58] [PASSED] drm_test_cmdline_res_vesa_margins
[14:47:58] [PASSED] drm_test_cmdline_name
[14:47:58] [PASSED] drm_test_cmdline_name_bpp
[14:47:58] [PASSED] drm_test_cmdline_name_option
[14:47:58] [PASSED] drm_test_cmdline_name_bpp_option
[14:47:58] [PASSED] drm_test_cmdline_rotate_0
[14:47:58] [PASSED] drm_test_cmdline_rotate_90
[14:47:58] [PASSED] drm_test_cmdline_rotate_180
[14:47:58] [PASSED] drm_test_cmdline_rotate_270
[14:47:58] [PASSED] drm_test_cmdline_hmirror
[14:47:58] [PASSED] drm_test_cmdline_vmirror
[14:47:58] [PASSED] drm_test_cmdline_margin_options
[14:47:58] [PASSED] drm_test_cmdline_multiple_options
[14:47:58] [PASSED] drm_test_cmdline_bpp_extra_and_option
[14:47:58] [PASSED] drm_test_cmdline_extra_and_option
[14:47:58] [PASSED] drm_test_cmdline_freestanding_options
[14:47:58] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[14:47:58] [PASSED] drm_test_cmdline_panel_orientation
[14:47:58] ================ drm_test_cmdline_invalid  =================
[14:47:58] [PASSED] margin_only
[14:47:58] [PASSED] interlace_only
[14:47:58] [PASSED] res_missing_x
[14:47:58] [PASSED] res_missing_y
[14:47:58] [PASSED] res_bad_y
[14:47:58] [PASSED] res_missing_y_bpp
[14:47:58] [PASSED] res_bad_bpp
[14:47:58] [PASSED] res_bad_refresh
[14:47:58] [PASSED] res_bpp_refresh_force_on_off
[14:47:58] [PASSED] res_invalid_mode
[14:47:58] [PASSED] res_bpp_wrong_place_mode
[14:47:58] [PASSED] name_bpp_refresh
[14:47:58] [PASSED] name_refresh
[14:47:58] [PASSED] name_refresh_wrong_mode
[14:47:58] [PASSED] name_refresh_invalid_mode
[14:47:58] [PASSED] rotate_multiple
[14:47:58] [PASSED] rotate_invalid_val
[14:47:58] [PASSED] rotate_truncated
[14:47:58] [PASSED] invalid_option
[14:47:58] [PASSED] invalid_tv_option
[14:47:58] [PASSED] truncated_tv_option
[14:47:58] ============ [PASSED] drm_test_cmdline_invalid =============
[14:47:58] =============== drm_test_cmdline_tv_options  ===============
[14:47:58] [PASSED] NTSC
[14:47:58] [PASSED] NTSC_443
[14:47:58] [PASSED] NTSC_J
[14:47:58] [PASSED] PAL
[14:47:58] [PASSED] PAL_M
[14:47:58] [PASSED] PAL_N
[14:47:58] [PASSED] SECAM
[14:47:58] [PASSED] MONO_525
[14:47:58] [PASSED] MONO_625
[14:47:58] =========== [PASSED] drm_test_cmdline_tv_options ===========
[14:47:58] =============== [PASSED] drm_cmdline_parser ================
[14:47:58] ========== drmm_connector_hdmi_init (20 subtests) ==========
[14:47:58] [PASSED] drm_test_connector_hdmi_init_valid
[14:47:58] [PASSED] drm_test_connector_hdmi_init_bpc_8
[14:47:58] [PASSED] drm_test_connector_hdmi_init_bpc_10
[14:47:58] [PASSED] drm_test_connector_hdmi_init_bpc_12
[14:47:58] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[14:47:58] [PASSED] drm_test_connector_hdmi_init_bpc_null
[14:47:58] [PASSED] drm_test_connector_hdmi_init_formats_empty
[14:47:58] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[14:47:58] === drm_test_connector_hdmi_init_formats_yuv420_allowed  ===
[14:47:58] [PASSED] supported_formats=0x9 yuv420_allowed=1
[14:47:58] [PASSED] supported_formats=0x9 yuv420_allowed=0
[14:47:58] [PASSED] supported_formats=0x5 yuv420_allowed=1
[14:47:58] [PASSED] supported_formats=0x5 yuv420_allowed=0
[14:47:58] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[14:47:58] [PASSED] drm_test_connector_hdmi_init_null_ddc
[14:47:58] [PASSED] drm_test_connector_hdmi_init_null_product
[14:47:58] [PASSED] drm_test_connector_hdmi_init_null_vendor
[14:47:58] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[14:47:58] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[14:47:58] [PASSED] drm_test_connector_hdmi_init_product_valid
[14:47:58] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[14:47:58] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[14:47:58] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[14:47:58] ========= drm_test_connector_hdmi_init_type_valid  =========
[14:47:58] [PASSED] HDMI-A
[14:47:58] [PASSED] HDMI-B
[14:47:58] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[14:47:58] ======== drm_test_connector_hdmi_init_type_invalid  ========
[14:47:58] [PASSED] Unknown
[14:47:58] [PASSED] VGA
[14:47:58] [PASSED] DVI-I
[14:47:58] [PASSED] DVI-D
[14:47:58] [PASSED] DVI-A
[14:47:58] [PASSED] Composite
[14:47:58] [PASSED] SVIDEO
[14:47:58] [PASSED] LVDS
[14:47:58] [PASSED] Component
[14:47:58] [PASSED] DIN
[14:47:58] [PASSED] DP
[14:47:58] [PASSED] TV
[14:47:58] [PASSED] eDP
[14:47:58] [PASSED] Virtual
[14:47:58] [PASSED] DSI
[14:47:58] [PASSED] DPI
[14:47:58] [PASSED] Writeback
[14:47:58] [PASSED] SPI
[14:47:58] [PASSED] USB
[14:47:58] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[14:47:58] ============ [PASSED] drmm_connector_hdmi_init =============
[14:47:58] ============= drmm_connector_init (3 subtests) =============
[14:47:58] [PASSED] drm_test_drmm_connector_init
[14:47:58] [PASSED] drm_test_drmm_connector_init_null_ddc
[14:47:58] ========= drm_test_drmm_connector_init_type_valid  =========
[14:47:58] [PASSED] Unknown
[14:47:58] [PASSED] VGA
[14:47:58] [PASSED] DVI-I
[14:47:58] [PASSED] DVI-D
[14:47:58] [PASSED] DVI-A
[14:47:58] [PASSED] Composite
[14:47:58] [PASSED] SVIDEO
[14:47:58] [PASSED] LVDS
[14:47:58] [PASSED] Component
[14:47:58] [PASSED] DIN
[14:47:58] [PASSED] DP
[14:47:58] [PASSED] HDMI-A
[14:47:58] [PASSED] HDMI-B
[14:47:58] [PASSED] TV
[14:47:58] [PASSED] eDP
[14:47:58] [PASSED] Virtual
[14:47:58] [PASSED] DSI
[14:47:58] [PASSED] DPI
[14:47:58] [PASSED] Writeback
[14:47:58] [PASSED] SPI
[14:47:58] [PASSED] USB
[14:47:58] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[14:47:58] =============== [PASSED] drmm_connector_init ===============
[14:47:58] ========= drm_connector_dynamic_init (6 subtests) ==========
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_init
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_init_properties
[14:47:58] ===== drm_test_drm_connector_dynamic_init_type_valid  ======
[14:47:58] [PASSED] Unknown
[14:47:58] [PASSED] VGA
[14:47:58] [PASSED] DVI-I
[14:47:58] [PASSED] DVI-D
[14:47:58] [PASSED] DVI-A
[14:47:58] [PASSED] Composite
[14:47:58] [PASSED] SVIDEO
[14:47:58] [PASSED] LVDS
[14:47:58] [PASSED] Component
[14:47:58] [PASSED] DIN
[14:47:58] [PASSED] DP
[14:47:58] [PASSED] HDMI-A
[14:47:58] [PASSED] HDMI-B
[14:47:58] [PASSED] TV
[14:47:58] [PASSED] eDP
[14:47:58] [PASSED] Virtual
[14:47:58] [PASSED] DSI
[14:47:58] [PASSED] DPI
[14:47:58] [PASSED] Writeback
[14:47:58] [PASSED] SPI
[14:47:58] [PASSED] USB
[14:47:58] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[14:47:58] ======== drm_test_drm_connector_dynamic_init_name  =========
[14:47:58] [PASSED] Unknown
[14:47:58] [PASSED] VGA
[14:47:58] [PASSED] DVI-I
[14:47:58] [PASSED] DVI-D
[14:47:58] [PASSED] DVI-A
[14:47:58] [PASSED] Composite
[14:47:58] [PASSED] SVIDEO
[14:47:58] [PASSED] LVDS
[14:47:58] [PASSED] Component
[14:47:58] [PASSED] DIN
[14:47:58] [PASSED] DP
[14:47:58] [PASSED] HDMI-A
[14:47:58] [PASSED] HDMI-B
[14:47:58] [PASSED] TV
[14:47:58] [PASSED] eDP
[14:47:58] [PASSED] Virtual
[14:47:58] [PASSED] DSI
[14:47:58] [PASSED] DPI
[14:47:58] [PASSED] Writeback
[14:47:58] [PASSED] SPI
[14:47:58] [PASSED] USB
[14:47:58] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[14:47:58] =========== [PASSED] drm_connector_dynamic_init ============
[14:47:58] ==== drm_connector_dynamic_register_early (4 subtests) =====
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[14:47:58] ====== [PASSED] drm_connector_dynamic_register_early =======
[14:47:58] ======= drm_connector_dynamic_register (7 subtests) ========
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[14:47:58] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[14:47:58] ========= [PASSED] drm_connector_dynamic_register ==========
[14:47:58] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[14:47:58] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[14:47:58] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[14:47:58] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[14:47:58] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[14:47:58] ========== drm_test_get_tv_mode_from_name_valid  ===========
[14:47:58] [PASSED] NTSC
[14:47:58] [PASSED] NTSC-443
[14:47:58] [PASSED] NTSC-J
[14:47:58] [PASSED] PAL
[14:47:58] [PASSED] PAL-M
[14:47:58] [PASSED] PAL-N
[14:47:58] [PASSED] SECAM
[14:47:58] [PASSED] Mono
[14:47:58] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[14:47:58] [PASSED] drm_test_get_tv_mode_from_name_truncated
[14:47:58] ============ [PASSED] drm_get_tv_mode_from_name ============
[14:47:58] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[14:47:58] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[14:47:58] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[14:47:58] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[14:47:58] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[14:47:58] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[14:47:58] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[14:47:58] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[14:47:58] [PASSED] VIC 96
[14:47:58] [PASSED] VIC 97
[14:47:58] [PASSED] VIC 101
[14:47:58] [PASSED] VIC 102
[14:47:58] [PASSED] VIC 106
[14:47:58] [PASSED] VIC 107
[14:47:58] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[14:47:58] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[14:47:58] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[14:47:58] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[14:47:58] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[14:47:58] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[14:47:58] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[14:47:58] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[14:47:58] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[14:47:58] [PASSED] Automatic
[14:47:58] [PASSED] Full
[14:47:58] [PASSED] Limited 16:235
[14:47:58] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[14:47:58] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[14:47:58] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[14:47:58] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[14:47:58] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[14:47:58] [PASSED] RGB
[14:47:58] [PASSED] YUV 4:2:0
[14:47:58] [PASSED] YUV 4:2:2
[14:47:58] [PASSED] YUV 4:4:4
[14:47:58] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[14:47:58] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[14:47:58] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[14:47:58] ============= drm_damage_helper (21 subtests) ==============
[14:47:58] [PASSED] drm_test_damage_iter_no_damage
[14:47:58] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[14:47:58] [PASSED] drm_test_damage_iter_no_damage_src_moved
[14:47:58] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[14:47:58] [PASSED] drm_test_damage_iter_no_damage_not_visible
[14:47:58] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[14:47:58] [PASSED] drm_test_damage_iter_no_damage_no_fb
[14:47:58] [PASSED] drm_test_damage_iter_simple_damage
[14:47:58] [PASSED] drm_test_damage_iter_single_damage
[14:47:58] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[14:47:58] [PASSED] drm_test_damage_iter_single_damage_outside_src
[14:47:58] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[14:47:58] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[14:47:58] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[14:47:58] [PASSED] drm_test_damage_iter_single_damage_src_moved
[14:47:58] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[14:47:58] [PASSED] drm_test_damage_iter_damage
[14:47:58] [PASSED] drm_test_damage_iter_damage_one_intersect
[14:47:58] [PASSED] drm_test_damage_iter_damage_one_outside
[14:47:58] [PASSED] drm_test_damage_iter_damage_src_moved
[14:47:58] [PASSED] drm_test_damage_iter_damage_not_visible
[14:47:58] ================ [PASSED] drm_damage_helper ================
[14:47:58] ============== drm_dp_mst_helper (3 subtests) ==============
[14:47:58] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[14:47:58] [PASSED] Clock 154000 BPP 30 DSC disabled
[14:47:58] [PASSED] Clock 234000 BPP 30 DSC disabled
[14:47:58] [PASSED] Clock 297000 BPP 24 DSC disabled
[14:47:58] [PASSED] Clock 332880 BPP 24 DSC enabled
[14:47:58] [PASSED] Clock 324540 BPP 24 DSC enabled
[14:47:58] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[14:47:58] ============== drm_test_dp_mst_calc_pbn_div  ===============
[14:47:58] [PASSED] Link rate 2000000 lane count 4
[14:47:58] [PASSED] Link rate 2000000 lane count 2
[14:47:58] [PASSED] Link rate 2000000 lane count 1
[14:47:58] [PASSED] Link rate 1350000 lane count 4
[14:47:58] [PASSED] Link rate 1350000 lane count 2
[14:47:58] [PASSED] Link rate 1350000 lane count 1
[14:47:58] [PASSED] Link rate 1000000 lane count 4
[14:47:58] [PASSED] Link rate 1000000 lane count 2
[14:47:58] [PASSED] Link rate 1000000 lane count 1
[14:47:58] [PASSED] Link rate 810000 lane count 4
[14:47:58] [PASSED] Link rate 810000 lane count 2
[14:47:58] [PASSED] Link rate 810000 lane count 1
[14:47:58] [PASSED] Link rate 540000 lane count 4
[14:47:58] [PASSED] Link rate 540000 lane count 2
[14:47:58] [PASSED] Link rate 540000 lane count 1
[14:47:58] [PASSED] Link rate 270000 lane count 4
[14:47:58] [PASSED] Link rate 270000 lane count 2
[14:47:58] [PASSED] Link rate 270000 lane count 1
[14:47:58] [PASSED] Link rate 162000 lane count 4
[14:47:58] [PASSED] Link rate 162000 lane count 2
[14:47:58] [PASSED] Link rate 162000 lane count 1
[14:47:58] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[14:47:58] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[14:47:58] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[14:47:58] [PASSED] DP_POWER_UP_PHY with port number
[14:47:58] [PASSED] DP_POWER_DOWN_PHY with port number
[14:47:58] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[14:47:58] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[14:47:58] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[14:47:58] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[14:47:58] [PASSED] DP_QUERY_PAYLOAD with port number
[14:47:58] [PASSED] DP_QUERY_PAYLOAD with VCPI
[14:47:58] [PASSED] DP_REMOTE_DPCD_READ with port number
[14:47:58] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[14:47:58] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[14:47:58] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[14:47:58] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[14:47:58] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[14:47:58] [PASSED] DP_REMOTE_I2C_READ with port number
[14:47:58] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[14:47:58] [PASSED] DP_REMOTE_I2C_READ with transactions array
[14:47:58] [PASSED] DP_REMOTE_I2C_WRITE with port number
[14:47:58] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[14:47:58] [PASSED] DP_REMOTE_I2C_WRITE with data array
[14:47:58] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[14:47:58] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[14:47:58] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[14:47:58] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[14:47:58] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[14:47:58] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[14:47:58] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[14:47:58] ================ [PASSED] drm_dp_mst_helper ================
[14:47:58] ================== drm_exec (7 subtests) ===================
[14:47:58] [PASSED] sanitycheck
[14:47:58] [PASSED] test_lock
[14:47:58] [PASSED] test_lock_unlock
[14:47:58] [PASSED] test_duplicates
[14:47:58] [PASSED] test_prepare
[14:47:58] [PASSED] test_prepare_array
[14:47:58] [PASSED] test_multiple_loops
[14:47:58] ==================== [PASSED] drm_exec =====================
[14:47:58] =========== drm_format_helper_test (17 subtests) ===========
[14:47:58] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[14:47:58] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[14:47:58] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[14:47:58] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[14:47:58] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[14:47:58] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[14:47:58] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[14:47:58] ============= drm_test_fb_xrgb8888_to_bgr888  ==============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[14:47:58] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[14:47:58] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[14:47:58] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[14:47:58] ============== drm_test_fb_xrgb8888_to_mono  ===============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[14:47:58] ==================== drm_test_fb_swab  =====================
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ================ [PASSED] drm_test_fb_swab =================
[14:47:58] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[14:47:58] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[14:47:58] [PASSED] single_pixel_source_buffer
[14:47:58] [PASSED] single_pixel_clip_rectangle
[14:47:58] [PASSED] well_known_colors
[14:47:58] [PASSED] destination_pitch
[14:47:58] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[14:47:58] ================= drm_test_fb_clip_offset  =================
[14:47:58] [PASSED] pass through
[14:47:58] [PASSED] horizontal offset
[14:47:58] [PASSED] vertical offset
[14:47:58] [PASSED] horizontal and vertical offset
[14:47:58] [PASSED] horizontal offset (custom pitch)
[14:47:58] [PASSED] vertical offset (custom pitch)
[14:47:58] [PASSED] horizontal and vertical offset (custom pitch)
[14:47:58] ============= [PASSED] drm_test_fb_clip_offset =============
[14:47:58] =================== drm_test_fb_memcpy  ====================
[14:47:58] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[14:47:58] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[14:47:58] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[14:47:58] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[14:47:58] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[14:47:58] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[14:47:58] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[14:47:58] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[14:47:58] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[14:47:58] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[14:47:58] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[14:47:58] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[14:47:58] =============== [PASSED] drm_test_fb_memcpy ================
[14:47:58] ============= [PASSED] drm_format_helper_test ==============
[14:47:58] ================= drm_format (18 subtests) =================
[14:47:58] [PASSED] drm_test_format_block_width_invalid
[14:47:58] [PASSED] drm_test_format_block_width_one_plane
[14:47:58] [PASSED] drm_test_format_block_width_two_plane
[14:47:58] [PASSED] drm_test_format_block_width_three_plane
[14:47:58] [PASSED] drm_test_format_block_width_tiled
[14:47:58] [PASSED] drm_test_format_block_height_invalid
[14:47:58] [PASSED] drm_test_format_block_height_one_plane
[14:47:58] [PASSED] drm_test_format_block_height_two_plane
[14:47:58] [PASSED] drm_test_format_block_height_three_plane
[14:47:58] [PASSED] drm_test_format_block_height_tiled
[14:47:58] [PASSED] drm_test_format_min_pitch_invalid
[14:47:58] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[14:47:58] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[14:47:58] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[14:47:58] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[14:47:58] [PASSED] drm_test_format_min_pitch_two_plane
[14:47:58] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[14:47:58] [PASSED] drm_test_format_min_pitch_tiled
[14:47:58] =================== [PASSED] drm_format ====================
[14:47:58] ============== drm_framebuffer (10 subtests) ===============
[14:47:58] ========== drm_test_framebuffer_check_src_coords  ==========
[14:47:58] [PASSED] Success: source fits into fb
[14:47:58] [PASSED] Fail: overflowing fb with x-axis coordinate
[14:47:58] [PASSED] Fail: overflowing fb with y-axis coordinate
[14:47:58] [PASSED] Fail: overflowing fb with source width
[14:47:58] [PASSED] Fail: overflowing fb with source height
[14:47:58] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[14:47:58] [PASSED] drm_test_framebuffer_cleanup
[14:47:58] =============== drm_test_framebuffer_create  ===============
[14:47:58] [PASSED] ABGR8888 normal sizes
[14:47:58] [PASSED] ABGR8888 max sizes
[14:47:58] [PASSED] ABGR8888 pitch greater than min required
[14:47:58] [PASSED] ABGR8888 pitch less than min required
[14:47:58] [PASSED] ABGR8888 Invalid width
[14:47:58] [PASSED] ABGR8888 Invalid buffer handle
[14:47:58] [PASSED] No pixel format
[14:47:58] [PASSED] ABGR8888 Width 0
[14:47:58] [PASSED] ABGR8888 Height 0
[14:47:58] [PASSED] ABGR8888 Out of bound height * pitch combination
[14:47:58] [PASSED] ABGR8888 Large buffer offset
[14:47:58] [PASSED] ABGR8888 Buffer offset for inexistent plane
[14:47:58] [PASSED] ABGR8888 Invalid flag
[14:47:58] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[14:47:58] [PASSED] ABGR8888 Valid buffer modifier
[14:47:58] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[14:47:58] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[14:47:58] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[14:47:58] [PASSED] NV12 Normal sizes
[14:47:58] [PASSED] NV12 Max sizes
[14:47:58] [PASSED] NV12 Invalid pitch
[14:47:58] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[14:47:58] [PASSED] NV12 different  modifier per-plane
[14:47:58] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[14:47:58] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[14:47:58] [PASSED] NV12 Modifier for inexistent plane
[14:47:58] [PASSED] NV12 Handle for inexistent plane
[14:47:58] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[14:47:58] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[14:47:58] [PASSED] YVU420 Normal sizes
[14:47:58] [PASSED] YVU420 Max sizes
[14:47:58] [PASSED] YVU420 Invalid pitch
[14:47:58] [PASSED] YVU420 Different pitches
[14:47:58] [PASSED] YVU420 Different buffer offsets/pitches
[14:47:58] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[14:47:58] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[14:47:58] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[14:47:58] [PASSED] YVU420 Valid modifier
[14:47:58] [PASSED] YVU420 Different modifiers per plane
[14:47:58] [PASSED] YVU420 Modifier for inexistent plane
[14:47:58] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[14:47:58] [PASSED] X0L2 Normal sizes
[14:47:58] [PASSED] X0L2 Max sizes
[14:47:58] [PASSED] X0L2 Invalid pitch
[14:47:58] [PASSED] X0L2 Pitch greater than minimum required
[14:47:58] [PASSED] X0L2 Handle for inexistent plane
[14:47:58] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[14:47:58] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[14:47:58] [PASSED] X0L2 Valid modifier
[14:47:58] [PASSED] X0L2 Modifier for inexistent plane
[14:47:58] =========== [PASSED] drm_test_framebuffer_create ===========
[14:47:58] [PASSED] drm_test_framebuffer_free
[14:47:58] [PASSED] drm_test_framebuffer_init
[14:47:58] [PASSED] drm_test_framebuffer_init_bad_format
[14:47:58] [PASSED] drm_test_framebuffer_init_dev_mismatch
[14:47:58] [PASSED] drm_test_framebuffer_lookup
[14:47:58] [PASSED] drm_test_framebuffer_lookup_inexistent
[14:47:58] [PASSED] drm_test_framebuffer_modifiers_not_supported
[14:47:58] ================= [PASSED] drm_framebuffer =================
[14:47:58] ================ drm_gem_shmem (8 subtests) ================
[14:47:58] [PASSED] drm_gem_shmem_test_obj_create
[14:47:58] [PASSED] drm_gem_shmem_test_obj_create_private
[14:47:58] [PASSED] drm_gem_shmem_test_pin_pages
[14:47:58] [PASSED] drm_gem_shmem_test_vmap
[14:47:58] [PASSED] drm_gem_shmem_test_get_sg_table
[14:47:58] [PASSED] drm_gem_shmem_test_get_pages_sgt
[14:47:58] [PASSED] drm_gem_shmem_test_madvise
[14:47:58] [PASSED] drm_gem_shmem_test_purge
[14:47:58] ================== [PASSED] drm_gem_shmem ==================
[14:47:58] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[14:47:58] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[14:47:58] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[14:47:58] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[14:47:58] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[14:47:58] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[14:47:58] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[14:47:58] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420  =======
[14:47:58] [PASSED] Automatic
[14:47:58] [PASSED] Full
[14:47:58] [PASSED] Limited 16:235
[14:47:58] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[14:47:58] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[14:47:58] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[14:47:58] [PASSED] drm_test_check_disable_connector
[14:47:58] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[14:47:58] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[14:47:58] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[14:47:58] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[14:47:58] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[14:47:58] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[14:47:58] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[14:47:58] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[14:47:58] [PASSED] drm_test_check_output_bpc_dvi
[14:47:58] [PASSED] drm_test_check_output_bpc_format_vic_1
[14:47:58] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[14:47:58] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[14:47:58] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[14:47:58] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[14:47:58] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[14:47:58] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[14:47:58] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[14:47:58] ============ drm_test_check_hdmi_color_format  =============
[14:47:58] [PASSED] AUTO -> RGB
[14:47:58] [PASSED] YCBCR422 -> YUV422
[14:47:58] [PASSED] YCBCR420 -> YUV420
[14:47:58] [PASSED] YCBCR444 -> YUV444
[14:47:58] [PASSED] RGB -> RGB
[14:47:58] ======== [PASSED] drm_test_check_hdmi_color_format =========
[14:47:58] ======== drm_test_check_hdmi_color_format_420_only  ========
[14:47:58] [PASSED] RGB should fail
[14:47:58] [PASSED] YUV444 should fail
[14:47:58] [PASSED] YUV422 should fail
[14:47:58] [PASSED] YUV420 should work
[14:47:58] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[14:47:58] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[14:47:58] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[14:47:58] [PASSED] drm_test_check_broadcast_rgb_value
[14:47:58] [PASSED] drm_test_check_bpc_8_value
[14:47:58] [PASSED] drm_test_check_bpc_10_value
[14:47:58] [PASSED] drm_test_check_bpc_12_value
[14:47:58] [PASSED] drm_test_check_format_value
[14:47:58] [PASSED] drm_test_check_tmds_char_value
[14:47:58] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[14:47:58] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[14:47:58] [PASSED] drm_test_check_mode_valid
[14:47:58] [PASSED] drm_test_check_mode_valid_reject
[14:47:58] [PASSED] drm_test_check_mode_valid_reject_rate
[14:47:58] [PASSED] drm_test_check_mode_valid_reject_max_clock
[14:47:58] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[14:47:58] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[14:47:58] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[14:47:58] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[14:47:58] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[14:47:59] [PASSED] drm_test_check_infoframes
[14:47:59] [PASSED] drm_test_check_reject_avi_infoframe
[14:47:59] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[14:47:59] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[14:47:59] [PASSED] drm_test_check_reject_audio_infoframe
[14:47:59] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[14:47:59] ================= drm_managed (2 subtests) =================
[14:47:59] [PASSED] drm_test_managed_release_action
[14:47:59] [PASSED] drm_test_managed_run_action
[14:47:59] =================== [PASSED] drm_managed ===================
[14:47:59] =================== drm_mm (6 subtests) ====================
[14:47:59] [PASSED] drm_test_mm_init
[14:47:59] [PASSED] drm_test_mm_debug
[14:47:59] [PASSED] drm_test_mm_align32
[14:47:59] [PASSED] drm_test_mm_align64
[14:47:59] [PASSED] drm_test_mm_lowest
[14:47:59] [PASSED] drm_test_mm_highest
[14:47:59] ===================== [PASSED] drm_mm ======================
[14:47:59] ============= drm_modes_analog_tv (5 subtests) =============
[14:47:59] [PASSED] drm_test_modes_analog_tv_mono_576i
[14:47:59] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[14:47:59] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[14:47:59] [PASSED] drm_test_modes_analog_tv_pal_576i
[14:47:59] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[14:47:59] =============== [PASSED] drm_modes_analog_tv ===============
[14:47:59] ============== drm_plane_helper (2 subtests) ===============
[14:47:59] =============== drm_test_check_plane_state  ================
[14:47:59] [PASSED] clipping_simple
[14:47:59] [PASSED] clipping_rotate_reflect
[14:47:59] [PASSED] positioning_simple
[14:47:59] [PASSED] upscaling
[14:47:59] [PASSED] downscaling
[14:47:59] [PASSED] rounding1
[14:47:59] [PASSED] rounding2
[14:47:59] [PASSED] rounding3
[14:47:59] [PASSED] rounding4
[14:47:59] =========== [PASSED] drm_test_check_plane_state ============
[14:47:59] =========== drm_test_check_invalid_plane_state  ============
[14:47:59] [PASSED] positioning_invalid
[14:47:59] [PASSED] upscaling_invalid
[14:47:59] [PASSED] downscaling_invalid
[14:47:59] ======= [PASSED] drm_test_check_invalid_plane_state ========
[14:47:59] ================ [PASSED] drm_plane_helper =================
[14:47:59] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[14:47:59] ====== drm_test_connector_helper_tv_get_modes_check  =======
[14:47:59] [PASSED] None
[14:47:59] [PASSED] PAL
[14:47:59] [PASSED] NTSC
[14:47:59] [PASSED] Both, NTSC Default
[14:47:59] [PASSED] Both, PAL Default
[14:47:59] [PASSED] Both, NTSC Default, with PAL on command-line
[14:47:59] [PASSED] Both, PAL Default, with NTSC on command-line
[14:47:59] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[14:47:59] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[14:47:59] ================== drm_rect (9 subtests) ===================
[14:47:59] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[14:47:59] [PASSED] drm_test_rect_clip_scaled_not_clipped
[14:47:59] [PASSED] drm_test_rect_clip_scaled_clipped
[14:47:59] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[14:47:59] ================= drm_test_rect_intersect  =================
[14:47:59] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[14:47:59] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[14:47:59] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[14:47:59] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[14:47:59] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[14:47:59] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[14:47:59] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[14:47:59] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[14:47:59] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[14:47:59] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[14:47:59] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[14:47:59] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[14:47:59] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[14:47:59] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[14:47:59] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[14:47:59] ============= [PASSED] drm_test_rect_intersect =============
[14:47:59] ================ drm_test_rect_calc_hscale  ================
[14:47:59] [PASSED] normal use
[14:47:59] [PASSED] out of max range
[14:47:59] [PASSED] out of min range
[14:47:59] [PASSED] zero dst
[14:47:59] [PASSED] negative src
[14:47:59] [PASSED] negative dst
[14:47:59] ============ [PASSED] drm_test_rect_calc_hscale ============
[14:47:59] ================ drm_test_rect_calc_vscale  ================
[14:47:59] [PASSED] normal use
[14:47:59] [PASSED] out of max range
[14:47:59] [PASSED] out of min range
[14:47:59] [PASSED] zero dst
[14:47:59] [PASSED] negative src
[14:47:59] [PASSED] negative dst
[14:47:59] ============ [PASSED] drm_test_rect_calc_vscale ============
[14:47:59] ================== drm_test_rect_rotate  ===================
[14:47:59] [PASSED] reflect-x
[14:47:59] [PASSED] reflect-y
[14:47:59] [PASSED] rotate-0
[14:47:59] [PASSED] rotate-90
[14:47:59] [PASSED] rotate-180
[14:47:59] [PASSED] rotate-270
[14:47:59] ============== [PASSED] drm_test_rect_rotate ===============
[14:47:59] ================ drm_test_rect_rotate_inv  =================
[14:47:59] [PASSED] reflect-x
[14:47:59] [PASSED] reflect-y
[14:47:59] [PASSED] rotate-0
[14:47:59] [PASSED] rotate-90
[14:47:59] [PASSED] rotate-180
[14:47:59] [PASSED] rotate-270
[14:47:59] ============ [PASSED] drm_test_rect_rotate_inv =============
[14:47:59] ==================== [PASSED] drm_rect =====================
[14:47:59] ============ drm_sysfb_modeset_test (1 subtest) ============
[14:47:59] ============ drm_test_sysfb_build_fourcc_list  =============
[14:47:59] [PASSED] no native formats
[14:47:59] [PASSED] XRGB8888 as native format
[14:47:59] [PASSED] remove duplicates
[14:47:59] [PASSED] convert alpha formats
[14:47:59] [PASSED] random formats
[14:47:59] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[14:47:59] ============= [PASSED] drm_sysfb_modeset_test ==============
[14:47:59] ================== drm_fixp (2 subtests) ===================
[14:47:59] [PASSED] drm_test_int2fixp
[14:47:59] [PASSED] drm_test_sm2fixp
[14:47:59] ==================== [PASSED] drm_fixp =====================
[14:47:59] ============================================================
[14:47:59] Testing complete. Ran 641 tests: passed: 641
[14:47:59] Elapsed time: 26.794s total, 1.787s configuring, 24.840s building, 0.149s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[14:47:59] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[14:48:00] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[14:48:10] Starting KUnit Kernel (1/1)...
[14:48:10] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[14:48:11] ============= refcount_interrupt (4 subtests) ==============
[14:48:11] [PASSED] test_single_irq_change
[14:48:11] [PASSED] test_nested_irq_change
[14:48:11] [PASSED] test_multiple_irq_change
[14:48:11] [PASSED] test_irq_save
[14:48:11] =============== [PASSED] refcount_interrupt ================
[14:48:11] ================= ttm_device (5 subtests) ==================
[14:48:11] [PASSED] ttm_device_init_basic
[14:48:11] [PASSED] ttm_device_init_multiple
[14:48:11] [PASSED] ttm_device_fini_basic
[14:48:11] [PASSED] ttm_device_init_no_vma_man
[14:48:11] ================== ttm_device_init_pools  ==================
[14:48:11] [PASSED] No DMA allocations, no DMA32 required
[14:48:11] [PASSED] DMA allocations, DMA32 required
[14:48:11] [PASSED] No DMA allocations, DMA32 required
[14:48:11] [PASSED] DMA allocations, no DMA32 required
[14:48:11] ============== [PASSED] ttm_device_init_pools ==============
[14:48:11] =================== [PASSED] ttm_device ====================
[14:48:11] ================== ttm_pool (8 subtests) ===================
[14:48:11] ================== ttm_pool_alloc_basic  ===================
[14:48:11] [PASSED] One page
[14:48:11] [PASSED] More than one page
[14:48:11] [PASSED] Above the allocation limit
[14:48:11] [PASSED] One page, with coherent DMA mappings enabled
[14:48:11] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[14:48:11] ============== [PASSED] ttm_pool_alloc_basic ===============
[14:48:11] ============== ttm_pool_alloc_basic_dma_addr  ==============
[14:48:11] [PASSED] One page
[14:48:11] [PASSED] More than one page
[14:48:11] [PASSED] Above the allocation limit
[14:48:11] [PASSED] One page, with coherent DMA mappings enabled
[14:48:11] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[14:48:11] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[14:48:11] [PASSED] ttm_pool_alloc_order_caching_match
[14:48:11] [PASSED] ttm_pool_alloc_caching_mismatch
[14:48:11] [PASSED] ttm_pool_alloc_order_mismatch
[14:48:11] [PASSED] ttm_pool_free_dma_alloc
[14:48:11] [PASSED] ttm_pool_free_no_dma_alloc
[14:48:11] [PASSED] ttm_pool_fini_basic
[14:48:11] ==================== [PASSED] ttm_pool =====================
[14:48:11] ================ ttm_resource (8 subtests) =================
[14:48:11] ================= ttm_resource_init_basic  =================
[14:48:11] [PASSED] Init resource in TTM_PL_SYSTEM
[14:48:11] [PASSED] Init resource in TTM_PL_VRAM
[14:48:11] [PASSED] Init resource in a private placement
[14:48:11] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[14:48:11] ============= [PASSED] ttm_resource_init_basic =============
[14:48:11] [PASSED] ttm_resource_init_pinned
[14:48:11] [PASSED] ttm_resource_fini_basic
[14:48:11] [PASSED] ttm_resource_manager_init_basic
[14:48:11] [PASSED] ttm_resource_manager_usage_basic
[14:48:11] [PASSED] ttm_resource_manager_set_used_basic
[14:48:11] [PASSED] ttm_sys_man_alloc_basic
[14:48:11] [PASSED] ttm_sys_man_free_basic
[14:48:11] ================== [PASSED] ttm_resource ===================
[14:48:11] =================== ttm_tt (15 subtests) ===================
[14:48:11] ==================== ttm_tt_init_basic  ====================
[14:48:11] [PASSED] Page-aligned size
[14:48:11] [PASSED] Extra pages requested
[14:48:11] ================ [PASSED] ttm_tt_init_basic ================
[14:48:11] [PASSED] ttm_tt_init_misaligned
[14:48:11] [PASSED] ttm_tt_fini_basic
[14:48:11] [PASSED] ttm_tt_fini_sg
[14:48:11] [PASSED] ttm_tt_fini_shmem
[14:48:11] [PASSED] ttm_tt_create_basic
[14:48:11] [PASSED] ttm_tt_create_invalid_bo_type
[14:48:11] [PASSED] ttm_tt_create_ttm_exists
[14:48:11] [PASSED] ttm_tt_create_failed
[14:48:11] [PASSED] ttm_tt_destroy_basic
[14:48:11] [PASSED] ttm_tt_populate_null_ttm
[14:48:11] [PASSED] ttm_tt_populate_populated_ttm
[14:48:11] [PASSED] ttm_tt_unpopulate_basic
[14:48:11] [PASSED] ttm_tt_unpopulate_empty_ttm
[14:48:11] [PASSED] ttm_tt_swapin_basic
[14:48:11] ===================== [PASSED] ttm_tt ======================
[14:48:11] =================== ttm_bo (14 subtests) ===================
[14:48:11] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[14:48:11] [PASSED] Cannot be interrupted and sleeps
[14:48:11] [PASSED] Cannot be interrupted, locks straight away
[14:48:11] [PASSED] Can be interrupted, sleeps
[14:48:11] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[14:48:11] [PASSED] ttm_bo_reserve_locked_no_sleep
[14:48:11] [PASSED] ttm_bo_reserve_no_wait_ticket
[14:48:11] [PASSED] ttm_bo_reserve_double_resv
[14:48:11] [PASSED] ttm_bo_reserve_interrupted
[14:48:11] [PASSED] ttm_bo_reserve_deadlock
[14:48:11] [PASSED] ttm_bo_unreserve_basic
[14:48:11] [PASSED] ttm_bo_unreserve_pinned
[14:48:11] [PASSED] ttm_bo_unreserve_bulk
[14:48:11] [PASSED] ttm_bo_fini_basic
[14:48:11] [PASSED] ttm_bo_fini_shared_resv
[14:48:11] [PASSED] ttm_bo_pin_basic
[14:48:11] [PASSED] ttm_bo_pin_unpin_resource
[14:48:11] [PASSED] ttm_bo_multiple_pin_one_unpin
[14:48:11] ===================== [PASSED] ttm_bo ======================
[14:48:11] ============== ttm_bo_validate (22 subtests) ===============
[14:48:11] ============== ttm_bo_init_reserved_sys_man  ===============
[14:48:11] [PASSED] Buffer object for userspace
[14:48:11] [PASSED] Kernel buffer object
[14:48:11] [PASSED] Shared buffer object
[14:48:11] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[14:48:11] ============== ttm_bo_init_reserved_mock_man  ==============
[14:48:11] [PASSED] Buffer object for userspace
[14:48:11] [PASSED] Kernel buffer object
[14:48:11] [PASSED] Shared buffer object
[14:48:11] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[14:48:11] [PASSED] ttm_bo_init_reserved_resv
[14:48:11] ================== ttm_bo_validate_basic  ==================
[14:48:11] [PASSED] Buffer object for userspace
[14:48:11] [PASSED] Kernel buffer object
[14:48:11] [PASSED] Shared buffer object
[14:48:11] ============== [PASSED] ttm_bo_validate_basic ==============
[14:48:11] [PASSED] ttm_bo_validate_invalid_placement
[14:48:11] ============= ttm_bo_validate_same_placement  ==============
[14:48:11] [PASSED] System manager
[14:48:11] [PASSED] VRAM manager
[14:48:11] ========= [PASSED] ttm_bo_validate_same_placement ==========
[14:48:11] [PASSED] ttm_bo_validate_failed_alloc
[14:48:11] [PASSED] ttm_bo_validate_pinned
[14:48:11] [PASSED] ttm_bo_validate_busy_placement
[14:48:11] ================ ttm_bo_validate_multihop  =================
[14:48:11] [PASSED] Buffer object for userspace
[14:48:11] [PASSED] Kernel buffer object
[14:48:11] [PASSED] Shared buffer object
[14:48:11] ============ [PASSED] ttm_bo_validate_multihop =============
[14:48:11] ========== ttm_bo_validate_no_placement_signaled  ==========
[14:48:11] [PASSED] Buffer object in system domain, no page vector
[14:48:11] [PASSED] Buffer object in system domain with an existing page vector
[14:48:11] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[14:48:11] ======== ttm_bo_validate_no_placement_not_signaled  ========
[14:48:11] [PASSED] Buffer object for userspace
[14:48:11] [PASSED] Kernel buffer object
[14:48:11] [PASSED] Shared buffer object
[14:48:11] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[14:48:11] [PASSED] ttm_bo_validate_move_fence_signaled
[14:48:11] ========= ttm_bo_validate_move_fence_not_signaled  =========
[14:48:11] [PASSED] Waits for GPU
[14:48:11] [PASSED] Tries to lock straight away
[14:48:11] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[14:48:11] [PASSED] ttm_bo_validate_swapout
[14:48:11] [PASSED] ttm_bo_validate_happy_evict
[14:48:11] [PASSED] ttm_bo_validate_all_pinned_evict
[14:48:11] [PASSED] ttm_bo_validate_allowed_only_evict
[14:48:11] [PASSED] ttm_bo_validate_deleted_evict
[14:48:11] [PASSED] ttm_bo_validate_busy_domain_evict
[14:48:11] [PASSED] ttm_bo_validate_evict_gutting
[14:48:11] [PASSED] ttm_bo_validate_recrusive_evict
[14:48:11] ================= [PASSED] ttm_bo_validate =================
[14:48:11] ============================================================
[14:48:11] Testing complete. Ran 106 tests: passed: 106
[14:48:11] Elapsed time: 12.081s total, 1.807s configuring, 10.009s building, 0.234s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[14:48:11] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[14:48: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
[14:48:21] Starting KUnit Kernel (1/1)...
[14:48:21] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[14:48:21] ============= refcount_interrupt (4 subtests) ==============
[14:48:21] [PASSED] test_single_irq_change
[14:48:21] [PASSED] test_nested_irq_change
[14:48:21] [PASSED] test_multiple_irq_change
[14:48:21] [PASSED] test_irq_save
[14:48:21] =============== [PASSED] refcount_interrupt ================
[14:48:21] =============== dma-buf-fence (12 subtests) ================
[14:48:21] [PASSED] test_sanitycheck
[14:48:21] [PASSED] test_signaling
[14:48:21] [PASSED] test_add_callback
[14:48:21] [PASSED] test_late_add_callback
[14:48:21] [PASSED] test_rm_callback
[14:48:21] [PASSED] test_late_rm_callback
[14:48:21] [PASSED] test_status
[14:48:21] [PASSED] test_error
[14:48:22] [PASSED] test_wait
[14:48:22] [PASSED] test_wait_timeout
[14:48:22] [PASSED] test_stub
[14:48:22] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[14:48:22] ================== [PASSED] dma-buf-fence ==================
[14:48:22] ============ dma-buf-fence-chain (11 subtests) =============
[14:48:22] [PASSED] test_sanitycheck
[14:48:22] [PASSED] test_find_seqno
[14:48:22] [PASSED] test_find_signaled
[14:48:22] [PASSED] test_find_out_of_order
[14:48:27] [PASSED] test_find_gap
[14:48:27] [PASSED] test_find_race
[14:48:27] [PASSED] test_signal_forward
[14:48:27] [PASSED] test_signal_backward
[14:48:27] [PASSED] test_wait_forward
[14:48:27] [PASSED] test_wait_backward
[14:48:27] [PASSED] test_wait_random
[14:48:27] =============== [PASSED] dma-buf-fence-chain ===============
[14:48:27] ============ dma-buf-fence-unwrap (10 subtests) ============
[14:48:27] [PASSED] test_sanitycheck
[14:48:27] [PASSED] test_unwrap_array
[14:48:27] [PASSED] test_unwrap_chain
[14:48:27] [PASSED] test_unwrap_chain_array
[14:48:27] [PASSED] test_unwrap_merge
[14:48:27] [PASSED] test_unwrap_merge_duplicate
[14:48:27] [PASSED] test_unwrap_merge_seqno
[14:48:27] [PASSED] test_unwrap_merge_order
[14:48:27] [PASSED] test_unwrap_merge_complex
[14:48:27] [PASSED] test_unwrap_merge_complex_seqno
[14:48:27] ============== [PASSED] dma-buf-fence-unwrap ===============
[14:48:27] ================ dma-buf-resv (5 subtests) =================
[14:48:27] [PASSED] test_sanitycheck
[14:48:27] ===================== test_signaling  ======================
[14:48:27] [PASSED] kernel
[14:48:27] [PASSED] write
[14:48:27] [PASSED] read
[14:48:27] [PASSED] bookkeep
[14:48:27] ================= [PASSED] test_signaling ==================
[14:48:27] ====================== test_for_each  ======================
[14:48:27] [PASSED] kernel
[14:48:27] [PASSED] write
[14:48:27] [PASSED] read
[14:48:27] [PASSED] bookkeep
[14:48:27] ================== [PASSED] test_for_each ==================
[14:48:27] ================= test_for_each_unlocked  ==================
[14:48:27] [PASSED] kernel
[14:48:27] [PASSED] write
[14:48:27] [PASSED] read
[14:48:27] [PASSED] bookkeep
[14:48:27] ============= [PASSED] test_for_each_unlocked ==============
[14:48:27] ===================== test_get_fences  =====================
[14:48:27] [PASSED] kernel
[14:48:27] [PASSED] write
[14:48:27] [PASSED] read
[14:48:27] [PASSED] bookkeep
[14:48:27] ================= [PASSED] test_get_fences =================
[14:48:27] ================== [PASSED] dma-buf-resv ===================
[14:48:27] ============================================================
[14:48:27] Testing complete. Ran 54 tests: passed: 53, skipped: 1
[14:48:27] Elapsed time: 15.850s total, 1.790s configuring, 8.689s building, 5.355s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v4 7/8] drm/xe/mmio_gem: reject VM_EXEC and drop VM_DONTCOPY
  2026-09-08 13:50 ` [PATCH v4 7/8] drm/xe/mmio_gem: reject VM_EXEC and drop VM_DONTCOPY Matthew Auld
@ 2026-09-08 14:57   ` Thomas Hellström
  0 siblings, 0 replies; 15+ messages in thread
From: Thomas Hellström @ 2026-09-08 14:57 UTC (permalink / raw)
  To: Matthew Auld, intel-xe; +Cc: Tejas Upadhyay, Matthew Brost, Ilia Levi


On 9/8/26 15:50, Matthew Auld wrote:
> Hardware MMIO registers should never be executable; reject VM_EXEC
> at mmap time and clear VM_MAYEXEC to prevent later mprotect attempts.
>
> Also drop VM_DONTCOPY so that child processes across fork() can
> inherit the mapping and lazily fault in the PFNs, matching standard
> DRM GEM semantics and making the existing drm_gem_vm_open() callback
> functional.
>
> This aligns with existing PCI_BARRIER, which will use this in the next
> patch. We don't want any noticeable behaviour change there, since this
> will be user visible. This will also be the first user.
>
> Assisted-by: LLM
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Ilia Levi <ilia.levi@intel.com>

Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>



> ---
>   drivers/gpu/drm/xe/xe_mmio_gem.c | 7 +++++--
>   1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_mmio_gem.c b/drivers/gpu/drm/xe/xe_mmio_gem.c
> index 5ffe03d36190..3cdc9538957d 100644
> --- a/drivers/gpu/drm/xe/xe_mmio_gem.c
> +++ b/drivers/gpu/drm/xe/xe_mmio_gem.c
> @@ -177,9 +177,12 @@ static int xe_mmio_gem_mmap(struct drm_gem_object *base, struct vm_area_struct *
>   	if ((vma->vm_flags & VM_SHARED) == 0)
>   		return -EINVAL;
>   
> +	if (vma->vm_flags & VM_EXEC)
> +		return -EINVAL;
> +
>   	vma->vm_page_prot = pgprot_noncached(vma_get_page_prot(vma));
> -	vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP |
> -		     VM_DONTCOPY | VM_NORESERVE);
> +	vm_flags_mod(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP |
> +		     VM_NORESERVE, VM_MAYEXEC);
>   
>   	/* Defer actual mapping to the fault handler. */
>   	return 0;

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v4 8/8] drm/xe: convert PCI barrier mmap to use xe_mmio_gem
  2026-09-08 13:50 ` [PATCH v4 8/8] drm/xe: convert PCI barrier mmap to use xe_mmio_gem Matthew Auld
  2026-09-08 14:09   ` sashiko-bot
@ 2026-09-08 15:07   ` Thomas Hellström
  1 sibling, 0 replies; 15+ messages in thread
From: Thomas Hellström @ 2026-09-08 15:07 UTC (permalink / raw)
  To: Matthew Auld, intel-xe; +Cc: Tejas Upadhyay, Matthew Brost, Ilia Levi


On 9/8/26 15:50, Matthew Auld wrote:
> Convert the PCI barrier mmap over to use xe_mmio_gem, which is a good
> match for this functionality. This has the following advantages:
>
>   1. Removes a bunch of code.
>   2. Replaces the fragile hard coded fake offset design.
>   3. Adds the first user for xe_mmio_gem, which is preferred over nuking
>      it. There are also potentially other upcoming usecases wanting this
>      type of functionality, so having standard component to do this would
>      be good.
>
> There shouldn't be any big functional change here. From userspace pov,
> they still query the fake offset like before, just that now it is no
> longer hard coded in the KMD.
>
> Assisted-by: LLM
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Ilia Levi <ilia.levi@intel.com>
> Reviewed-by: Ilia Levi <ilia.levi@intel.com>
> ---
>   drivers/gpu/drm/xe/xe_bo.c           |  24 +++++--
>   drivers/gpu/drm/xe/xe_bo.h           |   1 -
>   drivers/gpu/drm/xe/xe_device.c       | 104 +++------------------------
>   drivers/gpu/drm/xe/xe_device_types.h |  12 ++++
>   4 files changed, 41 insertions(+), 100 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index b162753cebb7..8de1b9a94315 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -28,6 +28,7 @@
>   #include "xe_ggtt.h"
>   #include "xe_map.h"
>   #include "xe_migrate.h"
> +#include "xe_mmio_gem.h"
>   #include "xe_pat.h"
>   #include "xe_pm.h"
>   #include "xe_preempt_fence.h"
> @@ -3680,18 +3681,31 @@ int xe_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
>   		return -EINVAL;
>   
>   	if (args->flags & DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER) {
> +		struct xe_file *xef = file->driver_priv;
> +
>   		if (XE_IOCTL_DBG(xe, !IS_DGFX(xe)))
>   			return -EINVAL;
>   
>   		if (XE_IOCTL_DBG(xe, args->handle))
>   			return -EINVAL;
>   
> -		if (XE_IOCTL_DBG(xe, PAGE_SIZE > SZ_4K))
> -			return -EINVAL;
> +		guard(mutex)(&xef->mmio_gem.lock);

Can we use scoped_guard() to "annotate" the locked region?


> +		if (!xef->mmio_gem.pci_barrier) {
> +			phys_addr_t phys_addr;
> +			int err;
>   
> -		BUILD_BUG_ON(((XE_PCI_BARRIER_MMAP_OFFSET >> XE_PTE_SHIFT) +
> -			      SZ_4K) >= DRM_FILE_PAGE_OFFSET_START);
> -		args->offset = XE_PCI_BARRIER_MMAP_OFFSET;
> +#define LAST_DB_PAGE_OFFSET 0x7ff000
> +			phys_addr = pci_resource_start(to_pci_dev(dev->dev), 0) +
> +				LAST_DB_PAGE_OFFSET;
> +			xef->mmio_gem.pci_barrier = xe_mmio_gem_create(xe, file, phys_addr, SZ_4K);
> +			if (IS_ERR(xef->mmio_gem.pci_barrier)) {
> +				err = PTR_ERR(xef->mmio_gem.pci_barrier);
> +				xef->mmio_gem.pci_barrier = NULL;
> +				return err;
> +			}
> +		}
> +
> +		args->offset = xe_mmio_gem_mmap_offset(xef->mmio_gem.pci_barrier);
>   		return 0;
>   	}
>   
> diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
> index eede678ad303..290ca624e2a7 100644
> --- a/drivers/gpu/drm/xe/xe_bo.h
> +++ b/drivers/gpu/drm/xe/xe_bo.h
> @@ -87,7 +87,6 @@
>   
>   #define XE_BO_PROPS_INVALID	(-1)
>   
> -#define XE_PCI_BARRIER_MMAP_OFFSET	(0x50 << XE_PTE_SHIFT)
>   
>   /**
>    * enum xe_madv_purgeable_state - Buffer object purgeable state enumeration
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 8583b2e9ecf4..515fae065178 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -50,6 +50,7 @@
>   #include "xe_late_bind_fw.h"
>   #include "xe_log.h"
>   #include "xe_mmio.h"
> +#include "xe_mmio_gem.h"
>   #include "xe_module.h"
>   #include "xe_nvm.h"
>   #include "xe_oa.h"
> @@ -111,6 +112,8 @@ static int xe_file_open(struct drm_device *dev, struct drm_file *file)
>   	mutex_init(&xef->exec_queue.lock);
>   	xa_init_flags(&xef->exec_queue.xa, XA_FLAGS_ALLOC1);
>   
> +	mutex_init(&xef->mmio_gem.lock);
> +
>   	file->driver_priv = xef;
>   	kref_init(&xef->refcount);
>   
> @@ -133,6 +136,8 @@ static void xe_file_destroy(struct kref *ref)
>   	xa_destroy(&xef->vm.xa);
>   	mutex_destroy(&xef->vm.lock);
>   
> +	mutex_destroy(&xef->mmio_gem.lock);
> +
>   	xe_drm_client_put(xef->client);
>   	kfree(xef->process_name);
>   	kfree(xef);
> @@ -189,6 +194,11 @@ static void xe_file_close(struct drm_device *dev, struct drm_file *file)
>   	xa_for_each(&xef->vm.xa, idx, vm)
>   		xe_vm_close_and_put(vm);
>   
> +	if (xef->mmio_gem.pci_barrier) {
> +		xe_mmio_gem_destroy(xef->mmio_gem.pci_barrier, file);
> +		xef->mmio_gem.pci_barrier = NULL;
> +	}
> +

While we shouldn't be able to race here, Perhaps lock this anyway to 
make static analyzers happy?

>   	xe_file_put(xef);
>   }
>   
> @@ -258,95 +268,6 @@ static long xe_drm_compat_ioctl(struct file *file, unsigned int cmd, unsigned lo
>   #define xe_drm_compat_ioctl NULL
>   #endif
>   
> -static void barrier_open(struct vm_area_struct *vma)
> -{
> -	drm_dev_get(vma->vm_private_data);
> -}
> -
> -static void barrier_close(struct vm_area_struct *vma)
> -{
> -	drm_dev_put(vma->vm_private_data);
> -}
> -
> -static void barrier_release_dummy_page(struct drm_device *dev, void *res)
> -{
> -	struct page *dummy_page = (struct page *)res;
> -
> -	__free_page(dummy_page);
> -}
> -
> -static vm_fault_t barrier_fault(struct vm_fault *vmf)
> -{
> -	struct drm_device *dev = vmf->vma->vm_private_data;
> -	struct vm_area_struct *vma = vmf->vma;
> -	vm_fault_t ret = VM_FAULT_NOPAGE;
> -	pgprot_t prot;
> -	int idx;
> -
> -	prot = vma_get_page_prot(vma);
> -
> -	if (drm_dev_enter(dev, &idx)) {
> -		unsigned long pfn;
> -
> -#define LAST_DB_PAGE_OFFSET 0x7ff001
> -		pfn = PHYS_PFN(pci_resource_start(to_pci_dev(dev->dev), 0) +
> -				LAST_DB_PAGE_OFFSET);
> -		ret = vmf_insert_pfn_prot(vma, vma->vm_start, pfn,
> -					  pgprot_noncached(prot));
> -		drm_dev_exit(idx);
> -	} else {
> -		struct page *page;
> -
> -		/* Allocate new dummy page to map all the VA range in this VMA to it*/
> -		page = alloc_page(GFP_KERNEL | __GFP_ZERO);
> -		if (!page)
> -			return VM_FAULT_OOM;
> -
> -		/* Set the page to be freed using drmm release action */
> -		if (drmm_add_action_or_reset(dev, barrier_release_dummy_page, page))
> -			return VM_FAULT_OOM;
> -
> -		ret = vmf_insert_pfn_prot(vma, vma->vm_start, page_to_pfn(page),
> -					  prot);
> -	}
> -
> -	return ret;
> -}
> -
> -static const struct vm_operations_struct vm_ops_barrier = {
> -	.open = barrier_open,
> -	.close = barrier_close,
> -	.fault = barrier_fault,
> -};
> -
> -static int xe_pci_barrier_mmap(struct file *filp,
> -			       struct vm_area_struct *vma)
> -{
> -	struct drm_file *priv = filp->private_data;
> -	struct drm_device *dev = priv->minor->dev;
> -	struct xe_device *xe = to_xe_device(dev);
> -
> -	if (!IS_DGFX(xe))
> -		return -EINVAL;
> -
> -	if (vma->vm_end - vma->vm_start > SZ_4K)
> -		return -EINVAL;
> -
> -	if (vma_is_cow_mapping(vma))
> -		return -EINVAL;
> -
> -	if (vma->vm_flags & (VM_READ | VM_EXEC))
> -		return -EINVAL;
> -
> -	vm_flags_clear(vma, VM_MAYREAD | VM_MAYEXEC);
> -	vm_flags_set(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP | VM_IO);
> -	vma->vm_ops = &vm_ops_barrier;
> -	vma->vm_private_data = dev;
> -	drm_dev_get(vma->vm_private_data);
> -
> -	return 0;
> -}
> -
>   static int xe_mmap(struct file *filp, struct vm_area_struct *vma)
>   {
>   	struct drm_file *priv = filp->private_data;
> @@ -355,11 +276,6 @@ static int xe_mmap(struct file *filp, struct vm_area_struct *vma)
>   	if (drm_dev_is_unplugged(dev))
>   		return -ENODEV;
>   
> -	switch (vma->vm_pgoff) {
> -	case XE_PCI_BARRIER_MMAP_OFFSET >> XE_PTE_SHIFT:
> -		return xe_pci_barrier_mmap(filp, vma);
> -	}
> -
>   	return drm_gem_mmap(filp, vma);
>   }
>   
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index 180d450a6deb..0391a20646cf 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -40,6 +40,7 @@ struct intel_display;
>   struct intel_dg_nvm_dev;
>   struct xe_ggtt;
>   struct xe_i2c;
> +struct xe_mmio_gem;
>   struct xe_pat_ops;
>   struct xe_pxp;
>   struct xe_ttm_stolen_mgr;
> @@ -676,6 +677,17 @@ struct xe_file {
>   
>   	/** @refcount: ref count of this xe file */
>   	struct kref refcount;
> +
> +	/** @mmio_gem: MMIO GEM objects for this xe file */
> +	struct {
> +		/**
> +		 * @mmio_gem.lock: Protects allocation and attach of MMIO GEM
> +		 * objects (singleton).


... And if so, update the docs here?


> +		 */
> +		struct mutex lock;
> +		/** @mmio_gem.pci_barrier: MMIO GEM object for PCI barrier mmap. */
> +		struct xe_mmio_gem *pci_barrier;
> +	} mmio_gem;
>   };
>   
>   #endif

^ permalink raw reply	[flat|nested] 15+ messages in thread

* ✓ Xe.CI.BAT: success for drm/xe/mmio_gem: fix fault handler and destroy path (rev4)
  2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
                   ` (8 preceding siblings ...)
  2026-09-08 14:48 ` ✓ CI.KUnit: success for drm/xe/mmio_gem: fix fault handler and destroy path (rev4) Patchwork
@ 2026-09-08 15:25 ` Patchwork
  9 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-09-08 15:25 UTC (permalink / raw)
  To: Levi, Ilia; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 881 bytes --]

== Series Details ==

Series: drm/xe/mmio_gem: fix fault handler and destroy path (rev4)
URL   : https://patchwork.freedesktop.org/series/167217/
State : success

== Summary ==

CI Bug Log - changes from xe-5706-408d923f7b468d9e5cc7bbc62c716ca07f7b7d9b_BAT -> xe-pw-167217v4_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (14 -> 14)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


Build changes
-------------

  * Linux: xe-5706-408d923f7b468d9e5cc7bbc62c716ca07f7b7d9b -> xe-pw-167217v4

  IGT_9085: 9085
  xe-5706-408d923f7b468d9e5cc7bbc62c716ca07f7b7d9b: 408d923f7b468d9e5cc7bbc62c716ca07f7b7d9b
  xe-pw-167217v4: 167217v4

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167217v4/index.html

[-- Attachment #2: Type: text/html, Size: 1429 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2026-09-08 15:25 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-08 13:49 [PATCH v4 0/8] drm/xe/mmio_gem: fix fault handler and destroy path Matthew Auld
2026-09-08 13:49 ` [PATCH v4 1/8] drm/xe/mmio_gem: forbid VMA split Matthew Auld
2026-09-08 13:49 ` [PATCH v4 2/8] drm/xe/mmio_gem: use write-back mapping for dummy page Matthew Auld
2026-09-08 13:49 ` [PATCH v4 3/8] drm/xe/mmio_gem: simplify fault handler loop Matthew Auld
2026-09-08 13:50 ` [PATCH v4 4/8] drm/xe/mmio_gem: Revoke drm_vma_node on xe_mmio_gem destroy Matthew Auld
2026-09-08 13:50 ` [PATCH v4 5/8] drm/xe/mmio_gem: cache the dummy page per object Matthew Auld
2026-09-08 13:50 ` [PATCH v4 6/8] drm/xe/mmio_gem: fix destroy flow Matthew Auld
2026-09-08 13:50 ` [PATCH v4 7/8] drm/xe/mmio_gem: reject VM_EXEC and drop VM_DONTCOPY Matthew Auld
2026-09-08 14:57   ` Thomas Hellström
2026-09-08 13:50 ` [PATCH v4 8/8] drm/xe: convert PCI barrier mmap to use xe_mmio_gem Matthew Auld
2026-09-08 14:09   ` sashiko-bot
2026-09-08 14:21     ` Matthew Auld
2026-09-08 15:07   ` Thomas Hellström
2026-09-08 14:48 ` ✓ CI.KUnit: success for drm/xe/mmio_gem: fix fault handler and destroy path (rev4) Patchwork
2026-09-08 15:25 ` ✓ Xe.CI.BAT: " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox