Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V2 0/3] drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages
@ 2026-11-12 12:43 Tejas Upadhyay
  2026-11-12 12:43 ` [PATCH V2 1/3] drm/xe/vram: add " Tejas Upadhyay
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Tejas Upadhyay @ 2026-11-12 12:43 UTC (permalink / raw)
  To: intel-xe; +Cc: himal.prasad.ghimiray, matthew.brost, Tejas Upadhyay

The existing bad-page flow soft-offlines a VRAM page on the first HW
report and promotes it to a permanent (hard) retirement on the second
report at the same address. Once soft-offlined, a page stays reserved
forever, which over-punishes a single transient DBE caused by a
one-off environmental disturbance -- the page remains unusable until
the next reboot/probe even if it never faults again.

This series adds a per-VRAM-manager decay timer so a SOFT-offlined
page is automatically reinstated after a configurable window (default
24h) of no further reports at that address, configurable via configfs
(bad_page_decay_secs, 0 disables). HARD-offlined pages -- i.e. pages
that have faulted a second time, or that are reloaded from firmware's
non-volatile permanent list at probe -- are never eligible for decay
and remain permanently retired, as before.

Patch 1 introduces the core feature. Patches 2 and 3 are fixes for two
issues found during internal review before this series was ever
posted:

  - Patch 2 : Pages reloaded from firmware's permanent
    list at boot were being created as SOFT instead of HARD, making
    already-confirmed-bad memory silently eligible for reinstatement
    once the decay window elapsed.

  - Patch 3 : The decay GC worker rescheduled itself
    unconditionally, so once started it never went idle even after
    every tracked page had decayed away or been promoted to HARD.

IGT coverage:
https://patchwork.freedesktop.org/patch/765064/

Tejas Upadhyay (3):
  drm/xe/vram: add decay-based reinstatement of soft-offlined VRAM pages
  drm/xe/vram: don't let firmware-confirmed permanent bad pages decay
    back in
  drm/xe/vram: stop decay worker from rescheduling itself forever

 drivers/gpu/drm/xe/xe_configfs.c           | 55 +++++++++++++++
 drivers/gpu/drm/xe/xe_configfs.h           |  1 +
 drivers/gpu/drm/xe/xe_debugfs.c            |  2 +-
 drivers/gpu/drm/xe/xe_ras.c                |  7 +-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.c       | 82 ++++++++++++++++++++--
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.h       |  2 +-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 16 +++++
 7 files changed, 157 insertions(+), 8 deletions(-)

-- 
2.52.0


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

* [PATCH V2 1/3] drm/xe/vram: add decay-based reinstatement of soft-offlined VRAM pages
  2026-11-12 12:43 [PATCH V2 0/3] drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages Tejas Upadhyay
@ 2026-11-12 12:43 ` Tejas Upadhyay
  2026-11-12 13:03   ` sashiko-bot
  2026-11-12 12:43 ` [PATCH V2 2/3] drm/xe/vram: don't let firmware-confirmed permanent bad pages decay back in Tejas Upadhyay
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: Tejas Upadhyay @ 2026-11-12 12:43 UTC (permalink / raw)
  To: intel-xe; +Cc: himal.prasad.ghimiray, matthew.brost, Tejas Upadhyay

The existing bad-page flow soft-offlines a VRAM page on the first HW
report and promotes it to a permanent (hard) retirement on the second
report at the same address. Once soft-offlined a page stays offline
forever, which over-punishes transient DBE errors: a single hit caused
by a one-off environmental disturbance keeps the page reserved until
the next reboot / probe.

This change adds a per VRAM-manager decay timer so that a SOFT-offlined
page is automatically reinstated after the configured decay window
(default 24 hours) of no further reports at that address. HARD-offlined
pages continue to be permanent.

Also adds the xe_page_offline_mode enum (SOFT/HARD) and per-entry mode
tracking with SOFT->HARD promotion on second hit at the same address.

Configuration via configfs bad_page_decay_secs (default 86400, 0 disables).

IGT coverage:
https://patchwork.freedesktop.org/patch/765064/

Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
 drivers/gpu/drm/xe/xe_configfs.c           | 55 +++++++++++++++++++
 drivers/gpu/drm/xe/xe_configfs.h           |  1 +
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.c       | 64 +++++++++++++++++++++-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 16 ++++++
 4 files changed, 135 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 2ddd707a6dbd..306c4019aa58 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -305,6 +305,7 @@ struct xe_config_group_device {
 		bool enable_psmi;
 		bool enable_multi_queue;
 		bool disable_vram_page_offline;
+		u32 bad_page_decay_secs;
 		struct {
 			unsigned int max_vfs;
 			bool admin_only_pf;
@@ -327,6 +328,7 @@ static const struct xe_config_device device_defaults = {
 	.enable_psmi = false,
 	.enable_multi_queue = true,
 	.disable_vram_page_offline = false,
+	.bad_page_decay_secs = 24 * 60 * 60,
 	.sriov = {
 		.max_vfs = XE_DEFAULT_MAX_VFS,
 		.admin_only_pf = XE_DEFAULT_ADMIN_ONLY_PF,
@@ -702,6 +704,36 @@ static ssize_t disable_vram_page_offline_store(struct config_item *item,
 	return len;
 }
 
+static ssize_t bad_page_decay_secs_show(struct config_item *item, char *page)
+{
+	struct xe_config_group_device *dev = to_xe_config_group_device(item);
+
+	return sprintf(page, "%u\n", dev->config.bad_page_decay_secs);
+}
+
+static ssize_t bad_page_decay_secs_store(struct config_item *item,
+					 const char *page, size_t len)
+{
+	struct xe_config_group_device *dev = to_xe_config_group_device(item);
+	u32 val;
+	int ret;
+
+	ret = kstrtou32(page, 0, &val);
+	if (ret)
+		return ret;
+
+	if (val > jiffies_to_msecs(MAX_JIFFY_OFFSET) / 1000)
+		return -EINVAL;
+
+	guard(mutex)(&dev->lock);
+	if (is_bound(dev))
+		return -EBUSY;
+
+	dev->config.bad_page_decay_secs = val;
+
+	return len;
+}
+
 static bool wa_bb_read_advance(bool dereference, char **p,
 			       const char *append, size_t len,
 			       size_t *max_size)
@@ -943,6 +975,7 @@ CONFIGFS_ATTR(, enable_multi_queue);
 CONFIGFS_ATTR(, migrate_ulls_period_ms);
 CONFIGFS_ATTR(, enable_psmi);
 CONFIGFS_ATTR(, disable_vram_page_offline);
+CONFIGFS_ATTR(, bad_page_decay_secs);
 CONFIGFS_ATTR(, engines_allowed);
 CONFIGFS_ATTR(, gt_types_allowed);
 CONFIGFS_ATTR(, survivability_mode);
@@ -954,6 +987,7 @@ static struct configfs_attribute *xe_config_device_attrs[] = {
 	&attr_migrate_ulls_period_ms,
 	&attr_enable_psmi,
 	&attr_disable_vram_page_offline,
+	&attr_bad_page_decay_secs,
 	&attr_engines_allowed,
 	&attr_gt_types_allowed,
 	&attr_survivability_mode,
@@ -1239,6 +1273,7 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
 	PRI_CUSTOM_ATTR("%d", enable_multi_queue);
 	PRI_CUSTOM_ATTR("%d", enable_psmi);
 	PRI_CUSTOM_ATTR("%d", disable_vram_page_offline);
+	PRI_CUSTOM_ATTR("%u", bad_page_decay_secs);
 	PRI_CUSTOM_ATTR("%d", survivability_mode);
 	PRI_CUSTOM_ATTR("%u", sriov.admin_only_pf);
 
@@ -1427,6 +1462,26 @@ bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev)
 	return ret;
 }
 
+/**
+ * xe_configfs_get_bad_page_decay_secs - get configfs bad_page_decay_secs setting
+ * @pdev: pci device
+ *
+ * Return: bad_page_decay_secs setting in configfs
+ */
+u32 xe_configfs_get_bad_page_decay_secs(struct pci_dev *pdev)
+{
+	struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+	u32 ret;
+
+	if (!dev)
+		return device_defaults.bad_page_decay_secs;
+
+	ret = dev->config.bad_page_decay_secs;
+	config_group_put(&dev->group);
+
+	return ret;
+}
+
 /**
  * xe_configfs_get_ctx_restore_mid_bb - get configfs ctx_restore_mid_bb setting
  * @pdev: pci device
diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
index d726800de26a..231148dc3338 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -25,6 +25,7 @@ bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev);
 bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev);
 u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev);
 bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev);
+u32 xe_configfs_get_bad_page_decay_secs(struct pci_dev *pdev);
 u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
 				       enum xe_engine_class class,
 				       const u32 **cs);
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 36d47de8b11b..ed0ca5f2b144 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -355,6 +355,51 @@ static const struct ttm_resource_manager_func xe_ttm_vram_mgr_func = {
 	.debug	= xe_ttm_vram_mgr_debug
 };
 
+static unsigned long xe_ttm_vram_decay_gc_period(struct xe_ttm_vram_mgr *mgr)
+{
+	unsigned long period = mgr->decay_interval_jiffies / 8;
+
+	if (period < msecs_to_jiffies(60 * 1000))
+		period = msecs_to_jiffies(60 * 1000);
+	return period;
+}
+
+static void xe_ttm_vram_decay_gc_worker(struct work_struct *work)
+{
+	struct xe_ttm_vram_mgr *mgr = container_of(to_delayed_work(work),
+						   struct xe_ttm_vram_mgr,
+						   decay_gc_work);
+	struct xe_ttm_vram_offline_resource *pos, *n;
+	struct xe_device *xe = ttm_to_xe_device(mgr->manager.bdev);
+	unsigned long now = jiffies;
+	unsigned long decay;
+
+	mutex_lock(&mgr->lock);
+	decay = mgr->decay_interval_jiffies;
+	if (!decay)
+		goto reschedule;
+
+	list_for_each_entry_safe(pos, n, &mgr->offlined_pages, offlined_link) {
+		if (pos->mode != XE_PAGE_OFFLINE_SOFT)
+			continue;
+		if (!time_after(now, pos->last_seen + decay))
+			continue;
+
+		list_del(&pos->offlined_link);
+		xe_ttm_vram_buddy_free(mgr, &pos->blocks, pos->used_visible_size);
+		--mgr->n_offlined_pages;
+		drm_info(&xe->drm,
+			 "decay: reinstated soft-offlined page 0x%llx\n",
+			 pos->addr);
+		kfree(pos);
+	}
+
+reschedule:
+	schedule_delayed_work(&mgr->decay_gc_work,
+			      xe_ttm_vram_decay_gc_period(mgr));
+	mutex_unlock(&mgr->lock);
+}
+
 static const struct dmem_cgroup_ops xe_ttm_vram_mgr_dmem_ops;
 
 static int xe_ttm_vram_mgr_dmem_reclaim(struct dmem_cgroup_pool_state *pool,
@@ -415,6 +460,8 @@ static void xe_ttm_vram_mgr_fini(struct drm_device *dev, void *arg)
 	struct xe_ttm_vram_mgr *mgr = arg;
 	struct ttm_resource_manager *man = &mgr->manager;
 
+	cancel_delayed_work_sync(&mgr->decay_gc_work);
+
 	mutex_lock(&mgr->lock);
 	xe_ttm_vram_free_bad_pages(mgr);
 	mutex_unlock(&mgr->lock);
@@ -438,6 +485,7 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_ttm_vram_mgr *mgr,
 	struct ttm_resource_manager *man = &mgr->manager;
 	struct dmem_cgroup_region *cg;
 	const char *name;
+	u32 decay_secs;
 	int err;
 
 	man->func = &xe_ttm_vram_mgr_func;
@@ -447,6 +495,9 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_ttm_vram_mgr *mgr,
 		return err;
 	INIT_LIST_HEAD(&mgr->offlined_pages);
 	INIT_LIST_HEAD(&mgr->queued_pages);
+	INIT_DELAYED_WORK(&mgr->decay_gc_work, xe_ttm_vram_decay_gc_worker);
+	decay_secs = xe_configfs_get_bad_page_decay_secs(to_pci_dev(xe->drm.dev));
+	mgr->decay_interval_jiffies = secs_to_jiffies(decay_secs);
 	mgr->default_page_size = default_page_size;
 	mgr->visible_size = io_size;
 	mgr->visible_avail = io_size;
@@ -725,8 +776,12 @@ static bool xe_ttm_vram_page_already_processed(struct xe_ttm_vram_mgr *mgr,
 	lockdep_assert_held(&mgr->lock);
 
 	list_for_each_entry(pos, &mgr->offlined_pages, offlined_link) {
-		if (pos->addr == addr)
+		if (pos->addr == addr) {
+			if (pos->mode == XE_PAGE_OFFLINE_SOFT)
+				pos->mode = XE_PAGE_OFFLINE_HARD;
+			pos->last_seen = jiffies;
 			return true;
+		}
 	}
 
 	list_for_each_entry(pos, &mgr->queued_pages, queued_link) {
@@ -804,6 +859,8 @@ static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
 		INIT_LIST_HEAD(&nentry->blocks);
 		nentry->status = XE_PAGE_RESERVE_PENDING;
 		nentry->addr = addr;
+		nentry->mode = XE_PAGE_OFFLINE_SOFT;
+		nentry->last_seen = jiffies;
 
 		if (block) {
 			pbo = xe_ttm_vram_block_owner_get(xe, block);
@@ -843,6 +900,11 @@ static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
 			}
 			++vram_mgr->n_offlined_pages;
 			list_add(&nentry->offlined_link, &vram_mgr->offlined_pages);
+			if (vram_mgr->decay_interval_jiffies &&
+			    !delayed_work_pending(&vram_mgr->decay_gc_work)) {
+				schedule_delayed_work(&vram_mgr->decay_gc_work,
+						      xe_ttm_vram_decay_gc_period(vram_mgr));
+			}
 			return ret;
 		}
 	}
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
index 4a2cd27a5b61..0a6d8f8c2aa8 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
@@ -7,8 +7,16 @@
 #define _XE_TTM_VRAM_MGR_TYPES_H_
 
 #include <linux/gpu_buddy.h>
+#include <linux/workqueue.h>
 #include <drm/ttm/ttm_device.h>
 
+#define XE_BAD_PAGE_DECAY_SECS_DEFAULT	(24 * 60 * 60)
+
+enum xe_page_offline_mode {
+	XE_PAGE_OFFLINE_SOFT = 0,
+	XE_PAGE_OFFLINE_HARD,
+};
+
 /**
  * struct xe_ttm_vram_mgr - Xe TTM VRAM manager
  *
@@ -37,6 +45,10 @@ struct xe_ttm_vram_mgr {
 	struct mutex lock;
 	/** @mem_type: The TTM memory type */
 	u32 mem_type;
+	/** @decay_gc_work: reinstates expired soft-offlined pages */
+	struct delayed_work decay_gc_work;
+	/** @decay_interval_jiffies: soft-offline decay interval */
+	unsigned long decay_interval_jiffies;
 };
 
 /**
@@ -79,6 +91,10 @@ struct xe_ttm_vram_offline_resource {
 	u64 addr;
 	/** @status: buddy reservation status */
 	enum xe_page_reserve_status status;
+	/** @mode: soft or hard offline mode */
+	enum xe_page_offline_mode mode;
+	/** @last_seen: most recent hardware report time */
+	unsigned long last_seen;
 };
 
 #endif
-- 
2.52.0


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

* [PATCH V2 2/3] drm/xe/vram: don't let firmware-confirmed permanent bad pages decay back in
  2026-11-12 12:43 [PATCH V2 0/3] drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages Tejas Upadhyay
  2026-11-12 12:43 ` [PATCH V2 1/3] drm/xe/vram: add " Tejas Upadhyay
@ 2026-11-12 12:43 ` Tejas Upadhyay
  2026-11-12 12:54   ` sashiko-bot
  2026-11-12 12:43 ` [PATCH V2 3/3] drm/xe/vram: stop decay worker from rescheduling itself forever Tejas Upadhyay
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: Tejas Upadhyay @ 2026-11-12 12:43 UTC (permalink / raw)
  To: intel-xe; +Cc: himal.prasad.ghimiray, matthew.brost, Tejas Upadhyay

get_offline_list() reloads pages from firmware's non-volatile permanent
storage at probe time -- these are pages already confirmed bad across a
prior boot, not a fresh first-time report. The reservation path always
marked new entries XE_PAGE_OFFLINE_SOFT regardless of origin, making
these permanently-bad pages eligible for the SOFT-offline decay timer
and silently reinstating known-bad memory back into the allocator once
the decay window elapsed.

Thread a 'permanent' flag from handle_page_offline() (derived from the
existing notify_fw distinction: get_offline_list() calls with
notify_fw=false, live/queued HW reports call with notify_fw=true) down
through xe_ttm_vram_handle_addr_fault() to the reservation path, so
these entries are created directly as XE_PAGE_OFFLINE_HARD and are
never eligible for decay.

The two debug/test fault-injection call sites (xe_ttm_vram_inject_fault(),
xe_debugfs.c's inject_mempage_offline_trigger()) pass permanent=false,
preserving existing first-time-report test behavior.

Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
 drivers/gpu/drm/xe/xe_debugfs.c      |  2 +-
 drivers/gpu/drm/xe/xe_ras.c          |  7 ++++++-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 17 +++++++++++------
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.h |  2 +-
 4 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index e59d4964d811..fb10a3ed7fc6 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_debugfs.c
@@ -119,7 +119,7 @@ static ssize_t inject_mempage_offline_trigger(struct file *f,
 		return xe_ttm_vram_inject_fault(xe) ?: size;
 
 	/* User provided PFN - convert to DPA and inject */
-	return xe_ttm_vram_handle_addr_fault(xe, pfn << PAGE_SHIFT) ?: size;
+		return xe_ttm_vram_handle_addr_fault(xe, pfn << PAGE_SHIFT, false) ?: size;
 }
 
 static const struct file_operations inject_mempage_offline_fops = {
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
index 2c01c183d02b..b57ff3dba279 100644
--- a/drivers/gpu/drm/xe/xe_ras.c
+++ b/drivers/gpu/drm/xe/xe_ras.c
@@ -332,7 +332,12 @@ static int handle_page_offline(struct xe_device *xe, u64 page_address, bool noti
 
 	addr = ALIGN_DOWN(page_address, PAGE_SIZE);
 
-	ret = xe_ttm_vram_handle_addr_fault(xe, addr);
+	/*
+	 * Pages sourced from firmware's permanent (non-volatile) list are
+	 * already confirmed bad from a prior boot (notify_fw == false); mark
+	 * them HARD so they're never eligible for decay-based reinstatement.
+	 */
+	ret = xe_ttm_vram_handle_addr_fault(xe, addr, !notify_fw);
 
 	/*
 	 * Handle return code from address fault handling function:
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index ed0ca5f2b144..07360ab7b072 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -837,7 +837,8 @@ static struct xe_bo *xe_ttm_vram_block_owner_get(struct xe_device *xe,
 }
 
 static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
-					    struct xe_ttm_vram_mgr *vram_mgr, struct gpu_buddy *mm)
+					    struct xe_ttm_vram_mgr *vram_mgr, struct gpu_buddy *mm,
+					    bool permanent)
 {
 	struct xe_ttm_vram_offline_resource *nentry;
 	struct xe_bo *pbo_to_put = NULL;
@@ -859,7 +860,11 @@ static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
 		INIT_LIST_HEAD(&nentry->blocks);
 		nentry->status = XE_PAGE_RESERVE_PENDING;
 		nentry->addr = addr;
-		nentry->mode = XE_PAGE_OFFLINE_SOFT;
+		/*
+		 * Pages reloaded from firmware's non-volatile permanent list are
+		 * already confirmed bad by a prior boot; never let them decay back in.
+		 */
+		nentry->mode = permanent ? XE_PAGE_OFFLINE_HARD : XE_PAGE_OFFLINE_SOFT;
 		nentry->last_seen = jiffies;
 
 		if (block) {
@@ -900,7 +905,7 @@ static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
 			}
 			++vram_mgr->n_offlined_pages;
 			list_add(&nentry->offlined_link, &vram_mgr->offlined_pages);
-			if (vram_mgr->decay_interval_jiffies &&
+			if (!permanent && vram_mgr->decay_interval_jiffies &&
 			    !delayed_work_pending(&vram_mgr->decay_gc_work)) {
 				schedule_delayed_work(&vram_mgr->decay_gc_work,
 						      xe_ttm_vram_decay_gc_period(vram_mgr));
@@ -986,7 +991,7 @@ static struct xe_vram_region *xe_ttm_vram_addr_to_region(struct xe_device *xe, u
  * pending if the blocks backing it could not be freed immediately; the
  * reservation is then completed from xe_ttm_vram_mgr_del().
  */
-int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
+int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr, bool permanent)
 {
 	struct xe_ttm_vram_mgr *vram_mgr;
 	struct xe_vram_region *vr;
@@ -1023,7 +1028,7 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
 	}
 
 	/* Reserve page at address */
-	return xe_ttm_vram_reserve_page_at_addr(xe, addr - vr->dpa_base, vram_mgr, mm);
+	return xe_ttm_vram_reserve_page_at_addr(xe, addr - vr->dpa_base, vram_mgr, mm, permanent);
 }
 EXPORT_SYMBOL(xe_ttm_vram_handle_addr_fault);
 
@@ -1074,7 +1079,7 @@ int xe_ttm_vram_inject_fault(struct xe_device *xe)
 		 * test-only path.
 		 */
 		if (found)
-			return xe_ttm_vram_handle_addr_fault(xe, addr + vr->dpa_base);
+			return xe_ttm_vram_handle_addr_fault(xe, addr + vr->dpa_base, false);
 
 		cond_resched();
 		if (addr == 0)
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
index d77f067d197b..3c1f1f8b8061 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
@@ -31,7 +31,7 @@ u64 xe_ttm_vram_get_avail(struct ttm_resource_manager *man);
 u64 xe_ttm_vram_get_cpu_visible_size(struct ttm_resource_manager *man);
 void xe_ttm_vram_get_used(struct ttm_resource_manager *man,
 			  u64 *used, u64 *used_visible);
-int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr);
+int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr, bool permanent);
 int xe_ttm_vram_inject_fault(struct xe_device *xe);
 
 static inline struct xe_ttm_vram_mgr_resource *
-- 
2.52.0


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

* [PATCH V2 3/3] drm/xe/vram: stop decay worker from rescheduling itself forever
  2026-11-12 12:43 [PATCH V2 0/3] drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages Tejas Upadhyay
  2026-11-12 12:43 ` [PATCH V2 1/3] drm/xe/vram: add " Tejas Upadhyay
  2026-11-12 12:43 ` [PATCH V2 2/3] drm/xe/vram: don't let firmware-confirmed permanent bad pages decay back in Tejas Upadhyay
@ 2026-11-12 12:43 ` Tejas Upadhyay
  2026-11-12 12:55   ` sashiko-bot
  2026-11-12 13:36 ` ✓ CI.KUnit: success for drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages Patchwork
  2026-11-12 14:21 ` ✓ Xe.CI.BAT: " Patchwork
  4 siblings, 1 reply; 9+ messages in thread
From: Tejas Upadhyay @ 2026-11-12 12:43 UTC (permalink / raw)
  To: intel-xe; +Cc: himal.prasad.ghimiray, matthew.brost, Tejas Upadhyay

xe_ttm_vram_decay_gc_worker() unconditionally called
schedule_delayed_work() at its tail, so once the worker started (on
the first SOFT-offlined page) it kept waking up forever at the decay
period, even after every SOFT entry had long since decayed away or
been promoted to HARD. The reservation path already re-arms the worker
via its !delayed_work_pending() check whenever a new SOFT entry
appears, so the perpetual self-reschedule serves no purpose once the
list has nothing left to track.

Track whether any SOFT entries remain after the sweep and only
reschedule in that case, letting the worker go idle otherwise.

Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 07360ab7b072..7613024a1410 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -373,17 +373,20 @@ static void xe_ttm_vram_decay_gc_worker(struct work_struct *work)
 	struct xe_device *xe = ttm_to_xe_device(mgr->manager.bdev);
 	unsigned long now = jiffies;
 	unsigned long decay;
+	bool soft_remaining = false;
 
 	mutex_lock(&mgr->lock);
 	decay = mgr->decay_interval_jiffies;
 	if (!decay)
-		goto reschedule;
+		goto unlock;
 
 	list_for_each_entry_safe(pos, n, &mgr->offlined_pages, offlined_link) {
 		if (pos->mode != XE_PAGE_OFFLINE_SOFT)
 			continue;
-		if (!time_after(now, pos->last_seen + decay))
+		if (!time_after(now, pos->last_seen + decay)) {
+			soft_remaining = true;
 			continue;
+		}
 
 		list_del(&pos->offlined_link);
 		xe_ttm_vram_buddy_free(mgr, &pos->blocks, pos->used_visible_size);
@@ -394,9 +397,11 @@ static void xe_ttm_vram_decay_gc_worker(struct work_struct *work)
 		kfree(pos);
 	}
 
-reschedule:
-	schedule_delayed_work(&mgr->decay_gc_work,
-			      xe_ttm_vram_decay_gc_period(mgr));
+	/* Nothing left to track; re-armed on demand when a new SOFT entry appears */
+	if (soft_remaining)
+		schedule_delayed_work(&mgr->decay_gc_work,
+				      xe_ttm_vram_decay_gc_period(mgr));
+unlock:
 	mutex_unlock(&mgr->lock);
 }
 
-- 
2.52.0


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

* Re: [PATCH V2 2/3] drm/xe/vram: don't let firmware-confirmed permanent bad pages decay back in
  2026-11-12 12:43 ` [PATCH V2 2/3] drm/xe/vram: don't let firmware-confirmed permanent bad pages decay back in Tejas Upadhyay
@ 2026-11-12 12:54   ` sashiko-bot
  0 siblings, 0 replies; 9+ messages in thread
From: sashiko-bot @ 2026-11-12 12:54 UTC (permalink / raw)
  To: Tejas Upadhyay, intel-xe

Thank you for your contribution! Sashiko AI review found 3 potential
issues to consider:
- [Medium] drm/xe/vram: queued pages not promoted to HARD on repeat
  fault
- [Medium] drm/xe/vram: decay_gc_work not scheduled in
  xe_ttm_vram_retry_queued_pages()
- [Low] drm/xe/vram: missing @permanent kernel-doc on
  xe_ttm_vram_handle_addr_fault()
--

commit 49821b1409082008ca85432821b443bc32f84c8f
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>

drm/xe/vram: don't let firmware-confirmed permanent bad pages decay back in

This commit threads a permanent flag through xe_ttm_vram_handle_addr_fault()
to xe_ttm_vram_reserve_page_at_addr() so pages loaded from firmware's
non-volatile offline list are marked XE_PAGE_OFFLINE_HARD and excluded from
soft-offline decay reinstatement.

> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index ed0ca5f2b1449..07360ab7b0722 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -837,7 +837,8 @@ static struct xe_bo *xe_ttm_vram_block_owner_get(struct xe_device *xe,
>  }
>  
>  static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
> -					    struct xe_ttm_vram_mgr *vram_mgr, struct gpu_buddy *mm)
> +					    struct xe_ttm_vram_mgr *vram_mgr, struct gpu_buddy *mm,
> +					    bool permanent)
>  {
>  	struct xe_ttm_vram_offline_resource *nentry;
>  	struct xe_bo *pbo_to_put = NULL;
> @@ -859,7 +860,11 @@ static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
>  		INIT_LIST_HEAD(&nentry->blocks);
>  		nentry->status = XE_PAGE_RESERVE_PENDING;
>  		nentry->addr = addr;
> -		nentry->mode = XE_PAGE_OFFLINE_SOFT;
> +		/*
> +		 * Pages reloaded from firmware's non-volatile permanent list are
> +		 * already confirmed bad by a prior boot; never let them decay back in.
> +		 */
> +		nentry->mode = permanent ? XE_PAGE_OFFLINE_HARD : XE_PAGE_OFFLINE_SOFT;

[Severity: Medium]
Does a repeat fault on a page that is still on vram_mgr->queued_pages leave
pos->mode as XE_PAGE_OFFLINE_SOFT even though firmware permanently retires
the page?

When a non-permanent fault hits an active BO, nentry is queued on
vram_mgr->queued_pages as XE_PAGE_OFFLINE_SOFT until the BO's resource is
freed.  If a second fault arrives for the same address before
xe_ttm_vram_mgr_del() runs, xe_ttm_vram_page_already_processed() matches on
mgr->queued_pages without promoting pos->mode:

drivers/gpu/drm/xe/xe_ttm_vram_mgr.c:xe_ttm_vram_page_already_processed() {
	list_for_each_entry(pos, &mgr->offlined_pages, offlined_link) {
		if (pos->addr == addr) {
			if (pos->mode == XE_PAGE_OFFLINE_SOFT)
				pos->mode = XE_PAGE_OFFLINE_HARD;
			pos->last_seen = jiffies;
			return true;
		}
	}

	list_for_each_entry(pos, &mgr->queued_pages, queued_link) {
		if (pos->addr == addr)
			return true;
	}
}

handle_page_offline() receives -EEXIST and sends XE_RAS_PAGE_ACTION_OFFLINE
to permanently retire the page in firmware, but when
xe_ttm_vram_retry_queued_pages() later moves the entry to
mgr->offlined_pages, it remains XE_PAGE_OFFLINE_SOFT and will be reinstated
by xe_ttm_vram_decay_gc_worker().

>  		nentry->last_seen = jiffies;
>  
>  		if (block) {
> @@ -900,7 +905,7 @@ static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
>  			}
>  			++vram_mgr->n_offlined_pages;
>  			list_add(&nentry->offlined_link, &vram_mgr->offlined_pages);
> -			if (vram_mgr->decay_interval_jiffies &&
> +			if (!permanent && vram_mgr->decay_interval_jiffies &&
>  			    !delayed_work_pending(&vram_mgr->decay_gc_work)) {
>  				schedule_delayed_work(&vram_mgr->decay_gc_work,
>  						      xe_ttm_vram_decay_gc_period(vram_mgr));

[Severity: Medium]
Should xe_ttm_vram_retry_queued_pages() also schedule vram_mgr->decay_gc_work
when moving a soft-offlined entry onto mgr->offlined_pages?

When a runtime fault hits an allocated page (block != NULL), nentry is added
to vram_mgr->queued_pages without starting decay_gc_work, and
xe_ttm_vram_retry_queued_pages() later moves it to mgr->offlined_pages
without scheduling the worker either:

drivers/gpu/drm/xe/xe_ttm_vram_mgr.c:xe_ttm_vram_retry_queued_pages() {
	list_for_each_entry_safe(pos, n, &mgr->queued_pages, queued_link) {
		if (xe_ttm_vram_buddy_alloc(mgr, pos->addr, pos->addr + PAGE_SIZE,
					    PAGE_SIZE, PAGE_SIZE, &pos->blocks,
					    GPU_BUDDY_RANGE_ALLOCATION, NULL,
					    &pos->used_visible_size)) {
			pos->status = XE_PAGE_RESERVE_FAIL;
			continue;
		}
		--mgr->n_queued_pages;
		list_del(&pos->queued_link);
		++mgr->n_offlined_pages;
		list_add(&pos->offlined_link, &mgr->offlined_pages);
	}
}

Because probe-time permanent pages no longer start decay_gc_work, soft-offline
faults on allocated BOs will never start the decay timer unless an unrelated
fault happens to hit an unallocated page.

> @@ -986,7 +991,7 @@ static struct xe_vram_region *xe_ttm_vram_addr_to_region(struct xe_device *xe, u
>   * pending if the blocks backing it could not be freed immediately; the
>   * reservation is then completed from xe_ttm_vram_mgr_del().
>   */
> -int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
> +int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr, bool permanent)

[Severity: Low]
The kernel-doc comment above xe_ttm_vram_handle_addr_fault() documents @xe
and @addr, but does not include the new @permanent parameter, which triggers
a kernel-doc warning under W=1.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261112124329.2960272-5-tejas.upadhyay@intel.com?part=2

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

* Re: [PATCH V2 3/3] drm/xe/vram: stop decay worker from rescheduling itself forever
  2026-11-12 12:43 ` [PATCH V2 3/3] drm/xe/vram: stop decay worker from rescheduling itself forever Tejas Upadhyay
@ 2026-11-12 12:55   ` sashiko-bot
  0 siblings, 0 replies; 9+ messages in thread
From: sashiko-bot @ 2026-11-12 12:55 UTC (permalink / raw)
  To: Tejas Upadhyay, intel-xe

Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Medium] drm/xe/vram: soft-offlined pages via queued_pages never arm
  decay_gc_work
--

commit 22ff2c502172a757420f34aa8acb6ee7e2f6e05c
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>

drm/xe/vram: stop decay worker from rescheduling itself forever

This commit changes xe_ttm_vram_decay_gc_worker() to only reschedule
mgr->decay_gc_work when XE_PAGE_OFFLINE_SOFT entries remain on
mgr->offlined_pages after a sweep.

> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 07360ab7b0722..7613024a1410a 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -373,17 +373,20 @@ static void xe_ttm_vram_decay_gc_worker(struct work_struct *work)
>  	struct xe_device *xe = ttm_to_xe_device(mgr->manager.bdev);
>  	unsigned long now = jiffies;
>  	unsigned long decay;
> +	bool soft_remaining = false;
>  
>  	mutex_lock(&mgr->lock);
>  	decay = mgr->decay_interval_jiffies;
>  	if (!decay)
> -		goto reschedule;
> +		goto unlock;
>  
>  	list_for_each_entry_safe(pos, n, &mgr->offlined_pages, offlined_link) {
>  		if (pos->mode != XE_PAGE_OFFLINE_SOFT)
>  			continue;
> -		if (!time_after(now, pos->last_seen + decay))
> +		if (!time_after(now, pos->last_seen + decay)) {
> +			soft_remaining = true;
>  			continue;
> +		}
>  
>  		list_del(&pos->offlined_link);
>  		xe_ttm_vram_buddy_free(mgr, &pos->blocks, pos->used_visible_size);
> @@ -394,9 +397,11 @@ static void xe_ttm_vram_decay_gc_worker(struct work_struct *work)
>  		kfree(pos);
>  	}
>  
> -reschedule:
> -	schedule_delayed_work(&mgr->decay_gc_work,
> -			      xe_ttm_vram_decay_gc_period(mgr));
> +	/* Nothing left to track; re-armed on demand when a new SOFT entry appears */
> +	if (soft_remaining)
> +		schedule_delayed_work(&mgr->decay_gc_work,
> +				      xe_ttm_vram_decay_gc_period(mgr));
> +unlock:
>  	mutex_unlock(&mgr->lock);
>  }

[Severity: Medium]
Can soft-offlined pages that go through mgr->queued_pages be left on
mgr->offlined_pages forever without arming mgr->decay_gc_work?

In xe_ttm_vram_reserve_page_at_addr(), schedule_delayed_work() is only
called when block is NULL and xe_ttm_vram_buddy_alloc() succeeds
immediately.  When a transient fault hits an allocated page, nentry is
placed on vram_mgr->queued_pages while the owning BO is purged, and
xe_ttm_vram_retry_queued_pages() later moves it to mgr->offlined_pages
without scheduling the worker:

drivers/gpu/drm/xe/xe_ttm_vram_mgr.c:xe_ttm_vram_retry_queued_pages() {
	list_for_each_entry_safe(pos, n, &mgr->queued_pages, queued_link) {
		if (xe_ttm_vram_buddy_alloc(mgr, pos->addr, pos->addr + PAGE_SIZE,
					    PAGE_SIZE, PAGE_SIZE, &pos->blocks,
					    GPU_BUDDY_RANGE_ALLOCATION, NULL,
					    &pos->used_visible_size)) {
			pos->status = XE_PAGE_RESERVE_FAIL;
			continue;
		}
		--mgr->n_queued_pages;
		list_del(&pos->queued_link);
		++mgr->n_offlined_pages;
		list_add(&pos->offlined_link, &mgr->offlined_pages);
	}
}

Once mgr->decay_gc_work is idle (either because no free page was offlined
earlier, or because xe_ttm_vram_decay_gc_worker() ran while the entry was
still on mgr->queued_pages), any XE_PAGE_OFFLINE_SOFT entry promoted via
xe_ttm_vram_retry_queued_pages() will never decay and remains offlined
until driver unbind.  Arming mgr->decay_gc_work in
xe_ttm_vram_retry_queued_pages() when a XE_PAGE_OFFLINE_SOFT entry is
moved to mgr->offlined_pages would avoid this.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261112124329.2960272-5-tejas.upadhyay@intel.com?part=3

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

* Re: [PATCH V2 1/3] drm/xe/vram: add decay-based reinstatement of soft-offlined VRAM pages
  2026-11-12 12:43 ` [PATCH V2 1/3] drm/xe/vram: add " Tejas Upadhyay
@ 2026-11-12 13:03   ` sashiko-bot
  0 siblings, 0 replies; 9+ messages in thread
From: sashiko-bot @ 2026-11-12 13:03 UTC (permalink / raw)
  To: Tejas Upadhyay, intel-xe

Thank you for your contribution! Sashiko AI review found 4 potential
issues to consider:
- [High] drm/xe: missing configfs stub for
  xe_configfs_get_bad_page_decay_secs()
- [Medium] drm/xe: missing decay_gc_work scheduling in
  xe_ttm_vram_retry_queued_pages()
- [Medium] drm/xe: queued pages not promoted to HARD on repeat VRAM
  fault
- [Low] drm/xe: xe_ttm_vram_decay_gc_period() clamps period above
  configured decay
--

commit 09a44ea2bd1a1ebe78a3a684e47f0dc29c05f989
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>

drm/xe/vram: add decay-based reinstatement of soft-offlined VRAM pages

This commit adds a per-VRAM-manager delayed work timer to reinstate
soft-offlined VRAM pages after a configurable decay interval, while
promoting pages with repeat faults to permanent hard retirement.

> diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
> index 327b648944ffa..406b722247020 100644
> --- a/drivers/gpu/drm/xe/xe_configfs.h
> +++ b/drivers/gpu/drm/xe/xe_configfs.h
> @@ -26,6 +26,7 @@ bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev);
>  bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev);
>  u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev);
>  bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev);
> +u32 xe_configfs_get_bad_page_decay_secs(struct pci_dev *pdev);
>  u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
>  				       enum xe_engine_class class,
>  				       const u32 **cs);

[Severity: High]
Does this break the build when CONFIG_CONFIGFS_FS is not reachable?

__xe_ttm_vram_mgr_init() calls xe_configfs_get_bad_page_decay_secs()
unconditionally, but xe_configfs.h only declares it inside the
#if IS_REACHABLE(CONFIG_CONFIGFS_FS) block without a static inline stub in
the #else branch.  Also, XE_BAD_PAGE_DECAY_SECS_DEFAULT is added in
xe_ttm_vram_mgr_types.h but never used (device_defaults in xe_configfs.c
open-codes 24 * 60 * 60).

> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 36d47de8b11ba..ed0ca5f2b1449 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -355,6 +355,51 @@ static const struct ttm_resource_manager_func xe_ttm_vram_mgr_func = {
>  	.debug	= xe_ttm_vram_mgr_debug
>  };
>  
> +static unsigned long xe_ttm_vram_decay_gc_period(struct xe_ttm_vram_mgr *mgr)
> +{
> +	unsigned long period = mgr->decay_interval_jiffies / 8;
> +
> +	if (period < msecs_to_jiffies(60 * 1000))
> +		period = msecs_to_jiffies(60 * 1000);
> +	return period;
> +}
> +
> +static void xe_ttm_vram_decay_gc_worker(struct work_struct *work)
> +{
> +	struct xe_ttm_vram_mgr *mgr = container_of(to_delayed_work(work),
> +						   struct xe_ttm_vram_mgr,
> +						   decay_gc_work);
> +	struct xe_ttm_vram_offline_resource *pos, *n;
> +	struct xe_device *xe = ttm_to_xe_device(mgr->manager.bdev);
> +	unsigned long now = jiffies;
> +	unsigned long decay;
> +
> +	mutex_lock(&mgr->lock);
> +	decay = mgr->decay_interval_jiffies;
> +	if (!decay)
> +		goto reschedule;
> +
> +	list_for_each_entry_safe(pos, n, &mgr->offlined_pages, offlined_link) {
> +		if (pos->mode != XE_PAGE_OFFLINE_SOFT)
> +			continue;
> +		if (!time_after(now, pos->last_seen + decay))
> +			continue;

[Severity: Low]
When bad_page_decay_secs is configured between 1 and 59 seconds, does
xe_ttm_vram_decay_gc_period() delay reinstatement to at least 60 seconds?

xe_ttm_vram_decay_gc_period() clamps period up to 60 seconds without
capping it at mgr->decay_interval_jiffies.  In addition, when
bad_page_decay_secs is 60 seconds, period equals decay, so if the worker
runs on the exact expiration tick (now == pos->last_seen + decay), the
strict time_after() check evaluates to false and defers reinstatement for
another 60 seconds.

[ ... ]

> @@ -725,8 +776,12 @@ static bool xe_ttm_vram_page_already_processed(struct xe_ttm_vram_mgr *mgr,
>  	lockdep_assert_held(&mgr->lock);
>  
>  	list_for_each_entry(pos, &mgr->offlined_pages, offlined_link) {
> -		if (pos->addr == addr)
> +		if (pos->addr == addr) {
> +			if (pos->mode == XE_PAGE_OFFLINE_SOFT)
> +				pos->mode = XE_PAGE_OFFLINE_HARD;
> +			pos->last_seen = jiffies;
>  			return true;
> +		}
>  	}
>  
>  	list_for_each_entry(pos, &mgr->queued_pages, queued_link) {

[Severity: Medium]
Should a repeat fault matching an entry on mgr->queued_pages also promote
pos->mode to XE_PAGE_OFFLINE_HARD and update pos->last_seen?

When a fault hits an allocated or busy page, the entry is placed on
mgr->queued_pages with XE_PAGE_OFFLINE_SOFT until the owning BO is freed.
If a second fault arrives at the same address before
xe_ttm_vram_retry_queued_pages() moves it to mgr->offlined_pages, the
mgr->queued_pages loop returns true (causing handle_page_offline() in
xe_ras.c to see -EEXIST and permanently retire the page in firmware via
XE_RAS_PAGE_ACTION_OFFLINE), but leaves pos->mode as XE_PAGE_OFFLINE_SOFT
so xe_ttm_vram_decay_gc_worker() will later reinstate the page into the
buddy allocator.

> @@ -804,6 +859,8 @@ static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
>  		INIT_LIST_HEAD(&nentry->blocks);
>  		nentry->status = XE_PAGE_RESERVE_PENDING;
>  		nentry->addr = addr;
> +		nentry->mode = XE_PAGE_OFFLINE_SOFT;
> +		nentry->last_seen = jiffies;
>  
>  		if (block) {
>  			pbo = xe_ttm_vram_block_owner_get(xe, block);
> @@ -843,6 +900,11 @@ static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
>  			}
>  			++vram_mgr->n_offlined_pages;
>  			list_add(&nentry->offlined_link, &vram_mgr->offlined_pages);
> +			if (vram_mgr->decay_interval_jiffies &&
> +			    !delayed_work_pending(&vram_mgr->decay_gc_work)) {
> +				schedule_delayed_work(&vram_mgr->decay_gc_work,
> +						      xe_ttm_vram_decay_gc_period(vram_mgr));
> +			}
>  			return ret;
>  		}
>  	}

[Severity: Medium]
Will soft-offlined pages that were allocated to a BO at fault time ever
schedule decay_gc_work?

When block is non-NULL (or when xe_ttm_vram_buddy_alloc() defers a busy
page), nentry is placed on vram_mgr->queued_pages and later moved to
mgr->offlined_pages by xe_ttm_vram_mgr_del() ->
xe_ttm_vram_retry_queued_pages():

drivers/gpu/drm/xe/xe_ttm_vram_mgr.c:xe_ttm_vram_retry_queued_pages() {
    ...
		--mgr->n_queued_pages;
		list_del(&pos->queued_link);
		++mgr->n_offlined_pages;
		list_add(&pos->offlined_link, &mgr->offlined_pages);
	}
}

Because xe_ttm_vram_retry_queued_pages() does not schedule
mgr->decay_gc_work, any soft-offlined page that passes through
queued_pages will stay offline permanently unless an unallocated page also
faults and starts the worker.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261112124329.2960272-5-tejas.upadhyay@intel.com?part=1

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

* ✓ CI.KUnit: success for drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages
  2026-11-12 12:43 [PATCH V2 0/3] drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages Tejas Upadhyay
                   ` (2 preceding siblings ...)
  2026-11-12 12:43 ` [PATCH V2 3/3] drm/xe/vram: stop decay worker from rescheduling itself forever Tejas Upadhyay
@ 2026-11-12 13:36 ` Patchwork
  2026-11-12 14:21 ` ✓ Xe.CI.BAT: " Patchwork
  4 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-11-12 13:36 UTC (permalink / raw)
  To: Tejas Upadhyay; +Cc: intel-xe

== Series Details ==

Series: drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages
URL   : https://patchwork.freedesktop.org/series/178398/
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
[13:34:32] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[13:34:38] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[13:34:58] Starting KUnit Kernel (1/1)...
[13:34:58] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[13:34:58] ================= gpu_buddy (15 subtests) ==================
[13:34:58] [PASSED] gpu_test_buddy_alloc_limit
[13:34:58] [PASSED] gpu_test_buddy_alloc_optimistic
[13:34:58] [PASSED] gpu_test_buddy_alloc_pessimistic
[13:34:58] [PASSED] gpu_test_buddy_alloc_pathological
[13:34:58] [PASSED] gpu_test_buddy_alloc_contiguous
[13:34:58] [PASSED] gpu_test_buddy_alloc_clear
[13:34:58] [PASSED] gpu_test_buddy_alloc_range
[13:34:58] [PASSED] gpu_test_buddy_alloc_range_bias
[13:34:58] [PASSED] gpu_test_buddy_alloc_range_clear_guard
[13:34:59] [PASSED] gpu_test_buddy_fragmentation_performance
[13:35:00] [PASSED] gpu_test_buddy_dirty_tracker_performance
[13:35:00] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[13:35:00] [PASSED] gpu_test_buddy_offset_aligned_allocation
[13:35:00] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[13:35:00] [PASSED] gpu_test_buddy_addr_to_block
[13:35:00] ==================== [PASSED] gpu_buddy ====================
[13:35:00] ============================================================
[13:35:00] Testing complete. Ran 15 tests: passed: 15
[13:35:00] Elapsed time: 27.395s total, 5.130s configuring, 20.347s building, 1.863s 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
[13:35:00] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[13:35:03] 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
[13:35:41] Starting KUnit Kernel (1/1)...
[13:35:41] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[13:35:41] ================== guc_buf (11 subtests) ===================
[13:35:41] [PASSED] test_smallest
[13:35:41] [PASSED] test_largest
[13:35:41] [PASSED] test_granular
[13:35:41] [PASSED] test_unique
[13:35:41] [PASSED] test_overlap
[13:35:41] [PASSED] test_reusable
[13:35:41] [PASSED] test_too_big
[13:35:41] [PASSED] test_flush
[13:35:41] [PASSED] test_lookup
[13:35:41] [PASSED] test_data
[13:35:41] [PASSED] test_class
[13:35:41] ===================== [PASSED] guc_buf =====================
[13:35:41] =================== guc_dbm (7 subtests) ===================
[13:35:41] [PASSED] test_empty
[13:35:41] [PASSED] test_default
[13:35:41] ======================== test_size  ========================
[13:35:41] [PASSED] 4
[13:35:41] [PASSED] 8
[13:35:41] [PASSED] 32
[13:35:41] [PASSED] 256
[13:35:41] ==================== [PASSED] test_size ====================
[13:35:41] ======================= test_reuse  ========================
[13:35:41] [PASSED] 4
[13:35:41] [PASSED] 8
[13:35:41] [PASSED] 32
[13:35:41] [PASSED] 256
[13:35:41] =================== [PASSED] test_reuse ====================
[13:35:41] =================== test_range_overlap  ====================
[13:35:41] [PASSED] 4
[13:35:41] [PASSED] 8
[13:35:41] [PASSED] 32
[13:35:41] [PASSED] 256
[13:35:41] =============== [PASSED] test_range_overlap ================
[13:35:41] =================== test_range_compact  ====================
[13:35:41] [PASSED] 4
[13:35:41] [PASSED] 8
[13:35:41] [PASSED] 32
[13:35:41] [PASSED] 256
[13:35:41] =============== [PASSED] test_range_compact ================
[13:35:41] ==================== test_range_spare  =====================
[13:35:41] [PASSED] 4
[13:35:41] [PASSED] 8
[13:35:41] [PASSED] 32
[13:35:41] [PASSED] 256
[13:35:41] ================ [PASSED] test_range_spare =================
[13:35:41] ===================== [PASSED] guc_dbm =====================
[13:35:41] ================== guc_idm (22 subtests) ===================
[13:35:41] [PASSED] bad_init
[13:35:41] [PASSED] no_init
[13:35:41] [PASSED] init_fini
[13:35:41] [PASSED] check_init_small
[13:35:41] [PASSED] check_init_shared
[13:35:41] [PASSED] check_used
[13:35:41] [PASSED] check_quota
[13:35:41] [PASSED] check_all
[13:35:41] [PASSED] check_limits
[13:35:41] [PASSED] check_overlap
[13:35:41] [PASSED] check_overlap_alloc
[13:35:41] [PASSED] check_overlap_release
[13:35:41] [PASSED] check_overlap_partial_init
[13:35:41] [PASSED] check_overlap_partial_shared_range_blocking
[13:35:41] [PASSED] check_used_usable
[13:35:41] [PASSED] check_used_shareable
[13:35:41] [PASSED] check_used_mixed
[13:35:41] [PASSED] check_release_usable_range
[13:35:41] [PASSED] check_release_shareable_range
[13:35:41] [PASSED] check_split_boundaries
[13:35:41] [PASSED] check_shareable_spare
[13:35:41] [PASSED] check_shareable_spare_fragmented_tail
[13:35:41] ===================== [PASSED] guc_idm =====================
[13:35:41] ============== guc_klv_helpers (13 subtests) ===============
[13:35:41] [PASSED] test_count
[13:35:41] [PASSED] test_encode_u32
[13:35:41] [PASSED] test_encode_u64
[13:35:41] [PASSED] test_encode_string
[13:35:41] [PASSED] test_encode_object_raw
[13:35:41] [PASSED] test_encode_object_klv
[13:35:41] [PASSED] test_encode_object_nested
[13:35:41] [PASSED] test_encode_object_basic
[13:35:41] ===================== test_decode_u16  =====================
[13:35:41] [PASSED] empty
[13:35:41] [PASSED] valid
[13:35:41] [PASSED] max
[13:35:41] [PASSED] big
[13:35:41] [PASSED] long
[13:35:41] ================= [PASSED] test_decode_u16 =================
[13:35:41] ===================== test_decode_u32  =====================
[13:35:41] [PASSED] empty
[13:35:41] [PASSED] valid
[13:35:41] [PASSED] max
[13:35:41] [PASSED] long
[13:35:41] ================= [PASSED] test_decode_u32 =================
[13:35:41] ===================== test_decode_u64  =====================
[13:35:41] [PASSED] empty
[13:35:41] [PASSED] short
[13:35:41] [PASSED] valid
[13:35:41] [PASSED] max
[13:35:41] [PASSED] long
[13:35:41] ================= [PASSED] test_decode_u64 =================
[13:35:41] ===================== test_decode_str  =====================
[13:35:41] [PASSED] empty
[13:35:41] [PASSED] one
[13:35:41] [PASSED] one_trash
[13:35:41] [PASSED] two
[13:35:41] [PASSED] two_trash
[13:35:41] [PASSED] three
[13:35:41] [PASSED] dword
[13:35:41] [PASSED] four
[13:35:41] [PASSED] five
[13:35:41] [PASSED] six
[13:35:41] [PASSED] seven
[13:35:41] [PASSED] qword
[13:35:41] ================= [PASSED] test_decode_str =================
[13:35:41] [PASSED] test_print
[13:35:41] ================= [PASSED] guc_klv_helpers =================
[13:35:41] =================== xe_log (4 subtests) ====================
[13:35:41] [PASSED] demo_cper
[13:35:41] [PASSED] demo_dmesg
[13:35:41] ======================= test_dmesg  ========================
[13:35:41] [PASSED] test_fatal
[13:35:41] [PASSED] test_fatal_tile
[13:35:41] [PASSED] test_fatal_gt
[13:35:41] [PASSED] test_fatal_comp
[13:35:41] [PASSED] test_fatal_comp_tile
[13:35:41] [PASSED] test_fatal_comp_gt
[13:35:41] [PASSED] test_fatal_all
[13:35:41] [PASSED] test_recoverable
[13:35:41] [PASSED] test_recoverable_tile
[13:35:41] [PASSED] test_recoverable_gt
[13:35:41] [PASSED] test_recoverable_comp
[13:35:41] [PASSED] test_recoverable_comp_tile
[13:35:41] [PASSED] test_recoverable_comp_gt
[13:35:41] [PASSED] test_recoverable_all
[13:35:41] [PASSED] test_info
[13:35:41] [PASSED] test_info_tile
[13:35:41] [PASSED] test_info_gt
[13:35:41] [PASSED] test_info_err
[13:35:41] [PASSED] test_info_comp
[13:35:41] [PASSED] test_info_comp_tile
[13:35:41] [PASSED] test_info_comp_gt
[13:35:41] [PASSED] test_info_all
[13:35:41] [PASSED] test_hw_fatal
[13:35:41] [PASSED] test_hw_recoverable
[13:35:41] [PASSED] test_hw_corrected
[13:35:41] [PASSED] test_hw_informational
[13:35:41] =================== [PASSED] test_dmesg ====================
[13:35:41] ====================== test_invalid  =======================
[13:35:41] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[13:35:41] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[13:35:41] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[13:35:41] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[13:35:41] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[13:35:41] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[13:35:41] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[13:35:41] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[13:35:41] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[13:35:41] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[13:35:41] ================== [SKIPPED] test_invalid ==================
[13:35:41] ===================== [PASSED] xe_log ======================
[13:35:41] ================== no_relay (3 subtests) ===================
[13:35:41] [PASSED] xe_drops_guc2pf_if_not_ready
[13:35:41] [PASSED] xe_drops_guc2vf_if_not_ready
[13:35:41] [PASSED] xe_rejects_send_if_not_ready
[13:35:41] ==================== [PASSED] no_relay =====================
[13:35:41] ================== pf_relay (14 subtests) ==================
[13:35:41] [PASSED] pf_rejects_guc2pf_too_short
[13:35:41] [PASSED] pf_rejects_guc2pf_too_long
[13:35:41] [PASSED] pf_rejects_guc2pf_no_payload
[13:35:41] [PASSED] pf_fails_no_payload
[13:35:41] [PASSED] pf_fails_bad_origin
[13:35:41] [PASSED] pf_fails_bad_type
[13:35:41] [PASSED] pf_txn_reports_error
[13:35:41] [PASSED] pf_txn_sends_pf2guc
[13:35:41] [PASSED] pf_sends_pf2guc
[13:35:41] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[13:35:41] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[13:35:41] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[13:35:41] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[13:35:41] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[13:35:41] ==================== [PASSED] pf_relay =====================
[13:35:41] ================== vf_relay (3 subtests) ===================
[13:35:41] [PASSED] vf_rejects_guc2vf_too_short
[13:35:41] [PASSED] vf_rejects_guc2vf_too_long
[13:35:41] [PASSED] vf_rejects_guc2vf_no_payload
[13:35:41] ==================== [PASSED] vf_relay =====================
[13:35:41] ================ pf_gt_config (9 subtests) =================
[13:35:41] [PASSED] fair_contexts_1vf
[13:35:41] [PASSED] fair_doorbells_1vf
[13:35:41] [PASSED] fair_ggtt_1vf
[13:35:41] ====================== fair_vram_1vf  ======================
[13:35:41] [PASSED] 3.50 GiB
[13:35:41] [PASSED] 11.5 GiB
[13:35:41] [PASSED] 15.5 GiB
[13:35:41] [PASSED] 31.5 GiB
[13:35:41] [PASSED] 63.5 GiB
[13:35:41] [PASSED] 1.91 GiB
[13:35:41] ================== [PASSED] fair_vram_1vf ==================
[13:35:41] ================ fair_vram_1vf_admin_only  =================
[13:35:41] [PASSED] 3.50 GiB
[13:35:41] [PASSED] 11.5 GiB
[13:35:41] [PASSED] 15.5 GiB
[13:35:41] [PASSED] 31.5 GiB
[13:35:41] [PASSED] 63.5 GiB
[13:35:41] [PASSED] 1.91 GiB
[13:35:41] ============ [PASSED] fair_vram_1vf_admin_only =============
[13:35:41] ====================== fair_contexts  ======================
[13:35:41] [PASSED] 1 VF
[13:35:41] [PASSED] 2 VFs
[13:35:41] [PASSED] 3 VFs
[13:35:41] [PASSED] 4 VFs
[13:35:41] [PASSED] 5 VFs
[13:35:41] [PASSED] 6 VFs
[13:35:41] [PASSED] 7 VFs
[13:35:41] [PASSED] 8 VFs
[13:35:41] [PASSED] 9 VFs
[13:35:41] [PASSED] 10 VFs
[13:35:41] [PASSED] 11 VFs
[13:35:41] [PASSED] 12 VFs
[13:35:41] [PASSED] 13 VFs
[13:35:41] [PASSED] 14 VFs
[13:35:41] [PASSED] 15 VFs
[13:35:41] [PASSED] 16 VFs
[13:35:41] [PASSED] 17 VFs
[13:35:41] [PASSED] 18 VFs
[13:35:41] [PASSED] 19 VFs
[13:35:41] [PASSED] 20 VFs
[13:35:41] [PASSED] 21 VFs
[13:35:41] [PASSED] 22 VFs
[13:35:41] [PASSED] 23 VFs
[13:35:41] [PASSED] 24 VFs
[13:35:41] [PASSED] 25 VFs
[13:35:41] [PASSED] 26 VFs
[13:35:41] [PASSED] 27 VFs
[13:35:41] [PASSED] 28 VFs
[13:35:41] [PASSED] 29 VFs
[13:35:41] [PASSED] 30 VFs
[13:35:41] [PASSED] 31 VFs
[13:35:41] [PASSED] 32 VFs
[13:35:41] [PASSED] 33 VFs
[13:35:41] [PASSED] 34 VFs
[13:35:41] [PASSED] 35 VFs
[13:35:41] [PASSED] 36 VFs
[13:35:41] [PASSED] 37 VFs
[13:35:41] [PASSED] 38 VFs
[13:35:41] [PASSED] 39 VFs
[13:35:41] [PASSED] 40 VFs
[13:35:41] [PASSED] 41 VFs
[13:35:41] [PASSED] 42 VFs
[13:35:41] [PASSED] 43 VFs
[13:35:41] [PASSED] 44 VFs
[13:35:41] [PASSED] 45 VFs
[13:35:41] [PASSED] 46 VFs
[13:35:41] [PASSED] 47 VFs
[13:35:41] [PASSED] 48 VFs
[13:35:41] [PASSED] 49 VFs
[13:35:41] [PASSED] 50 VFs
[13:35:41] [PASSED] 51 VFs
[13:35:41] [PASSED] 52 VFs
[13:35:41] [PASSED] 53 VFs
[13:35:41] [PASSED] 54 VFs
[13:35:41] [PASSED] 55 VFs
[13:35:41] [PASSED] 56 VFs
[13:35:41] [PASSED] 57 VFs
[13:35:41] [PASSED] 58 VFs
[13:35:41] [PASSED] 59 VFs
[13:35:41] [PASSED] 60 VFs
[13:35:41] [PASSED] 61 VFs
[13:35:41] [PASSED] 62 VFs
[13:35:41] [PASSED] 63 VFs
[13:35:41] ================== [PASSED] fair_contexts ==================
[13:35:41] ===================== fair_doorbells  ======================
[13:35:41] [PASSED] 1 VF
[13:35:41] [PASSED] 2 VFs
[13:35:41] [PASSED] 3 VFs
[13:35:41] [PASSED] 4 VFs
[13:35:41] [PASSED] 5 VFs
[13:35:41] [PASSED] 6 VFs
[13:35:41] [PASSED] 7 VFs
[13:35:41] [PASSED] 8 VFs
[13:35:41] [PASSED] 9 VFs
[13:35:41] [PASSED] 10 VFs
[13:35:41] [PASSED] 11 VFs
[13:35:41] [PASSED] 12 VFs
[13:35:41] [PASSED] 13 VFs
[13:35:41] [PASSED] 14 VFs
[13:35:41] [PASSED] 15 VFs
[13:35:41] [PASSED] 16 VFs
[13:35:41] [PASSED] 17 VFs
[13:35:41] [PASSED] 18 VFs
[13:35:41] [PASSED] 19 VFs
[13:35:41] [PASSED] 20 VFs
[13:35:41] [PASSED] 21 VFs
[13:35:41] [PASSED] 22 VFs
[13:35:41] [PASSED] 23 VFs
[13:35:41] [PASSED] 24 VFs
[13:35:41] [PASSED] 25 VFs
[13:35:41] [PASSED] 26 VFs
[13:35:41] [PASSED] 27 VFs
[13:35:41] [PASSED] 28 VFs
[13:35:41] [PASSED] 29 VFs
[13:35:41] [PASSED] 30 VFs
[13:35:41] [PASSED] 31 VFs
[13:35:41] [PASSED] 32 VFs
[13:35:41] [PASSED] 33 VFs
[13:35:41] [PASSED] 34 VFs
[13:35:41] [PASSED] 35 VFs
[13:35:41] [PASSED] 36 VFs
[13:35:41] [PASSED] 37 VFs
[13:35:41] [PASSED] 38 VFs
[13:35:41] [PASSED] 39 VFs
[13:35:41] [PASSED] 40 VFs
[13:35:41] [PASSED] 41 VFs
[13:35:41] [PASSED] 42 VFs
[13:35:41] [PASSED] 43 VFs
[13:35:41] [PASSED] 44 VFs
[13:35:41] [PASSED] 45 VFs
[13:35:41] [PASSED] 46 VFs
[13:35:41] [PASSED] 47 VFs
[13:35:41] [PASSED] 48 VFs
[13:35:41] [PASSED] 49 VFs
[13:35:41] [PASSED] 50 VFs
[13:35:41] [PASSED] 51 VFs
[13:35:41] [PASSED] 52 VFs
[13:35:41] [PASSED] 53 VFs
[13:35:41] [PASSED] 54 VFs
[13:35:41] [PASSED] 55 VFs
[13:35:41] [PASSED] 56 VFs
[13:35:41] [PASSED] 57 VFs
[13:35:41] [PASSED] 58 VFs
[13:35:41] [PASSED] 59 VFs
[13:35:41] [PASSED] 60 VFs
[13:35:41] [PASSED] 61 VFs
[13:35:41] [PASSED] 62 VFs
[13:35:41] [PASSED] 63 VFs
[13:35:41] ================= [PASSED] fair_doorbells ==================
[13:35:41] ======================== fair_ggtt  ========================
[13:35:41] [PASSED] 1 VF
[13:35:41] [PASSED] 2 VFs
[13:35:41] [PASSED] 3 VFs
[13:35:41] [PASSED] 4 VFs
[13:35:41] [PASSED] 5 VFs
[13:35:41] [PASSED] 6 VFs
[13:35:41] [PASSED] 7 VFs
[13:35:41] [PASSED] 8 VFs
[13:35:41] [PASSED] 9 VFs
[13:35:41] [PASSED] 10 VFs
[13:35:41] [PASSED] 11 VFs
[13:35:41] [PASSED] 12 VFs
[13:35:41] [PASSED] 13 VFs
[13:35:41] [PASSED] 14 VFs
[13:35:41] [PASSED] 15 VFs
[13:35:41] [PASSED] 16 VFs
[13:35:41] [PASSED] 17 VFs
[13:35:41] [PASSED] 18 VFs
[13:35:41] [PASSED] 19 VFs
[13:35:41] [PASSED] 20 VFs
[13:35:41] [PASSED] 21 VFs
[13:35:41] [PASSED] 22 VFs
[13:35:41] [PASSED] 23 VFs
[13:35:41] [PASSED] 24 VFs
[13:35:41] [PASSED] 25 VFs
[13:35:41] [PASSED] 26 VFs
[13:35:41] [PASSED] 27 VFs
[13:35:41] [PASSED] 28 VFs
[13:35:41] [PASSED] 29 VFs
[13:35:41] [PASSED] 30 VFs
[13:35:41] [PASSED] 31 VFs
[13:35:41] [PASSED] 32 VFs
[13:35:41] [PASSED] 33 VFs
[13:35:41] [PASSED] 34 VFs
[13:35:41] [PASSED] 35 VFs
[13:35:41] [PASSED] 36 VFs
[13:35:41] [PASSED] 37 VFs
[13:35:41] [PASSED] 38 VFs
[13:35:41] [PASSED] 39 VFs
[13:35:41] [PASSED] 40 VFs
[13:35:41] [PASSED] 41 VFs
[13:35:41] [PASSED] 42 VFs
[13:35:41] [PASSED] 43 VFs
[13:35:41] [PASSED] 44 VFs
[13:35:41] [PASSED] 45 VFs
[13:35:41] [PASSED] 46 VFs
[13:35:41] [PASSED] 47 VFs
[13:35:41] [PASSED] 48 VFs
[13:35:41] [PASSED] 49 VFs
[13:35:41] [PASSED] 50 VFs
[13:35:41] [PASSED] 51 VFs
[13:35:41] [PASSED] 52 VFs
[13:35:41] [PASSED] 53 VFs
[13:35:41] [PASSED] 54 VFs
[13:35:41] [PASSED] 55 VFs
[13:35:41] [PASSED] 56 VFs
[13:35:41] [PASSED] 57 VFs
[13:35:41] [PASSED] 58 VFs
[13:35:41] [PASSED] 59 VFs
[13:35:41] [PASSED] 60 VFs
[13:35:41] [PASSED] 61 VFs
[13:35:41] [PASSED] 62 VFs
[13:35:41] [PASSED] 63 VFs
[13:35:41] ==================== [PASSED] fair_ggtt ====================
[13:35:41] ======================== fair_vram  ========================
[13:35:41] [PASSED] 1 VF
[13:35:41] [PASSED] 2 VFs
[13:35:41] [PASSED] 3 VFs
[13:35:41] [PASSED] 4 VFs
[13:35:41] [PASSED] 5 VFs
[13:35:41] [PASSED] 6 VFs
[13:35:41] [PASSED] 7 VFs
[13:35:41] [PASSED] 8 VFs
[13:35:41] [PASSED] 9 VFs
[13:35:41] [PASSED] 10 VFs
[13:35:41] [PASSED] 11 VFs
[13:35:41] [PASSED] 12 VFs
[13:35:41] [PASSED] 13 VFs
[13:35:41] [PASSED] 14 VFs
[13:35:41] [PASSED] 15 VFs
[13:35:41] [PASSED] 16 VFs
[13:35:41] [PASSED] 17 VFs
[13:35:41] [PASSED] 18 VFs
[13:35:41] [PASSED] 19 VFs
[13:35:41] [PASSED] 20 VFs
[13:35:41] [PASSED] 21 VFs
[13:35:41] [PASSED] 22 VFs
[13:35:41] [PASSED] 23 VFs
[13:35:42] [PASSED] 24 VFs
[13:35:42] [PASSED] 25 VFs
[13:35:42] [PASSED] 26 VFs
[13:35:42] [PASSED] 27 VFs
[13:35:42] [PASSED] 28 VFs
[13:35:42] [PASSED] 29 VFs
[13:35:42] [PASSED] 30 VFs
[13:35:42] [PASSED] 31 VFs
[13:35:42] [PASSED] 32 VFs
[13:35:42] [PASSED] 33 VFs
[13:35:42] [PASSED] 34 VFs
[13:35:42] [PASSED] 35 VFs
[13:35:42] [PASSED] 36 VFs
[13:35:42] [PASSED] 37 VFs
[13:35:42] [PASSED] 38 VFs
[13:35:42] [PASSED] 39 VFs
[13:35:42] [PASSED] 40 VFs
[13:35:42] [PASSED] 41 VFs
[13:35:42] [PASSED] 42 VFs
[13:35:42] [PASSED] 43 VFs
[13:35:42] [PASSED] 44 VFs
[13:35:42] [PASSED] 45 VFs
[13:35:42] [PASSED] 46 VFs
[13:35:42] [PASSED] 47 VFs
[13:35:42] [PASSED] 48 VFs
[13:35:42] [PASSED] 49 VFs
[13:35:42] [PASSED] 50 VFs
[13:35:42] [PASSED] 51 VFs
[13:35:42] [PASSED] 52 VFs
[13:35:42] [PASSED] 53 VFs
[13:35:42] [PASSED] 54 VFs
[13:35:42] [PASSED] 55 VFs
[13:35:42] [PASSED] 56 VFs
[13:35:42] [PASSED] 57 VFs
[13:35:42] [PASSED] 58 VFs
[13:35:42] [PASSED] 59 VFs
[13:35:42] [PASSED] 60 VFs
[13:35:42] [PASSED] 61 VFs
[13:35:42] [PASSED] 62 VFs
[13:35:42] [PASSED] 63 VFs
[13:35:42] ==================== [PASSED] fair_vram ====================
[13:35:42] ================== [PASSED] pf_gt_config ===================
[13:35:42] ===================== lmtt (1 subtest) =====================
[13:35:42] ======================== test_ops  =========================
[13:35:42] [PASSED] 2-level
[13:35:42] [PASSED] multi-level
[13:35:42] ==================== [PASSED] test_ops =====================
[13:35:42] ====================== [PASSED] lmtt =======================
[13:35:42] ================= sriov_packet (1 subtest) =================
[13:35:42] [PASSED] test_descriptor_init
[13:35:42] ================== [PASSED] sriov_packet ===================
[13:35:42] ================= pf_service (11 subtests) =================
[13:35:42] [PASSED] pf_negotiate_any
[13:35:42] [PASSED] pf_negotiate_base_match
[13:35:42] [PASSED] pf_negotiate_base_newer
[13:35:42] [PASSED] pf_negotiate_base_next
[13:35:42] [SKIPPED] pf_negotiate_base_older (no older minor)
[13:35:42] [PASSED] pf_negotiate_base_prev
[13:35:42] [PASSED] pf_negotiate_latest_match
[13:35:42] [PASSED] pf_negotiate_latest_newer
[13:35:42] [PASSED] pf_negotiate_latest_next
[13:35:42] [SKIPPED] pf_negotiate_latest_older (no older minor)
[13:35:42] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[13:35:42] =================== [PASSED] pf_service ====================
[13:35:42] ================= xe_guc_g2g (2 subtests) ==================
[13:35:42] ============== xe_live_guc_g2g_kunit_default  ==============
[13:35:42] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[13:35:42] ============== xe_live_guc_g2g_kunit_allmem  ===============
[13:35:42] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[13:35:42] =================== [SKIPPED] xe_guc_g2g ===================
[13:35:42] =================== xe_mocs (2 subtests) ===================
[13:35:42] ================ xe_live_mocs_kernel_kunit  ================
[13:35:42] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[13:35:42] ================ xe_live_mocs_reset_kunit  =================
[13:35:42] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[13:35:42] ==================== [SKIPPED] xe_mocs =====================
[13:35:42] ================= xe_migrate (3 subtests) ==================
[13:35:42] ================= xe_migrate_sanity_kunit  =================
[13:35:42] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[13:35:42] ================== xe_validate_ccs_kunit  ==================
[13:35:42] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[13:35:42] ============= xe_migrate_access_memory_kunit  ==============
[13:35:42] ========= [SKIPPED] xe_migrate_access_memory_kunit =========
[13:35:42] =================== [SKIPPED] xe_migrate ===================
[13:35:42] ================== xe_dma_buf (1 subtest) ==================
[13:35:42] ==================== xe_dma_buf_kunit  =====================
[13:35:42] ================ [SKIPPED] xe_dma_buf_kunit ================
[13:35:42] =================== [SKIPPED] xe_dma_buf ===================
[13:35:42] ================= xe_bo_shrink (1 subtest) =================
[13:35:42] =================== xe_bo_shrink_kunit  ====================
[13:35:42] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[13:35:42] ================== [SKIPPED] xe_bo_shrink ==================
[13:35:42] ==================== xe_bo (2 subtests) ====================
[13:35:42] ================== xe_ccs_migrate_kunit  ===================
[13:35:42] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[13:35:42] ==================== xe_bo_evict_kunit  ====================
[13:35:42] =============== [SKIPPED] xe_bo_evict_kunit ================
[13:35:42] ===================== [SKIPPED] xe_bo ======================
[13:35:42] =================== xe_any (9 subtests) ====================
[13:35:42] [PASSED] test_to_xe
[13:35:42] [PASSED] test_to_dev
[13:35:42] [PASSED] test_to_pdev
[13:35:42] [PASSED] test_to_drm
[13:35:42] [PASSED] test_if_pdev
[13:35:42] [PASSED] test_if_xe
[13:35:42] [PASSED] test_if_tile
[13:35:42] [PASSED] test_if_gt
[13:35:42] [PASSED] test_to_id
[13:35:42] ===================== [PASSED] xe_any ======================
[13:35:42] ==================== args (13 subtests) ====================
[13:35:42] [PASSED] count_args_test
[13:35:42] [PASSED] call_args_example
[13:35:42] [PASSED] call_args_test
[13:35:42] [PASSED] drop_first_arg_example
[13:35:42] [PASSED] drop_first_arg_test
[13:35:42] [PASSED] first_arg_example
[13:35:42] [PASSED] first_arg_test
[13:35:42] [PASSED] last_arg_example
[13:35:42] [PASSED] last_arg_test
[13:35:42] [PASSED] pick_arg_example
[13:35:42] [PASSED] if_args_example
[13:35:42] [PASSED] if_args_test
[13:35:42] [PASSED] sep_comma_example
[13:35:42] ====================== [PASSED] args =======================
[13:35:42] =================== xe_pci (3 subtests) ====================
[13:35:42] ==================== check_graphics_ip  ====================
[13:35:42] [PASSED] 12.00 Xe_LP
[13:35:42] [PASSED] 12.10 Xe_LP+
[13:35:42] [PASSED] 12.55 Xe_HPG
[13:35:42] [PASSED] 12.60 Xe_HPC
[13:35:42] [PASSED] 12.70 Xe_LPG
[13:35:42] [PASSED] 12.71 Xe_LPG
[13:35:42] [PASSED] 12.74 Xe_LPG+
[13:35:42] [PASSED] 20.01 Xe2_HPG
[13:35:42] [PASSED] 20.02 Xe2_HPG
[13:35:42] [PASSED] 20.04 Xe2_LPG
[13:35:42] [PASSED] 30.00 Xe3_LPG
[13:35:42] [PASSED] 30.01 Xe3_LPG
[13:35:42] [PASSED] 30.03 Xe3_LPG
[13:35:42] [PASSED] 30.04 Xe3_LPG
[13:35:42] [PASSED] 30.05 Xe3_LPG
[13:35:42] [PASSED] 35.10 Xe3p_LPG
[13:35:42] [PASSED] 35.11 Xe3p_XPC
[13:35:42] ================ [PASSED] check_graphics_ip ================
[13:35:42] ===================== check_media_ip  ======================
[13:35:42] [PASSED] 12.00 Xe_M
[13:35:42] [PASSED] 12.55 Xe_HPM
[13:35:42] [PASSED] 13.00 Xe_LPM+
[13:35:42] [PASSED] 13.01 Xe2_HPM
[13:35:42] [PASSED] 20.00 Xe2_LPM
[13:35:42] [PASSED] 30.00 Xe3_LPM
[13:35:42] [PASSED] 30.02 Xe3_LPM
[13:35:42] [PASSED] 35.00 Xe3p_LPM
[13:35:42] [PASSED] 35.03 Xe3p_HPM
[13:35:42] ================= [PASSED] check_media_ip ==================
[13:35:42] =================== check_platform_desc  ===================
[13:35:42] [PASSED] 0x9A60 (TIGERLAKE)
[13:35:42] [PASSED] 0x9A68 (TIGERLAKE)
[13:35:42] [PASSED] 0x9A70 (TIGERLAKE)
[13:35:42] [PASSED] 0x9A40 (TIGERLAKE)
[13:35:42] [PASSED] 0x9A49 (TIGERLAKE)
[13:35:42] [PASSED] 0x9A59 (TIGERLAKE)
[13:35:42] [PASSED] 0x9A78 (TIGERLAKE)
[13:35:42] [PASSED] 0x9AC0 (TIGERLAKE)
[13:35:42] [PASSED] 0x9AC9 (TIGERLAKE)
[13:35:42] [PASSED] 0x9AD9 (TIGERLAKE)
[13:35:42] [PASSED] 0x9AF8 (TIGERLAKE)
[13:35:42] [PASSED] 0x4C80 (ROCKETLAKE)
[13:35:42] [PASSED] 0x4C8A (ROCKETLAKE)
[13:35:42] [PASSED] 0x4C8B (ROCKETLAKE)
[13:35:42] [PASSED] 0x4C8C (ROCKETLAKE)
[13:35:42] [PASSED] 0x4C90 (ROCKETLAKE)
[13:35:42] [PASSED] 0x4C9A (ROCKETLAKE)
[13:35:42] [PASSED] 0x4680 (ALDERLAKE_S)
[13:35:42] [PASSED] 0x4682 (ALDERLAKE_S)
[13:35:42] [PASSED] 0x4688 (ALDERLAKE_S)
[13:35:42] [PASSED] 0x468A (ALDERLAKE_S)
[13:35:42] [PASSED] 0x468B (ALDERLAKE_S)
[13:35:42] [PASSED] 0x4690 (ALDERLAKE_S)
[13:35:42] [PASSED] 0x4692 (ALDERLAKE_S)
[13:35:42] [PASSED] 0x4693 (ALDERLAKE_S)
[13:35:42] [PASSED] 0x46A0 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46A1 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46A2 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46A3 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46A6 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46A8 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46AA (ALDERLAKE_P)
[13:35:42] [PASSED] 0x462A (ALDERLAKE_P)
[13:35:42] [PASSED] 0x4626 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x4628 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46B0 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46B1 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46B2 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46B3 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46C0 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46C1 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46C2 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46C3 (ALDERLAKE_P)
[13:35:42] [PASSED] 0x46D0 (ALDERLAKE_N)
[13:35:42] [PASSED] 0x46D1 (ALDERLAKE_N)
[13:35:42] [PASSED] 0x46D2 (ALDERLAKE_N)
[13:35:42] [PASSED] 0x46D3 (ALDERLAKE_N)
[13:35:42] [PASSED] 0x46D4 (ALDERLAKE_N)
[13:35:42] [PASSED] 0xA721 (ALDERLAKE_P)
[13:35:42] [PASSED] 0xA7A1 (ALDERLAKE_P)
[13:35:42] [PASSED] 0xA7A9 (ALDERLAKE_P)
[13:35:42] [PASSED] 0xA7AC (ALDERLAKE_P)
[13:35:42] [PASSED] 0xA7AD (ALDERLAKE_P)
[13:35:42] [PASSED] 0xA720 (ALDERLAKE_P)
[13:35:42] [PASSED] 0xA7A0 (ALDERLAKE_P)
[13:35:42] [PASSED] 0xA7A8 (ALDERLAKE_P)
[13:35:42] [PASSED] 0xA7AA (ALDERLAKE_P)
[13:35:42] [PASSED] 0xA7AB (ALDERLAKE_P)
[13:35:42] [PASSED] 0xA780 (ALDERLAKE_S)
[13:35:42] [PASSED] 0xA781 (ALDERLAKE_S)
[13:35:42] [PASSED] 0xA782 (ALDERLAKE_S)
[13:35:42] [PASSED] 0xA783 (ALDERLAKE_S)
[13:35:42] [PASSED] 0xA788 (ALDERLAKE_S)
[13:35:42] [PASSED] 0xA789 (ALDERLAKE_S)
[13:35:42] [PASSED] 0xA78A (ALDERLAKE_S)
[13:35:42] [PASSED] 0xA78B (ALDERLAKE_S)
[13:35:42] [PASSED] 0x4905 (DG1)
[13:35:42] [PASSED] 0x4906 (DG1)
[13:35:42] [PASSED] 0x4907 (DG1)
[13:35:42] [PASSED] 0x4908 (DG1)
[13:35:42] [PASSED] 0x4909 (DG1)
[13:35:42] [PASSED] 0x56C0 (DG2)
[13:35:42] [PASSED] 0x56C2 (DG2)
[13:35:42] [PASSED] 0x56C1 (DG2)
[13:35:42] [PASSED] 0x7D51 (METEORLAKE)
[13:35:42] [PASSED] 0x7DD1 (METEORLAKE)
[13:35:42] [PASSED] 0x7D41 (METEORLAKE)
[13:35:42] [PASSED] 0x7D67 (METEORLAKE)
[13:35:42] [PASSED] 0xB640 (METEORLAKE)
[13:35:42] [PASSED] 0x56A0 (DG2)
[13:35:42] [PASSED] 0x56A1 (DG2)
[13:35:42] [PASSED] 0x56A2 (DG2)
[13:35:42] [PASSED] 0x56BE (DG2)
[13:35:42] [PASSED] 0x56BF (DG2)
[13:35:42] [PASSED] 0x5690 (DG2)
[13:35:42] [PASSED] 0x5691 (DG2)
[13:35:42] [PASSED] 0x5692 (DG2)
[13:35:42] [PASSED] 0x56A5 (DG2)
[13:35:42] [PASSED] 0x56A6 (DG2)
[13:35:42] [PASSED] 0x56B0 (DG2)
[13:35:42] [PASSED] 0x56B1 (DG2)
[13:35:42] [PASSED] 0x56BA (DG2)
[13:35:42] [PASSED] 0x56BB (DG2)
[13:35:42] [PASSED] 0x56BC (DG2)
[13:35:42] [PASSED] 0x56BD (DG2)
[13:35:42] [PASSED] 0x5693 (DG2)
[13:35:42] [PASSED] 0x5694 (DG2)
[13:35:42] [PASSED] 0x5695 (DG2)
[13:35:42] [PASSED] 0x56A3 (DG2)
[13:35:42] [PASSED] 0x56A4 (DG2)
[13:35:42] [PASSED] 0x56B2 (DG2)
[13:35:42] [PASSED] 0x56B3 (DG2)
[13:35:42] [PASSED] 0x5696 (DG2)
[13:35:42] [PASSED] 0x5697 (DG2)
[13:35:42] [PASSED] 0xB69 (PVC)
[13:35:42] [PASSED] 0xB6E (PVC)
[13:35:42] [PASSED] 0xBD4 (PVC)
[13:35:42] [PASSED] 0xBD5 (PVC)
[13:35:42] [PASSED] 0xBD6 (PVC)
[13:35:42] [PASSED] 0xBD7 (PVC)
[13:35:42] [PASSED] 0xBD8 (PVC)
[13:35:42] [PASSED] 0xBD9 (PVC)
[13:35:42] [PASSED] 0xBDA (PVC)
[13:35:42] [PASSED] 0xBDB (PVC)
[13:35:42] [PASSED] 0xBE0 (PVC)
[13:35:42] [PASSED] 0xBE1 (PVC)
[13:35:42] [PASSED] 0xBE5 (PVC)
[13:35:42] [PASSED] 0x7D40 (METEORLAKE)
[13:35:42] [PASSED] 0x7D45 (METEORLAKE)
[13:35:42] [PASSED] 0x7D55 (METEORLAKE)
[13:35:42] [PASSED] 0x7D60 (METEORLAKE)
[13:35:42] [PASSED] 0x7DD5 (METEORLAKE)
[13:35:42] [PASSED] 0x6420 (LUNARLAKE)
[13:35:42] [PASSED] 0x64A0 (LUNARLAKE)
[13:35:42] [PASSED] 0x64B0 (LUNARLAKE)
[13:35:42] [PASSED] 0xE202 (BATTLEMAGE)
[13:35:42] [PASSED] 0xE209 (BATTLEMAGE)
[13:35:42] [PASSED] 0xE20B (BATTLEMAGE)
[13:35:42] [PASSED] 0xE20C (BATTLEMAGE)
[13:35:42] [PASSED] 0xE20D (BATTLEMAGE)
[13:35:42] [PASSED] 0xE210 (BATTLEMAGE)
[13:35:42] [PASSED] 0xE211 (BATTLEMAGE)
[13:35:42] [PASSED] 0xE212 (BATTLEMAGE)
[13:35:42] [PASSED] 0xE216 (BATTLEMAGE)
[13:35:42] [PASSED] 0xE220 (BATTLEMAGE)
[13:35:42] [PASSED] 0xE221 (BATTLEMAGE)
[13:35:42] [PASSED] 0xE222 (BATTLEMAGE)
[13:35:42] [PASSED] 0xE223 (BATTLEMAGE)
[13:35:42] [PASSED] 0xB080 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB081 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB082 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB083 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB084 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB085 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB086 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB087 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB08F (PANTHERLAKE)
[13:35:42] [PASSED] 0xB090 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB0A0 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB0A1 (PANTHERLAKE)
[13:35:42] [PASSED] 0xB0B0 (PANTHERLAKE)
[13:35:42] [PASSED] 0xFD80 (PANTHERLAKE)
[13:35:42] [PASSED] 0xFD81 (PANTHERLAKE)
[13:35:42] [PASSED] 0xD740 (NOVALAKE_S)
[13:35:42] [PASSED] 0xD741 (NOVALAKE_S)
[13:35:42] [PASSED] 0xD742 (NOVALAKE_S)
[13:35:42] [PASSED] 0xD743 (NOVALAKE_S)
[13:35:42] [PASSED] 0xD745 (NOVALAKE_S)
[13:35:42] [PASSED] 0xD74A (NOVALAKE_S)
[13:35:42] [PASSED] 0xD74B (NOVALAKE_S)
[13:35:42] [PASSED] 0x674C (CRESCENTISLAND)
[13:35:42] [PASSED] 0x674D (CRESCENTISLAND)
[13:35:42] [PASSED] 0x674E (CRESCENTISLAND)
[13:35:42] [PASSED] 0x674F (CRESCENTISLAND)
[13:35:42] [PASSED] 0x6750 (CRESCENTISLAND)
[13:35:42] [PASSED] 0x6751 (CRESCENTISLAND)
[13:35:42] [PASSED] 0x6752 (CRESCENTISLAND)
[13:35:42] [PASSED] 0xD750 (NOVALAKE_P)
[13:35:42] [PASSED] 0xD751 (NOVALAKE_P)
[13:35:42] [PASSED] 0xD752 (NOVALAKE_P)
[13:35:42] [PASSED] 0xD753 (NOVALAKE_P)
[13:35:42] [PASSED] 0xD754 (NOVALAKE_P)
[13:35:42] [PASSED] 0xD755 (NOVALAKE_P)
[13:35:42] [PASSED] 0xD756 (NOVALAKE_P)
[13:35:42] [PASSED] 0xD757 (NOVALAKE_P)
[13:35:42] [PASSED] 0xD75F (NOVALAKE_P)
[13:35:42] =============== [PASSED] check_platform_desc ===============
[13:35:42] ===================== [PASSED] xe_pci ======================
[13:35:42] ============= xe_rtp_tables_test (5 subtests) ==============
[13:35:42] ================== xe_rtp_table_gt_test  ===================
[13:35:42] [PASSED] gt_was/14011060649
[13:35:42] [PASSED] gt_was/14011059788
[13:35:42] [PASSED] gt_was/14015795083
[13:35:42] [PASSED] gt_was/16021867713
[13:35:42] [PASSED] gt_was/14019449301
[13:35:42] [PASSED] gt_was/16028005424
[13:35:42] [PASSED] gt_was/14026578760
[13:35:42] [PASSED] gt_was/1409420604
[13:35:42] [PASSED] gt_was/1408615072
[13:35:42] [PASSED] gt_was/22010523718
[13:35:42] [PASSED] gt_was/14011006942
[13:35:42] [PASSED] gt_was/14014830051
[13:35:42] [PASSED] gt_was/18018781329
[13:35:42] [PASSED] gt_was/1509235366
[13:35:42] [PASSED] gt_was/18018781329
[13:35:42] [PASSED] gt_was/16016694945
[13:35:42] [PASSED] gt_was/14018575942
[13:35:42] [PASSED] gt_was/22016670082
[13:35:42] [PASSED] gt_was/22016670082
[13:35:42] [PASSED] gt_was/14017421178
[13:35:42] [PASSED] gt_was/16025250150
[13:35:42] [PASSED] gt_was/14021871409
[13:35:42] [PASSED] gt_was/16021865536
[13:35:42] [PASSED] gt_was/14021486841
[13:35:42] [PASSED] gt_was/14025160223
[13:35:42] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[13:35:42] [PASSED] gt_was/14025635424
[13:35:42] [PASSED] gt_was/16028005424
[13:35:42] ============== [PASSED] xe_rtp_table_gt_test ===============
[13:35:42] ================== xe_rtp_table_gt_test  ===================
[13:35:42] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[13:35:42] [PASSED] gt_tunings/Tuning: 32B Access Enable
[13:35:42] [PASSED] gt_tunings/Tuning: L3 cache
[13:35:42] [PASSED] gt_tunings/Tuning: L3 cache - media
[13:35:42] [PASSED] gt_tunings/Tuning: Compression Overfetch
[13:35:42] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[13:35:42] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[13:35:42] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[13:35:42] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[13:35:42] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[13:35:42] [PASSED] gt_tunings/Tuning: Stateless compression control
[13:35:42] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[13:35:42] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[13:35:42] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[13:35:42] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[13:35:42] [PASSED] gt_tunings/Tuning: Force All Non-Compressible Memory Reads to be 256B Overfetches
[13:35:42] ============== [PASSED] xe_rtp_table_gt_test ===============
[13:35:42] ================== xe_rtp_table_oob_test  ==================
[13:35:42] [PASSED] oob_was/1607983814
[13:35:42] [PASSED] oob_was/16010904313
[13:35:42] [PASSED] oob_was/18022495364
[13:35:42] [PASSED] oob_was/22012773006
[13:35:42] [PASSED] oob_was/14014475959
[13:35:42] [PASSED] oob_was/22011391025
[13:35:42] [PASSED] oob_was/22012727170
[13:35:42] [PASSED] oob_was/22012727685
[13:35:42] [PASSED] oob_was/22016596838
[13:35:42] [PASSED] oob_was/18020744125
[13:35:42] [PASSED] oob_was/1409600907
[13:35:42] [PASSED] oob_was/22014953428
[13:35:42] [PASSED] oob_was/16017236439
[13:35:42] [PASSED] oob_was/14019821291
[13:35:42] [PASSED] oob_was/14015076503
[13:35:42] [PASSED] oob_was/22016122933
[13:35:42] [PASSED] oob_was/14018913170
[13:35:42] [PASSED] oob_was/14018094691
[13:35:42] [PASSED] oob_was/18024947630
[13:35:42] [PASSED] oob_was/16022287689
[13:35:42] [PASSED] oob_was/13011645652
[13:35:42] [PASSED] oob_was/14022293748
[13:35:42] [PASSED] oob_was/22019794406
[13:35:42] [PASSED] oob_was/22019338487
[13:35:42] [PASSED] oob_was/16023588340
[13:35:42] [PASSED] oob_was/14019789679
[13:35:42] [PASSED] oob_was/14022866841
[13:35:42] [PASSED] oob_was/16021333562
[13:35:42] [PASSED] oob_was/14016712196
[13:35:42] [PASSED] oob_was/14015568240
[13:35:42] [PASSED] oob_was/18013179988
[13:35:42] [PASSED] oob_was/1508761755
[13:35:42] [PASSED] oob_was/16023105232
[13:35:42] [PASSED] oob_was/16026508708
[13:35:42] [PASSED] oob_was/14020001231
[13:35:42] [PASSED] oob_was/16023683509
[13:35:42] [PASSED] oob_was/14025515070
[13:35:42] [PASSED] oob_was/15015404425_disable
[13:35:42] [PASSED] oob_was/16026007364
[13:35:42] [PASSED] oob_was/14020316580
[13:35:42] [PASSED] oob_was/14025883347
[13:35:42] [PASSED] oob_was/16029380221
[13:35:42] [PASSED] oob_was/22022079272
[13:35:42] [PASSED] oob_was/16029897822
[13:35:42] [PASSED] oob_was/14026539277
[13:35:42] [PASSED] oob_was/14027054324
[13:35:42] [PASSED] oob_was/14025941587
[13:35:42] [PASSED] oob_was/16030224309
[13:35:42] [PASSED] oob_was/14028709524
[13:35:42] [PASSED] oob_was/14028250015
[13:35:42] [PASSED] oob_was/16031259911
[13:35:42] ============== [PASSED] xe_rtp_table_oob_test ==============
[13:35:42] ================ xe_rtp_table_dev_oob_test  ================
[13:35:42] [PASSED] device_oob_was/22010954014
[13:35:42] [PASSED] device_oob_was/15015404425
[13:35:42] [PASSED] device_oob_was/22019338487_display
[13:35:42] [PASSED] device_oob_was/14022085890
[13:35:42] [PASSED] device_oob_was/14026633728
[13:35:42] [PASSED] device_oob_was/14026746987
[13:35:42] [PASSED] device_oob_was/14026779378
[13:35:42] [PASSED] device_oob_was/14028586678
[13:35:42] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[13:35:42] ========== xe_rtp_table_missing_upper_bound_test  ==========
[13:35:42] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[13:35:42] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[13:35:42] [PASSED] register_whitelist/1806527549
[13:35:42] [PASSED] register_whitelist/allow_read_ctx_timestamp
[13:35:42] [PASSED] register_whitelist/allow_read_queue_timestamp
[13:35:42] [PASSED] register_whitelist/16014440446
[13:35:42] [PASSED] register_whitelist/16017236439
[13:35:42] [PASSED] register_whitelist/16020183090
[13:35:42] [PASSED] register_whitelist/14024997852
[13:35:42] [PASSED] register_whitelist/14024997852
[13:35:42] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[13:35:42] =============== [PASSED] xe_rtp_tables_test ================
[13:35:42] =================== xe_rtp (3 subtests) ====================
[13:35:42] =================== xe_rtp_rules_tests  ====================
[13:35:42] [PASSED] no
[13:35:42] [PASSED] yes
[13:35:42] [PASSED] no-and-no
[13:35:42] [PASSED] no-and-yes
[13:35:42] [PASSED] yes-and-no
[13:35:42] [PASSED] yes-and-yes
[13:35:42] [PASSED] no-or-no
[13:35:42] [PASSED] no-or-yes
[13:35:42] [PASSED] yes-or-no
[13:35:42] [PASSED] yes-or-yes
[13:35:42] [PASSED] no-yes-or-yes-no
[13:35:42] [PASSED] no-yes-or-yes-yes
[13:35:42] [PASSED] yes-yes-or-no-yes
[13:35:42] [PASSED] yes-yes-or-yes-yes
[13:35:42] [PASSED] no-no-or-yes-or-no
[13:35:42] [PASSED] or
[13:35:42] [PASSED] or-yes
[13:35:42] [PASSED] or-no
[13:35:42] [PASSED] yes-or
[13:35:42] [PASSED] no-or
[13:35:42] [PASSED] no-or-or-yes
[13:35:42] [PASSED] yes-or-or-no
[13:35:42] [PASSED] no-or-or-no
[13:35:42] [PASSED] missing-context-engine-class
[13:35:42] [PASSED] missing-context-engine-class-or-yes
[13:35:42] [PASSED] missing-context-engine-class-or-or-yes
[13:35:42] =============== [PASSED] xe_rtp_rules_tests ================
[13:35:42] =============== xe_rtp_process_to_sr_tests  ================
[13:35:42] [PASSED] coalesce-same-reg
[13:35:42] [PASSED] coalesce-same-reg-literal-and-func
[13:35:42] [PASSED] no-match-no-add
[13:35:42] [PASSED] two-regs-two-entries
[13:35:42] [PASSED] clr-one-set-other
[13:35:42] [PASSED] set-field
[13:35:42] [PASSED] conflict-duplicate
[13:35:42] [PASSED] conflict-not-disjoint
[13:35:42] [PASSED] conflict-not-disjoint-literal-and-func
[13:35:42] [PASSED] conflict-reg-type
[13:35:42] [PASSED] bad-mcr-reg-forced-to-regular
[13:35:42] [PASSED] bad-regular-reg-forced-to-mcr
[13:35:42] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[13:35:42] ================== xe_rtp_process_tests  ===================
[13:35:42] [PASSED] active1
[13:35:42] [PASSED] active2
[13:35:42] [PASSED] active-inactive
[13:35:42] [PASSED] inactive-active
[13:35:42] [PASSED] inactive-active-inactive
[13:35:42] [PASSED] inactive-inactive-inactive
[13:35:42] ============== [PASSED] xe_rtp_process_tests ===============
[13:35:42] ===================== [PASSED] xe_rtp ======================
[13:35:42] ==================== xe_wa (1 subtest) =====================
[13:35:42] ======================== xe_wa_gt  =========================
[13:35:42] [PASSED] TIGERLAKE B0
[13:35:42] [PASSED] DG1 A0
[13:35:42] [PASSED] DG1 B0
[13:35:42] [PASSED] ALDERLAKE_S A0
[13:35:42] [PASSED] ALDERLAKE_S B0
[13:35:42] [PASSED] ALDERLAKE_S C0
[13:35:42] [PASSED] ALDERLAKE_S D0
[13:35:42] [PASSED] ALDERLAKE_P A0
[13:35:42] [PASSED] ALDERLAKE_P B0
[13:35:42] [PASSED] ALDERLAKE_P C0
[13:35:42] [PASSED] ALDERLAKE_S RPLS D0
[13:35:42] [PASSED] ALDERLAKE_P RPLU E0
[13:35:42] [PASSED] DG2 G10 C0
[13:35:42] [PASSED] DG2 G11 B1
[13:35:42] [PASSED] DG2 G12 A1
[13:35:42] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[13:35:42] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[13:35:42] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[13:35:42] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[13:35:42] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[13:35:42] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[13:35:42] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[13:35:42] ==================== [PASSED] xe_wa_gt =====================
[13:35:42] ====================== [PASSED] xe_wa ======================
[13:35:42] ============================================================
[13:35:42] Testing complete. Ran 843 tests: passed: 814, skipped: 29
[13:35:42] Elapsed time: 41.667s total, 2.575s configuring, 38.374s building, 0.713s 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
[13:35:42] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[13:35:44] 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
[13:36:09] Starting KUnit Kernel (1/1)...
[13:36:09] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[13:36:10] ============ drm_test_pick_cmdline (2 subtests) ============
[13:36:10] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[13:36:10] =============== drm_test_pick_cmdline_named  ===============
[13:36:10] [PASSED] NTSC
[13:36:10] [PASSED] NTSC-J
[13:36:10] [PASSED] PAL
[13:36:10] [PASSED] PAL-M
[13:36:10] =========== [PASSED] drm_test_pick_cmdline_named ===========
[13:36:10] ============== [PASSED] drm_test_pick_cmdline ==============
[13:36:10] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[13:36:10] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[13:36:10] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[13:36:10] =========== drm_validate_clone_mode (2 subtests) ===========
[13:36:10] ============== drm_test_check_in_clone_mode  ===============
[13:36:10] [PASSED] in_clone_mode
[13:36:10] [PASSED] not_in_clone_mode
[13:36:10] ========== [PASSED] drm_test_check_in_clone_mode ===========
[13:36:10] =============== drm_test_check_valid_clones  ===============
[13:36:10] [PASSED] not_in_clone_mode
[13:36:10] [PASSED] valid_clone
[13:36:10] [PASSED] invalid_clone
[13:36:10] =========== [PASSED] drm_test_check_valid_clones ===========
[13:36:10] ============= [PASSED] drm_validate_clone_mode =============
[13:36:10] ============= drm_validate_modeset (1 subtest) =============
[13:36:10] [PASSED] drm_test_check_connector_changed_modeset
[13:36:10] ============== [PASSED] drm_validate_modeset ===============
[13:36:10] ====== drm_test_bridge_get_current_state (1 subtest) =======
[13:36:10] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[13:36:10] ======== [PASSED] drm_test_bridge_get_current_state ========
[13:36:10] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[13:36:10] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[13:36:10] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[13:36:10] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[13:36:10] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[13:36:10] ============== drm_bridge_alloc (2 subtests) ===============
[13:36:10] [PASSED] drm_test_drm_bridge_alloc_basic
[13:36:10] [PASSED] drm_test_drm_bridge_alloc_get_put
[13:36:10] ================ [PASSED] drm_bridge_alloc =================
[13:36:10] ============= drm_bridge_bus_fmt (5 subtests) ==============
[13:36:10] [PASSED] drm_test_bridge_rgb_yuv_rgb
[13:36:10] [PASSED] drm_test_bridge_must_convert_to_yuv444
[13:36:10] [PASSED] drm_test_bridge_hdmi_auto_rgb
[13:36:10] [PASSED] drm_test_bridge_auto_first
[13:36:10] [PASSED] drm_test_bridge_rgb_yuv_no_path
[13:36:10] =============== [PASSED] drm_bridge_bus_fmt ================
[13:36:10] ============= drm_cmdline_parser (40 subtests) =============
[13:36:10] [PASSED] drm_test_cmdline_force_d_only
[13:36:10] [PASSED] drm_test_cmdline_force_D_only_dvi
[13:36:10] [PASSED] drm_test_cmdline_force_D_only_hdmi
[13:36:10] [PASSED] drm_test_cmdline_force_D_only_not_digital
[13:36:10] [PASSED] drm_test_cmdline_force_e_only
[13:36:10] [PASSED] drm_test_cmdline_res
[13:36:10] [PASSED] drm_test_cmdline_res_vesa
[13:36:10] [PASSED] drm_test_cmdline_res_vesa_rblank
[13:36:10] [PASSED] drm_test_cmdline_res_rblank
[13:36:10] [PASSED] drm_test_cmdline_res_bpp
[13:36:10] [PASSED] drm_test_cmdline_res_refresh
[13:36:10] [PASSED] drm_test_cmdline_res_bpp_refresh
[13:36:10] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[13:36:10] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[13:36:10] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[13:36:10] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[13:36:10] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[13:36:10] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[13:36:10] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[13:36:10] [PASSED] drm_test_cmdline_res_margins_force_on
[13:36:10] [PASSED] drm_test_cmdline_res_vesa_margins
[13:36:10] [PASSED] drm_test_cmdline_name
[13:36:10] [PASSED] drm_test_cmdline_name_bpp
[13:36:10] [PASSED] drm_test_cmdline_name_option
[13:36:10] [PASSED] drm_test_cmdline_name_bpp_option
[13:36:10] [PASSED] drm_test_cmdline_rotate_0
[13:36:10] [PASSED] drm_test_cmdline_rotate_90
[13:36:10] [PASSED] drm_test_cmdline_rotate_180
[13:36:10] [PASSED] drm_test_cmdline_rotate_270
[13:36:10] [PASSED] drm_test_cmdline_hmirror
[13:36:10] [PASSED] drm_test_cmdline_vmirror
[13:36:10] [PASSED] drm_test_cmdline_margin_options
[13:36:10] [PASSED] drm_test_cmdline_multiple_options
[13:36:10] [PASSED] drm_test_cmdline_bpp_extra_and_option
[13:36:10] [PASSED] drm_test_cmdline_extra_and_option
[13:36:10] [PASSED] drm_test_cmdline_freestanding_options
[13:36:10] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[13:36:10] [PASSED] drm_test_cmdline_panel_orientation
[13:36:10] ================ drm_test_cmdline_invalid  =================
[13:36:10] [PASSED] margin_only
[13:36:10] [PASSED] interlace_only
[13:36:10] [PASSED] res_missing_x
[13:36:10] [PASSED] res_missing_y
[13:36:10] [PASSED] res_bad_y
[13:36:10] [PASSED] res_missing_y_bpp
[13:36:10] [PASSED] res_bad_bpp
[13:36:10] [PASSED] res_bad_refresh
[13:36:10] [PASSED] res_bpp_refresh_force_on_off
[13:36:10] [PASSED] res_invalid_mode
[13:36:10] [PASSED] res_bpp_wrong_place_mode
[13:36:10] [PASSED] name_bpp_refresh
[13:36:10] [PASSED] name_refresh
[13:36:10] [PASSED] name_refresh_wrong_mode
[13:36:10] [PASSED] name_refresh_invalid_mode
[13:36:10] [PASSED] rotate_multiple
[13:36:10] [PASSED] rotate_invalid_val
[13:36:10] [PASSED] rotate_truncated
[13:36:10] [PASSED] invalid_option
[13:36:10] [PASSED] invalid_tv_option
[13:36:10] [PASSED] truncated_tv_option
[13:36:10] ============ [PASSED] drm_test_cmdline_invalid =============
[13:36:10] =============== drm_test_cmdline_tv_options  ===============
[13:36:10] [PASSED] NTSC
[13:36:10] [PASSED] NTSC_443
[13:36:10] [PASSED] NTSC_J
[13:36:10] [PASSED] PAL
[13:36:10] [PASSED] PAL_M
[13:36:10] [PASSED] PAL_N
[13:36:10] [PASSED] SECAM
[13:36:10] [PASSED] MONO_525
[13:36:10] [PASSED] MONO_625
[13:36:10] =========== [PASSED] drm_test_cmdline_tv_options ===========
[13:36:10] =============== [PASSED] drm_cmdline_parser ================
[13:36:10] ========== drmm_connector_hdmi_init (20 subtests) ==========
[13:36:10] [PASSED] drm_test_connector_hdmi_init_valid
[13:36:10] [PASSED] drm_test_connector_hdmi_init_bpc_8
[13:36:10] [PASSED] drm_test_connector_hdmi_init_bpc_10
[13:36:10] [PASSED] drm_test_connector_hdmi_init_bpc_12
[13:36:10] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[13:36:10] [PASSED] drm_test_connector_hdmi_init_bpc_null
[13:36:10] [PASSED] drm_test_connector_hdmi_init_formats_empty
[13:36:10] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[13:36:10] === drm_test_connector_hdmi_init_formats_yuv420_allowed  ===
[13:36:10] [PASSED] supported_formats=0x9 yuv420_allowed=1
[13:36:10] [PASSED] supported_formats=0x9 yuv420_allowed=0
[13:36:10] [PASSED] supported_formats=0x5 yuv420_allowed=1
[13:36:10] [PASSED] supported_formats=0x5 yuv420_allowed=0
[13:36:10] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[13:36:10] [PASSED] drm_test_connector_hdmi_init_null_ddc
[13:36:10] [PASSED] drm_test_connector_hdmi_init_null_product
[13:36:10] [PASSED] drm_test_connector_hdmi_init_null_vendor
[13:36:10] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[13:36:10] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[13:36:10] [PASSED] drm_test_connector_hdmi_init_product_valid
[13:36:10] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[13:36:10] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[13:36:10] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[13:36:10] ========= drm_test_connector_hdmi_init_type_valid  =========
[13:36:10] [PASSED] HDMI-A
[13:36:10] [PASSED] HDMI-B
[13:36:10] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[13:36:10] ======== drm_test_connector_hdmi_init_type_invalid  ========
[13:36:10] [PASSED] Unknown
[13:36:10] [PASSED] VGA
[13:36:10] [PASSED] DVI-I
[13:36:10] [PASSED] DVI-D
[13:36:10] [PASSED] DVI-A
[13:36:10] [PASSED] Composite
[13:36:10] [PASSED] SVIDEO
[13:36:10] [PASSED] LVDS
[13:36:10] [PASSED] Component
[13:36:10] [PASSED] DIN
[13:36:10] [PASSED] DP
[13:36:10] [PASSED] TV
[13:36:10] [PASSED] eDP
[13:36:10] [PASSED] Virtual
[13:36:10] [PASSED] DSI
[13:36:10] [PASSED] DPI
[13:36:10] [PASSED] Writeback
[13:36:10] [PASSED] SPI
[13:36:10] [PASSED] USB
[13:36:10] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[13:36:10] ============ [PASSED] drmm_connector_hdmi_init =============
[13:36:10] ============= drmm_connector_init (3 subtests) =============
[13:36:10] [PASSED] drm_test_drmm_connector_init
[13:36:10] [PASSED] drm_test_drmm_connector_init_null_ddc
[13:36:10] ========= drm_test_drmm_connector_init_type_valid  =========
[13:36:10] [PASSED] Unknown
[13:36:10] [PASSED] VGA
[13:36:10] [PASSED] DVI-I
[13:36:10] [PASSED] DVI-D
[13:36:10] [PASSED] DVI-A
[13:36:10] [PASSED] Composite
[13:36:10] [PASSED] SVIDEO
[13:36:10] [PASSED] LVDS
[13:36:10] [PASSED] Component
[13:36:10] [PASSED] DIN
[13:36:10] [PASSED] DP
[13:36:10] [PASSED] HDMI-A
[13:36:10] [PASSED] HDMI-B
[13:36:10] [PASSED] TV
[13:36:10] [PASSED] eDP
[13:36:10] [PASSED] Virtual
[13:36:10] [PASSED] DSI
[13:36:10] [PASSED] DPI
[13:36:10] [PASSED] Writeback
[13:36:10] [PASSED] SPI
[13:36:10] [PASSED] USB
[13:36:10] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[13:36:10] =============== [PASSED] drmm_connector_init ===============
[13:36:10] ========= drm_connector_dynamic_init (6 subtests) ==========
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_init
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_init_properties
[13:36:10] ===== drm_test_drm_connector_dynamic_init_type_valid  ======
[13:36:10] [PASSED] Unknown
[13:36:10] [PASSED] VGA
[13:36:10] [PASSED] DVI-I
[13:36:10] [PASSED] DVI-D
[13:36:10] [PASSED] DVI-A
[13:36:10] [PASSED] Composite
[13:36:10] [PASSED] SVIDEO
[13:36:10] [PASSED] LVDS
[13:36:10] [PASSED] Component
[13:36:10] [PASSED] DIN
[13:36:10] [PASSED] DP
[13:36:10] [PASSED] HDMI-A
[13:36:10] [PASSED] HDMI-B
[13:36:10] [PASSED] TV
[13:36:10] [PASSED] eDP
[13:36:10] [PASSED] Virtual
[13:36:10] [PASSED] DSI
[13:36:10] [PASSED] DPI
[13:36:10] [PASSED] Writeback
[13:36:10] [PASSED] SPI
[13:36:10] [PASSED] USB
[13:36:10] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[13:36:10] ======== drm_test_drm_connector_dynamic_init_name  =========
[13:36:10] [PASSED] Unknown
[13:36:10] [PASSED] VGA
[13:36:10] [PASSED] DVI-I
[13:36:10] [PASSED] DVI-D
[13:36:10] [PASSED] DVI-A
[13:36:10] [PASSED] Composite
[13:36:10] [PASSED] SVIDEO
[13:36:10] [PASSED] LVDS
[13:36:10] [PASSED] Component
[13:36:10] [PASSED] DIN
[13:36:10] [PASSED] DP
[13:36:10] [PASSED] HDMI-A
[13:36:10] [PASSED] HDMI-B
[13:36:10] [PASSED] TV
[13:36:10] [PASSED] eDP
[13:36:10] [PASSED] Virtual
[13:36:10] [PASSED] DSI
[13:36:10] [PASSED] DPI
[13:36:10] [PASSED] Writeback
[13:36:10] [PASSED] SPI
[13:36:10] [PASSED] USB
[13:36:10] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[13:36:10] =========== [PASSED] drm_connector_dynamic_init ============
[13:36:10] ==== drm_connector_dynamic_register_early (4 subtests) =====
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[13:36:10] ====== [PASSED] drm_connector_dynamic_register_early =======
[13:36:10] ======= drm_connector_dynamic_register (7 subtests) ========
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[13:36:10] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[13:36:10] ========= [PASSED] drm_connector_dynamic_register ==========
[13:36:10] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[13:36:10] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[13:36:10] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[13:36:10] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[13:36:10] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[13:36:10] ========== drm_test_get_tv_mode_from_name_valid  ===========
[13:36:10] [PASSED] NTSC
[13:36:10] [PASSED] NTSC-443
[13:36:10] [PASSED] NTSC-J
[13:36:10] [PASSED] PAL
[13:36:10] [PASSED] PAL-M
[13:36:10] [PASSED] PAL-N
[13:36:10] [PASSED] SECAM
[13:36:10] [PASSED] Mono
[13:36:10] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[13:36:10] [PASSED] drm_test_get_tv_mode_from_name_truncated
[13:36:10] ============ [PASSED] drm_get_tv_mode_from_name ============
[13:36:10] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[13:36:10] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[13:36:10] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[13:36:10] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[13:36:10] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[13:36:10] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[13:36:10] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[13:36:10] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[13:36:10] [PASSED] VIC 96
[13:36:10] [PASSED] VIC 97
[13:36:10] [PASSED] VIC 101
[13:36:10] [PASSED] VIC 102
[13:36:10] [PASSED] VIC 106
[13:36:10] [PASSED] VIC 107
[13:36:10] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[13:36:10] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[13:36:10] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[13:36:10] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[13:36:10] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[13:36:10] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[13:36:10] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[13:36:10] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[13:36:10] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[13:36:10] [PASSED] Automatic
[13:36:10] [PASSED] Full
[13:36:10] [PASSED] Limited 16:235
[13:36:10] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[13:36:10] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[13:36:10] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[13:36:10] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[13:36:10] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[13:36:10] [PASSED] RGB
[13:36:10] [PASSED] YUV 4:2:0
[13:36:10] [PASSED] YUV 4:2:2
[13:36:10] [PASSED] YUV 4:4:4
[13:36:10] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[13:36:10] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[13:36:10] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[13:36:10] ============= drm_damage_helper (21 subtests) ==============
[13:36:10] [PASSED] drm_test_damage_iter_no_damage
[13:36:10] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[13:36:10] [PASSED] drm_test_damage_iter_no_damage_src_moved
[13:36:10] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[13:36:10] [PASSED] drm_test_damage_iter_no_damage_not_visible
[13:36:10] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[13:36:10] [PASSED] drm_test_damage_iter_no_damage_no_fb
[13:36:10] [PASSED] drm_test_damage_iter_simple_damage
[13:36:10] [PASSED] drm_test_damage_iter_single_damage
[13:36:10] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[13:36:10] [PASSED] drm_test_damage_iter_single_damage_outside_src
[13:36:10] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[13:36:10] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[13:36:10] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[13:36:10] [PASSED] drm_test_damage_iter_single_damage_src_moved
[13:36:10] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[13:36:10] [PASSED] drm_test_damage_iter_damage
[13:36:10] [PASSED] drm_test_damage_iter_damage_one_intersect
[13:36:10] [PASSED] drm_test_damage_iter_damage_one_outside
[13:36:10] [PASSED] drm_test_damage_iter_damage_src_moved
[13:36:10] [PASSED] drm_test_damage_iter_damage_not_visible
[13:36:10] ================ [PASSED] drm_damage_helper ================
[13:36:10] ============== drm_dp_mst_helper (3 subtests) ==============
[13:36:10] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[13:36:10] [PASSED] Clock 154000 BPP 30 DSC disabled
[13:36:10] [PASSED] Clock 234000 BPP 30 DSC disabled
[13:36:10] [PASSED] Clock 297000 BPP 24 DSC disabled
[13:36:10] [PASSED] Clock 332880 BPP 24 DSC enabled
[13:36:10] [PASSED] Clock 324540 BPP 24 DSC enabled
[13:36:10] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[13:36:10] ============== drm_test_dp_mst_calc_pbn_div  ===============
[13:36:10] [PASSED] Link rate 2000000 lane count 4
[13:36:10] [PASSED] Link rate 2000000 lane count 2
[13:36:10] [PASSED] Link rate 2000000 lane count 1
[13:36:10] [PASSED] Link rate 1350000 lane count 4
[13:36:10] [PASSED] Link rate 1350000 lane count 2
[13:36:10] [PASSED] Link rate 1350000 lane count 1
[13:36:10] [PASSED] Link rate 1000000 lane count 4
[13:36:10] [PASSED] Link rate 1000000 lane count 2
[13:36:10] [PASSED] Link rate 1000000 lane count 1
[13:36:10] [PASSED] Link rate 810000 lane count 4
[13:36:10] [PASSED] Link rate 810000 lane count 2
[13:36:10] [PASSED] Link rate 810000 lane count 1
[13:36:10] [PASSED] Link rate 540000 lane count 4
[13:36:10] [PASSED] Link rate 540000 lane count 2
[13:36:10] [PASSED] Link rate 540000 lane count 1
[13:36:10] [PASSED] Link rate 270000 lane count 4
[13:36:10] [PASSED] Link rate 270000 lane count 2
[13:36:10] [PASSED] Link rate 270000 lane count 1
[13:36:10] [PASSED] Link rate 162000 lane count 4
[13:36:10] [PASSED] Link rate 162000 lane count 2
[13:36:10] [PASSED] Link rate 162000 lane count 1
[13:36:10] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[13:36:10] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[13:36:10] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[13:36:10] [PASSED] DP_POWER_UP_PHY with port number
[13:36:10] [PASSED] DP_POWER_DOWN_PHY with port number
[13:36:10] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[13:36:10] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[13:36:10] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[13:36:10] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[13:36:10] [PASSED] DP_QUERY_PAYLOAD with port number
[13:36:10] [PASSED] DP_QUERY_PAYLOAD with VCPI
[13:36:10] [PASSED] DP_REMOTE_DPCD_READ with port number
[13:36:10] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[13:36:10] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[13:36:10] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[13:36:10] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[13:36:10] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[13:36:10] [PASSED] DP_REMOTE_I2C_READ with port number
[13:36:10] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[13:36:10] [PASSED] DP_REMOTE_I2C_READ with transactions array
[13:36:10] [PASSED] DP_REMOTE_I2C_WRITE with port number
[13:36:10] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[13:36:10] [PASSED] DP_REMOTE_I2C_WRITE with data array
[13:36:10] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[13:36:10] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[13:36:10] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[13:36:10] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[13:36:10] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[13:36:10] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[13:36:10] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[13:36:10] ================ [PASSED] drm_dp_mst_helper ================
[13:36:10] ================== drm_exec (7 subtests) ===================
[13:36:10] [PASSED] sanitycheck
[13:36:10] [PASSED] test_lock
[13:36:10] [PASSED] test_lock_unlock
[13:36:10] [PASSED] test_duplicates
[13:36:10] [PASSED] test_prepare
[13:36:10] [PASSED] test_prepare_array
[13:36:10] [PASSED] test_multiple_loops
[13:36:10] ==================== [PASSED] drm_exec =====================
[13:36:10] =========== drm_format_helper_test (17 subtests) ===========
[13:36:10] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[13:36:10] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[13:36:10] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[13:36:10] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[13:36:10] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[13:36:10] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[13:36:10] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[13:36:10] ============= drm_test_fb_xrgb8888_to_bgr888  ==============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[13:36:10] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[13:36:10] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[13:36:10] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[13:36:10] ============== drm_test_fb_xrgb8888_to_mono  ===============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[13:36:10] ==================== drm_test_fb_swab  =====================
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ================ [PASSED] drm_test_fb_swab =================
[13:36:10] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[13:36:10] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[13:36:10] [PASSED] single_pixel_source_buffer
[13:36:10] [PASSED] single_pixel_clip_rectangle
[13:36:10] [PASSED] well_known_colors
[13:36:10] [PASSED] destination_pitch
[13:36:10] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[13:36:10] ================= drm_test_fb_clip_offset  =================
[13:36:10] [PASSED] pass through
[13:36:10] [PASSED] horizontal offset
[13:36:10] [PASSED] vertical offset
[13:36:10] [PASSED] horizontal and vertical offset
[13:36:10] [PASSED] horizontal offset (custom pitch)
[13:36:10] [PASSED] vertical offset (custom pitch)
[13:36:10] [PASSED] horizontal and vertical offset (custom pitch)
[13:36:10] ============= [PASSED] drm_test_fb_clip_offset =============
[13:36:10] =================== drm_test_fb_memcpy  ====================
[13:36:10] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[13:36:10] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[13:36:10] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[13:36:10] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[13:36:10] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[13:36:10] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[13:36:10] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[13:36:10] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[13:36:10] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[13:36:10] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[13:36:10] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[13:36:10] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[13:36:10] =============== [PASSED] drm_test_fb_memcpy ================
[13:36:10] ============= [PASSED] drm_format_helper_test ==============
[13:36:10] ================= drm_format (18 subtests) =================
[13:36:10] [PASSED] drm_test_format_block_width_invalid
[13:36:10] [PASSED] drm_test_format_block_width_one_plane
[13:36:10] [PASSED] drm_test_format_block_width_two_plane
[13:36:10] [PASSED] drm_test_format_block_width_three_plane
[13:36:10] [PASSED] drm_test_format_block_width_tiled
[13:36:10] [PASSED] drm_test_format_block_height_invalid
[13:36:10] [PASSED] drm_test_format_block_height_one_plane
[13:36:10] [PASSED] drm_test_format_block_height_two_plane
[13:36:10] [PASSED] drm_test_format_block_height_three_plane
[13:36:10] [PASSED] drm_test_format_block_height_tiled
[13:36:10] [PASSED] drm_test_format_min_pitch_invalid
[13:36:10] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[13:36:10] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[13:36:10] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[13:36:10] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[13:36:10] [PASSED] drm_test_format_min_pitch_two_plane
[13:36:10] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[13:36:10] [PASSED] drm_test_format_min_pitch_tiled
[13:36:10] =================== [PASSED] drm_format ====================
[13:36:10] ============== drm_framebuffer (10 subtests) ===============
[13:36:10] ========== drm_test_framebuffer_check_src_coords  ==========
[13:36:10] [PASSED] Success: source fits into fb
[13:36:10] [PASSED] Fail: overflowing fb with x-axis coordinate
[13:36:10] [PASSED] Fail: overflowing fb with y-axis coordinate
[13:36:10] [PASSED] Fail: overflowing fb with source width
[13:36:10] [PASSED] Fail: overflowing fb with source height
[13:36:10] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[13:36:10] [PASSED] drm_test_framebuffer_cleanup
[13:36:10] =============== drm_test_framebuffer_create  ===============
[13:36:10] [PASSED] ABGR8888 normal sizes
[13:36:10] [PASSED] ABGR8888 max sizes
[13:36:10] [PASSED] ABGR8888 pitch greater than min required
[13:36:10] [PASSED] ABGR8888 pitch less than min required
[13:36:10] [PASSED] ABGR8888 Invalid width
[13:36:10] [PASSED] ABGR8888 Invalid buffer handle
[13:36:10] [PASSED] No pixel format
[13:36:10] [PASSED] ABGR8888 Width 0
[13:36:10] [PASSED] ABGR8888 Height 0
[13:36:10] [PASSED] ABGR8888 Out of bound height * pitch combination
[13:36:10] [PASSED] ABGR8888 Large buffer offset
[13:36:10] [PASSED] ABGR8888 Buffer offset for inexistent plane
[13:36:10] [PASSED] ABGR8888 Invalid flag
[13:36:10] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[13:36:10] [PASSED] ABGR8888 Valid buffer modifier
[13:36:10] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[13:36:10] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[13:36:10] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[13:36:10] [PASSED] NV12 Normal sizes
[13:36:10] [PASSED] NV12 Max sizes
[13:36:10] [PASSED] NV12 Invalid pitch
[13:36:10] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[13:36:10] [PASSED] NV12 different  modifier per-plane
[13:36:10] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[13:36:10] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[13:36:10] [PASSED] NV12 Modifier for inexistent plane
[13:36:10] [PASSED] NV12 Handle for inexistent plane
[13:36:10] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[13:36:10] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[13:36:10] [PASSED] YVU420 Normal sizes
[13:36:10] [PASSED] YVU420 Max sizes
[13:36:10] [PASSED] YVU420 Invalid pitch
[13:36:10] [PASSED] YVU420 Different pitches
[13:36:10] [PASSED] YVU420 Different buffer offsets/pitches
[13:36:10] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[13:36:10] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[13:36:10] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[13:36:10] [PASSED] YVU420 Valid modifier
[13:36:10] [PASSED] YVU420 Different modifiers per plane
[13:36:10] [PASSED] YVU420 Modifier for inexistent plane
[13:36:10] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[13:36:10] [PASSED] X0L2 Normal sizes
[13:36:10] [PASSED] X0L2 Max sizes
[13:36:10] [PASSED] X0L2 Invalid pitch
[13:36:10] [PASSED] X0L2 Pitch greater than minimum required
[13:36:10] [PASSED] X0L2 Handle for inexistent plane
[13:36:10] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[13:36:10] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[13:36:10] [PASSED] X0L2 Valid modifier
[13:36:10] [PASSED] X0L2 Modifier for inexistent plane
[13:36:10] =========== [PASSED] drm_test_framebuffer_create ===========
[13:36:10] [PASSED] drm_test_framebuffer_free
[13:36:10] [PASSED] drm_test_framebuffer_init
[13:36:10] [PASSED] drm_test_framebuffer_init_bad_format
[13:36:10] [PASSED] drm_test_framebuffer_init_dev_mismatch
[13:36:10] [PASSED] drm_test_framebuffer_lookup
[13:36:10] [PASSED] drm_test_framebuffer_lookup_inexistent
[13:36:10] [PASSED] drm_test_framebuffer_modifiers_not_supported
[13:36:10] ================= [PASSED] drm_framebuffer =================
[13:36:10] ================ drm_gem_shmem (8 subtests) ================
[13:36:10] [PASSED] drm_gem_shmem_test_obj_create
[13:36:10] [PASSED] drm_gem_shmem_test_obj_create_private
[13:36:10] [PASSED] drm_gem_shmem_test_pin_pages
[13:36:10] [PASSED] drm_gem_shmem_test_vmap
[13:36:10] [PASSED] drm_gem_shmem_test_get_sg_table
[13:36:10] [PASSED] drm_gem_shmem_test_get_pages_sgt
[13:36:10] [PASSED] drm_gem_shmem_test_madvise
[13:36:10] [PASSED] drm_gem_shmem_test_purge
[13:36:10] ================== [PASSED] drm_gem_shmem ==================
[13:36:10] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[13:36:10] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[13:36:10] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[13:36:10] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[13:36:10] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[13:36:10] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[13:36:10] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[13:36:10] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420  =======
[13:36:10] [PASSED] Automatic
[13:36:10] [PASSED] Full
[13:36:10] [PASSED] Limited 16:235
[13:36:10] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[13:36:10] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[13:36:10] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[13:36:10] [PASSED] drm_test_check_disable_connector
[13:36:10] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[13:36:10] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[13:36:10] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[13:36:10] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[13:36:10] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[13:36:10] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[13:36:10] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[13:36:10] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[13:36:10] [PASSED] drm_test_check_output_bpc_dvi
[13:36:10] [PASSED] drm_test_check_output_bpc_format_vic_1
[13:36:10] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[13:36:10] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[13:36:10] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[13:36:10] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[13:36:10] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[13:36:10] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[13:36:10] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[13:36:10] ============ drm_test_check_hdmi_color_format  =============
[13:36:10] [PASSED] AUTO -> RGB
[13:36:10] [PASSED] YCBCR422 -> YUV422
[13:36:10] [PASSED] YCBCR420 -> YUV420
[13:36:10] [PASSED] YCBCR444 -> YUV444
[13:36:10] [PASSED] RGB -> RGB
[13:36:10] ======== [PASSED] drm_test_check_hdmi_color_format =========
[13:36:10] ======== drm_test_check_hdmi_color_format_420_only  ========
[13:36:10] [PASSED] RGB should fail
[13:36:10] [PASSED] YUV444 should fail
[13:36:10] [PASSED] YUV422 should fail
[13:36:10] [PASSED] YUV420 should work
[13:36:10] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[13:36:10] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[13:36:10] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[13:36:10] [PASSED] drm_test_check_broadcast_rgb_value
[13:36:10] [PASSED] drm_test_check_bpc_8_value
[13:36:10] [PASSED] drm_test_check_bpc_10_value
[13:36:10] [PASSED] drm_test_check_bpc_12_value
[13:36:10] [PASSED] drm_test_check_format_value
[13:36:10] [PASSED] drm_test_check_tmds_char_value
[13:36:10] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[13:36:10] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[13:36:10] [PASSED] drm_test_check_mode_valid
[13:36:10] [PASSED] drm_test_check_mode_valid_reject
[13:36:10] [PASSED] drm_test_check_mode_valid_reject_rate
[13:36:10] [PASSED] drm_test_check_mode_valid_reject_max_clock
[13:36:10] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[13:36:10] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[13:36:10] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[13:36:10] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[13:36:10] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[13:36:10] [PASSED] drm_test_check_infoframes
[13:36:10] [PASSED] drm_test_check_reject_avi_infoframe
[13:36:10] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[13:36:10] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[13:36:10] [PASSED] drm_test_check_reject_audio_infoframe
[13:36:10] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[13:36:10] ================= drm_managed (2 subtests) =================
[13:36:10] [PASSED] drm_test_managed_release_action
[13:36:10] [PASSED] drm_test_managed_run_action
[13:36:10] =================== [PASSED] drm_managed ===================
[13:36:10] =================== drm_mm (6 subtests) ====================
[13:36:10] [PASSED] drm_test_mm_init
[13:36:10] [PASSED] drm_test_mm_debug
[13:36:10] [PASSED] drm_test_mm_align32
[13:36:10] [PASSED] drm_test_mm_align64
[13:36:10] [PASSED] drm_test_mm_lowest
[13:36:10] [PASSED] drm_test_mm_highest
[13:36:10] ===================== [PASSED] drm_mm ======================
[13:36:10] ============= drm_modes_analog_tv (5 subtests) =============
[13:36:10] [PASSED] drm_test_modes_analog_tv_mono_576i
[13:36:10] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[13:36:10] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[13:36:10] [PASSED] drm_test_modes_analog_tv_pal_576i
[13:36:10] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[13:36:10] =============== [PASSED] drm_modes_analog_tv ===============
[13:36:10] ============== drm_panic_helper (3 subtests) ===============
[13:36:10] ============= drm_test_panic_screen_user_map  ==============
[13:36:10] [PASSED] Panic screen user, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen user, mode: 494 x 494 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen user, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen user, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[13:36:10] [PASSED] Panic screen user, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen kmsg, mode: 494 x 494 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[13:36:10] ========= [PASSED] drm_test_panic_screen_user_map ==========
[13:36:10] ============= drm_test_panic_screen_user_page  =============
[13:36:10] [PASSED] Panic screen user, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen user, mode: 494 x 494 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen user, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen user, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[13:36:10] [PASSED] Panic screen user, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen kmsg, mode: 494 x 494 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[13:36:10] ========= [PASSED] drm_test_panic_screen_user_page =========
[13:36:10] ========== drm_test_panic_screen_user_set_pixel  ===========
[13:36:10] [PASSED] Panic screen user, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen user, mode: 494 x 494 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen user, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen user, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[13:36:10] [PASSED] Panic screen user, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen kmsg, mode: 494 x 494 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[13:36:10] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[13:36:10] ====== [PASSED] drm_test_panic_screen_user_set_pixel =======
[13:36:10] ================ [PASSED] drm_panic_helper =================
[13:36:10] ============== drm_plane_helper (2 subtests) ===============
[13:36:10] =============== drm_test_check_plane_state  ================
[13:36:10] [PASSED] clipping_simple
[13:36:10] [PASSED] clipping_rotate_reflect
[13:36:10] [PASSED] positioning_simple
[13:36:10] [PASSED] upscaling
[13:36:10] [PASSED] downscaling
[13:36:10] [PASSED] rounding1
[13:36:10] [PASSED] rounding2
[13:36:10] [PASSED] rounding3
[13:36:10] [PASSED] rounding4
[13:36:10] =========== [PASSED] drm_test_check_plane_state ============
[13:36:10] =========== drm_test_check_invalid_plane_state  ============
[13:36:10] [PASSED] positioning_invalid
[13:36:10] [PASSED] upscaling_invalid
[13:36:10] [PASSED] downscaling_invalid
[13:36:10] ======= [PASSED] drm_test_check_invalid_plane_state ========
[13:36:10] ================ [PASSED] drm_plane_helper =================
[13:36:10] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[13:36:10] ====== drm_test_connector_helper_tv_get_modes_check  =======
[13:36:10] [PASSED] None
[13:36:10] [PASSED] PAL
[13:36:10] [PASSED] NTSC
[13:36:10] [PASSED] Both, NTSC Default
[13:36:10] [PASSED] Both, PAL Default
[13:36:10] [PASSED] Both, NTSC Default, with PAL on command-line
[13:36:10] [PASSED] Both, PAL Default, with NTSC on command-line
[13:36:10] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[13:36:10] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[13:36:10] ================== drm_rect (9 subtests) ===================
[13:36:10] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[13:36:10] [PASSED] drm_test_rect_clip_scaled_not_clipped
[13:36:10] [PASSED] drm_test_rect_clip_scaled_clipped
[13:36:10] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[13:36:10] ================= drm_test_rect_intersect  =================
[13:36:10] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[13:36:10] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[13:36:10] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[13:36:10] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[13:36:10] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[13:36:10] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[13:36:10] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[13:36:10] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[13:36:10] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[13:36:10] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[13:36:10] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[13:36:10] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[13:36:10] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[13:36:10] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[13:36:10] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[13:36:10] ============= [PASSED] drm_test_rect_intersect =============
[13:36:10] ================ drm_test_rect_calc_hscale  ================
[13:36:10] [PASSED] normal use
[13:36:10] [PASSED] out of max range
[13:36:10] [PASSED] out of min range
[13:36:10] [PASSED] zero dst
[13:36:10] [PASSED] negative src
[13:36:10] [PASSED] negative dst
[13:36:10] ============ [PASSED] drm_test_rect_calc_hscale ============
[13:36:10] ================ drm_test_rect_calc_vscale  ================
[13:36:10] [PASSED] normal use
[13:36:10] [PASSED] out of max range
[13:36:10] [PASSED] out of min range
[13:36:10] [PASSED] zero dst
[13:36:10] [PASSED] negative src
[13:36:10] [PASSED] negative dst
[13:36:10] ============ [PASSED] drm_test_rect_calc_vscale ============
[13:36:10] ================== drm_test_rect_rotate  ===================
[13:36:10] [PASSED] reflect-x
[13:36:10] [PASSED] reflect-y
[13:36:10] [PASSED] rotate-0
[13:36:10] [PASSED] rotate-90
[13:36:10] [PASSED] rotate-180
[13:36:10] [PASSED] rotate-270
[13:36:10] ============== [PASSED] drm_test_rect_rotate ===============
[13:36:10] ================ drm_test_rect_rotate_inv  =================
[13:36:10] [PASSED] reflect-x
[13:36:10] [PASSED] reflect-y
[13:36:10] [PASSED] rotate-0
[13:36:10] [PASSED] rotate-90
[13:36:10] [PASSED] rotate-180
[13:36:10] [PASSED] rotate-270
[13:36:10] ============ [PASSED] drm_test_rect_rotate_inv =============
[13:36:10] ==================== [PASSED] drm_rect =====================
[13:36:10] ============ drm_sysfb_modeset_test (1 subtest) ============
[13:36:10] ============ drm_test_sysfb_build_fourcc_list  =============
[13:36:10] [PASSED] no native formats
[13:36:10] [PASSED] XRGB8888 as native format
[13:36:10] [PASSED] remove duplicates
[13:36:10] [PASSED] convert alpha formats
[13:36:10] [PASSED] random formats
[13:36:10] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[13:36:10] ============= [PASSED] drm_sysfb_modeset_test ==============
[13:36:10] ================== drm_fixp (2 subtests) ===================
[13:36:10] [PASSED] drm_test_int2fixp
[13:36:10] [PASSED] drm_test_sm2fixp
[13:36:10] ==================== [PASSED] drm_fixp =====================
[13:36:10] ============================================================
[13:36:10] Testing complete. Ran 667 tests: passed: 667
[13:36:10] Elapsed time: 28.075s total, 2.515s configuring, 25.143s building, 0.409s 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
[13:36:10] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[13:36: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
[13:36:23] Starting KUnit Kernel (1/1)...
[13:36:23] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[13:36:23] ================= ttm_device (5 subtests) ==================
[13:36:23] [PASSED] ttm_device_init_basic
[13:36:23] [PASSED] ttm_device_init_multiple
[13:36:23] [PASSED] ttm_device_fini_basic
[13:36:23] [PASSED] ttm_device_init_no_vma_man
[13:36:23] ================== ttm_device_init_pools  ==================
[13:36:23] [PASSED] No DMA allocations, no DMA32 required
[13:36:23] [PASSED] DMA allocations, DMA32 required
[13:36:23] [PASSED] No DMA allocations, DMA32 required
[13:36:23] [PASSED] DMA allocations, no DMA32 required
[13:36:23] ============== [PASSED] ttm_device_init_pools ==============
[13:36:23] =================== [PASSED] ttm_device ====================
[13:36:23] ================== ttm_pool (8 subtests) ===================
[13:36:23] ================== ttm_pool_alloc_basic  ===================
[13:36:23] [PASSED] One page
[13:36:23] [PASSED] More than one page
[13:36:23] [PASSED] Above the allocation limit
[13:36:23] [PASSED] One page, with coherent DMA mappings enabled
[13:36:23] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[13:36:23] ============== [PASSED] ttm_pool_alloc_basic ===============
[13:36:23] ============== ttm_pool_alloc_basic_dma_addr  ==============
[13:36:23] [PASSED] One page
[13:36:23] [PASSED] More than one page
[13:36:23] [PASSED] Above the allocation limit
[13:36:23] [PASSED] One page, with coherent DMA mappings enabled
[13:36:23] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[13:36:23] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[13:36:23] [PASSED] ttm_pool_alloc_order_caching_match
[13:36:23] [PASSED] ttm_pool_alloc_caching_mismatch
[13:36:23] [PASSED] ttm_pool_alloc_order_mismatch
[13:36:23] [PASSED] ttm_pool_free_dma_alloc
[13:36:23] [PASSED] ttm_pool_free_no_dma_alloc
[13:36:23] [PASSED] ttm_pool_fini_basic
[13:36:23] ==================== [PASSED] ttm_pool =====================
[13:36:23] ================ ttm_resource (8 subtests) =================
[13:36:23] ================= ttm_resource_init_basic  =================
[13:36:23] [PASSED] Init resource in TTM_PL_SYSTEM
[13:36:23] [PASSED] Init resource in TTM_PL_VRAM
[13:36:23] [PASSED] Init resource in a private placement
[13:36:23] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[13:36:23] ============= [PASSED] ttm_resource_init_basic =============
[13:36:23] [PASSED] ttm_resource_init_pinned
[13:36:23] [PASSED] ttm_resource_fini_basic
[13:36:23] [PASSED] ttm_resource_manager_init_basic
[13:36:23] [PASSED] ttm_resource_manager_usage_basic
[13:36:23] [PASSED] ttm_resource_manager_set_used_basic
[13:36:23] [PASSED] ttm_sys_man_alloc_basic
[13:36:23] [PASSED] ttm_sys_man_free_basic
[13:36:23] ================== [PASSED] ttm_resource ===================
[13:36:23] =================== ttm_tt (15 subtests) ===================
[13:36:23] ==================== ttm_tt_init_basic  ====================
[13:36:23] [PASSED] Page-aligned size
[13:36:23] [PASSED] Extra pages requested
[13:36:23] ================ [PASSED] ttm_tt_init_basic ================
[13:36:23] [PASSED] ttm_tt_init_misaligned
[13:36:23] [PASSED] ttm_tt_fini_basic
[13:36:23] [PASSED] ttm_tt_fini_sg
[13:36:23] [PASSED] ttm_tt_fini_shmem
[13:36:23] [PASSED] ttm_tt_create_basic
[13:36:23] [PASSED] ttm_tt_create_invalid_bo_type
[13:36:23] [PASSED] ttm_tt_create_ttm_exists
[13:36:23] [PASSED] ttm_tt_create_failed
[13:36:23] [PASSED] ttm_tt_destroy_basic
[13:36:23] [PASSED] ttm_tt_populate_null_ttm
[13:36:23] [PASSED] ttm_tt_populate_populated_ttm
[13:36:23] [PASSED] ttm_tt_unpopulate_basic
[13:36:23] [PASSED] ttm_tt_unpopulate_empty_ttm
[13:36:23] [PASSED] ttm_tt_swapin_basic
[13:36:23] ===================== [PASSED] ttm_tt ======================
[13:36:23] =================== ttm_bo (14 subtests) ===================
[13:36:23] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[13:36:23] [PASSED] Cannot be interrupted and sleeps
[13:36:23] [PASSED] Cannot be interrupted, locks straight away
[13:36:23] [PASSED] Can be interrupted, sleeps
[13:36:23] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[13:36:23] [PASSED] ttm_bo_reserve_locked_no_sleep
[13:36:23] [PASSED] ttm_bo_reserve_no_wait_ticket
[13:36:23] [PASSED] ttm_bo_reserve_double_resv
[13:36:23] [PASSED] ttm_bo_reserve_interrupted
[13:36:23] [PASSED] ttm_bo_reserve_deadlock
[13:36:23] [PASSED] ttm_bo_unreserve_basic
[13:36:23] [PASSED] ttm_bo_unreserve_pinned
[13:36:23] [PASSED] ttm_bo_unreserve_bulk
[13:36:23] [PASSED] ttm_bo_fini_basic
[13:36:23] [PASSED] ttm_bo_fini_shared_resv
[13:36:23] [PASSED] ttm_bo_pin_basic
[13:36:23] [PASSED] ttm_bo_pin_unpin_resource
[13:36:23] [PASSED] ttm_bo_multiple_pin_one_unpin
[13:36:23] ===================== [PASSED] ttm_bo ======================
[13:36:23] ============== ttm_bo_validate (22 subtests) ===============
[13:36:23] ============== ttm_bo_init_reserved_sys_man  ===============
[13:36:23] [PASSED] Buffer object for userspace
[13:36:23] [PASSED] Kernel buffer object
[13:36:23] [PASSED] Shared buffer object
[13:36:23] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[13:36:23] ============== ttm_bo_init_reserved_mock_man  ==============
[13:36:23] [PASSED] Buffer object for userspace
[13:36:23] [PASSED] Kernel buffer object
[13:36:23] [PASSED] Shared buffer object
[13:36:23] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[13:36:23] [PASSED] ttm_bo_init_reserved_resv
[13:36:23] ================== ttm_bo_validate_basic  ==================
[13:36:23] [PASSED] Buffer object for userspace
[13:36:23] [PASSED] Kernel buffer object
[13:36:23] [PASSED] Shared buffer object
[13:36:23] ============== [PASSED] ttm_bo_validate_basic ==============
[13:36:23] [PASSED] ttm_bo_validate_invalid_placement
[13:36:23] ============= ttm_bo_validate_same_placement  ==============
[13:36:23] [PASSED] System manager
[13:36:23] [PASSED] VRAM manager
[13:36:23] ========= [PASSED] ttm_bo_validate_same_placement ==========
[13:36:23] [PASSED] ttm_bo_validate_failed_alloc
[13:36:23] [PASSED] ttm_bo_validate_pinned
[13:36:23] [PASSED] ttm_bo_validate_busy_placement
[13:36:23] ================ ttm_bo_validate_multihop  =================
[13:36:23] [PASSED] Buffer object for userspace
[13:36:23] [PASSED] Kernel buffer object
[13:36:23] [PASSED] Shared buffer object
[13:36:23] ============ [PASSED] ttm_bo_validate_multihop =============
[13:36:23] ========== ttm_bo_validate_no_placement_signaled  ==========
[13:36:23] [PASSED] Buffer object in system domain, no page vector
[13:36:23] [PASSED] Buffer object in system domain with an existing page vector
[13:36:23] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[13:36:23] ======== ttm_bo_validate_no_placement_not_signaled  ========
[13:36:23] [PASSED] Buffer object for userspace
[13:36:23] [PASSED] Kernel buffer object
[13:36:23] [PASSED] Shared buffer object
[13:36:23] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[13:36:23] [PASSED] ttm_bo_validate_move_fence_signaled
[13:36:23] ========= ttm_bo_validate_move_fence_not_signaled  =========
[13:36:23] [PASSED] Waits for GPU
[13:36:23] [PASSED] Tries to lock straight away
[13:36:23] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[13:36:23] [PASSED] ttm_bo_validate_swapout
[13:36:23] [PASSED] ttm_bo_validate_happy_evict
[13:36:23] [PASSED] ttm_bo_validate_all_pinned_evict
[13:36:23] [PASSED] ttm_bo_validate_allowed_only_evict
[13:36:23] [PASSED] ttm_bo_validate_deleted_evict
[13:36:23] [PASSED] ttm_bo_validate_busy_domain_evict
[13:36:23] [PASSED] ttm_bo_validate_evict_gutting
[13:36:23] [PASSED] ttm_bo_validate_recrusive_evict
[13:36:23] ================= [PASSED] ttm_bo_validate =================
[13:36:23] ============================================================
[13:36:23] Testing complete. Ran 102 tests: passed: 102
[13:36:23] Elapsed time: 12.830s total, 2.531s configuring, 10.085s building, 0.179s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[13:36:23] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[13:36:25] 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
[13:36:34] Starting KUnit Kernel (1/1)...
[13:36:34] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[13:36:34] =============== dma-buf-fence (12 subtests) ================
[13:36:34] [PASSED] test_sanitycheck
[13:36:34] [PASSED] test_signaling
[13:36:34] [PASSED] test_add_callback
[13:36:34] [PASSED] test_late_add_callback
[13:36:34] [PASSED] test_rm_callback
[13:36:34] [PASSED] test_late_rm_callback
[13:36:34] [PASSED] test_status
[13:36:34] [PASSED] test_error
[13:36:34] [PASSED] test_wait
[13:36:34] [PASSED] test_wait_timeout
[13:36:34] [PASSED] test_stub
[13:36:34] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[13:36:34] ================== [PASSED] dma-buf-fence ==================
[13:36:34] ============ dma-buf-fence-chain (11 subtests) =============
[13:36:34] [PASSED] test_sanitycheck
[13:36:34] [PASSED] test_find_seqno
[13:36:34] [PASSED] test_find_signaled
[13:36:34] [PASSED] test_find_out_of_order
[13:36:39] [PASSED] test_find_gap
[13:36:39] [PASSED] test_find_race
[13:36:39] [PASSED] test_signal_forward
[13:36:40] [PASSED] test_signal_backward
[13:36:40] [PASSED] test_wait_forward
[13:36:40] [PASSED] test_wait_backward
[13:36:40] [PASSED] test_wait_random
[13:36:40] =============== [PASSED] dma-buf-fence-chain ===============
[13:36:40] ============ dma-buf-fence-unwrap (11 subtests) ============
[13:36:40] [PASSED] test_sanitycheck
[13:36:40] [PASSED] test_unwrap_array
[13:36:40] [PASSED] test_unwrap_chain
[13:36:40] [PASSED] test_unwrap_chain_array
[13:36:40] [PASSED] test_unwrap_merge
[13:36:40] [PASSED] test_unwrap_merge_duplicate
[13:36:40] [PASSED] test_unwrap_merge_seqno
[13:36:40] [PASSED] test_unwrap_merge_order
[13:36:40] [PASSED] test_unwrap_merge_complex
[13:36:40] [PASSED] test_unwrap_merge_complex_seqno
[13:36:40] [PASSED] test_dedup_empty
[13:36:40] ============== [PASSED] dma-buf-fence-unwrap ===============
[13:36:40] ================ dma-buf-resv (5 subtests) =================
[13:36:40] [PASSED] test_sanitycheck
[13:36:40] ===================== test_signaling  ======================
[13:36:40] [PASSED] kernel
[13:36:40] [PASSED] write
[13:36:40] [PASSED] read
[13:36:40] [PASSED] bookkeep
[13:36:40] ================= [PASSED] test_signaling ==================
[13:36:40] ====================== test_for_each  ======================
[13:36:40] [PASSED] kernel
[13:36:40] [PASSED] write
[13:36:40] [PASSED] read
[13:36:40] [PASSED] bookkeep
[13:36:40] ================== [PASSED] test_for_each ==================
[13:36:40] ================= test_for_each_unlocked  ==================
[13:36:40] [PASSED] kernel
[13:36:40] [PASSED] write
[13:36:40] [PASSED] read
[13:36:40] [PASSED] bookkeep
[13:36:40] ============= [PASSED] test_for_each_unlocked ==============
[13:36:40] ===================== test_get_fences  =====================
[13:36:40] [PASSED] kernel
[13:36:40] [PASSED] write
[13:36:40] [PASSED] read
[13:36:40] [PASSED] bookkeep
[13:36:40] ================= [PASSED] test_get_fences =================
[13:36:40] ================== [PASSED] dma-buf-resv ===================
[13:36:40] ============================================================
[13:36:40] Testing complete. Ran 51 tests: passed: 50, skipped: 1
[13:36:40] Elapsed time: 16.639s total, 2.523s configuring, 8.845s building, 5.262s running

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



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

* ✓ Xe.CI.BAT: success for drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages
  2026-11-12 12:43 [PATCH V2 0/3] drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages Tejas Upadhyay
                   ` (3 preceding siblings ...)
  2026-11-12 13:36 ` ✓ CI.KUnit: success for drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages Patchwork
@ 2026-11-12 14:21 ` Patchwork
  4 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-11-12 14:21 UTC (permalink / raw)
  To: Tejas Upadhyay; +Cc: intel-xe

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

== Series Details ==

Series: drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages
URL   : https://patchwork.freedesktop.org/series/178398/
State : success

== Summary ==

CI Bug Log - changes from xe-6122-dcb141db4902506bf453aaa669437b83ae0ef754_BAT -> xe-pw-178398v1_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (15 -> 15)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


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

  * Linux: xe-6122-dcb141db4902506bf453aaa669437b83ae0ef754 -> xe-pw-178398v1

  IGT_9187: 9187
  xe-6122-dcb141db4902506bf453aaa669437b83ae0ef754: dcb141db4902506bf453aaa669437b83ae0ef754
  xe-pw-178398v1: 178398v1

== Logs ==

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

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

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

end of thread, other threads:[~2026-11-12 14:21 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-12 12:43 [PATCH V2 0/3] drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages Tejas Upadhyay
2026-11-12 12:43 ` [PATCH V2 1/3] drm/xe/vram: add " Tejas Upadhyay
2026-11-12 13:03   ` sashiko-bot
2026-11-12 12:43 ` [PATCH V2 2/3] drm/xe/vram: don't let firmware-confirmed permanent bad pages decay back in Tejas Upadhyay
2026-11-12 12:54   ` sashiko-bot
2026-11-12 12:43 ` [PATCH V2 3/3] drm/xe/vram: stop decay worker from rescheduling itself forever Tejas Upadhyay
2026-11-12 12:55   ` sashiko-bot
2026-11-12 13:36 ` ✓ CI.KUnit: success for drm/xe/vram: decay-based reinstatement of soft-offlined VRAM pages Patchwork
2026-11-12 14:21 ` ✓ 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