intel-xe.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] drm/ttm: Really use a separate LRU list for swapped- and pinned objects
@ 2024-09-03  9:47 Thomas Hellström
  2024-09-03  9:47 ` [PATCH v2 1/2] drm/ttm: Move swapped objects off the manager's LRU list Thomas Hellström
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Thomas Hellström @ 2024-09-03  9:47 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Christian König, Matthew Brost,
	dri-devel

Resources of swapped objects were never moved off their LRU list
when swapped, and also resources of pinned objects might remain on
their LRU list unless the driver moved them to the device pinned list
after pinning.

Rename the device "pinned" list to "unevictable" and ensure that resources
of objects that are pinned or swapped are moved to that list.

RFC: Should we instead of a device-wide unevictable list, introduce an
unevictable priority so that all objects remain with their resource's
respective manager?

Patch 1/2 deals with swapped objects and also handles the problem of
moving objects back to their manager's LRU list when populating.

Patch 2/2 deals with pinned objects.

v2:
- Address review comments by Christian König.
- Make TTM KUNIT tests build.

Cc: Christian König <christian.koenig@amd.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: <dri-devel@lists.freedesktop.org>

Thomas Hellström (2):
  drm/ttm: Move swapped objects off the manager's LRU list
  drm/ttm: Move pinned objects off LRU lists when pinning

 drivers/gpu/drm/i915/gem/i915_gem_ttm.c       |  2 +-
 drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c  |  2 +-
 drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c    |  4 +-
 drivers/gpu/drm/ttm/tests/ttm_bo_test.c       |  4 +-
 drivers/gpu/drm/ttm/tests/ttm_resource_test.c |  6 +-
 drivers/gpu/drm/ttm/ttm_bo.c                  | 69 +++++++++++++++++--
 drivers/gpu/drm/ttm/ttm_bo_util.c             |  6 +-
 drivers/gpu/drm/ttm/ttm_bo_vm.c               |  2 +-
 drivers/gpu/drm/ttm/ttm_device.c              |  4 +-
 drivers/gpu/drm/ttm/ttm_resource.c            | 15 ++--
 drivers/gpu/drm/ttm/ttm_tt.c                  |  2 +
 drivers/gpu/drm/xe/xe_bo.c                    |  4 +-
 include/drm/ttm/ttm_bo.h                      |  2 +
 include/drm/ttm/ttm_device.h                  |  5 +-
 include/drm/ttm/ttm_tt.h                      |  5 ++
 15 files changed, 102 insertions(+), 30 deletions(-)

-- 
2.46.0


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

* [PATCH v2 1/2] drm/ttm: Move swapped objects off the manager's LRU list
  2024-09-03  9:47 [PATCH v2 0/2] drm/ttm: Really use a separate LRU list for swapped- and pinned objects Thomas Hellström
@ 2024-09-03  9:47 ` Thomas Hellström
  2024-09-03  9:47 ` [PATCH v2 2/2] drm/ttm: Move pinned objects off LRU lists when pinning Thomas Hellström
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Thomas Hellström @ 2024-09-03  9:47 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Christian König, Matthew Brost,
	dri-devel

Resources of swapped objects remains on the TTM_PL_SYSTEM manager's
LRU list, which is bad for the LRU walk efficiency.

Rename the device-wide "pinned" list to "unevictable" and move
also resources of swapped-out objects to that list.

An alternative would be to create an "UNEVICTABLE" priority to
be able to keep the pinned- and swapped objects on their
respective manager's LRU without affecting the LRU walk efficiency.

v2:
- Remove a bogus WARN_ON (Christian König)
- Update ttm_resource_[add|del] bulk move (Christian König)
- Fix TTM KUNIT tests (Intel CI)

Cc: Christian König <christian.koenig@amd.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: <dri-devel@lists.freedesktop.org>
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
 drivers/gpu/drm/i915/gem/i915_gem_ttm.c       |  2 +-
 drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c  |  2 +-
 drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c    |  4 +-
 drivers/gpu/drm/ttm/tests/ttm_bo_test.c       |  4 +-
 drivers/gpu/drm/ttm/tests/ttm_resource_test.c |  6 +-
 drivers/gpu/drm/ttm/ttm_bo.c                  | 60 ++++++++++++++++++-
 drivers/gpu/drm/ttm/ttm_bo_util.c             |  6 +-
 drivers/gpu/drm/ttm/ttm_bo_vm.c               |  2 +-
 drivers/gpu/drm/ttm/ttm_device.c              |  4 +-
 drivers/gpu/drm/ttm/ttm_resource.c            | 15 +++--
 drivers/gpu/drm/ttm/ttm_tt.c                  |  2 +
 drivers/gpu/drm/xe/xe_bo.c                    |  4 +-
 include/drm/ttm/ttm_bo.h                      |  2 +
 include/drm/ttm/ttm_device.h                  |  5 +-
 include/drm/ttm/ttm_tt.h                      |  5 ++
 15 files changed, 96 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
index 5c72462d1f57..7de284766f82 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
@@ -808,7 +808,7 @@ static int __i915_ttm_get_pages(struct drm_i915_gem_object *obj,
 	}
 
 	if (bo->ttm && !ttm_tt_is_populated(bo->ttm)) {
-		ret = ttm_tt_populate(bo->bdev, bo->ttm, &ctx);
+		ret = ttm_bo_populate(bo, &ctx);
 		if (ret)
 			return ret;
 
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
index 03b00a03a634..041dab543b78 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm_move.c
@@ -624,7 +624,7 @@ int i915_ttm_move(struct ttm_buffer_object *bo, bool evict,
 
 	/* Populate ttm with pages if needed. Typically system memory. */
 	if (ttm && (dst_man->use_tt || (ttm->page_flags & TTM_TT_FLAG_SWAPPED))) {
-		ret = ttm_tt_populate(bo->bdev, ttm, ctx);
+		ret = ttm_bo_populate(bo, ctx);
 		if (ret)
 			return ret;
 	}
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
index ad649523d5e0..61596cecce4d 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.c
@@ -90,7 +90,7 @@ static int i915_ttm_backup(struct i915_gem_apply_to_region *apply,
 		goto out_no_lock;
 
 	backup_bo = i915_gem_to_ttm(backup);
-	err = ttm_tt_populate(backup_bo->bdev, backup_bo->ttm, &ctx);
+	err = ttm_bo_populate(backup_bo, &ctx);
 	if (err)
 		goto out_no_populate;
 
@@ -189,7 +189,7 @@ static int i915_ttm_restore(struct i915_gem_apply_to_region *apply,
 	if (!backup_bo->resource)
 		err = ttm_bo_validate(backup_bo, i915_ttm_sys_placement(), &ctx);
 	if (!err)
-		err = ttm_tt_populate(backup_bo->bdev, backup_bo->ttm, &ctx);
+		err = ttm_bo_populate(backup_bo, &ctx);
 	if (!err) {
 		err = i915_gem_obj_copy_ttm(obj, backup, pm_apply->allow_gpu,
 					    false);
diff --git a/drivers/gpu/drm/ttm/tests/ttm_bo_test.c b/drivers/gpu/drm/ttm/tests/ttm_bo_test.c
index f0a7eb62116c..3139fd9128d8 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_bo_test.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_bo_test.c
@@ -308,11 +308,11 @@ static void ttm_bo_unreserve_pinned(struct kunit *test)
 	err = ttm_resource_alloc(bo, place, &res2);
 	KUNIT_ASSERT_EQ(test, err, 0);
 	KUNIT_ASSERT_EQ(test,
-			list_is_last(&res2->lru.link, &priv->ttm_dev->pinned), 1);
+			list_is_last(&res2->lru.link, &priv->ttm_dev->unevictable), 1);
 
 	ttm_bo_unreserve(bo);
 	KUNIT_ASSERT_EQ(test,
-			list_is_last(&res1->lru.link, &priv->ttm_dev->pinned), 1);
+			list_is_last(&res1->lru.link, &priv->ttm_dev->unevictable), 1);
 
 	ttm_resource_free(bo, &res1);
 	ttm_resource_free(bo, &res2);
diff --git a/drivers/gpu/drm/ttm/tests/ttm_resource_test.c b/drivers/gpu/drm/ttm/tests/ttm_resource_test.c
index 22260e7aea58..a9f4b81921c3 100644
--- a/drivers/gpu/drm/ttm/tests/ttm_resource_test.c
+++ b/drivers/gpu/drm/ttm/tests/ttm_resource_test.c
@@ -164,18 +164,18 @@ static void ttm_resource_init_pinned(struct kunit *test)
 
 	res = kunit_kzalloc(test, sizeof(*res), GFP_KERNEL);
 	KUNIT_ASSERT_NOT_NULL(test, res);
-	KUNIT_ASSERT_TRUE(test, list_empty(&bo->bdev->pinned));
+	KUNIT_ASSERT_TRUE(test, list_empty(&bo->bdev->unevictable));
 
 	dma_resv_lock(bo->base.resv, NULL);
 	ttm_bo_pin(bo);
 	ttm_resource_init(bo, place, res);
-	KUNIT_ASSERT_TRUE(test, list_is_singular(&bo->bdev->pinned));
+	KUNIT_ASSERT_TRUE(test, list_is_singular(&bo->bdev->unevictable));
 
 	ttm_bo_unpin(bo);
 	ttm_resource_fini(man, res);
 	dma_resv_unlock(bo->base.resv);
 
-	KUNIT_ASSERT_TRUE(test, list_empty(&bo->bdev->pinned));
+	KUNIT_ASSERT_TRUE(test, list_empty(&bo->bdev->unevictable));
 }
 
 static void ttm_resource_fini_basic(struct kunit *test)
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 320592435252..ae29915c52c0 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -139,7 +139,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
 			goto out_err;
 
 		if (mem->mem_type != TTM_PL_SYSTEM) {
-			ret = ttm_tt_populate(bo->bdev, bo->ttm, ctx);
+			ret = ttm_bo_populate(bo, ctx);
 			if (ret)
 				goto out_err;
 		}
@@ -1128,9 +1128,22 @@ ttm_bo_swapout_cb(struct ttm_lru_walk *walk, struct ttm_buffer_object *bo)
 	if (bo->bdev->funcs->swap_notify)
 		bo->bdev->funcs->swap_notify(bo);
 
-	if (ttm_tt_is_populated(bo->ttm))
+	if (ttm_tt_is_populated(bo->ttm)) {
+		spin_lock(&bo->bdev->lru_lock);
+		ttm_resource_del_bulk_move(bo->resource, bo);
+		ttm_resource_move_to_lru_tail(bo->resource);
+		spin_unlock(&bo->bdev->lru_lock);
+
 		ret = ttm_tt_swapout(bo->bdev, bo->ttm, swapout_walk->gfp_flags);
 
+		if (ret) {
+			spin_lock(&bo->bdev->lru_lock);
+			ttm_resource_add_bulk_move(bo->resource, bo);
+			ttm_resource_move_to_lru_tail(bo->resource);
+			spin_unlock(&bo->bdev->lru_lock);
+		}
+	}
+
 out:
 	/* Consider -ENOMEM and -ENOSPC non-fatal. */
 	if (ret == -ENOMEM || ret == -ENOSPC)
@@ -1180,3 +1193,46 @@ void ttm_bo_tt_destroy(struct ttm_buffer_object *bo)
 	ttm_tt_destroy(bo->bdev, bo->ttm);
 	bo->ttm = NULL;
 }
+
+/**
+ * ttm_bo_populate() - Ensure that a buffer object has backing pages
+ * @bo: The buffer object
+ * @ctx: The ttm_operation_ctx governing the operation.
+ *
+ * For buffer objects in a memory type whose manager uses
+ * struct ttm_tt for backing pages, ensure those backing pages
+ * are present and with valid content. The bo's resource is also
+ * placed on the correct LRU list if it was previously swapped
+ * out.
+ *
+ * Return: 0 if successful, negative error code on failure.
+ * Note: May return -EINTR or -ERESTARTSYS if @ctx::interruptible
+ * is set to true.
+ */
+int ttm_bo_populate(struct ttm_buffer_object *bo,
+		    struct ttm_operation_ctx *ctx)
+{
+	struct ttm_tt *tt = bo->ttm;
+	bool swapped;
+	int ret;
+
+	dma_resv_assert_held(bo->base.resv);
+
+	if (!tt)
+		return 0;
+
+	swapped = ttm_tt_is_swapped(tt);
+	ret = ttm_tt_populate(bo->bdev, tt, ctx);
+	if (ret)
+		return ret;
+
+	if (swapped && !ttm_tt_is_swapped(tt) && !bo->pin_count) {
+		spin_lock(&bo->bdev->lru_lock);
+		ttm_resource_add_bulk_move(bo->resource, bo);
+		ttm_resource_move_to_lru_tail(bo->resource);
+		spin_unlock(&bo->bdev->lru_lock);
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL(ttm_bo_populate);
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 3c07f4712d5c..d939925efa81 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -163,7 +163,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
 	src_man = ttm_manager_type(bdev, src_mem->mem_type);
 	if (ttm && ((ttm->page_flags & TTM_TT_FLAG_SWAPPED) ||
 		    dst_man->use_tt)) {
-		ret = ttm_tt_populate(bdev, ttm, ctx);
+		ret = ttm_bo_populate(bo, ctx);
 		if (ret)
 			return ret;
 	}
@@ -350,7 +350,7 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo,
 
 	BUG_ON(!ttm);
 
-	ret = ttm_tt_populate(bo->bdev, ttm, &ctx);
+	ret = ttm_bo_populate(bo, &ctx);
 	if (ret)
 		return ret;
 
@@ -507,7 +507,7 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
 		pgprot_t prot;
 		void *vaddr;
 
-		ret = ttm_tt_populate(bo->bdev, ttm, &ctx);
+		ret = ttm_bo_populate(bo, &ctx);
 		if (ret)
 			return ret;
 
diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
index 4212b8c91dd4..2c699ed1963a 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
@@ -224,7 +224,7 @@ vm_fault_t ttm_bo_vm_fault_reserved(struct vm_fault *vmf,
 		};
 
 		ttm = bo->ttm;
-		err = ttm_tt_populate(bdev, bo->ttm, &ctx);
+		err = ttm_bo_populate(bo, &ctx);
 		if (err) {
 			if (err == -EINTR || err == -ERESTARTSYS ||
 			    err == -EAGAIN)
diff --git a/drivers/gpu/drm/ttm/ttm_device.c b/drivers/gpu/drm/ttm/ttm_device.c
index e7cc4954c1bc..02e797fd1891 100644
--- a/drivers/gpu/drm/ttm/ttm_device.c
+++ b/drivers/gpu/drm/ttm/ttm_device.c
@@ -216,7 +216,7 @@ int ttm_device_init(struct ttm_device *bdev, const struct ttm_device_funcs *func
 
 	bdev->vma_manager = vma_manager;
 	spin_lock_init(&bdev->lru_lock);
-	INIT_LIST_HEAD(&bdev->pinned);
+	INIT_LIST_HEAD(&bdev->unevictable);
 	bdev->dev_mapping = mapping;
 	mutex_lock(&ttm_global_mutex);
 	list_add_tail(&bdev->device_list, &glob->device_list);
@@ -283,7 +283,7 @@ void ttm_device_clear_dma_mappings(struct ttm_device *bdev)
 	struct ttm_resource_manager *man;
 	unsigned int i, j;
 
-	ttm_device_clear_lru_dma_mappings(bdev, &bdev->pinned);
+	ttm_device_clear_lru_dma_mappings(bdev, &bdev->unevictable);
 
 	for (i = TTM_PL_SYSTEM; i < TTM_NUM_MEM_TYPES; ++i) {
 		man = ttm_manager_type(bdev, i);
diff --git a/drivers/gpu/drm/ttm/ttm_resource.c b/drivers/gpu/drm/ttm/ttm_resource.c
index 6d764ba88aab..93b44043b428 100644
--- a/drivers/gpu/drm/ttm/ttm_resource.c
+++ b/drivers/gpu/drm/ttm/ttm_resource.c
@@ -30,6 +30,7 @@
 #include <drm/ttm/ttm_bo.h>
 #include <drm/ttm/ttm_placement.h>
 #include <drm/ttm/ttm_resource.h>
+#include <drm/ttm/ttm_tt.h>
 
 #include <drm/drm_util.h>
 
@@ -239,7 +240,8 @@ static void ttm_lru_bulk_move_del(struct ttm_lru_bulk_move *bulk,
 void ttm_resource_add_bulk_move(struct ttm_resource *res,
 				struct ttm_buffer_object *bo)
 {
-	if (bo->bulk_move && !bo->pin_count)
+	if (bo->bulk_move && !bo->pin_count &&
+	    (!bo->ttm || !ttm_tt_is_swapped(bo->ttm)))
 		ttm_lru_bulk_move_add(bo->bulk_move, res);
 }
 
@@ -247,7 +249,8 @@ void ttm_resource_add_bulk_move(struct ttm_resource *res,
 void ttm_resource_del_bulk_move(struct ttm_resource *res,
 				struct ttm_buffer_object *bo)
 {
-	if (bo->bulk_move && !bo->pin_count)
+	if (bo->bulk_move && !bo->pin_count &&
+	    (!bo->ttm || !ttm_tt_is_swapped(bo->ttm)))
 		ttm_lru_bulk_move_del(bo->bulk_move, res);
 }
 
@@ -259,8 +262,8 @@ void ttm_resource_move_to_lru_tail(struct ttm_resource *res)
 
 	lockdep_assert_held(&bo->bdev->lru_lock);
 
-	if (bo->pin_count) {
-		list_move_tail(&res->lru.link, &bdev->pinned);
+	if (bo->pin_count || (bo->ttm && ttm_tt_is_swapped(bo->ttm))) {
+		list_move_tail(&res->lru.link, &bdev->unevictable);
 
 	} else	if (bo->bulk_move) {
 		struct ttm_lru_bulk_move_pos *pos =
@@ -301,8 +304,8 @@ void ttm_resource_init(struct ttm_buffer_object *bo,
 
 	man = ttm_manager_type(bo->bdev, place->mem_type);
 	spin_lock(&bo->bdev->lru_lock);
-	if (bo->pin_count)
-		list_add_tail(&res->lru.link, &bo->bdev->pinned);
+	if (bo->pin_count || (bo->ttm && ttm_tt_is_swapped(bo->ttm)))
+		list_add_tail(&res->lru.link, &bo->bdev->unevictable);
 	else
 		list_add_tail(&res->lru.link, &man->lru[bo->priority]);
 	man->usage += res->size;
diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
index 4b51b9023126..1a3b2a1d8d4e 100644
--- a/drivers/gpu/drm/ttm/ttm_tt.c
+++ b/drivers/gpu/drm/ttm/ttm_tt.c
@@ -367,7 +367,9 @@ int ttm_tt_populate(struct ttm_device *bdev,
 	}
 	return ret;
 }
+#if IS_ENABLED(CONFIG_DRM_TTM_KUNIT_TEST)
 EXPORT_SYMBOL(ttm_tt_populate);
+#endif
 
 void ttm_tt_unpopulate(struct ttm_device *bdev, struct ttm_tt *ttm)
 {
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index a8e4d46d9123..f34daae2cf2b 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -892,7 +892,7 @@ int xe_bo_evict_pinned(struct xe_bo *bo)
 		}
 	}
 
-	ret = ttm_tt_populate(bo->ttm.bdev, bo->ttm.ttm, &ctx);
+	ret = ttm_bo_populate(&bo->ttm, &ctx);
 	if (ret)
 		goto err_res_free;
 
@@ -945,7 +945,7 @@ int xe_bo_restore_pinned(struct xe_bo *bo)
 	if (ret)
 		return ret;
 
-	ret = ttm_tt_populate(bo->ttm.bdev, bo->ttm.ttm, &ctx);
+	ret = ttm_bo_populate(&bo->ttm, &ctx);
 	if (ret)
 		goto err_res_free;
 
diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
index 7b56d1ca36d7..5804408815be 100644
--- a/include/drm/ttm/ttm_bo.h
+++ b/include/drm/ttm/ttm_bo.h
@@ -462,5 +462,7 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo);
 pgprot_t ttm_io_prot(struct ttm_buffer_object *bo, struct ttm_resource *res,
 		     pgprot_t tmp);
 void ttm_bo_tt_destroy(struct ttm_buffer_object *bo);
+int ttm_bo_populate(struct ttm_buffer_object *bo,
+		    struct ttm_operation_ctx *ctx);
 
 #endif
diff --git a/include/drm/ttm/ttm_device.h b/include/drm/ttm/ttm_device.h
index c22f30535c84..438358f72716 100644
--- a/include/drm/ttm/ttm_device.h
+++ b/include/drm/ttm/ttm_device.h
@@ -252,9 +252,10 @@ struct ttm_device {
 	spinlock_t lru_lock;
 
 	/**
-	 * @pinned: Buffer objects which are pinned and so not on any LRU list.
+	 * @unevictable Buffer objects which are pinned or swapped and as such
+	 * not on an LRU list.
 	 */
-	struct list_head pinned;
+	struct list_head unevictable;
 
 	/**
 	 * @dev_mapping: A pointer to the struct address_space for invalidating
diff --git a/include/drm/ttm/ttm_tt.h b/include/drm/ttm/ttm_tt.h
index 2b9d856ff388..991edafdb2dd 100644
--- a/include/drm/ttm/ttm_tt.h
+++ b/include/drm/ttm/ttm_tt.h
@@ -129,6 +129,11 @@ static inline bool ttm_tt_is_populated(struct ttm_tt *tt)
 	return tt->page_flags & TTM_TT_FLAG_PRIV_POPULATED;
 }
 
+static inline bool ttm_tt_is_swapped(const struct ttm_tt *tt)
+{
+	return tt->page_flags & TTM_TT_FLAG_SWAPPED;
+}
+
 /**
  * ttm_tt_create
  *
-- 
2.46.0


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

* [PATCH v2 2/2] drm/ttm: Move pinned objects off LRU lists when pinning
  2024-09-03  9:47 [PATCH v2 0/2] drm/ttm: Really use a separate LRU list for swapped- and pinned objects Thomas Hellström
  2024-09-03  9:47 ` [PATCH v2 1/2] drm/ttm: Move swapped objects off the manager's LRU list Thomas Hellström
@ 2024-09-03  9:47 ` Thomas Hellström
  2024-09-03 10:43 ` ✓ CI.Patch_applied: success for drm/ttm: Really use a separate LRU list for swapped- and pinned objects (rev2) Patchwork
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Thomas Hellström @ 2024-09-03  9:47 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Christian König, Matthew Brost,
	dri-devel

The ttm_bo_pin() and ttm_bo_unpin() functions weren't moving their
resources off the LRU list to the unevictable list.

Make sure that happens so that pinned objects don't accidently linger
on the LRU lists, and also make sure to move them back once they
are unpinned.

v2:
- Removing from a bulk move must be done with the pin-count still zero.

Cc: Christian König <christian.koenig@amd.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: <dri-devel@lists.freedesktop.org>
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Christian König <christian.koenig@amd.com> #v1
---
 drivers/gpu/drm/ttm/ttm_bo.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index ae29915c52c0..38c99acbda76 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -592,8 +592,10 @@ void ttm_bo_pin(struct ttm_buffer_object *bo)
 	dma_resv_assert_held(bo->base.resv);
 	WARN_ON_ONCE(!kref_read(&bo->kref));
 	spin_lock(&bo->bdev->lru_lock);
-	if (bo->resource)
+	if (bo->resource) {
 		ttm_resource_del_bulk_move(bo->resource, bo);
+		ttm_resource_move_to_lru_tail(bo->resource);
+	}
 	++bo->pin_count;
 	spin_unlock(&bo->bdev->lru_lock);
 }
@@ -613,9 +615,10 @@ void ttm_bo_unpin(struct ttm_buffer_object *bo)
 		return;
 
 	spin_lock(&bo->bdev->lru_lock);
-	--bo->pin_count;
-	if (bo->resource)
+	if (!--bo->pin_count && bo->resource) {
 		ttm_resource_add_bulk_move(bo->resource, bo);
+		ttm_resource_move_to_lru_tail(bo->resource);
+	}
 	spin_unlock(&bo->bdev->lru_lock);
 }
 EXPORT_SYMBOL(ttm_bo_unpin);
-- 
2.46.0


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

* ✓ CI.Patch_applied: success for drm/ttm: Really use a separate LRU list for swapped- and pinned objects (rev2)
  2024-09-03  9:47 [PATCH v2 0/2] drm/ttm: Really use a separate LRU list for swapped- and pinned objects Thomas Hellström
  2024-09-03  9:47 ` [PATCH v2 1/2] drm/ttm: Move swapped objects off the manager's LRU list Thomas Hellström
  2024-09-03  9:47 ` [PATCH v2 2/2] drm/ttm: Move pinned objects off LRU lists when pinning Thomas Hellström
@ 2024-09-03 10:43 ` Patchwork
  2024-09-03 10:43 ` ✗ CI.checkpatch: warning " Patchwork
  2024-09-03 10:45 ` ✗ CI.KUnit: failure " Patchwork
  4 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2024-09-03 10:43 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

== Series Details ==

Series: drm/ttm: Really use a separate LRU list for swapped- and pinned objects (rev2)
URL   : https://patchwork.freedesktop.org/series/138103/
State : success

== Summary ==

=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: 707f9d05c039 drm-tip: 2024y-09m-03d-10h-15m-53s UTC integration manifest
=== git am output follows ===
Applying: drm/ttm: Move swapped objects off the manager's LRU list
Applying: drm/ttm: Move pinned objects off LRU lists when pinning



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

* ✗ CI.checkpatch: warning for drm/ttm: Really use a separate LRU list for swapped- and pinned objects (rev2)
  2024-09-03  9:47 [PATCH v2 0/2] drm/ttm: Really use a separate LRU list for swapped- and pinned objects Thomas Hellström
                   ` (2 preceding siblings ...)
  2024-09-03 10:43 ` ✓ CI.Patch_applied: success for drm/ttm: Really use a separate LRU list for swapped- and pinned objects (rev2) Patchwork
@ 2024-09-03 10:43 ` Patchwork
  2024-09-03 10:45 ` ✗ CI.KUnit: failure " Patchwork
  4 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2024-09-03 10:43 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

== Series Details ==

Series: drm/ttm: Really use a separate LRU list for swapped- and pinned objects (rev2)
URL   : https://patchwork.freedesktop.org/series/138103/
State : warning

== Summary ==

+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
9fe5037901cabbcdf27a6fe0dfb047ca1474d363
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit d9ff07d6f48052ec1e0cee5545ed0cb654969d79
Author: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Date:   Tue Sep 3 11:47:53 2024 +0200

    drm/ttm: Move pinned objects off LRU lists when pinning
    
    The ttm_bo_pin() and ttm_bo_unpin() functions weren't moving their
    resources off the LRU list to the unevictable list.
    
    Make sure that happens so that pinned objects don't accidently linger
    on the LRU lists, and also make sure to move them back once they
    are unpinned.
    
    v2:
    - Removing from a bulk move must be done with the pin-count still zero.
    
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Matthew Brost <matthew.brost@intel.com>
    Cc: <dri-devel@lists.freedesktop.org>
    Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Reviewed-by: Christian König <christian.koenig@amd.com> #v1
+ /mt/dim checkpatch 707f9d05c039aa43d5cbfc29573b642d3c43b618 drm-intel
69ecf2587ad2 drm/ttm: Move swapped objects off the manager's LRU list
-:333: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#333: FILE: drivers/gpu/drm/ttm/ttm_tt.c:370:
 }
+#if IS_ENABLED(CONFIG_DRM_TTM_KUNIT_TEST)

total: 0 errors, 0 warnings, 1 checks, 291 lines checked
d9ff07d6f480 drm/ttm: Move pinned objects off LRU lists when pinning



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

* ✗ CI.KUnit: failure for drm/ttm: Really use a separate LRU list for swapped- and pinned objects (rev2)
  2024-09-03  9:47 [PATCH v2 0/2] drm/ttm: Really use a separate LRU list for swapped- and pinned objects Thomas Hellström
                   ` (3 preceding siblings ...)
  2024-09-03 10:43 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-09-03 10:45 ` Patchwork
  4 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2024-09-03 10:45 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

== Series Details ==

Series: drm/ttm: Really use a separate LRU list for swapped- and pinned objects (rev2)
URL   : https://patchwork.freedesktop.org/series/138103/
State : failure

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[10:43:43] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:43:48] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
  156 | u64 ioread64_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
  163 | u64 ioread64_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
  170 | u64 ioread64be_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
  178 | u64 ioread64be_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
  264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
  272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
  280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
  288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~

[10:44:14] Starting KUnit Kernel (1/1)...
[10:44:14] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:44:14] =================== guc_dbm (7 subtests) ===================
[10:44:14] [PASSED] test_empty
[10:44:14] [PASSED] test_default
[10:44:14] ======================== test_size  ========================
[10:44:14] [PASSED] 4
[10:44:14] [PASSED] 8
[10:44:14] [PASSED] 32
[10:44:14] [PASSED] 256
[10:44:14] ==================== [PASSED] test_size ====================
[10:44:14] ======================= test_reuse  ========================
[10:44:14] [PASSED] 4
[10:44:14] [PASSED] 8
[10:44:14] [PASSED] 32
[10:44:14] [PASSED] 256
[10:44:14] =================== [PASSED] test_reuse ====================
[10:44:14] =================== test_range_overlap  ====================
[10:44:14] [PASSED] 4
[10:44:14] [PASSED] 8
[10:44:14] [PASSED] 32
[10:44:14] [PASSED] 256
[10:44:14] =============== [PASSED] test_range_overlap ================
[10:44:14] =================== test_range_compact  ====================
[10:44:14] [PASSED] 4
[10:44:14] [PASSED] 8
[10:44:14] [PASSED] 32
[10:44:14] [PASSED] 256
[10:44:14] =============== [PASSED] test_range_compact ================
[10:44:14] ==================== test_range_spare  =====================
[10:44:14] [PASSED] 4
[10:44:14] [PASSED] 8
[10:44:14] [PASSED] 32
[10:44:14] [PASSED] 256
[10:44:14] ================ [PASSED] test_range_spare =================
[10:44:14] ===================== [PASSED] guc_dbm =====================
[10:44:14] =================== guc_idm (6 subtests) ===================
[10:44:14] [PASSED] bad_init
[10:44:14] [PASSED] no_init
[10:44:14] [PASSED] init_fini
[10:44:14] [PASSED] check_used
[10:44:14] [PASSED] check_quota
[10:44:14] [PASSED] check_all
[10:44:14] ===================== [PASSED] guc_idm =====================
[10:44:14] ================== no_relay (3 subtests) ===================
[10:44:14] [PASSED] xe_drops_guc2pf_if_not_ready
[10:44:14] [PASSED] xe_drops_guc2vf_if_not_ready
[10:44:14] [PASSED] xe_rejects_send_if_not_ready
[10:44:14] ==================== [PASSED] no_relay =====================
[10:44:14] ================== pf_relay (14 subtests) ==================
[10:44:14] [PASSED] pf_rejects_guc2pf_too_short
[10:44:14] [PASSED] pf_rejects_guc2pf_too_long
[10:44:14] [PASSED] pf_rejects_guc2pf_no_payload
[10:44:14] [PASSED] pf_fails_no_payload
[10:44:14] [PASSED] pf_fails_bad_origin
[10:44:14] [PASSED] pf_fails_bad_type
[10:44:14] [PASSED] pf_txn_reports_error
[10:44:14] [PASSED] pf_txn_sends_pf2guc
[10:44:14] [PASSED] pf_sends_pf2guc
[10:44:14] [SKIPPED] pf_loopback_nop
[10:44:14] [SKIPPED] pf_loopback_echo
[10:44:14] [SKIPPED] pf_loopback_fail
[10:44:14] [SKIPPED] pf_loopback_busy
[10:44:14] [SKIPPED] pf_loopback_retry
[10:44:14] ==================== [PASSED] pf_relay =====================
[10:44:14] ================== vf_relay (3 subtests) ===================
[10:44:14] [PASSED] vf_rejects_guc2vf_too_short
[10:44:14] [PASSED] vf_rejects_guc2vf_too_long
[10:44:14] [PASSED] vf_rejects_guc2vf_no_payload
[10:44:14] ==================== [PASSED] vf_relay =====================
[10:44:14] ================= pf_service (11 subtests) =================
[10:44:14] [PASSED] pf_negotiate_any
[10:44:14] [PASSED] pf_negotiate_base_match
[10:44:14] [PASSED] pf_negotiate_base_newer
[10:44:14] [PASSED] pf_negotiate_base_next
[10:44:14] [SKIPPED] pf_negotiate_base_older
[10:44:14] [PASSED] pf_negotiate_base_prev
[10:44:14] [PASSED] pf_negotiate_latest_match
[10:44:14] [PASSED] pf_negotiate_latest_newer
[10:44:14] [PASSED] pf_negotiate_latest_next
[10:44:14] [SKIPPED] pf_negotiate_latest_older
[10:44:14] [SKIPPED] pf_negotiate_latest_prev
[10:44:14] =================== [PASSED] pf_service ====================
[10:44:14] ===================== lmtt (1 subtest) =====================
[10:44:14] ======================== test_ops  =========================
[10:44:14] [PASSED] 2-level
[10:44:14] [PASSED] multi-level
[10:44:14] ==================== [PASSED] test_ops =====================
[10:44:14] ====================== [PASSED] lmtt =======================
[10:44:14] =================== xe_mocs (2 subtests) ===================
[10:44:14] ================ xe_live_mocs_kernel_kunit  ================
[10:44:14] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[10:44:14] ================ xe_live_mocs_reset_kunit  =================
[10:44:14] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[10:44:14] ==================== [SKIPPED] xe_mocs =====================
[10:44:14] ================= xe_migrate (2 subtests) ==================
[10:44:14] ================= xe_migrate_sanity_kunit  =================
[10:44:14] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[10:44:14] ================== xe_validate_ccs_kunit  ==================
[10:44:14] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[10:44:14] =================== [SKIPPED] xe_migrate ===================
[10:44:14] ================== xe_dma_buf (1 subtest) ==================
[10:44:14] ==================== xe_dma_buf_kunit  =====================
[10:44:14] ================ [SKIPPED] xe_dma_buf_kunit ================
[10:44:14] =================== [SKIPPED] xe_dma_buf ===================
[10:44:14] ==================== xe_bo (2 subtests) ====================
[10:44:14] ================== xe_ccs_migrate_kunit  ===================
[10:44:14] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[10:44:14] ==================== xe_bo_evict_kunit  ====================
[10:44:14] =============== [SKIPPED] xe_bo_evict_kunit ================
[10:44:14] ===================== [SKIPPED] xe_bo ======================
[10:44:14] ==================== args (11 subtests) ====================
[10:44:14] [PASSED] count_args_test
[10:44:14] [PASSED] call_args_example
[10:44:14] [PASSED] call_args_test
[10:44:14] [PASSED] drop_first_arg_example
[10:44:14] [PASSED] drop_first_arg_test
[10:44:14] [PASSED] first_arg_example
[10:44:14] [PASSED] first_arg_test
[10:44:14] [PASSED] last_arg_example
[10:44:14] [PASSED] last_arg_test
[10:44:14] [PASSED] pick_arg_example
[10:44:14] [PASSED] sep_comma_example
[10:44:14] ====================== [PASSED] args =======================
[10:44:14] =================== xe_pci (2 subtests) ====================
stty: 'standard input': Inappropriate ioctl for device
[10:44:14] [PASSED] xe_gmdid_graphics_ip
[10:44:14] [PASSED] xe_gmdid_media_ip
[10:44:14] ===================== [PASSED] xe_pci ======================
[10:44:14] =================== xe_rtp (2 subtests) ====================
[10:44:14] =============== xe_rtp_process_to_sr_tests  ================
[10:44:14] [PASSED] coalesce-same-reg
[10:44:14] [PASSED] no-match-no-add
[10:44:14] [PASSED] match-or
[10:44:14] [PASSED] match-or-xfail
[10:44:14] [PASSED] no-match-no-add-multiple-rules
[10:44:14] [PASSED] two-regs-two-entries
[10:44:14] [PASSED] clr-one-set-other
[10:44:14] [PASSED] set-field
[10:44:14] [PASSED] conflict-duplicate
[10:44:14] [PASSED] conflict-not-disjoint
[10:44:14] [PASSED] conflict-reg-type
[10:44:14] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[10:44:14] ================== xe_rtp_process_tests  ===================
[10:44:14] [PASSED] active1
[10:44:14] [PASSED] active2
[10:44:14] [PASSED] active-inactive
[10:44:14] [PASSED] inactive-active
[10:44:14] [PASSED] inactive-1st_or_active-inactive
[10:44:14] [PASSED] inactive-2nd_or_active-inactive
[10:44:14] [PASSED] inactive-last_or_active-inactive
[10:44:14] [PASSED] inactive-no_or_active-inactive
[10:44:14] ============== [PASSED] xe_rtp_process_tests ===============
[10:44:14] ===================== [PASSED] xe_rtp ======================
[10:44:14] ==================== xe_wa (1 subtest) =====================
[10:44:14] ======================== xe_wa_gt  =========================
[10:44:14] [PASSED] TIGERLAKE (B0)
[10:44:14] [PASSED] DG1 (A0)
[10:44:14] [PASSED] DG1 (B0)
[10:44:14] [PASSED] ALDERLAKE_S (A0)
[10:44:14] [PASSED] ALDERLAKE_S (B0)
[10:44:14] [PASSED] ALDERLAKE_S (C0)
[10:44:14] [PASSED] ALDERLAKE_S (D0)
[10:44:14] [PASSED] ALDERLAKE_P (A0)
[10:44:14] [PASSED] ALDERLAKE_P (B0)
[10:44:14] [PASSED] ALDERLAKE_P (C0)
[10:44:14] [PASSED] ALDERLAKE_S_RPLS (D0)
[10:44:14] [PASSED] ALDERLAKE_P_RPLU (E0)
[10:44:14] [PASSED] DG2_G10 (C0)
[10:44:14] [PASSED] DG2_G11 (B1)
[10:44:14] [PASSED] DG2_G12 (A1)
[10:44:14] [PASSED] METEORLAKE (g:A0, m:A0)
[10:44:14] [PASSED] METEORLAKE (g:A0, m:A0)
[10:44:14] [PASSED] METEORLAKE (g:A0, m:A0)
[10:44:14] [PASSED] LUNARLAKE (g:A0, m:A0)
[10:44:14] [PASSED] LUNARLAKE (g:B0, m:A0)
[10:44:14] [PASSED] BATTLEMAGE (g:A0, m:A1)
[10:44:14] ==================== [PASSED] xe_wa_gt =====================
[10:44:14] ====================== [PASSED] xe_wa ======================
[10:44:14] ============================================================
[10:44:14] Testing complete. Ran 121 tests: passed: 106, skipped: 15
[10:44:14] Elapsed time: 30.860s total, 4.260s configuring, 26.329s building, 0.229s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[10:44:14] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:44:16] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
  156 | u64 ioread64_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
  163 | u64 ioread64_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
  170 | u64 ioread64be_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
  178 | u64 ioread64be_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
  264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
  272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
  280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
  288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~

[10:44:38] Starting KUnit Kernel (1/1)...
[10:44:38] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:44:38] ============ drm_test_pick_cmdline (2 subtests) ============
[10:44:38] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[10:44:38] =============== drm_test_pick_cmdline_named  ===============
[10:44:38] [PASSED] NTSC
[10:44:38] [PASSED] NTSC-J
[10:44:38] [PASSED] PAL
[10:44:38] [PASSED] PAL-M
[10:44:38] =========== [PASSED] drm_test_pick_cmdline_named ===========
[10:44:38] ============== [PASSED] drm_test_pick_cmdline ==============
[10:44:38] ================== drm_buddy (7 subtests) ==================
[10:44:38] [PASSED] drm_test_buddy_alloc_limit
[10:44:38] [PASSED] drm_test_buddy_alloc_optimistic
[10:44:38] [PASSED] drm_test_buddy_alloc_pessimistic
[10:44:38] [PASSED] drm_test_buddy_alloc_pathological
[10:44:38] [PASSED] drm_test_buddy_alloc_contiguous
[10:44:38] [PASSED] drm_test_buddy_alloc_clear
[10:44:38] [PASSED] drm_test_buddy_alloc_range_bias
[10:44:38] ==================== [PASSED] drm_buddy ====================
[10:44:38] ============= drm_cmdline_parser (40 subtests) =============
[10:44:38] [PASSED] drm_test_cmdline_force_d_only
[10:44:38] [PASSED] drm_test_cmdline_force_D_only_dvi
[10:44:38] [PASSED] drm_test_cmdline_force_D_only_hdmi
[10:44:38] [PASSED] drm_test_cmdline_force_D_only_not_digital
[10:44:38] [PASSED] drm_test_cmdline_force_e_only
[10:44:38] [PASSED] drm_test_cmdline_res
[10:44:38] [PASSED] drm_test_cmdline_res_vesa
[10:44:38] [PASSED] drm_test_cmdline_res_vesa_rblank
[10:44:38] [PASSED] drm_test_cmdline_res_rblank
[10:44:38] [PASSED] drm_test_cmdline_res_bpp
[10:44:38] [PASSED] drm_test_cmdline_res_refresh
[10:44:38] [PASSED] drm_test_cmdline_res_bpp_refresh
[10:44:38] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[10:44:38] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[10:44:38] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[10:44:38] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[10:44:38] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[10:44:38] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[10:44:38] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[10:44:38] [PASSED] drm_test_cmdline_res_margins_force_on
[10:44:38] [PASSED] drm_test_cmdline_res_vesa_margins
[10:44:38] [PASSED] drm_test_cmdline_name
[10:44:38] [PASSED] drm_test_cmdline_name_bpp
[10:44:38] [PASSED] drm_test_cmdline_name_option
[10:44:38] [PASSED] drm_test_cmdline_name_bpp_option
[10:44:38] [PASSED] drm_test_cmdline_rotate_0
[10:44:38] [PASSED] drm_test_cmdline_rotate_90
[10:44:38] [PASSED] drm_test_cmdline_rotate_180
[10:44:38] [PASSED] drm_test_cmdline_rotate_270
[10:44:38] [PASSED] drm_test_cmdline_hmirror
[10:44:38] [PASSED] drm_test_cmdline_vmirror
[10:44:38] [PASSED] drm_test_cmdline_margin_options
[10:44:38] [PASSED] drm_test_cmdline_multiple_options
[10:44:38] [PASSED] drm_test_cmdline_bpp_extra_and_option
[10:44:38] [PASSED] drm_test_cmdline_extra_and_option
[10:44:38] [PASSED] drm_test_cmdline_freestanding_options
[10:44:38] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[10:44:38] [PASSED] drm_test_cmdline_panel_orientation
[10:44:38] ================ drm_test_cmdline_invalid  =================
[10:44:38] [PASSED] margin_only
[10:44:38] [PASSED] interlace_only
[10:44:38] [PASSED] res_missing_x
[10:44:38] [PASSED] res_missing_y
[10:44:38] [PASSED] res_bad_y
[10:44:38] [PASSED] res_missing_y_bpp
[10:44:38] [PASSED] res_bad_bpp
[10:44:38] [PASSED] res_bad_refresh
[10:44:38] [PASSED] res_bpp_refresh_force_on_off
[10:44:38] [PASSED] res_invalid_mode
[10:44:38] [PASSED] res_bpp_wrong_place_mode
[10:44:38] [PASSED] name_bpp_refresh
[10:44:38] [PASSED] name_refresh
[10:44:38] [PASSED] name_refresh_wrong_mode
[10:44:38] [PASSED] name_refresh_invalid_mode
[10:44:38] [PASSED] rotate_multiple
[10:44:38] [PASSED] rotate_invalid_val
[10:44:38] [PASSED] rotate_truncated
[10:44:38] [PASSED] invalid_option
[10:44:38] [PASSED] invalid_tv_option
[10:44:38] [PASSED] truncated_tv_option
[10:44:38] ============ [PASSED] drm_test_cmdline_invalid =============
[10:44:38] =============== drm_test_cmdline_tv_options  ===============
[10:44:38] [PASSED] NTSC
[10:44:38] [PASSED] NTSC_443
[10:44:38] [PASSED] NTSC_J
[10:44:38] [PASSED] PAL
[10:44:38] [PASSED] PAL_M
[10:44:38] [PASSED] PAL_N
[10:44:38] [PASSED] SECAM
[10:44:38] [PASSED] MONO_525
[10:44:38] [PASSED] MONO_625
[10:44:38] =========== [PASSED] drm_test_cmdline_tv_options ===========
[10:44:38] =============== [PASSED] drm_cmdline_parser ================
[10:44:38] ========== drmm_connector_hdmi_init (19 subtests) ==========
[10:44:38] [PASSED] drm_test_connector_hdmi_init_valid
[10:44:38] [PASSED] drm_test_connector_hdmi_init_bpc_8
[10:44:38] [PASSED] drm_test_connector_hdmi_init_bpc_10
[10:44:38] [PASSED] drm_test_connector_hdmi_init_bpc_12
[10:44:38] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[10:44:38] [PASSED] drm_test_connector_hdmi_init_bpc_null
[10:44:38] [PASSED] drm_test_connector_hdmi_init_formats_empty
[10:44:38] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[10:44:38] [PASSED] drm_test_connector_hdmi_init_null_ddc
[10:44:38] [PASSED] drm_test_connector_hdmi_init_null_product
[10:44:38] [PASSED] drm_test_connector_hdmi_init_null_vendor
[10:44:38] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[10:44:38] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[10:44:38] [PASSED] drm_test_connector_hdmi_init_product_valid
[10:44:38] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[10:44:38] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[10:44:38] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[10:44:38] ========= drm_test_connector_hdmi_init_type_valid  =========
[10:44:38] [PASSED] HDMI-A
[10:44:38] [PASSED] HDMI-B
[10:44:38] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[10:44:38] ======== drm_test_connector_hdmi_init_type_invalid  ========
[10:44:38] [PASSED] Unknown
[10:44:38] [PASSED] VGA
[10:44:38] [PASSED] DVI-I
[10:44:38] [PASSED] DVI-D
[10:44:38] [PASSED] DVI-A
[10:44:38] [PASSED] Composite
[10:44:38] [PASSED] SVIDEO
[10:44:38] [PASSED] LVDS
[10:44:38] [PASSED] Component
[10:44:38] [PASSED] DIN
[10:44:38] [PASSED] DP
[10:44:38] [PASSED] TV
[10:44:38] [PASSED] eDP
[10:44:38] [PASSED] Virtual
[10:44:38] [PASSED] DSI
[10:44:38] [PASSED] DPI
[10:44:38] [PASSED] Writeback
[10:44:38] [PASSED] SPI
[10:44:38] [PASSED] USB
[10:44:38] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[10:44:38] ============ [PASSED] drmm_connector_hdmi_init =============
[10:44:38] ============= drmm_connector_init (3 subtests) =============
[10:44:38] [PASSED] drm_test_drmm_connector_init
[10:44:38] [PASSED] drm_test_drmm_connector_init_null_ddc
[10:44:38] ========= drm_test_drmm_connector_init_type_valid  =========
[10:44:38] [PASSED] Unknown
[10:44:38] [PASSED] VGA
[10:44:38] [PASSED] DVI-I
[10:44:38] [PASSED] DVI-D
[10:44:38] [PASSED] DVI-A
[10:44:38] [PASSED] Composite
[10:44:38] [PASSED] SVIDEO
[10:44:38] [PASSED] LVDS
[10:44:38] [PASSED] Component
[10:44:38] [PASSED] DIN
[10:44:38] [PASSED] DP
[10:44:38] [PASSED] HDMI-A
[10:44:38] [PASSED] HDMI-B
[10:44:38] [PASSED] TV
[10:44:38] [PASSED] eDP
[10:44:38] [PASSED] Virtual
[10:44:38] [PASSED] DSI
[10:44:38] [PASSED] DPI
[10:44:38] [PASSED] Writeback
[10:44:38] [PASSED] SPI
[10:44:38] [PASSED] USB
[10:44:38] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[10:44:38] =============== [PASSED] drmm_connector_init ===============
[10:44:38] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[10:44:38] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[10:44:38] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[10:44:38] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[10:44:38] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[10:44:38] ========== drm_test_get_tv_mode_from_name_valid  ===========
[10:44:38] [PASSED] NTSC
[10:44:38] [PASSED] NTSC-443
[10:44:38] [PASSED] NTSC-J
[10:44:38] [PASSED] PAL
[10:44:38] [PASSED] PAL-M
[10:44:38] [PASSED] PAL-N
[10:44:38] [PASSED] SECAM
[10:44:38] [PASSED] Mono
[10:44:38] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[10:44:38] [PASSED] drm_test_get_tv_mode_from_name_truncated
[10:44:38] ============ [PASSED] drm_get_tv_mode_from_name ============
[10:44:38] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[10:44:38] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[10:44:38] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[10:44:38] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[10:44:38] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[10:44:38] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[10:44:38] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[10:44:38] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[10:44:38] [PASSED] VIC 96
[10:44:38] [PASSED] VIC 97
[10:44:38] [PASSED] VIC 101
[10:44:38] [PASSED] VIC 102
[10:44:38] [PASSED] VIC 106
[10:44:38] [PASSED] VIC 107
[10:44:38] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[10:44:38] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[10:44:38] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[10:44:38] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[10:44:38] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[10:44:38] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[10:44:38] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[10:44:38] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[10:44:38] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[10:44:38] [PASSED] Automatic
[10:44:38] [PASSED] Full
[10:44:38] [PASSED] Limited 16:235
[10:44:38] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[10:44:38] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[10:44:38] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[10:44:38] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[10:44:38] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[10:44:38] [PASSED] RGB
[10:44:38] [PASSED] YUV 4:2:0
[10:44:38] [PASSED] YUV 4:2:2
[10:44:38] [PASSED] YUV 4:4:4
[10:44:38] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[10:44:38] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[10:44:38] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[10:44:38] ============= drm_damage_helper (21 subtests) ==============
[10:44:38] [PASSED] drm_test_damage_iter_no_damage
[10:44:38] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[10:44:38] [PASSED] drm_test_damage_iter_no_damage_src_moved
[10:44:38] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[10:44:38] [PASSED] drm_test_damage_iter_no_damage_not_visible
[10:44:38] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[10:44:38] [PASSED] drm_test_damage_iter_no_damage_no_fb
[10:44:38] [PASSED] drm_test_damage_iter_simple_damage
[10:44:38] [PASSED] drm_test_damage_iter_single_damage
[10:44:38] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[10:44:38] [PASSED] drm_test_damage_iter_single_damage_outside_src
[10:44:38] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[10:44:38] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[10:44:38] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[10:44:38] [PASSED] drm_test_damage_iter_single_damage_src_moved
[10:44:38] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[10:44:38] [PASSED] drm_test_damage_iter_damage
[10:44:38] [PASSED] drm_test_damage_iter_damage_one_intersect
[10:44:38] [PASSED] drm_test_damage_iter_damage_one_outside
[10:44:38] [PASSED] drm_test_damage_iter_damage_src_moved
[10:44:38] [PASSED] drm_test_damage_iter_damage_not_visible
[10:44:38] ================ [PASSED] drm_damage_helper ================
[10:44:38] ============== drm_dp_mst_helper (3 subtests) ==============
[10:44:38] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[10:44:38] [PASSED] Clock 154000 BPP 30 DSC disabled
[10:44:38] [PASSED] Clock 234000 BPP 30 DSC disabled
[10:44:38] [PASSED] Clock 297000 BPP 24 DSC disabled
[10:44:38] [PASSED] Clock 332880 BPP 24 DSC enabled
[10:44:38] [PASSED] Clock 324540 BPP 24 DSC enabled
[10:44:38] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[10:44:38] ============== drm_test_dp_mst_calc_pbn_div  ===============
[10:44:38] [PASSED] Link rate 2000000 lane count 4
[10:44:38] [PASSED] Link rate 2000000 lane count 2
[10:44:38] [PASSED] Link rate 2000000 lane count 1
[10:44:38] [PASSED] Link rate 1350000 lane count 4
[10:44:38] [PASSED] Link rate 1350000 lane count 2
[10:44:38] [PASSED] Link rate 1350000 lane count 1
[10:44:38] [PASSED] Link rate 1000000 lane count 4
[10:44:38] [PASSED] Link rate 1000000 lane count 2
[10:44:38] [PASSED] Link rate 1000000 lane count 1
[10:44:38] [PASSED] Link rate 810000 lane count 4
[10:44:38] [PASSED] Link rate 810000 lane count 2
[10:44:38] [PASSED] Link rate 810000 lane count 1
[10:44:38] [PASSED] Link rate 540000 lane count 4
[10:44:38] [PASSED] Link rate 540000 lane count 2
[10:44:38] [PASSED] Link rate 540000 lane count 1
[10:44:38] [PASSED] Link rate 270000 lane count 4
[10:44:38] [PASSED] Link rate 270000 lane count 2
[10:44:38] [PASSED] Link rate 270000 lane count 1
[10:44:38] [PASSED] Link rate 162000 lane count 4
[10:44:38] [PASSED] Link rate 162000 lane count 2
[10:44:38] [PASSED] Link rate 162000 lane count 1
[10:44:38] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[10:44:38] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[10:44:38] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[10:44:38] [PASSED] DP_POWER_UP_PHY with port number
[10:44:38] [PASSED] DP_POWER_DOWN_PHY with port number
[10:44:38] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[10:44:38] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[10:44:38] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[10:44:38] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[10:44:38] [PASSED] DP_QUERY_PAYLOAD with port number
[10:44:38] [PASSED] DP_QUERY_PAYLOAD with VCPI
[10:44:38] [PASSED] DP_REMOTE_DPCD_READ with port number
[10:44:38] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[10:44:38] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[10:44:38] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[10:44:38] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[10:44:38] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[10:44:38] [PASSED] DP_REMOTE_I2C_READ with port number
[10:44:38] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[10:44:38] [PASSED] DP_REMOTE_I2C_READ with transactions array
[10:44:38] [PASSED] DP_REMOTE_I2C_WRITE with port number
[10:44:38] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[10:44:38] [PASSED] DP_REMOTE_I2C_WRITE with data array
[10:44:38] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[10:44:38] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[10:44:38] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[10:44:38] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[10:44:38] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[10:44:38] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[10:44:38] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[10:44:38] ================ [PASSED] drm_dp_mst_helper ================
[10:44:38] ================== drm_exec (7 subtests) ===================
[10:44:38] [PASSED] sanitycheck
[10:44:38] [PASSED] test_lock
[10:44:38] [PASSED] test_lock_unlock
[10:44:38] [PASSED] test_duplicates
[10:44:38] [PASSED] test_prepare
[10:44:38] [PASSED] test_prepare_array
[10:44:38] [PASSED] test_multiple_loops
[10:44:38] ==================== [PASSED] drm_exec =====================
[10:44:38] =========== drm_format_helper_test (17 subtests) ===========
[10:44:38] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[10:44:38] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[10:44:38] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[10:44:38] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[10:44:38] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[10:44:38] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[10:44:38] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[10:44:38] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[10:44:38] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[10:44:38] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[10:44:38] ============== drm_test_fb_xrgb8888_to_mono  ===============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[10:44:38] ==================== drm_test_fb_swab  =====================
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ================ [PASSED] drm_test_fb_swab =================
[10:44:38] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[10:44:38] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[10:44:38] [PASSED] single_pixel_source_buffer
[10:44:38] [PASSED] single_pixel_clip_rectangle
[10:44:38] [PASSED] well_known_colors
[10:44:38] [PASSED] destination_pitch
[10:44:38] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[10:44:38] ================= drm_test_fb_clip_offset  =================
[10:44:38] [PASSED] pass through
[10:44:38] [PASSED] horizontal offset
[10:44:38] [PASSED] vertical offset
[10:44:38] [PASSED] horizontal and vertical offset
[10:44:38] [PASSED] horizontal offset (custom pitch)
[10:44:38] [PASSED] vertical offset (custom pitch)
[10:44:38] [PASSED] horizontal and vertical offset (custom pitch)
[10:44:38] ============= [PASSED] drm_test_fb_clip_offset =============
[10:44:38] ============== drm_test_fb_build_fourcc_list  ==============
[10:44:38] [PASSED] no native formats
[10:44:38] [PASSED] XRGB8888 as native format
[10:44:38] [PASSED] remove duplicates
[10:44:38] [PASSED] convert alpha formats
[10:44:38] [PASSED] random formats
[10:44:38] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[10:44:38] =================== drm_test_fb_memcpy  ====================
[10:44:38] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[10:44:38] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[10:44:38] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[10:44:38] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[10:44:38] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[10:44:38] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[10:44:38] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[10:44:38] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[10:44:38] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[10:44:38] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[10:44:38] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[10:44:38] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[10:44:38] =============== [PASSED] drm_test_fb_memcpy ================
[10:44:38] ============= [PASSED] drm_format_helper_test ==============
[10:44:38] ================= drm_format (18 subtests) =================
[10:44:38] [PASSED] drm_test_format_block_width_invalid
[10:44:38] [PASSED] drm_test_format_block_width_one_plane
[10:44:38] [PASSED] drm_test_format_block_width_two_plane
[10:44:38] [PASSED] drm_test_format_block_width_three_plane
[10:44:38] [PASSED] drm_test_format_block_width_tiled
[10:44:38] [PASSED] drm_test_format_block_height_invalid
[10:44:38] [PASSED] drm_test_format_block_height_one_plane
[10:44:38] [PASSED] drm_test_format_block_height_two_plane
[10:44:38] [PASSED] drm_test_format_block_height_three_plane
[10:44:38] [PASSED] drm_test_format_block_height_tiled
[10:44:38] [PASSED] drm_test_format_min_pitch_invalid
[10:44:38] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[10:44:38] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[10:44:38] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[10:44:38] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[10:44:38] [PASSED] drm_test_format_min_pitch_two_plane
[10:44:38] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[10:44:38] [PASSED] drm_test_format_min_pitch_tiled
[10:44:38] =================== [PASSED] drm_format ====================
[10:44:38] =============== drm_framebuffer (1 subtest) ================
[10:44:38] =============== drm_test_framebuffer_create  ===============
[10:44:38] [PASSED] ABGR8888 normal sizes
[10:44:38] [PASSED] ABGR8888 max sizes
[10:44:38] [PASSED] ABGR8888 pitch greater than min required
[10:44:38] [PASSED] ABGR8888 pitch less than min required
[10:44:38] [PASSED] ABGR8888 Invalid width
[10:44:38] [PASSED] ABGR8888 Invalid buffer handle
[10:44:38] [PASSED] No pixel format
[10:44:38] [PASSED] ABGR8888 Width 0
[10:44:38] [PASSED] ABGR8888 Height 0
[10:44:38] [PASSED] ABGR8888 Out of bound height * pitch combination
[10:44:38] [PASSED] ABGR8888 Large buffer offset
[10:44:38] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[10:44:38] [PASSED] ABGR8888 Valid buffer modifier
[10:44:38] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[10:44:38] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[10:44:38] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[10:44:38] [PASSED] NV12 Normal sizes
[10:44:38] [PASSED] NV12 Max sizes
[10:44:38] [PASSED] NV12 Invalid pitch
[10:44:38] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[10:44:38] [PASSED] NV12 different  modifier per-plane
[10:44:38] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[10:44:38] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[10:44:38] [PASSED] NV12 Modifier for inexistent plane
[10:44:38] [PASSED] NV12 Handle for inexistent plane
[10:44:38] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[10:44:38] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[10:44:38] [PASSED] YVU420 Normal sizes
[10:44:38] [PASSED] YVU420 Max sizes
[10:44:38] [PASSED] YVU420 Invalid pitch
[10:44:38] [PASSED] YVU420 Different pitches
[10:44:38] [PASSED] YVU420 Different buffer offsets/pitches
[10:44:38] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[10:44:38] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[10:44:38] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[10:44:38] [PASSED] YVU420 Valid modifier
[10:44:38] [PASSED] YVU420 Different modifiers per plane
[10:44:38] [PASSED] YVU420 Modifier for inexistent plane
[10:44:38] [PASSED] X0L2 Normal sizes
[10:44:38] [PASSED] X0L2 Max sizes
[10:44:38] [PASSED] X0L2 Invalid pitch
[10:44:38] [PASSED] X0L2 Pitch greater than minimum required
[10:44:38] [PASSED] X0L2 Handle for inexistent plane
[10:44:38] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[10:44:38] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[10:44:38] [PASSED] X0L2 Valid modifier
[10:44:38] [PASSED] X0L2 Modifier for inexistent plane
[10:44:38] =========== [PASSED] drm_test_framebuffer_create ===========
[10:44:38] ================= [PASSED] drm_framebuffer =================
[10:44:38] ================ drm_gem_shmem (8 subtests) ================
[10:44:38] [PASSED] drm_gem_shmem_test_obj_create
[10:44:38] [PASSED] drm_gem_shmem_test_obj_create_private
[10:44:38] [PASSED] drm_gem_shmem_test_pin_pages
[10:44:38] [PASSED] drm_gem_shmem_test_vmap
[10:44:38] [PASSED] drm_gem_shmem_test_get_pages_sgt
[10:44:38] [PASSED] drm_gem_shmem_test_get_sg_table
[10:44:38] [PASSED] drm_gem_shmem_test_madvise
[10:44:38] [PASSED] drm_gem_shmem_test_purge
[10:44:38] ================== [PASSED] drm_gem_shmem ==================
[10:44:38] === drm_atomic_helper_connector_hdmi_check (22 subtests) ===
[10:44:38] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[10:44:38] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[10:44:38] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[10:44:38] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[10:44:38] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[10:44:38] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[10:44:38] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[10:44:38] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[10:44:38] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[10:44:38] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[10:44:38] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[10:44:38] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[10:44:38] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[10:44:38] [PASSED] drm_test_check_output_bpc_dvi
[10:44:38] [PASSED] drm_test_check_output_bpc_format_vic_1
[10:44:38] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[10:44:38] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[10:44:38] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[10:44:38] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[10:44:38] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[10:44:38] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[10:44:38] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[10:44:38] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[10:44:38] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[10:44:38] [PASSED] drm_test_check_broadcast_rgb_value
[10:44:38] [PASSED] drm_test_check_bpc_8_value
[10:44:38] [PASSED] drm_test_check_bpc_10_value
[10:44:38] [PASSED] drm_test_check_bpc_12_value
[10:44:38] [PASSED] drm_test_check_format_value
[10:44:38] [PASSED] drm_test_check_tmds_char_value
[10:44:38] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[10:44:38] ================= drm_managed (2 subtests) =================
[10:44:38] [PASSED] drm_test_managed_release_action
[10:44:38] [PASSED] drm_test_managed_run_action
[10:44:38] =================== [PASSED] drm_managed ===================
[10:44:38] =================== drm_mm (6 subtests) ====================
[10:44:38] [PASSED] drm_test_mm_init
[10:44:38] [PASSED] drm_test_mm_debug
[10:44:38] [PASSED] drm_test_mm_align32
[10:44:38] [PASSED] drm_test_mm_align64
[10:44:38] [PASSED] drm_test_mm_lowest
[10:44:38] [PASSED] drm_test_mm_highest
[10:44:38] ===================== [PASSED] drm_mm ======================
[10:44:38] ============= drm_modes_analog_tv (5 subtests) =============
[10:44:38] [PASSED] drm_test_modes_analog_tv_mono_576i
[10:44:38] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[10:44:38] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[10:44:38] [PASSED] drm_test_modes_analog_tv_pal_576i
[10:44:38] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[10:44:38] =============== [PASSED] drm_modes_analog_tv ===============
[10:44:38] ============== drm_plane_helper (2 subtests) ===============
[10:44:38] =============== drm_test_check_plane_state  ================
[10:44:38] [PASSED] clipping_simple
[10:44:38] [PASSED] clipping_rotate_reflect
[10:44:38] [PASSED] positioning_simple
[10:44:38] [PASSED] upscaling
[10:44:38] [PASSED] downscaling
[10:44:38] [PASSED] rounding1
[10:44:38] [PASSED] rounding2
[10:44:38] [PASSED] rounding3
[10:44:38] [PASSED] rounding4
[10:44:38] =========== [PASSED] drm_test_check_plane_state ============
[10:44:38] =========== drm_test_check_invalid_plane_state  ============
[10:44:38] [PASSED] positioning_invalid
[10:44:38] [PASSED] upscaling_invalid
stty: 'standard input': Inappropriate ioctl for device
[10:44:38] [PASSED] downscaling_invalid
[10:44:38] ======= [PASSED] drm_test_check_invalid_plane_state ========
[10:44:38] ================ [PASSED] drm_plane_helper =================
[10:44:38] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[10:44:38] ====== drm_test_connector_helper_tv_get_modes_check  =======
[10:44:38] [PASSED] None
[10:44:38] [PASSED] PAL
[10:44:38] [PASSED] NTSC
[10:44:38] [PASSED] Both, NTSC Default
[10:44:38] [PASSED] Both, PAL Default
[10:44:38] [PASSED] Both, NTSC Default, with PAL on command-line
[10:44:38] [PASSED] Both, PAL Default, with NTSC on command-line
[10:44:38] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[10:44:38] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[10:44:38] ================== drm_rect (9 subtests) ===================
[10:44:38] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[10:44:38] [PASSED] drm_test_rect_clip_scaled_not_clipped
[10:44:38] [PASSED] drm_test_rect_clip_scaled_clipped
[10:44:38] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[10:44:38] ================= drm_test_rect_intersect  =================
[10:44:38] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[10:44:38] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[10:44:38] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[10:44:38] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[10:44:38] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[10:44:38] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[10:44:38] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[10:44:38] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[10:44:38] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[10:44:38] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[10:44:38] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[10:44:38] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[10:44:38] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[10:44:38] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[10:44:38] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[10:44:38] ============= [PASSED] drm_test_rect_intersect =============
[10:44:38] ================ drm_test_rect_calc_hscale  ================
[10:44:38] [PASSED] normal use
[10:44:38] [PASSED] out of max range
[10:44:38] [PASSED] out of min range
[10:44:38] [PASSED] zero dst
[10:44:38] [PASSED] negative src
[10:44:38] [PASSED] negative dst
[10:44:38] ============ [PASSED] drm_test_rect_calc_hscale ============
[10:44:38] ================ drm_test_rect_calc_vscale  ================
[10:44:38] [PASSED] normal use
[10:44:38] [PASSED] out of max range
[10:44:38] [PASSED] out of min range
[10:44:38] [PASSED] zero dst
[10:44:38] [PASSED] negative src
[10:44:38] [PASSED] negative dst
[10:44:38] ============ [PASSED] drm_test_rect_calc_vscale ============
[10:44:38] ================== drm_test_rect_rotate  ===================
[10:44:38] [PASSED] reflect-x
[10:44:38] [PASSED] reflect-y
[10:44:38] [PASSED] rotate-0
[10:44:38] [PASSED] rotate-90
[10:44:38] [PASSED] rotate-180
[10:44:38] [PASSED] rotate-270
[10:44:38] ============== [PASSED] drm_test_rect_rotate ===============
[10:44:38] ================ drm_test_rect_rotate_inv  =================
[10:44:38] [PASSED] reflect-x
[10:44:38] [PASSED] reflect-y
[10:44:38] [PASSED] rotate-0
[10:44:38] [PASSED] rotate-90
[10:44:38] [PASSED] rotate-180
[10:44:38] [PASSED] rotate-270
[10:44:38] ============ [PASSED] drm_test_rect_rotate_inv =============
[10:44:38] ==================== [PASSED] drm_rect =====================
[10:44:38] ============================================================
[10:44:38] Testing complete. Ran 515 tests: passed: 515
[10:44:38] Elapsed time: 23.988s total, 1.847s configuring, 21.922s building, 0.201s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
stty: 'standard input': Inappropriate ioctl for device
[10:44:38] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:44:40] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[10:44:50] Starting KUnit Kernel (1/1)...
[10:44:50] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:44:50] ================= ttm_device (5 subtests) ==================
[10:44:50] [PASSED] ttm_device_init_basic
[10:44:50] [PASSED] ttm_device_init_multiple
[10:44:50] [PASSED] ttm_device_fini_basic
[10:44:50] [PASSED] ttm_device_init_no_vma_man
[10:44:50] ================== ttm_device_init_pools  ==================
[10:44:50] [PASSED] No DMA allocations, no DMA32 required
[10:44:50] [PASSED] DMA allocations, DMA32 required
[10:44:50] [PASSED] No DMA allocations, DMA32 required
[10:44:50] [PASSED] DMA allocations, no DMA32 required
[10:44:50] ============== [PASSED] ttm_device_init_pools ==============
[10:44:50] =================== [PASSED] ttm_device ====================
[10:44:50] ================== ttm_pool (8 subtests) ===================
[10:44:50] ================== ttm_pool_alloc_basic  ===================
[10:44:50] [PASSED] One page
[10:44:50] [PASSED] More than one page
[10:44:50] [PASSED] Above the allocation limit
[10:44:50] [PASSED] One page, with coherent DMA mappings enabled
[10:44:50] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:44:50] ============== [PASSED] ttm_pool_alloc_basic ===============
[10:44:50] ============== ttm_pool_alloc_basic_dma_addr  ==============
[10:44:50] [PASSED] One page
[10:44:50] [PASSED] More than one page
[10:44:50] [PASSED] Above the allocation limit
[10:44:50] [PASSED] One page, with coherent DMA mappings enabled
[10:44:50] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:44:50] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[10:44:50] [PASSED] ttm_pool_alloc_order_caching_match
[10:44:50] [PASSED] ttm_pool_alloc_caching_mismatch
[10:44:50] [PASSED] ttm_pool_alloc_order_mismatch
[10:44:50] [PASSED] ttm_pool_free_dma_alloc
[10:44:50] [PASSED] ttm_pool_free_no_dma_alloc
[10:44:50] [PASSED] ttm_pool_fini_basic
[10:44:50] ==================== [PASSED] ttm_pool =====================
[10:44:50] ================ ttm_resource (8 subtests) =================
[10:44:50] ================= ttm_resource_init_basic  =================
[10:44:50] [PASSED] Init resource in TTM_PL_SYSTEM
[10:44:50] [PASSED] Init resource in TTM_PL_VRAM
[10:44:50] [PASSED] Init resource in a private placement
[10:44:50] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[10:44:50] ============= [PASSED] ttm_resource_init_basic =============
[10:44:50] [PASSED] ttm_resource_init_pinned
[10:44:50] [PASSED] ttm_resource_fini_basic
[10:44:50] [PASSED] ttm_resource_manager_init_basic
[10:44:50] [PASSED] ttm_resource_manager_usage_basic
[10:44:50] [PASSED] ttm_resource_manager_set_used_basic
[10:44:50] [PASSED] ttm_sys_man_alloc_basic
[10:44:50] [PASSED] ttm_sys_man_free_basic
[10:44:50] ================== [PASSED] ttm_resource ===================
[10:44:50] =================== ttm_tt (15 subtests) ===================
[10:44:50] ==================== ttm_tt_init_basic  ====================
[10:44:50] [PASSED] Page-aligned size
[10:44:50] [PASSED] Extra pages requested
[10:44:50] ================ [PASSED] ttm_tt_init_basic ================
[10:44:50] [PASSED] ttm_tt_init_misaligned
[10:44:50] [PASSED] ttm_tt_fini_basic
[10:44:50] [PASSED] ttm_tt_fini_sg
[10:44:50] [PASSED] ttm_tt_fini_shmem
[10:44:50] [PASSED] ttm_tt_create_basic
[10:44:50] [PASSED] ttm_tt_create_invalid_bo_type
[10:44:50] [PASSED] ttm_tt_create_ttm_exists
[10:44:50] [PASSED] ttm_tt_create_failed
[10:44:50] [PASSED] ttm_tt_destroy_basic
[10:44:50] [PASSED] ttm_tt_populate_null_ttm
[10:44:50] [PASSED] ttm_tt_populate_populated_ttm
[10:44:50] [PASSED] ttm_tt_unpopulate_basic
[10:44:50] [PASSED] ttm_tt_unpopulate_empty_ttm
[10:44:50] [PASSED] ttm_tt_swapin_basic
[10:44:50] ===================== [PASSED] ttm_tt ======================
[10:44:50] =================== ttm_bo (14 subtests) ===================
[10:44:50] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[10:44:50] [PASSED] Cannot be interrupted and sleeps
[10:44:50] [PASSED] Cannot be interrupted, locks straight away
[10:44:50] [PASSED] Can be interrupted, sleeps
[10:44:50] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[10:44:50] [PASSED] ttm_bo_reserve_locked_no_sleep
[10:44:50] [PASSED] ttm_bo_reserve_no_wait_ticket
[10:44:50] [PASSED] ttm_bo_reserve_double_resv
[10:44:50] [PASSED] ttm_bo_reserve_interrupted
[10:44:50] [PASSED] ttm_bo_reserve_deadlock
[10:44:50] [PASSED] ttm_bo_unreserve_basic
[10:44:50] [PASSED] ttm_bo_unreserve_pinned
[10:44:50] [PASSED] ttm_bo_unreserve_bulk
[10:44:50] [PASSED] ttm_bo_put_basic
[10:44:50] [PASSED] ttm_bo_put_shared_resv
[10:44:50] [PASSED] ttm_bo_pin_basic
[10:44:50] [ERROR] Test: ttm_bo: missing expected subtest!
[10:44:50] 
[10:44:50] Pid: 230, comm: kunit_try_catch Tainted: G        W        N 6.11.0-rc6
[10:44:50] RIP: 0033:ttm_resource_move_to_lru_tail+0x7e/0x140
[10:44:50] RSP: 00000000a21c3ca8  EFLAGS: 00010206
[10:44:50] RAX: 0000000062025840 RBX: 0000000062329000 RCX: 00000000a21c3cf0
[10:44:50] RDX: 0000000000000000 RSI: 00000000622d8998 RDI: 00000000622d8960
[10:44:50] RBP: 00000000a2003d20 R08: 0000000062025840 R09: 0000000000000000
[10:44:50] R10: 00000000622d8960 R11: 00000000a0a37660 R12: 0000000062329000
[10:44:50] R13: 0000000060331340 R14: 0000000060331d80 R15: 0000000000000000
[10:44:50] Kernel panic - not syncing: Segfault with no mm
[10:44:50] [CRASHED] 
[10:44:50] [ERROR] Test: ttm_bo: missing expected subtest!
[10:44:50] [CRASHED] 
[10:44:50] [ERROR] Test: ttm_bo: missing subtest result line!
[10:44:50] # module: ttm_bo_test
[10:44:50] ===================== [CRASHED] ttm_bo =====================
[10:44:50] [ERROR] Test: main: missing expected subtest!
[10:44:50] [CRASHED] 
[10:44:50] ============================================================
[10:44:50] Testing complete. Ran 68 tests: passed: 65, crashed: 3, errors: 4
The kernel seems to have crashed; you can decode the stack traces with:
$ scripts/decode_stacktrace.sh .kunit/vmlinux .kunit < .kunit/test.log | tee .kunit/decoded.log | /kernel/tools/testing/kunit/kunit.py parse
[10:44:50] Elapsed time: 11.771s total, 1.770s configuring, 9.530s building, 0.471s running

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



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

end of thread, other threads:[~2024-09-03 10:45 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-03  9:47 [PATCH v2 0/2] drm/ttm: Really use a separate LRU list for swapped- and pinned objects Thomas Hellström
2024-09-03  9:47 ` [PATCH v2 1/2] drm/ttm: Move swapped objects off the manager's LRU list Thomas Hellström
2024-09-03  9:47 ` [PATCH v2 2/2] drm/ttm: Move pinned objects off LRU lists when pinning Thomas Hellström
2024-09-03 10:43 ` ✓ CI.Patch_applied: success for drm/ttm: Really use a separate LRU list for swapped- and pinned objects (rev2) Patchwork
2024-09-03 10:43 ` ✗ CI.checkpatch: warning " Patchwork
2024-09-03 10:45 ` ✗ CI.KUnit: failure " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).