intel-xe.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker
@ 2024-12-17 14:58 Thomas Hellström
  2024-12-17 14:58 ` [PATCH v15 1/9] drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini() Thomas Hellström
                   ` (17 more replies)
  0 siblings, 18 replies; 23+ messages in thread
From: Thomas Hellström @ 2024-12-17 14:58 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Somalapuram Amaranath,
	Christian König, Matthew Brost, Paulo Zanoni, dri-devel,
	Simona Vetter

This series implements TTM shrinker / eviction helpers and an xe bo
shrinker. It builds on a previous series, *and obsoletes that one*.

https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/

Where the comment about layering
https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/#ma918844aa8a6efe8768fdcda0c6590d5c93850c9

now addressed, and this version also implements shmem objects for backup
rather than direct swap-cache insertions, which was used in the previuos
series. It turns out that with per-page backup / shrinking, shmem objects
appears to work just as well as direct swap-cache insertions with the
added benefit that was introduced in the previous TTM shrinker series to
avoid running out of swap entries isn't really needed.

The series earlier consisted of a LRU traversal part and the current part.
The LRU traversal part is merged, but is still mentioned in the history
below.

Patch 1 balances ttm_resource_cursor_fini() with an init function. It
makes patch 5 more straightforward.

Patch 2 introduces a backup implemententaion.

Patch 3 reworks the structure of ttm_pool_alloc in preparation for patch 4.

Patch 4 introduces functionality in the ttm_pool code for page-by-page shrinking
and recovery. It avoids having to temporarily allocate a huge amount of
memory to be able to shrink a buffer object. It also introduces the
possibility to immediately write-back pages if needed.

Patch 5 Adds a simple error injection to the above code to help increase
test coverage.

Patch 6 Implements a macro for LRU iteration.

Patch 7 Introduces driver-facing helpers for shrinking.

Patch 8 Implements the xe bo shrinker.

Patch 9 Increases (removes) the XE_PL_TT watermark.

v2:
- Squash obsolete revision history in the patch commit messages.
- Fix a couple of review comments by Christian
- Don't store the mem_type in the TTM managers but in the
  resource cursor.
- Rename introduced TTM *back_up* function names to *backup*
- Add ttm pool recovery fault injection.
- Shrinker xe kunit test
- Various bugfixes

v3:
- Address some review comments from Matthew Brost and Christian König.
- Use the restartable LRU walk for TTM swapping and eviction.
- Provide a POC drm_exec locking implementation for exhaustive
  eviction. (Christian König).

v4:
- Remove the RFC exhaustive eviction part. While the path to exhaustive
  eviction is pretty clear and demonstrated in v3, there is still some
  drm_exec work that needs to be agreed and implemented.
- Add shrinker power management. On some hw we need to wake when shrinking.
- Fix the lru walker helper for -EALREADY errors.
- Add drm/xe: Increase the XE_PL_TT watermark.

v5:
- Update also TTM kunit tests
- Handle ghost- and zombie objects in the shrinker.
- A couple of compile- and UAF fixes reported by Kernel Build Robot and
  Dan Carpenter.

v6:
- Address review comments from Matthew Brost on the
  restartable LRU traversal path.

v7:
- Split out TTM restartable LRU traversal path and merge that.
- Adapt the review comments on that series.

v8:
- Address review comments from Matthew Brost as detailed in the
  respective patches.

v9:
- Rebase and fix compilation errors

v10:
- Use a LRU iteration macro rather than a function with a callback.
- Rebasing and cleanups
- Address some additional review comments from Matt Brost.
- Drop the shrinker selftest. It was already merged as a swapout
  self-test.

v11:
- Move more core interaction to additional TTM helpers.
- Don't back up without __GFP_FS, and don't start writeback without __GFP_IO.
- Rebase.

v12:
- Fix an indentation flaw.
- Rebase

v13:
- Remove the backup base-class, and use direct calls for ttm_backup
  (Christian König).
- Rebase on the ttm_backup changes.
- Move shrunken bos from the LRU list to the unevictable list.
- Provide an accessor function with sanity checks to set the
- ttm_tt::backup field.
- Update documentation.

v14:
- Update documentation of ttm_backup_bytes_avail().
- Work around converting between struct file * and struct ttm-backup *.
- Don't set up backup for imported buffers.

v15:
- ttm_backup return value change. (Christian König)
- ttm_pool restore/alloc implementation rework (Christian König)
- Documentation update.
- Remove cond_resched (Christian König)

Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: <dri-devel@lists.freedesktop.org>

Thomas Hellström (9):
  drm/ttm: Balance ttm_resource_cursor_init() and
    ttm_resource_cursor_fini()
  drm/ttm: Provide a shmem backup implementation
  drm/ttm/pool: Restructure the pool allocation code
  drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages
  drm/ttm: Use fault-injection to test error paths
  drm/ttm: Add a macro to perform LRU iteration
  drm/ttm: Add helpers for shrinking
  drm/xe: Add a shrinker for xe bos
  drm/xe: Increase the XE_PL_TT watermark

 drivers/gpu/drm/ttm/Makefile         |   2 +-
 drivers/gpu/drm/ttm/ttm_backup.c     | 207 ++++++++
 drivers/gpu/drm/ttm/ttm_bo.c         |   3 +-
 drivers/gpu/drm/ttm/ttm_bo_util.c    | 250 +++++++++-
 drivers/gpu/drm/ttm/ttm_pool.c       | 718 +++++++++++++++++++++++----
 drivers/gpu/drm/ttm/ttm_resource.c   |  35 +-
 drivers/gpu/drm/ttm/ttm_tt.c         |  83 ++++
 drivers/gpu/drm/xe/Makefile          |   1 +
 drivers/gpu/drm/xe/tests/xe_bo.c     |   6 +-
 drivers/gpu/drm/xe/xe_bo.c           | 202 +++++++-
 drivers/gpu/drm/xe/xe_bo.h           |  36 ++
 drivers/gpu/drm/xe/xe_device.c       |   8 +
 drivers/gpu/drm/xe/xe_device_types.h |   2 +
 drivers/gpu/drm/xe/xe_shrinker.c     | 258 ++++++++++
 drivers/gpu/drm/xe/xe_shrinker.h     |  18 +
 drivers/gpu/drm/xe/xe_ttm_sys_mgr.c  |   3 +-
 include/drm/ttm/ttm_backup.h         |  74 +++
 include/drm/ttm/ttm_bo.h             |  93 ++++
 include/drm/ttm/ttm_pool.h           |   8 +
 include/drm/ttm/ttm_resource.h       |  11 +-
 include/drm/ttm/ttm_tt.h             |  69 ++-
 21 files changed, 1935 insertions(+), 152 deletions(-)
 create mode 100644 drivers/gpu/drm/ttm/ttm_backup.c
 create mode 100644 drivers/gpu/drm/xe/xe_shrinker.c
 create mode 100644 drivers/gpu/drm/xe/xe_shrinker.h
 create mode 100644 include/drm/ttm/ttm_backup.h

-- 
2.47.1


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

* [PATCH v15 1/9] drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini()
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
@ 2024-12-17 14:58 ` Thomas Hellström
  2024-12-17 14:58 ` [PATCH v15 2/9] drm/ttm: Provide a shmem backup implementation Thomas Hellström
                   ` (16 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Thomas Hellström @ 2024-12-17 14:58 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Matthew Brost, Christian König,
	Somalapuram Amaranath, Paulo Zanoni, Simona Vetter, dri-devel

Make the interface more symmetric by providing and using a
ttm_resource_cursor_init().

v10:
- Fix a stray newline (Matthew Brost)
- Update kerneldoc (Matthew Brost)

Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/ttm/ttm_bo.c       |  3 ++-
 drivers/gpu/drm/ttm/ttm_bo_util.c  |  3 ++-
 drivers/gpu/drm/ttm/ttm_resource.c | 35 ++++++++++++++++++++----------
 include/drm/ttm/ttm_resource.h     | 11 +++++-----
 4 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 48c5365efca1..06d6a452c4f4 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -450,7 +450,8 @@ int ttm_bo_evict_first(struct ttm_device *bdev, struct ttm_resource_manager *man
 	int ret = 0;
 
 	spin_lock(&bdev->lru_lock);
-	res = ttm_resource_manager_first(man, &cursor);
+	ttm_resource_cursor_init(&cursor, man);
+	res = ttm_resource_manager_first(&cursor);
 	ttm_resource_cursor_fini(&cursor);
 	if (!res) {
 		ret = -ENOENT;
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index d939925efa81..917096bd5f68 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -865,7 +865,8 @@ s64 ttm_lru_walk_for_evict(struct ttm_lru_walk *walk, struct ttm_device *bdev,
 	s64 lret;
 
 	spin_lock(&bdev->lru_lock);
-	ttm_resource_manager_for_each_res(man, &cursor, res) {
+	ttm_resource_cursor_init(&cursor, man);
+	ttm_resource_manager_for_each_res(&cursor, res) {
 		struct ttm_buffer_object *bo = res->bo;
 		bool bo_needs_unlock = false;
 		bool bo_locked = false;
diff --git a/drivers/gpu/drm/ttm/ttm_resource.c b/drivers/gpu/drm/ttm/ttm_resource.c
index a87665eb28a6..e19360cc7930 100644
--- a/drivers/gpu/drm/ttm/ttm_resource.c
+++ b/drivers/gpu/drm/ttm/ttm_resource.c
@@ -81,6 +81,23 @@ static void ttm_bulk_move_drop_cursors(struct ttm_lru_bulk_move *bulk)
 		ttm_resource_cursor_clear_bulk(cursor);
 }
 
+/**
+ * ttm_resource_cursor_init() - Initialize a struct ttm_resource_cursor
+ * @cursor: The cursor to initialize.
+ * @man: The resource manager.
+ *
+ * Initialize the cursor before using it for iteration.
+ */
+void ttm_resource_cursor_init(struct ttm_resource_cursor *cursor,
+			      struct ttm_resource_manager *man)
+{
+	cursor->priority = 0;
+	cursor->man = man;
+	ttm_lru_item_init(&cursor->hitch, TTM_LRU_HITCH);
+	INIT_LIST_HEAD(&cursor->bulk_link);
+	INIT_LIST_HEAD(&cursor->hitch.link);
+}
+
 /**
  * ttm_resource_cursor_fini() - Finalize the LRU list cursor usage
  * @cursor: The struct ttm_resource_cursor to finalize.
@@ -593,7 +610,6 @@ ttm_resource_cursor_check_bulk(struct ttm_resource_cursor *cursor,
 /**
  * ttm_resource_manager_first() - Start iterating over the resources
  * of a resource manager
- * @man: resource manager to iterate over
  * @cursor: cursor to record the position
  *
  * Initializes the cursor and starts iterating. When done iterating,
@@ -602,17 +618,16 @@ ttm_resource_cursor_check_bulk(struct ttm_resource_cursor *cursor,
  * Return: The first resource from the resource manager.
  */
 struct ttm_resource *
-ttm_resource_manager_first(struct ttm_resource_manager *man,
-			   struct ttm_resource_cursor *cursor)
+ttm_resource_manager_first(struct ttm_resource_cursor *cursor)
 {
-	lockdep_assert_held(&man->bdev->lru_lock);
+	struct ttm_resource_manager *man = cursor->man;
 
-	cursor->priority = 0;
-	cursor->man = man;
-	ttm_lru_item_init(&cursor->hitch, TTM_LRU_HITCH);
-	INIT_LIST_HEAD(&cursor->bulk_link);
-	list_add(&cursor->hitch.link, &man->lru[cursor->priority]);
+	if (WARN_ON_ONCE(!man))
+		return NULL;
+
+	lockdep_assert_held(&man->bdev->lru_lock);
 
+	list_move(&cursor->hitch.link, &man->lru[cursor->priority]);
 	return ttm_resource_manager_next(cursor);
 }
 
@@ -648,8 +663,6 @@ ttm_resource_manager_next(struct ttm_resource_cursor *cursor)
 		ttm_resource_cursor_clear_bulk(cursor);
 	}
 
-	ttm_resource_cursor_fini(cursor);
-
 	return NULL;
 }
 
diff --git a/include/drm/ttm/ttm_resource.h b/include/drm/ttm/ttm_resource.h
index be034be56ba1..e1f3b95d73b6 100644
--- a/include/drm/ttm/ttm_resource.h
+++ b/include/drm/ttm/ttm_resource.h
@@ -325,6 +325,9 @@ struct ttm_resource_cursor {
 	unsigned int priority;
 };
 
+void ttm_resource_cursor_init(struct ttm_resource_cursor *cursor,
+			      struct ttm_resource_manager *man);
+
 void ttm_resource_cursor_fini(struct ttm_resource_cursor *cursor);
 
 /**
@@ -456,8 +459,7 @@ void ttm_resource_manager_debug(struct ttm_resource_manager *man,
 				struct drm_printer *p);
 
 struct ttm_resource *
-ttm_resource_manager_first(struct ttm_resource_manager *man,
-			   struct ttm_resource_cursor *cursor);
+ttm_resource_manager_first(struct ttm_resource_cursor *cursor);
 struct ttm_resource *
 ttm_resource_manager_next(struct ttm_resource_cursor *cursor);
 
@@ -466,14 +468,13 @@ ttm_lru_first_res_or_null(struct list_head *head);
 
 /**
  * ttm_resource_manager_for_each_res - iterate over all resources
- * @man: the resource manager
  * @cursor: struct ttm_resource_cursor for the current position
  * @res: the current resource
  *
  * Iterate over all the evictable resources in a resource manager.
  */
-#define ttm_resource_manager_for_each_res(man, cursor, res)		\
-	for (res = ttm_resource_manager_first(man, cursor); res;	\
+#define ttm_resource_manager_for_each_res(cursor, res)	\
+	for (res = ttm_resource_manager_first(cursor); res;	\
 	     res = ttm_resource_manager_next(cursor))
 
 struct ttm_kmap_iter *
-- 
2.47.1


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

* [PATCH v15 2/9] drm/ttm: Provide a shmem backup implementation
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
  2024-12-17 14:58 ` [PATCH v15 1/9] drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini() Thomas Hellström
@ 2024-12-17 14:58 ` Thomas Hellström
  2024-12-17 14:58 ` [PATCH v15 3/9] drm/ttm/pool: Restructure the pool allocation code Thomas Hellström
                   ` (15 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Thomas Hellström @ 2024-12-17 14:58 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Christian König,
	Somalapuram Amaranath, Matthew Brost, dri-devel, Paulo Zanoni,
	Simona Vetter

Provide a standalone shmem backup implementation.
Given the ttm_backup interface, this could
later on be extended to providing other backup
implementation than shmem, with one use-case being
GPU swapout to a user-provided fd.

v5:
- Fix a UAF. (kernel test robot, Dan Carptenter)
v6:
- Rename ttm_backup_shmem_copy_page() function argument
  (Matthew Brost)
- Add some missing documentation
v8:
- Use folio_file_page to get to the page we want to writeback
  instead of using the first page of the folio.
v13:
- Remove the base class abstraction (Christian König)
- Include ttm_backup_bytes_avail().
v14:
- Fix kerneldoc for ttm_backup_bytes_avail() (0-day)
- Work around casting of __randomize_layout struct pointer (0-day)
v15:
- Return negative error code from ttm_backup_backup_page()
  (Christian König)
- Doc fixes. (Christian König).

Cc: Christian König <christian.koenig@amd.com>
Cc: Somalapuram Amaranath <Amaranath.Somalapuram@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: Matthew Brost <matthew.brost@intel.com> #v13
---
 drivers/gpu/drm/ttm/Makefile     |   2 +-
 drivers/gpu/drm/ttm/ttm_backup.c | 207 +++++++++++++++++++++++++++++++
 include/drm/ttm/ttm_backup.h     |  74 +++++++++++
 3 files changed, 282 insertions(+), 1 deletion(-)
 create mode 100644 drivers/gpu/drm/ttm/ttm_backup.c
 create mode 100644 include/drm/ttm/ttm_backup.h

diff --git a/drivers/gpu/drm/ttm/Makefile b/drivers/gpu/drm/ttm/Makefile
index dad298127226..40d07a35293a 100644
--- a/drivers/gpu/drm/ttm/Makefile
+++ b/drivers/gpu/drm/ttm/Makefile
@@ -4,7 +4,7 @@
 
 ttm-y := ttm_tt.o ttm_bo.o ttm_bo_util.o ttm_bo_vm.o ttm_module.o \
 	ttm_execbuf_util.o ttm_range_manager.o ttm_resource.o ttm_pool.o \
-	ttm_device.o ttm_sys_manager.o
+	ttm_device.o ttm_sys_manager.o ttm_backup.o
 ttm-$(CONFIG_AGP) += ttm_agp_backend.o
 
 obj-$(CONFIG_DRM_TTM) += ttm.o
diff --git a/drivers/gpu/drm/ttm/ttm_backup.c b/drivers/gpu/drm/ttm/ttm_backup.c
new file mode 100644
index 000000000000..93c007f18855
--- /dev/null
+++ b/drivers/gpu/drm/ttm/ttm_backup.c
@@ -0,0 +1,207 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#include <drm/ttm/ttm_backup.h>
+#include <linux/page-flags.h>
+#include <linux/swap.h>
+
+/*
+ * Casting from randomized struct file * to struct ttm_backup * is fine since
+ * struct ttm_backup is never defined nor dereferenced.
+ */
+static struct file *ttm_backup_to_file(struct ttm_backup *backup)
+{
+	return (void *)backup;
+}
+
+static struct ttm_backup *ttm_file_to_backup(struct file *file)
+{
+	return (void *)file;
+}
+
+/*
+ * Need to map shmem indices to handle since a handle value
+ * of 0 means error, following the swp_entry_t convention.
+ */
+static unsigned long ttm_backup_shmem_idx_to_handle(pgoff_t idx)
+{
+	return (unsigned long)idx + 1;
+}
+
+static pgoff_t ttm_backup_handle_to_shmem_idx(pgoff_t handle)
+{
+	return handle - 1;
+}
+
+/**
+ * ttm_backup_drop() - release memory associated with a handle
+ * @backup: The struct backup pointer used to obtain the handle
+ * @handle: The handle obtained from the @backup_page function.
+ */
+void ttm_backup_drop(struct ttm_backup *backup, pgoff_t handle)
+{
+	loff_t start = ttm_backup_handle_to_shmem_idx(handle);
+
+	start <<= PAGE_SHIFT;
+	shmem_truncate_range(file_inode(ttm_backup_to_file(backup)), start,
+			     start + PAGE_SIZE - 1);
+}
+
+/**
+ * ttm_backup_copy_page() - Copy the contents of a previously backed
+ * up page
+ * @backup: The struct backup pointer used to back up the page.
+ * @dst: The struct page to copy into.
+ * @handle: The handle returned when the page was backed up.
+ * @intr: Try to perform waits interruptable or at least killable.
+ *
+ * Return: 0 on success, Negative error code on failure, notably
+ * -EINTR if @intr was set to true and a signal is pending.
+ */
+int ttm_backup_copy_page(struct ttm_backup *backup, struct page *dst,
+			 pgoff_t handle, bool intr)
+{
+	struct file *filp = ttm_backup_to_file(backup);
+	struct address_space *mapping = filp->f_mapping;
+	struct folio *from_folio;
+	pgoff_t idx = ttm_backup_handle_to_shmem_idx(handle);
+
+	from_folio = shmem_read_folio(mapping, idx);
+	if (IS_ERR(from_folio))
+		return PTR_ERR(from_folio);
+
+	copy_highpage(dst, folio_file_page(from_folio, idx));
+	folio_put(from_folio);
+
+	return 0;
+}
+
+/**
+ * ttm_backup_backup_page() - Backup a page
+ * @backup: The struct backup pointer to use.
+ * @page: The page to back up.
+ * @writeback: Whether to perform immediate writeback of the page.
+ * This may have performance implications.
+ * @idx: A unique integer for each page and each struct backup.
+ * This allows the backup implementation to avoid managing
+ * its address space separately.
+ * @page_gfp: The gfp value used when the page was allocated.
+ * This is used for accounting purposes.
+ * @alloc_gfp: The gfp to be used when allocating memory.
+ *
+ * Context: If called from reclaim context, the caller needs to
+ * assert that the shrinker gfp has __GFP_FS set, to avoid
+ * deadlocking on lock_page(). If @writeback is set to true and
+ * called from reclaim context, the caller also needs to assert
+ * that the shrinker gfp has __GFP_IO set, since without it,
+ * we're not allowed to start backup IO.
+ *
+ * Return: A handle on success. Negative error code on failure.
+ *
+ * Note: This function could be extended to back up a folio and
+ * implementations would then split the folio internally if needed.
+ * Drawback is that the caller would then have to keep track of
+ * the folio size- and usage.
+ */
+s64
+ttm_backup_backup_page(struct ttm_backup *backup, struct page *page,
+		       bool writeback, pgoff_t idx, gfp_t page_gfp,
+		       gfp_t alloc_gfp)
+{
+	struct file *filp = ttm_backup_to_file(backup);
+	struct address_space *mapping = filp->f_mapping;
+	unsigned long handle = 0;
+	struct folio *to_folio;
+	int ret;
+
+	to_folio = shmem_read_folio_gfp(mapping, idx, alloc_gfp);
+	if (IS_ERR(to_folio))
+		return PTR_ERR(to_folio);
+
+	folio_mark_accessed(to_folio);
+	folio_lock(to_folio);
+	folio_mark_dirty(to_folio);
+	copy_highpage(folio_file_page(to_folio, idx), page);
+	handle = ttm_backup_shmem_idx_to_handle(idx);
+
+	if (writeback && !folio_mapped(to_folio) &&
+	    folio_clear_dirty_for_io(to_folio)) {
+		struct writeback_control wbc = {
+			.sync_mode = WB_SYNC_NONE,
+			.nr_to_write = SWAP_CLUSTER_MAX,
+			.range_start = 0,
+			.range_end = LLONG_MAX,
+			.for_reclaim = 1,
+		};
+		folio_set_reclaim(to_folio);
+		ret = mapping->a_ops->writepage(folio_file_page(to_folio, idx), &wbc);
+		if (!folio_test_writeback(to_folio))
+			folio_clear_reclaim(to_folio);
+		/*
+		 * If writepage succeeds, it unlocks the folio.
+		 * writepage() errors are otherwise dropped, since writepage()
+		 * is only best effort here.
+		 */
+		if (ret)
+			folio_unlock(to_folio);
+	} else {
+		folio_unlock(to_folio);
+	}
+
+	folio_put(to_folio);
+
+	return handle;
+}
+
+/**
+ * ttm_backup_fini() - Free the struct backup resources after last use.
+ * @backup: Pointer to the struct backup whose resources to free.
+ *
+ * After a call to this function, it's illegal to use the @backup pointer.
+ */
+void ttm_backup_fini(struct ttm_backup *backup)
+{
+	fput(ttm_backup_to_file(backup));
+}
+
+/**
+ * ttm_backup_bytes_avail() - Report the approximate number of bytes of backup space
+ * left for backup.
+ *
+ * This function is intended also for driver use to indicate whether a
+ * backup attempt is meaningful.
+ *
+ * Return: An approximate size of backup space available.
+ */
+u64 ttm_backup_bytes_avail(void)
+{
+	/*
+	 * The idea behind backing up to shmem is that shmem objects may
+	 * eventually be swapped out. So no point swapping out if there
+	 * is no or low swap-space available. But the accuracy of this
+	 * number also depends on shmem actually swapping out backed-up
+	 * shmem objects without too much buffering.
+	 */
+	return (u64)get_nr_swap_pages() << PAGE_SHIFT;
+}
+EXPORT_SYMBOL_GPL(ttm_backup_bytes_avail);
+
+/**
+ * ttm_backup_shmem_create() - Create a shmem-based struct backup.
+ * @size: The maximum size (in bytes) to back up.
+ *
+ * Create a backup utilizing shmem objects.
+ *
+ * Return: A pointer to a struct ttm_backup on success,
+ * an error pointer on error.
+ */
+struct ttm_backup *ttm_backup_shmem_create(loff_t size)
+{
+	struct file *filp;
+
+	filp = shmem_file_setup("ttm shmem backup", size, 0);
+
+	return ttm_file_to_backup(filp);
+}
diff --git a/include/drm/ttm/ttm_backup.h b/include/drm/ttm/ttm_backup.h
new file mode 100644
index 000000000000..24ad120b8827
--- /dev/null
+++ b/include/drm/ttm/ttm_backup.h
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef _TTM_BACKUP_H_
+#define _TTM_BACKUP_H_
+
+#include <linux/mm_types.h>
+#include <linux/shmem_fs.h>
+
+struct ttm_backup;
+
+/**
+ * ttm_backup_handle_to_page_ptr() - Convert handle to struct page pointer
+ * @handle: The handle to convert.
+ *
+ * Converts an opaque handle received from the
+ * struct ttm_backoup_ops::backup_page() function to an (invalid)
+ * struct page pointer suitable for a struct page array.
+ *
+ * Return: An (invalid) struct page pointer.
+ */
+static inline struct page *
+ttm_backup_handle_to_page_ptr(unsigned long handle)
+{
+	return (struct page *)(handle << 1 | 1);
+}
+
+/**
+ * ttm_backup_page_ptr_is_handle() - Whether a struct page pointer is a handle
+ * @page: The struct page pointer to check.
+ *
+ * Return: true if the struct page pointer is a handld returned from
+ * ttm_backup_handle_to_page_ptr(). False otherwise.
+ */
+static inline bool ttm_backup_page_ptr_is_handle(const struct page *page)
+{
+	return (unsigned long)page & 1;
+}
+
+/**
+ * ttm_backup_page_ptr_to_handle() - Convert a struct page pointer to a handle
+ * @page: The struct page pointer to convert
+ *
+ * Return: The handle that was previously used in
+ * ttm_backup_handle_to_page_ptr() to obtain a struct page pointer, suitable
+ * for use as argument in the struct ttm_backup_ops drop() or
+ * copy_backed_up_page() functions.
+ */
+static inline unsigned long
+ttm_backup_page_ptr_to_handle(const struct page *page)
+{
+	WARN_ON(!ttm_backup_page_ptr_is_handle(page));
+	return (unsigned long)page >> 1;
+}
+
+void ttm_backup_drop(struct ttm_backup *backup, pgoff_t handle);
+
+int ttm_backup_copy_page(struct ttm_backup *backup, struct page *dst,
+			 pgoff_t handle, bool intr);
+
+s64
+ttm_backup_backup_page(struct ttm_backup *backup, struct page *page,
+		       bool writeback, pgoff_t idx, gfp_t page_gfp,
+		       gfp_t alloc_gfp);
+
+void ttm_backup_fini(struct ttm_backup *backup);
+
+u64 ttm_backup_bytes_avail(void);
+
+struct ttm_backup *ttm_backup_shmem_create(loff_t size);
+
+#endif
-- 
2.47.1


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

* [PATCH v15 3/9] drm/ttm/pool: Restructure the pool allocation code
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
  2024-12-17 14:58 ` [PATCH v15 1/9] drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini() Thomas Hellström
  2024-12-17 14:58 ` [PATCH v15 2/9] drm/ttm: Provide a shmem backup implementation Thomas Hellström
@ 2024-12-17 14:58 ` Thomas Hellström
  2025-01-10  9:45   ` Christian König
  2025-01-10 17:57   ` Matthew Brost
  2024-12-17 14:58 ` [PATCH v15 4/9] drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages Thomas Hellström
                   ` (14 subsequent siblings)
  17 siblings, 2 replies; 23+ messages in thread
From: Thomas Hellström @ 2024-12-17 14:58 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Matthew Brost, Somalapuram Amaranath,
	Christian König, Paulo Zanoni, Simona Vetter, dri-devel

Simplify the pool allocation code somewhat by merging loop arguments
used by multiple functions together in a struct and simplifying the
loop. Also add documentation.
This hopefully makes the behaviour of the allocation loop
simplier to understand, but above all paves the way for upcoming
restore-while-allocating functionality.

There are no functional changes, but the "allow_pools" bool
introduced to keep current functionality could be removed as a
follow up, which would enable using write-back cached pools when
allocating memory for other caching modes, rather than to resort
to allocating from the system directly.

v15:
- Introduce this patch to simplify the upcoming patch that introduces
  restore while allocating.

Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
 drivers/gpu/drm/ttm/ttm_pool.c | 183 +++++++++++++++++++--------------
 1 file changed, 108 insertions(+), 75 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
index 8504dbe19c1a..c9eba76d5143 100644
--- a/drivers/gpu/drm/ttm/ttm_pool.c
+++ b/drivers/gpu/drm/ttm/ttm_pool.c
@@ -58,6 +58,23 @@ struct ttm_pool_dma {
 	unsigned long vaddr;
 };
 
+/**
+ * struct ttm_pool_alloc_state - Current state of the tt page allocation process
+ * @pages: Pointer to the next tt page pointer to populate.
+ * @caching_divide: Pointer to the first page pointer whose page has a staged but
+ * not committed caching transition from write-back to @tt_caching.
+ * @dma_addr: Pointer to the next tt dma_address entry to populate if any.
+ * @remaining_pages: Remaining pages to populate.
+ * @tt_caching: The requested cpu-caching for the pages allocated.
+ */
+struct ttm_pool_alloc_state {
+	struct page **pages;
+	struct page **caching_divide;
+	dma_addr_t *dma_addr;
+	pgoff_t remaining_pages;
+	enum ttm_caching tt_caching;
+};
+
 static unsigned long page_pool_size;
 
 MODULE_PARM_DESC(page_pool_size, "Number of pages in the WC/UC/DMA pool");
@@ -160,25 +177,25 @@ static void ttm_pool_free_page(struct ttm_pool *pool, enum ttm_caching caching,
 	kfree(dma);
 }
 
-/* Apply a new caching to an array of pages */
-static int ttm_pool_apply_caching(struct page **first, struct page **last,
-				  enum ttm_caching caching)
+/* Apply any cpu-caching deferred during page allocation */
+static int ttm_pool_apply_caching(struct ttm_pool_alloc_state *alloc)
 {
 #ifdef CONFIG_X86
-	unsigned int num_pages = last - first;
+	unsigned int num_pages = alloc->pages - alloc->caching_divide;
 
 	if (!num_pages)
 		return 0;
 
-	switch (caching) {
+	switch (alloc->tt_caching) {
 	case ttm_cached:
 		break;
 	case ttm_write_combined:
-		return set_pages_array_wc(first, num_pages);
+		return set_pages_array_wc(alloc->caching_divide, num_pages);
 	case ttm_uncached:
-		return set_pages_array_uc(first, num_pages);
+		return set_pages_array_uc(alloc->caching_divide, num_pages);
 	}
 #endif
+	alloc->caching_divide = alloc->pages;
 	return 0;
 }
 
@@ -354,24 +371,41 @@ static unsigned int ttm_pool_page_order(struct ttm_pool *pool, struct page *p)
 	return p->private;
 }
 
-/* Called when we got a page, either from a pool or newly allocated */
+/*
+ * Called when we got a page, either from a pool or newly allocated.
+ * if needed, dma map the page and populate the dma address array.
+ * Populate the page address array.
+ * If the caching is consistent, update any deferred caching. Otherwise
+ * stage this page for an upcoming deferred caching update.
+ */
 static int ttm_pool_page_allocated(struct ttm_pool *pool, unsigned int order,
-				   struct page *p, dma_addr_t **dma_addr,
-				   unsigned long *num_pages,
-				   struct page ***pages)
+				   struct page *p, enum ttm_caching page_caching,
+				   struct ttm_pool_alloc_state *alloc)
 {
-	unsigned int i;
-	int r;
+	pgoff_t i, nr = 1UL << order;
+	bool caching_consistent;
+	int r = 0;
+
+	caching_consistent = (page_caching == alloc->tt_caching) || PageHighMem(p);
+
+	if (caching_consistent) {
+		r = ttm_pool_apply_caching(alloc);
+		if (r)
+			return r;
+	}
 
-	if (*dma_addr) {
-		r = ttm_pool_map(pool, order, p, dma_addr);
+	if (alloc->dma_addr) {
+		r = ttm_pool_map(pool, order, p, &alloc->dma_addr);
 		if (r)
 			return r;
 	}
 
-	*num_pages -= 1 << order;
-	for (i = 1 << order; i; --i, ++(*pages), ++p)
-		**pages = p;
+	alloc->remaining_pages -= nr;
+	for (i = 0; i < nr; ++i)
+		*alloc->pages++ = p++;
+
+	if (caching_consistent)
+		alloc->caching_divide = alloc->pages;
 
 	return 0;
 }
@@ -413,6 +447,26 @@ static void ttm_pool_free_range(struct ttm_pool *pool, struct ttm_tt *tt,
 	}
 }
 
+static void ttm_pool_alloc_state_init(const struct ttm_tt *tt,
+				      struct ttm_pool_alloc_state *alloc)
+{
+	alloc->pages = tt->pages;
+	alloc->caching_divide = tt->pages;
+	alloc->dma_addr = tt->dma_address;
+	alloc->remaining_pages = tt->num_pages;
+	alloc->tt_caching = tt->caching;
+}
+
+/*
+ * Find a suitable allocation order based on highest desired order
+ * and number of remaining pages
+ */
+static unsigned int ttm_pool_alloc_find_order(unsigned int highest,
+					      const struct ttm_pool_alloc_state *alloc)
+{
+	return min_t(unsigned int, highest, __fls(alloc->remaining_pages));
+}
+
 /**
  * ttm_pool_alloc - Fill a ttm_tt object
  *
@@ -428,19 +482,19 @@ static void ttm_pool_free_range(struct ttm_pool *pool, struct ttm_tt *tt,
 int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
 		   struct ttm_operation_ctx *ctx)
 {
-	pgoff_t num_pages = tt->num_pages;
-	dma_addr_t *dma_addr = tt->dma_address;
-	struct page **caching = tt->pages;
-	struct page **pages = tt->pages;
+	struct ttm_pool_alloc_state alloc;
 	enum ttm_caching page_caching;
 	gfp_t gfp_flags = GFP_USER;
 	pgoff_t caching_divide;
 	unsigned int order;
+	bool allow_pools;
 	struct page *p;
 	int r;
 
-	WARN_ON(!num_pages || ttm_tt_is_populated(tt));
-	WARN_ON(dma_addr && !pool->dev);
+	ttm_pool_alloc_state_init(tt, &alloc);
+
+	WARN_ON(!alloc.remaining_pages || ttm_tt_is_populated(tt));
+	WARN_ON(alloc.dma_addr && !pool->dev);
 
 	if (tt->page_flags & TTM_TT_FLAG_ZERO_ALLOC)
 		gfp_flags |= __GFP_ZERO;
@@ -453,67 +507,46 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
 	else
 		gfp_flags |= GFP_HIGHUSER;
 
-	for (order = min_t(unsigned int, MAX_PAGE_ORDER, __fls(num_pages));
-	     num_pages;
-	     order = min_t(unsigned int, order, __fls(num_pages))) {
+	page_caching = tt->caching;
+	allow_pools = true;
+	for (order = ttm_pool_alloc_find_order(MAX_PAGE_ORDER, &alloc);
+	     alloc.remaining_pages;
+	     order = ttm_pool_alloc_find_order(order, &alloc)) {
 		struct ttm_pool_type *pt;
 
-		page_caching = tt->caching;
-		pt = ttm_pool_select_type(pool, tt->caching, order);
-		p = pt ? ttm_pool_type_take(pt) : NULL;
-		if (p) {
-			r = ttm_pool_apply_caching(caching, pages,
-						   tt->caching);
-			if (r)
-				goto error_free_page;
-
-			caching = pages;
-			do {
-				r = ttm_pool_page_allocated(pool, order, p,
-							    &dma_addr,
-							    &num_pages,
-							    &pages);
-				if (r)
-					goto error_free_page;
-
-				caching = pages;
-				if (num_pages < (1 << order))
-					break;
-
-				p = ttm_pool_type_take(pt);
-			} while (p);
-		}
-
-		page_caching = ttm_cached;
-		while (num_pages >= (1 << order) &&
-		       (p = ttm_pool_alloc_page(pool, gfp_flags, order))) {
-
-			if (PageHighMem(p)) {
-				r = ttm_pool_apply_caching(caching, pages,
-							   tt->caching);
-				if (r)
-					goto error_free_page;
-				caching = pages;
-			}
-			r = ttm_pool_page_allocated(pool, order, p, &dma_addr,
-						    &num_pages, &pages);
-			if (r)
-				goto error_free_page;
-			if (PageHighMem(p))
-				caching = pages;
+		/* First, try to allocate a page from a pool if one exists. */
+		p = NULL;
+		pt = ttm_pool_select_type(pool, page_caching, order);
+		if (pt && allow_pools)
+			p = ttm_pool_type_take(pt);
+		/*
+		 * If that fails or previously failed, allocate from system.
+		 * Note that this also disallows additional pool allocations using
+		 * write-back cached pools of the same order. Consider removing
+		 * that behaviour.
+		 */
+		if (!p) {
+			page_caching = ttm_cached;
+			allow_pools = false;
+			p = ttm_pool_alloc_page(pool, gfp_flags, order);
 		}
-
+		/* If that fails, lower the order if possible and retry. */
 		if (!p) {
 			if (order) {
 				--order;
+				page_caching = tt->caching;
+				allow_pools = true;
 				continue;
 			}
 			r = -ENOMEM;
 			goto error_free_all;
 		}
+		r = ttm_pool_page_allocated(pool, order, p, page_caching, &alloc);
+		if (r)
+			goto error_free_page;
 	}
 
-	r = ttm_pool_apply_caching(caching, pages, tt->caching);
+	r = ttm_pool_apply_caching(&alloc);
 	if (r)
 		goto error_free_all;
 
@@ -523,10 +556,10 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
 	ttm_pool_free_page(pool, page_caching, order, p);
 
 error_free_all:
-	num_pages = tt->num_pages - num_pages;
-	caching_divide = caching - tt->pages;
+	caching_divide = alloc.caching_divide - tt->pages;
 	ttm_pool_free_range(pool, tt, tt->caching, 0, caching_divide);
-	ttm_pool_free_range(pool, tt, ttm_cached, caching_divide, num_pages);
+	ttm_pool_free_range(pool, tt, ttm_cached, caching_divide,
+			    tt->num_pages - alloc.remaining_pages);
 
 	return r;
 }
-- 
2.47.1


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

* [PATCH v15 4/9] drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (2 preceding siblings ...)
  2024-12-17 14:58 ` [PATCH v15 3/9] drm/ttm/pool: Restructure the pool allocation code Thomas Hellström
@ 2024-12-17 14:58 ` Thomas Hellström
  2025-01-16  1:57   ` Matthew Brost
  2024-12-17 14:58 ` [PATCH v15 5/9] drm/ttm: Use fault-injection to test error paths Thomas Hellström
                   ` (13 subsequent siblings)
  17 siblings, 1 reply; 23+ messages in thread
From: Thomas Hellström @ 2024-12-17 14:58 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Christian König,
	Somalapuram Amaranath, Matthew Brost, dri-devel, Paulo Zanoni,
	Simona Vetter

Provide a helper to shrink ttm_tt page-vectors on a per-page
basis. A ttm_backup backend could then in theory get away with
allocating a single temporary page for each struct ttm_tt.

This is accomplished by splitting larger pages before trying to
back them up.

In the future we could allow ttm_backup to handle backing up
large pages as well, but currently there's no benefit in
doing that, since the shmem backup backend would have to
split those anyway to avoid allocating too much temporary
memory, and if the backend instead inserts pages into the
swap-cache, those are split on reclaim by the core.

Due to potential backup- and recover errors, allow partially swapped
out struct ttm_tt's, although mark them as swapped out stopping them
from being swapped out a second time. More details in the ttm_pool.c
DOC section.

v2:
- A couple of cleanups and error fixes in ttm_pool_back_up_tt.
- s/back_up/backup/
- Add a writeback parameter to the exported interface.
v8:
- Use a struct for flags for readability (Matt Brost)
- Address misc other review comments (Matt Brost)
v9:
- Update the kerneldoc for the ttm_tt::backup field.
v10:
- Rebase.
v13:
- Rebase on ttm_backup interface change. Update kerneldoc.
- Rebase and adjust ttm_tt_is_swapped().
v15:
- Rebase on ttm_backup return value change.
- Rebase on previous restructuring of ttm_pool_alloc()
- Rework the ttm_pool backup interface (Christian König)
- Remove cond_resched() (Christian König)
- Get rid of the need to allocate an intermediate page array
  when restoring a multi-order page (Christian König)
- Update documentation.

Cc: Christian König <christian.koenig@amd.com>
Cc: Somalapuram Amaranath <Amaranath.Somalapuram@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/ttm/ttm_pool.c | 554 +++++++++++++++++++++++++++++----
 drivers/gpu/drm/ttm/ttm_tt.c   |  54 ++++
 include/drm/ttm/ttm_pool.h     |   8 +
 include/drm/ttm/ttm_tt.h       |  67 +++-
 4 files changed, 629 insertions(+), 54 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
index c9eba76d5143..ffb7abf52bab 100644
--- a/drivers/gpu/drm/ttm/ttm_pool.c
+++ b/drivers/gpu/drm/ttm/ttm_pool.c
@@ -41,6 +41,7 @@
 #include <asm/set_memory.h>
 #endif
 
+#include <drm/ttm/ttm_backup.h>
 #include <drm/ttm/ttm_pool.h>
 #include <drm/ttm/ttm_tt.h>
 #include <drm/ttm/ttm_bo.h>
@@ -75,6 +76,35 @@ struct ttm_pool_alloc_state {
 	enum ttm_caching tt_caching;
 };
 
+/**
+ * struct ttm_pool_tt_restore - State representing restore from backup
+ * @pool: The pool used for page allocation while restoring.
+ * @snapshot_alloc: A snapshot of the most recent struct ttm_pool_alloc_state.
+ * @alloced_page: Pointer to the page most recently allocated from a pool or system.
+ * @first_dma: The dma address corresponding to @alloced_page if dma_mapping
+ * is requested.
+ * @alloced_pages: The number of allocated pages present in the struct ttm_tt
+ * page vector from this restore session.
+ * @restored_pages: The number of 4K pages restored for @alloced_page (which
+ * is typically a multi-order page).
+ * @page_caching: The struct ttm_tt requested caching
+ * @order: The order of @alloced_page.
+ *
+ * Recovery from backup might fail when we've recovered less than the
+ * full ttm_tt. In order not to loose any data (yet), keep information
+ * around that allows us to restart a failed ttm backup recovery.
+ */
+struct ttm_pool_tt_restore {
+	struct ttm_pool *pool;
+	struct ttm_pool_alloc_state snapshot_alloc;
+	struct page *alloced_page;
+	dma_addr_t first_dma;
+	pgoff_t alloced_pages;
+	pgoff_t restored_pages;
+	enum ttm_caching page_caching;
+	unsigned int order;
+};
+
 static unsigned long page_pool_size;
 
 MODULE_PARM_DESC(page_pool_size, "Number of pages in the WC/UC/DMA pool");
@@ -199,12 +229,11 @@ static int ttm_pool_apply_caching(struct ttm_pool_alloc_state *alloc)
 	return 0;
 }
 
-/* Map pages of 1 << order size and fill the DMA address array  */
+/* DMA Map pages of 1 << order size and return the resulting dma_address. */
 static int ttm_pool_map(struct ttm_pool *pool, unsigned int order,
-			struct page *p, dma_addr_t **dma_addr)
+			struct page *p, dma_addr_t *dma_addr)
 {
 	dma_addr_t addr;
-	unsigned int i;
 
 	if (pool->use_dma_alloc) {
 		struct ttm_pool_dma *dma = (void *)p->private;
@@ -218,10 +247,7 @@ static int ttm_pool_map(struct ttm_pool *pool, unsigned int order,
 			return -EFAULT;
 	}
 
-	for (i = 1 << order; i ; --i) {
-		*(*dma_addr)++ = addr;
-		addr += PAGE_SIZE;
-	}
+	*dma_addr = addr;
 
 	return 0;
 }
@@ -371,6 +397,190 @@ static unsigned int ttm_pool_page_order(struct ttm_pool *pool, struct page *p)
 	return p->private;
 }
 
+/*
+ * Split larger pages so that we can free each PAGE_SIZE page as soon
+ * as it has been backed up, in order to avoid memory pressure during
+ * reclaim.
+ */
+static void ttm_pool_split_for_swap(struct ttm_pool *pool, struct page *p)
+{
+	unsigned int order = ttm_pool_page_order(pool, p);
+	pgoff_t nr;
+
+	if (!order)
+		return;
+
+	split_page(p, order);
+	nr = 1UL << order;
+	while (nr--)
+		(p++)->private = 0;
+}
+
+/**
+ * DOC: Partial backup and restoration of a struct ttm_tt.
+ *
+ * Swapout using ttm_backup_backup_page() and swapin using
+ * ttm_backup_copy_page() may fail.
+ * The former most likely due to lack of swap-space or memory, the latter due
+ * to lack of memory or because of signal interruption during waits.
+ *
+ * Backup failure is easily handled by using a ttm_tt pages vector that holds
+ * both backup handles and page pointers. This has to be taken into account when
+ * restoring such a ttm_tt from backup, and when freeing it while backed up.
+ * When restoring, for simplicity, new pages are actually allocated from the
+ * pool and the contents of any old pages are copied in and then the old pages
+ * are released.
+ *
+ * For restoration failures, the struct ttm_pool_tt_restore holds sufficient state
+ * to be able to resume an interrupted restore, and that structure is freed once
+ * the restoration is complete. If the struct ttm_tt is destroyed while there
+ * is a valid struct ttm_pool_tt_restore attached, that is also properly taken
+ * care of.
+ */
+
+/* Is restore ongoing for the currently allocated page? */
+static bool ttm_pool_restore_valid(const struct ttm_pool_tt_restore *restore)
+{
+	return restore && restore->restored_pages < (1 << restore->order);
+}
+
+/* DMA unmap and free a multi-order page, either to the relevant pool or to system. */
+static pgoff_t ttm_pool_unmap_and_free(struct ttm_pool *pool, struct page *page,
+				       const dma_addr_t *dma_addr, enum ttm_caching caching)
+{
+	struct ttm_pool_type *pt = NULL;
+	unsigned int order;
+	pgoff_t nr;
+
+	if (pool) {
+		order = ttm_pool_page_order(pool, page);
+		nr = (1UL << order);
+		if (dma_addr)
+			ttm_pool_unmap(pool, *dma_addr, nr);
+
+		pt = ttm_pool_select_type(pool, caching, order);
+	} else {
+		order = page->private;
+		nr = (1UL << order);
+	}
+
+	if (pt)
+		ttm_pool_type_give(pt, page);
+	else
+		ttm_pool_free_page(pool, caching, order, page);
+
+	return nr;
+}
+
+/* Populate the page-array using the most recent allocated multi-order page. */
+static void ttm_pool_allocated_page_commit(struct page *allocated,
+					   dma_addr_t first_dma,
+					   struct ttm_pool_alloc_state *alloc,
+					   pgoff_t nr)
+{
+	pgoff_t i;
+
+	for (i = 0; i < nr; ++i)
+		*alloc->pages++ = allocated++;
+
+	alloc->remaining_pages -= nr;
+
+	if (!alloc->dma_addr)
+		return;
+
+	for (i = 0; i < nr; ++i) {
+		*alloc->dma_addr++ = first_dma;
+		first_dma += PAGE_SIZE;
+	}
+}
+
+/*
+ * When restoring, restore backed-up content to the newly allocated page and
+ * if successful, populate the page-table and dma-address arrays.
+ */
+static int ttm_pool_restore_commit(struct ttm_pool_tt_restore *restore,
+				   struct ttm_backup *backup,
+				   const struct ttm_operation_ctx *ctx,
+				   struct ttm_pool_alloc_state *alloc)
+
+{
+	pgoff_t i, nr = 1UL << restore->order;
+	struct page **first_page = alloc->pages;
+	struct page *p;
+	int ret = 0;
+
+	for (i = restore->restored_pages; i < nr; ++i) {
+		p = first_page[i];
+		if (ttm_backup_page_ptr_is_handle(p)) {
+			unsigned long handle = ttm_backup_page_ptr_to_handle(p);
+
+			if (handle == 0) {
+				restore->restored_pages++;
+				continue;
+			}
+
+			ret = ttm_backup_copy_page(backup, restore->alloced_page + i,
+						   handle, ctx->interruptible);
+			if (ret)
+				break;
+
+			ttm_backup_drop(backup, handle);
+		} else if (p) {
+			/*
+			 * We could probably avoid splitting the old page
+			 * using clever logic, but ATM we don't care, as
+			 * we prioritize releasing memory ASAP. Note that
+			 * here, the old retained page is always write-back
+			 * cached.
+			 */
+			ttm_pool_split_for_swap(restore->pool, p);
+			copy_highpage(restore->alloced_page + i, p);
+			__free_pages(p, 0);
+		}
+
+		restore->restored_pages++;
+		first_page[i] = ttm_backup_handle_to_page_ptr(0);
+	}
+
+	if (ret) {
+		if (!restore->restored_pages) {
+			dma_addr_t *dma_addr = alloc->dma_addr ? &restore->first_dma : NULL;
+
+			ttm_pool_unmap_and_free(restore->pool, restore->alloced_page,
+						dma_addr, restore->page_caching);
+			restore->restored_pages = nr;
+		}
+		return ret;
+	}
+
+	ttm_pool_allocated_page_commit(restore->alloced_page, restore->first_dma,
+				       alloc, nr);
+	if (restore->page_caching == alloc->tt_caching || PageHighMem(restore->alloced_page))
+		alloc->caching_divide = alloc->pages;
+	restore->snapshot_alloc = *alloc;
+	restore->alloced_pages += nr;
+
+	return 0;
+}
+
+/* If restoring, save information needed for ttm_pool_restore_commit(). */
+static void
+ttm_pool_page_allocated_restore(struct ttm_pool *pool, unsigned int order,
+				struct page *p,
+				enum ttm_caching page_caching,
+				dma_addr_t first_dma,
+				struct ttm_pool_tt_restore *restore,
+				const struct ttm_pool_alloc_state *alloc)
+{
+	restore->pool = pool;
+	restore->order = order;
+	restore->restored_pages = 0;
+	restore->page_caching = page_caching;
+	restore->first_dma = first_dma;
+	restore->alloced_page = p;
+	restore->snapshot_alloc = *alloc;
+}
+
 /*
  * Called when we got a page, either from a pool or newly allocated.
  * if needed, dma map the page and populate the dma address array.
@@ -380,10 +590,11 @@ static unsigned int ttm_pool_page_order(struct ttm_pool *pool, struct page *p)
  */
 static int ttm_pool_page_allocated(struct ttm_pool *pool, unsigned int order,
 				   struct page *p, enum ttm_caching page_caching,
-				   struct ttm_pool_alloc_state *alloc)
+				   struct ttm_pool_alloc_state *alloc,
+				   struct ttm_pool_tt_restore *restore)
 {
-	pgoff_t i, nr = 1UL << order;
 	bool caching_consistent;
+	dma_addr_t first_dma;
 	int r = 0;
 
 	caching_consistent = (page_caching == alloc->tt_caching) || PageHighMem(p);
@@ -395,17 +606,20 @@ static int ttm_pool_page_allocated(struct ttm_pool *pool, unsigned int order,
 	}
 
 	if (alloc->dma_addr) {
-		r = ttm_pool_map(pool, order, p, &alloc->dma_addr);
+		r = ttm_pool_map(pool, order, p, &first_dma);
 		if (r)
 			return r;
 	}
 
-	alloc->remaining_pages -= nr;
-	for (i = 0; i < nr; ++i)
-		*alloc->pages++ = p++;
+	if (restore) {
+		ttm_pool_page_allocated_restore(pool, order, p, page_caching,
+						first_dma, restore, alloc);
+	} else {
+		ttm_pool_allocated_page_commit(p, first_dma, alloc, 1UL << order);
 
-	if (caching_consistent)
-		alloc->caching_divide = alloc->pages;
+		if (caching_consistent)
+			alloc->caching_divide = alloc->pages;
+	}
 
 	return 0;
 }
@@ -428,22 +642,24 @@ static void ttm_pool_free_range(struct ttm_pool *pool, struct ttm_tt *tt,
 				pgoff_t start_page, pgoff_t end_page)
 {
 	struct page **pages = &tt->pages[start_page];
-	unsigned int order;
+	struct ttm_backup *backup = tt->backup;
 	pgoff_t i, nr;
 
 	for (i = start_page; i < end_page; i += nr, pages += nr) {
-		struct ttm_pool_type *pt = NULL;
+		struct page *p = *pages;
 
-		order = ttm_pool_page_order(pool, *pages);
-		nr = (1UL << order);
-		if (tt->dma_address)
-			ttm_pool_unmap(pool, tt->dma_address[i], nr);
+		nr = 1;
+		if (ttm_backup_page_ptr_is_handle(p)) {
+			unsigned long handle = ttm_backup_page_ptr_to_handle(p);
 
-		pt = ttm_pool_select_type(pool, caching, order);
-		if (pt)
-			ttm_pool_type_give(pt, *pages);
-		else
-			ttm_pool_free_page(pool, caching, order, *pages);
+			if (handle != 0)
+				ttm_backup_drop(backup, handle);
+		} else if (p) {
+			dma_addr_t *dma_addr = tt->dma_address ?
+				tt->dma_address + i : NULL;
+
+			nr = ttm_pool_unmap_and_free(pool, p, dma_addr, caching);
+		}
 	}
 }
 
@@ -467,22 +683,11 @@ static unsigned int ttm_pool_alloc_find_order(unsigned int highest,
 	return min_t(unsigned int, highest, __fls(alloc->remaining_pages));
 }
 
-/**
- * ttm_pool_alloc - Fill a ttm_tt object
- *
- * @pool: ttm_pool to use
- * @tt: ttm_tt object to fill
- * @ctx: operation context
- *
- * Fill the ttm_tt object with pages and also make sure to DMA map them when
- * necessary.
- *
- * Returns: 0 on successe, negative error code otherwise.
- */
-int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
-		   struct ttm_operation_ctx *ctx)
+static int __ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
+			    const struct ttm_operation_ctx *ctx,
+			    struct ttm_pool_alloc_state *alloc,
+			    struct ttm_pool_tt_restore *restore)
 {
-	struct ttm_pool_alloc_state alloc;
 	enum ttm_caching page_caching;
 	gfp_t gfp_flags = GFP_USER;
 	pgoff_t caching_divide;
@@ -491,10 +696,8 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
 	struct page *p;
 	int r;
 
-	ttm_pool_alloc_state_init(tt, &alloc);
-
-	WARN_ON(!alloc.remaining_pages || ttm_tt_is_populated(tt));
-	WARN_ON(alloc.dma_addr && !pool->dev);
+	WARN_ON(!alloc->remaining_pages || ttm_tt_is_populated(tt));
+	WARN_ON(alloc->dma_addr && !pool->dev);
 
 	if (tt->page_flags & TTM_TT_FLAG_ZERO_ALLOC)
 		gfp_flags |= __GFP_ZERO;
@@ -509,9 +712,9 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
 
 	page_caching = tt->caching;
 	allow_pools = true;
-	for (order = ttm_pool_alloc_find_order(MAX_PAGE_ORDER, &alloc);
-	     alloc.remaining_pages;
-	     order = ttm_pool_alloc_find_order(order, &alloc)) {
+	for (order = ttm_pool_alloc_find_order(MAX_PAGE_ORDER, alloc);
+	     alloc->remaining_pages;
+	     order = ttm_pool_alloc_find_order(order, alloc)) {
 		struct ttm_pool_type *pt;
 
 		/* First, try to allocate a page from a pool if one exists. */
@@ -541,30 +744,120 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
 			r = -ENOMEM;
 			goto error_free_all;
 		}
-		r = ttm_pool_page_allocated(pool, order, p, page_caching, &alloc);
+		r = ttm_pool_page_allocated(pool, order, p, page_caching, alloc,
+					    restore);
 		if (r)
 			goto error_free_page;
+
+		if (ttm_pool_restore_valid(restore)) {
+			r = ttm_pool_restore_commit(restore, tt->backup, ctx, alloc);
+			if (r)
+				goto error_free_all;
+		}
 	}
 
-	r = ttm_pool_apply_caching(&alloc);
+	r = ttm_pool_apply_caching(alloc);
 	if (r)
 		goto error_free_all;
 
+	kfree(tt->restore);
+	tt->restore = NULL;
+
 	return 0;
 
 error_free_page:
 	ttm_pool_free_page(pool, page_caching, order, p);
 
 error_free_all:
-	caching_divide = alloc.caching_divide - tt->pages;
+	if (tt->restore)
+		return r;
+
+	caching_divide = alloc->caching_divide - tt->pages;
 	ttm_pool_free_range(pool, tt, tt->caching, 0, caching_divide);
 	ttm_pool_free_range(pool, tt, ttm_cached, caching_divide,
-			    tt->num_pages - alloc.remaining_pages);
+			    tt->num_pages - alloc->remaining_pages);
 
 	return r;
 }
+
+/**
+ * ttm_pool_alloc - Fill a ttm_tt object
+ *
+ * @pool: ttm_pool to use
+ * @tt: ttm_tt object to fill
+ * @ctx: operation context
+ *
+ * Fill the ttm_tt object with pages and also make sure to DMA map them when
+ * necessary.
+ *
+ * Returns: 0 on successe, negative error code otherwise.
+ */
+int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
+		   struct ttm_operation_ctx *ctx)
+{
+	struct ttm_pool_alloc_state alloc;
+
+	if (WARN_ON(ttm_tt_is_backed_up(tt)))
+		return -EINVAL;
+
+	ttm_pool_alloc_state_init(tt, &alloc);
+
+	return __ttm_pool_alloc(pool, tt, ctx, &alloc, NULL);
+}
 EXPORT_SYMBOL(ttm_pool_alloc);
 
+/**
+ * ttm_pool_restore_and_alloc - Fill a ttm_tt, restoring previously backed-up
+ * content.
+ *
+ * @pool: ttm_pool to use
+ * @tt: ttm_tt object to fill
+ * @ctx: operation context
+ *
+ * Fill the ttm_tt object with pages and also make sure to DMA map them when
+ * necessary. Read in backed-up content.
+ *
+ * Returns: 0 on successe, negative error code otherwise.
+ */
+int ttm_pool_restore_and_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
+			       const struct ttm_operation_ctx *ctx)
+{
+	struct ttm_pool_alloc_state alloc;
+
+	if (WARN_ON(!ttm_tt_is_backed_up(tt)))
+		return -EINVAL;
+
+	if (!tt->restore) {
+		gfp_t gfp = GFP_KERNEL | __GFP_NOWARN;
+
+		ttm_pool_alloc_state_init(tt, &alloc);
+		if (ctx->gfp_retry_mayfail)
+			gfp |= __GFP_RETRY_MAYFAIL;
+
+		tt->restore = kzalloc(sizeof(*tt->restore), gfp);
+		if (!tt->restore)
+			return -ENOMEM;
+
+		tt->restore->snapshot_alloc = alloc;
+		tt->restore->pool = pool;
+		tt->restore->restored_pages = 1;
+	} else {
+		struct ttm_pool_tt_restore *restore = tt->restore;
+		int ret;
+
+		alloc = restore->snapshot_alloc;
+		if (ttm_pool_restore_valid(tt->restore)) {
+			ret = ttm_pool_restore_commit(restore, tt->backup, ctx, &alloc);
+			if (ret)
+				return ret;
+		}
+		if (!alloc.remaining_pages)
+			return 0;
+	}
+
+	return __ttm_pool_alloc(pool, tt, ctx, &alloc, tt->restore);
+}
+
 /**
  * ttm_pool_free - Free the backing pages from a ttm_tt object
  *
@@ -582,6 +875,163 @@ void ttm_pool_free(struct ttm_pool *pool, struct ttm_tt *tt)
 }
 EXPORT_SYMBOL(ttm_pool_free);
 
+/**
+ * ttm_pool_drop_backed_up() - Release content of a swapped-out struct ttm_tt
+ * @tt: The struct ttm_tt.
+ *
+ * Release handles with associated content or any remaining pages of
+ * a backed-up struct ttm_tt.
+ */
+void ttm_pool_drop_backed_up(struct ttm_tt *tt)
+{
+	struct ttm_pool_tt_restore *restore;
+	pgoff_t start_page = 0;
+
+	WARN_ON(!ttm_tt_is_backed_up(tt));
+
+	restore = tt->restore;
+
+	/*
+	 * Unmap and free any uncommitted restore page.
+	 * any tt page-array backup entries already read back has
+	 * been cleared already
+	 */
+	if (ttm_pool_restore_valid(restore)) {
+		dma_addr_t *dma_addr = tt->dma_address ? &restore->first_dma : NULL;
+
+		ttm_pool_unmap_and_free(restore->pool, restore->alloced_page,
+					dma_addr, restore->page_caching);
+		restore->restored_pages = 1UL << restore->order;
+	}
+
+	/*
+	 * If a restore is ongoing, part of the tt pages may have a
+	 * caching different than writeback.
+	 */
+	if (restore) {
+		pgoff_t mid = restore->snapshot_alloc.caching_divide - tt->pages;
+
+		start_page = restore->alloced_pages;
+		WARN_ON(mid > start_page);
+		/* Pages that might be dma-mapped and non-cached */
+		ttm_pool_free_range(restore->pool, tt, tt->caching,
+				    0, mid);
+		/* Pages that might be dma-mapped but cached */
+		ttm_pool_free_range(restore->pool, tt, ttm_cached,
+				    mid, restore->alloced_pages);
+		kfree(restore);
+		tt->restore = NULL;
+	}
+
+	ttm_pool_free_range(NULL, tt, ttm_cached, start_page, tt->num_pages);
+}
+
+/**
+ * ttm_pool_backup() - Back up or purge a struct ttm_tt
+ * @pool: The pool used when allocating the struct ttm_tt.
+ * @tt: The struct ttm_tt.
+ * @flags: Flags to govern the backup behaviour.
+ *
+ * Back up or purge a struct ttm_tt. If @purge is true, then
+ * all pages will be freed directly to the system rather than to the pool
+ * they were allocated from, making the function behave similarly to
+ * ttm_pool_free(). If @purge is false the pages will be backed up instead,
+ * exchanged for handles.
+ * A subsequent call to ttm_pool_restore_and_alloc() will then read back the content and
+ * a subsequent call to ttm_pool_drop_backed_up() will drop it.
+ * If backup of a page fails for whatever reason, @ttm will still be
+ * partially backed up, retaining those pages for which backup fails.
+ * In that case, this function can be retried, possibly after freeing up
+ * memory resources.
+ *
+ * Return: Number of pages actually backed up or freed, or negative
+ * error code on error.
+ */
+long ttm_pool_backup(struct ttm_pool *pool, struct ttm_tt *tt,
+		     const struct ttm_backup_flags *flags)
+{
+	struct ttm_backup *backup = tt->backup;
+	struct page *page;
+	unsigned long handle;
+	gfp_t alloc_gfp;
+	gfp_t gfp;
+	int ret = 0;
+	pgoff_t shrunken = 0;
+	pgoff_t i, num_pages;
+
+	if (WARN_ON(ttm_tt_is_backed_up(tt)))
+		return -EINVAL;
+
+	if ((!ttm_backup_bytes_avail() && !flags->purge) ||
+	    pool->use_dma_alloc || ttm_tt_is_backed_up(tt))
+		return -EBUSY;
+
+#ifdef CONFIG_X86
+	/* Anything returned to the system needs to be cached. */
+	if (tt->caching != ttm_cached)
+		set_pages_array_wb(tt->pages, tt->num_pages);
+#endif
+
+	if (tt->dma_address || flags->purge) {
+		for (i = 0; i < tt->num_pages; i += num_pages) {
+			unsigned int order;
+
+			page = tt->pages[i];
+			if (unlikely(!page)) {
+				num_pages = 1;
+				continue;
+			}
+
+			order = ttm_pool_page_order(pool, page);
+			num_pages = 1UL << order;
+			if (tt->dma_address)
+				ttm_pool_unmap(pool, tt->dma_address[i],
+					       num_pages);
+			if (flags->purge) {
+				shrunken += num_pages;
+				page->private = 0;
+				__free_pages(page, order);
+				memset(tt->pages + i, 0,
+				       num_pages * sizeof(*tt->pages));
+			}
+		}
+	}
+
+	if (flags->purge)
+		return shrunken;
+
+	if (pool->use_dma32)
+		gfp = GFP_DMA32;
+	else
+		gfp = GFP_HIGHUSER;
+
+	alloc_gfp = GFP_KERNEL | __GFP_HIGH | __GFP_NOWARN | __GFP_RETRY_MAYFAIL;
+
+	for (i = 0; i < tt->num_pages; ++i) {
+		s64 shandle;
+
+		page = tt->pages[i];
+		if (unlikely(!page))
+			continue;
+
+		ttm_pool_split_for_swap(pool, page);
+
+		shandle = ttm_backup_backup_page(backup, page, flags->writeback, i,
+						 gfp, alloc_gfp);
+		if (shandle < 0) {
+			/* We allow partially shrunken tts */
+			ret = shandle;
+			break;
+		}
+		handle = shandle;
+		tt->pages[i] = ttm_backup_handle_to_page_ptr(handle);
+		put_page(page);
+		shrunken++;
+	}
+
+	return shrunken ? shrunken : ret;
+}
+
 /**
  * ttm_pool_init - Initialize a pool
  *
diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
index 3baf215eca23..00b7c28f2329 100644
--- a/drivers/gpu/drm/ttm/ttm_tt.c
+++ b/drivers/gpu/drm/ttm/ttm_tt.c
@@ -40,6 +40,7 @@
 #include <drm/drm_cache.h>
 #include <drm/drm_device.h>
 #include <drm/drm_util.h>
+#include <drm/ttm/ttm_backup.h>
 #include <drm/ttm/ttm_bo.h>
 #include <drm/ttm/ttm_tt.h>
 
@@ -158,6 +159,8 @@ static void ttm_tt_init_fields(struct ttm_tt *ttm,
 	ttm->swap_storage = NULL;
 	ttm->sg = bo->sg;
 	ttm->caching = caching;
+	ttm->restore = NULL;
+	ttm->backup = NULL;
 }
 
 int ttm_tt_init(struct ttm_tt *ttm, struct ttm_buffer_object *bo,
@@ -182,6 +185,13 @@ void ttm_tt_fini(struct ttm_tt *ttm)
 		fput(ttm->swap_storage);
 	ttm->swap_storage = NULL;
 
+	if (ttm_tt_is_backed_up(ttm))
+		ttm_pool_drop_backed_up(ttm);
+	if (ttm->backup) {
+		ttm_backup_fini(ttm->backup);
+		ttm->backup = NULL;
+	}
+
 	if (ttm->pages)
 		kvfree(ttm->pages);
 	else
@@ -253,6 +263,49 @@ int ttm_tt_swapin(struct ttm_tt *ttm)
 }
 EXPORT_SYMBOL_FOR_TESTS_ONLY(ttm_tt_swapin);
 
+/**
+ * ttm_tt_backup() - Helper to back up a struct ttm_tt.
+ * @bdev: The TTM device.
+ * @tt: The struct ttm_tt.
+ * @flags: Flags that govern the backup behaviour.
+ *
+ * Update the page accounting and call ttm_pool_shrink_tt to free pages
+ * or back them up.
+ *
+ * Return: Number of pages freed or swapped out, or negative error code on
+ * error.
+ */
+long ttm_tt_backup(struct ttm_device *bdev, struct ttm_tt *tt,
+		   const struct ttm_backup_flags flags)
+{
+	long ret;
+
+	if (WARN_ON(IS_ERR_OR_NULL(tt->backup)))
+		return 0;
+
+	ret = ttm_pool_backup(&bdev->pool, tt, &flags);
+	if (ret > 0) {
+		tt->page_flags &= ~TTM_TT_FLAG_PRIV_POPULATED;
+		tt->page_flags |= TTM_TT_FLAG_BACKED_UP;
+	}
+
+	return ret;
+}
+
+int ttm_tt_restore(struct ttm_device *bdev, struct ttm_tt *tt,
+		   const struct ttm_operation_ctx *ctx)
+{
+	int ret = ttm_pool_restore_and_alloc(&bdev->pool, tt, ctx);
+
+	if (ret)
+		return ret;
+
+	tt->page_flags &= ~TTM_TT_FLAG_BACKED_UP;
+
+	return 0;
+}
+EXPORT_SYMBOL(ttm_tt_restore);
+
 /**
  * ttm_tt_swapout - swap out tt object
  *
@@ -348,6 +401,7 @@ int ttm_tt_populate(struct ttm_device *bdev,
 		goto error;
 
 	ttm->page_flags |= TTM_TT_FLAG_PRIV_POPULATED;
+	ttm->page_flags &= ~TTM_TT_FLAG_BACKED_UP;
 	if (unlikely(ttm->page_flags & TTM_TT_FLAG_SWAPPED)) {
 		ret = ttm_tt_swapin(ttm);
 		if (unlikely(ret != 0)) {
diff --git a/include/drm/ttm/ttm_pool.h b/include/drm/ttm/ttm_pool.h
index 160d954a261e..54cd34a6e4c0 100644
--- a/include/drm/ttm/ttm_pool.h
+++ b/include/drm/ttm/ttm_pool.h
@@ -33,6 +33,7 @@
 
 struct device;
 struct seq_file;
+struct ttm_backup_flags;
 struct ttm_operation_ctx;
 struct ttm_pool;
 struct ttm_tt;
@@ -89,6 +90,13 @@ void ttm_pool_fini(struct ttm_pool *pool);
 
 int ttm_pool_debugfs(struct ttm_pool *pool, struct seq_file *m);
 
+void ttm_pool_drop_backed_up(struct ttm_tt *tt);
+
+long ttm_pool_backup(struct ttm_pool *pool, struct ttm_tt *ttm,
+		     const struct ttm_backup_flags *flags);
+int ttm_pool_restore_and_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
+			       const struct ttm_operation_ctx *ctx);
+
 int ttm_pool_mgr_init(unsigned long num_pages);
 void ttm_pool_mgr_fini(void);
 
diff --git a/include/drm/ttm/ttm_tt.h b/include/drm/ttm/ttm_tt.h
index 991edafdb2dd..c736c01ac2ca 100644
--- a/include/drm/ttm/ttm_tt.h
+++ b/include/drm/ttm/ttm_tt.h
@@ -32,11 +32,13 @@
 #include <drm/ttm/ttm_caching.h>
 #include <drm/ttm/ttm_kmap_iter.h>
 
+struct ttm_backup;
 struct ttm_device;
 struct ttm_tt;
 struct ttm_resource;
 struct ttm_buffer_object;
 struct ttm_operation_ctx;
+struct ttm_pool_tt_restore;
 
 /**
  * struct ttm_tt - This is a structure holding the pages, caching- and aperture
@@ -85,17 +87,22 @@ struct ttm_tt {
 	 * fault handling abuses the DMA api a bit and dma_map_attrs can't be
 	 * used to assure pgprot always matches.
 	 *
+	 * TTM_TT_FLAG_BACKED_UP: TTM internal only. This is set if the
+	 * struct ttm_tt has been (possibly partially) backed up.
+	 *
 	 * TTM_TT_FLAG_PRIV_POPULATED: TTM internal only. DO NOT USE. This is
 	 * set by TTM after ttm_tt_populate() has successfully returned, and is
 	 * then unset when TTM calls ttm_tt_unpopulate().
+	 *
 	 */
 #define TTM_TT_FLAG_SWAPPED		BIT(0)
 #define TTM_TT_FLAG_ZERO_ALLOC		BIT(1)
 #define TTM_TT_FLAG_EXTERNAL		BIT(2)
 #define TTM_TT_FLAG_EXTERNAL_MAPPABLE	BIT(3)
 #define TTM_TT_FLAG_DECRYPTED		BIT(4)
+#define TTM_TT_FLAG_BACKED_UP	        BIT(5)
 
-#define TTM_TT_FLAG_PRIV_POPULATED	BIT(5)
+#define TTM_TT_FLAG_PRIV_POPULATED	BIT(6)
 	uint32_t page_flags;
 	/** @num_pages: Number of pages in the page array. */
 	uint32_t num_pages;
@@ -105,11 +112,20 @@ struct ttm_tt {
 	dma_addr_t *dma_address;
 	/** @swap_storage: Pointer to shmem struct file for swap storage. */
 	struct file *swap_storage;
+	/**
+	 * @backup: Pointer to backup struct for backed up tts.
+	 * Could be unified with @swap_storage. Meanwhile, the driver's
+	 * ttm_tt_create() callback is responsible for assigning
+	 * this field.
+	 */
+	struct ttm_backup *backup;
 	/**
 	 * @caching: The current caching state of the pages, see enum
 	 * ttm_caching.
 	 */
 	enum ttm_caching caching;
+	/** @restore: Partial restoration from backup state. TTM private */
+	struct ttm_pool_tt_restore *restore;
 };
 
 /**
@@ -129,9 +145,38 @@ static inline bool ttm_tt_is_populated(struct ttm_tt *tt)
 	return tt->page_flags & TTM_TT_FLAG_PRIV_POPULATED;
 }
 
+/**
+ * ttm_tt_is_swapped() - Whether the ttm_tt is swapped out or backed up
+ * @tt: The struct ttm_tt.
+ *
+ * Return: true if swapped or backed up, false otherwise.
+ */
 static inline bool ttm_tt_is_swapped(const struct ttm_tt *tt)
 {
-	return tt->page_flags & TTM_TT_FLAG_SWAPPED;
+	return tt->page_flags & (TTM_TT_FLAG_SWAPPED | TTM_TT_FLAG_BACKED_UP);
+}
+
+/**
+ * ttm_tt_is_backed_up() - Whether the ttm_tt backed up
+ * @tt: The struct ttm_tt.
+ *
+ * Return: true if swapped or backed up, false otherwise.
+ */
+static inline bool ttm_tt_is_backed_up(const struct ttm_tt *tt)
+{
+	return tt->page_flags & TTM_TT_FLAG_BACKED_UP;
+}
+
+/**
+ * ttm_tt_clear_backed_up() - Clear the ttm_tt backed-up status
+ * @tt: The struct ttm_tt.
+ *
+ * Drivers can use this functionto clear the backed-up status,
+ * for example before destroying or re-validating a purged tt.
+ */
+static inline void ttm_tt_clear_backed_up(struct ttm_tt *tt)
+{
+	tt->page_flags &= ~TTM_TT_FLAG_BACKED_UP;
 }
 
 /**
@@ -235,6 +280,24 @@ void ttm_tt_mgr_init(unsigned long num_pages, unsigned long num_dma32_pages);
 struct ttm_kmap_iter *ttm_kmap_iter_tt_init(struct ttm_kmap_iter_tt *iter_tt,
 					    struct ttm_tt *tt);
 unsigned long ttm_tt_pages_limit(void);
+
+/**
+ * struct ttm_backup_flags - Flags to govern backup behaviour.
+ * @purge: Free pages without backing up. Bypass pools.
+ * @writeback: Attempt to copy contents directly to swap space, even
+ * if that means blocking on writes to external memory.
+ */
+struct ttm_backup_flags {
+	u32 purge : 1;
+	u32 writeback : 1;
+};
+
+long ttm_tt_backup(struct ttm_device *bdev, struct ttm_tt *tt,
+		   const struct ttm_backup_flags flags);
+
+int ttm_tt_restore(struct ttm_device *bdev, struct ttm_tt *tt,
+		   const struct ttm_operation_ctx *ctx);
+
 #if IS_ENABLED(CONFIG_AGP)
 #include <linux/agp_backend.h>
 
-- 
2.47.1


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

* [PATCH v15 5/9] drm/ttm: Use fault-injection to test error paths
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (3 preceding siblings ...)
  2024-12-17 14:58 ` [PATCH v15 4/9] drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages Thomas Hellström
@ 2024-12-17 14:58 ` Thomas Hellström
  2024-12-17 14:58 ` [PATCH v15 6/9] drm/ttm: Add a macro to perform LRU iteration Thomas Hellström
                   ` (12 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Thomas Hellström @ 2024-12-17 14:58 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Christian König,
	Somalapuram Amaranath, Matthew Brost, dri-devel, Paulo Zanoni,
	Simona Vetter

Use fault-injection to test partial TTM swapout and interrupted swapin.
Return -EINTR for swapin to test the callers ability to handle and
restart the swapin, and on swapout perform a partial swapout to test that
the swapin and release_shrunken functionality.

v8:
- Use the core fault-injection system.
v9:
- Fix compliation failure for !CONFIG_FAULT_INJECTION

Cc: Christian König <christian.koenig@amd.com>
Cc: Somalapuram Amaranath <Amaranath.Somalapuram@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: Matthew Brost <matthew.brost@intel.com> #v7
---
 drivers/gpu/drm/ttm/ttm_pool.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
index ffb7abf52bab..83b10706ba89 100644
--- a/drivers/gpu/drm/ttm/ttm_pool.c
+++ b/drivers/gpu/drm/ttm/ttm_pool.c
@@ -48,6 +48,13 @@
 
 #include "ttm_module.h"
 
+#ifdef CONFIG_FAULT_INJECTION
+#include <linux/fault-inject.h>
+static DECLARE_FAULT_ATTR(backup_fault_inject);
+#else
+#define should_fail(...) false
+#endif
+
 /**
  * struct ttm_pool_dma - Helper object for coherent DMA mappings
  *
@@ -514,6 +521,12 @@ static int ttm_pool_restore_commit(struct ttm_pool_tt_restore *restore,
 		if (ttm_backup_page_ptr_is_handle(p)) {
 			unsigned long handle = ttm_backup_page_ptr_to_handle(p);
 
+			if (IS_ENABLED(CONFIG_FAULT_INJECTION) && ctx->interruptible &&
+			    should_fail(&backup_fault_inject, 1)) {
+				ret = -EINTR;
+				break;
+			}
+
 			if (handle == 0) {
 				restore->restored_pages++;
 				continue;
@@ -1007,7 +1020,13 @@ long ttm_pool_backup(struct ttm_pool *pool, struct ttm_tt *tt,
 
 	alloc_gfp = GFP_KERNEL | __GFP_HIGH | __GFP_NOWARN | __GFP_RETRY_MAYFAIL;
 
-	for (i = 0; i < tt->num_pages; ++i) {
+	num_pages = tt->num_pages;
+
+	/* Pretend doing fault injection by shrinking only half of the pages. */
+	if (IS_ENABLED(CONFIG_FAULT_INJECTION) && should_fail(&backup_fault_inject, 1))
+		num_pages = DIV_ROUND_UP(num_pages, 2);
+
+	for (i = 0; i < num_pages; ++i) {
 		s64 shandle;
 
 		page = tt->pages[i];
@@ -1293,6 +1312,10 @@ int ttm_pool_mgr_init(unsigned long num_pages)
 			    &ttm_pool_debugfs_globals_fops);
 	debugfs_create_file("page_pool_shrink", 0400, ttm_debugfs_root, NULL,
 			    &ttm_pool_debugfs_shrink_fops);
+#ifdef CONFIG_FAULT_INJECTION
+	fault_create_debugfs_attr("backup_fault_inject", ttm_debugfs_root,
+				  &backup_fault_inject);
+#endif
 #endif
 
 	mm_shrinker = shrinker_alloc(0, "drm-ttm_pool");
-- 
2.47.1


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

* [PATCH v15 6/9] drm/ttm: Add a macro to perform LRU iteration
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (4 preceding siblings ...)
  2024-12-17 14:58 ` [PATCH v15 5/9] drm/ttm: Use fault-injection to test error paths Thomas Hellström
@ 2024-12-17 14:58 ` Thomas Hellström
  2024-12-17 14:58 ` [PATCH v15 7/9] drm/ttm: Add helpers for shrinking Thomas Hellström
                   ` (11 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Thomas Hellström @ 2024-12-17 14:58 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Matthew Brost, Somalapuram Amaranath,
	Christian König, Paulo Zanoni, Simona Vetter, dri-devel

Following the design direction communicated here:

https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/#ma918844aa8a6efe8768fdcda0c6590d5c93850c9

Export a LRU walker for driver shrinker use. The walker
initially supports only trylocking, since that's the
method used by shrinkes. The walker makes use of
scoped_guard() to allow exiting from the LRU walk loop
without performing any explicit unlocking or
cleanup.

v8:
- Split out from another patch.
- Use a struct for bool arguments to increase readability (Matt Brost).
- Unmap user-space cpu-mappings before shrinking pages.
- Explain non-fatal error codes (Matt Brost)

v10:
- Instead of using the existing helper, Wrap the interface inside out and
  provide a loop to de-midlayer things the LRU iteration (Christian König).
- Removing the R-B by Matt Brost since the patch was significantly changed.

v11:
- Split the patch up to include just the LRU walk helper.

v12:
- Indent after scoped_guard() (Matt Brost)

v15:
- Adapt to new definition of scoped_guard()

Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
---
 drivers/gpu/drm/ttm/ttm_bo_util.c | 140 +++++++++++++++++++++++++++++-
 include/drm/ttm/ttm_bo.h          |  72 +++++++++++++++
 2 files changed, 208 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 917096bd5f68..0cac02a9764c 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -769,12 +769,10 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo)
 	return ret;
 }
 
-static bool ttm_lru_walk_trylock(struct ttm_lru_walk *walk,
+static bool ttm_lru_walk_trylock(struct ttm_operation_ctx *ctx,
 				 struct ttm_buffer_object *bo,
 				 bool *needs_unlock)
 {
-	struct ttm_operation_ctx *ctx = walk->ctx;
-
 	*needs_unlock = false;
 
 	if (dma_resv_trylock(bo->base.resv)) {
@@ -877,7 +875,7 @@ s64 ttm_lru_walk_for_evict(struct ttm_lru_walk *walk, struct ttm_device *bdev,
 		 * since if we do it the other way around, and the trylock fails,
 		 * we need to drop the lru lock to put the bo.
 		 */
-		if (ttm_lru_walk_trylock(walk, bo, &bo_needs_unlock))
+		if (ttm_lru_walk_trylock(walk->ctx, bo, &bo_needs_unlock))
 			bo_locked = true;
 		else if (!walk->ticket || walk->ctx->no_wait_gpu ||
 			 walk->trylock_only)
@@ -920,3 +918,137 @@ s64 ttm_lru_walk_for_evict(struct ttm_lru_walk *walk, struct ttm_device *bdev,
 
 	return progress;
 }
+EXPORT_SYMBOL(ttm_lru_walk_for_evict);
+
+static void ttm_bo_lru_cursor_cleanup_bo(struct ttm_bo_lru_cursor *curs)
+{
+	struct ttm_buffer_object *bo = curs->bo;
+
+	if (bo) {
+		if (curs->needs_unlock)
+			dma_resv_unlock(bo->base.resv);
+		ttm_bo_put(bo);
+		curs->bo = NULL;
+	}
+}
+
+/**
+ * ttm_bo_lru_cursor_fini() - Stop using a struct ttm_bo_lru_cursor
+ * and clean up any iteration it was used for.
+ * @curs: The cursor.
+ */
+void ttm_bo_lru_cursor_fini(struct ttm_bo_lru_cursor *curs)
+{
+	spinlock_t *lru_lock = &curs->res_curs.man->bdev->lru_lock;
+
+	ttm_bo_lru_cursor_cleanup_bo(curs);
+	spin_lock(lru_lock);
+	ttm_resource_cursor_fini(&curs->res_curs);
+	spin_unlock(lru_lock);
+}
+EXPORT_SYMBOL(ttm_bo_lru_cursor_fini);
+
+/**
+ * ttm_bo_lru_cursor_init() - Initialize a struct ttm_bo_lru_cursor
+ * @curs: The ttm_bo_lru_cursor to initialize.
+ * @man: The ttm resource_manager whose LRU lists to iterate over.
+ * @ctx: The ttm_operation_ctx to govern the locking.
+ *
+ * Initialize a struct ttm_bo_lru_cursor. Currently only trylocking
+ * or prelocked buffer objects are available as detailed by
+ * @ctx::resv and @ctx::allow_res_evict. Ticketlocking is not
+ * supported.
+ *
+ * Return: Pointer to @curs. The function does not fail.
+ */
+struct ttm_bo_lru_cursor *
+ttm_bo_lru_cursor_init(struct ttm_bo_lru_cursor *curs,
+		       struct ttm_resource_manager *man,
+		       struct ttm_operation_ctx *ctx)
+{
+	memset(curs, 0, sizeof(*curs));
+	ttm_resource_cursor_init(&curs->res_curs, man);
+	curs->ctx = ctx;
+
+	return curs;
+}
+EXPORT_SYMBOL(ttm_bo_lru_cursor_init);
+
+static struct ttm_buffer_object *
+ttm_bo_from_res_reserved(struct ttm_resource *res, struct ttm_bo_lru_cursor *curs)
+{
+	struct ttm_buffer_object *bo = res->bo;
+
+	if (!ttm_lru_walk_trylock(curs->ctx, bo, &curs->needs_unlock))
+		return NULL;
+
+	if (!ttm_bo_get_unless_zero(bo)) {
+		if (curs->needs_unlock)
+			dma_resv_unlock(bo->base.resv);
+		return NULL;
+	}
+
+	curs->bo = bo;
+	return bo;
+}
+
+/**
+ * ttm_bo_lru_cursor_next() - Continue iterating a manager's LRU lists
+ * to find and lock buffer object.
+ * @curs: The cursor initialized using ttm_bo_lru_cursor_init() and
+ * ttm_bo_lru_cursor_first().
+ *
+ * Return: A pointer to a locked and reference-counted buffer object,
+ * or NULL if none could be found and looping should be terminated.
+ */
+struct ttm_buffer_object *ttm_bo_lru_cursor_next(struct ttm_bo_lru_cursor *curs)
+{
+	spinlock_t *lru_lock = &curs->res_curs.man->bdev->lru_lock;
+	struct ttm_resource *res = NULL;
+	struct ttm_buffer_object *bo;
+
+	ttm_bo_lru_cursor_cleanup_bo(curs);
+
+	spin_lock(lru_lock);
+	for (;;) {
+		res = ttm_resource_manager_next(&curs->res_curs);
+		if (!res)
+			break;
+
+		bo = ttm_bo_from_res_reserved(res, curs);
+		if (bo)
+			break;
+	}
+
+	spin_unlock(lru_lock);
+	return res ? bo : NULL;
+}
+EXPORT_SYMBOL(ttm_bo_lru_cursor_next);
+
+/**
+ * ttm_bo_lru_cursor_first() - Start iterating a manager's LRU lists
+ * to find and lock buffer object.
+ * @curs: The cursor initialized using ttm_bo_lru_cursor_init().
+ *
+ * Return: A pointer to a locked and reference-counted buffer object,
+ * or NULL if none could be found and looping should be terminated.
+ */
+struct ttm_buffer_object *ttm_bo_lru_cursor_first(struct ttm_bo_lru_cursor *curs)
+{
+	spinlock_t *lru_lock = &curs->res_curs.man->bdev->lru_lock;
+	struct ttm_buffer_object *bo;
+	struct ttm_resource *res;
+
+	spin_lock(lru_lock);
+	res = ttm_resource_manager_first(&curs->res_curs);
+	if (!res) {
+		spin_unlock(lru_lock);
+		return NULL;
+	}
+
+	bo = ttm_bo_from_res_reserved(res, curs);
+	spin_unlock(lru_lock);
+
+	return bo ? bo : ttm_bo_lru_cursor_next(curs);
+}
+EXPORT_SYMBOL(ttm_bo_lru_cursor_first);
diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
index 8ea11cd8df39..1509268849c0 100644
--- a/include/drm/ttm/ttm_bo.h
+++ b/include/drm/ttm/ttm_bo.h
@@ -467,4 +467,76 @@ void ttm_bo_tt_destroy(struct ttm_buffer_object *bo);
 int ttm_bo_populate(struct ttm_buffer_object *bo,
 		    struct ttm_operation_ctx *ctx);
 
+/* Driver LRU walk helpers initially targeted for shrinking. */
+
+/**
+ * struct ttm_bo_lru_cursor - Iterator cursor for TTM LRU list looping
+ */
+struct ttm_bo_lru_cursor {
+	/** @res_curs: Embedded struct ttm_resource_cursor. */
+	struct ttm_resource_cursor res_curs;
+	/**
+	 * @ctx: The struct ttm_operation_ctx used while looping.
+	 * governs the locking mode.
+	 */
+	struct ttm_operation_ctx *ctx;
+	/**
+	 * @bo: Buffer object pointer if a buffer object is refcounted,
+	 * NULL otherwise.
+	 */
+	struct ttm_buffer_object *bo;
+	/**
+	 * @needs_unlock: Valid iff @bo != NULL. The bo resv needs
+	 * unlock before the next iteration or after loop exit.
+	 */
+	bool needs_unlock;
+};
+
+void ttm_bo_lru_cursor_fini(struct ttm_bo_lru_cursor *curs);
+
+struct ttm_bo_lru_cursor *
+ttm_bo_lru_cursor_init(struct ttm_bo_lru_cursor *curs,
+		       struct ttm_resource_manager *man,
+		       struct ttm_operation_ctx *ctx);
+
+struct ttm_buffer_object *ttm_bo_lru_cursor_first(struct ttm_bo_lru_cursor *curs);
+
+struct ttm_buffer_object *ttm_bo_lru_cursor_next(struct ttm_bo_lru_cursor *curs);
+
+/*
+ * Defines needed to use autocleanup (linux/cleanup.h) with struct ttm_bo_lru_cursor.
+ */
+DEFINE_CLASS(ttm_bo_lru_cursor, struct ttm_bo_lru_cursor *,
+	     if (_T) {ttm_bo_lru_cursor_fini(_T); },
+	     ttm_bo_lru_cursor_init(curs, man, ctx),
+	     struct ttm_bo_lru_cursor *curs, struct ttm_resource_manager *man,
+	     struct ttm_operation_ctx *ctx);
+static inline void *
+class_ttm_bo_lru_cursor_lock_ptr(class_ttm_bo_lru_cursor_t *_T)
+{ return *_T; }
+#define class_ttm_bo_lru_cursor_is_conditional false
+
+/**
+ * ttm_bo_lru_for_each_reserved_guarded() - Iterate over buffer objects owning
+ * resources on LRU lists.
+ * @_cursor: struct ttm_bo_lru_cursor to use for the iteration.
+ * @_man: The resource manager whose LRU lists to iterate over.
+ * @_ctx: The struct ttm_operation_context to govern the @_bo locking.
+ * @_bo: The struct ttm_buffer_object pointer pointing to the buffer object
+ * for the current iteration.
+ *
+ * Iterate over all resources of @_man and for each resource, attempt to
+ * reference and lock (using the locking mode detailed in @_ctx) the buffer
+ * object it points to. If successful, assign @_bo to the address of the
+ * buffer object and update @_cursor. The iteration is guarded in the
+ * sense that @_cursor will be initialized before looping start and cleaned
+ * up at looping termination, even if terminated prematurely by, for
+ * example a return or break statement. Exiting the loop will also unlock
+ * (if needed) and unreference @_bo.
+ */
+#define ttm_bo_lru_for_each_reserved_guarded(_cursor, _man, _ctx, _bo)	\
+	scoped_guard(ttm_bo_lru_cursor, _cursor, _man, _ctx)		\
+		for ((_bo) = ttm_bo_lru_cursor_first(_cursor); (_bo);	\
+		     (_bo) = ttm_bo_lru_cursor_next(_cursor))
+
 #endif
-- 
2.47.1


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

* [PATCH v15 7/9] drm/ttm: Add helpers for shrinking
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (5 preceding siblings ...)
  2024-12-17 14:58 ` [PATCH v15 6/9] drm/ttm: Add a macro to perform LRU iteration Thomas Hellström
@ 2024-12-17 14:58 ` Thomas Hellström
  2024-12-17 14:58 ` [PATCH v15 8/9] drm/xe: Add a shrinker for xe bos Thomas Hellström
                   ` (10 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Thomas Hellström @ 2024-12-17 14:58 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Matthew Brost, Somalapuram Amaranath,
	Christian König, Paulo Zanoni, Simona Vetter, dri-devel

Add a number of helpers for shrinking that access core TTM and
core MM functionality in a way that make them unsuitable for
driver open-coding.

v11:
- New patch (split off from previous) and additional helpers.
v13:
- Adapt to ttm_backup interface change.
- Take resource off LRU when backed up.

Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com> #v11
---
 drivers/gpu/drm/ttm/ttm_bo_util.c | 107 +++++++++++++++++++++++++++++-
 drivers/gpu/drm/ttm/ttm_tt.c      |  29 ++++++++
 include/drm/ttm/ttm_bo.h          |  21 ++++++
 include/drm/ttm/ttm_tt.h          |   2 +
 4 files changed, 158 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 0cac02a9764c..15cab9bda17f 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -28,7 +28,7 @@
 /*
  * Authors: Thomas Hellstrom <thellstrom-at-vmware-dot-com>
  */
-
+#include <linux/swap.h>
 #include <linux/vmalloc.h>
 
 #include <drm/ttm/ttm_bo.h>
@@ -1052,3 +1052,108 @@ struct ttm_buffer_object *ttm_bo_lru_cursor_first(struct ttm_bo_lru_cursor *curs
 	return bo ? bo : ttm_bo_lru_cursor_next(curs);
 }
 EXPORT_SYMBOL(ttm_bo_lru_cursor_first);
+
+/**
+ * ttm_bo_shrink() - Helper to shrink a ttm buffer object.
+ * @ctx: The struct ttm_operation_ctx used for the shrinking operation.
+ * @bo: The buffer object.
+ * @flags: Flags governing the shrinking behaviour.
+ *
+ * The function uses the ttm_tt_back_up functionality to back up or
+ * purge a struct ttm_tt. If the bo is not in system, it's first
+ * moved there.
+ *
+ * Return: The number of pages shrunken or purged, or
+ * negative error code on failure.
+ */
+long ttm_bo_shrink(struct ttm_operation_ctx *ctx, struct ttm_buffer_object *bo,
+		   const struct ttm_bo_shrink_flags flags)
+{
+	static const struct ttm_place sys_placement_flags = {
+		.fpfn = 0,
+		.lpfn = 0,
+		.mem_type = TTM_PL_SYSTEM,
+		.flags = 0,
+	};
+	static struct ttm_placement sys_placement = {
+		.num_placement = 1,
+		.placement = &sys_placement_flags,
+	};
+	struct ttm_tt *tt = bo->ttm;
+	long lret;
+
+	dma_resv_assert_held(bo->base.resv);
+
+	if (flags.allow_move && bo->resource->mem_type != TTM_PL_SYSTEM) {
+		int ret = ttm_bo_validate(bo, &sys_placement, ctx);
+
+		/* Consider -ENOMEM and -ENOSPC non-fatal. */
+		if (ret) {
+			if (ret == -ENOMEM || ret == -ENOSPC)
+				ret = -EBUSY;
+			return ret;
+		}
+	}
+
+	ttm_bo_unmap_virtual(bo);
+	lret = ttm_bo_wait_ctx(bo, ctx);
+	if (lret < 0)
+		return lret;
+
+	if (bo->bulk_move) {
+		spin_lock(&bo->bdev->lru_lock);
+		ttm_resource_del_bulk_move(bo->resource, bo);
+		spin_unlock(&bo->bdev->lru_lock);
+	}
+
+	lret = ttm_tt_backup(bo->bdev, tt, (struct ttm_backup_flags)
+			     {.purge = flags.purge,
+			      .writeback = flags.writeback});
+
+	if (lret <= 0 && bo->bulk_move) {
+		spin_lock(&bo->bdev->lru_lock);
+		ttm_resource_add_bulk_move(bo->resource, bo);
+		spin_unlock(&bo->bdev->lru_lock);
+	}
+
+	if (lret < 0 && lret != -EINTR)
+		return -EBUSY;
+
+	return lret;
+}
+EXPORT_SYMBOL(ttm_bo_shrink);
+
+/**
+ * ttm_bo_shrink_suitable() - Whether a bo is suitable for shinking
+ * @ctx: The struct ttm_operation_ctx governing the shrinking.
+ * @bo: The candidate for shrinking.
+ *
+ * Check whether the object, given the information available to TTM,
+ * is suitable for shinking, This function can and should be used
+ * before attempting to shrink an object.
+ *
+ * Return: true if suitable. false if not.
+ */
+bool ttm_bo_shrink_suitable(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx)
+{
+	return bo->ttm && ttm_tt_is_populated(bo->ttm) && !bo->pin_count &&
+		(!ctx->no_wait_gpu ||
+		 dma_resv_test_signaled(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP));
+}
+EXPORT_SYMBOL(ttm_bo_shrink_suitable);
+
+/**
+ * ttm_bo_shrink_avoid_wait() - Whether to avoid waiting for GPU
+ * during shrinking
+ *
+ * In some situations, like direct reclaim, waiting (in particular gpu waiting)
+ * should be avoided since it may stall a system that could otherwise make progress
+ * shrinking something else less time consuming.
+ *
+ * Return: true if gpu waiting should be avoided, false if not.
+ */
+bool ttm_bo_shrink_avoid_wait(void)
+{
+	return !current_is_kswapd();
+}
+EXPORT_SYMBOL(ttm_bo_shrink_avoid_wait);
diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
index 00b7c28f2329..df0aa6c4b8b8 100644
--- a/drivers/gpu/drm/ttm/ttm_tt.c
+++ b/drivers/gpu/drm/ttm/ttm_tt.c
@@ -531,3 +531,32 @@ unsigned long ttm_tt_pages_limit(void)
 	return ttm_pages_limit;
 }
 EXPORT_SYMBOL(ttm_tt_pages_limit);
+
+/**
+ * ttm_tt_setup_backup() - Allocate and assign a backup structure for a ttm_tt
+ * @tt: The ttm_tt for wich to allocate and assign a backup structure.
+ *
+ * Assign a backup structure to be used for tt backup. This should
+ * typically be done at bo creation, to avoid allocations at shrinking
+ * time.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+int ttm_tt_setup_backup(struct ttm_tt *tt)
+{
+	struct ttm_backup *backup =
+		ttm_backup_shmem_create(((loff_t)tt->num_pages) << PAGE_SHIFT);
+
+	if (WARN_ON_ONCE(!(tt->page_flags & TTM_TT_FLAG_EXTERNAL_MAPPABLE)))
+		return -EINVAL;
+
+	if (IS_ERR(backup))
+		return PTR_ERR(backup);
+
+	if (tt->backup)
+		ttm_backup_fini(tt->backup);
+
+	tt->backup = backup;
+	return 0;
+}
+EXPORT_SYMBOL(ttm_tt_setup_backup);
diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
index 1509268849c0..903cd1030110 100644
--- a/include/drm/ttm/ttm_bo.h
+++ b/include/drm/ttm/ttm_bo.h
@@ -225,6 +225,27 @@ struct ttm_lru_walk {
 s64 ttm_lru_walk_for_evict(struct ttm_lru_walk *walk, struct ttm_device *bdev,
 			   struct ttm_resource_manager *man, s64 target);
 
+/**
+ * struct ttm_bo_shrink_flags - flags to govern the bo shrinking behaviour
+ * @purge: Purge the content rather than backing it up.
+ * @writeback: Attempt to immediately write content to swap space.
+ * @allow_move: Allow moving to system before shrinking. This is typically
+ * not desired for zombie- or ghost objects (with zombie object meaning
+ * objects with a zero gem object refcount)
+ */
+struct ttm_bo_shrink_flags {
+	u32 purge : 1;
+	u32 writeback : 1;
+	u32 allow_move : 1;
+};
+
+long ttm_bo_shrink(struct ttm_operation_ctx *ctx, struct ttm_buffer_object *bo,
+		   const struct ttm_bo_shrink_flags flags);
+
+bool ttm_bo_shrink_suitable(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx);
+
+bool ttm_bo_shrink_avoid_wait(void);
+
 /**
  * ttm_bo_get - reference a struct ttm_buffer_object
  *
diff --git a/include/drm/ttm/ttm_tt.h b/include/drm/ttm/ttm_tt.h
index c736c01ac2ca..13cf47f3322f 100644
--- a/include/drm/ttm/ttm_tt.h
+++ b/include/drm/ttm/ttm_tt.h
@@ -298,6 +298,8 @@ long ttm_tt_backup(struct ttm_device *bdev, struct ttm_tt *tt,
 int ttm_tt_restore(struct ttm_device *bdev, struct ttm_tt *tt,
 		   const struct ttm_operation_ctx *ctx);
 
+int ttm_tt_setup_backup(struct ttm_tt *tt);
+
 #if IS_ENABLED(CONFIG_AGP)
 #include <linux/agp_backend.h>
 
-- 
2.47.1


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

* [PATCH v15 8/9] drm/xe: Add a shrinker for xe bos
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (6 preceding siblings ...)
  2024-12-17 14:58 ` [PATCH v15 7/9] drm/ttm: Add helpers for shrinking Thomas Hellström
@ 2024-12-17 14:58 ` Thomas Hellström
  2024-12-17 14:58 ` [PATCH v15 9/9] drm/xe: Increase the XE_PL_TT watermark Thomas Hellström
                   ` (9 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Thomas Hellström @ 2024-12-17 14:58 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Christian König,
	Somalapuram Amaranath, Matthew Brost, dri-devel, Paulo Zanoni,
	Simona Vetter

Rather than relying on the TTM watermark accounting add a shrinker
for xe_bos in TT or system memory.

Leverage the newly added TTM per-page shrinking and shmem backup
support.

Although xe doesn't fully support WONTNEED (purgeable) bos yet,
introduce and add shrinker support for purgeable ttm_tts.

v2:
- Cleanups bugfixes and a KUNIT shrinker test.
- Add writeback support, and activate if kswapd.
v3:
- Move the try_shrink() helper to core TTM.
- Minor cleanups.
v4:
- Add runtime pm for the shrinker. Shrinking may require an active
  device for CCS metadata copying.
v5:
- Separately purge ghost- and zombie objects in the shrinker.
- Fix a format specifier - type inconsistency. (Kernel test robot).
v7:
- s/long/s64/ (Christian König)
- s/sofar/progress/ (Matt Brost)
v8:
- Rebase on Xe KUNIT update.
- Add content verifying to the shrinker kunit test.
- Split out TTM changes to a separate patch.
- Get rid of multiple bool arguments for clarity (Matt Brost)
- Avoid an error pointer dereference (Matt Brost)
- Avoid an integer overflow (Matt Auld)
- Address misc review comments by Matt Brost.
v9:
- Fix a compliation error.
- Rebase.
v10:
- Update to new LRU walk interface.
- Rework ghost-, zombie and purged object shrinking.
- Rebase.
v11:
- Use additional TTM helpers.
- Honor __GFP_FS and __GFP_IO
- Rebase.
v13:
- Use ttm_tt_setup_backup().
v14:
- Don't set up backup on imported bos.
v15:
- Rebase on backup interface changes.

Cc: Christian König <christian.koenig@amd.com>
Cc: Somalapuram Amaranath <Amaranath.Somalapuram@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: Matthew Brost <matthew.brost@intel.com>
---
 drivers/gpu/drm/xe/Makefile          |   1 +
 drivers/gpu/drm/xe/tests/xe_bo.c     |   6 +-
 drivers/gpu/drm/xe/xe_bo.c           | 202 +++++++++++++++++++--
 drivers/gpu/drm/xe/xe_bo.h           |  36 ++++
 drivers/gpu/drm/xe/xe_device.c       |   8 +
 drivers/gpu/drm/xe/xe_device_types.h |   2 +
 drivers/gpu/drm/xe/xe_shrinker.c     | 258 +++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_shrinker.h     |  18 ++
 8 files changed, 513 insertions(+), 18 deletions(-)
 create mode 100644 drivers/gpu/drm/xe/xe_shrinker.c
 create mode 100644 drivers/gpu/drm/xe/xe_shrinker.h

diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 5c97ad6ed738..45cdaab71126 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -94,6 +94,7 @@ xe-y += xe_bb.o \
 	xe_ring_ops.o \
 	xe_sa.o \
 	xe_sched_job.o \
+	xe_shrinker.o \
 	xe_step.o \
 	xe_sync.o \
 	xe_tile.o \
diff --git a/drivers/gpu/drm/xe/tests/xe_bo.c b/drivers/gpu/drm/xe/tests/xe_bo.c
index c9ec7a313c6b..a61da9ce9ab3 100644
--- a/drivers/gpu/drm/xe/tests/xe_bo.c
+++ b/drivers/gpu/drm/xe/tests/xe_bo.c
@@ -515,8 +515,13 @@ static int shrink_test_run_device(struct xe_device *xe)
 		 * other way around, they may not be subject to swapping...
 		 */
 		if (alloced < purgeable) {
+			xe_ttm_tt_account_subtract(&xe_tt->ttm);
 			xe_tt->purgeable = true;
+			xe_ttm_tt_account_add(&xe_tt->ttm);
 			bo->ttm.priority = 0;
+			spin_lock(&bo->ttm.bdev->lru_lock);
+			ttm_bo_move_to_lru_tail(&bo->ttm);
+			spin_unlock(&bo->ttm.bdev->lru_lock);
 		} else {
 			int ret = shrink_test_fill_random(bo, &prng, link);
 
@@ -571,7 +576,6 @@ static int shrink_test_run_device(struct xe_device *xe)
 				if (ret == -EINTR)
 					intr = true;
 			} while (ret == -EINTR && !signal_pending(current));
-
 			if (!ret && !purgeable)
 				failed = shrink_test_verify(test, bo, count, &prng, link);
 
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index e6c896ad5602..ad5496530079 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -10,6 +10,7 @@
 #include <drm/drm_drv.h>
 #include <drm/drm_gem_ttm_helper.h>
 #include <drm/drm_managed.h>
+#include <drm/ttm/ttm_backup.h>
 #include <drm/ttm/ttm_device.h>
 #include <drm/ttm/ttm_placement.h>
 #include <drm/ttm/ttm_tt.h>
@@ -25,6 +26,7 @@
 #include "xe_pm.h"
 #include "xe_preempt_fence.h"
 #include "xe_res_cursor.h"
+#include "xe_shrinker.h"
 #include "xe_trace_bo.h"
 #include "xe_ttm_stolen_mgr.h"
 #include "xe_vm.h"
@@ -281,9 +283,11 @@ static void xe_evict_flags(struct ttm_buffer_object *tbo,
 	}
 }
 
+/* struct xe_ttm_tt - Subclassed ttm_tt for xe */
 struct xe_ttm_tt {
 	struct ttm_tt ttm;
-	struct device *dev;
+	/** @xe - The xe device */
+	struct xe_device *xe;
 	struct sg_table sgt;
 	struct sg_table *sg;
 	/** @purgeable: Whether the content of the pages of @ttm is purgeable. */
@@ -296,7 +300,8 @@ static int xe_tt_map_sg(struct ttm_tt *tt)
 	unsigned long num_pages = tt->num_pages;
 	int ret;
 
-	XE_WARN_ON(tt->page_flags & TTM_TT_FLAG_EXTERNAL);
+	XE_WARN_ON((tt->page_flags & TTM_TT_FLAG_EXTERNAL) &&
+		   !(tt->page_flags & TTM_TT_FLAG_EXTERNAL_MAPPABLE));
 
 	if (xe_tt->sg)
 		return 0;
@@ -304,13 +309,13 @@ static int xe_tt_map_sg(struct ttm_tt *tt)
 	ret = sg_alloc_table_from_pages_segment(&xe_tt->sgt, tt->pages,
 						num_pages, 0,
 						(u64)num_pages << PAGE_SHIFT,
-						xe_sg_segment_size(xe_tt->dev),
+						xe_sg_segment_size(xe_tt->xe->drm.dev),
 						GFP_KERNEL);
 	if (ret)
 		return ret;
 
 	xe_tt->sg = &xe_tt->sgt;
-	ret = dma_map_sgtable(xe_tt->dev, xe_tt->sg, DMA_BIDIRECTIONAL,
+	ret = dma_map_sgtable(xe_tt->xe->drm.dev, xe_tt->sg, DMA_BIDIRECTIONAL,
 			      DMA_ATTR_SKIP_CPU_SYNC);
 	if (ret) {
 		sg_free_table(xe_tt->sg);
@@ -326,7 +331,7 @@ static void xe_tt_unmap_sg(struct ttm_tt *tt)
 	struct xe_ttm_tt *xe_tt = container_of(tt, struct xe_ttm_tt, ttm);
 
 	if (xe_tt->sg) {
-		dma_unmap_sgtable(xe_tt->dev, xe_tt->sg,
+		dma_unmap_sgtable(xe_tt->xe->drm.dev, xe_tt->sg,
 				  DMA_BIDIRECTIONAL, 0);
 		sg_free_table(xe_tt->sg);
 		xe_tt->sg = NULL;
@@ -341,21 +346,47 @@ struct sg_table *xe_bo_sg(struct xe_bo *bo)
 	return xe_tt->sg;
 }
 
+/*
+ * Account ttm pages against the device shrinker's shrinkable and
+ * purgeable counts.
+ */
+static void xe_ttm_tt_account_add(struct ttm_tt *tt)
+{
+	struct xe_ttm_tt *xe_tt = container_of(tt, struct xe_ttm_tt, ttm);
+
+	if (xe_tt->purgeable)
+		xe_shrinker_mod_pages(xe_tt->xe->mem.shrinker, 0, tt->num_pages);
+	else
+		xe_shrinker_mod_pages(xe_tt->xe->mem.shrinker, tt->num_pages, 0);
+}
+
+static void xe_ttm_tt_account_subtract(struct ttm_tt *tt)
+{
+	struct xe_ttm_tt *xe_tt = container_of(tt, struct xe_ttm_tt, ttm);
+
+	if (xe_tt->purgeable)
+		xe_shrinker_mod_pages(xe_tt->xe->mem.shrinker, 0, -(long)tt->num_pages);
+	else
+		xe_shrinker_mod_pages(xe_tt->xe->mem.shrinker, -(long)tt->num_pages, 0);
+}
+
 static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo,
 				       u32 page_flags)
 {
 	struct xe_bo *bo = ttm_to_xe_bo(ttm_bo);
 	struct xe_device *xe = xe_bo_device(bo);
-	struct xe_ttm_tt *tt;
+	struct xe_ttm_tt *xe_tt;
+	struct ttm_tt *tt;
 	unsigned long extra_pages;
 	enum ttm_caching caching = ttm_cached;
 	int err;
 
-	tt = kzalloc(sizeof(*tt), GFP_KERNEL);
-	if (!tt)
+	xe_tt = kzalloc(sizeof(*xe_tt), GFP_KERNEL);
+	if (!xe_tt)
 		return NULL;
 
-	tt->dev = xe->drm.dev;
+	tt = &xe_tt->ttm;
+	xe_tt->xe = xe;
 
 	extra_pages = 0;
 	if (xe_bo_needs_ccs_pages(bo))
@@ -401,42 +432,66 @@ static struct ttm_tt *xe_ttm_tt_create(struct ttm_buffer_object *ttm_bo,
 		caching = ttm_uncached;
 	}
 
-	err = ttm_tt_init(&tt->ttm, &bo->ttm, page_flags, caching, extra_pages);
+	if (ttm_bo->type != ttm_bo_type_sg)
+		page_flags |= TTM_TT_FLAG_EXTERNAL | TTM_TT_FLAG_EXTERNAL_MAPPABLE;
+
+	err = ttm_tt_init(tt, &bo->ttm, page_flags, caching, extra_pages);
 	if (err) {
-		kfree(tt);
+		kfree(xe_tt);
 		return NULL;
 	}
 
-	return &tt->ttm;
+	if (ttm_bo->type != ttm_bo_type_sg) {
+		err = ttm_tt_setup_backup(tt);
+		if (err) {
+			ttm_tt_fini(tt);
+			kfree(xe_tt);
+			return NULL;
+		}
+	}
+
+	return tt;
 }
 
 static int xe_ttm_tt_populate(struct ttm_device *ttm_dev, struct ttm_tt *tt,
 			      struct ttm_operation_ctx *ctx)
 {
+	struct xe_ttm_tt *xe_tt = container_of(tt, struct xe_ttm_tt, ttm);
 	int err;
 
 	/*
 	 * dma-bufs are not populated with pages, and the dma-
 	 * addresses are set up when moved to XE_PL_TT.
 	 */
-	if (tt->page_flags & TTM_TT_FLAG_EXTERNAL)
+	if ((tt->page_flags & TTM_TT_FLAG_EXTERNAL) &&
+	    !(tt->page_flags & TTM_TT_FLAG_EXTERNAL_MAPPABLE))
 		return 0;
 
-	err = ttm_pool_alloc(&ttm_dev->pool, tt, ctx);
+	if (ttm_tt_is_backed_up(tt) && !xe_tt->purgeable) {
+		err = ttm_tt_restore(ttm_dev, tt, ctx);
+	} else {
+		ttm_tt_clear_backed_up(tt);
+		err = ttm_pool_alloc(&ttm_dev->pool, tt, ctx);
+	}
 	if (err)
 		return err;
 
-	return err;
+	xe_tt->purgeable = false;
+	xe_ttm_tt_account_add(tt);
+
+	return 0;
 }
 
 static void xe_ttm_tt_unpopulate(struct ttm_device *ttm_dev, struct ttm_tt *tt)
 {
-	if (tt->page_flags & TTM_TT_FLAG_EXTERNAL)
+	if ((tt->page_flags & TTM_TT_FLAG_EXTERNAL) &&
+	    !(tt->page_flags & TTM_TT_FLAG_EXTERNAL_MAPPABLE))
 		return;
 
 	xe_tt_unmap_sg(tt);
 
-	return ttm_pool_free(&ttm_dev->pool, tt);
+	ttm_pool_free(&ttm_dev->pool, tt);
+	xe_ttm_tt_account_subtract(tt);
 }
 
 static void xe_ttm_tt_destroy(struct ttm_device *ttm_dev, struct ttm_tt *tt)
@@ -871,6 +926,111 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
 	return ret;
 }
 
+static long xe_bo_shrink_purge(struct ttm_operation_ctx *ctx,
+			       struct ttm_buffer_object *bo,
+			       unsigned long *scanned)
+{
+	long lret;
+
+	/* Fake move to system, without copying data. */
+	if (bo->resource->mem_type != XE_PL_SYSTEM) {
+		struct ttm_resource *new_resource;
+
+		lret = ttm_bo_wait_ctx(bo, ctx);
+		if (lret)
+			return lret;
+
+		lret = ttm_bo_mem_space(bo, &sys_placement, &new_resource, ctx);
+		if (lret)
+			return lret;
+
+		xe_tt_unmap_sg(bo->ttm);
+		ttm_bo_move_null(bo, new_resource);
+	}
+
+	*scanned += bo->ttm->num_pages;
+	lret = ttm_bo_shrink(ctx, bo, (struct ttm_bo_shrink_flags)
+			     {.purge = true,
+			      .writeback = false,
+			      .allow_move = false});
+
+	if (lret > 0)
+		xe_ttm_tt_account_subtract(bo->ttm);
+
+	return lret;
+}
+
+/**
+ * xe_bo_shrink() - Try to shrink an xe bo.
+ * @ctx: The struct ttm_operation_ctx used for shrinking.
+ * @bo: The TTM buffer object whose pages to shrink.
+ * @flags: Flags governing the shrink behaviour.
+ * @scanned: Pointer to a counter of the number of pages
+ * attempted to shrink.
+ *
+ * Try to shrink- or purge a bo, and if it succeeds, unmap dma.
+ * Note that we need to be able to handle also non xe bos
+ * (ghost bos), but only if the struct ttm_tt is embedded in
+ * a struct xe_ttm_tt. When the function attempts to shrink
+ * the pages of a buffer object, The value pointed to by @scanned
+ * is updated.
+ *
+ * Return: The number of pages shrunken or purged, or negative error
+ * code on failure.
+ */
+long xe_bo_shrink(struct ttm_operation_ctx *ctx, struct ttm_buffer_object *bo,
+		  const struct xe_bo_shrink_flags flags,
+		  unsigned long *scanned)
+{
+	struct ttm_tt *tt = bo->ttm;
+	struct xe_ttm_tt *xe_tt = container_of(tt, struct xe_ttm_tt, ttm);
+	struct ttm_place place = {.mem_type = bo->resource->mem_type};
+	struct xe_bo *xe_bo = ttm_to_xe_bo(bo);
+	struct xe_device *xe = xe_tt->xe;
+	bool needs_rpm;
+	long lret = 0L;
+
+	if (!(tt->page_flags & TTM_TT_FLAG_EXTERNAL_MAPPABLE) ||
+	    (flags.purge && !xe_tt->purgeable))
+		return -EBUSY;
+
+	if (!ttm_bo_eviction_valuable(bo, &place))
+		return -EBUSY;
+
+	if (!xe_bo_is_xe_bo(bo) || !xe_bo_get_unless_zero(xe_bo))
+		return xe_bo_shrink_purge(ctx, bo, scanned);
+
+	if (xe_tt->purgeable) {
+		if (bo->resource->mem_type != XE_PL_SYSTEM)
+			lret = xe_bo_move_notify(xe_bo, ctx);
+		if (!lret)
+			lret = xe_bo_shrink_purge(ctx, bo, scanned);
+		goto out_unref;
+	}
+
+	/* System CCS needs gpu copy when moving PL_TT -> PL_SYSTEM */
+	needs_rpm = (!IS_DGFX(xe) && bo->resource->mem_type != XE_PL_SYSTEM &&
+		     xe_bo_needs_ccs_pages(xe_bo));
+	if (needs_rpm && !xe_pm_runtime_get_if_active(xe))
+		goto out_unref;
+
+	*scanned += tt->num_pages;
+	lret = ttm_bo_shrink(ctx, bo, (struct ttm_bo_shrink_flags)
+			     {.purge = false,
+			      .writeback = flags.writeback,
+			      .allow_move = true});
+	if (needs_rpm)
+		xe_pm_runtime_put(xe);
+
+	if (lret > 0)
+		xe_ttm_tt_account_subtract(tt);
+
+out_unref:
+	xe_bo_put(xe_bo);
+
+	return lret;
+}
+
 /**
  * xe_bo_evict_pinned() - Evict a pinned VRAM object to system memory
  * @bo: The buffer object to move.
@@ -1885,6 +2045,8 @@ int xe_bo_pin_external(struct xe_bo *bo)
 	}
 
 	ttm_bo_pin(&bo->ttm);
+	if (bo->ttm.ttm && ttm_tt_is_populated(bo->ttm.ttm))
+		xe_ttm_tt_account_subtract(bo->ttm.ttm);
 
 	/*
 	 * FIXME: If we always use the reserve / unreserve functions for locking
@@ -1944,6 +2106,8 @@ int xe_bo_pin(struct xe_bo *bo)
 	}
 
 	ttm_bo_pin(&bo->ttm);
+	if (bo->ttm.ttm && ttm_tt_is_populated(bo->ttm.ttm))
+		xe_ttm_tt_account_subtract(bo->ttm.ttm);
 
 	/*
 	 * FIXME: If we always use the reserve / unreserve functions for locking
@@ -1978,6 +2142,8 @@ void xe_bo_unpin_external(struct xe_bo *bo)
 	spin_unlock(&xe->pinned.lock);
 
 	ttm_bo_unpin(&bo->ttm);
+	if (bo->ttm.ttm && ttm_tt_is_populated(bo->ttm.ttm))
+		xe_ttm_tt_account_add(bo->ttm.ttm);
 
 	/*
 	 * FIXME: If we always use the reserve / unreserve functions for locking
@@ -2001,6 +2167,8 @@ void xe_bo_unpin(struct xe_bo *bo)
 		spin_unlock(&xe->pinned.lock);
 	}
 	ttm_bo_unpin(&bo->ttm);
+	if (bo->ttm.ttm && ttm_tt_is_populated(bo->ttm.ttm))
+		xe_ttm_tt_account_add(bo->ttm.ttm);
 }
 
 /**
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index d9386ab03140..f39a218a73d2 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -146,6 +146,28 @@ static inline struct xe_bo *xe_bo_get(struct xe_bo *bo)
 
 void xe_bo_put(struct xe_bo *bo);
 
+/*
+ * xe_bo_get_unless_zero() - Conditionally obtain a GEM object refcount on an
+ * xe bo
+ * @bo: The bo for which we want to obtain a refcount.
+ *
+ * There is a short window between where the bo's GEM object refcount reaches
+ * zero and where we put the final ttm_bo reference. Code in the eviction- and
+ * shrinking path should therefore attempt to grab a gem object reference before
+ * trying to use members outside of the base class ttm object. This function is
+ * intended for that purpose. On successful return, this function must be paired
+ * with an xe_bo_put().
+ *
+ * Return: @bo on success, NULL on failure.
+ */
+static inline __must_check struct xe_bo *xe_bo_get_unless_zero(struct xe_bo *bo)
+{
+	if (!bo || !kref_get_unless_zero(&bo->ttm.base.refcount))
+		return NULL;
+
+	return bo;
+}
+
 static inline void __xe_bo_unset_bulk_move(struct xe_bo *bo)
 {
 	if (bo)
@@ -341,6 +363,20 @@ static inline unsigned int xe_sg_segment_size(struct device *dev)
 	return round_down(max / 2, PAGE_SIZE);
 }
 
+/**
+ * struct xe_bo_shrink_flags - flags governing the shrink behaviour.
+ * @purge: Only purging allowed. Don't shrink if bo not purgeable.
+ * @writeback: Attempt to immediately move content to swap.
+ */
+struct xe_bo_shrink_flags {
+	u32 purge : 1;
+	u32 writeback : 1;
+};
+
+long xe_bo_shrink(struct ttm_operation_ctx *ctx, struct ttm_buffer_object *bo,
+		  const struct xe_bo_shrink_flags flags,
+		  unsigned long *scanned);
+
 #if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
 /**
  * xe_bo_is_mem_type - Whether the bo currently resides in the given
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index bf36e4fb4679..e1475b75dbfd 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -50,6 +50,7 @@
 #include "xe_pcode.h"
 #include "xe_pm.h"
 #include "xe_query.h"
+#include "xe_shrinker.h"
 #include "xe_sriov.h"
 #include "xe_tile.h"
 #include "xe_ttm_stolen_mgr.h"
@@ -289,6 +290,9 @@ static void xe_device_destroy(struct drm_device *dev, void *dummy)
 	if (xe->unordered_wq)
 		destroy_workqueue(xe->unordered_wq);
 
+	if (!IS_ERR_OR_NULL(xe->mem.shrinker))
+		xe_shrinker_destroy(xe->mem.shrinker);
+
 	if (xe->destroy_wq)
 		destroy_workqueue(xe->destroy_wq);
 
@@ -321,6 +325,10 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
 	if (err)
 		goto err;
 
+	xe->mem.shrinker = xe_shrinker_create(xe);
+	if (IS_ERR(xe->mem.shrinker))
+		return ERR_CAST(xe->mem.shrinker);
+
 	xe->info.devid = pdev->device;
 	xe->info.revid = pdev->revision;
 	xe->info.force_execlist = xe_modparam.force_execlist;
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 8a7b15972413..20161344709d 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -375,6 +375,8 @@ struct xe_device {
 		struct xe_mem_region vram;
 		/** @mem.sys_mgr: system TTM manager */
 		struct ttm_resource_manager sys_mgr;
+		/** @mem.sys_mgr: system memory shrinker. */
+		struct xe_shrinker *shrinker;
 	} mem;
 
 	/** @sriov: device level virtualization data */
diff --git a/drivers/gpu/drm/xe/xe_shrinker.c b/drivers/gpu/drm/xe/xe_shrinker.c
new file mode 100644
index 000000000000..8184390f9c7b
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_shrinker.c
@@ -0,0 +1,258 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#include <linux/shrinker.h>
+
+#include <drm/ttm/ttm_backup.h>
+#include <drm/ttm/ttm_bo.h>
+#include <drm/ttm/ttm_tt.h>
+
+#include "xe_bo.h"
+#include "xe_pm.h"
+#include "xe_shrinker.h"
+
+/**
+ * struct xe_shrinker - per-device shrinker
+ * @xe: Back pointer to the device.
+ * @lock: Lock protecting accounting.
+ * @shrinkable_pages: Number of pages that are currently shrinkable.
+ * @purgeable_pages: Number of pages that are currently purgeable.
+ * @shrink: Pointer to the mm shrinker.
+ * @pm_worker: Worker to wake up the device if required.
+ */
+struct xe_shrinker {
+	struct xe_device *xe;
+	rwlock_t lock;
+	long shrinkable_pages;
+	long purgeable_pages;
+	struct shrinker *shrink;
+	struct work_struct pm_worker;
+};
+
+static struct xe_shrinker *to_xe_shrinker(struct shrinker *shrink)
+{
+	return shrink->private_data;
+}
+
+/**
+ * xe_shrinker_mod_pages() - Modify shrinker page accounting
+ * @shrinker: Pointer to the struct xe_shrinker.
+ * @shrinkable: Shrinkable pages delta. May be negative.
+ * @purgeable: Purgeable page delta. May be negative.
+ *
+ * Modifies the shrinkable and purgeable pages accounting.
+ */
+void
+xe_shrinker_mod_pages(struct xe_shrinker *shrinker, long shrinkable, long purgeable)
+{
+	write_lock(&shrinker->lock);
+	shrinker->shrinkable_pages += shrinkable;
+	shrinker->purgeable_pages += purgeable;
+	write_unlock(&shrinker->lock);
+}
+
+static s64 xe_shrinker_walk(struct xe_device *xe,
+			    struct ttm_operation_ctx *ctx,
+			    const struct xe_bo_shrink_flags flags,
+			    unsigned long to_scan, unsigned long *scanned)
+{
+	unsigned int mem_type;
+	s64 freed = 0, lret;
+
+	for (mem_type = XE_PL_SYSTEM; mem_type <= XE_PL_TT; ++mem_type) {
+		struct ttm_resource_manager *man = ttm_manager_type(&xe->ttm, mem_type);
+		struct ttm_bo_lru_cursor curs;
+		struct ttm_buffer_object *ttm_bo;
+
+		if (!man || !man->use_tt)
+			continue;
+
+		ttm_bo_lru_for_each_reserved_guarded(&curs, man, ctx, ttm_bo) {
+			if (!ttm_bo_shrink_suitable(ttm_bo, ctx))
+				continue;
+
+			lret = xe_bo_shrink(ctx, ttm_bo, flags, scanned);
+			if (lret < 0)
+				return lret;
+
+			freed += lret;
+			if (*scanned >= to_scan)
+				break;
+		}
+	}
+
+	return freed;
+}
+
+static unsigned long
+xe_shrinker_count(struct shrinker *shrink, struct shrink_control *sc)
+{
+	struct xe_shrinker *shrinker = to_xe_shrinker(shrink);
+	unsigned long num_pages;
+	bool can_backup = !!(sc->gfp_mask & __GFP_FS);
+
+	num_pages = ttm_backup_bytes_avail() >> PAGE_SHIFT;
+	read_lock(&shrinker->lock);
+
+	if (can_backup)
+		num_pages = min_t(unsigned long, num_pages, shrinker->shrinkable_pages);
+	else
+		num_pages = 0;
+
+	num_pages += shrinker->purgeable_pages;
+	read_unlock(&shrinker->lock);
+
+	return num_pages ? num_pages : SHRINK_EMPTY;
+}
+
+/*
+ * Check if we need runtime pm, and if so try to grab a reference if
+ * already active. If grabbing a reference fails, queue a worker that
+ * does it for us outside of reclaim, but don't wait for it to complete.
+ * If bo shrinking needs an rpm reference and we don't have it (yet),
+ * that bo will be skipped anyway.
+ */
+static bool xe_shrinker_runtime_pm_get(struct xe_shrinker *shrinker, bool force,
+				       unsigned long nr_to_scan, bool can_backup)
+{
+	struct xe_device *xe = shrinker->xe;
+
+	if (IS_DGFX(xe) || !xe_device_has_flat_ccs(xe) ||
+	    !ttm_backup_bytes_avail())
+		return false;
+
+	if (!force) {
+		read_lock(&shrinker->lock);
+		force = (nr_to_scan > shrinker->purgeable_pages && can_backup);
+		read_unlock(&shrinker->lock);
+		if (!force)
+			return false;
+	}
+
+	if (!xe_pm_runtime_get_if_active(xe)) {
+		if (xe_rpm_reclaim_safe(xe) && !ttm_bo_shrink_avoid_wait()) {
+			xe_pm_runtime_get(xe);
+			return true;
+		}
+		queue_work(xe->unordered_wq, &shrinker->pm_worker);
+		return false;
+	}
+
+	return true;
+}
+
+static void xe_shrinker_runtime_pm_put(struct xe_shrinker *shrinker, bool runtime_pm)
+{
+	if (runtime_pm)
+		xe_pm_runtime_put(shrinker->xe);
+}
+
+static unsigned long xe_shrinker_scan(struct shrinker *shrink, struct shrink_control *sc)
+{
+	struct xe_shrinker *shrinker = to_xe_shrinker(shrink);
+	struct ttm_operation_ctx ctx = {
+		.interruptible = false,
+		.no_wait_gpu = ttm_bo_shrink_avoid_wait(),
+	};
+	unsigned long nr_to_scan, nr_scanned = 0, freed = 0;
+	struct xe_bo_shrink_flags shrink_flags = {
+		.purge = true,
+		/* Don't request writeback without __GFP_IO. */
+		.writeback = !ctx.no_wait_gpu && (sc->gfp_mask & __GFP_IO),
+	};
+	bool runtime_pm;
+	bool purgeable;
+	bool can_backup = !!(sc->gfp_mask & __GFP_FS);
+	s64 lret;
+
+	nr_to_scan = sc->nr_to_scan;
+
+	read_lock(&shrinker->lock);
+	purgeable = !!shrinker->purgeable_pages;
+	read_unlock(&shrinker->lock);
+
+	/* Might need runtime PM. Try to wake early if it looks like it. */
+	runtime_pm = xe_shrinker_runtime_pm_get(shrinker, false, nr_to_scan, can_backup);
+
+	if (purgeable && nr_scanned < nr_to_scan) {
+		lret = xe_shrinker_walk(shrinker->xe, &ctx, shrink_flags,
+					nr_to_scan, &nr_scanned);
+		if (lret >= 0)
+			freed += lret;
+	}
+
+	sc->nr_scanned = nr_scanned;
+	if (nr_scanned >= nr_to_scan || !can_backup)
+		goto out;
+
+	/* If we didn't wake before, try to do it now if needed. */
+	if (!runtime_pm)
+		runtime_pm = xe_shrinker_runtime_pm_get(shrinker, true, 0, can_backup);
+
+	shrink_flags.purge = false;
+	lret = xe_shrinker_walk(shrinker->xe, &ctx, shrink_flags,
+				nr_to_scan, &nr_scanned);
+	if (lret >= 0)
+		freed += lret;
+
+	sc->nr_scanned = nr_scanned;
+out:
+	xe_shrinker_runtime_pm_put(shrinker, runtime_pm);
+	return nr_scanned ? freed : SHRINK_STOP;
+}
+
+/* Wake up the device for shrinking. */
+static void xe_shrinker_pm(struct work_struct *work)
+{
+	struct xe_shrinker *shrinker =
+		container_of(work, typeof(*shrinker), pm_worker);
+
+	xe_pm_runtime_get(shrinker->xe);
+	xe_pm_runtime_put(shrinker->xe);
+}
+
+/**
+ * xe_shrinker_create() - Create an xe per-device shrinker
+ * @xe: Pointer to the xe device.
+ *
+ * Returns: A pointer to the created shrinker on success,
+ * Negative error code on failure.
+ */
+struct xe_shrinker *xe_shrinker_create(struct xe_device *xe)
+{
+	struct xe_shrinker *shrinker = kzalloc(sizeof(*shrinker), GFP_KERNEL);
+
+	if (!shrinker)
+		return ERR_PTR(-ENOMEM);
+
+	shrinker->shrink = shrinker_alloc(0, "xe system shrinker");
+	if (!shrinker->shrink) {
+		kfree(shrinker);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	INIT_WORK(&shrinker->pm_worker, xe_shrinker_pm);
+	shrinker->xe = xe;
+	rwlock_init(&shrinker->lock);
+	shrinker->shrink->count_objects = xe_shrinker_count;
+	shrinker->shrink->scan_objects = xe_shrinker_scan;
+	shrinker->shrink->private_data = shrinker;
+	shrinker_register(shrinker->shrink);
+
+	return shrinker;
+}
+
+/**
+ * xe_shrinker_destroy() - Destroy an xe per-device shrinker
+ * @shrinker: Pointer to the shrinker to destroy.
+ */
+void xe_shrinker_destroy(struct xe_shrinker *shrinker)
+{
+	xe_assert(shrinker->xe, !shrinker->shrinkable_pages);
+	xe_assert(shrinker->xe, !shrinker->purgeable_pages);
+	shrinker_free(shrinker->shrink);
+	flush_work(&shrinker->pm_worker);
+	kfree(shrinker);
+}
diff --git a/drivers/gpu/drm/xe/xe_shrinker.h b/drivers/gpu/drm/xe/xe_shrinker.h
new file mode 100644
index 000000000000..28a038f4fcbf
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_shrinker.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef _XE_SHRINKER_H_
+#define _XE_SHRINKER_H_
+
+struct xe_shrinker;
+struct xe_device;
+
+void xe_shrinker_mod_pages(struct xe_shrinker *shrinker, long shrinkable, long purgeable);
+
+struct xe_shrinker *xe_shrinker_create(struct xe_device *xe);
+
+void xe_shrinker_destroy(struct xe_shrinker *shrinker);
+
+#endif
-- 
2.47.1


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

* [PATCH v15 9/9] drm/xe: Increase the XE_PL_TT watermark
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (7 preceding siblings ...)
  2024-12-17 14:58 ` [PATCH v15 8/9] drm/xe: Add a shrinker for xe bos Thomas Hellström
@ 2024-12-17 14:58 ` Thomas Hellström
  2024-12-17 20:54 ` ✓ CI.Patch_applied: success for TTM shrinker helpers and xe buffer object shrinker (rev16) Patchwork
                   ` (8 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Thomas Hellström @ 2024-12-17 14:58 UTC (permalink / raw)
  To: intel-xe
  Cc: Thomas Hellström, Matthew Brost, Somalapuram Amaranath,
	Christian König, Paulo Zanoni, Simona Vetter, dri-devel

The XE_PL_TT watermark was set to 50% of system memory.
The idea behind that was unclear since the net effect is that
TT memory will be evicted to TTM_PL_SYSTEM memory if that
watermark is exceeded, requiring PPGTT rebinds and dma
remapping. But there is no similar watermark for TTM_PL_1SYSTEM
memory.

The TTM functionality that tries to swap out system memory to
shmem objects if a 50% limit of total system memory is reached
is orthogonal to this, and with the shrinker added, it's no
longer in effect.

Replace the 50% TTM_PL_TT limit with a 100% limit, in effect
allowing all graphics memory to be bound to the device unless it
has been swapped out by the shrinker.

Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
---
 drivers/gpu/drm/xe/xe_ttm_sys_mgr.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_ttm_sys_mgr.c b/drivers/gpu/drm/xe/xe_ttm_sys_mgr.c
index 9844a8edbfe1..d38b91872da3 100644
--- a/drivers/gpu/drm/xe/xe_ttm_sys_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_sys_mgr.c
@@ -108,9 +108,8 @@ int xe_ttm_sys_mgr_init(struct xe_device *xe)
 	u64 gtt_size;
 
 	si_meminfo(&si);
+	/* Potentially restrict amount of TT memory here. */
 	gtt_size = (u64)si.totalram * si.mem_unit;
-	/* TTM limits allocation of all TTM devices by 50% of system memory */
-	gtt_size /= 2;
 
 	man->use_tt = true;
 	man->func = &xe_ttm_sys_mgr_func;
-- 
2.47.1


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

* ✓ CI.Patch_applied: success for TTM shrinker helpers and xe buffer object shrinker (rev16)
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (8 preceding siblings ...)
  2024-12-17 14:58 ` [PATCH v15 9/9] drm/xe: Increase the XE_PL_TT watermark Thomas Hellström
@ 2024-12-17 20:54 ` Patchwork
  2024-12-17 20:55 ` ✗ CI.checkpatch: warning " Patchwork
                   ` (7 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-12-17 20:54 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

== Series Details ==

Series: TTM shrinker helpers and xe buffer object shrinker (rev16)
URL   : https://patchwork.freedesktop.org/series/131815/
State : success

== Summary ==

=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: 1984b26a25a5 drm-tip: 2024y-12m-17d-17h-28m-48s UTC integration manifest
=== git am output follows ===
Applying: drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini()
Applying: drm/ttm: Provide a shmem backup implementation
Applying: drm/ttm/pool: Restructure the pool allocation code
Applying: drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages
Applying: drm/ttm: Use fault-injection to test error paths
Applying: drm/ttm: Add a macro to perform LRU iteration
Applying: drm/ttm: Add helpers for shrinking
Applying: drm/xe: Add a shrinker for xe bos
Applying: drm/xe: Increase the XE_PL_TT watermark



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

* ✗ CI.checkpatch: warning for TTM shrinker helpers and xe buffer object shrinker (rev16)
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (9 preceding siblings ...)
  2024-12-17 20:54 ` ✓ CI.Patch_applied: success for TTM shrinker helpers and xe buffer object shrinker (rev16) Patchwork
@ 2024-12-17 20:55 ` Patchwork
  2024-12-17 20:56 ` ✓ CI.KUnit: success " Patchwork
                   ` (6 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-12-17 20:55 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

== Series Details ==

Series: TTM shrinker helpers and xe buffer object shrinker (rev16)
URL   : https://patchwork.freedesktop.org/series/131815/
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
30ab6715fc09baee6cc14cb3c89ad8858688d474
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 51c1509c74d7525876363b7a5e2d93d6d55319ab
Author: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Date:   Tue Dec 17 15:58:52 2024 +0100

    drm/xe: Increase the XE_PL_TT watermark
    
    The XE_PL_TT watermark was set to 50% of system memory.
    The idea behind that was unclear since the net effect is that
    TT memory will be evicted to TTM_PL_SYSTEM memory if that
    watermark is exceeded, requiring PPGTT rebinds and dma
    remapping. But there is no similar watermark for TTM_PL_1SYSTEM
    memory.
    
    The TTM functionality that tries to swap out system memory to
    shmem objects if a 50% limit of total system memory is reached
    is orthogonal to this, and with the shrinker added, it's no
    longer in effect.
    
    Replace the 50% TTM_PL_TT limit with a 100% limit, in effect
    allowing all graphics memory to be bound to the device unless it
    has been swapped out by the shrinker.
    
    Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Reviewed-by: Matthew Brost <matthew.brost@intel.com>
+ /mt/dim checkpatch 1984b26a25a506f3437f63fd201cec704b99336a drm-intel
469728109937 drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini()
-:155: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'cursor' - possible side-effects?
#155: FILE: include/drm/ttm/ttm_resource.h:476:
+#define ttm_resource_manager_for_each_res(cursor, res)	\
+	for (res = ttm_resource_manager_first(cursor); res;	\
 	     res = ttm_resource_manager_next(cursor))

-:155: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'res' - possible side-effects?
#155: FILE: include/drm/ttm/ttm_resource.h:476:
+#define ttm_resource_manager_for_each_res(cursor, res)	\
+	for (res = ttm_resource_manager_first(cursor); res;	\
 	     res = ttm_resource_manager_next(cursor))

total: 0 errors, 0 warnings, 2 checks, 114 lines checked
81c97b5ab14d drm/ttm: Provide a shmem backup implementation
-:56: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#56: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 289 lines checked
8eaa85135ed0 drm/ttm/pool: Restructure the pool allocation code
c2367aaed978 drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages
e66070f7d538 drm/ttm: Use fault-injection to test error paths
0d5891ed097d drm/ttm: Add a macro to perform LRU iteration
-:11: WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#11: 
https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/#ma918844aa8a6efe8768fdcda0c6590d5c93850c9

-:256: WARNING:TABSTOP: Statements should start on a tabstop
#256: FILE: include/drm/ttm/ttm_bo.h:510:
+	     if (_T) {ttm_bo_lru_cursor_fini(_T); },

-:256: ERROR:TRAILING_STATEMENTS: trailing statements should be on next line
#256: FILE: include/drm/ttm/ttm_bo.h:510:
+	     if (_T) {ttm_bo_lru_cursor_fini(_T); },

-:256: WARNING:BRACES: braces {} are not necessary for single statement blocks
#256: FILE: include/drm/ttm/ttm_bo.h:510:
+	     if (_T) {ttm_bo_lru_cursor_fini(_T); },

-:283: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#283: FILE: include/drm/ttm/ttm_bo.h:537:
+#define ttm_bo_lru_for_each_reserved_guarded(_cursor, _man, _ctx, _bo)	\
+	scoped_guard(ttm_bo_lru_cursor, _cursor, _man, _ctx)		\
+		for ((_bo) = ttm_bo_lru_cursor_first(_cursor); (_bo);	\
+		     (_bo) = ttm_bo_lru_cursor_next(_cursor))

-:283: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_cursor' - possible side-effects?
#283: FILE: include/drm/ttm/ttm_bo.h:537:
+#define ttm_bo_lru_for_each_reserved_guarded(_cursor, _man, _ctx, _bo)	\
+	scoped_guard(ttm_bo_lru_cursor, _cursor, _man, _ctx)		\
+		for ((_bo) = ttm_bo_lru_cursor_first(_cursor); (_bo);	\
+		     (_bo) = ttm_bo_lru_cursor_next(_cursor))

-:283: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_bo' - possible side-effects?
#283: FILE: include/drm/ttm/ttm_bo.h:537:
+#define ttm_bo_lru_for_each_reserved_guarded(_cursor, _man, _ctx, _bo)	\
+	scoped_guard(ttm_bo_lru_cursor, _cursor, _man, _ctx)		\
+		for ((_bo) = ttm_bo_lru_cursor_first(_cursor); (_bo);	\
+		     (_bo) = ttm_bo_lru_cursor_next(_cursor))

total: 2 errors, 3 warnings, 2 checks, 234 lines checked
8cc36a03a449 drm/ttm: Add helpers for shrinking
7f90f6944677 drm/xe: Add a shrinker for xe bos
-:548: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#548: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 711 lines checked
51c1509c74d7 drm/xe: Increase the XE_PL_TT watermark



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

* ✓ CI.KUnit: success for TTM shrinker helpers and xe buffer object shrinker (rev16)
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (10 preceding siblings ...)
  2024-12-17 20:55 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-12-17 20:56 ` Patchwork
  2024-12-17 21:14 ` ✓ CI.Build: " Patchwork
                   ` (5 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-12-17 20:56 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

== Series Details ==

Series: TTM shrinker helpers and xe buffer object shrinker (rev16)
URL   : https://patchwork.freedesktop.org/series/131815/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[20:55:21] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:55:25] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json 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)
      |      ^~~~~~~~~~~~~~~~~

[20:55:54] Starting KUnit Kernel (1/1)...
[20:55:54] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:55:54] =================== guc_dbm (7 subtests) ===================
[20:55:54] [PASSED] test_empty
[20:55:54] [PASSED] test_default
[20:55:54] ======================== test_size  ========================
[20:55:54] [PASSED] 4
[20:55:54] [PASSED] 8
[20:55:54] [PASSED] 32
[20:55:54] [PASSED] 256
[20:55:54] ==================== [PASSED] test_size ====================
[20:55:54] ======================= test_reuse  ========================
[20:55:54] [PASSED] 4
[20:55:54] [PASSED] 8
[20:55:54] [PASSED] 32
[20:55:54] [PASSED] 256
[20:55:54] =================== [PASSED] test_reuse ====================
[20:55:54] =================== test_range_overlap  ====================
[20:55:54] [PASSED] 4
[20:55:54] [PASSED] 8
[20:55:54] [PASSED] 32
[20:55:54] [PASSED] 256
[20:55:54] =============== [PASSED] test_range_overlap ================
[20:55:54] =================== test_range_compact  ====================
[20:55:54] [PASSED] 4
[20:55:54] [PASSED] 8
[20:55:54] [PASSED] 32
[20:55:54] [PASSED] 256
[20:55:54] =============== [PASSED] test_range_compact ================
[20:55:54] ==================== test_range_spare  =====================
[20:55:54] [PASSED] 4
[20:55:54] [PASSED] 8
[20:55:54] [PASSED] 32
[20:55:54] [PASSED] 256
[20:55:54] ================ [PASSED] test_range_spare =================
[20:55:54] ===================== [PASSED] guc_dbm =====================
[20:55:54] =================== guc_idm (6 subtests) ===================
[20:55:54] [PASSED] bad_init
[20:55:54] [PASSED] no_init
[20:55:54] [PASSED] init_fini
[20:55:54] [PASSED] check_used
[20:55:54] [PASSED] check_quota
[20:55:54] [PASSED] check_all
[20:55:54] ===================== [PASSED] guc_idm =====================
[20:55:54] ================== no_relay (3 subtests) ===================
[20:55:54] [PASSED] xe_drops_guc2pf_if_not_ready
[20:55:54] [PASSED] xe_drops_guc2vf_if_not_ready
[20:55:54] [PASSED] xe_rejects_send_if_not_ready
[20:55:54] ==================== [PASSED] no_relay =====================
[20:55:54] ================== pf_relay (14 subtests) ==================
[20:55:54] [PASSED] pf_rejects_guc2pf_too_short
[20:55:54] [PASSED] pf_rejects_guc2pf_too_long
[20:55:54] [PASSED] pf_rejects_guc2pf_no_payload
[20:55:54] [PASSED] pf_fails_no_payload
[20:55:54] [PASSED] pf_fails_bad_origin
[20:55:54] [PASSED] pf_fails_bad_type
[20:55:54] [PASSED] pf_txn_reports_error
[20:55:54] [PASSED] pf_txn_sends_pf2guc
[20:55:54] [PASSED] pf_sends_pf2guc
[20:55:54] [SKIPPED] pf_loopback_nop
[20:55:54] [SKIPPED] pf_loopback_echo
[20:55:54] [SKIPPED] pf_loopback_fail
[20:55:54] [SKIPPED] pf_loopback_busy
[20:55:54] [SKIPPED] pf_loopback_retry
[20:55:54] ==================== [PASSED] pf_relay =====================
[20:55:54] ================== vf_relay (3 subtests) ===================
[20:55:54] [PASSED] vf_rejects_guc2vf_too_short
[20:55:54] [PASSED] vf_rejects_guc2vf_too_long
[20:55:54] [PASSED] vf_rejects_guc2vf_no_payload
[20:55:54] ==================== [PASSED] vf_relay =====================
[20:55:54] ================= pf_service (11 subtests) =================
[20:55:54] [PASSED] pf_negotiate_any
[20:55:54] [PASSED] pf_negotiate_base_match
[20:55:54] [PASSED] pf_negotiate_base_newer
[20:55:54] [PASSED] pf_negotiate_base_next
[20:55:54] [SKIPPED] pf_negotiate_base_older
[20:55:54] [PASSED] pf_negotiate_base_prev
[20:55:54] [PASSED] pf_negotiate_latest_match
[20:55:54] [PASSED] pf_negotiate_latest_newer
[20:55:54] [PASSED] pf_negotiate_latest_next
[20:55:54] [SKIPPED] pf_negotiate_latest_older
[20:55:54] [SKIPPED] pf_negotiate_latest_prev
[20:55:54] =================== [PASSED] pf_service ====================
[20:55:54] ===================== lmtt (1 subtest) =====================
[20:55:54] ======================== test_ops  =========================
[20:55:54] [PASSED] 2-level
[20:55:54] [PASSED] multi-level
[20:55:54] ==================== [PASSED] test_ops =====================
[20:55:54] ====================== [PASSED] lmtt =======================
[20:55:54] =================== xe_mocs (2 subtests) ===================
[20:55:54] ================ xe_live_mocs_kernel_kunit  ================
[20:55:54] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[20:55:54] ================ xe_live_mocs_reset_kunit  =================
[20:55:54] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[20:55:54] ==================== [SKIPPED] xe_mocs =====================
[20:55:54] ================= xe_migrate (2 subtests) ==================
[20:55:54] ================= xe_migrate_sanity_kunit  =================
[20:55:54] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[20:55:54] ================== xe_validate_ccs_kunit  ==================
[20:55:54] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[20:55:54] =================== [SKIPPED] xe_migrate ===================
[20:55:54] ================== xe_dma_buf (1 subtest) ==================
[20:55:54] ==================== xe_dma_buf_kunit  =====================
[20:55:54] ================ [SKIPPED] xe_dma_buf_kunit ================
[20:55:54] =================== [SKIPPED] xe_dma_buf ===================
[20:55:54] ==================== xe_bo (3 subtests) ====================
[20:55:54] ================== xe_ccs_migrate_kunit  ===================
[20:55:54] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[20:55:54] ==================== xe_bo_evict_kunit  ====================
[20:55:54] =============== [SKIPPED] xe_bo_evict_kunit ================
[20:55:54] =================== xe_bo_shrink_kunit  ====================
[20:55:54] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[20:55:54] ===================== [SKIPPED] xe_bo ======================
[20:55:54] ==================== args (11 subtests) ====================
[20:55:54] [PASSED] count_args_test
[20:55:54] [PASSED] call_args_example
[20:55:54] [PASSED] call_args_test
[20:55:54] [PASSED] drop_first_arg_example
[20:55:54] [PASSED] drop_first_arg_test
[20:55:54] [PASSED] first_arg_example
[20:55:54] [PASSED] first_arg_test
[20:55:54] [PASSED] last_arg_example
[20:55:54] [PASSED] last_arg_test
[20:55:54] [PASSED] pick_arg_example
[20:55:54] [PASSED] sep_comma_examplestty: 'standard input': Inappropriate ioctl for device

[20:55:54] ====================== [PASSED] args =======================
[20:55:54] =================== xe_pci (2 subtests) ====================
[20:55:54] [PASSED] xe_gmdid_graphics_ip
[20:55:54] [PASSED] xe_gmdid_media_ip
[20:55:54] ===================== [PASSED] xe_pci ======================
[20:55:54] =================== xe_rtp (2 subtests) ====================
[20:55:54] =============== xe_rtp_process_to_sr_tests  ================
[20:55:54] [PASSED] coalesce-same-reg
[20:55:54] [PASSED] no-match-no-add
[20:55:54] [PASSED] match-or
[20:55:54] [PASSED] match-or-xfail
[20:55:54] [PASSED] no-match-no-add-multiple-rules
[20:55:54] [PASSED] two-regs-two-entries
[20:55:54] [PASSED] clr-one-set-other
[20:55:54] [PASSED] set-field
[20:55:54] [PASSED] conflict-duplicate
[20:55:54] [PASSED] conflict-not-disjoint
[20:55:54] [PASSED] conflict-reg-type
[20:55:54] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[20:55:54] ================== xe_rtp_process_tests  ===================
[20:55:54] [PASSED] active1
[20:55:54] [PASSED] active2
[20:55:54] [PASSED] active-inactive
[20:55:54] [PASSED] inactive-active
[20:55:54] [PASSED] inactive-1st_or_active-inactive
[20:55:54] [PASSED] inactive-2nd_or_active-inactive
[20:55:54] [PASSED] inactive-last_or_active-inactive
[20:55:54] [PASSED] inactive-no_or_active-inactive
[20:55:54] ============== [PASSED] xe_rtp_process_tests ===============
[20:55:54] ===================== [PASSED] xe_rtp ======================
[20:55:54] ==================== xe_wa (1 subtest) =====================
[20:55:54] ======================== xe_wa_gt  =========================
[20:55:54] [PASSED] TIGERLAKE (B0)
[20:55:54] [PASSED] DG1 (A0)
[20:55:54] [PASSED] DG1 (B0)
[20:55:54] [PASSED] ALDERLAKE_S (A0)
[20:55:54] [PASSED] ALDERLAKE_S (B0)
[20:55:54] [PASSED] ALDERLAKE_S (C0)
[20:55:54] [PASSED] ALDERLAKE_S (D0)
[20:55:54] [PASSED] ALDERLAKE_P (A0)
[20:55:54] [PASSED] ALDERLAKE_P (B0)
[20:55:54] [PASSED] ALDERLAKE_P (C0)
[20:55:54] [PASSED] ALDERLAKE_S_RPLS (D0)
[20:55:54] [PASSED] ALDERLAKE_P_RPLU (E0)
[20:55:54] [PASSED] DG2_G10 (C0)
[20:55:54] [PASSED] DG2_G11 (B1)
[20:55:54] [PASSED] DG2_G12 (A1)
[20:55:54] [PASSED] METEORLAKE (g:A0, m:A0)
[20:55:54] [PASSED] METEORLAKE (g:A0, m:A0)
[20:55:54] [PASSED] METEORLAKE (g:A0, m:A0)
[20:55:54] [PASSED] LUNARLAKE (g:A0, m:A0)
[20:55:54] [PASSED] LUNARLAKE (g:B0, m:A0)
[20:55:54] [PASSED] BATTLEMAGE (g:A0, m:A1)
[20:55:54] ==================== [PASSED] xe_wa_gt =====================
[20:55:54] ====================== [PASSED] xe_wa ======================
[20:55:54] ============================================================
[20:55:54] Testing complete. Ran 122 tests: passed: 106, skipped: 16
[20:55:54] Elapsed time: 33.542s total, 4.479s configuring, 28.796s building, 0.222s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[20:55:54] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:55:56] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json 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)
      |      ^~~~~~~~~~~~~~~~~

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

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

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



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

* ✓ CI.Build: success for TTM shrinker helpers and xe buffer object shrinker (rev16)
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (11 preceding siblings ...)
  2024-12-17 20:56 ` ✓ CI.KUnit: success " Patchwork
@ 2024-12-17 21:14 ` Patchwork
  2024-12-17 21:16 ` ✓ CI.Hooks: " Patchwork
                   ` (4 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-12-17 21:14 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

== Series Details ==

Series: TTM shrinker helpers and xe buffer object shrinker (rev16)
URL   : https://patchwork.freedesktop.org/series/131815/
State : success

== Summary ==

lib/modules/6.13.0-rc3-xe+/kernel/arch/x86/events/rapl.ko
lib/modules/6.13.0-rc3-xe+/kernel/arch/x86/kvm/
lib/modules/6.13.0-rc3-xe+/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.13.0-rc3-xe+/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.13.0-rc3-xe+/kernel/arch/x86/kvm/kvm-amd.ko
lib/modules/6.13.0-rc3-xe+/kernel/kernel/
lib/modules/6.13.0-rc3-xe+/kernel/kernel/kheaders.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/
lib/modules/6.13.0-rc3-xe+/kernel/crypto/ecrdsa_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/xcbc.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/serpent_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/aria_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/crypto_simd.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/adiantum.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/tcrypt.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/crypto_engine.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/zstd.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/asymmetric_keys/
lib/modules/6.13.0-rc3-xe+/kernel/crypto/asymmetric_keys/pkcs7_test_key.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/asymmetric_keys/pkcs8_key_parser.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/des_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/xctr.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/authenc.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/sm4_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/keywrap.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/camellia_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/sm3.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/pcrypt.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/aegis128.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/af_alg.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/algif_aead.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/cmac.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/sm3_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/aes_ti.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/chacha_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/poly1305_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/nhpoly1305.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/crc32_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/essiv.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/ccm.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/wp512.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/streebog_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/authencesn.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/echainiv.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/lrw.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/cryptd.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/crypto_user.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/algif_hash.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/vmac.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/polyval-generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/hctr2.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/842.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/pcbc.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/ansi_cprng.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/cast6_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/twofish_common.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/twofish_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/lz4hc.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/blowfish_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/md4.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/chacha20poly1305.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/curve25519-generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/lz4.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/rmd160.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/algif_skcipher.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/cast5_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/fcrypt.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/ecdsa_generic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/sm4.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/cast_common.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/blowfish_common.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/michael_mic.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/async_tx/
lib/modules/6.13.0-rc3-xe+/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.13.0-rc3-xe+/kernel/crypto/algif_rng.ko
lib/modules/6.13.0-rc3-xe+/kernel/block/
lib/modules/6.13.0-rc3-xe+/kernel/block/bfq.ko
lib/modules/6.13.0-rc3-xe+/kernel/block/kyber-iosched.ko
lib/modules/6.13.0-rc3-xe+/build
lib/modules/6.13.0-rc3-xe+/modules.alias.bin
lib/modules/6.13.0-rc3-xe+/modules.builtin
lib/modules/6.13.0-rc3-xe+/modules.softdep
lib/modules/6.13.0-rc3-xe+/modules.alias
lib/modules/6.13.0-rc3-xe+/modules.order
lib/modules/6.13.0-rc3-xe+/modules.symbols
lib/modules/6.13.0-rc3-xe+/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
^[[0Ksection_end:1734470062:package_x86_64_nodebug
^[[0K
+ echo -e '\e[0Ksection_end:1734470062:package_x86_64_nodebug\r\e[0K'
+ sync
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



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

* ✓ CI.Hooks: success for TTM shrinker helpers and xe buffer object shrinker (rev16)
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (12 preceding siblings ...)
  2024-12-17 21:14 ` ✓ CI.Build: " Patchwork
@ 2024-12-17 21:16 ` Patchwork
  2024-12-17 21:18 ` ✗ CI.checksparse: warning " Patchwork
                   ` (3 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-12-17 21:16 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

== Series Details ==

Series: TTM shrinker helpers and xe buffer object shrinker (rev16)
URL   : https://patchwork.freedesktop.org/series/131815/
State : success

== Summary ==

run-parts: executing /workspace/ci/hooks/00-showenv
+ export
+ grep -Ei '(^|\W)CI_'
declare -x CI_KERNEL_BUILD_DIR="/workspace/kernel/build64-default"
declare -x CI_KERNEL_SRC_DIR="/workspace/kernel"
declare -x CI_TOOLS_SRC_DIR="/workspace/ci"
declare -x CI_WORKSPACE_DIR="/workspace"
run-parts: executing /workspace/ci/hooks/10-build-W1
+ SRC_DIR=/workspace/kernel
+ RESTORE_DISPLAY_CONFIG=0
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ cd /workspace/kernel
++ nproc
+ make -j48 O=/workspace/kernel/build64-default modules_prepare
make[1]: Entering directory '/workspace/kernel/build64-default'
  GEN     Makefile
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool 
  CALL    ../scripts/checksyscalls.sh
  INSTALL libsubcmd_headers
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/help.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/pager.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/run-command.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
  LD      /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
  AR      /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
  CC      /workspace/kernel/build64-default/tools/objtool/weak.o
  CC      /workspace/kernel/build64-default/tools/objtool/check.o
  CC      /workspace/kernel/build64-default/tools/objtool/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/builtin-check.o
  CC      /workspace/kernel/build64-default/tools/objtool/elf.o
  CC      /workspace/kernel/build64-default/tools/objtool/objtool.o
  CC      /workspace/kernel/build64-default/tools/objtool/orc_gen.o
  CC      /workspace/kernel/build64-default/tools/objtool/orc_dump.o
  CC      /workspace/kernel/build64-default/tools/objtool/libstring.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/libctype.o
  CC      /workspace/kernel/build64-default/tools/objtool/str_error_r.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.o
  CC      /workspace/kernel/build64-default/tools/objtool/librbtree.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/orc.o
  LD      /workspace/kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
  LD      /workspace/kernel/build64-default/tools/objtool/objtool-in.o
  LINK    /workspace/kernel/build64-default/tools/objtool/objtool
make[1]: Leaving directory '/workspace/kernel/build64-default'
++ nproc
+ make -j48 O=/workspace/kernel/build64-default W=1 drivers/gpu/drm/xe
make[1]: Entering directory '/workspace/kernel/build64-default'
make[2]: Nothing to be done for 'drivers/gpu/drm/xe'.
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/11-build-32b
+++ realpath /workspace/ci/hooks/11-build-32b
++ dirname /workspace/ci/hooks/11-build-32b
+ THIS_SCRIPT_DIR=/workspace/ci/hooks
+ SRC_DIR=/workspace/kernel
+ TOOLS_SRC_DIR=/workspace/ci
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ BUILD_DIR=/workspace/kernel/build64-default/build32
+ cd /workspace/kernel
+ mkdir -p /workspace/kernel/build64-default/build32
++ nproc
+ make -j48 ARCH=i386 O=/workspace/kernel/build64-default/build32 defconfig
make[1]: Entering directory '/workspace/kernel/build64-default/build32'
  GEN     Makefile
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  YACC    scripts/kconfig/parser.tab.[ch]
  LEX     scripts/kconfig/lexer.lex.c
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTLD  scripts/kconfig/conf
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#
make[1]: Leaving directory '/workspace/kernel/build64-default/build32'
+ cd /workspace/kernel/build64-default/build32
+ /workspace/kernel/scripts/kconfig/merge_config.sh .config /workspace/ci/kernel/fragments/10-xe.fragment
Using .config as base
Merging /workspace/ci/kernel/fragments/10-xe.fragment
Value of CONFIG_DRM_XE is redefined by fragment /workspace/ci/kernel/fragments/10-xe.fragment:
Previous value: # CONFIG_DRM_XE is not set
New value: CONFIG_DRM_XE=m

  GEN     Makefile

WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
  Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
  Selected by [m]:
  - DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m] && HAS_IOPORT [=y]
#
# configuration written to .config
#
Value requested for CONFIG_HAVE_UID16 not in final .config
Requested value:  CONFIG_HAVE_UID16=y
Actual value:     

Value requested for CONFIG_UID16 not in final .config
Requested value:  CONFIG_UID16=y
Actual value:     

Value requested for CONFIG_X86_32 not in final .config
Requested value:  CONFIG_X86_32=y
Actual value:     

Value requested for CONFIG_OUTPUT_FORMAT not in final .config
Requested value:  CONFIG_OUTPUT_FORMAT="elf32-i386"
Actual value:     CONFIG_OUTPUT_FORMAT="elf64-x86-64"

Value requested for CONFIG_ARCH_MMAP_RND_BITS_MIN not in final .config
Requested value:  CONFIG_ARCH_MMAP_RND_BITS_MIN=8
Actual value:     CONFIG_ARCH_MMAP_RND_BITS_MIN=28

Value requested for CONFIG_ARCH_MMAP_RND_BITS_MAX not in final .config
Requested value:  CONFIG_ARCH_MMAP_RND_BITS_MAX=16
Actual value:     CONFIG_ARCH_MMAP_RND_BITS_MAX=32

Value requested for CONFIG_PGTABLE_LEVELS not in final .config
Requested value:  CONFIG_PGTABLE_LEVELS=2
Actual value:     CONFIG_PGTABLE_LEVELS=5

Value requested for CONFIG_X86_BIGSMP not in final .config
Requested value:  # CONFIG_X86_BIGSMP is not set
Actual value:     

Value requested for CONFIG_X86_INTEL_QUARK not in final .config
Requested value:  # CONFIG_X86_INTEL_QUARK is not set
Actual value:     

Value requested for CONFIG_X86_RDC321X not in final .config
Requested value:  # CONFIG_X86_RDC321X is not set
Actual value:     

Value requested for CONFIG_X86_32_NON_STANDARD not in final .config
Requested value:  # CONFIG_X86_32_NON_STANDARD is not set
Actual value:     

Value requested for CONFIG_X86_32_IRIS not in final .config
Requested value:  # CONFIG_X86_32_IRIS is not set
Actual value:     

Value requested for CONFIG_M486SX not in final .config
Requested value:  # CONFIG_M486SX is not set
Actual value:     

Value requested for CONFIG_M486 not in final .config
Requested value:  # CONFIG_M486 is not set
Actual value:     

Value requested for CONFIG_M586 not in final .config
Requested value:  # CONFIG_M586 is not set
Actual value:     

Value requested for CONFIG_M586TSC not in final .config
Requested value:  # CONFIG_M586TSC is not set
Actual value:     

Value requested for CONFIG_M586MMX not in final .config
Requested value:  # CONFIG_M586MMX is not set
Actual value:     

Value requested for CONFIG_M686 not in final .config
Requested value:  CONFIG_M686=y
Actual value:     

Value requested for CONFIG_MPENTIUMII not in final .config
Requested value:  # CONFIG_MPENTIUMII is not set
Actual value:     

Value requested for CONFIG_MPENTIUMIII not in final .config
Requested value:  # CONFIG_MPENTIUMIII is not set
Actual value:     

Value requested for CONFIG_MPENTIUMM not in final .config
Requested value:  # CONFIG_MPENTIUMM is not set
Actual value:     

Value requested for CONFIG_MPENTIUM4 not in final .config
Requested value:  # CONFIG_MPENTIUM4 is not set
Actual value:     

Value requested for CONFIG_MK6 not in final .config
Requested value:  # CONFIG_MK6 is not set
Actual value:     

Value requested for CONFIG_MK7 not in final .config
Requested value:  # CONFIG_MK7 is not set
Actual value:     

Value requested for CONFIG_MCRUSOE not in final .config
Requested value:  # CONFIG_MCRUSOE is not set
Actual value:     

Value requested for CONFIG_MEFFICEON not in final .config
Requested value:  # CONFIG_MEFFICEON is not set
Actual value:     

Value requested for CONFIG_MWINCHIPC6 not in final .config
Requested value:  # CONFIG_MWINCHIPC6 is not set
Actual value:     

Value requested for CONFIG_MWINCHIP3D not in final .config
Requested value:  # CONFIG_MWINCHIP3D is not set
Actual value:     

Value requested for CONFIG_MELAN not in final .config
Requested value:  # CONFIG_MELAN is not set
Actual value:     

Value requested for CONFIG_MGEODEGX1 not in final .config
Requested value:  # CONFIG_MGEODEGX1 is not set
Actual value:     

Value requested for CONFIG_MGEODE_LX not in final .config
Requested value:  # CONFIG_MGEODE_LX is not set
Actual value:     

Value requested for CONFIG_MCYRIXIII not in final .config
Requested value:  # CONFIG_MCYRIXIII is not set
Actual value:     

Value requested for CONFIG_MVIAC3_2 not in final .config
Requested value:  # CONFIG_MVIAC3_2 is not set
Actual value:     

Value requested for CONFIG_MVIAC7 not in final .config
Requested value:  # CONFIG_MVIAC7 is not set
Actual value:     

Value requested for CONFIG_X86_GENERIC not in final .config
Requested value:  # CONFIG_X86_GENERIC is not set
Actual value:     

Value requested for CONFIG_X86_INTERNODE_CACHE_SHIFT not in final .config
Requested value:  CONFIG_X86_INTERNODE_CACHE_SHIFT=5
Actual value:     CONFIG_X86_INTERNODE_CACHE_SHIFT=6

Value requested for CONFIG_X86_L1_CACHE_SHIFT not in final .config
Requested value:  CONFIG_X86_L1_CACHE_SHIFT=5
Actual value:     CONFIG_X86_L1_CACHE_SHIFT=6

Value requested for CONFIG_X86_USE_PPRO_CHECKSUM not in final .config
Requested value:  CONFIG_X86_USE_PPRO_CHECKSUM=y
Actual value:     

Value requested for CONFIG_X86_MINIMUM_CPU_FAMILY not in final .config
Requested value:  CONFIG_X86_MINIMUM_CPU_FAMILY=6
Actual value:     CONFIG_X86_MINIMUM_CPU_FAMILY=64

Value requested for CONFIG_CPU_SUP_TRANSMETA_32 not in final .config
Requested value:  CONFIG_CPU_SUP_TRANSMETA_32=y
Actual value:     

Value requested for CONFIG_CPU_SUP_VORTEX_32 not in final .config
Requested value:  CONFIG_CPU_SUP_VORTEX_32=y
Actual value:     

Value requested for CONFIG_HPET_TIMER not in final .config
Requested value:  # CONFIG_HPET_TIMER is not set
Actual value:     CONFIG_HPET_TIMER=y

Value requested for CONFIG_NR_CPUS_RANGE_END not in final .config
Requested value:  CONFIG_NR_CPUS_RANGE_END=8
Actual value:     CONFIG_NR_CPUS_RANGE_END=512

Value requested for CONFIG_NR_CPUS_DEFAULT not in final .config
Requested value:  CONFIG_NR_CPUS_DEFAULT=8
Actual value:     CONFIG_NR_CPUS_DEFAULT=64

Value requested for CONFIG_X86_ANCIENT_MCE not in final .config
Requested value:  # CONFIG_X86_ANCIENT_MCE is not set
Actual value:     

Value requested for CONFIG_X86_LEGACY_VM86 not in final .config
Requested value:  # CONFIG_X86_LEGACY_VM86 is not set
Actual value:     

Value requested for CONFIG_X86_ESPFIX32 not in final .config
Requested value:  CONFIG_X86_ESPFIX32=y
Actual value:     

Value requested for CONFIG_TOSHIBA not in final .config
Requested value:  # CONFIG_TOSHIBA is not set
Actual value:     

Value requested for CONFIG_X86_REBOOTFIXUPS not in final .config
Requested value:  # CONFIG_X86_REBOOTFIXUPS is not set
Actual value:     

Value requested for CONFIG_MICROCODE_INITRD32 not in final .config
Requested value:  CONFIG_MICROCODE_INITRD32=y
Actual value:     

Value requested for CONFIG_NOHIGHMEM not in final .config
Requested value:  # CONFIG_NOHIGHMEM is not set
Actual value:     

Value requested for CONFIG_HIGHMEM4G not in final .config
Requested value:  CONFIG_HIGHMEM4G=y
Actual value:     

Value requested for CONFIG_HIGHMEM64G not in final .config
Requested value:  # CONFIG_HIGHMEM64G is not set
Actual value:     

Value requested for CONFIG_VMSPLIT_3G not in final .config
Requested value:  CONFIG_VMSPLIT_3G=y
Actual value:     

Value requested for CONFIG_VMSPLIT_3G_OPT not in final .config
Requested value:  # CONFIG_VMSPLIT_3G_OPT is not set
Actual value:     

Value requested for CONFIG_VMSPLIT_2G not in final .config
Requested value:  # CONFIG_VMSPLIT_2G is not set
Actual value:     

Value requested for CONFIG_VMSPLIT_2G_OPT not in final .config
Requested value:  # CONFIG_VMSPLIT_2G_OPT is not set
Actual value:     

Value requested for CONFIG_VMSPLIT_1G not in final .config
Requested value:  # CONFIG_VMSPLIT_1G is not set
Actual value:     

Value requested for CONFIG_PAGE_OFFSET not in final .config
Requested value:  CONFIG_PAGE_OFFSET=0xC0000000
Actual value:     

Value requested for CONFIG_HIGHMEM not in final .config
Requested value:  CONFIG_HIGHMEM=y
Actual value:     

Value requested for CONFIG_X86_PAE not in final .config
Requested value:  # CONFIG_X86_PAE is not set
Actual value:     

Value requested for CONFIG_ARCH_FLATMEM_ENABLE not in final .config
Requested value:  CONFIG_ARCH_FLATMEM_ENABLE=y
Actual value:     

Value requested for CONFIG_ARCH_SELECT_MEMORY_MODEL not in final .config
Requested value:  CONFIG_ARCH_SELECT_MEMORY_MODEL=y
Actual value:     

Value requested for CONFIG_ILLEGAL_POINTER_VALUE not in final .config
Requested value:  CONFIG_ILLEGAL_POINTER_VALUE=0
Actual value:     CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000

Value requested for CONFIG_HIGHPTE not in final .config
Requested value:  # CONFIG_HIGHPTE is not set
Actual value:     

Value requested for CONFIG_COMPAT_VDSO not in final .config
Requested value:  # CONFIG_COMPAT_VDSO is not set
Actual value:     

Value requested for CONFIG_FUNCTION_PADDING_CFI not in final .config
Requested value:  CONFIG_FUNCTION_PADDING_CFI=0
Actual value:     CONFIG_FUNCTION_PADDING_CFI=11

Value requested for CONFIG_FUNCTION_PADDING_BYTES not in final .config
Requested value:  CONFIG_FUNCTION_PADDING_BYTES=4
Actual value:     CONFIG_FUNCTION_PADDING_BYTES=16

Value requested for CONFIG_APM not in final .config
Requested value:  # CONFIG_APM is not set
Actual value:     

Value requested for CONFIG_X86_POWERNOW_K6 not in final .config
Requested value:  # CONFIG_X86_POWERNOW_K6 is not set
Actual value:     

Value requested for CONFIG_X86_POWERNOW_K7 not in final .config
Requested value:  # CONFIG_X86_POWERNOW_K7 is not set
Actual value:     

Value requested for CONFIG_X86_GX_SUSPMOD not in final .config
Requested value:  # CONFIG_X86_GX_SUSPMOD is not set
Actual value:     

Value requested for CONFIG_X86_SPEEDSTEP_ICH not in final .config
Requested value:  # CONFIG_X86_SPEEDSTEP_ICH is not set
Actual value:     

Value requested for CONFIG_X86_SPEEDSTEP_SMI not in final .config
Requested value:  # CONFIG_X86_SPEEDSTEP_SMI is not set
Actual value:     

Value requested for CONFIG_X86_CPUFREQ_NFORCE2 not in final .config
Requested value:  # CONFIG_X86_CPUFREQ_NFORCE2 is not set
Actual value:     

Value requested for CONFIG_X86_LONGRUN not in final .config
Requested value:  # CONFIG_X86_LONGRUN is not set
Actual value:     

Value requested for CONFIG_X86_LONGHAUL not in final .config
Requested value:  # CONFIG_X86_LONGHAUL is not set
Actual value:     

Value requested for CONFIG_X86_E_POWERSAVER not in final .config
Requested value:  # CONFIG_X86_E_POWERSAVER is not set
Actual value:     

Value requested for CONFIG_PCI_GOBIOS not in final .config
Requested value:  # CONFIG_PCI_GOBIOS is not set
Actual value:     

Value requested for CONFIG_PCI_GOMMCONFIG not in final .config
Requested value:  # CONFIG_PCI_GOMMCONFIG is not set
Actual value:     

Value requested for CONFIG_PCI_GODIRECT not in final .config
Requested value:  # CONFIG_PCI_GODIRECT is not set
Actual value:     

Value requested for CONFIG_PCI_GOANY not in final .config
Requested value:  CONFIG_PCI_GOANY=y
Actual value:     

Value requested for CONFIG_PCI_BIOS not in final .config
Requested value:  CONFIG_PCI_BIOS=y
Actual value:     

Value requested for CONFIG_ISA not in final .config
Requested value:  # CONFIG_ISA is not set
Actual value:     

Value requested for CONFIG_SCx200 not in final .config
Requested value:  # CONFIG_SCx200 is not set
Actual value:     

Value requested for CONFIG_OLPC not in final .config
Requested value:  # CONFIG_OLPC is not set
Actual value:     

Value requested for CONFIG_ALIX not in final .config
Requested value:  # CONFIG_ALIX is not set
Actual value:     

Value requested for CONFIG_NET5501 not in final .config
Requested value:  # CONFIG_NET5501 is not set
Actual value:     

Value requested for CONFIG_GEOS not in final .config
Requested value:  # CONFIG_GEOS is not set
Actual value:     

Value requested for CONFIG_COMPAT_32 not in final .config
Requested value:  CONFIG_COMPAT_32=y
Actual value:     

Value requested for CONFIG_HAVE_ATOMIC_IOMAP not in final .config
Requested value:  CONFIG_HAVE_ATOMIC_IOMAP=y
Actual value:     

Value requested for CONFIG_ARCH_32BIT_OFF_T not in final .config
Requested value:  CONFIG_ARCH_32BIT_OFF_T=y
Actual value:     

Value requested for CONFIG_ARCH_WANT_IPC_PARSE_VERSION not in final .config
Requested value:  CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
Actual value:     

Value requested for CONFIG_MODULES_USE_ELF_REL not in final .config
Requested value:  CONFIG_MODULES_USE_ELF_REL=y
Actual value:     

Value requested for CONFIG_ARCH_MMAP_RND_BITS not in final .config
Requested value:  CONFIG_ARCH_MMAP_RND_BITS=8
Actual value:     CONFIG_ARCH_MMAP_RND_BITS=28

Value requested for CONFIG_CLONE_BACKWARDS not in final .config
Requested value:  CONFIG_CLONE_BACKWARDS=y
Actual value:     

Value requested for CONFIG_OLD_SIGSUSPEND3 not in final .config
Requested value:  CONFIG_OLD_SIGSUSPEND3=y
Actual value:     

Value requested for CONFIG_OLD_SIGACTION not in final .config
Requested value:  CONFIG_OLD_SIGACTION=y
Actual value:     

Value requested for CONFIG_ARCH_SPLIT_ARG64 not in final .config
Requested value:  CONFIG_ARCH_SPLIT_ARG64=y
Actual value:     

Value requested for CONFIG_FUNCTION_ALIGNMENT not in final .config
Requested value:  CONFIG_FUNCTION_ALIGNMENT=4
Actual value:     CONFIG_FUNCTION_ALIGNMENT=16

Value requested for CONFIG_SELECT_MEMORY_MODEL not in final .config
Requested value:  CONFIG_SELECT_MEMORY_MODEL=y
Actual value:     

Value requested for CONFIG_FLATMEM_MANUAL not in final .config
Requested value:  CONFIG_FLATMEM_MANUAL=y
Actual value:     

Value requested for CONFIG_SPARSEMEM_MANUAL not in final .config
Requested value:  # CONFIG_SPARSEMEM_MANUAL is not set
Actual value:     

Value requested for CONFIG_FLATMEM not in final .config
Requested value:  CONFIG_FLATMEM=y
Actual value:     

Value requested for CONFIG_SPARSEMEM_STATIC not in final .config
Requested value:  CONFIG_SPARSEMEM_STATIC=y
Actual value:     

Value requested for CONFIG_BOUNCE not in final .config
Requested value:  CONFIG_BOUNCE=y
Actual value:     

Value requested for CONFIG_KMAP_LOCAL not in final .config
Requested value:  CONFIG_KMAP_LOCAL=y
Actual value:     

Value requested for CONFIG_HOTPLUG_PCI_COMPAQ not in final .config
Requested value:  # CONFIG_HOTPLUG_PCI_COMPAQ is not set
Actual value:     

Value requested for CONFIG_HOTPLUG_PCI_IBM not in final .config
Requested value:  # CONFIG_HOTPLUG_PCI_IBM is not set
Actual value:     

Value requested for CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH not in final .config
Requested value:  CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH=y
Actual value:     

Value requested for CONFIG_PCH_PHUB not in final .config
Requested value:  # CONFIG_PCH_PHUB is not set
Actual value:     

Value requested for CONFIG_SCSI_NSP32 not in final .config
Requested value:  # CONFIG_SCSI_NSP32 is not set
Actual value:     

Value requested for CONFIG_PATA_CS5520 not in final .config
Requested value:  # CONFIG_PATA_CS5520 is not set
Actual value:     

Value requested for CONFIG_PATA_CS5530 not in final .config
Requested value:  # CONFIG_PATA_CS5530 is not set
Actual value:     

Value requested for CONFIG_PATA_CS5535 not in final .config
Requested value:  # CONFIG_PATA_CS5535 is not set
Actual value:     

Value requested for CONFIG_PATA_CS5536 not in final .config
Requested value:  # CONFIG_PATA_CS5536 is not set
Actual value:     

Value requested for CONFIG_PATA_SC1200 not in final .config
Requested value:  # CONFIG_PATA_SC1200 is not set
Actual value:     

Value requested for CONFIG_PCH_GBE not in final .config
Requested value:  # CONFIG_PCH_GBE is not set
Actual value:     

Value requested for CONFIG_INPUT_WISTRON_BTNS not in final .config
Requested value:  # CONFIG_INPUT_WISTRON_BTNS is not set
Actual value:     

Value requested for CONFIG_SERIAL_TIMBERDALE not in final .config
Requested value:  # CONFIG_SERIAL_TIMBERDALE is not set
Actual value:     

Value requested for CONFIG_SERIAL_PCH_UART not in final .config
Requested value:  # CONFIG_SERIAL_PCH_UART is not set
Actual value:     

Value requested for CONFIG_HW_RANDOM_GEODE not in final .config
Requested value:  CONFIG_HW_RANDOM_GEODE=y
Actual value:     

Value requested for CONFIG_SONYPI not in final .config
Requested value:  # CONFIG_SONYPI is not set
Actual value:     

Value requested for CONFIG_PC8736x_GPIO not in final .config
Requested value:  # CONFIG_PC8736x_GPIO is not set
Actual value:     

Value requested for CONFIG_NSC_GPIO not in final .config
Requested value:  # CONFIG_NSC_GPIO is not set
Actual value:     

Value requested for CONFIG_I2C_EG20T not in final .config
Requested value:  # CONFIG_I2C_EG20T is not set
Actual value:     

Value requested for CONFIG_SCx200_ACB not in final .config
Requested value:  # CONFIG_SCx200_ACB is not set
Actual value:     

Value requested for CONFIG_PTP_1588_CLOCK_PCH not in final .config
Requested value:  # CONFIG_PTP_1588_CLOCK_PCH is not set
Actual value:     

Value requested for CONFIG_SBC8360_WDT not in final .config
Requested value:  # CONFIG_SBC8360_WDT is not set
Actual value:     

Value requested for CONFIG_SBC7240_WDT not in final .config
Requested value:  # CONFIG_SBC7240_WDT is not set
Actual value:     

Value requested for CONFIG_MFD_CS5535 not in final .config
Requested value:  # CONFIG_MFD_CS5535 is not set
Actual value:     

Value requested for CONFIG_AGP_ALI not in final .config
Requested value:  # CONFIG_AGP_ALI is not set
Actual value:     

Value requested for CONFIG_AGP_ATI not in final .config
Requested value:  # CONFIG_AGP_ATI is not set
Actual value:     

Value requested for CONFIG_AGP_AMD not in final .config
Requested value:  # CONFIG_AGP_AMD is not set
Actual value:     

Value requested for CONFIG_AGP_NVIDIA not in final .config
Requested value:  # CONFIG_AGP_NVIDIA is not set
Actual value:     

Value requested for CONFIG_AGP_SWORKS not in final .config
Requested value:  # CONFIG_AGP_SWORKS is not set
Actual value:     

Value requested for CONFIG_AGP_EFFICEON not in final .config
Requested value:  # CONFIG_AGP_EFFICEON is not set
Actual value:     

Value requested for CONFIG_SND_CS5530 not in final .config
Requested value:  # CONFIG_SND_CS5530 is not set
Actual value:     

Value requested for CONFIG_SND_CS5535AUDIO not in final .config
Requested value:  # CONFIG_SND_CS5535AUDIO is not set
Actual value:     

Value requested for CONFIG_SND_SIS7019 not in final .config
Requested value:  # CONFIG_SND_SIS7019 is not set
Actual value:     

Value requested for CONFIG_LEDS_OT200 not in final .config
Requested value:  # CONFIG_LEDS_OT200 is not set
Actual value:     

Value requested for CONFIG_PCH_DMA not in final .config
Requested value:  # CONFIG_PCH_DMA is not set
Actual value:     

Value requested for CONFIG_CLKSRC_I8253 not in final .config
Requested value:  CONFIG_CLKSRC_I8253=y
Actual value:     

Value requested for CONFIG_MAILBOX not in final .config
Requested value:  # CONFIG_MAILBOX is not set
Actual value:     CONFIG_MAILBOX=y

Value requested for CONFIG_CRYPTO_SERPENT_SSE2_586 not in final .config
Requested value:  # CONFIG_CRYPTO_SERPENT_SSE2_586 is not set
Actual value:     

Value requested for CONFIG_CRYPTO_TWOFISH_586 not in final .config
Requested value:  # CONFIG_CRYPTO_TWOFISH_586 is not set
Actual value:     

Value requested for CONFIG_CRYPTO_DEV_GEODE not in final .config
Requested value:  # CONFIG_CRYPTO_DEV_GEODE is not set
Actual value:     

Value requested for CONFIG_CRYPTO_DEV_HIFN_795X not in final .config
Requested value:  # CONFIG_CRYPTO_DEV_HIFN_795X is not set
Actual value:     

Value requested for CONFIG_CRYPTO_LIB_POLY1305_RSIZE not in final .config
Requested value:  CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
Actual value:     CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11

Value requested for CONFIG_AUDIT_GENERIC not in final .config
Requested value:  CONFIG_AUDIT_GENERIC=y
Actual value:     

Value requested for CONFIG_GENERIC_VDSO_32 not in final .config
Requested value:  CONFIG_GENERIC_VDSO_32=y
Actual value:     

Value requested for CONFIG_DEBUG_KMAP_LOCAL not in final .config
Requested value:  # CONFIG_DEBUG_KMAP_LOCAL is not set
Actual value:     

Value requested for CONFIG_DEBUG_HIGHMEM not in final .config
Requested value:  # CONFIG_DEBUG_HIGHMEM is not set
Actual value:     

Value requested for CONFIG_HAVE_DEBUG_STACKOVERFLOW not in final .config
Requested value:  CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
Actual value:     

Value requested for CONFIG_DEBUG_STACKOVERFLOW not in final .config
Requested value:  # CONFIG_DEBUG_STACKOVERFLOW is not set
Actual value:     

Value requested for CONFIG_HAVE_FUNCTION_GRAPH_TRACER not in final .config
Requested value:  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
Actual value:     

Value requested for CONFIG_HAVE_FUNCTION_GRAPH_RETVAL not in final .config
Requested value:  CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y
Actual value:     

Value requested for CONFIG_DRM_KUNIT_TEST not in final .config
Requested value:  CONFIG_DRM_KUNIT_TEST=m
Actual value:     

Value requested for CONFIG_DRM_XE_WERROR not in final .config
Requested value:  CONFIG_DRM_XE_WERROR=y
Actual value:     

Value requested for CONFIG_DRM_XE_DEBUG not in final .config
Requested value:  CONFIG_DRM_XE_DEBUG=y
Actual value:     

Value requested for CONFIG_DRM_XE_DEBUG_MEM not in final .config
Requested value:  CONFIG_DRM_XE_DEBUG_MEM=y
Actual value:     

Value requested for CONFIG_DRM_XE_KUNIT_TEST not in final .config
Requested value:  CONFIG_DRM_XE_KUNIT_TEST=m
Actual value:     

++ nproc
+ make -j48 ARCH=i386 olddefconfig
  GEN     Makefile

WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
  Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
  Selected by [m]:
  - DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m] && HAS_IOPORT [=y]
#
# configuration written to .config
#
++ nproc
+ make -j48 ARCH=i386
  SYNC    include/config/auto.conf.cmd
  GEN     Makefile

WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
  Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
  Selected by [m]:
  - DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m] && HAS_IOPORT [=y]

WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
  Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
  Selected by [m]:
  - DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m] && HAS_IOPORT [=y]

WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
  Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
  Selected by [m]:
  - DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m] && HAS_IOPORT [=y]
  GEN     Makefile
  WRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h
  WRAP    arch/x86/include/generated/uapi/asm/errno.h
  WRAP    arch/x86/include/generated/uapi/asm/fcntl.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctl.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctls.h
  UPD     include/generated/uapi/linux/version.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
  WRAP    arch/x86/include/generated/uapi/asm/ipcbuf.h
  WRAP    arch/x86/include/generated/uapi/asm/param.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_x32.h
  WRAP    arch/x86/include/generated/uapi/asm/poll.h
  WRAP    arch/x86/include/generated/uapi/asm/resource.h
  WRAP    arch/x86/include/generated/uapi/asm/socket.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
  WRAP    arch/x86/include/generated/uapi/asm/sockios.h
  WRAP    arch/x86/include/generated/uapi/asm/termbits.h
  WRAP    arch/x86/include/generated/uapi/asm/termios.h
  WRAP    arch/x86/include/generated/uapi/asm/types.h
  UPD     include/generated/compile.h
  HOSTCC  arch/x86/tools/relocs_32.o
  HOSTCC  arch/x86/tools/relocs_64.o
  HOSTCC  arch/x86/tools/relocs_common.o
  WRAP    arch/x86/include/generated/asm/early_ioremap.h
  WRAP    arch/x86/include/generated/asm/mcs_spinlock.h
  WRAP    arch/x86/include/generated/asm/mmzone.h
  WRAP    arch/x86/include/generated/asm/irq_regs.h
  WRAP    arch/x86/include/generated/asm/kmap_size.h
  WRAP    arch/x86/include/generated/asm/local64.h
  WRAP    arch/x86/include/generated/asm/mmiowb.h
  HOSTCC  scripts/kallsyms
  WRAP    arch/x86/include/generated/asm/module.lds.h
  HOSTCC  scripts/sorttable
  WRAP    arch/x86/include/generated/asm/rwonce.h
  HOSTCC  scripts/asn1_compiler
  HOSTCC  scripts/selinux/mdp/mdp
  HOSTLD  arch/x86/tools/relocs
  UPD     include/config/kernel.release
  UPD     include/generated/utsrelease.h
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  CC      scripts/mod/devicetable-offsets.s
  UPD     scripts/mod/devicetable-offsets.h
  MKELF   scripts/mod/elfconfig.h
  HOSTCC  scripts/mod/modpost.o
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/mod/sumversion.o
  HOSTCC  scripts/mod/symsearch.o
  HOSTLD  scripts/mod/modpost
  CC      kernel/bounds.s
  CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-arch-fallback.h
  CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-instrumented.h
  CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-long.h
  UPD     include/generated/timeconst.h
  UPD     include/generated/bounds.h
  CC      arch/x86/kernel/asm-offsets.s
  UPD     include/generated/asm-offsets.h
  CALL    /workspace/kernel/scripts/checksyscalls.sh
  LDS     scripts/module.lds
  CC      init/main.o
  HOSTCC  usr/gen_init_cpio
  CC      init/do_mounts.o
  CC      init/do_mounts_initrd.o
  CC      ipc/util.o
  CC      certs/system_keyring.o
  CC      init/initramfs.o
  CC      ipc/msgutil.o
  UPD     init/utsversion-tmp.h
  CC      ipc/msg.o
  CC      init/calibrate.o
  AS      arch/x86/lib/atomic64_cx8_32.o
  CC      ipc/sem.o
  CC      mm/filemap.o
  AS      arch/x86/lib/checksum_32.o
  CC      init/init_task.o
  CC      security/commoncap.o
  CC      io_uring/io_uring.o
  CC      ipc/shm.o
  CC      arch/x86/lib/cmdline.o
  CC      block/bdev.o
  CC      io_uring/opdef.o
  CC      mm/mempool.o
  CC      arch/x86/pci/i386.o
  CC      arch/x86/power/cpu.o
  CC      ipc/syscall.o
  CC      security/keys/gc.o
  AR      arch/x86/crypto/built-in.a
  CC      security/lsm_syscalls.o
  CC      arch/x86/realmode/init.o
  CC      arch/x86/video/video-common.o
  CC      security/integrity/iint.o
  AR      arch/x86/net/built-in.a
  HOSTCC  security/selinux/genheaders
  CC      block/partitions/core.o
  AR      virt/lib/built-in.a
  CC      arch/x86/mm/pat/set_memory.o
  CC      security/min_addr.o
  CC      arch/x86/events/amd/core.o
  CC      net/core/sock.o
  AR      drivers/cache/built-in.a
  CC      lib/math/div64.o
  CC      arch/x86/mm/pat/memtype.o
  AR      arch/x86/platform/atom/built-in.a
  CC      arch/x86/virt/svm/cmdline.o
  CC      arch/x86/kernel/fpu/init.o
  AR      virt/built-in.a
  CC      fs/notify/dnotify/dnotify.o
  CC      sound/core/seq/seq.o
  CC      lib/math/gcd.o
  AR      drivers/irqchip/built-in.a
  AR      arch/x86/platform/ce4100/built-in.a
  CC      io_uring/kbuf.o
  CC      arch/x86/entry/vdso/vma.o
  CC      fs/nfs_common/nfsacl.o
  AR      drivers/bus/mhi/built-in.a
  CC      kernel/sched/core.o
  CC      arch/x86/platform/efi/memmap.o
  AR      drivers/bus/built-in.a
  AR      drivers/pwm/built-in.a
  CC      crypto/asymmetric_keys/asymmetric_type.o
  AR      drivers/leds/trigger/built-in.a
  AS      arch/x86/lib/cmpxchg8b_emu.o
  AR      drivers/leds/blink/built-in.a
  CC      drivers/pci/msi/pcidev_msi.o
  AR      arch/x86/virt/svm/built-in.a
  AR      drivers/leds/simple/built-in.a
  CC      drivers/leds/led-core.o
  AR      arch/x86/virt/vmx/built-in.a
  CC      arch/x86/lib/cpu.o
  AR      arch/x86/virt/built-in.a
  CC      drivers/video/console/dummycon.o
  CC      lib/math/lcm.o
  GEN     security/selinux/flask.h security/selinux/av_permissions.h
  CC      security/selinux/avc.o
  CC      lib/math/int_log.o
  CC      lib/math/int_pow.o
  CC      drivers/pci/pcie/portdrv.o
  GEN     usr/initramfs_data.cpio
  COPY    usr/initramfs_inc_data
  AS      usr/initramfs_data.o
  AR      usr/built-in.a
  CC      lib/math/int_sqrt.o
  CC      sound/core/sound.o
  CC      arch/x86/kernel/fpu/bugs.o
  HOSTCC  certs/extract-cert
  CC      lib/math/reciprocal_div.o
  CC      arch/x86/kernel/fpu/core.o
  CC      arch/x86/lib/delay.o
  CC      lib/math/rational.o
  CC      sound/core/seq/seq_lock.o
  AS      arch/x86/realmode/rm/header.o
  AS      arch/x86/realmode/rm/trampoline_32.o
  AR      arch/x86/video/built-in.a
  AS      arch/x86/realmode/rm/stack.o
  AS      arch/x86/lib/getuser.o
  AS      arch/x86/realmode/rm/reboot.o
  AS      arch/x86/realmode/rm/wakeup_asm.o
  AR      drivers/pci/pwrctrl/built-in.a
  CERT    certs/x509_certificate_list
  CC      ipc/ipc_sysctl.o
  CC      drivers/pci/hotplug/pci_hotplug_core.o
  CERT    certs/signing_key.x509
  AS      certs/system_certificates.o
  CC      security/integrity/integrity_audit.o
  CC      arch/x86/realmode/rm/wakemain.o
  CC      drivers/video/console/vgacon.o
  CC      kernel/locking/mutex.o
  AR      certs/built-in.a
  CC      drivers/leds/led-class.o
  CC      kernel/locking/semaphore.o
  CC      fs/nfs_common/grace.o
  CC      drivers/pci/msi/api.o
  CC      security/selinux/hooks.o
  CC      fs/nfs_common/common.o
  CC      drivers/pci/hotplug/acpi_pcihp.o
  AR      drivers/pci/controller/dwc/built-in.a
  CC      arch/x86/pci/init.o
  CC      crypto/asymmetric_keys/restrict.o
  CC      kernel/locking/rwsem.o
  CC      arch/x86/realmode/rm/video-mode.o
  AR      drivers/pci/controller/mobiveil/built-in.a
  CC      security/keys/key.o
  AR      fs/notify/dnotify/built-in.a
  AR      drivers/pci/controller/plda/built-in.a
  AR      drivers/pci/controller/built-in.a
  CC      fs/notify/inotify/inotify_fsnotify.o
  CC      arch/x86/entry/vdso/extable.o
  CC      crypto/asymmetric_keys/signature.o
  CC      arch/x86/platform/efi/quirks.o
  GEN     arch/x86/lib/inat-tables.c
  CC      lib/crypto/mpi/generic_mpih-lshift.o
  CC      arch/x86/lib/insn-eval.o
  CC      arch/x86/power/hibernate_32.o
  CC      block/partitions/msdos.o
  AS      arch/x86/realmode/rm/copy.o
  CC      lib/crypto/memneq.o
  AR      lib/math/built-in.a
  CC      sound/core/seq/seq_clientmgr.o
  AS      arch/x86/realmode/rm/bioscall.o
  CC      arch/x86/realmode/rm/regs.o
  AR      arch/x86/platform/geode/built-in.a
  AR      drivers/idle/built-in.a
  CC      arch/x86/realmode/rm/video-vga.o
  CC      arch/x86/realmode/rm/video-vesa.o
  CC      security/security.o
  AS      arch/x86/power/hibernate_asm_32.o
  CC      arch/x86/kernel/cpu/mce/core.o
  CC      arch/x86/kernel/cpu/mtrr/mtrr.o
  CC      arch/x86/realmode/rm/video-bios.o
  CC      arch/x86/kernel/cpu/microcode/core.o
  CC      drivers/pci/pcie/rcec.o
  CC      block/fops.o
  PASYMS  arch/x86/realmode/rm/pasyms.h
  CC      init/version.o
  LDS     arch/x86/realmode/rm/realmode.lds
  CC      fs/notify/inotify/inotify_user.o
  LD      arch/x86/realmode/rm/realmode.elf
  RELOCS  arch/x86/realmode/rm/realmode.relocs
  OBJCOPY arch/x86/realmode/rm/realmode.bin
  CC      arch/x86/events/amd/lbr.o
  AS      arch/x86/realmode/rmpiggy.o
  CC      ipc/mqueue.o
  CC      crypto/asymmetric_keys/public_key.o
  CC      arch/x86/kernel/cpu/cacheinfo.o
  CC      arch/x86/kernel/cpu/scattered.o
  AR      arch/x86/realmode/built-in.a
  CC      arch/x86/pci/pcbios.o
  CC      drivers/leds/led-triggers.o
  CC      arch/x86/kernel/acpi/boot.o
  CC      arch/x86/kernel/apic/apic.o
  CC      sound/core/init.o
  CC      arch/x86/mm/pat/memtype_interval.o
  CC      arch/x86/kernel/acpi/sleep.o
  CC      lib/crypto/mpi/generic_mpih-mul1.o
  CC      arch/x86/kernel/cpu/microcode/intel.o
  CC      arch/x86/events/intel/core.o
  CC      arch/x86/kernel/cpu/mtrr/if.o
  AR      security/integrity/built-in.a
  CC      net/core/request_sock.o
  CC      drivers/pci/msi/msi.o
  AR      fs/nfs_common/built-in.a
  CC      io_uring/rsrc.o
  CC      drivers/pci/msi/irqdomain.o
  AR      init/built-in.a
  CC      kernel/sched/fair.o
  CC      arch/x86/mm/init.o
  AR      drivers/pci/hotplug/built-in.a
  CC      arch/x86/events/amd/ibs.o
  CC      arch/x86/power/hibernate.o
  CC      arch/x86/kernel/cpu/mtrr/generic.o
  LDS     arch/x86/entry/vdso/vdso32/vdso32.lds
  AS      arch/x86/entry/vdso/vdso32/note.o
  CC      arch/x86/kernel/cpu/mce/severity.o
  AS      arch/x86/entry/vdso/vdso32/system_call.o
  AS      arch/x86/entry/vdso/vdso32/sigreturn.o
  CC      arch/x86/kernel/fpu/regset.o
  CC      block/partitions/efi.o
  AR      drivers/video/console/built-in.a
  CC      arch/x86/lib/insn.o
  CC      arch/x86/entry/vdso/vdso32/vclock_gettime.o
  CC      drivers/video/backlight/backlight.o
  CC      arch/x86/kernel/fpu/signal.o
  CC      drivers/pci/pcie/bwctrl.o
  CC      arch/x86/platform/efi/efi.o
  CC      arch/x86/kernel/fpu/xstate.o
  CC      security/keys/keyring.o
  CC      lib/crypto/utils.o
  AR      drivers/video/fbdev/core/built-in.a
  AR      drivers/video/fbdev/omap/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/dss/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/displays/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/built-in.a
  AR      drivers/video/fbdev/omap2/built-in.a
  ASN.1   crypto/asymmetric_keys/x509.asn1.[ch]
  ASN.1   crypto/asymmetric_keys/x509_akid.asn1.[ch]
  AR      drivers/video/fbdev/built-in.a
  CC      crypto/asymmetric_keys/x509_loader.o
  CC      lib/crypto/mpi/generic_mpih-mul2.o
  CC      crypto/asymmetric_keys/x509_public_key.o
  CC      arch/x86/pci/mmconfig_32.o
  AR      arch/x86/mm/pat/built-in.a
  CC      kernel/locking/percpu-rwsem.o
  CC      arch/x86/kernel/kprobes/core.o
  CC      lib/crypto/chacha.o
  AR      drivers/leds/built-in.a
  CC      arch/x86/lib/kaslr.o
  AR      arch/x86/platform/iris/built-in.a
  CC      arch/x86/events/amd/uncore.o
  CC      lib/crypto/aes.o
  CC      security/selinux/selinuxfs.o
  AR      arch/x86/entry/vsyscall/built-in.a
  AR      fs/notify/inotify/built-in.a
  CC      arch/x86/platform/efi/efi_32.o
  AR      fs/notify/fanotify/built-in.a
  CC      fs/notify/fsnotify.o
  CC      sound/core/seq/seq_memory.o
  CC      arch/x86/kernel/cpu/topology_common.o
  CC      arch/x86/kernel/cpu/microcode/amd.o
  CC      arch/x86/lib/memcpy_32.o
  LDS     arch/x86/kernel/vmlinux.lds
  AS      arch/x86/kernel/acpi/wakeup_32.o
  CC      arch/x86/kernel/apic/apic_common.o
  AS      arch/x86/entry/entry.o
  CC      arch/x86/events/zhaoxin/core.o
  CC      arch/x86/kernel/cpu/mce/genpool.o
  AS      arch/x86/lib/memmove_32.o
  AR      arch/x86/power/built-in.a
  CC      drivers/video/aperture.o
  CC      arch/x86/entry/vdso/vdso32/vgetcpu.o
  CC      net/core/skbuff.o
  CC      arch/x86/lib/misc.o
  CC      arch/x86/lib/pc-conf-reg.o
  CC      arch/x86/kernel/apic/apic_noop.o
  HOSTCC  arch/x86/entry/vdso/vdso2c
  CC      arch/x86/kernel/acpi/cstate.o
  AR      drivers/char/ipmi/built-in.a
  CC      arch/x86/platform/intel/iosf_mbi.o
  CC      drivers/pci/pcie/aspm.o
  AR      drivers/pci/msi/built-in.a
  CC      arch/x86/mm/init_32.o
  CC      ipc/namespace.o
  CC      drivers/acpi/acpica/dsargs.o
  AS      arch/x86/lib/putuser.o
  CC      lib/crypto/mpi/generic_mpih-mul3.o
  ASN.1   crypto/asymmetric_keys/pkcs7.asn1.[ch]
  CC      drivers/pnp/pnpacpi/core.o
  CC      crypto/asymmetric_keys/pkcs7_trust.o
  AS      arch/x86/lib/retpoline.o
  AR      block/partitions/built-in.a
  CC      arch/x86/lib/string_32.o
  CC      block/bio.o
  CC      kernel/locking/spinlock.o
  CC      arch/x86/kernel/cpu/mtrr/cleanup.o
  CC      arch/x86/lib/strstr_32.o
  AR      drivers/acpi/pmic/built-in.a
  CC      arch/x86/events/core.o
  CC      security/lsm_audit.o
  AR      drivers/video/backlight/built-in.a
  CC      drivers/acpi/acpica/dscontrol.o
  CC      arch/x86/pci/direct.o
  CC      arch/x86/lib/usercopy.o
  CC      fs/notify/notification.o
  CC      crypto/api.o
  CC      security/keys/keyctl.o
  CC      drivers/pci/pcie/pme.o
  CC      fs/iomap/trace.o
  CC      net/ethernet/eth.o
  CC      arch/x86/entry/vdso/vdso32-setup.o
  AR      drivers/amba/built-in.a
  CC      crypto/asymmetric_keys/pkcs7_verify.o
  AS      arch/x86/kernel/head_32.o
  CC      arch/x86/kernel/cpu/mce/intel.o
  CC      sound/core/seq/seq_queue.o
  AS      arch/x86/platform/efi/efi_stub_32.o
  CC      lib/zlib_inflate/inffast.o
  CC      lib/zlib_deflate/deflate.o
  CC      mm/oom_kill.o
  CC      arch/x86/platform/efi/runtime-map.o
  AR      arch/x86/kernel/acpi/built-in.a
  CC      arch/x86/kernel/kprobes/opt.o
  CC      arch/x86/lib/usercopy_32.o
  CC      lib/lzo/lzo1x_compress.o
  AR      arch/x86/kernel/fpu/built-in.a
  CC      kernel/locking/osq_lock.o
  AS      arch/x86/entry/entry_32.o
  CC      lib/lz4/lz4_decompress.o
  CC      arch/x86/kernel/apic/ipi.o
  CC      drivers/video/cmdline.o
  CC      ipc/mq_sysctl.o
  CC      drivers/acpi/acpica/dsdebug.o
  CC      arch/x86/kernel/cpu/topology_ext.o
  CC      lib/zstd/zstd_decompress_module.o
  CC      lib/zlib_inflate/inflate.o
  VDSO    arch/x86/entry/vdso/vdso32.so.dbg
  CC      lib/lzo/lzo1x_decompress_safe.o
  CC      lib/crypto/mpi/generic_mpih-rshift.o
  AR      drivers/pci/switch/built-in.a
  CC      drivers/pnp/pnpacpi/rsparser.o
  OBJCOPY arch/x86/entry/vdso/vdso32.so
  VDSO2C  arch/x86/entry/vdso/vdso-image-32.c
  CC      arch/x86/entry/vdso/vdso-image-32.o
  AR      arch/x86/kernel/cpu/microcode/built-in.a
  CC      drivers/pnp/core.o
  CC      security/device_cgroup.o
  AR      arch/x86/events/zhaoxin/built-in.a
  CC      fs/notify/group.o
  AR      arch/x86/events/amd/built-in.a
  CC      sound/core/memory.o
  CC      kernel/locking/qspinlock.o
  AR      arch/x86/platform/intel/built-in.a
  CC      arch/x86/lib/msr-smp.o
  CC      arch/x86/pci/mmconfig-shared.o
  CC      crypto/asymmetric_keys/x509.asn1.o
  CC      arch/x86/kernel/cpu/mtrr/amd.o
  CC      crypto/asymmetric_keys/x509_akid.asn1.o
  CC      arch/x86/lib/cache-smp.o
  CC      crypto/asymmetric_keys/x509_cert_parser.o
  CC      arch/x86/lib/msr.o
  AR      arch/x86/entry/vdso/built-in.a
  CC      drivers/acpi/acpica/dsfield.o
  CC      arch/x86/entry/syscall_32.o
  CC      arch/x86/mm/fault.o
  CC      lib/zstd/decompress/huf_decompress.o
  AR      ipc/built-in.a
  CC      drivers/video/nomodeset.o
  CC      fs/quota/dquot.o
  CC      fs/notify/mark.o
  CC      arch/x86/kernel/cpu/mce/amd.o
  CC      arch/x86/kernel/cpu/mce/threshold.o
  CC      fs/notify/fdinfo.o
  CC      arch/x86/events/intel/bts.o
  CC      arch/x86/kernel/cpu/mtrr/cyrix.o
  CC      arch/x86/kernel/apic/vector.o
  AR      lib/lzo/built-in.a
  CC      arch/x86/events/probe.o
  AR      arch/x86/platform/efi/built-in.a
  CC      sound/core/seq/seq_fifo.o
  AR      arch/x86/platform/intel-mid/built-in.a
  CC      lib/zlib_inflate/infutil.o
  AR      arch/x86/platform/intel-quark/built-in.a
  CC      kernel/locking/rtmutex_api.o
  AR      arch/x86/platform/olpc/built-in.a
  CC      lib/zlib_deflate/deftree.o
  CC      lib/crypto/mpi/generic_mpih-sub1.o
  AR      drivers/pci/pcie/built-in.a
  CC      drivers/pci/access.o
  AR      arch/x86/platform/scx200/built-in.a
  CC      kernel/power/qos.o
  AR      arch/x86/platform/ts5500/built-in.a
  AR      arch/x86/platform/uv/built-in.a
  CC      mm/fadvise.o
  AR      arch/x86/platform/built-in.a
  AR      arch/x86/kernel/kprobes/built-in.a
  CC      fs/iomap/iter.o
  AR      drivers/clk/actions/built-in.a
  AR      drivers/clk/analogbits/built-in.a
  AR      drivers/clk/bcm/built-in.a
  CC      drivers/dma/dw/core.o
  AR      drivers/clk/imgtec/built-in.a
  CC      drivers/dma/hsu/hsu.o
  CC      drivers/video/hdmi.o
  AR      drivers/clk/imx/built-in.a
  AR      drivers/clk/ingenic/built-in.a
  CC      drivers/acpi/acpica/dsinit.o
  CC      drivers/dma/dw/dw.o
  AR      drivers/clk/mediatek/built-in.a
  CC      io_uring/notif.o
  AR      drivers/clk/microchip/built-in.a
  AR      drivers/clk/mstar/built-in.a
  AR      drivers/clk/mvebu/built-in.a
  CC      lib/zlib_deflate/deflate_syms.o
  CC      arch/x86/kernel/apic/init.o
  AR      drivers/clk/ralink/built-in.a
  CC      security/keys/permission.o
  CC      crypto/asymmetric_keys/pkcs7.asn1.o
  AR      drivers/clk/renesas/built-in.a
  CC      arch/x86/events/intel/ds.o
  AR      drivers/clk/socfpga/built-in.a
  CC      drivers/acpi/dptf/int340x_thermal.o
  AR      drivers/clk/sophgo/built-in.a
  CC      fs/iomap/buffered-io.o
  CC      crypto/asymmetric_keys/pkcs7_parser.o
  AR      drivers/clk/sprd/built-in.a
  AR      drivers/clk/starfive/built-in.a
  AR      drivers/clk/sunxi-ng/built-in.a
  AR      drivers/clk/ti/built-in.a
  AR      drivers/clk/versatile/built-in.a
  AR      drivers/clk/xilinx/built-in.a
  AR      drivers/clk/built-in.a
  CC      lib/zlib_inflate/inftrees.o
  CC      drivers/pci/bus.o
  AR      drivers/pnp/pnpacpi/built-in.a
  CC      drivers/pnp/card.o
  AR      net/ethernet/built-in.a
  CC      lib/crypto/arc4.o
  AR      sound/i2c/other/built-in.a
  AR      sound/i2c/built-in.a
  CC      kernel/sched/build_policy.o
  CC      lib/zlib_inflate/inflate_syms.o
  CC      drivers/acpi/acpica/dsmethod.o
  AS      arch/x86/lib/msr-reg.o
  CC      arch/x86/pci/fixup.o
  CC      mm/maccess.o
  CC      arch/x86/kernel/cpu/mtrr/centaur.o
  CC      arch/x86/lib/msr-reg-export.o
  CC      sound/core/seq/seq_prioq.o
  CC      lib/crypto/mpi/generic_mpih-add1.o
  CC      block/elevator.o
  AR      lib/zlib_deflate/built-in.a
  AR      lib/lz4/built-in.a
  CC      arch/x86/kernel/cpu/mtrr/legacy.o
  CC      drivers/pci/probe.o
  CC      security/keys/process_keys.o
  CC      security/keys/request_key.o
  AR      drivers/acpi/dptf/built-in.a
  CC      arch/x86/events/intel/knc.o
  CC      arch/x86/entry/common.o
  AR      fs/notify/built-in.a
  CC      arch/x86/mm/ioremap.o
  AS      arch/x86/lib/hweight.o
  CC      arch/x86/lib/iomem.o
  AR      crypto/asymmetric_keys/built-in.a
  AS      arch/x86/entry/thunk.o
  CC      security/selinux/netlink.o
  CC      crypto/cipher.o
  CC      arch/x86/pci/acpi.o
  CC      drivers/acpi/x86/apple.o
  CC      security/keys/request_key_auth.o
  CC      arch/x86/events/utils.o
  AR      drivers/soc/apple/built-in.a
  AR      drivers/soc/aspeed/built-in.a
  AR      lib/zlib_inflate/built-in.a
  AR      drivers/soc/bcm/built-in.a
  AR      sound/drivers/opl3/built-in.a
  AR      sound/drivers/opl4/built-in.a
  AR      drivers/soc/fsl/built-in.a
  CC      drivers/acpi/x86/cmos_rtc.o
  AR      sound/drivers/mpu401/built-in.a
  AR      drivers/soc/fujitsu/built-in.a
  AR      drivers/soc/hisilicon/built-in.a
  AR      sound/drivers/vx/built-in.a
  CC      fs/iomap/direct-io.o
  CC      security/keys/user_defined.o
  AR      sound/drivers/pcsp/built-in.a
  AR      drivers/soc/imx/built-in.a
  AR      sound/drivers/built-in.a
  CC      security/keys/proc.o
  CC      crypto/compress.o
  AR      drivers/soc/ixp4xx/built-in.a
  CC      kernel/sched/build_utility.o
  AR      drivers/soc/loongson/built-in.a
  AR      drivers/soc/mediatek/built-in.a
  AR      drivers/soc/microchip/built-in.a
  AR      drivers/soc/nuvoton/built-in.a
  AR      drivers/video/built-in.a
  CC      kernel/printk/printk.o
  AR      drivers/soc/pxa/built-in.a
  AR      drivers/dma/hsu/built-in.a
  CC      kernel/irq/irqdesc.o
  CC      kernel/locking/qrwlock.o
  CC      drivers/pnp/driver.o
  AR      drivers/soc/amlogic/built-in.a
  CC      drivers/acpi/acpica/dsmthdat.o
  CC      kernel/irq/handle.o
  AR      drivers/soc/qcom/built-in.a
  CC      lib/zstd/decompress/zstd_ddict.o
  CC      arch/x86/mm/extable.o
  AR      drivers/soc/renesas/built-in.a
  AR      drivers/soc/rockchip/built-in.a
  AR      drivers/soc/sunxi/built-in.a
  AR      drivers/soc/ti/built-in.a
  AR      drivers/soc/versatile/built-in.a
  AR      drivers/soc/xilinx/built-in.a
  AR      drivers/soc/built-in.a
  CC      kernel/irq/manage.o
  AR      arch/x86/kernel/cpu/mtrr/built-in.a
  CC      fs/proc/task_mmu.o
  CC      lib/zstd/decompress/zstd_decompress.o
  AR      sound/isa/ad1816a/built-in.a
  CC      kernel/power/main.o
  CC      arch/x86/lib/atomic64_32.o
  AR      sound/isa/ad1848/built-in.a
  CC      fs/kernfs/mount.o
  AR      sound/isa/cs423x/built-in.a
  AR      sound/isa/es1688/built-in.a
  AR      sound/isa/galaxy/built-in.a
  AR      sound/isa/gus/built-in.a
  AR      sound/isa/msnd/built-in.a
  CC      arch/x86/lib/inat.o
  CC      lib/crypto/mpi/mpicoder.o
  CC      drivers/dma/dw/idma32.o
  AR      sound/isa/opti9xx/built-in.a
  AR      sound/isa/sb/built-in.a
  AR      sound/isa/wavefront/built-in.a
  AR      sound/isa/wss/built-in.a
  CC      fs/kernfs/inode.o
  AR      sound/isa/built-in.a
  CC      sound/core/seq/seq_timer.o
  CC      mm/page-writeback.o
  CC      fs/kernfs/dir.o
  CC      io_uring/tctx.o
  AR      arch/x86/kernel/cpu/mce/built-in.a
  AR      arch/x86/lib/built-in.a
  CC      arch/x86/kernel/cpu/topology_amd.o
  AR      arch/x86/lib/lib.a
  CC      fs/kernfs/file.o
  CC      mm/folio-compat.o
  CC      drivers/acpi/acpica/dsobject.o
  CC      block/blk-core.o
  AR      kernel/locking/built-in.a
  CC      arch/x86/kernel/apic/hw_nmi.o
  CC      arch/x86/kernel/cpu/common.o
  CC      lib/crypto/gf128mul.o
  CC      drivers/acpi/x86/lpss.o
  CC      crypto/algapi.o
  CC      lib/xz/xz_dec_syms.o
  CC      fs/proc/inode.o
  AR      drivers/dma/idxd/built-in.a
  AR      arch/x86/entry/built-in.a
  CC      arch/x86/events/intel/lbr.o
  CC      drivers/dma/dw/acpi.o
  CC      arch/x86/events/intel/p4.o
  CC      arch/x86/kernel/head32.o
  CC      fs/kernfs/symlink.o
  CC      drivers/pnp/resource.o
  CC      fs/sysfs/file.o
  CC      security/selinux/nlmsgtab.o
  CC      arch/x86/pci/legacy.o
  CC      fs/devpts/inode.o
  CC      security/keys/sysctl.o
  CC      lib/dim/dim.o
  CC      fs/quota/quota_v2.o
  CC      lib/zstd/decompress/zstd_decompress_block.o
  CC      drivers/acpi/acpica/dsopcode.o
  CC      drivers/acpi/acpica/dspkginit.o
  CC      lib/xz/xz_dec_stream.o
  CC      arch/x86/mm/mmap.o
  CC      lib/crypto/mpi/mpi-add.o
  CC      sound/core/control.o
  CC      lib/dim/net_dim.o
  CC      fs/iomap/fiemap.o
  CC      drivers/pci/host-bridge.o
  CC      security/selinux/netif.o
  CC      arch/x86/kernel/apic/io_apic.o
  CC      sound/core/seq/seq_system.o
  CC      sound/core/seq/seq_ports.o
  CC      block/blk-sysfs.o
  CC      arch/x86/kernel/ebda.o
  CC      lib/crypto/mpi/mpi-bit.o
  CC      io_uring/filetable.o
  AR      drivers/dma/dw/built-in.a
  AR      drivers/dma/amd/built-in.a
  CC      drivers/acpi/x86/s2idle.o
  AR      drivers/dma/mediatek/built-in.a
  CC      lib/fonts/fonts.o
  AR      drivers/dma/qcom/built-in.a
  AR      sound/pci/ac97/built-in.a
  CC      sound/core/misc.o
  CC      kernel/power/console.o
  AR      drivers/dma/stm32/built-in.a
  CC      security/keys/keyctl_pkey.o
  AR      sound/pci/ali5451/built-in.a
  CC      arch/x86/pci/irq.o
  AR      drivers/dma/ti/built-in.a
  AR      sound/pci/asihpi/built-in.a
  CC      drivers/acpi/x86/utils.o
  AR      drivers/dma/xilinx/built-in.a
  CC      drivers/dma/dmaengine.o
  AR      sound/pci/au88x0/built-in.a
  CC      drivers/acpi/acpica/dsutils.o
  CC      drivers/pnp/manager.o
  AR      sound/pci/aw2/built-in.a
  AR      sound/pci/ctxfi/built-in.a
  AR      sound/pci/ca0106/built-in.a
  AR      sound/pci/cs46xx/built-in.a
  CC      kernel/irq/spurious.o
  AR      sound/pci/cs5535audio/built-in.a
  CC      net/core/datagram.o
  AR      sound/pci/lola/built-in.a
  CC      fs/sysfs/dir.o
  AR      sound/pci/lx6464es/built-in.a
  AR      fs/devpts/built-in.a
  AR      sound/pci/echoaudio/built-in.a
  CC      crypto/scatterwalk.o
  CC      fs/quota/quota_tree.o
  AR      sound/pci/emu10k1/built-in.a
  AR      net/802/built-in.a
  CC      arch/x86/events/intel/p6.o
  CC      sound/pci/hda/hda_bind.o
  CC      lib/xz/xz_dec_lzma2.o
  CC      sound/pci/hda/hda_codec.o
  AR      fs/kernfs/built-in.a
  CC      drivers/pnp/support.o
  CC      arch/x86/mm/pgtable.o
  CC      lib/xz/xz_dec_bcj.o
  CC      drivers/acpi/acpica/dswexec.o
  CC      arch/x86/events/rapl.o
  CC      lib/fonts/font_8x16.o
  CC      lib/dim/rdma_dim.o
  CC      fs/iomap/seek.o
  CC      drivers/pci/remove.o
  CC      arch/x86/pci/common.o
  CC      arch/x86/pci/early.o
  CC      fs/sysfs/symlink.o
  CC      arch/x86/kernel/apic/msi.o
  CC      lib/crypto/mpi/mpi-cmp.o
  CC      kernel/irq/resend.o
  CC      sound/core/seq/seq_info.o
  CC      fs/proc/root.o
  CC      sound/pci/hda/hda_jack.o
  CC      arch/x86/kernel/cpu/rdrand.o
  AR      security/keys/built-in.a
  AR      sound/pci/ice1712/built-in.a
  CC      fs/iomap/swapfile.o
  CC      lib/crypto/blake2s.o
  CC      lib/zstd/zstd_common_module.o
  CC      lib/argv_split.o
  CC      net/core/stream.o
  CC      kernel/power/process.o
  AR      lib/fonts/built-in.a
  CC      arch/x86/kernel/cpu/match.o
  AR      lib/dim/built-in.a
  AR      sound/ppc/built-in.a
  CC      arch/x86/kernel/cpu/bugs.o
  CC      arch/x86/mm/physaddr.o
  CC      drivers/acpi/acpica/dswload.o
  CC      net/sched/sch_generic.o
  CC      crypto/proc.o
  CC      drivers/pnp/interface.o
  CC      crypto/aead.o
  CC      io_uring/rw.o
  CC      crypto/geniv.o
  CC      drivers/acpi/x86/blacklist.o
  CC      mm/readahead.o
  AR      sound/arm/built-in.a
  CC      kernel/printk/printk_safe.o
  CC      lib/bug.o
  AR      lib/xz/built-in.a
  CC      arch/x86/events/intel/pt.o
  CC      security/selinux/netnode.o
  CC      arch/x86/events/msr.o
  CC      sound/core/device.o
  CC      kernel/irq/chip.o
  CC      sound/pci/hda/hda_auto_parser.o
  CC      net/core/scm.o
  CC      drivers/acpi/tables.o
  CC      lib/crypto/mpi/mpi-sub-ui.o
  CC      sound/core/info.o
  CC      kernel/power/suspend.o
  CC      fs/quota/quota.o
  CC      fs/proc/base.o
  CC      net/netlink/af_netlink.o
  CC      drivers/pci/pci.o
  CC      block/blk-flush.o
  CC      drivers/acpi/acpica/dswload2.o
  CC      drivers/acpi/acpica/dswscope.o
  CC      sound/core/seq/seq_dummy.o
  CC      fs/sysfs/mount.o
  CC      kernel/rcu/update.o
  CC      arch/x86/pci/bus_numa.o
  CC      lib/zstd/common/debug.o
  CC      arch/x86/pci/amd_bus.o
  CC      drivers/virtio/virtio.o
  CC      drivers/dma/virt-dma.o
  AR      drivers/acpi/x86/built-in.a
  CC      arch/x86/mm/tlb.o
  CC      drivers/virtio/virtio_ring.o
  CC      lib/zstd/common/entropy_common.o
  AR      fs/iomap/built-in.a
  CC      lib/zstd/common/error_private.o
  CC      drivers/pnp/quirks.o
  CC      net/core/gen_stats.o
  CC      arch/x86/mm/cpu_entry_area.o
  CC      arch/x86/kernel/apic/probe_32.o
  CC      sound/pci/hda/hda_sysfs.o
  CC      kernel/printk/nbcon.o
  CC      arch/x86/kernel/platform-quirks.o
  CC      drivers/virtio/virtio_anchor.o
  CC      drivers/acpi/acpica/dswstate.o
  CC      fs/netfs/buffered_read.o
  CC      arch/x86/events/intel/uncore.o
  CC      lib/crypto/mpi/mpi-div.o
  CC      lib/zstd/common/fse_decompress.o
  CC      block/blk-settings.o
  CC      crypto/lskcipher.o
  AR      sound/core/seq/built-in.a
  CC      block/blk-ioc.o
  AR      net/bpf/built-in.a
  CC      drivers/virtio/virtio_pci_modern_dev.o
  CC      lib/zstd/common/zstd_common.o
  CC      mm/swap.o
  CC      lib/buildid.o
  CC      lib/clz_tab.o
  CC      fs/netfs/buffered_write.o
  AR      sound/sh/built-in.a
  CC      drivers/tty/vt/vt_ioctl.o
  CC      sound/core/isadma.o
  AR      arch/x86/kernel/apic/built-in.a
  CC      drivers/dma/acpi-dma.o
  CC      kernel/irq/dummychip.o
  CC      fs/netfs/direct_read.o
  CC      net/core/gen_estimator.o
  CC      net/ethtool/ioctl.o
  CC      drivers/virtio/virtio_pci_legacy_dev.o
  CC      kernel/rcu/sync.o
  CC      drivers/acpi/acpica/evevent.o
  AR      arch/x86/pci/built-in.a
  CC      security/selinux/netport.o
  CC      fs/sysfs/group.o
  CC      fs/ext4/balloc.o
  CC      kernel/printk/printk_ringbuffer.o
  CC      drivers/pci/pci-driver.o
  CC      net/netlink/genetlink.o
  CC      net/sched/sch_mq.o
  CC      fs/proc/generic.o
  CC      security/selinux/status.o
  CC      drivers/pnp/system.o
  AR      lib/zstd/built-in.a
  CC      net/netlink/policy.o
  CC      io_uring/net.o
  CC      fs/quota/kqid.o
  AR      sound/pci/korg1212/built-in.a
  CC      drivers/tty/vt/vc_screen.o
  CC      arch/x86/kernel/cpu/aperfmperf.o
  CC      kernel/power/hibernate.o
  CC      fs/ext4/bitmap.o
  CC      lib/crypto/mpi/mpi-mod.o
  CC      sound/core/vmaster.o
  CC      sound/pci/hda/hda_controller.o
  CC      arch/x86/mm/maccess.o
  CC      mm/truncate.o
  CC      fs/jbd2/transaction.o
  CC      kernel/irq/devres.o
  CC      drivers/acpi/acpica/evgpe.o
  CC      drivers/acpi/acpica/evgpeblk.o
  CC      drivers/virtio/virtio_pci_modern.o
  CC      lib/crypto/blake2s-generic.o
  CC      block/blk-map.o
  CC      block/blk-merge.o
  CC      arch/x86/mm/pgprot.o
  AR      kernel/sched/built-in.a
  AR      sound/pci/mixart/built-in.a
  CC      kernel/irq/autoprobe.o
  AR      sound/synth/emux/built-in.a
  AR      sound/synth/built-in.a
  CC      arch/x86/kernel/cpu/cpuid-deps.o
  CC      crypto/skcipher.o
  CC      fs/quota/netlink.o
  AR      drivers/dma/built-in.a
  AR      drivers/pnp/built-in.a
  CC      security/selinux/ss/ebitmap.o
  CC      net/sched/sch_frag.o
  AR      fs/sysfs/built-in.a
  CC      io_uring/poll.o
  CC      arch/x86/kernel/process_32.o
  CC      drivers/virtio/virtio_pci_common.o
  CC      kernel/printk/sysctl.o
  CC      lib/crypto/mpi/mpi-mul.o
  CC      drivers/virtio/virtio_pci_legacy.o
  CC      drivers/tty/vt/selection.o
  CC      drivers/acpi/acpica/evgpeinit.o
  CC      sound/core/ctljack.o
  CC      kernel/power/snapshot.o
  CC      fs/jbd2/commit.o
  CC      net/core/net_namespace.o
  CC      net/core/secure_seq.o
  CC      arch/x86/events/intel/uncore_nhmex.o
  CC      fs/proc/array.o
  CC      fs/netfs/direct_write.o
  CC      crypto/seqiv.o
  CC      fs/proc/fd.o
  CC      drivers/char/hw_random/core.o
  CC      drivers/tty/hvc/hvc_console.o
  CC      arch/x86/kernel/cpu/umwait.o
  CC      drivers/tty/serial/8250/8250_core.o
  AR      drivers/tty/ipwireless/built-in.a
  CC      kernel/irq/irqdomain.o
  CC      lib/crypto/sha1.o
  CC      drivers/tty/serial/8250/8250_platform.o
  AR      kernel/printk/built-in.a
  CC      arch/x86/mm/pgtable_32.o
  CC      kernel/power/swap.o
  CC      io_uring/eventfd.o
  CC      drivers/tty/serial/serial_core.o
  CC      net/ethtool/common.o
  CC      sound/core/jack.o
  CC      drivers/acpi/acpica/evgpeutil.o
  CC      drivers/char/hw_random/intel-rng.o
  CC      mm/vmscan.o
  CC      net/core/flow_dissector.o
  CC      lib/crypto/mpi/mpih-cmp.o
  CC      drivers/char/agp/backend.o
  AR      fs/quota/built-in.a
  CC      fs/netfs/iterator.o
  AR      kernel/livepatch/built-in.a
  CC      fs/ext4/block_validity.o
  CC      lib/crypto/mpi/mpih-div.o
  CC      mm/shrinker.o
  CC      net/sched/sch_api.o
  CC      drivers/tty/vt/keyboard.o
  CC      fs/netfs/locking.o
  CC      arch/x86/events/intel/uncore_snb.o
  CC      drivers/acpi/acpica/evglock.o
  CC      drivers/virtio/virtio_pci_admin_legacy_io.o
  AR      net/netlink/built-in.a
  CC      lib/crypto/mpi/mpih-mul.o
  CC      kernel/rcu/srcutree.o
  CC      sound/pci/hda/hda_proc.o
  CC      lib/crypto/sha256.o
  MKCAP   arch/x86/kernel/cpu/capflags.c
  CC      arch/x86/mm/iomap_32.o
  CC      crypto/echainiv.o
  CC      drivers/char/agp/generic.o
  CC      drivers/pci/search.o
  CC      fs/jbd2/recovery.o
  AR      drivers/iommu/amd/built-in.a
  AR      drivers/iommu/intel/built-in.a
  CC      security/selinux/ss/hashtab.o
  CC      drivers/tty/serial/8250/8250_pnp.o
  CC      arch/x86/mm/hugetlbpage.o
  CC      mm/shmem.o
  AR      drivers/iommu/arm/arm-smmu/built-in.a
  AR      drivers/iommu/arm/arm-smmu-v3/built-in.a
  AR      drivers/iommu/arm/built-in.a
  AR      drivers/iommu/iommufd/built-in.a
  AR      drivers/tty/hvc/built-in.a
  CC      io_uring/uring_cmd.o
  AR      drivers/iommu/riscv/built-in.a
  AR      sound/usb/misc/built-in.a
  CC      drivers/iommu/iommu.o
  CC      fs/proc/proc_tty.o
  AR      sound/usb/usx2y/built-in.a
  CC      sound/core/hwdep.o
  AR      sound/usb/caiaq/built-in.a
  AR      sound/usb/6fire/built-in.a
  AR      sound/usb/hiface/built-in.a
  CC      kernel/power/user.o
  AR      sound/usb/bcd2000/built-in.a
  CC      drivers/char/hw_random/amd-rng.o
  AR      sound/usb/built-in.a
  CC      kernel/power/poweroff.o
  CC      arch/x86/mm/dump_pagetables.o
  AR      drivers/gpu/host1x/built-in.a
  CC      drivers/acpi/acpica/evhandler.o
  CC      drivers/pci/rom.o
  CC      block/blk-timeout.o
  AR      sound/pci/nm256/built-in.a
  CC      io_uring/openclose.o
  CC      lib/cmdline.o
  AR      drivers/gpu/drm/tests/built-in.a
  AR      drivers/gpu/drm/arm/built-in.a
  AR      drivers/gpu/drm/clients/built-in.a
  CC      drivers/gpu/drm/display/drm_display_helper_mod.o
  CC      drivers/tty/tty_io.o
  CC      kernel/irq/proc.o
  CC      fs/ramfs/inode.o
  CC      security/selinux/ss/symtab.o
  CC      fs/jbd2/checkpoint.o
  AR      sound/pci/oxygen/built-in.a
  CC      net/sched/sch_blackhole.o
  CC      drivers/acpi/acpica/evmisc.o
  CC      drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
  CC      fs/ext4/dir.o
  CC      arch/x86/events/intel/uncore_snbep.o
  CC      drivers/virtio/virtio_input.o
  CC      net/netfilter/core.o
  CC      net/netfilter/nf_log.o
  CC      net/ipv4/netfilter/nf_defrag_ipv4.o
  CC      crypto/ahash.o
  CC      lib/crypto/mpi/mpi-pow.o
  CC      net/ethtool/netlink.o
  CC      drivers/acpi/osi.o
  CC      fs/netfs/main.o
  CC      net/ipv4/route.o
  CC      security/selinux/ss/sidtab.o
  CC      net/ethtool/bitset.o
  CC      block/blk-lib.o
  CC      drivers/iommu/iommu-traces.o
  CC      fs/ramfs/file-mmu.o
  CC      fs/proc/cmdline.o
  CC      net/netfilter/nf_queue.o
  CC      drivers/tty/serial/8250/8250_rsa.o
  CC      drivers/acpi/acpica/evregion.o
  CC      sound/core/timer.o
  CC      drivers/char/hw_random/geode-rng.o
  CC      drivers/connector/cn_queue.o
  CC      drivers/pci/setup-res.o
  AR      kernel/power/built-in.a
  CC      drivers/char/hw_random/via-rng.o
  CC      drivers/connector/connector.o
  CC      arch/x86/mm/highmem_32.o
  CC      drivers/connector/cn_proc.o
  CC      drivers/tty/vt/vt.o
  CC      drivers/char/agp/isoch.o
  CC      kernel/rcu/tree.o
  CC      sound/pci/hda/hda_hwdep.o
  CC      fs/netfs/misc.o
  CC      kernel/irq/migration.o
  CC      fs/netfs/objects.o
  CC      arch/x86/kernel/cpu/powerflags.o
  CC      drivers/acpi/acpica/evrgnini.o
  AR      sound/pci/pcxhr/built-in.a
  CC      security/selinux/ss/avtab.o
  CC      net/xfrm/xfrm_policy.o
  CC      drivers/virtio/virtio_dma_buf.o
  CC      fs/proc/consoles.o
  CC      io_uring/sqpoll.o
  CC      lib/crypto/mpi/mpiutil.o
  CC      drivers/gpu/drm/display/drm_dp_helper.o
  CC      net/unix/af_unix.o
  CC      drivers/tty/serial/8250/8250_port.o
  AR      fs/ramfs/built-in.a
  CC      io_uring/xattr.o
  CC      block/blk-mq.o
  CC      fs/jbd2/revoke.o
  AR      drivers/char/hw_random/built-in.a
  CC      fs/ext4/ext4_jbd2.o
  CC      drivers/acpi/osl.o
  CC      net/core/sysctl_net_core.o
  CC      drivers/pci/irq.o
  CC      kernel/irq/cpuhotplug.o
  AR      arch/x86/mm/built-in.a
  CC      lib/cpumask.o
  CC      crypto/shash.o
  CC      net/ipv4/netfilter/nf_reject_ipv4.o
  CC      sound/pci/hda/hda_intel.o
  CC      drivers/acpi/acpica/evsci.o
  CC      fs/hugetlbfs/inode.o
  CC      net/sched/cls_api.o
  AR      sound/firewire/built-in.a
  CC      drivers/gpu/drm/display/drm_dp_mst_topology.o
  CC      drivers/char/agp/amd64-agp.o
  COPY    drivers/tty/vt/defkeymap.c
  CC      net/netfilter/nf_sockopt.o
  CC      mm/util.o
  CC      fs/jbd2/journal.o
  CC      fs/proc/cpuinfo.o
  AR      drivers/virtio/built-in.a
  CC      kernel/dma/mapping.o
  CC      drivers/gpu/drm/ttm/ttm_tt.o
  CC      drivers/gpu/drm/ttm/ttm_bo.o
  CC      kernel/entry/common.o
  CC      drivers/iommu/iommu-sysfs.o
  CC      net/ethtool/strset.o
  AR      lib/crypto/mpi/built-in.a
  AR      lib/crypto/built-in.a
  CC      io_uring/nop.o
  CC      drivers/acpi/acpica/evxface.o
  CC      drivers/gpu/drm/ttm/ttm_bo_util.o
  AR      drivers/connector/built-in.a
  CC      drivers/gpu/drm/ttm/ttm_bo_vm.o
  CC      drivers/gpu/drm/ttm/ttm_module.o
  CC      net/core/dev.o
  CC      net/core/dev_addr_lists.o
  CC      sound/core/hrtimer.o
  CC      lib/ctype.o
  CC      drivers/pci/vpd.o
  CC      lib/dec_and_lock.o
  CC      fs/netfs/read_collect.o
  CC      kernel/irq/pm.o
  CC      kernel/entry/syscall_user_dispatch.o
  CC      net/unix/garbage.o
  CC      drivers/char/agp/intel-agp.o
  CC      lib/decompress.o
  CC      fs/proc/devices.o
  CC      fs/ext4/extents.o
  CC      lib/decompress_bunzip2.o
  CC      security/selinux/ss/policydb.o
  CC      drivers/acpi/acpica/evxfevnt.o
  CC      crypto/akcipher.o
  CC      drivers/iommu/dma-iommu.o
  CC      security/selinux/ss/services.o
  CC      security/selinux/ss/conditional.o
  CC      arch/x86/events/intel/uncore_discovery.o
  CC      drivers/tty/vt/consolemap.o
  CC      sound/core/pcm.o
  CC      net/netfilter/utils.o
  CC      arch/x86/kernel/cpu/topology.o
  CC      arch/x86/kernel/signal.o
  CC      drivers/tty/serial/serial_base_bus.o
  CC      mm/mmzone.o
  CC      io_uring/fs.o
  CC      io_uring/splice.o
  CC      kernel/rcu/rcu_segcblist.o
  CC      drivers/acpi/acpica/evxfgpe.o
  CC      net/ipv4/netfilter/ip_tables.o
  CC      fs/proc/interrupts.o
  AR      kernel/entry/built-in.a
  CC      net/ethtool/linkinfo.o
  CC      kernel/irq/msi.o
  CC      security/selinux/ss/mls.o
  CC      drivers/pci/setup-bus.o
  CC      drivers/gpu/drm/i915/i915_config.o
  CC      drivers/gpu/drm/ttm/ttm_execbuf_util.o
  CC      drivers/char/agp/intel-gtt.o
  AR      sound/pci/hda/built-in.a
  AR      sound/pci/riptide/built-in.a
  AR      sound/pci/rme9652/built-in.a
  AR      sound/pci/trident/built-in.a
  AR      sound/pci/ymfpci/built-in.a
  CC      drivers/gpu/drm/display/drm_dsc_helper.o
  AR      sound/pci/vx222/built-in.a
  CC      drivers/tty/n_tty.o
  AR      sound/pci/built-in.a
  CC      lib/decompress_inflate.o
  CC      drivers/tty/serial/8250/8250_dma.o
  CC      drivers/tty/tty_ioctl.o
  AR      fs/hugetlbfs/built-in.a
  CC      fs/netfs/read_pgpriv2.o
  CC      block/blk-mq-tag.o
  CC      net/xfrm/xfrm_state.o
  CC      drivers/gpu/drm/i915/i915_driver.o
  CC      drivers/acpi/acpica/evxfregn.o
  CC      arch/x86/kernel/signal_32.o
  CC      crypto/sig.o
  CC      net/sched/act_api.o
  CC      mm/vmstat.o
  CC      drivers/gpu/drm/i915/i915_drm_client.o
  CC      drivers/gpu/drm/display/drm_hdcp_helper.o
  CC      fs/proc/loadavg.o
  AR      drivers/gpu/vga/built-in.a
  CC      arch/x86/kernel/traps.o
  CC      drivers/pci/vc.o
  HOSTCC  drivers/tty/vt/conmakehash
  CC      sound/core/pcm_native.o
  CC      security/selinux/ss/context.o
  CC      arch/x86/events/intel/cstate.o
  CC      net/unix/sysctl_net_unix.o
  CC      sound/core/pcm_lib.o
  CC      io_uring/sync.o
  CC      lib/decompress_unlz4.o
  CC      drivers/gpu/drm/ttm/ttm_range_manager.o
  CC      drivers/acpi/acpica/exconcat.o
  CC      drivers/tty/vt/defkeymap.o
  CC      drivers/acpi/acpica/exconfig.o
  CC      net/ethtool/linkmodes.o
  CC      net/netfilter/nfnetlink.o
  CC      drivers/iommu/iova.o
  CONMK   drivers/tty/vt/consolemap_deftbl.c
  CC      drivers/tty/vt/consolemap_deftbl.o
  CC      kernel/dma/direct.o
  AR      drivers/tty/vt/built-in.a
  CC      arch/x86/kernel/cpu/proc.o
  CC      fs/proc/meminfo.o
  CC      net/netfilter/nfnetlink_log.o
  CC      drivers/tty/serial/serial_ctrl.o
  CC      drivers/tty/serial/8250/8250_dwlib.o
  CC      kernel/irq/affinity.o
  AR      drivers/char/agp/built-in.a
  CC      drivers/char/mem.o
  CC      drivers/char/random.o
  CC      drivers/tty/serial/8250/8250_pcilib.o
  CC      kernel/dma/ops_helpers.o
  CC      crypto/kpp.o
  AR      drivers/gpu/drm/renesas/rcar-du/built-in.a
  CC      mm/backing-dev.o
  AR      drivers/gpu/drm/omapdrm/built-in.a
  AR      drivers/gpu/drm/renesas/rz-du/built-in.a
  CC      net/core/dst.o
  CC      fs/netfs/read_retry.o
  AR      drivers/gpu/drm/renesas/built-in.a
  CC      fs/ext4/extents_status.o
  CC      drivers/tty/serial/serial_port.o
  CC      lib/decompress_unlzma.o
  CC      drivers/acpi/acpica/exconvrt.o
  CC      drivers/gpu/drm/display/drm_hdmi_helper.o
  AR      fs/jbd2/built-in.a
  CC      fs/proc/stat.o
  CC      drivers/gpu/drm/ttm/ttm_resource.o
  CC      net/ipv4/netfilter/iptable_filter.o
  CC      net/ipv4/netfilter/iptable_mangle.o
  AR      arch/x86/events/intel/built-in.a
  AR      arch/x86/events/built-in.a
  CC      net/netfilter/nf_conntrack_core.o
  CC      drivers/char/misc.o
  CC      kernel/dma/remap.o
  ASN.1   crypto/rsapubkey.asn1.[ch]
  CC      drivers/tty/serial/8250/8250_early.o
  CC      io_uring/msg_ring.o
  AR      net/unix/built-in.a
  CC      kernel/irq/matrix.o
  CC      mm/mm_init.o
  CC      kernel/module/main.o
  CC      kernel/time/time.o
  AR      drivers/gpu/drm/tilcdc/built-in.a
  CC      kernel/futex/core.o
  CC      arch/x86/kernel/cpu/feat_ctl.o
  CC      drivers/pci/mmap.o
  CC      drivers/acpi/acpica/excreate.o
  CC      arch/x86/kernel/cpu/intel.o
  CC      block/blk-stat.o
  CC      sound/core/pcm_misc.o
  CC      kernel/cgroup/cgroup.o
  CC      kernel/trace/trace_clock.o
  CC      kernel/bpf/core.o
  CC      sound/core/pcm_memory.o
  AR      drivers/iommu/built-in.a
  CC      net/sched/sch_fifo.o
  CC      fs/ext4/file.o
  CC      net/ethtool/rss.o
  CC      drivers/gpu/drm/i915/i915_getparam.o
  CC      drivers/gpu/drm/display/drm_scdc_helper.o
  CC      drivers/char/virtio_console.o
  CC      fs/proc/uptime.o
  ASN.1   crypto/rsaprivkey.asn1.[ch]
  CC      crypto/rsa.o
  CC      security/selinux/netlabel.o
  CC      lib/decompress_unlzo.o
  AR      kernel/rcu/built-in.a
  CC      drivers/acpi/acpica/exdebug.o
  CC      net/ipv4/netfilter/ipt_REJECT.o
  CC      net/xfrm/xfrm_hash.o
  CC      net/core/netevent.o
  CC      drivers/tty/serial/8250/8250_exar.o
  CC [M]  net/ipv4/netfilter/iptable_nat.o
  AR      kernel/dma/built-in.a
  CC      net/sched/cls_cgroup.o
  CC      drivers/gpu/drm/virtio/virtgpu_drv.o
  CC      fs/netfs/write_collect.o
  CC      net/ipv4/inetpeer.o
  CC      kernel/trace/ring_buffer.o
  CC      net/core/neighbour.o
  CC      drivers/pci/devres.o
  CC      drivers/gpu/drm/ttm/ttm_pool.o
  CC      kernel/time/timer.o
  CC      drivers/acpi/acpica/exdump.o
  CC      arch/x86/kernel/cpu/tsx.o
  CC      kernel/futex/syscalls.o
  CC      io_uring/advise.o
  CC      drivers/tty/serial/8250/8250_lpss.o
  CC      kernel/futex/pi.o
  CC      kernel/futex/requeue.o
  CC      drivers/pci/proc.o
  CC      drivers/char/hpet.o
  CC      drivers/acpi/utils.o
  CC      block/blk-mq-sysfs.o
  CC      arch/x86/kernel/cpu/intel_epb.o
  CC      fs/proc/util.o
  CC      drivers/gpu/drm/ttm/ttm_device.o
  CC      lib/decompress_unxz.o
  CC      net/ipv4/protocol.o
  CC      crypto/rsa_helper.o
  AR      drivers/gpu/drm/display/built-in.a
  CC      fs/fat/cache.o
  CC      drivers/acpi/acpica/exfield.o
  AR      kernel/irq/built-in.a
  CC      net/ethtool/linkstate.o
  CC      drivers/gpu/drm/i915/i915_ioctl.o
  CC      mm/percpu.o
  CC      sound/core/memalloc.o
  CC      kernel/time/hrtimer.o
  CC      drivers/gpu/drm/virtio/virtgpu_kms.o
  CC      arch/x86/kernel/idt.o
  CC      net/ipv6/netfilter/ip6_tables.o
  CC      drivers/tty/tty_ldisc.o
  CC      drivers/char/nvram.o
  CC      arch/x86/kernel/cpu/amd.o
  CC      crypto/rsa-pkcs1pad.o
  AR      sound/sparc/built-in.a
  CC      crypto/rsassa-pkcs1.o
  CC      drivers/gpu/drm/ttm/ttm_sys_manager.o
  CC      fs/proc/version.o
  CC      lib/decompress_unzstd.o
  CC      kernel/cgroup/rstat.o
  CC      drivers/acpi/acpica/exfldio.o
  CC      drivers/gpu/drm/virtio/virtgpu_gem.o
  CC      drivers/tty/serial/8250/8250_mid.o
  CC      net/xfrm/xfrm_input.o
  CC      net/sched/ematch.o
  CC      net/xfrm/xfrm_output.o
  AR      net/ipv4/netfilter/built-in.a
  CC      io_uring/epoll.o
  CC      net/ipv6/af_inet6.o
  AR      security/selinux/built-in.a
  AR      security/built-in.a
  CC      arch/x86/kernel/irq.o
  CC      block/blk-mq-cpumap.o
  CC      kernel/time/sleep_timeout.o
  AR      drivers/gpu/drm/imx/built-in.a
  AR      drivers/gpu/drm/i2c/built-in.a
  AR      drivers/gpu/drm/panel/built-in.a
  CC      net/core/rtnetlink.o
  CC      mm/slab_common.o
  CC      net/core/utils.o
  CC      drivers/pci/pci-sysfs.o
  CC      kernel/futex/waitwake.o
  CC      net/ipv6/anycast.o
  CC      fs/ext4/fsmap.o
  CC      arch/x86/kernel/irq_32.o
  CC      fs/netfs/write_issue.o
  CC      sound/core/pcm_timer.o
  CC      fs/fat/dir.o
  CC      net/ipv4/ip_input.o
  CC      drivers/gpu/drm/ttm/ttm_backup.o
  CC      crypto/acompress.o
  CC      fs/proc/softirqs.o
  CC      kernel/module/strict_rwx.o
  AR      drivers/gpu/drm/bridge/analogix/built-in.a
  AR      drivers/gpu/drm/bridge/cadence/built-in.a
  CC      lib/dump_stack.o
  CC      drivers/gpu/drm/virtio/virtgpu_vram.o
  AR      drivers/gpu/drm/bridge/imx/built-in.a
  CC      drivers/acpi/acpica/exmisc.o
  AR      drivers/gpu/drm/bridge/synopsys/built-in.a
  CC      block/blk-mq-sched.o
  CC      net/netfilter/nf_conntrack_standalone.o
  AR      drivers/gpu/drm/bridge/built-in.a
  CC      drivers/gpu/drm/i915/i915_irq.o
  CC      crypto/scompress.o
  CC      io_uring/statx.o
  AR      drivers/char/built-in.a
  CC      fs/fat/fatent.o
  CC      net/ethtool/debug.o
  CC      net/netfilter/nf_conntrack_expect.o
  CC      drivers/tty/tty_buffer.o
  CC      drivers/tty/serial/8250/8250_pci.o
  CC      net/packet/af_packet.o
  CC      drivers/gpu/drm/i915/i915_mitigations.o
  CC      drivers/gpu/drm/ttm/ttm_agp_backend.o
  CC      arch/x86/kernel/cpu/hygon.o
  CC      kernel/module/kmod.o
  AR      kernel/futex/built-in.a
  CC      net/xfrm/xfrm_sysctl.o
  CC      drivers/acpi/acpica/exmutex.o
  CC      sound/core/seq_device.o
  CC      fs/proc/namespaces.o
  AR      net/sched/built-in.a
  CC      net/ipv6/netfilter/ip6table_filter.o
  CC      net/core/link_watch.o
  CC      mm/compaction.o
  AR      sound/spi/built-in.a
  CC      drivers/gpu/drm/i915/i915_module.o
  CC      kernel/time/timekeeping.o
  CC      drivers/base/power/sysfs.o
  CC      lib/earlycpio.o
  CC      lib/extable.o
  CC      drivers/gpu/drm/virtio/virtgpu_display.o
  AR      kernel/bpf/built-in.a
  CC      drivers/block/loop.o
  CC      drivers/base/power/generic_ops.o
  CC      arch/x86/kernel/cpu/centaur.o
  CC      drivers/base/firmware_loader/builtin/main.o
  CC      drivers/acpi/acpica/exnames.o
  CC      drivers/base/power/common.o
  CC      fs/proc/self.o
  CC      drivers/pci/slot.o
  CC      io_uring/timeout.o
  CC      crypto/algboss.o
  AR      fs/netfs/built-in.a
  CC      drivers/tty/serial/earlycon.o
  CC      arch/x86/kernel/dumpstack_32.o
  CC      kernel/cgroup/namespace.o
  AR      drivers/gpu/drm/ttm/built-in.a
  CC      kernel/cgroup/cgroup-v1.o
  CC      block/ioctl.o
  AR      sound/core/built-in.a
  AR      drivers/base/firmware_loader/builtin/built-in.a
  AR      sound/parisc/built-in.a
  CC      drivers/base/firmware_loader/main.o
  CC      lib/flex_proportions.o
  CC      crypto/testmgr.o
  CC      net/ethtool/wol.o
  AR      sound/pcmcia/vx/built-in.a
  AR      sound/pcmcia/pdaudiocf/built-in.a
  AR      sound/pcmcia/built-in.a
  AR      sound/mips/built-in.a
  CC      drivers/base/power/qos.o
  AR      sound/soc/built-in.a
  CC      kernel/events/core.o
  CC      fs/fat/file.o
  AR      sound/atmel/built-in.a
  CC      sound/hda/hda_bus_type.o
  CC      sound/hda/hdac_bus.o
  CC      kernel/module/tree_lookup.o
  CC      drivers/base/regmap/regmap.o
  CC      drivers/acpi/acpica/exoparg1.o
  CC      arch/x86/kernel/cpu/transmeta.o
  CC      sound/hda/hdac_device.o
  CC      kernel/time/ntp.o
  CC      kernel/trace/trace.o
  CC      net/ipv4/ip_fragment.o
  CC      kernel/module/kallsyms.o
  CC      crypto/cmac.o
  AR      drivers/misc/cb710/built-in.a
  CC      drivers/misc/eeprom/eeprom_93cx6.o
  AR      drivers/gpu/drm/hisilicon/built-in.a
  CC      fs/isofs/namei.o
  CC      fs/nfs/client.o
  CC      fs/exportfs/expfs.o
  CC      fs/lockd/clntlock.o
  CC      fs/proc/thread_self.o
  CC      net/xfrm/xfrm_replay.o
  CC      net/netfilter/nf_conntrack_helper.o
  CC      drivers/gpu/drm/virtio/virtgpu_vq.o
  CC      drivers/pci/pci-acpi.o
  CC      lib/idr.o
  CC      drivers/tty/serial/8250/8250_pericom.o
  CC      fs/ext4/fsync.o
  CC      fs/nfs/dir.o
  CC      arch/x86/kernel/cpu/zhaoxin.o
  CC      drivers/base/regmap/regcache.o
  CC      mm/show_mem.o
  CC      net/ipv6/netfilter/ip6table_mangle.o
  CC      drivers/acpi/acpica/exoparg2.o
  CC      drivers/gpu/drm/i915/i915_params.o
  AR      drivers/misc/eeprom/built-in.a
  AR      drivers/misc/lis3lv02d/built-in.a
  CC      net/xfrm/xfrm_device.o
  AR      drivers/misc/cardreader/built-in.a
  CC      drivers/acpi/reboot.o
  AR      drivers/misc/keba/built-in.a
  AR      drivers/misc/built-in.a
  CC      fs/isofs/inode.o
  CC      crypto/hmac.o
  CC      crypto/crypto_null.o
  CC      block/genhd.o
  CC      fs/nls/nls_base.o
  CC      io_uring/fdinfo.o
  CC      fs/proc/proc_sysctl.o
  AR      fs/exportfs/built-in.a
  CC      fs/nls/nls_cp437.o
  CC      fs/ext4/hash.o
  AR      drivers/gpu/drm/mxsfb/built-in.a
  CC      net/ethtool/features.o
  CC      net/ethtool/privflags.o
  CC      kernel/module/procfs.o
  AR      drivers/mfd/built-in.a
  CC      arch/x86/kernel/cpu/vortex.o
  CC      drivers/gpu/drm/i915/i915_pci.o
  AR      drivers/base/firmware_loader/built-in.a
  CC      kernel/trace/trace_output.o
  CC      lib/iomem_copy.o
  CC      fs/fat/inode.o
  CC      kernel/time/clocksource.o
  CC      drivers/acpi/acpica/exoparg3.o
  CC      net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
  CC      net/xfrm/xfrm_nat_keepalive.o
  CC      drivers/block/virtio_blk.o
  CC      kernel/fork.o
  CC      lib/irq_regs.o
  CC      sound/hda/hdac_sysfs.o
  AR      drivers/tty/serial/8250/built-in.a
  AR      drivers/tty/serial/built-in.a
  CC      drivers/tty/tty_port.o
  CC      fs/nls/nls_ascii.o
  CC      kernel/cgroup/freezer.o
  CC      drivers/base/power/runtime.o
  CC      kernel/trace/trace_seq.o
  CC      lib/is_single_threaded.o
  CC      net/xfrm/xfrm_algo.o
  CC      arch/x86/kernel/cpu/perfctr-watchdog.o
  CC      fs/isofs/dir.o
  CC      crypto/md5.o
  CC      drivers/acpi/acpica/exoparg6.o
  CC      fs/lockd/clntproc.o
  CC      arch/x86/kernel/time.o
  CC      drivers/pci/iomap.o
  CC      net/ipv4/ip_forward.o
  CC      fs/ext4/ialloc.o
  CC      kernel/module/sysfs.o
  AR      net/dsa/built-in.a
  CC      fs/fat/misc.o
  CC      net/ethtool/rings.o
  CC      fs/nls/nls_iso8859-1.o
  CC      drivers/gpu/drm/virtio/virtgpu_fence.o
  CC      net/netfilter/nf_conntrack_proto.o
  CC      net/core/filter.o
  CC      lib/klist.o
  CC      net/ethtool/channels.o
  CC      io_uring/cancel.o
  CC      lib/kobject.o
  CC      net/ethtool/coalesce.o
  CC      drivers/acpi/acpica/exprep.o
  CC      net/ipv6/netfilter/nf_conntrack_reasm.o
  CC      net/ipv4/ip_options.o
  CC      kernel/time/jiffies.o
  CC      fs/nfs/file.o
  CC      net/core/sock_diag.o
  CC      mm/interval_tree.o
  CC      block/ioprio.o
  CC      crypto/sha256_generic.o
  CC      drivers/gpu/drm/i915/i915_scatterlist.o
  AR      sound/x86/built-in.a
  CC      drivers/tty/tty_mutex.o
  CC      sound/hda/hdac_regmap.o
  CC      arch/x86/kernel/cpu/vmware.o
  CC      net/sunrpc/auth_gss/auth_gss.o
  CC      fs/nls/nls_utf8.o
  CC      arch/x86/kernel/cpu/hypervisor.o
  CC      net/ipv6/ip6_output.o
  CC      fs/isofs/util.o
  CC      drivers/pci/quirks.o
  CC      kernel/cgroup/legacy_freezer.o
  CC      sound/hda/hdac_controller.o
  AR      net/packet/built-in.a
  CC      drivers/acpi/acpica/exregion.o
  CC      drivers/acpi/acpica/exresnte.o
  CC      kernel/time/timer_list.o
  AR      drivers/block/built-in.a
  CC      net/ipv4/ip_output.o
  CC      kernel/events/ring_buffer.o
  AR      kernel/module/built-in.a
  CC      kernel/trace/trace_stat.o
  CC      fs/lockd/clntxdr.o
  CC      drivers/base/power/wakeirq.o
  CC      net/netfilter/nf_conntrack_proto_generic.o
  CC      fs/proc/proc_net.o
  CC      lib/kobject_uevent.o
  AR      sound/xen/built-in.a
  AR      fs/nls/built-in.a
  CC      io_uring/waitid.o
  CC      fs/fat/nfs.o
  CC      arch/x86/kernel/cpu/mshyperv.o
  CC      kernel/cgroup/pids.o
  CC      drivers/gpu/drm/virtio/virtgpu_object.o
  CC      net/xfrm/xfrm_user.o
  CC      crypto/sha512_generic.o
  CC      drivers/tty/tty_ldsem.o
  CC      drivers/tty/tty_baudrate.o
  CC      net/ipv6/netfilter/nf_reject_ipv6.o
  CC      drivers/acpi/acpica/exresolv.o
  CC      arch/x86/kernel/ioport.o
  CC      drivers/base/regmap/regcache-rbtree.o
  CC      kernel/exec_domain.o
  CC      drivers/gpu/drm/i915/i915_switcheroo.o
  CC      mm/list_lru.o
  CC      fs/ext4/indirect.o
  CC      fs/isofs/rock.o
  CC      net/ipv6/ip6_input.o
  CC      net/core/dev_ioctl.o
  CC      block/badblocks.o
  CC      drivers/base/power/main.o
  CC      drivers/tty/tty_jobctrl.o
  AR      drivers/nfc/built-in.a
  AR      drivers/gpu/drm/tiny/built-in.a
  AR      drivers/gpu/drm/xlnx/built-in.a
  CC      drivers/base/power/wakeup.o
  CC      net/ethtool/pause.o
  CC      kernel/time/timeconv.o
  CC      kernel/events/callchain.o
  CC      kernel/cgroup/rdma.o
  CC      drivers/acpi/acpica/exresop.o
  CC      sound/hda/hdac_stream.o
  CC      drivers/base/regmap/regcache-flat.o
  CC      fs/lockd/host.o
  CC      fs/ext4/inline.o
  CC      fs/proc/kcore.o
  CC      crypto/sha3_generic.o
  CC      fs/fat/namei_vfat.o
  CC      net/ipv6/netfilter/ip6t_ipv6header.o
  AR      drivers/base/test/built-in.a
  CC      fs/nfs/getroot.o
  CC      drivers/gpu/drm/virtio/virtgpu_debugfs.o
  CC      mm/workingset.o
  CC      net/core/tso.o
  CC      kernel/time/timecounter.o
  CC      kernel/time/alarmtimer.o
  CC      net/sunrpc/auth_gss/gss_generic_token.o
  CC      arch/x86/kernel/cpu/debugfs.o
  CC      net/sunrpc/auth_gss/gss_mech_switch.o
  CC      io_uring/register.o
  CC      block/blk-rq-qos.o
  CC      net/netfilter/nf_conntrack_proto_tcp.o
  CC      fs/isofs/export.o
  CC      drivers/acpi/acpica/exserial.o
  CC      drivers/pci/pci-label.o
  CC      fs/nfs/inode.o
  CC      net/ethtool/eee.o
  CC      drivers/tty/n_null.o
  CC      lib/logic_pio.o
  CC      drivers/base/regmap/regcache-maple.o
  CC      fs/isofs/joliet.o
  CC      drivers/gpu/drm/i915/i915_sysfs.o
  CC      crypto/ecb.o
  CC      fs/lockd/svc.o
  AR      drivers/gpu/drm/gud/built-in.a
  CC      drivers/base/power/wakeup_stats.o
  CC      kernel/cgroup/cpuset.o
  CC      drivers/base/power/trace.o
  CC      drivers/acpi/acpica/exstore.o
  CC      sound/hda/array.o
  CC      kernel/trace/trace_printk.o
  CC      net/ipv4/ip_sockglue.o
  CC      arch/x86/kernel/cpu/bus_lock.o
  CC      fs/proc/vmcore.o
  CC      kernel/trace/pid_list.o
  CC      drivers/tty/pty.o
  CC      drivers/gpu/drm/virtio/virtgpu_plane.o
  CC      kernel/cgroup/misc.o
  CC      kernel/cgroup/debug.o
  AR      fs/unicode/built-in.a
  CC      sound/hda/hdmi_chmap.o
  CC      drivers/base/regmap/regmap-debugfs.o
  CC      kernel/panic.o
  CC      mm/debug.o
  CC      block/disk-events.o
  CC      crypto/cbc.o
  CC      mm/gup.o
  CC      block/blk-ia-ranges.o
  CC      drivers/pci/vgaarb.o
  CC      lib/maple_tree.o
  CC      block/early-lookup.o
  CC      drivers/acpi/acpica/exstoren.o
  CC      fs/isofs/compress.o
  CC      net/sunrpc/clnt.o
  CC      net/ipv6/netfilter/ip6t_REJECT.o
  AR      drivers/dax/hmem/built-in.a
  AR      drivers/dax/built-in.a
  CC      net/netfilter/nf_conntrack_proto_udp.o
  CC      drivers/dma-buf/dma-buf.o
  CC      drivers/dma-buf/dma-fence.o
  CC      io_uring/truncate.o
  AR      sound/virtio/built-in.a
  CC      drivers/gpu/drm/i915/i915_utils.o
  CC      fs/fat/namei_msdos.o
  CC      net/sunrpc/auth_gss/svcauth_gss.o
  CC      net/ethtool/tsinfo.o
  CC      kernel/time/posix-timers.o
  AR      drivers/base/power/built-in.a
  CC      net/sunrpc/xprt.o
  CC      fs/lockd/svclock.o
  CC      fs/nfs/super.o
  CC      crypto/ctr.o
  CC      io_uring/memmap.o
  CC      drivers/acpi/acpica/exstorob.o
  CC      drivers/base/component.o
  CC      drivers/dma-buf/dma-fence-array.o
  CC      drivers/acpi/nvs.o
  CC      arch/x86/kernel/dumpstack.o
  CC      fs/ext4/inode.o
  CC      fs/autofs/init.o
  CC      arch/x86/kernel/cpu/capflags.o
  CC      drivers/tty/tty_audit.o
  CC      kernel/trace/trace_sched_switch.o
  AR      drivers/base/regmap/built-in.a
  CC      fs/proc/kmsg.o
  CC      kernel/trace/trace_nop.o
  CC      drivers/gpu/drm/virtio/virtgpu_ioctl.o
  AR      arch/x86/kernel/cpu/built-in.a
  CC      sound/sound_core.o
  CC      net/ipv4/inet_hashtables.o
  CC      crypto/gcm.o
  CC      block/bounce.o
  CC      fs/proc/page.o
  AR      net/xfrm/built-in.a
  CC      net/sunrpc/auth_gss/gss_rpc_upcall.o
  CC      net/ethtool/cabletest.o
  CC      net/ipv6/addrconf.o
  CC      drivers/acpi/acpica/exsystem.o
  CC      sound/hda/trace.o
  CC      fs/ext4/ioctl.o
  CC      drivers/tty/sysrq.o
  CC      kernel/trace/blktrace.o
  AR      fs/isofs/built-in.a
  CC      net/core/sock_reuseport.o
  CC      lib/memcat_p.o
  AR      drivers/pci/built-in.a
  CC      io_uring/io-wq.o
  CC      net/sunrpc/socklib.o
  CC      kernel/events/hw_breakpoint.o
  CC      drivers/gpu/drm/i915/intel_clock_gating.o
  CC      fs/lockd/svcshare.o
  CC      drivers/base/core.o
  AR      fs/fat/built-in.a
  CC      drivers/acpi/wakeup.o
  AR      net/wireless/tests/built-in.a
  CC      net/wireless/core.o
  CC      net/netlabel/netlabel_user.o
  CC      drivers/acpi/acpica/extrace.o
  AR      net/mac80211/tests/built-in.a
  CC      net/mac80211/main.o
  CC      net/mac80211/status.o
  CC      fs/autofs/inode.o
  CC      arch/x86/kernel/nmi.o
  CC      drivers/dma-buf/dma-fence-chain.o
  CC      mm/mmap_lock.o
  AR      net/ipv6/netfilter/built-in.a
  AR      drivers/cxl/core/built-in.a
  CC      drivers/macintosh/mac_hid.o
  AR      drivers/cxl/built-in.a
  CC      crypto/ccm.o
  CC      arch/x86/kernel/ldt.o
  CC      net/netfilter/nf_conntrack_proto_icmp.o
  AR      kernel/cgroup/built-in.a
  CC      drivers/acpi/sleep.o
  AR      fs/proc/built-in.a
  CC      net/ipv4/inet_timewait_sock.o
  CC      drivers/gpu/drm/virtio/virtgpu_prime.o
  CC      net/wireless/sysfs.o
  CC      drivers/acpi/acpica/exutils.o
  CC      kernel/time/posix-cpu-timers.o
  CC      kernel/time/posix-clock.o
  CC      net/sunrpc/auth_gss/gss_rpc_xdr.o
  CC      sound/hda/hdac_component.o
  CC      block/bsg.o
  CC      io_uring/futex.o
  AR      drivers/tty/built-in.a
  CC      drivers/dma-buf/dma-fence-unwrap.o
  CC      kernel/events/uprobes.o
  CC      net/sunrpc/xprtsock.o
  CC      net/ethtool/tunnels.o
  CC      net/core/fib_notifier.o
  CC      net/rfkill/core.o
  AR      drivers/macintosh/built-in.a
  CC      net/9p/mod.o
  CC      net/9p/client.o
  CC      fs/nfs/io.o
  CC      drivers/acpi/acpica/hwacpi.o
  CC      fs/autofs/root.o
  CC      net/sunrpc/sched.o
  CC      crypto/aes_generic.o
  CC      fs/lockd/svcproc.o
  CC      net/netlabel/netlabel_kapi.o
  CC      mm/highmem.o
  CC      kernel/time/itimer.o
  AR      drivers/gpu/drm/solomon/built-in.a
  CC      sound/hda/hdac_i915.o
  CC      drivers/base/bus.o
  CC      arch/x86/kernel/setup.o
  CC      drivers/gpu/drm/virtio/virtgpu_trace_points.o
  AR      drivers/scsi/pcmcia/built-in.a
  CC      drivers/scsi/scsi.o
  AR      drivers/nvme/common/built-in.a
  CC      drivers/gpu/drm/i915/intel_cpu_info.o
  AR      drivers/nvme/host/built-in.a
  AR      drivers/nvme/target/built-in.a
  AR      drivers/nvme/built-in.a
  CC      drivers/gpu/drm/i915/intel_device_info.o
  CC      drivers/acpi/acpica/hwesleep.o
  CC      drivers/dma-buf/dma-resv.o
  CC      fs/9p/vfs_super.o
  AR      fs/hostfs/built-in.a
  CC      io_uring/napi.o
  CC      net/sunrpc/auth.o
  CC      net/rfkill/input.o
  CC      drivers/acpi/acpica/hwgpe.o
  CC      kernel/trace/trace_events.o
  CC      block/blk-cgroup.o
  CC      lib/nmi_backtrace.o
  CC      net/netfilter/nf_conntrack_extend.o
  CC      net/ethtool/fec.o
  CC      net/ipv4/inet_connection_sock.o
  CC      net/mac80211/driver-ops.o
  CC      net/dns_resolver/dns_key.o
  CC      net/handshake/alert.o
  CC      net/ethtool/eeprom.o
  CC      net/sunrpc/auth_gss/trace.o
  CC      net/sunrpc/auth_null.o
  CC      sound/hda/intel-dsp-config.o
  CC      crypto/crc32c_generic.o
  CC      drivers/acpi/acpica/hwregs.o
  CC      net/dns_resolver/dns_query.o
  CC      fs/autofs/symlink.o
  CC      lib/objpool.o
  CC      kernel/time/clockevents.o
  CC      fs/nfs/direct.o
  CC      kernel/trace/trace_export.o
  AR      net/rfkill/built-in.a
  CC      drivers/gpu/drm/i915/intel_memory_region.o
  CC      kernel/trace/trace_event_perf.o
  CC      fs/9p/vfs_inode.o
  CC      drivers/gpu/drm/virtio/virtgpu_submit.o
  CC      mm/memory.o
  CC      kernel/cpu.o
  CC      arch/x86/kernel/x86_init.o
  CC      drivers/dma-buf/sync_file.o
  CC      crypto/authenc.o
  CC      net/netfilter/nf_conntrack_acct.o
  CC      fs/lockd/svcsubs.o
  CC      fs/debugfs/inode.o
  CC      drivers/acpi/acpica/hwsleep.o
  CC      fs/tracefs/inode.o
  CC [M]  drivers/gpu/drm/scheduler/sched_main.o
  CC      net/netlabel/netlabel_domainhash.o
  AR      kernel/events/built-in.a
  CC      fs/debugfs/file.o
  CC      drivers/base/dd.o
  CC      sound/hda/intel-nhlt.o
  CC      drivers/scsi/hosts.o
  CC      net/9p/error.o
  CC      fs/autofs/waitq.o
  CC      kernel/time/tick-common.o
  AR      net/dns_resolver/built-in.a
  CC      sound/last.o
  CC      net/mac80211/sta_info.o
  CC      net/ipv6/addrlabel.o
  CC      drivers/acpi/device_sysfs.o
  CC      net/ethtool/stats.o
  CC      drivers/acpi/acpica/hwvalid.o
  AR      io_uring/built-in.a
  CC      arch/x86/kernel/i8259.o
  CC      fs/ext4/mballoc.o
  AR      drivers/dma-buf/built-in.a
  CC      net/ipv4/tcp.o
  CC      net/netfilter/nf_conntrack_seqadj.o
  CC      drivers/scsi/scsi_ioctl.o
  CC      net/mac80211/wep.o
  CC      drivers/scsi/scsicam.o
  AR      drivers/gpu/drm/virtio/built-in.a
  CC      drivers/scsi/scsi_error.o
  CC      block/blk-ioprio.o
  CC      net/9p/protocol.o
  CC      net/handshake/genl.o
  CC      drivers/acpi/device_pm.o
  CC      lib/plist.o
  CC      sound/hda/intel-sdw-acpi.o
  CC      drivers/gpu/drm/i915/intel_pcode.o
  CC      net/core/xdp.o
  CC      net/ethtool/phc_vclocks.o
  CC      net/wireless/radiotap.o
  CC      drivers/acpi/acpica/hwxface.o
  CC      fs/9p/vfs_inode_dotl.o
  CC      crypto/authencesn.o
  CC      net/netfilter/nf_conntrack_proto_icmpv6.o
  CC      fs/tracefs/event_inode.o
  CC      drivers/acpi/proc.o
  CC      net/netlabel/netlabel_addrlist.o
  CC      arch/x86/kernel/irqinit.o
  CC      fs/autofs/expire.o
  CC      drivers/ata/libata-core.o
  CC      drivers/base/syscore.o
  CC      fs/lockd/mon.o
  CC      drivers/acpi/acpica/hwxfsleep.o
  AR      sound/hda/built-in.a
  AR      sound/built-in.a
  CC      drivers/gpu/drm/i915/intel_region_ttm.o
  CC      drivers/ata/libata-scsi.o
  CC      kernel/trace/trace_events_filter.o
  CC      drivers/gpu/drm/i915/intel_runtime_pm.o
  CC      block/blk-iolatency.o
  CC      fs/lockd/trace.o
  CC      kernel/time/tick-broadcast.o
  CC      kernel/trace/trace_events_trigger.o
  AR      fs/debugfs/built-in.a
  CC      fs/9p/vfs_addr.o
  CC      kernel/exit.o
  CC      net/handshake/netlink.o
  CC      net/sunrpc/auth_tls.o
  CC      net/9p/trans_common.o
  CC [M]  drivers/gpu/drm/scheduler/sched_fence.o
  CC [M]  drivers/gpu/drm/scheduler/sched_entity.o
  CC      net/ipv6/route.o
  CC      drivers/base/driver.o
  CC      net/sunrpc/auth_gss/gss_krb5_mech.o
  CC      fs/nfs/pagelist.o
  CC      drivers/acpi/acpica/hwpci.o
  CC      kernel/softirq.o
  CC      fs/nfs/read.o
  CC      net/ethtool/mm.o
  CC      crypto/lzo.o
  CC      fs/9p/vfs_file.o
  CC      kernel/time/tick-broadcast-hrtimer.o
  CC      net/wireless/util.o
  CC      net/ethtool/module.o
  CC      drivers/acpi/bus.o
  CC      drivers/ata/libata-eh.o
  CC      fs/autofs/dev-ioctl.o
  CC      lib/radix-tree.o
  CC      arch/x86/kernel/jump_label.o
  CC      kernel/resource.o
  AR      fs/tracefs/built-in.a
  CC      net/sunrpc/auth_unix.o
  HOSTCC  drivers/gpu/drm/xe/xe_gen_wa_oob
  CC      fs/lockd/xdr.o
  CC      net/9p/trans_fd.o
  CC      drivers/acpi/acpica/nsaccess.o
  CC      net/netlabel/netlabel_mgmt.o
  GEN     xe_wa_oob.c xe_wa_oob.h
  CC [M]  drivers/gpu/drm/xe/xe_bb.o
  CC      drivers/scsi/scsi_lib.o
  CC      drivers/base/class.o
  CC      drivers/gpu/drm/drm_atomic.o
  CC      kernel/time/tick-oneshot.o
  CC      net/ipv4/tcp_input.o
  CC      mm/mincore.o
  CC      net/core/flow_offload.o
  CC      net/devres.o
  CC      net/netfilter/nf_conntrack_netlink.o
  LD [M]  drivers/gpu/drm/scheduler/gpu-sched.o
  CC      net/netfilter/nf_conntrack_ftp.o
  CC      net/handshake/request.o
  CC      crypto/lzo-rle.o
  CC      net/sunrpc/svc.o
  CC      net/netfilter/nf_conntrack_irc.o
  CC      drivers/gpu/drm/i915/intel_sbi.o
  CC      drivers/acpi/acpica/nsalloc.o
  CC      arch/x86/kernel/irq_work.o
  CC      kernel/trace/trace_eprobe.o
  CC      fs/9p/vfs_dir.o
  CC      drivers/scsi/constants.o
  CC      block/blk-iocost.o
  CC      kernel/time/tick-sched.o
  CC      net/sunrpc/auth_gss/gss_krb5_seal.o
  AR      fs/autofs/built-in.a
  CC      drivers/scsi/scsi_lib_dma.o
  CC      drivers/acpi/glue.o
  CC      lib/ratelimit.o
  CC      arch/x86/kernel/probe_roms.o
  CC [M]  drivers/gpu/drm/xe/xe_bo.o
  CC      drivers/gpu/drm/drm_atomic_uapi.o
  CC      drivers/acpi/acpica/nsarguments.o
  CC      drivers/base/platform.o
  CC      net/ethtool/cmis_fw_update.o
  CC      crypto/rng.o
  CC      kernel/sysctl.o
  CC      lib/rbtree.o
  CC      fs/lockd/clnt4xdr.o
  CC      drivers/scsi/scsi_scan.o
  CC      drivers/gpu/drm/i915/intel_step.o
  CC      block/mq-deadline.o
  CC      kernel/trace/trace_kprobe.o
  CC      fs/nfs/symlink.o
  CC      mm/mlock.o
  CC      drivers/acpi/acpica/nsconvert.o
  CC      net/9p/trans_virtio.o
  CC      net/netlabel/netlabel_unlabeled.o
  CC      net/netlabel/netlabel_cipso_v4.o
  CC      fs/9p/vfs_dentry.o
  CC      net/socket.o
  CC      net/ipv6/ip6_fib.o
  CC      net/core/gro.o
  CC      lib/seq_buf.o
  CC      crypto/drbg.o
  CC      net/handshake/tlshd.o
  CC      net/sunrpc/svcsock.o
  CC      drivers/acpi/scan.o
  CC      fs/ext4/migrate.o
  CC      arch/x86/kernel/sys_ia32.o
  CC      kernel/time/timer_migration.o
  CC      net/mac80211/aead_api.o
  CC      net/handshake/trace.o
  CC      drivers/ata/libata-transport.o
  CC      net/sunrpc/auth_gss/gss_krb5_unseal.o
  CC      drivers/acpi/acpica/nsdump.o
  CC      drivers/base/cpu.o
  CC      fs/9p/v9fs.o
  CC      net/ipv4/tcp_output.o
  CC      net/ethtool/cmis_cdb.o
  CC      net/netlabel/netlabel_calipso.o
  CC      mm/mmap.o
  CC      net/netfilter/nf_conntrack_sip.o
  CC [M]  drivers/gpu/drm/xe/xe_bo_evict.o
  CC      lib/siphash.o
  CC      drivers/gpu/drm/i915/intel_uncore.o
  CC      arch/x86/kernel/ksysfs.o
  CC      drivers/acpi/acpica/nseval.o
  CC      net/sunrpc/svcauth.o
  CC      fs/lockd/xdr4.o
  CC      fs/nfs/unlink.o
  GEN     drivers/scsi/scsi_devinfo_tbl.c
  CC      drivers/scsi/scsi_devinfo.o
  CC      net/mac80211/wpa.o
  CC      crypto/jitterentropy.o
  CC      crypto/jitterentropy-kcapi.o
  CC      fs/lockd/svc4proc.o
  CC      lib/string.o
  CC      net/mac80211/scan.o
  AR      drivers/net/pse-pd/built-in.a
  AR      drivers/net/phy/mediatek/built-in.a
  CC      fs/nfs/write.o
  AR      drivers/net/phy/qcom/built-in.a
  CC      drivers/net/phy/mdio-boardinfo.o
  CC      drivers/acpi/acpica/nsinit.o
  CC      fs/nfs/namespace.o
  CC      kernel/trace/error_report-traces.o
  CC      net/sunrpc/svcauth_unix.o
  AR      net/9p/built-in.a
  CC      net/netfilter/nf_nat_core.o
  CC      kernel/time/vsyscall.o
  CC      fs/9p/fid.o
  CC      drivers/scsi/scsi_sysctl.o
  CC      lib/timerqueue.o
  CC      drivers/base/firmware.o
  CC      fs/nfs/mount_clnt.o
  CC      net/sunrpc/auth_gss/gss_krb5_wrap.o
  CC      arch/x86/kernel/bootflag.o
  CC      net/core/netdev-genl.o
  CC      lib/union_find.o
  CC      crypto/ghash-generic.o
  CC      drivers/net/phy/stubs.o
  CC      fs/ext4/mmp.o
  CC      lib/vsprintf.o
  CC      net/sysctl_net.o
  CC      drivers/acpi/acpica/nsload.o
  CC [M]  drivers/gpu/drm/xe/xe_devcoredump.o
  CC      net/ethtool/pse-pd.o
  CC      net/ipv6/ipv6_sockglue.o
  CC      drivers/base/init.o
  CC [M]  fs/efivarfs/inode.o
  CC      net/ipv4/tcp_timer.o
  CC      block/kyber-iosched.o
  CC      drivers/ata/libata-trace.o
  CC      net/netfilter/nf_nat_proto.o
  CC [M]  drivers/gpu/drm/xe/xe_device.o
  AR      net/netlabel/built-in.a
  AR      net/handshake/built-in.a
  CC      fs/lockd/procfs.o
  CC [M]  drivers/gpu/drm/xe/xe_device_sysfs.o
  CC      drivers/ata/libata-sata.o
  CC      drivers/base/map.o
  CC      kernel/trace/power-traces.o
  CC      crypto/hash_info.o
  CC      drivers/scsi/scsi_proc.o
  CC      drivers/acpi/acpica/nsnames.o
  CC      crypto/rsapubkey.asn1.o
  CC      drivers/gpu/drm/drm_auth.o
  CC      crypto/rsaprivkey.asn1.o
  CC [M]  drivers/gpu/drm/xe/xe_dma_buf.o
  CC      arch/x86/kernel/e820.o
  AR      crypto/built-in.a
  CC      kernel/time/timekeeping_debug.o
  CC      fs/9p/xattr.o
  CC      drivers/scsi/scsi_debugfs.o
  CC      mm/mmu_gather.o
  CC      fs/nfs/nfstrace.o
  CC      net/wireless/reg.o
  CC      net/ethtool/plca.o
  CC      lib/win_minmax.o
  CC      drivers/net/phy/mdio_devres.o
  CC      drivers/net/phy/phy.o
  CC      drivers/net/mdio/acpi_mdio.o
  CC      drivers/base/devres.o
  CC [M]  fs/efivarfs/file.o
  CC      fs/ext4/move_extent.o
  CC      drivers/acpi/acpica/nsobject.o
  CC      drivers/net/mdio/fwnode_mdio.o
  CC      net/sunrpc/auth_gss/gss_krb5_crypto.o
  CC      net/netfilter/nf_nat_helper.o
  CC      drivers/acpi/acpica/nsparse.o
  CC      net/ipv4/tcp_ipv4.o
  CC      drivers/gpu/drm/i915/intel_uncore_trace.o
  CC      drivers/ata/libata-sff.o
  AR      fs/lockd/built-in.a
  CC      net/ipv6/ndisc.o
  CC      kernel/trace/rpm-traces.o
  CC      net/wireless/scan.o
  CC      kernel/time/namespace.o
  AR      fs/9p/built-in.a
  CC      net/netfilter/nf_nat_masquerade.o
  CC      net/netfilter/nf_nat_ftp.o
  CC      drivers/scsi/scsi_trace.o
  CC      drivers/net/phy/phy-c45.o
  CC      net/core/netdev-genl-gen.o
  CC      drivers/acpi/mipi-disco-img.o
  AR      drivers/net/pcs/built-in.a
  CC      net/netfilter/nf_nat_irc.o
  CC      drivers/acpi/acpica/nspredef.o
  CC      block/blk-mq-pci.o
  CC      fs/ext4/namei.o
  CC      fs/ext4/page-io.o
  CC      net/netfilter/nf_nat_sip.o
  CC      fs/nfs/export.o
  CC [M]  fs/efivarfs/super.o
  CC      mm/mprotect.o
  CC      mm/mremap.o
  CC [M]  drivers/gpu/drm/xe/xe_drm_client.o
  CC [M]  fs/efivarfs/vars.o
  CC      drivers/base/attribute_container.o
  CC      mm/msync.o
  CC      arch/x86/kernel/pci-dma.o
  CC      kernel/capability.o
  CC      block/blk-mq-virtio.o
  CC      fs/open.o
  CC      drivers/acpi/acpica/nsprepkg.o
  CC      net/ethtool/phy.o
  CC      drivers/ata/libata-pmp.o
  AR      drivers/net/mdio/built-in.a
  CC      lib/xarray.o
  CC      drivers/firewire/init_ohci1394_dma.o
  CC      drivers/gpu/drm/i915/intel_wakeref.o
  CC      drivers/cdrom/cdrom.o
  AR      kernel/time/built-in.a
  AR      drivers/net/ethernet/3com/built-in.a
  CC      drivers/net/ethernet/8390/ne2k-pci.o
  CC      drivers/scsi/scsi_logging.o
  CC      drivers/ata/libata-acpi.o
  CC      drivers/gpu/drm/drm_blend.o
  AR      drivers/auxdisplay/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_exec.o
  CC      drivers/net/phy/phy-core.o
  AR      drivers/net/ethernet/adaptec/built-in.a
  CC      lib/lockref.o
  CC      net/core/gso.o
  CC      kernel/trace/trace_dynevent.o
  CC      drivers/base/transport_class.o
  CC      net/wireless/nl80211.o
  CC      drivers/acpi/acpica/nsrepair.o
  CC      arch/x86/kernel/quirks.o
  CC      net/mac80211/offchannel.o
  CC      drivers/gpu/drm/i915/vlv_sideband.o
  CC      net/netfilter/x_tables.o
  CC      net/sunrpc/auth_gss/gss_krb5_keys.o
  CC      drivers/gpu/drm/i915/vlv_suspend.o
  AR      drivers/net/wireless/admtek/built-in.a
  AR      drivers/net/wireless/ath/built-in.a
  CC      drivers/net/ethernet/8390/8390.o
  AR      drivers/net/wireless/atmel/built-in.a
  CC      block/blk-mq-debugfs.o
  LD [M]  fs/efivarfs/efivarfs.o
  AR      drivers/net/wireless/broadcom/built-in.a
  AR      drivers/net/wireless/intel/built-in.a
  CC      drivers/scsi/scsi_pm.o
  AR      drivers/net/wireless/intersil/built-in.a
  CC      block/blk-pm.o
  AR      drivers/net/wireless/marvell/built-in.a
  CC      drivers/gpu/drm/drm_bridge.o
  AR      drivers/net/wireless/mediatek/built-in.a
  AR      drivers/net/wireless/microchip/built-in.a
  CC      drivers/ata/libata-pata-timings.o
  CC      net/wireless/mlme.o
  AR      drivers/net/wireless/purelifi/built-in.a
  AR      drivers/net/wireless/quantenna/built-in.a
  AR      drivers/net/wireless/ralink/built-in.a
  AR      drivers/net/wireless/realtek/built-in.a
  AR      drivers/net/wireless/rsi/built-in.a
  AR      drivers/net/wireless/silabs/built-in.a
  AR      drivers/net/wireless/st/built-in.a
  CC      fs/nfs/sysfs.o
  AR      drivers/firewire/built-in.a
  AR      drivers/net/wireless/ti/built-in.a
  CC      drivers/gpu/drm/drm_cache.o
  AR      drivers/net/wireless/zydas/built-in.a
  CC      fs/read_write.o
  AR      drivers/net/wireless/virtual/built-in.a
  AR      drivers/net/wireless/built-in.a
  CC      drivers/ata/ahci.o
  CC      drivers/gpu/drm/i915/soc/intel_dram.o
  CC      net/wireless/ibss.o
  CC      drivers/base/topology.o
  CC      drivers/acpi/acpica/nsrepair2.o
  CC      mm/page_vma_mapped.o
  CC      drivers/acpi/resource.o
  CC      fs/file_table.o
  CC      drivers/acpi/acpica/nssearch.o
  CC      kernel/ptrace.o
  AR      drivers/net/usb/built-in.a
  CC      drivers/gpu/drm/i915/soc/intel_gmch.o
  AR      net/ethtool/built-in.a
  CC      net/core/net-sysfs.o
  CC      drivers/acpi/acpi_processor.o
  CC      fs/super.o
  CC [M]  drivers/gpu/drm/xe/xe_execlist.o
  CC      kernel/trace/trace_probe.o
  CC      arch/x86/kernel/kdebugfs.o
  CC      drivers/gpu/drm/drm_color_mgmt.o
  CC [M]  drivers/gpu/drm/xe/xe_exec_queue.o
  CC      drivers/base/container.o
  CC      lib/bcd.o
  CC      fs/nfs/fs_context.o
  CC      drivers/scsi/scsi_bsg.o
  CC      lib/sort.o
  CC      drivers/acpi/acpica/nsutils.o
  CC      kernel/trace/trace_uprobe.o
  CC      drivers/net/phy/phy_device.o
  CC      drivers/gpu/drm/i915/soc/intel_pch.o
  CC      block/holder.o
  CC      lib/parser.o
  CC      net/wireless/sme.o
  CC      net/sunrpc/addr.o
  CC      net/mac80211/ht.o
  CC      drivers/acpi/processor_core.o
  CC      fs/nfs/nfsroot.o
  CC      drivers/gpu/drm/i915/soc/intel_rom.o
  CC      net/wireless/chan.o
  CC      net/ipv6/udp.o
  CC      mm/pagewalk.o
  AR      net/sunrpc/auth_gss/built-in.a
  CC      mm/pgtable-generic.o
  CC      drivers/base/property.o
  CC [M]  drivers/gpu/drm/xe/xe_force_wake.o
  AR      drivers/net/ethernet/8390/built-in.a
  AR      drivers/net/ethernet/agere/built-in.a
  AR      drivers/net/ethernet/alacritech/built-in.a
  AR      drivers/net/ethernet/alteon/built-in.a
  AR      drivers/net/ethernet/amazon/built-in.a
  AR      drivers/net/ethernet/amd/built-in.a
  AR      drivers/net/ethernet/aquantia/built-in.a
  AR      drivers/net/ethernet/arc/built-in.a
  AR      drivers/net/ethernet/asix/built-in.a
  CC      drivers/acpi/acpica/nswalk.o
  AR      drivers/net/ethernet/atheros/built-in.a
  CC      arch/x86/kernel/alternative.o
  CC      lib/debug_locks.o
  AR      drivers/net/ethernet/cadence/built-in.a
  CC      drivers/base/cacheinfo.o
  CC      drivers/net/ethernet/broadcom/bnx2.o
  CC      drivers/ata/libahci.o
  AR      drivers/cdrom/built-in.a
  CC      fs/char_dev.o
  CC      kernel/user.o
  CC      mm/rmap.o
  CC      net/wireless/ethtool.o
  CC      net/ipv4/tcp_minisocks.o
  CC      net/netfilter/xt_tcpudp.o
  CC      lib/random32.o
  CC      drivers/base/swnode.o
  CC      drivers/scsi/scsi_common.o
  CC      drivers/base/auxiliary.o
  CC      drivers/net/phy/linkmode.o
  CC      drivers/net/ethernet/broadcom/tg3.o
  AR      block/built-in.a
  CC      drivers/pcmcia/cs.o
  CC      net/ipv4/tcp_cong.o
  CC      drivers/acpi/acpica/nsxfeval.o
  CC      drivers/net/mii.o
  CC      net/core/hotdata.o
  CC      lib/bust_spinlocks.o
  CC      net/ipv6/udplite.o
  CC      fs/ext4/readpage.o
  CC      drivers/base/devtmpfs.o
  CC      drivers/gpu/drm/i915/i915_memcpy.o
  CC      fs/stat.o
  CC      drivers/scsi/scsi_transport_spi.o
  CC      drivers/base/module.o
  CC      drivers/ata/ata_piix.o
  CC      net/sunrpc/rpcb_clnt.o
  CC      arch/x86/kernel/i8253.o
  CC      net/mac80211/agg-tx.o
  AR      drivers/net/ethernet/brocade/built-in.a
  CC      drivers/gpu/drm/i915/i915_mm.o
  CC      drivers/net/phy/phy_link_topology.o
  CC      mm/vmalloc.o
  CC      drivers/net/loopback.o
  CC [M]  drivers/gpu/drm/xe/xe_ggtt.o
  CC      drivers/acpi/processor_pdc.o
  CC      drivers/acpi/acpica/nsxfname.o
  CC      net/mac80211/agg-rx.o
  CC [M]  drivers/gpu/drm/xe/xe_gpu_scheduler.o
  CC      drivers/usb/common/common.o
  CC      drivers/usb/core/usb.o
  CC      drivers/input/serio/serio.o
  CC      lib/kasprintf.o
  CC      lib/bitmap.o
  CC      drivers/pcmcia/socket_sysfs.o
  CC      fs/ext4/resize.o
  CC      drivers/usb/common/debug.o
  CC      net/wireless/mesh.o
  CC      arch/x86/kernel/hw_breakpoint.o
  CC      kernel/trace/rethook.o
  CC      drivers/acpi/acpica/nsxfobj.o
  CC      drivers/ata/pata_amd.o
  CC      net/netfilter/xt_CONNSECMARK.o
  CC      kernel/signal.o
  CC      net/mac80211/vht.o
  CC      drivers/pcmcia/cardbus.o
  AR      drivers/usb/phy/built-in.a
  CC      net/core/netdev_rx_queue.o
  CC      kernel/sys.o
  CC      drivers/input/keyboard/atkbd.o
  CC      drivers/input/mouse/psmouse-base.o
  CC      drivers/acpi/ec.o
  CC      drivers/base/auxiliary_sysfs.o
  CC      drivers/scsi/virtio_scsi.o
  CC      fs/nfs/sysctl.o
  CC      arch/x86/kernel/tsc.o
  CC      mm/vma.o
  CC      net/netfilter/xt_NFLOG.o
  CC      drivers/acpi/acpica/psargs.o
  CC      drivers/net/phy/mdio_bus.o
  CC      drivers/gpu/drm/i915/i915_sw_fence.o
  CC      fs/ext4/super.o
  CC      net/ipv4/tcp_metrics.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc.o
  CC      drivers/rtc/lib.o
  CC      fs/ext4/symlink.o
  AR      drivers/usb/common/built-in.a
  CC      drivers/input/serio/i8042.o
  CC      kernel/umh.o
  CC      arch/x86/kernel/tsc_msr.o
  CC      lib/scatterlist.o
  CC      arch/x86/kernel/io_delay.o
  CC      mm/process_vm_access.o
  CC      fs/exec.o
  CC      drivers/base/devcoredump.o
  AR      kernel/trace/built-in.a
  CC      drivers/usb/core/hub.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc_debugfs.o
  CC      net/ipv4/tcp_fastopen.o
  CC      drivers/pcmcia/ds.o
  CC      net/core/net-procfs.o
  CC      drivers/acpi/acpica/psloop.o
  CC      net/ipv6/raw.o
  CC      drivers/ata/pata_oldpiix.o
  CC      net/wireless/ap.o
  CC      net/sunrpc/timer.o
  CC      drivers/base/platform-msi.o
  CC      kernel/workqueue.o
  CC      drivers/gpu/drm/i915/i915_sw_fence_work.o
  CC      net/ipv4/tcp_rate.o
  CC      drivers/rtc/class.o
  CC      net/netfilter/xt_SECMARK.o
  AR      drivers/input/keyboard/built-in.a
  CC      drivers/acpi/dock.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc_proxy.o
  CC      drivers/net/phy/mdio_device.o
  CC      drivers/input/mouse/synaptics.o
  CC      drivers/acpi/acpica/psobject.o
  CC      fs/nfs/nfs3super.o
  CC      drivers/scsi/sd.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc_submit.o
  CC      drivers/net/phy/swphy.o
  CC      arch/x86/kernel/rtc.o
  CC      drivers/acpi/pci_root.o
  CC      drivers/gpu/drm/i915/i915_syncmap.o
  CC      fs/ext4/sysfs.o
  CC      drivers/gpu/drm/drm_connector.o
  CC      fs/ext4/xattr.o
  CC      drivers/base/physical_location.o
  CC      fs/nfs/nfs3client.o
  CC      net/ipv4/tcp_recovery.o
  CC      drivers/usb/core/hcd.o
  CC      drivers/ata/pata_sch.o
  CC      lib/list_sort.o
  CC      drivers/net/netconsole.o
  CC      drivers/acpi/acpica/psopcode.o
  CC      drivers/rtc/interface.o
  CC      drivers/input/serio/serport.o
  CC      lib/uuid.o
  CC      drivers/pcmcia/pcmcia_resource.o
  CC      arch/x86/kernel/resource.o
  CC      net/ipv6/icmp.o
  CC      net/netfilter/xt_TCPMSS.o
  CC      net/ipv6/mcast.o
  CC      drivers/gpu/drm/i915/i915_user_extensions.o
  CC      fs/ext4/xattr_hurd.o
  CC      lib/iov_iter.o
  CC      drivers/base/trace.o
  CC      net/core/netpoll.o
  CC      net/sunrpc/xdr.o
  CC      net/ipv4/tcp_ulp.o
  AS      arch/x86/kernel/irqflags.o
  CC      drivers/i2c/algos/i2c-algo-bit.o
  CC      arch/x86/kernel/static_call.o
  CC      net/ipv4/tcp_offload.o
  CC      drivers/i2c/busses/i2c-i801.o
  CC      drivers/acpi/acpica/psopinfo.o
  CC      drivers/pcmcia/cistpl.o
  CC      fs/nfs/nfs3proc.o
  CC [M]  drivers/gpu/drm/xe/xe_gt.o
  CC      drivers/net/phy/fixed_phy.o
  CC      drivers/gpu/drm/i915/i915_debugfs.o
  CC      net/sunrpc/sunrpc_syms.o
  CC      drivers/gpu/drm/i915/i915_debugfs_params.o
  AR      drivers/i2c/muxes/built-in.a
  AR      drivers/input/joystick/built-in.a
  AR      drivers/input/tablet/built-in.a
  AR      drivers/input/touchscreen/built-in.a
  CC      drivers/input/serio/libps2.o
  CC      net/netfilter/xt_conntrack.o
  CC      net/core/fib_rules.o
  CC      drivers/ata/pata_mpiix.o
  CC      net/mac80211/he.o
  CC      drivers/ata/ata_generic.o
  CC      net/netfilter/xt_policy.o
  CC      mm/page_alloc.o
  CC      drivers/acpi/acpica/psparse.o
  CC      arch/x86/kernel/process.o
  CC      fs/ext4/xattr_trusted.o
  CC      drivers/scsi/sr.o
  CC      drivers/input/mouse/focaltech.o
  AR      drivers/net/ethernet/cavium/common/built-in.a
  AR      drivers/net/ethernet/cavium/thunder/built-in.a
  AR      drivers/net/ethernet/cavium/liquidio/built-in.a
  AR      drivers/net/ethernet/cavium/octeon/built-in.a
  AR      drivers/net/ethernet/cavium/built-in.a
  CC      net/core/net-traces.o
  AR      drivers/base/built-in.a
  CC      lib/clz_ctz.o
  CC      drivers/net/phy/realtek.o
  CC      drivers/gpu/drm/drm_crtc.o
  CC      drivers/acpi/acpica/psscope.o
  CC      drivers/usb/mon/mon_main.o
  CC      arch/x86/kernel/ptrace.o
  CC      drivers/net/virtio_net.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_ccs_mode.o
  AR      drivers/input/misc/built-in.a
  CC      drivers/usb/host/pci-quirks.o
  AR      drivers/i2c/algos/built-in.a
  CC      drivers/pcmcia/pcmcia_cis.o
  CC      drivers/pcmcia/rsrc_mgr.o
  AR      drivers/input/serio/built-in.a
  CC      drivers/pcmcia/rsrc_nonstatic.o
  CC      kernel/pid.o
  CC      drivers/scsi/sr_ioctl.o
  CC      drivers/input/mouse/alps.o
  CC      drivers/acpi/acpica/pstree.o
  CC      net/sunrpc/cache.o
  CC      drivers/rtc/nvmem.o
  CC      fs/pipe.o
  AR      drivers/ata/built-in.a
  CC      drivers/net/net_failover.o
  CC      drivers/rtc/dev.o
  CC      drivers/usb/mon/mon_stat.o
  CC      fs/ext4/xattr_user.o
  AR      drivers/net/ethernet/chelsio/built-in.a
  AR      drivers/i2c/busses/built-in.a
  CC      net/netfilter/xt_state.o
  CC      drivers/i2c/i2c-boardinfo.o
  CC      net/ipv6/reassembly.o
  CC      drivers/usb/core/urb.o
  CC      drivers/usb/class/usblp.o
  CC      drivers/pcmcia/yenta_socket.o
  CC      drivers/acpi/acpica/psutils.o
  CC      drivers/input/mouse/byd.o
  CC      fs/namei.o
  CC      mm/page_frag_cache.o
  CC      fs/nfs/nfs3xdr.o
  CC      kernel/task_work.o
  CC      net/wireless/trace.o
  CC      net/wireless/ocb.o
  CC      net/mac80211/s1g.o
  CC      net/ipv4/tcp_plb.o
  CC      drivers/gpu/drm/i915/i915_pmu.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_clock.o
  CC      net/ipv6/tcp_ipv6.o
  CC      drivers/usb/core/message.o
  CC      drivers/acpi/pci_link.o
  CC      arch/x86/kernel/tls.o
  CC      kernel/extable.o
  CC      drivers/usb/mon/mon_text.o
  CC      drivers/usb/host/ehci-hcd.o
  CC      drivers/acpi/acpica/pswalk.o
  CC      drivers/rtc/proc.o
  CC      drivers/input/input.o
  CC      fs/fcntl.o
  AR      drivers/net/phy/built-in.a
  CC      drivers/input/mouse/logips2pp.o
  CC      net/ipv6/ping.o
  CC      mm/init-mm.o
  CC      drivers/i2c/i2c-core-base.o
  CC      drivers/rtc/sysfs.o
  CC      drivers/scsi/sr_vendor.o
  CC      lib/bsearch.o
  CC      fs/nfs/nfs3acl.o
  CC      drivers/acpi/acpica/psxface.o
  CC      fs/ext4/fast_commit.o
  CC      drivers/usb/core/driver.o
  AR      drivers/net/ethernet/cisco/built-in.a
  CC      net/mac80211/ibss.o
  CC [M]  net/netfilter/nf_log_syslog.o
  AR      drivers/usb/class/built-in.a
  CC      net/wireless/pmsr.o
  CC [M]  net/netfilter/xt_mark.o
  CC      drivers/gpu/drm/drm_displayid.o
  CC      drivers/usb/host/ehci-pci.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_freq.o
  CC      lib/find_bit.o
  CC      drivers/usb/core/config.o
  CC      drivers/i2c/i2c-core-smbus.o
  CC      arch/x86/kernel/step.o
  AR      drivers/i3c/built-in.a
  CC      drivers/acpi/acpica/rsaddr.o
  AR      drivers/media/i2c/built-in.a
  AR      drivers/media/tuners/built-in.a
  CC      arch/x86/kernel/i8237.o
  AR      drivers/media/rc/keymaps/built-in.a
  AR      drivers/media/rc/built-in.a
  CC      net/ipv6/exthdrs.o
  CC      drivers/input/input-compat.o
  CC      net/ipv6/datagram.o
  AR      drivers/media/common/b2c2/built-in.a
  CC      drivers/usb/mon/mon_bin.o
  CC      drivers/rtc/rtc-mc146818-lib.o
  AR      drivers/media/common/saa7146/built-in.a
  AR      drivers/media/common/siano/built-in.a
  AR      drivers/media/common/v4l2-tpg/built-in.a
  AR      drivers/media/common/videobuf2/built-in.a
  AR      drivers/media/common/built-in.a
  CC      drivers/input/mouse/lifebook.o
  AR      drivers/pcmcia/built-in.a
  CC      kernel/params.o
  CC      drivers/rtc/rtc-cmos.o
  CC      lib/llist.o
  AR      drivers/media/platform/allegro-dvt/built-in.a
  AR      drivers/media/platform/amlogic/meson-ge2d/built-in.a
  AR      drivers/media/platform/amlogic/built-in.a
  CC      drivers/scsi/sg.o
  AR      drivers/media/pci/ttpci/built-in.a
  AR      drivers/media/platform/amphion/built-in.a
  AR      drivers/media/pci/b2c2/built-in.a
  AR      drivers/media/platform/aspeed/built-in.a
  AR      drivers/media/pci/pluto2/built-in.a
  AR      drivers/media/platform/atmel/built-in.a
  AR      drivers/media/pci/dm1105/built-in.a
  AR      drivers/media/platform/broadcom/built-in.a
  CC      net/ipv4/datagram.o
  AR      drivers/media/pci/pt1/built-in.a
  AR      drivers/media/platform/cadence/built-in.a
  AR      drivers/media/pci/pt3/built-in.a
  CC      net/ipv6/ip6_flowlabel.o
  AR      drivers/media/pci/mantis/built-in.a
  AR      drivers/media/platform/chips-media/coda/built-in.a
  AR      drivers/media/pci/ngene/built-in.a
  CC      lib/lwq.o
  AR      drivers/media/platform/chips-media/wave5/built-in.a
  AR      drivers/media/pci/ddbridge/built-in.a
  AR      drivers/media/platform/chips-media/built-in.a
  AR      drivers/media/pci/saa7146/built-in.a
  AR      drivers/media/platform/imagination/built-in.a
  AR      drivers/media/pci/smipcie/built-in.a
  CC      drivers/input/input-mt.o
  AR      drivers/media/platform/intel/built-in.a
  AR      drivers/media/pci/netup_unidvb/built-in.a
  AR      drivers/media/platform/marvell/built-in.a
  AR      drivers/media/pci/intel/ipu3/built-in.a
  AR      drivers/media/platform/mediatek/jpeg/built-in.a
  AR      drivers/media/pci/intel/ivsc/built-in.a
  AR      drivers/media/pci/intel/built-in.a
  AR      drivers/media/platform/mediatek/mdp/built-in.a
  AR      drivers/media/pci/built-in.a
  AR      drivers/media/platform/mediatek/vcodec/common/built-in.a
  AR      drivers/media/platform/mediatek/vcodec/encoder/built-in.a
  CC      drivers/acpi/acpica/rscalc.o
  AR      drivers/media/platform/microchip/built-in.a
  AR      drivers/media/platform/mediatek/vcodec/decoder/built-in.a
  CC      drivers/gpu/drm/i915/gt/gen2_engine_cs.o
  AR      drivers/media/platform/mediatek/vcodec/built-in.a
  AR      drivers/pps/clients/built-in.a
  CC      drivers/ptp/ptp_clock.o
  AR      drivers/media/platform/mediatek/vpu/built-in.a
  AR      drivers/pps/generators/built-in.a
  CC      drivers/pps/pps.o
  AR      drivers/media/platform/mediatek/mdp3/built-in.a
  AR      drivers/media/platform/mediatek/built-in.a
  AR      drivers/media/platform/nuvoton/built-in.a
  AR      drivers/media/platform/nvidia/tegra-vde/built-in.a
  CC      lib/memweight.o
  AR      drivers/media/platform/nvidia/built-in.a
  AR      drivers/media/platform/nxp/dw100/built-in.a
  AR      drivers/media/platform/nxp/imx-jpeg/built-in.a
  AR      drivers/media/platform/nxp/imx8-isi/built-in.a
  CC      drivers/power/supply/power_supply_core.o
  AR      drivers/media/platform/nxp/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_idle.o
  CC      drivers/pps/kapi.o
  AR      drivers/media/platform/qcom/camss/built-in.a
  AR      drivers/media/platform/qcom/venus/built-in.a
  CC      drivers/power/supply/power_supply_sysfs.o
  AR      drivers/media/platform/qcom/built-in.a
  CC      lib/kfifo.o
  AR      drivers/media/platform/raspberrypi/pisp_be/built-in.a
  CC      drivers/ptp/ptp_chardev.o
  AR      drivers/media/platform/raspberrypi/rp1-cfe/built-in.a
  AR      drivers/media/platform/raspberrypi/built-in.a
  AR      drivers/media/usb/b2c2/built-in.a
  CC      arch/x86/kernel/stacktrace.o
  AR      drivers/media/usb/dvb-usb/built-in.a
  AR      drivers/media/usb/dvb-usb-v2/built-in.a
  AR      drivers/media/platform/renesas/rcar-vin/built-in.a
  AR      drivers/media/usb/s2255/built-in.a
  AR      drivers/media/platform/renesas/rzg2l-cru/built-in.a
  AR      drivers/media/platform/renesas/vsp1/built-in.a
  AR      drivers/media/usb/siano/built-in.a
  AR      drivers/media/platform/renesas/built-in.a
  AR      drivers/media/usb/ttusb-budget/built-in.a
  AR      drivers/media/usb/ttusb-dec/built-in.a
  AR      drivers/media/platform/rockchip/rga/built-in.a
  AR      drivers/media/usb/built-in.a
  AR      drivers/media/mmc/siano/built-in.a
  AR      drivers/media/platform/rockchip/rkisp1/built-in.a
  AR      drivers/media/mmc/built-in.a
  CC      drivers/pps/sysfs.o
  AR      drivers/media/platform/rockchip/built-in.a
  CC      net/sunrpc/rpc_pipe.o
  AR      drivers/media/platform/samsung/exynos-gsc/built-in.a
  AR      drivers/media/platform/samsung/exynos4-is/built-in.a
  CC      drivers/acpi/acpica/rscreate.o
  AR      drivers/media/platform/samsung/s3c-camif/built-in.a
  AR      drivers/media/platform/samsung/s5p-g2d/built-in.a
  CC      drivers/input/mouse/trackpoint.o
  AR      drivers/media/platform/samsung/s5p-jpeg/built-in.a
  AR      drivers/media/firewire/built-in.a
  AR      drivers/media/platform/samsung/s5p-mfc/built-in.a
  CC      net/ipv4/raw.o
  AR      drivers/media/platform/samsung/built-in.a
  AR      drivers/media/platform/st/sti/bdisp/built-in.a
  AR      drivers/media/platform/sunxi/sun4i-csi/built-in.a
  CC      kernel/kthread.o
  AR      drivers/media/platform/st/sti/c8sectpfe/built-in.a
  AR      drivers/media/platform/sunxi/sun6i-csi/built-in.a
  AR      drivers/media/platform/st/sti/delta/built-in.a
  AR      drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
  AR      drivers/media/platform/st/sti/hva/built-in.a
  AR      drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
  AR      drivers/media/platform/st/stm32/built-in.a
  AR      drivers/media/platform/sunxi/sun8i-di/built-in.a
  AR      drivers/media/platform/st/built-in.a
  AR      drivers/media/platform/sunxi/sun8i-rotate/built-in.a
  CC      drivers/input/mouse/cypress_ps2.o
  AR      drivers/media/platform/sunxi/built-in.a
  AR      drivers/media/platform/ti/am437x/built-in.a
  AR      drivers/media/platform/ti/cal/built-in.a
  AR      drivers/media/platform/ti/vpe/built-in.a
  AR      drivers/media/platform/ti/davinci/built-in.a
  AR      drivers/media/platform/ti/j721e-csi2rx/built-in.a
  AR      drivers/media/platform/ti/omap/built-in.a
  CC      drivers/usb/core/file.o
  AR      drivers/media/platform/ti/omap3isp/built-in.a
  AR      drivers/media/platform/ti/built-in.a
  AR      drivers/media/platform/verisilicon/built-in.a
  CC      mm/memblock.o
  AR      drivers/media/platform/via/built-in.a
  AR      drivers/media/platform/xilinx/built-in.a
  AR      drivers/media/platform/built-in.a
  CC      drivers/gpu/drm/drm_drv.o
  CC      drivers/hwmon/hwmon.o
  AR      drivers/media/spi/built-in.a
  AR      drivers/media/test-drivers/built-in.a
  AR      drivers/media/built-in.a
  CC      drivers/usb/host/ohci-hcd.o
  AR      drivers/usb/mon/built-in.a
  CC      drivers/gpu/drm/i915/gt/gen6_engine_cs.o
  CC      fs/ext4/orphan.o
  CC      drivers/usb/storage/scsiglue.o
  AR      drivers/pps/built-in.a
  AR      drivers/usb/misc/built-in.a
  CC      drivers/acpi/acpica/rsdumpinfo.o
  AR      drivers/rtc/built-in.a
  CC      drivers/usb/storage/protocol.o
  CC      fs/ioctl.o
  CC      fs/readdir.o
  CC      net/sunrpc/sysfs.o
  CC      fs/nfs/nfs4proc.o
  CC      drivers/gpu/drm/drm_dumb_buffers.o
  CC      arch/x86/kernel/reboot.o
  CC      drivers/gpu/drm/i915/gt/gen6_ppgtt.o
  CC [M]  net/netfilter/xt_nat.o
  CC      drivers/power/supply/power_supply_leds.o
  CC      drivers/i2c/i2c-core-acpi.o
  CC      lib/percpu-refcount.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_mcr.o
  CC      drivers/usb/core/buffer.o
  AR      drivers/thermal/broadcom/built-in.a
  AR      drivers/thermal/renesas/built-in.a
  AR      drivers/thermal/samsung/built-in.a
  CC      drivers/thermal/intel/intel_tcc.o
  AR      drivers/watchdog/built-in.a
  AR      drivers/thermal/st/built-in.a
  CC      drivers/acpi/acpica/rsinfo.o
  CC      drivers/md/md.o
  CC      drivers/cpufreq/cpufreq.o
  CC      drivers/usb/early/ehci-dbgp.o
  CC      mm/slub.o
  CC      net/mac80211/iface.o
  CC      drivers/ptp/ptp_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_pagefault.o
  CC      drivers/input/mouse/psmouse-smbus.o
  CC      net/sunrpc/svc_xprt.o
  CC      net/ipv6/inet6_connection_sock.o
  CC      drivers/thermal/intel/therm_throt.o
  CC      drivers/scsi/scsi_sysfs.o
  CC      drivers/power/supply/power_supply_hwmon.o
  CC      drivers/acpi/acpica/rsio.o
  CC [M]  drivers/thermal/intel/x86_pkg_temp_thermal.o
  CC      drivers/acpi/acpica/rsirq.o
  AR      drivers/thermal/qcom/built-in.a
  CC      net/ipv4/udp.o
  CC      drivers/usb/storage/transport.o
  CC      drivers/md/md-bitmap.o
  CC      kernel/sys_ni.o
  CC      lib/rhashtable.o
  CC      arch/x86/kernel/msr.o
  CC      arch/x86/kernel/cpuid.o
  CC      mm/madvise.o
  CC      net/ipv6/udp_offload.o
  CC      drivers/usb/core/sysfs.o
  CC      mm/page_io.o
  CC      arch/x86/kernel/early-quirks.o
  CC      fs/ext4/acl.o
  CC      net/sunrpc/xprtmultipath.o
  CC      drivers/i2c/i2c-smbus.o
  CC      drivers/acpi/acpica/rslist.o
  CC      drivers/cpuidle/governors/menu.o
  AR      drivers/power/supply/built-in.a
  AR      drivers/power/built-in.a
  CC      net/core/selftests.o
  CC      drivers/acpi/acpica/rsmemory.o
  CC      drivers/ptp/ptp_vclock.o
  CC      net/ipv4/udplite.o
  AR      drivers/hwmon/built-in.a
  CC      lib/base64.o
  CC [M]  net/netfilter/xt_LOG.o
  GEN     net/wireless/shipped-certs.c
  CC      kernel/nsproxy.o
  CC      drivers/cpufreq/freq_table.o
  CC      drivers/md/md-autodetect.o
  CC      drivers/usb/host/ohci-pci.o
  CC      net/ipv6/seg6.o
  AR      drivers/usb/early/built-in.a
  CC      drivers/md/dm.o
  AR      drivers/input/mouse/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_sysfs.o
  CC      drivers/input/input-poller.o
  CC      drivers/acpi/acpica/rsmisc.o
  CC      net/ipv6/fib6_notifier.o
  CC      drivers/gpu/drm/i915/gt/gen7_renderclear.o
  CC      drivers/acpi/acpica/rsserial.o
  CC      fs/nfs/nfs4xdr.o
  CC      fs/ext4/xattr_security.o
  CC      lib/once.o
  AR      drivers/net/ethernet/broadcom/built-in.a
  AR      drivers/net/ethernet/cortina/built-in.a
  AR      drivers/net/ethernet/dec/tulip/built-in.a
  AR      drivers/net/ethernet/dec/built-in.a
  AR      drivers/thermal/intel/built-in.a
  AR      drivers/thermal/tegra/built-in.a
  AR      drivers/net/ethernet/dlink/built-in.a
  AR      drivers/thermal/mediatek/built-in.a
  AR      drivers/net/ethernet/emulex/built-in.a
  CC      drivers/thermal/thermal_core.o
  AR      drivers/net/ethernet/engleder/built-in.a
  CC      drivers/cpuidle/governors/haltpoll.o
  AR      drivers/net/ethernet/ezchip/built-in.a
  CC      drivers/thermal/thermal_sysfs.o
  AR      drivers/net/ethernet/fujitsu/built-in.a
  AR      drivers/net/ethernet/fungible/built-in.a
  CC      drivers/acpi/pci_irq.o
  CC      net/sunrpc/stats.o
  AR      drivers/net/ethernet/google/built-in.a
  AR      drivers/net/ethernet/hisilicon/built-in.a
  CC      drivers/acpi/acpi_apd.o
  AR      drivers/net/ethernet/huawei/built-in.a
  CC      drivers/net/ethernet/intel/e1000/e1000_main.o
  CC      drivers/usb/storage/usb.o
  AR      drivers/scsi/built-in.a
  CC      drivers/usb/storage/initializers.o
  CC      kernel/notifier.o
  CC      drivers/acpi/acpica/rsutils.o
  CC      drivers/input/ff-core.o
  AR      drivers/i2c/built-in.a
  CC      net/ipv6/rpl.o
  CC      drivers/cpuidle/cpuidle.o
  CC      net/core/ptp_classifier.o
  CC      drivers/md/dm-table.o
  CC      drivers/usb/host/uhci-hcd.o
  CC      drivers/ptp/ptp_kvm_x86.o
  CC      arch/x86/kernel/smp.o
  CC      drivers/usb/core/endpoint.o
  CC      lib/refcount.o
  CC      drivers/cpufreq/cpufreq_performance.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_throttle.o
  CC      drivers/gpu/drm/i915/gt/gen8_engine_cs.o
  CC      fs/select.o
  CC      drivers/ptp/ptp_kvm_common.o
  CC      drivers/thermal/thermal_trip.o
  CC      lib/rcuref.o
  CC      kernel/ksysfs.o
  CC      drivers/md/dm-target.o
  CC      mm/swap_state.o
  AR      drivers/net/ethernet/i825xx/built-in.a
  CC      drivers/cpuidle/driver.o
  CC      drivers/usb/core/devio.o
  CC      drivers/gpu/drm/drm_edid.o
  CC      drivers/acpi/acpica/rsxface.o
  CC      drivers/gpu/drm/i915/gt/gen8_ppgtt.o
  CC      drivers/cpufreq/cpufreq_userspace.o
  CC      drivers/usb/storage/sierra_ms.o
  CC      lib/usercopy.o
  CC [M]  net/netfilter/xt_MASQUERADE.o
  CC      drivers/net/ethernet/intel/e1000e/82571.o
  CC      drivers/md/dm-linear.o
  CC      drivers/md/dm-stripe.o
  CC      mm/swapfile.o
  CC      drivers/input/touchscreen.o
  CC      net/mac80211/link.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
  CC      fs/dcache.o
  AR      drivers/cpuidle/governors/built-in.a
  CC      net/sunrpc/sysctl.o
  AR      fs/ext4/built-in.a
  CC      net/ipv4/udp_offload.o
  CC      net/core/netprio_cgroup.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_topology.o
  CC      drivers/usb/core/notify.o
  CC      lib/errseq.o
  CC      drivers/acpi/acpica/tbdata.o
  CC      drivers/thermal/thermal_helpers.o
  CC      drivers/cpufreq/cpufreq_ondemand.o
  CC      lib/bucket_locks.o
  CC      drivers/net/ethernet/intel/e1000e/ich8lan.o
  CC      kernel/cred.o
  AR      drivers/ptp/built-in.a
  CC      drivers/net/ethernet/intel/e1000e/80003es2lan.o
  CC      drivers/md/dm-ioctl.o
  CC      net/ipv6/ioam6.o
  CC      arch/x86/kernel/smpboot.o
  CC      drivers/cpuidle/governor.o
  CC      drivers/usb/storage/option_ms.o
  CC      drivers/input/ff-memless.o
  CC      fs/nfs/nfs4state.o
  CC [M]  net/netfilter/xt_addrtype.o
  CC      drivers/net/ethernet/intel/e1000/e1000_hw.o
  CC      drivers/acpi/acpi_platform.o
  CC      drivers/thermal/thermal_thresholds.o
  CC      drivers/acpi/acpica/tbfadt.o
  CC      drivers/usb/core/generic.o
  CC      fs/inode.o
  CC      net/mac80211/rate.o
  AR      drivers/mmc/built-in.a
  CC      drivers/cpufreq/cpufreq_governor.o
  CC      drivers/net/ethernet/intel/e100.o
  CC      kernel/reboot.o
  CC      lib/generic-radix-tree.o
  CC      net/wireless/shipped-certs.o
  CC      drivers/cpuidle/sysfs.o
  CC      drivers/usb/host/xhci.o
  CC      drivers/net/ethernet/intel/e1000/e1000_ethtool.o
  CC      fs/attr.o
  CC      drivers/thermal/thermal_hwmon.o
  CC      mm/swap_slots.o
  CC      drivers/net/ethernet/intel/e1000/e1000_param.o
  CC      drivers/usb/storage/usual-tables.o
  CC      drivers/acpi/acpica/tbfind.o
  CC      drivers/net/ethernet/intel/e1000e/mac.o
  CC      net/ipv4/arp.o
  AR      net/sunrpc/built-in.a
  CC      fs/nfs/nfs4renewd.o
  CC      drivers/md/dm-io.o
  CC      drivers/usb/host/xhci-mem.o
  CC      net/core/netclassid_cgroup.o
  CC      drivers/acpi/acpica/tbinstal.o
  CC      drivers/input/sparse-keymap.o
  CC [M]  drivers/gpu/drm/xe/xe_guc.o
  CC      drivers/acpi/acpica/tbprint.o
  CC      lib/bitmap-str.o
  CC      drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
  CC      kernel/async.o
  CC      drivers/input/vivaldi-fmap.o
  CC      drivers/thermal/gov_step_wise.o
  CC      drivers/cpufreq/cpufreq_governor_attr_set.o
  CC      fs/bad_inode.o
  CC      drivers/cpuidle/poll_state.o
  CC      arch/x86/kernel/tsc_sync.o
  CC      drivers/usb/core/quirks.o
  CC      drivers/usb/core/devices.o
  CC      drivers/cpuidle/cpuidle-haltpoll.o
  CC      drivers/gpu/drm/i915/gt/intel_context.o
  AR      drivers/usb/storage/built-in.a
  CC      drivers/acpi/acpica/tbutils.o
  CC      net/ipv6/sysctl_net_ipv6.o
  CC      net/mac80211/michael.o
  CC      drivers/gpu/drm/drm_eld.o
  CC      net/core/dst_cache.o
  CC      drivers/cpufreq/acpi-cpufreq.o
  CC      mm/dmapool.o
  CC      net/ipv4/icmp.o
  CC      drivers/net/ethernet/intel/e1000e/manage.o
  AR      drivers/net/ethernet/microsoft/built-in.a
  CC      drivers/acpi/acpica/tbxface.o
  CC      fs/nfs/nfs4super.o
  CC      drivers/input/input-leds.o
  CC      kernel/range.o
  AR      net/netfilter/built-in.a
  CC      kernel/smpboot.o
  CC      arch/x86/kernel/setup_percpu.o
  CC      lib/string_helpers.o
  CC      drivers/thermal/gov_user_space.o
  CC      drivers/gpu/drm/i915/gt/intel_context_sseu.o
  CC      arch/x86/kernel/mpparse.o
  CC      drivers/cpufreq/amd-pstate.o
  CC      drivers/gpu/drm/drm_encoder.o
  AR      drivers/cpuidle/built-in.a
  CC      mm/hugetlb.o
  CC      net/core/gro_cells.o
  CC      net/ipv4/devinet.o
  CC      drivers/gpu/drm/i915/gt/intel_engine_cs.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ads.o
  CC      drivers/acpi/acpi_pnp.o
  AR      drivers/net/ethernet/litex/built-in.a
  CC      net/ipv4/af_inet.o
  CC      drivers/net/ethernet/intel/e1000e/nvm.o
  CC      drivers/cpufreq/amd-pstate-trace.o
  CC      drivers/input/evdev.o
  CC      drivers/acpi/acpica/tbxfload.o
  CC      drivers/usb/host/xhci-ext-caps.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_capture.o
  AR      drivers/thermal/built-in.a
  AR      drivers/ufs/built-in.a
  CC      net/ipv4/igmp.o
  CC      drivers/md/dm-kcopyd.o
  CC      drivers/acpi/power.o
  CC      kernel/ucount.o
  CC      lib/hexdump.o
  CC      drivers/usb/core/phy.o
  CC      lib/kstrtox.o
  CC      net/ipv6/xfrm6_policy.o
  AR      drivers/net/ethernet/marvell/octeon_ep/built-in.a
  AR      drivers/net/ethernet/marvell/octeon_ep_vf/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
  AR      drivers/net/ethernet/marvell/octeontx2/built-in.a
  CC      fs/nfs/nfs4file.o
  CC      drivers/net/ethernet/marvell/sky2.o
  CC      drivers/acpi/event.o
  AR      drivers/net/ethernet/marvell/prestera/built-in.a
  AR      drivers/firmware/arm_ffa/built-in.a
  AR      drivers/firmware/arm_scmi/built-in.a
  CC      drivers/acpi/acpica/tbxfroot.o
  AR      drivers/firmware/broadcom/built-in.a
  CC      drivers/cpufreq/intel_pstate.o
  AR      drivers/crypto/stm32/built-in.a
  AR      drivers/firmware/cirrus/built-in.a
  AR      drivers/crypto/xilinx/built-in.a
  CC      net/core/failover.o
  AR      drivers/firmware/meson/built-in.a
  AR      drivers/firmware/microchip/built-in.a
  AR      drivers/crypto/hisilicon/built-in.a
  AR      drivers/net/ethernet/mellanox/built-in.a
  CC      drivers/gpu/drm/drm_file.o
  AR      drivers/crypto/intel/keembay/built-in.a
  AR      drivers/crypto/starfive/built-in.a
  AR      drivers/crypto/intel/ixp4xx/built-in.a
  CC      drivers/acpi/evged.o
  AR      drivers/crypto/intel/built-in.a
  AR      drivers/crypto/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_guc_ct.o
  CC      net/ipv4/fib_frontend.o
  AR      drivers/net/ethernet/intel/e1000/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_guc_db_mgr.o
  CC      net/ipv6/xfrm6_state.o
  CC      drivers/firmware/efi/libstub/efi-stub-helper.o
  CC      drivers/gpu/drm/i915/gt/intel_engine_pm.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_hwconfig.o
  CC      fs/nfs/delegation.o
  CC      kernel/regset.o
  CC      arch/x86/kernel/trace_clock.o
  CC      drivers/gpu/drm/drm_fourcc.o
  CC      drivers/usb/host/xhci-ring.o
  CC      lib/iomap.o
  CC      drivers/clocksource/acpi_pm.o
  CC      drivers/net/ethernet/intel/e1000e/phy.o
  CC      drivers/usb/host/xhci-hub.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_id_mgr.o
  CC      drivers/acpi/acpica/utaddress.o
  CC      arch/x86/kernel/trace.o
  CC      drivers/usb/core/port.o
  CC      net/mac80211/tkip.o
  CC      fs/nfs/nfs4idmap.o
  CC      net/ipv6/xfrm6_input.o
  CC      drivers/firmware/efi/efi-bgrt.o
  CC      kernel/ksyms_common.o
  CC      drivers/clocksource/i8253.o
  AR      drivers/firmware/imx/built-in.a
  AR      drivers/input/built-in.a
  CC      drivers/usb/core/hcd-pci.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_klv_helpers.o
  CC      lib/iomap_copy.o
  AR      drivers/firmware/psci/built-in.a
  CC      drivers/acpi/sysfs.o
  CC      net/mac80211/aes_cmac.o
  CC      arch/x86/kernel/rethook.o
  CC      drivers/firmware/efi/libstub/gop.o
  CC      drivers/acpi/acpica/utalloc.o
  CC      drivers/hid/hid-core.o
  CC      drivers/hid/usbhid/hid-core.o
  CC      drivers/md/dm-sysfs.o
  CC      net/ipv6/xfrm6_output.o
  CC      drivers/md/dm-stats.o
  AR      drivers/firmware/qcom/built-in.a
  CC      net/ipv6/xfrm6_protocol.o
  AR      net/core/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_engine_user.o
  CC      kernel/groups.o
  CC      drivers/hid/usbhid/hiddev.o
  CC      drivers/firmware/efi/libstub/secureboot.o
  CC      drivers/usb/host/xhci-dbg.o
  AR      drivers/clocksource/built-in.a
  CC      drivers/net/ethernet/intel/e1000e/param.o
  CC      drivers/usb/host/xhci-trace.o
  CC      lib/devres.o
  CC      drivers/hid/hid-input.o
  CC      net/ipv4/fib_semantics.o
  CC      net/ipv6/netfilter.o
  CC      drivers/acpi/acpica/utascii.o
  CC      drivers/usb/core/usb-acpi.o
  CC      kernel/kcmp.o
  CC      drivers/net/ethernet/intel/e1000e/ethtool.o
  CC      net/mac80211/aes_gmac.o
  CC      fs/nfs/callback.o
  CC      drivers/usb/host/xhci-debugfs.o
  CC      drivers/hid/usbhid/hid-pidff.o
  CC      arch/x86/kernel/vmcore_info_32.o
  CC      drivers/md/dm-rq.o
  CC      drivers/acpi/acpica/utbuffer.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_log.o
  CC      mm/mmu_notifier.o
  CC      drivers/acpi/acpica/utcksum.o
  CC      drivers/acpi/property.o
  CC      lib/check_signature.o
  CC      drivers/gpu/drm/drm_framebuffer.o
  AR      drivers/firmware/smccc/built-in.a
  CC      fs/nfs/callback_xdr.o
  CC      lib/interval_tree.o
  CC      drivers/firmware/efi/libstub/tpm.o
  CC      drivers/gpu/drm/i915/gt/intel_execlists_submission.o
  CC      drivers/acpi/acpica/utcopy.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_pc.o
  CC      arch/x86/kernel/machine_kexec_32.o
  CC      drivers/firmware/efi/efi.o
  CC      net/ipv4/fib_trie.o
  CC      lib/assoc_array.o
  CC      drivers/acpi/debugfs.o
  CC      drivers/hid/hid-quirks.o
  CC      fs/nfs/callback_proc.o
  AR      drivers/usb/core/built-in.a
  CC      drivers/md/dm-io-rewind.o
  CC      drivers/firmware/efi/vars.o
  CC      kernel/freezer.o
  CC      fs/file.o
  CC      lib/bitrev.o
  CC      drivers/gpu/drm/drm_gem.o
  AS      arch/x86/kernel/relocate_kernel_32.o
  AR      drivers/cpufreq/built-in.a
  CC      arch/x86/kernel/crash_dump_32.o
  CC      net/ipv6/proc.o
  CC      net/mac80211/fils_aead.o
  CC      drivers/firmware/efi/reboot.o
  CC      drivers/acpi/acpica/utexcep.o
  CC      fs/nfs/nfs4namespace.o
  CC      drivers/md/dm-builtin.o
  CC      drivers/firmware/efi/libstub/file.o
  CC      fs/nfs/nfs4getroot.o
  CC      drivers/gpu/drm/drm_ioctl.o
  CC      net/ipv6/syncookies.o
  CC      net/ipv4/fib_notifier.o
  CC      lib/crc-ccitt.o
  CC      lib/crc16.o
  AR      drivers/platform/surface/built-in.a
  AR      drivers/platform/x86/amd/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_ggtt.o
  CC      net/ipv6/calipso.o
  CC      net/ipv4/inet_fragment.o
  AR      drivers/platform/x86/intel/built-in.a
  CC      drivers/platform/x86/wmi.o
  CC      kernel/profile.o
  CC      mm/migrate.o
  HOSTCC  lib/gen_crc32table
  CC      drivers/acpi/acpica/utdebug.o
  CC      drivers/gpu/drm/drm_lease.o
  CC      net/mac80211/cfg.o
  CC      kernel/stacktrace.o
  CC      drivers/md/dm-raid1.o
  AR      drivers/hid/usbhid/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
  CC      drivers/hid/hid-debug.o
  CC      fs/nfs/nfs4client.o
  CC      drivers/gpu/drm/drm_managed.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_submit.o
  AR      drivers/firmware/tegra/built-in.a
  CC      drivers/hid/hidraw.o
  CC      kernel/dma.o
  AR      net/wireless/built-in.a
  CC      arch/x86/kernel/crash.o
  CC      drivers/usb/host/xhci-pci.o
  CC      kernel/smp.o
  CC      drivers/mailbox/mailbox.o
  CC      lib/xxhash.o
  CC      drivers/gpu/drm/drm_mm.o
  CC      drivers/hid/hid-generic.o
  CC      drivers/acpi/acpica/utdecode.o
  AR      drivers/net/ethernet/marvell/built-in.a
  CC      drivers/firmware/efi/libstub/mem.o
  CC      drivers/acpi/acpi_lpat.o
  CC      net/mac80211/ethtool.o
  CC      arch/x86/kernel/module.o
  AR      drivers/firmware/xilinx/built-in.a
  CC      net/mac80211/rx.o
  AR      drivers/net/ethernet/meta/built-in.a
  CC      mm/page_counter.o
  CC      drivers/net/ethernet/intel/e1000e/netdev.o
  AR      drivers/perf/built-in.a
  CC      net/ipv6/ah6.o
  CC      lib/genalloc.o
  CC      drivers/acpi/acpica/utdelete.o
  CC      fs/filesystems.o
  CC      drivers/gpu/drm/i915/gt/intel_gt.o
  CC      drivers/firmware/efi/libstub/random.o
  CC      drivers/firmware/dmi_scan.o
  CC      drivers/mailbox/pcc.o
  CC      arch/x86/kernel/doublefault_32.o
  CC      drivers/platform/x86/wmi-bmof.o
  CC      lib/percpu_counter.o
  CC      net/mac80211/spectmgmt.o
  CC      net/ipv6/esp6.o
  CC [M]  drivers/gpu/drm/xe/xe_heci_gsc.o
  CC      drivers/hid/hid-a4tech.o
  CC      drivers/acpi/acpi_pcc.o
  CC      drivers/acpi/acpica/uterror.o
  CC      drivers/hid/hid-apple.o
  CC      fs/namespace.o
  CC      arch/x86/kernel/early_printk.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
  AR      drivers/net/ethernet/micrel/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine.o
  CC      drivers/md/dm-log.o
  CC      drivers/platform/x86/eeepc-laptop.o
  CC      drivers/acpi/ac.o
  CC      net/ipv6/sit.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
  CC      net/ipv4/ping.o
  CC      drivers/net/ethernet/intel/e1000e/ptp.o
  CC      drivers/firmware/efi/memattr.o
  AR      drivers/net/ethernet/microchip/built-in.a
  CC      net/mac80211/tx.o
  CC      drivers/platform/x86/p2sb.o
  CC      drivers/acpi/acpica/uteval.o
  CC      kernel/uid16.o
  CC      mm/hugetlb_cgroup.o
  CC      drivers/md/dm-region-hash.o
  CC      lib/audit.o
  CC      fs/nfs/nfs4session.o
  CC      lib/syscall.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine_group.o
  CC      drivers/firmware/efi/libstub/randomalloc.o
  CC      drivers/firmware/dmi-id.o
  CC      lib/errname.o
  CC      drivers/md/dm-zero.o
  AR      drivers/mailbox/built-in.a
  CC      drivers/firmware/efi/libstub/pci.o
  CC      kernel/kallsyms.o
  CC      drivers/acpi/button.o
  CC      drivers/acpi/acpica/utglobal.o
  CC      arch/x86/kernel/hpet.o
  CC      drivers/firmware/memmap.o
  CC      net/ipv4/ip_tunnel_core.o
  CC      kernel/acct.o
  CC      drivers/acpi/acpica/uthex.o
  CC      net/mac80211/key.o
  AR      drivers/net/ethernet/mscc/built-in.a
  CC      drivers/acpi/acpica/utids.o
  CC      drivers/hid/hid-belkin.o
  CC      lib/nlattr.o
  AR      drivers/usb/host/built-in.a
  AR      drivers/usb/built-in.a
  CC      fs/seq_file.o
  CC      drivers/gpu/drm/drm_mode_config.o
  CC      drivers/acpi/fan_core.o
  CC      fs/nfs/dns_resolve.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_fence.o
  CC      drivers/firmware/efi/libstub/skip_spaces.o
  AR      drivers/net/ethernet/myricom/built-in.a
  CC      drivers/acpi/acpica/utinit.o
  CC      net/ipv6/addrconf_core.o
  CC      drivers/acpi/fan_attr.o
  CC      drivers/acpi/acpica/utlock.o
  CC      net/mac80211/util.o
  AR      drivers/hwtracing/intel_th/built-in.a
  CC      drivers/acpi/fan_hwmon.o
  CC      net/ipv6/exthdrs_core.o
  CC      drivers/acpi/acpica/utmath.o
  CC      arch/x86/kernel/amd_nb.o
  CC      net/mac80211/parse.o
  CC      drivers/firmware/efi/tpm.o
  CC      drivers/hid/hid-cherry.o
  CC      net/mac80211/wme.o
  AR      drivers/platform/x86/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_huc.o
  AR      drivers/platform/built-in.a
  AR      drivers/android/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_irq.o
  AR      drivers/nvmem/layouts/built-in.a
  CC      drivers/nvmem/core.o
  CC      net/mac80211/chan.o
  CC      drivers/firmware/efi/libstub/lib-cmdline.o
  CC      drivers/gpu/drm/drm_mode_object.o
  AR      drivers/md/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.o
  CC [M]  drivers/gpu/drm/xe/xe_lrc.o
  CC      drivers/acpi/acpi_video.o
  CC      fs/xattr.o
  CC      drivers/firmware/efi/libstub/lib-ctype.o
  AR      drivers/net/ethernet/natsemi/built-in.a
  CC      drivers/firmware/efi/memmap.o
  CC      lib/cpu_rmap.o
  CC      fs/nfs/nfs4trace.o
  CC      drivers/firmware/efi/libstub/alignedmem.o
  CC      drivers/hid/hid-chicony.o
  CC      mm/early_ioremap.o
  CC      drivers/acpi/acpica/utmisc.o
  CC      arch/x86/kernel/kvm.o
  CC      drivers/hid/hid-cypress.o
  CC      drivers/acpi/video_detect.o
  CC      drivers/gpu/drm/drm_modes.o
  CC      net/ipv6/ip6_checksum.o
  CC      arch/x86/kernel/kvmclock.o
  CC      net/mac80211/trace.o
  CC      fs/libfs.o
  CC      drivers/firmware/efi/libstub/relocate.o
  CC      drivers/gpu/drm/drm_modeset_lock.o
  CC      kernel/vmcore_info.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
  CC      drivers/acpi/acpica/utmutex.o
  CC      drivers/firmware/efi/capsule.o
  CC      fs/nfs/nfs4sysctl.o
  CC      mm/secretmem.o
  CC      net/ipv4/gre_offload.o
  CC      drivers/acpi/processor_driver.o
  CC      net/ipv6/ip6_icmp.o
  CC      lib/dynamic_queue_limits.o
  CC      drivers/firmware/efi/libstub/printk.o
  CC      net/mac80211/mlme.o
  CC      fs/fs-writeback.o
  CC      kernel/elfcorehdr.o
  CC      drivers/acpi/acpica/utnonansi.o
  CC      drivers/gpu/drm/drm_plane.o
  CC      net/ipv6/output_core.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
  CC      net/mac80211/tdls.o
  CC      drivers/hid/hid-ezkey.o
  CC      drivers/gpu/drm/drm_prime.o
  CC      fs/pnode.o
  CC      drivers/acpi/acpica/utobject.o
  CC      lib/glob.o
  CC      net/ipv4/metrics.o
  CC      drivers/firmware/efi/libstub/vsprintf.o
  CC      drivers/firmware/efi/esrt.o
  CC      kernel/crash_reserve.o
  AR      drivers/nvmem/built-in.a
  CC      drivers/gpu/drm/drm_print.o
  CC      mm/hmm.o
  CC      net/ipv6/protocol.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
  CC      drivers/hid/hid-gyration.o
  CC      lib/strncpy_from_user.o
  CC      drivers/firmware/efi/runtime-wrappers.o
  CC      fs/splice.o
  CC [M]  drivers/gpu/drm/xe/xe_migrate.o
  CC      drivers/acpi/processor_thermal.o
  CC      mm/memfd.o
  AR      drivers/net/ethernet/neterion/built-in.a
  CC      lib/strnlen_user.o
  CC      drivers/acpi/acpica/utosi.o
  CC      drivers/firmware/efi/libstub/x86-stub.o
  CC      net/ipv6/ip6_offload.o
  CC      arch/x86/kernel/paravirt.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_irq.o
  CC [M]  drivers/gpu/drm/xe/xe_mmio.o
  CC      drivers/acpi/processor_idle.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_mcr.o
  CC      drivers/firmware/efi/libstub/smbios.o
  CC      drivers/gpu/drm/drm_property.o
  CC      drivers/acpi/acpica/utownerid.o
  AR      drivers/net/ethernet/netronome/built-in.a
  CC      kernel/kexec_core.o
  CC      mm/ptdump.o
  CC [M]  drivers/gpu/drm/xe/xe_mocs.o
  CC      drivers/firmware/efi/capsule-loader.o
  CC      lib/net_utils.o
  CC      net/ipv4/netlink.o
  CC      mm/execmem.o
  CC      lib/sg_pool.o
  AR      drivers/net/ethernet/ni/built-in.a
  CC      drivers/acpi/acpica/utpredef.o
  CC      drivers/gpu/drm/drm_rect.o
  CC      net/ipv6/tcpv6_offload.o
  CC      drivers/firmware/efi/earlycon.o
  CC      drivers/hid/hid-ite.o
  STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
  CC [M]  drivers/gpu/drm/xe/xe_module.o
  CC      net/ipv4/nexthop.o
  CC      arch/x86/kernel/pvclock.o
  CC      kernel/crash_core.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_pm.o
  CC      fs/sync.o
  CC      net/ipv4/udp_tunnel_stub.o
  CC      net/ipv4/ip_tunnel.o
  CC      drivers/acpi/processor_throttling.o
  STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
  CC      fs/utimes.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
  CC      net/ipv4/sysctl_net_ipv4.o
  CC      drivers/acpi/acpica/utresdecode.o
  CC      fs/d_path.o
  CC      drivers/net/ethernet/nvidia/forcedeth.o
  STUBCPY drivers/firmware/efi/libstub/file.stub.o
  STUBCPY drivers/firmware/efi/libstub/gop.stub.o
  STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
  STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
  STUBCPY drivers/firmware/efi/libstub/mem.stub.o
  STUBCPY drivers/firmware/efi/libstub/pci.stub.o
  CC      drivers/acpi/acpica/utresrc.o
  STUBCPY drivers/firmware/efi/libstub/printk.stub.o
  STUBCPY drivers/firmware/efi/libstub/random.stub.o
  STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
  STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
  CC      net/ipv4/proc.o
  STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
  STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
  STUBCPY drivers/firmware/efi/libstub/smbios.stub.o
  AR      drivers/net/ethernet/oki-semi/built-in.a
  STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
  CC      net/ipv6/exthdrs_offload.o
  STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
  CC      lib/stackdepot.o
  STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
  CC      drivers/acpi/processor_perflib.o
  AR      drivers/firmware/efi/libstub/lib.a
  CC      arch/x86/kernel/pcspeaker.o
  CC      net/ipv4/fib_rules.o
  AR      mm/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
  AR      drivers/firmware/efi/built-in.a
  AR      drivers/firmware/built-in.a
  CC      drivers/acpi/acpica/utstate.o
  AR      drivers/net/ethernet/packetengines/built-in.a
  AR      drivers/net/ethernet/qlogic/built-in.a
  CC      drivers/hid/hid-kensington.o
  AR      drivers/net/ethernet/qualcomm/emac/built-in.a
  CC      drivers/net/ethernet/realtek/8139too.o
  AR      drivers/net/ethernet/qualcomm/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_gt_requests.o
  AR      drivers/net/ethernet/renesas/built-in.a
  CC      drivers/net/ethernet/realtek/r8169_main.o
  AR      drivers/net/ethernet/rdc/built-in.a
  CC      net/ipv4/ipmr.o
  CC      drivers/acpi/container.o
  CC      net/ipv4/ipmr_base.o
  CC      net/ipv6/inet6_hashtables.o
  CC      drivers/gpu/drm/drm_syncobj.o
  CC      drivers/acpi/acpica/utstring.o
  AR      drivers/net/ethernet/intel/e1000e/built-in.a
  AR      drivers/net/ethernet/intel/built-in.a
  CC      drivers/hid/hid-lg.o
  CC      net/ipv4/syncookies.o
  CC      net/mac80211/ocb.o
  CC      kernel/kexec.o
  CC      net/ipv4/tunnel4.o
  AR      drivers/net/ethernet/rocker/built-in.a
  CC      fs/stack.o
  CC      arch/x86/kernel/check.o
  CC      lib/asn1_decoder.o
  CC [M]  drivers/gpu/drm/xe/xe_oa.o
  CC [M]  drivers/gpu/drm/xe/xe_observation.o
  CC      net/ipv6/mcast_snoop.o
  CC      drivers/gpu/drm/drm_sysfs.o
  AR      drivers/net/ethernet/samsung/built-in.a
  CC      drivers/gpu/drm/drm_trace_points.o
  CC      kernel/utsname.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
  CC      drivers/hid/hid-lgff.o
  GEN     lib/oid_registry_data.c
  CC      drivers/acpi/acpica/utstrsuppt.o
  CC      drivers/acpi/acpica/utstrtoul64.o
  CC      drivers/acpi/acpica/utxface.o
  CC [M]  drivers/gpu/drm/xe/xe_pat.o
  CC      drivers/gpu/drm/drm_vblank.o
  CC      lib/ucs2_string.o
  CC      kernel/pid_namespace.o
  CC      drivers/hid/hid-lg4ff.o
  CC      drivers/net/ethernet/realtek/r8169_firmware.o
  AR      drivers/net/ethernet/seeq/built-in.a
  CC      net/mac80211/airtime.o
  CC      drivers/gpu/drm/drm_vblank_work.o
  CC      drivers/acpi/acpica/utxfinit.o
  CC      net/mac80211/eht.o
  AR      fs/nfs/built-in.a
  CC      drivers/acpi/thermal_lib.o
  CC      fs/fs_struct.o
  CC      kernel/stop_machine.o
  CC      drivers/net/ethernet/realtek/r8169_phy_config.o
  AR      drivers/net/ethernet/silan/built-in.a
  CC      lib/sbitmap.o
  CC      drivers/acpi/acpica/utxferror.o
  CC      arch/x86/kernel/uprobes.o
  CC      fs/statfs.o
  CC      drivers/gpu/drm/drm_vma_manager.o
  CC      drivers/hid/hid-lg-g15.o
  CC      drivers/hid/hid-microsoft.o
  CC      drivers/hid/hid-monterey.o
  CC      arch/x86/kernel/perf_regs.o
  CC      fs/fs_pin.o
  CC [M]  drivers/gpu/drm/xe/xe_pci.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
  CC      drivers/acpi/acpica/utxfmutex.o
  CC [M]  drivers/gpu/drm/xe/xe_pcode.o
  CC      drivers/gpu/drm/drm_writeback.o
  CC      kernel/audit.o
  CC      drivers/acpi/thermal.o
  CC      drivers/hid/hid-ntrig.o
  AR      drivers/net/ethernet/sis/built-in.a
  CC      arch/x86/kernel/tracepoint.o
  AR      drivers/net/ethernet/sfc/built-in.a
  CC      arch/x86/kernel/itmt.o
  CC      net/mac80211/led.o
  CC      kernel/auditfilter.o
  CC [M]  drivers/gpu/drm/xe/xe_pm.o
  CC      net/ipv4/ipconfig.o
  CC      lib/group_cpus.o
  AR      drivers/net/ethernet/smsc/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_gtt.o
  CC      net/mac80211/pm.o
  CC      arch/x86/kernel/umip.o
  CC      lib/fw_table.o
  AR      net/ipv6/built-in.a
  CC      drivers/acpi/nhlt.o
  CC      drivers/acpi/acpi_memhotplug.o
  CC      drivers/hid/hid-pl.o
  CC      fs/nsfs.o
  CC      drivers/acpi/ioapic.o
  AR      drivers/acpi/acpica/built-in.a
  CC      arch/x86/kernel/unwind_frame.o
  CC      drivers/gpu/drm/drm_panel.o
  CC      fs/fs_types.o
  CC      drivers/gpu/drm/i915/gt/intel_llc.o
  CC      drivers/hid/hid-petalynx.o
  CC      net/ipv4/netfilter.o
  CC      drivers/gpu/drm/drm_pci.o
  CC      drivers/hid/hid-redragon.o
  CC      drivers/hid/hid-samsung.o
  CC      drivers/hid/hid-sony.o
  CC      net/mac80211/rc80211_minstrel_ht.o
  CC      kernel/auditsc.o
  CC      drivers/gpu/drm/i915/gt/intel_lrc.o
  CC      net/ipv4/tcp_cubic.o
  CC      drivers/gpu/drm/drm_debugfs.o
  CC      drivers/acpi/battery.o
  AR      drivers/net/ethernet/socionext/built-in.a
  AR      drivers/net/ethernet/stmicro/built-in.a
  CC      fs/fs_context.o
  CC      drivers/gpu/drm/drm_debugfs_crc.o
  CC      drivers/hid/hid-sunplus.o
  CC      fs/fs_parser.o
  AR      lib/lib.a
  CC      fs/fsopen.o
  AR      drivers/net/ethernet/sun/built-in.a
  CC      net/mac80211/wbrf.o
  CC      drivers/gpu/drm/i915/gt/intel_migrate.o
  GEN     lib/crc32table.h
  CC      lib/oid_registry.o
  CC      net/ipv4/tcp_sigpool.o
  CC      net/ipv4/cipso_ipv4.o
  CC      kernel/audit_watch.o
  CC      drivers/gpu/drm/drm_panel_orientation_quirks.o
  CC      drivers/gpu/drm/i915/gt/intel_mocs.o
  AR      drivers/net/ethernet/tehuti/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_preempt_fence.o
  CC      drivers/acpi/bgrt.o
  CC [M]  drivers/gpu/drm/xe/xe_pt.o
  CC      drivers/gpu/drm/i915/gt/intel_ppgtt.o
  CC      fs/init.o
  CC      net/ipv4/xfrm4_policy.o
  AR      arch/x86/kernel/built-in.a
  CC      drivers/gpu/drm/drm_buddy.o
  CC      drivers/gpu/drm/drm_gem_shmem_helper.o
  AR      arch/x86/built-in.a
  CC      net/ipv4/xfrm4_state.o
  CC      drivers/hid/hid-topseed.o
  CC      drivers/acpi/spcr.o
  CC      kernel/audit_fsnotify.o
  AR      drivers/net/ethernet/ti/built-in.a
  CC      lib/crc32.o
  CC      fs/kernel_read_file.o
  CC      net/ipv4/xfrm4_input.o
  CC [M]  drivers/gpu/drm/xe/xe_pt_walk.o
  CC      drivers/gpu/drm/drm_atomic_helper.o
  AR      drivers/net/ethernet/nvidia/built-in.a
  AR      drivers/net/ethernet/vertexcom/built-in.a
  CC      kernel/audit_tree.o
  CC      fs/mnt_idmapping.o
  CC      net/ipv4/xfrm4_output.o
  CC [M]  drivers/gpu/drm/xe/xe_query.o
  CC      net/ipv4/xfrm4_protocol.o
  AR      drivers/net/ethernet/via/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_range_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_sr.o
  CC      fs/remap_range.o
  CC      kernel/kprobes.o
  CC      drivers/gpu/drm/drm_atomic_state_helper.o
  CC      fs/pidfs.o
  CC      fs/buffer.o
  AR      drivers/net/ethernet/wangxun/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_reg_whitelist.o
  AR      drivers/net/ethernet/wiznet/built-in.a
  CC      drivers/gpu/drm/drm_crtc_helper.o
  AR      drivers/net/ethernet/xilinx/built-in.a
  CC      fs/mpage.o
  CC      kernel/seccomp.o
  CC [M]  drivers/gpu/drm/xe/xe_rtp.o
  AR      lib/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_rc6.o
  CC      drivers/gpu/drm/drm_damage_helper.o
  AR      drivers/net/ethernet/realtek/built-in.a
  AR      drivers/net/ethernet/xircom/built-in.a
  AR      drivers/net/ethernet/synopsys/built-in.a
  AR      drivers/net/ethernet/pensando/built-in.a
  CC      fs/proc_namespace.o
  AR      drivers/net/ethernet/built-in.a
  AR      drivers/acpi/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_region_lmem.o
  CC [M]  drivers/gpu/drm/xe/xe_ring_ops.o
  CC      drivers/gpu/drm/i915/gt/intel_renderstate.o
  CC      drivers/gpu/drm/drm_encoder_slave.o
  AR      drivers/net/built-in.a
  AR      drivers/hid/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_reset.o
  CC      fs/direct-io.o
  CC      kernel/relay.o
  CC      drivers/gpu/drm/drm_flip_work.o
  CC      drivers/gpu/drm/drm_format_helper.o
  CC      kernel/utsname_sysctl.o
  CC [M]  drivers/gpu/drm/xe/xe_sa.o
  CC      kernel/delayacct.o
  CC      drivers/gpu/drm/drm_gem_atomic_helper.o
  CC      drivers/gpu/drm/i915/gt/intel_ring.o
  CC      fs/eventpoll.o
  CC [M]  drivers/gpu/drm/xe/xe_sched_job.o
  CC      fs/anon_inodes.o
  CC      drivers/gpu/drm/drm_gem_framebuffer_helper.o
  CC      drivers/gpu/drm/i915/gt/intel_ring_submission.o
  CC [M]  drivers/gpu/drm/xe/xe_shrinker.o
  CC      fs/signalfd.o
  CC      drivers/gpu/drm/i915/gt/intel_rps.o
  CC      kernel/taskstats.o
  CC      drivers/gpu/drm/drm_kms_helper_common.o
  CC      kernel/tsacct.o
  CC      drivers/gpu/drm/i915/gt/intel_sa_media.o
  CC      drivers/gpu/drm/i915/gt/intel_sseu.o
  CC      drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
  CC      kernel/tracepoint.o
  CC      drivers/gpu/drm/i915/gt/intel_timeline.o
  CC      fs/timerfd.o
  CC      drivers/gpu/drm/i915/gt/intel_tlb.o
  CC      drivers/gpu/drm/i915/gt/intel_wopcm.o
  CC      fs/eventfd.o
  CC [M]  drivers/gpu/drm/xe/xe_step.o
  CC      kernel/irq_work.o
  AR      net/ipv4/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_sync.o
  CC      drivers/gpu/drm/drm_modeset_helper.o
  CC      kernel/static_call.o
  CC      drivers/gpu/drm/drm_plane_helper.o
  CC      fs/aio.o
  CC [M]  drivers/gpu/drm/xe/xe_tile.o
  CC      drivers/gpu/drm/i915/gt/intel_workarounds.o
  CC      drivers/gpu/drm/drm_probe_helper.o
  CC      kernel/padata.o
  CC      drivers/gpu/drm/i915/gt/shmem_utils.o
  CC      drivers/gpu/drm/drm_self_refresh_helper.o
  CC      fs/locks.o
  CC      kernel/jump_label.o
  CC      drivers/gpu/drm/drm_simple_kms_helper.o
  CC      kernel/context_tracking.o
  CC      drivers/gpu/drm/i915/gt/sysfs_engines.o
  CC [M]  drivers/gpu/drm/xe/xe_tile_sysfs.o
  CC      drivers/gpu/drm/bridge/panel.o
  CC      kernel/iomem.o
  CC      fs/binfmt_misc.o
  CC      kernel/rseq.o
  CC      drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
  CC      drivers/gpu/drm/i915/gt/gen6_renderstate.o
  CC [M]  drivers/gpu/drm/xe/xe_trace.o
  CC      fs/binfmt_script.o
  CC      drivers/gpu/drm/drm_mipi_dsi.o
  CC [M]  drivers/gpu/drm/drm_exec.o
  CC      drivers/gpu/drm/i915/gt/gen7_renderstate.o
  CC [M]  drivers/gpu/drm/xe/xe_trace_bo.o
  CC [M]  drivers/gpu/drm/drm_gpuvm.o
  CC      fs/binfmt_elf.o
  CC      drivers/gpu/drm/i915/gt/gen8_renderstate.o
  CC [M]  drivers/gpu/drm/xe/xe_trace_guc.o
  CC [M]  drivers/gpu/drm/xe/xe_trace_lrc.o
  CC      fs/mbcache.o
  CC [M]  drivers/gpu/drm/drm_suballoc.o
  CC      drivers/gpu/drm/i915/gt/gen9_renderstate.o
  CC      fs/posix_acl.o
  CC      fs/coredump.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
  CC      fs/drop_caches.o
  CC      fs/sysctls.o
  CC [M]  drivers/gpu/drm/drm_gem_ttm_helper.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_busy.o
  CC      fs/fhandle.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_clflush.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_context.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_create.o
  CC [M]  drivers/gpu/drm/xe/xe_tuning.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
  CC [M]  drivers/gpu/drm/xe/xe_uc.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_domain.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_fw.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
  CC [M]  drivers/gpu/drm/xe/xe_vm.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_internal.o
  CC [M]  drivers/gpu/drm/xe/xe_vram.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_lmem.o
  CC [M]  drivers/gpu/drm/xe/xe_vram_freq.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_mman.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_object.o
  CC [M]  drivers/gpu/drm/xe/xe_vsec.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_pages.o
  CC [M]  drivers/gpu/drm/xe/xe_wait_user_fence.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_phys.o
  CC [M]  drivers/gpu/drm/xe/xe_wa.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_pm.o
  AR      kernel/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_wopcm.o
  LD [M]  drivers/gpu/drm/drm_suballoc_helper.o
  CC [M]  drivers/gpu/drm/xe/xe_hmm.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_region.o
  CC [M]  drivers/gpu/drm/xe/xe_hwmon.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_shmem.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sriov_vf.o
  LD [M]  drivers/gpu/drm/drm_ttm_helper.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_stolen.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_relay.o
  CC [M]  drivers/gpu/drm/xe/xe_memirq.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_throttle.o
  CC [M]  drivers/gpu/drm/xe/xe_sriov.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_tiling.o
  AR      net/mac80211/built-in.a
  AR      net/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_sriov_vf.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_irq.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_ttm.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_utils.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
  CC [M]  drivers/gpu/drm/xe/display/intel_bo.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fb_bo.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_userptr.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fbdev_fb.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_misc.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_wait.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_rps.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_wa.o
  CC [M]  drivers/gpu/drm/xe/display/xe_dsb_buffer.o
  CC      drivers/gpu/drm/i915/gem/i915_gemfs.o
  CC      drivers/gpu/drm/i915/i915_active.o
  CC [M]  drivers/gpu/drm/xe/display/xe_fb_pin.o
  CC [M]  drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
  CC      drivers/gpu/drm/i915/i915_cmd_parser.o
  CC [M]  drivers/gpu/drm/xe/display/xe_plane_initial.o
  CC [M]  drivers/gpu/drm/xe/display/xe_tdf.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_dram.o
  CC      drivers/gpu/drm/i915/i915_deps.o
  CC      drivers/gpu/drm/i915/i915_gem.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_pch.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_rom.o
  CC [M]  drivers/gpu/drm/xe/i915-display/icl_dsi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_alpm.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic.o
  CC      drivers/gpu/drm/i915/i915_gem_evict.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic_plane.o
  AR      fs/built-in.a
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_audio.o
  CC      drivers/gpu/drm/i915/i915_gem_gtt.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_backlight.o
  CC      drivers/gpu/drm/i915/i915_gem_ww.o
  CC      drivers/gpu/drm/i915/i915_query.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bios.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_color.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
  CC      drivers/gpu/drm/i915/i915_request.o
  CC      drivers/gpu/drm/i915/i915_scheduler.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_connector.o
  CC      drivers/gpu/drm/i915/i915_trace_points.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc.o
  CC      drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
  CC      drivers/gpu/drm/i915/i915_vma.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cursor.o
  CC      drivers/gpu/drm/i915/i915_vma_resource.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_conversion.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_device.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_driver.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_irq.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_params.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_map.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_trace.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_wa.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dmc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_huc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_test.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_uc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_drrs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsb.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi.o
  CC      drivers/gpu/drm/i915/gt/intel_gsc.o
  CC      drivers/gpu/drm/i915/i915_hwmon.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
  CC      drivers/gpu/drm/i915/display/hsw_ips.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_encoder.o
  CC      drivers/gpu/drm/i915/display/i9xx_plane.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fb.o
  CC      drivers/gpu/drm/i915/display/i9xx_display_sr.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fbc.o
  CC      drivers/gpu/drm/i915/display/i9xx_wm.o
  CC      drivers/gpu/drm/i915/display/intel_alpm.o
  CC      drivers/gpu/drm/i915/display/intel_atomic.o
  CC      drivers/gpu/drm/i915/display/intel_atomic_plane.o
  CC      drivers/gpu/drm/i915/display/intel_audio.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fdi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
  CC      drivers/gpu/drm/i915/display/intel_bios.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_global_state.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_gmbus.o
  CC      drivers/gpu/drm/i915/display/intel_bo.o
  CC      drivers/gpu/drm/i915/display/intel_bw.o
  CC      drivers/gpu/drm/i915/display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdcp.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdcp_gsc_message.o
  CC      drivers/gpu/drm/i915/display/intel_color.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdmi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug.o
  CC      drivers/gpu/drm/i915/display/intel_combo_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
  CC      drivers/gpu/drm/i915/display/intel_connector.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hti.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_link_bw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_lspcon.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
  CC      drivers/gpu/drm/i915/display/intel_crtc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_panel.o
  CC      drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pfit.o
  CC      drivers/gpu/drm/i915/display/intel_cursor.o
  CC      drivers/gpu/drm/i915/display/intel_display.o
  CC      drivers/gpu/drm/i915/display/intel_display_conversion.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pps.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_psr.o
  CC      drivers/gpu/drm/i915/display/intel_display_driver.o
  CC      drivers/gpu/drm/i915/display/intel_display_irq.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_quirks.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_tc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vblank.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vdsc.o
  CC      drivers/gpu/drm/i915/display/intel_display_params.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vga.o
  CC      drivers/gpu/drm/i915/display/intel_display_power.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vrr.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dmc_wl.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_wm.o
  CC      drivers/gpu/drm/i915/display/intel_display_power_map.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_scaler.o
  CC      drivers/gpu/drm/i915/display/intel_display_power_well.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_watermark.o
  CC      drivers/gpu/drm/i915/display/intel_display_reset.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_acpi.o
  CC      drivers/gpu/drm/i915/display/intel_display_rps.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_opregion.o
  CC      drivers/gpu/drm/i915/display/intel_display_snapshot.o
  CC [M]  drivers/gpu/drm/xe/xe_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_debugfs.o
  CC      drivers/gpu/drm/i915/display/intel_display_wa.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.o
  CC      drivers/gpu/drm/i915/display/intel_dmc.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_stats.o
  CC      drivers/gpu/drm/i915/display/intel_dmc_wl.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_huc_debugfs.o
  CC      drivers/gpu/drm/i915/display/intel_dpio_phy.o
  CC      drivers/gpu/drm/i915/display/intel_dpll.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
  CC      drivers/gpu/drm/i915/display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
  CC      drivers/gpu/drm/i915/display/intel_dpt.o
  CC      drivers/gpu/drm/i915/display/intel_dpt_common.o
  CC      drivers/gpu/drm/i915/display/intel_drrs.o
  CC      drivers/gpu/drm/i915/display/intel_dsb.o
  CC      drivers/gpu/drm/i915/display/intel_dsb_buffer.o
  CC      drivers/gpu/drm/i915/display/intel_fb.o
  CC      drivers/gpu/drm/i915/display/intel_fb_bo.o
  CC      drivers/gpu/drm/i915/display/intel_fb_pin.o
  CC      drivers/gpu/drm/i915/display/intel_fbc.o
  CC      drivers/gpu/drm/i915/display/intel_fdi.o
  CC      drivers/gpu/drm/i915/display/intel_fifo_underrun.o
  CC      drivers/gpu/drm/i915/display/intel_frontbuffer.o
  CC      drivers/gpu/drm/i915/display/intel_global_state.o
  CC      drivers/gpu/drm/i915/display/intel_hdcp.o
  CC      drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
  CC      drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o
  CC      drivers/gpu/drm/i915/display/intel_hotplug.o
  CC      drivers/gpu/drm/i915/display/intel_hotplug_irq.o
  CC      drivers/gpu/drm/i915/display/intel_hti.o
  CC      drivers/gpu/drm/i915/display/intel_link_bw.o
  CC      drivers/gpu/drm/i915/display/intel_load_detect.o
  CC      drivers/gpu/drm/i915/display/intel_lpe_audio.o
  CC      drivers/gpu/drm/i915/display/intel_modeset_lock.o
  CC      drivers/gpu/drm/i915/display/intel_modeset_setup.o
  CC      drivers/gpu/drm/i915/display/intel_modeset_verify.o
  CC      drivers/gpu/drm/i915/display/intel_overlay.o
  CC      drivers/gpu/drm/i915/display/intel_pch_display.o
  CC      drivers/gpu/drm/i915/display/intel_pch_refclk.o
  CC      drivers/gpu/drm/i915/display/intel_plane_initial.o
  CC      drivers/gpu/drm/i915/display/intel_pmdemand.o
  CC      drivers/gpu/drm/i915/display/intel_psr.o
  CC      drivers/gpu/drm/i915/display/intel_quirks.o
  CC      drivers/gpu/drm/i915/display/intel_sprite.o
  CC      drivers/gpu/drm/i915/display/intel_sprite_uapi.o
  CC      drivers/gpu/drm/i915/display/intel_tc.o
  CC      drivers/gpu/drm/i915/display/intel_vblank.o
  CC      drivers/gpu/drm/i915/display/intel_vga.o
  CC      drivers/gpu/drm/i915/display/intel_wm.o
  CC      drivers/gpu/drm/i915/display/skl_scaler.o
  CC      drivers/gpu/drm/i915/display/skl_universal_plane.o
  CC      drivers/gpu/drm/i915/display/skl_watermark.o
  CC      drivers/gpu/drm/i915/display/intel_acpi.o
  CC      drivers/gpu/drm/i915/display/intel_opregion.o
  CC      drivers/gpu/drm/i915/display/intel_display_debugfs.o
  CC      drivers/gpu/drm/i915/display/intel_display_debugfs_params.o
  CC      drivers/gpu/drm/i915/display/intel_pipe_crc.o
  CC      drivers/gpu/drm/i915/display/dvo_ch7017.o
  CC      drivers/gpu/drm/i915/display/dvo_ch7xxx.o
  CC      drivers/gpu/drm/i915/display/dvo_ivch.o
  CC      drivers/gpu/drm/i915/display/dvo_ns2501.o
  CC      drivers/gpu/drm/i915/display/dvo_sil164.o
  CC      drivers/gpu/drm/i915/display/dvo_tfp410.o
  CC      drivers/gpu/drm/i915/display/g4x_dp.o
  CC      drivers/gpu/drm/i915/display/g4x_hdmi.o
  CC      drivers/gpu/drm/i915/display/icl_dsi.o
  CC      drivers/gpu/drm/i915/display/intel_backlight.o
  CC      drivers/gpu/drm/i915/display/intel_crt.o
  CC      drivers/gpu/drm/i915/display/intel_cx0_phy.o
  CC      drivers/gpu/drm/i915/display/intel_ddi.o
  CC      drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
  CC      drivers/gpu/drm/i915/display/intel_display_device.o
  CC      drivers/gpu/drm/i915/display/intel_display_trace.o
  CC      drivers/gpu/drm/i915/display/intel_dkl_phy.o
  CC      drivers/gpu/drm/i915/display/intel_dp.o
  CC      drivers/gpu/drm/i915/display/intel_dp_aux.o
  CC      drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
  CC      drivers/gpu/drm/i915/display/intel_dp_hdcp.o
  CC      drivers/gpu/drm/i915/display/intel_dp_link_training.o
  CC      drivers/gpu/drm/i915/display/intel_dp_mst.o
  CC      drivers/gpu/drm/i915/display/intel_dp_test.o
  CC      drivers/gpu/drm/i915/display/intel_dsi.o
  CC      drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
  CC      drivers/gpu/drm/i915/display/intel_dsi_vbt.o
  CC      drivers/gpu/drm/i915/display/intel_dvo.o
  CC      drivers/gpu/drm/i915/display/intel_encoder.o
  CC      drivers/gpu/drm/i915/display/intel_gmbus.o
  CC      drivers/gpu/drm/i915/display/intel_hdmi.o
  CC      drivers/gpu/drm/i915/display/intel_lspcon.o
  CC      drivers/gpu/drm/i915/display/intel_lvds.o
  LD [M]  drivers/gpu/drm/xe/xe.o
  CC      drivers/gpu/drm/i915/display/intel_panel.o
  CC      drivers/gpu/drm/i915/display/intel_pfit.o
  CC      drivers/gpu/drm/i915/display/intel_pps.o
  CC      drivers/gpu/drm/i915/display/intel_qp_tables.o
  CC      drivers/gpu/drm/i915/display/intel_sdvo.o
  CC      drivers/gpu/drm/i915/display/intel_snps_phy.o
  CC      drivers/gpu/drm/i915/display/intel_tv.o
  CC      drivers/gpu/drm/i915/display/intel_vdsc.o
  CC      drivers/gpu/drm/i915/display/intel_vrr.o
  CC      drivers/gpu/drm/i915/display/vlv_dsi.o
  CC      drivers/gpu/drm/i915/display/vlv_dsi_pll.o
  CC      drivers/gpu/drm/i915/i915_perf.o
  CC      drivers/gpu/drm/i915/pxp/intel_pxp.o
  CC      drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
  CC      drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
  CC      drivers/gpu/drm/i915/i915_gpu_error.o
  CC      drivers/gpu/drm/i915/i915_vgpu.o
  AR      drivers/gpu/drm/i915/built-in.a
  AR      drivers/gpu/drm/built-in.a
  AR      drivers/gpu/built-in.a
  AR      drivers/built-in.a
  AR      built-in.a
  AR      vmlinux.a
  LD      vmlinux.o
  OBJCOPY modules.builtin.modinfo
  GEN     modules.builtin
  MODPOST Module.symvers
  CC      .vmlinux.export.o
  CC [M]  fs/efivarfs/efivarfs.mod.o
  CC [M]  .module-common.o
  CC [M]  drivers/gpu/drm/drm_exec.mod.o
  CC [M]  drivers/gpu/drm/drm_suballoc_helper.mod.o
  CC [M]  drivers/gpu/drm/drm_gpuvm.mod.o
  CC [M]  drivers/gpu/drm/drm_ttm_helper.mod.o
  CC [M]  drivers/gpu/drm/scheduler/gpu-sched.mod.o
  CC [M]  drivers/gpu/drm/xe/xe.mod.o
  CC [M]  drivers/thermal/intel/x86_pkg_temp_thermal.mod.o
  CC [M]  net/netfilter/nf_log_syslog.mod.o
  CC [M]  net/netfilter/xt_mark.mod.o
  CC [M]  net/netfilter/xt_nat.mod.o
  CC [M]  net/netfilter/xt_LOG.mod.o
  CC [M]  net/netfilter/xt_MASQUERADE.mod.o
  CC [M]  net/netfilter/xt_addrtype.mod.o
  CC [M]  net/ipv4/netfilter/iptable_nat.mod.o
  LD [M]  fs/efivarfs/efivarfs.ko
  LD [M]  drivers/gpu/drm/drm_exec.ko
  LD [M]  drivers/gpu/drm/drm_suballoc_helper.ko
  LD [M]  drivers/gpu/drm/drm_ttm_helper.ko
  LD [M]  drivers/gpu/drm/scheduler/gpu-sched.ko
  LD [M]  drivers/thermal/intel/x86_pkg_temp_thermal.ko
  LD [M]  net/netfilter/nf_log_syslog.ko
  LD [M]  net/netfilter/xt_LOG.ko
  LD [M]  net/netfilter/xt_MASQUERADE.ko
  LD [M]  net/netfilter/xt_addrtype.ko
  LD [M]  drivers/gpu/drm/drm_gpuvm.ko
  LD [M]  drivers/gpu/drm/xe/xe.ko
  LD [M]  net/netfilter/xt_mark.ko
  LD [M]  net/ipv4/netfilter/iptable_nat.ko
  LD [M]  net/netfilter/xt_nat.ko
  UPD     include/generated/utsversion.h
  CC      init/version-timestamp.o
  KSYMS   .tmp_vmlinux0.kallsyms.S
  AS      .tmp_vmlinux0.kallsyms.o
  LD      .tmp_vmlinux1
  NM      .tmp_vmlinux1.syms
  KSYMS   .tmp_vmlinux1.kallsyms.S
  AS      .tmp_vmlinux1.kallsyms.o
  LD      .tmp_vmlinux2
  NM      .tmp_vmlinux2.syms
  KSYMS   .tmp_vmlinux2.kallsyms.S
  AS      .tmp_vmlinux2.kallsyms.o
  LD      vmlinux
  NM      System.map
  SORTTAB vmlinux
  RELOCS  arch/x86/boot/compressed/vmlinux.relocs
  RSTRIP  vmlinux
  CC      arch/x86/boot/a20.o
  AS      arch/x86/boot/bioscall.o
  CC      arch/x86/boot/cmdline.o
  AS      arch/x86/boot/copy.o
  HOSTCC  arch/x86/boot/mkcpustr
  CC      arch/x86/boot/cpuflags.o
  CC      arch/x86/boot/cpucheck.o
  CC      arch/x86/boot/early_serial_console.o
  CC      arch/x86/boot/edd.o
  CC      arch/x86/boot/main.o
  CC      arch/x86/boot/memory.o
  CC      arch/x86/boot/pm.o
  AS      arch/x86/boot/pmjump.o
  CC      arch/x86/boot/printf.o
  CC      arch/x86/boot/regs.o
  CC      arch/x86/boot/string.o
  CC      arch/x86/boot/tty.o
  CC      arch/x86/boot/video.o
  CC      arch/x86/boot/video-mode.o
  CC      arch/x86/boot/version.o
  CC      arch/x86/boot/video-vga.o
  CC      arch/x86/boot/video-vesa.o
  CC      arch/x86/boot/video-bios.o
  HOSTCC  arch/x86/boot/tools/build
  CPUSTR  arch/x86/boot/cpustr.h
  LDS     arch/x86/boot/compressed/vmlinux.lds
  AS      arch/x86/boot/compressed/kernel_info.o
  CC      arch/x86/boot/cpu.o
  AS      arch/x86/boot/compressed/head_32.o
  VOFFSET arch/x86/boot/compressed/../voffset.h
  CC      arch/x86/boot/compressed/string.o
  CC      arch/x86/boot/compressed/cmdline.o
  CC      arch/x86/boot/compressed/error.o
  OBJCOPY arch/x86/boot/compressed/vmlinux.bin
  HOSTCC  arch/x86/boot/compressed/mkpiggy
  CC      arch/x86/boot/compressed/cpuflags.o
  CC      arch/x86/boot/compressed/early_serial_console.o
  CC      arch/x86/boot/compressed/kaslr.o
  CC      arch/x86/boot/compressed/acpi.o
  CC      arch/x86/boot/compressed/efi.o
  GZIP    arch/x86/boot/compressed/vmlinux.bin.gz
  CC      arch/x86/boot/compressed/misc.o
  MKPIGGY arch/x86/boot/compressed/piggy.S
  AS      arch/x86/boot/compressed/piggy.o
  LD      arch/x86/boot/compressed/vmlinux
  ZOFFSET arch/x86/boot/zoffset.h
  OBJCOPY arch/x86/boot/vmlinux.bin
  AS      arch/x86/boot/header.o
  LD      arch/x86/boot/setup.elf
  OBJCOPY arch/x86/boot/setup.bin
  BUILD   arch/x86/boot/bzImage
Kernel: arch/x86/boot/bzImage is ready  (#1)
run-parts: executing /workspace/ci/hooks/20-kernel-doc
+ SRC_DIR=/workspace/kernel
+ cd /workspace/kernel
+ find drivers/gpu/drm/xe/ -name '*.[ch]' -not -path 'drivers/gpu/drm/xe/display/*'
+ xargs ./scripts/kernel-doc -Werror -none include/uapi/drm/xe_drm.h
All hooks done



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

* ✗ CI.checksparse: warning for TTM shrinker helpers and xe buffer object shrinker (rev16)
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (13 preceding siblings ...)
  2024-12-17 21:16 ` ✓ CI.Hooks: " Patchwork
@ 2024-12-17 21:18 ` Patchwork
  2024-12-17 21:53 ` ✓ Xe.CI.BAT: success " Patchwork
                   ` (2 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-12-17 21:18 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

== Series Details ==

Series: TTM shrinker helpers and xe buffer object shrinker (rev16)
URL   : https://patchwork.freedesktop.org/series/131815/
State : warning

== Summary ==

+ trap cleanup EXIT
+ KERNEL=/kernel
+ MT=/root/linux/maintainer-tools
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools /root/linux/maintainer-tools
Cloning into '/root/linux/maintainer-tools'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ make -C /root/linux/maintainer-tools
make: Entering directory '/root/linux/maintainer-tools'
cc -O2 -g -Wextra -o remap-log remap-log.c
make: Leaving directory '/root/linux/maintainer-tools'
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ /root/linux/maintainer-tools/dim sparse --fast 1984b26a25a506f3437f63fd201cec704b99336a
Sparse version: 0.6.4 (Ubuntu: 0.6.4-4ubuntu3)
Fast mode used, each commit won't be checked separately.
-
+drivers/gpu/drm/i915/display/intel_cdclk.c: note: in included file:
+drivers/gpu/drm/i915/display/intel_ddi.c: note: in included file:
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_display_types.h:1965:24: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/display/intel_hdcp.c: note: in included file:
+drivers/gpu/drm/i915/display/intel_pps.c: note: in included file:
+drivers/gpu/drm/i915/display/intel_psr.c: note: in included file:
+drivers/gpu/drm/i915/gt/intel_reset.c:1541:12: warning: context imbalance in '_intel_gt_reset_lock' - different lock contexts for basic block
+drivers/gpu/drm/i915/i915_active.c:1081:16: warning: context imbalance in '__i915_active_fence_set' - different lock contexts for basic block
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: error: incompatible types in comparison expression (different address spaces):
+drivers/gpu/drm/i915/i915_drm_client.c:92:9:    expected struct list_head const *list
+drivers/gpu/drm/i915/i915_drm_client.c:92:9:    got struct list_head [noderef] __rcu *pos
+drivers/gpu/drm/i915/i915_drm_client.c:92:9:    struct list_head *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9:    struct list_head *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9:    struct list_head [noderef] __rcu *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9:    struct list_head [noderef] __rcu *
+drivers/gpu/drm/i915/i915_drm_client.c:92:9: warning: incorrect type in argument 1 (different address spaces)
+drivers/gpu/drm/i915/i915_irq.c:451:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:451:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:459:16: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:459:16: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:464:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:464:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:464:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:501:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:501:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:509:16: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:509:16: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:514:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:514:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:514:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:557:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:557:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:560:15: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:560:15: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:564:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:564:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:571:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:571:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:571:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/i915_irq.c:571:9: warning: unreplaced symbol '<noident>'
+drivers/gpu/drm/i915/intel_uncore.c:1925:1: warning: context imbalance in 'fwtable_read8' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1926:1: warning: context imbalance in 'fwtable_read16' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1927:1: warning: context imbalance in 'fwtable_read32' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1928:1: warning: context imbalance in 'fwtable_read64' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1993:1: warning: context imbalance in 'gen6_write8' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1994:1: warning: context imbalance in 'gen6_write16' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:1995:1: warning: context imbalance in 'gen6_write32' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:2015:1: warning: context imbalance in 'fwtable_write8' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:2016:1: warning: context imbalance in 'fwtable_write16' - unexpected unlock
+drivers/gpu/drm/i915/intel_uncore.c:2017:1: warning: context imbalance in 'fwtable_write32' - unexpected unlock
+drivers/gpu/drm/i915/intel_wakeref.c:145:19: warning: context imbalance in 'wakeref_auto_timeout' - unexpected unlock
+drivers/gpu/drm/ttm/ttm_bo.c:1156:31: warning: symbol 'ttm_swap_ops' was not declared. Should it be static?
+drivers/gpu/drm/ttm/ttm_bo_util.c:324:38:    expected void *virtual
+drivers/gpu/drm/ttm/ttm_bo_util.c:324:38:    got void [noderef] __iomem *
+drivers/gpu/drm/ttm/ttm_bo_util.c:324:38: warning: incorrect type in assignment (different address spaces)
+drivers/gpu/drm/ttm/ttm_bo_util.c:327:38:    expected void *virtual
+drivers/gpu/drm/ttm/ttm_bo_util.c:327:38:    got void [noderef] __iomem *
+drivers/gpu/drm/ttm/ttm_bo_util.c:327:38: warning: incorrect type in assignment (different address spaces)
+drivers/gpu/drm/ttm/ttm_bo_util.c:330:38:    expected void *virtual
+drivers/gpu/drm/ttm/ttm_bo_util.c:330:38:    got void [noderef] __iomem *
+drivers/gpu/drm/ttm/ttm_bo_util.c:330:38: warning: incorrect type in assignment (different address spaces)
+drivers/gpu/drm/ttm/ttm_bo_util.c:436:28:    expected void volatile [noderef] __iomem *addr
+drivers/gpu/drm/ttm/ttm_bo_util.c:436:28:    got void *virtual
+drivers/gpu/drm/ttm/ttm_bo_util.c:436:28: warning: incorrect type in argument 1 (different address spaces)

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



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

* ✓ Xe.CI.BAT: success for TTM shrinker helpers and xe buffer object shrinker (rev16)
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (14 preceding siblings ...)
  2024-12-17 21:18 ` ✗ CI.checksparse: warning " Patchwork
@ 2024-12-17 21:53 ` Patchwork
  2024-12-18  7:48 ` ✗ Xe.CI.Full: failure " Patchwork
  2025-01-10  9:47 ` [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Christian König
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-12-17 21:53 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

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

== Series Details ==

Series: TTM shrinker helpers and xe buffer object shrinker (rev16)
URL   : https://patchwork.freedesktop.org/series/131815/
State : success

== Summary ==

CI Bug Log - changes from xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076_BAT -> xe-pw-131815v16_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (10 -> 9)
------------------------------

  Missing    (1): bat-adlp-vm 


Changes
-------

  No changes found


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

  * Linux: xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076 -> xe-pw-131815v16

  IGT_8160: 4f10d98c56498ab29445ae0b06aab6f5a8ec2eca @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076: 39dcbfae0f6fcf74398f28d12bc24baab8f2e076
  xe-pw-131815v16: 131815v16

== Logs ==

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

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

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

* ✗ Xe.CI.Full: failure for TTM shrinker helpers and xe buffer object shrinker (rev16)
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (15 preceding siblings ...)
  2024-12-17 21:53 ` ✓ Xe.CI.BAT: success " Patchwork
@ 2024-12-18  7:48 ` Patchwork
  2025-01-10  9:47 ` [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Christian König
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-12-18  7:48 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: intel-xe

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

== Series Details ==

Series: TTM shrinker helpers and xe buffer object shrinker (rev16)
URL   : https://patchwork.freedesktop.org/series/131815/
State : failure

== Summary ==

CI Bug Log - changes from xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076_full -> xe-pw-131815v16_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with xe-pw-131815v16_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in xe-pw-131815v16_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (4 -> 4)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in xe-pw-131815v16_full:

### IGT changes ###

#### Possible regressions ####

  * igt@kms_flip@2x-wf_vblank-ts-check@ac-dp2-hdmi-a3:
    - shard-bmg:          [PASS][1] -> [FAIL][2] +1 other test fail
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-8/igt@kms_flip@2x-wf_vblank-ts-check@ac-dp2-hdmi-a3.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-7/igt@kms_flip@2x-wf_vblank-ts-check@ac-dp2-hdmi-a3.html

  * igt@kms_pm_rpm@system-suspend-modeset:
    - shard-bmg:          [PASS][3] -> [DMESG-FAIL][4]
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-7/igt@kms_pm_rpm@system-suspend-modeset.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-2/igt@kms_pm_rpm@system-suspend-modeset.html

  * igt@xe_ccs@suspend-resume:
    - shard-bmg:          [PASS][5] -> [INCOMPLETE][6] +1 other test incomplete
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-2/igt@xe_ccs@suspend-resume.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-3/igt@xe_ccs@suspend-resume.html

  * igt@xe_pm@s3-vm-bind-prefetch:
    - shard-bmg:          [PASS][7] -> [TIMEOUT][8]
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@xe_pm@s3-vm-bind-prefetch.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-7/igt@xe_pm@s3-vm-bind-prefetch.html

  
#### Warnings ####

  * igt@kms_bw@linear-tiling-4-displays-2160x1440p:
    - shard-bmg:          [SKIP][9] ([Intel XE#367]) -> [INCOMPLETE][10]
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@kms_bw@linear-tiling-4-displays-2160x1440p.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-7/igt@kms_bw@linear-tiling-4-displays-2160x1440p.html

  * igt@kms_cursor_crc@cursor-suspend:
    - shard-bmg:          [INCOMPLETE][11] -> [FAIL][12] +1 other test fail
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-1/igt@kms_cursor_crc@cursor-suspend.html
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_cursor_crc@cursor-suspend.html

  * igt@kms_flip@flip-vs-suspend@b-dp2:
    - shard-bmg:          [FAIL][13] -> [INCOMPLETE][14]
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-5/igt@kms_flip@flip-vs-suspend@b-dp2.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_flip@flip-vs-suspend@b-dp2.html

  
Known issues
------------

  Here are the changes found in xe-pw-131815v16_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-dp-2:
    - shard-bmg:          [PASS][15] -> [DMESG-WARN][16] ([Intel XE#877]) +4 other tests dmesg-warn
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-2/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-dp-2.html
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-3/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-dp-2.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-hdmi-a-1:
    - shard-adlp:         [PASS][17] -> [DMESG-FAIL][18] ([Intel XE#1033] / [Intel XE#1727])
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-3/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-hdmi-a-1.html
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-9/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-hdmi-a-1.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-hdmi-a-1:
    - shard-adlp:         [PASS][19] -> [DMESG-FAIL][20] ([Intel XE#1033] / [Intel XE#1727] / [Intel XE#3818]) +1 other test dmesg-fail
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-3/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-hdmi-a-1.html
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-9/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-hdmi-a-1.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-y:
    - shard-adlp:         [PASS][21] -> [DMESG-WARN][22] ([Intel XE#324]) +1 other test dmesg-warn
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-2/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-y.html
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-3/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-y.html

  * igt@kms_big_fb@linear-8bpp-rotate-270:
    - shard-bmg:          NOTRUN -> [SKIP][23] ([Intel XE#2327]) +3 other tests skip
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_big_fb@linear-8bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-16bpp-rotate-0:
    - shard-bmg:          NOTRUN -> [SKIP][24] ([Intel XE#1124]) +3 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_big_fb@y-tiled-16bpp-rotate-0.html

  * igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p:
    - shard-bmg:          NOTRUN -> [SKIP][25] ([Intel XE#2314] / [Intel XE#2894])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p.html

  * igt@kms_bw@linear-tiling-4-displays-1920x1080p:
    - shard-bmg:          NOTRUN -> [SKIP][26] ([Intel XE#367])
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_bw@linear-tiling-4-displays-1920x1080p.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-dg2-mc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][27] ([Intel XE#2887]) +5 other tests skip
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_ccs@bad-pixel-format-4-tiled-dg2-mc-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs:
    - shard-dg2-set2:     NOTRUN -> [SKIP][28] ([Intel XE#455] / [Intel XE#787]) +3 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-463/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-a-dp-4:
    - shard-dg2-set2:     NOTRUN -> [SKIP][29] ([Intel XE#787]) +13 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-463/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-a-dp-4.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][30] ([Intel XE#3432]) +1 other test skip
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [SKIP][31] ([Intel XE#2652] / [Intel XE#787]) +7 other tests skip
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-3/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-dp-2.html

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-bmg:          NOTRUN -> [SKIP][32] ([Intel XE#2724])
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k:
    - shard-bmg:          NOTRUN -> [SKIP][33] ([Intel XE#2252]) +4 other tests skip
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k.html

  * igt@kms_content_protection@atomic-dpms@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [FAIL][34] ([Intel XE#1178]) +1 other test fail
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-3/igt@kms_content_protection@atomic-dpms@pipe-a-dp-2.html

  * igt@kms_content_protection@lic-type-1:
    - shard-bmg:          NOTRUN -> [SKIP][35] ([Intel XE#2341])
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_content_protection@lic-type-1.html

  * igt@kms_cursor_crc@cursor-onscreen-256x85:
    - shard-bmg:          NOTRUN -> [SKIP][36] ([Intel XE#2320]) +1 other test skip
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_cursor_crc@cursor-onscreen-256x85.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
    - shard-bmg:          NOTRUN -> [SKIP][37] ([Intel XE#2286]) +1 other test skip
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-toggle:
    - shard-adlp:         NOTRUN -> [SKIP][38] ([Intel XE#309])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-4/igt@kms_cursor_legacy@cursorb-vs-flipa-toggle.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-bmg:          NOTRUN -> [SKIP][39] ([Intel XE#2316]) +4 other tests skip
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible:
    - shard-bmg:          [PASS][40] -> [SKIP][41] ([Intel XE#2316]) +2 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-8/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible.html
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-hdmi-a6-dp4:
    - shard-dg2-set2:     [PASS][42] -> [FAIL][43] ([Intel XE#3321])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-434/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-hdmi-a6-dp4.html
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-435/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-hdmi-a6-dp4.html

  * igt@kms_flip@2x-flip-vs-suspend@ab-dp2-hdmi-a3:
    - shard-bmg:          [PASS][44] -> [INCOMPLETE][45] ([Intel XE#2597])
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-3/igt@kms_flip@2x-flip-vs-suspend@ab-dp2-hdmi-a3.html
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-3/igt@kms_flip@2x-flip-vs-suspend@ab-dp2-hdmi-a3.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-bmg:          [PASS][46] -> [FAIL][47] ([Intel XE#2882]) +5 other tests fail
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-2/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-2/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp2:
    - shard-bmg:          [PASS][48] -> [FAIL][49] ([Intel XE#3321])
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-2/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp2.html
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-2/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp2.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp4:
    - shard-dg2-set2:     [PASS][50] -> [FAIL][51] ([Intel XE#301]) +6 other tests fail
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-435/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp4.html
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-433/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp4.html

  * igt@kms_flip@flip-vs-rmfb@a-dp4:
    - shard-dg2-set2:     [PASS][52] -> [INCOMPLETE][53] ([Intel XE#2049]) +2 other tests incomplete
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-433/igt@kms_flip@flip-vs-rmfb@a-dp4.html
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-433/igt@kms_flip@flip-vs-rmfb@a-dp4.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-dg2-set2:     [PASS][54] -> [INCOMPLETE][55] ([Intel XE#2049] / [Intel XE#2597])
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-434/igt@kms_flip@flip-vs-suspend.html
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-463/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip@plain-flip-ts-check@a-edp1:
    - shard-lnl:          [PASS][56] -> [FAIL][57] ([Intel XE#886]) +1 other test fail
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-lnl-5/igt@kms_flip@plain-flip-ts-check@a-edp1.html
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-lnl-7/igt@kms_flip@plain-flip-ts-check@a-edp1.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
    - shard-bmg:          NOTRUN -> [SKIP][58] ([Intel XE#2380]) +1 other test skip
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html

  * igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-y-to-x:
    - shard-adlp:         [PASS][59] -> [FAIL][60] ([Intel XE#1874]) +1 other test fail
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-3/igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-y-to-x.html
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-9/igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-y-to-x.html

  * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-msflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][61] ([Intel XE#2312]) +6 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render:
    - shard-bmg:          NOTRUN -> [FAIL][62] ([Intel XE#2333]) +3 other tests fail
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][63] ([Intel XE#2311]) +11 other tests skip
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary:
    - shard-dg2-set2:     NOTRUN -> [SKIP][64] ([Intel XE#651]) +1 other test skip
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-blt:
    - shard-dg2-set2:     NOTRUN -> [SKIP][65] ([Intel XE#653]) +1 other test skip
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][66] ([Intel XE#2313]) +11 other tests skip
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-blt:
    - shard-adlp:         NOTRUN -> [SKIP][67] ([Intel XE#656]) +1 other test skip
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-4/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-blt.html

  * igt@kms_hdr@invalid-hdr:
    - shard-dg2-set2:     [PASS][68] -> [SKIP][69] ([Intel XE#455])
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-463/igt@kms_hdr@invalid-hdr.html
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-434/igt@kms_hdr@invalid-hdr.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][70] ([Intel XE#346])
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_joiner@invalid-modeset-force-big-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][71] ([Intel XE#3012])
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_joiner@invalid-modeset-force-big-joiner.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1:
    - shard-adlp:         [PASS][72] -> [DMESG-WARN][73] ([Intel XE#3086]) +2 other tests dmesg-warn
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-4/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-8/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html

  * igt@kms_plane@plane-panning-bottom-right-suspend:
    - shard-bmg:          [PASS][74] -> [INCOMPLETE][75] ([Intel XE#1035]) +1 other test incomplete
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@kms_plane@plane-panning-bottom-right-suspend.html
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_plane@plane-panning-bottom-right-suspend.html

  * igt@kms_plane_multiple@tiling-y:
    - shard-bmg:          NOTRUN -> [SKIP][76] ([Intel XE#2493])
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_plane_multiple@tiling-y.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [PASS][77] -> [FAIL][78] ([Intel XE#361])
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-463/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-435/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5:
    - shard-bmg:          NOTRUN -> [SKIP][79] ([Intel XE#2763]) +9 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5.html

  * igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area:
    - shard-bmg:          NOTRUN -> [SKIP][80] ([Intel XE#1489]) +3 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-bmg:          NOTRUN -> [SKIP][81] ([Intel XE#2387])
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr@fbc-psr-sprite-plane-move:
    - shard-dg2-set2:     NOTRUN -> [SKIP][82] ([Intel XE#2850] / [Intel XE#929])
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-463/igt@kms_psr@fbc-psr-sprite-plane-move.html

  * igt@kms_psr@psr2-sprite-blt:
    - shard-bmg:          NOTRUN -> [SKIP][83] ([Intel XE#2234] / [Intel XE#2850]) +6 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_psr@psr2-sprite-blt.html

  * igt@kms_setmode@invalid-clone-exclusive-crtc:
    - shard-bmg:          NOTRUN -> [SKIP][84] ([Intel XE#1435])
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_setmode@invalid-clone-exclusive-crtc.html

  * igt@kms_vrr@max-min:
    - shard-lnl:          [PASS][85] -> [FAIL][86] ([Intel XE#1522]) +1 other test fail
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-lnl-8/igt@kms_vrr@max-min.html
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-lnl-4/igt@kms_vrr@max-min.html

  * igt@kms_vrr@seamless-rr-switch-drrs:
    - shard-bmg:          NOTRUN -> [SKIP][87] ([Intel XE#1499])
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_vrr@seamless-rr-switch-drrs.html

  * igt@kms_writeback@writeback-invalid-parameters:
    - shard-bmg:          NOTRUN -> [SKIP][88] ([Intel XE#756])
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_writeback@writeback-invalid-parameters.html

  * igt@xe_drm_fdinfo@virtual-utilization-single-idle:
    - shard-bmg:          NOTRUN -> [FAIL][89] ([Intel XE#3869])
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@xe_drm_fdinfo@virtual-utilization-single-idle.html

  * igt@xe_eudebug@basic-vm-bind-metadata-discovery:
    - shard-dg2-set2:     NOTRUN -> [SKIP][90] ([Intel XE#2905])
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-463/igt@xe_eudebug@basic-vm-bind-metadata-discovery.html

  * igt@xe_eudebug@discovery-empty:
    - shard-bmg:          NOTRUN -> [SKIP][91] ([Intel XE#2905]) +4 other tests skip
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@xe_eudebug@discovery-empty.html

  * igt@xe_evict@evict-beng-mixed-many-threads-small:
    - shard-dg2-set2:     [PASS][92] -> [TIMEOUT][93] ([Intel XE#1473] / [Intel XE#402])
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-435/igt@xe_evict@evict-beng-mixed-many-threads-small.html
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-433/igt@xe_evict@evict-beng-mixed-many-threads-small.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr:
    - shard-bmg:          NOTRUN -> [SKIP][94] ([Intel XE#2322]) +5 other tests skip
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr.html

  * igt@xe_module_load@force-load:
    - shard-bmg:          NOTRUN -> [SKIP][95] ([Intel XE#2457])
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@xe_module_load@force-load.html

  * igt@xe_pm@d3cold-basic:
    - shard-bmg:          NOTRUN -> [SKIP][96] ([Intel XE#2284]) +1 other test skip
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@xe_pm@d3cold-basic.html

  * igt@xe_pm@s4-basic:
    - shard-lnl:          [PASS][97] -> [ABORT][98] ([Intel XE#1358] / [Intel XE#1607])
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-lnl-1/igt@xe_pm@s4-basic.html
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-lnl-2/igt@xe_pm@s4-basic.html

  * igt@xe_pm@s4-vm-bind-unbind-all:
    - shard-adlp:         [PASS][99] -> [ABORT][100] ([Intel XE#1794])
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-3/igt@xe_pm@s4-vm-bind-unbind-all.html
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-9/igt@xe_pm@s4-vm-bind-unbind-all.html

  * igt@xe_pm@s4-vm-bind-userptr:
    - shard-lnl:          [PASS][101] -> [ABORT][102] ([Intel XE#1794])
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-lnl-4/igt@xe_pm@s4-vm-bind-userptr.html
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-lnl-2/igt@xe_pm@s4-vm-bind-userptr.html

  * igt@xe_query@multigpu-query-mem-usage:
    - shard-bmg:          NOTRUN -> [SKIP][103] ([Intel XE#944])
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@xe_query@multigpu-query-mem-usage.html

  
#### Possible fixes ####

  * igt@kms_async_flips@alternate-sync-async-flip@pipe-b-hdmi-a-1:
    - shard-adlp:         [DMESG-FAIL][104] ([Intel XE#1033] / [Intel XE#1727]) -> [PASS][105]
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-9/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-hdmi-a-1.html
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-4/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-hdmi-a-1.html

  * igt@kms_atomic_interruptible@legacy-cursor:
    - shard-adlp:         [DMESG-WARN][106] ([Intel XE#3086]) -> [PASS][107] +2 other tests pass
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-1/igt@kms_atomic_interruptible@legacy-cursor.html
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-4/igt@kms_atomic_interruptible@legacy-cursor.html

  * igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p:
    - shard-bmg:          [SKIP][108] ([Intel XE#2314] / [Intel XE#2894]) -> [PASS][109]
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-3/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html

  * igt@kms_cursor_edge_walk@128x128-left-edge@pipe-a-dp-2:
    - shard-bmg:          [TIMEOUT][110] -> [PASS][111] +1 other test pass
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-8/igt@kms_cursor_edge_walk@128x128-left-edge@pipe-a-dp-2.html
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_cursor_edge_walk@128x128-left-edge@pipe-a-dp-2.html

  * igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
    - shard-bmg:          [SKIP][112] ([Intel XE#2291]) -> [PASS][113] +1 other test pass
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-7/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size:
    - shard-bmg:          [DMESG-WARN][114] ([Intel XE#877]) -> [PASS][115]
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-3/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-8/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html

  * igt@kms_flip@2x-absolute-wf_vblank:
    - shard-bmg:          [SKIP][116] ([Intel XE#2316]) -> [PASS][117] +2 other tests pass
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@kms_flip@2x-absolute-wf_vblank.html
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-7/igt@kms_flip@2x-absolute-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@cd-hdmi-a6-dp4:
    - shard-dg2-set2:     [FAIL][118] ([Intel XE#301]) -> [PASS][119] +3 other tests pass
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-434/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@cd-hdmi-a6-dp4.html
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-435/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@cd-hdmi-a6-dp4.html

  * igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3:
    - shard-bmg:          [FAIL][120] ([Intel XE#3321]) -> [PASS][121]
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-7/igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3.html
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3.html

  * igt@kms_flip@2x-flip-vs-expired-vblank@bd-dp2-hdmi-a3:
    - shard-bmg:          [FAIL][122] ([Intel XE#2882]) -> [PASS][123]
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-7/igt@kms_flip@2x-flip-vs-expired-vblank@bd-dp2-hdmi-a3.html
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank@bd-dp2-hdmi-a3.html

  * igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-y:
    - shard-adlp:         [FAIL][124] ([Intel XE#1874]) -> [PASS][125] +2 other tests pass
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-3/igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-y.html
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-9/igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-y.html

  * igt@kms_hdr@invalid-hdr:
    - shard-bmg:          [SKIP][126] ([Intel XE#1503]) -> [PASS][127]
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-1/igt@kms_hdr@invalid-hdr.html
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_hdr@invalid-hdr.html

  * igt@kms_plane_cursor@overlay@pipe-a-hdmi-a-6-size-64:
    - shard-dg2-set2:     [FAIL][128] ([Intel XE#616]) -> [PASS][129] +1 other test pass
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-435/igt@kms_plane_cursor@overlay@pipe-a-hdmi-a-6-size-64.html
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-463/igt@kms_plane_cursor@overlay@pipe-a-hdmi-a-6-size-64.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4:
    - shard-dg2-set2:     [FAIL][130] ([Intel XE#361]) -> [PASS][131]
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-463/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-435/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1:
    - shard-lnl:          [FAIL][132] ([Intel XE#899]) -> [PASS][133]
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-lnl-3/igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1.html
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-lnl-3/igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1.html

  * igt@xe_drm_fdinfo@utilization-single-full-load-isolation:
    - shard-dg2-set2:     [FAIL][134] -> [PASS][135]
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-464/igt@xe_drm_fdinfo@utilization-single-full-load-isolation.html
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-436/igt@xe_drm_fdinfo@utilization-single-full-load-isolation.html

  * igt@xe_drm_fdinfo@virtual-utilization-single-idle:
    - shard-adlp:         [FAIL][136] ([Intel XE#3869]) -> [PASS][137]
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-6/igt@xe_drm_fdinfo@virtual-utilization-single-idle.html
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-3/igt@xe_drm_fdinfo@virtual-utilization-single-idle.html

  * igt@xe_evict@evict-beng-mixed-many-threads-small:
    - shard-bmg:          [TIMEOUT][138] ([Intel XE#1473]) -> [PASS][139]
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-2/igt@xe_evict@evict-beng-mixed-many-threads-small.html
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-2/igt@xe_evict@evict-beng-mixed-many-threads-small.html

  * igt@xe_exec_threads@threads-hang-rebind-err:
    - shard-dg2-set2:     [DMESG-WARN][140] -> [PASS][141]
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-463/igt@xe_exec_threads@threads-hang-rebind-err.html
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-434/igt@xe_exec_threads@threads-hang-rebind-err.html

  * igt@xe_fault_injection@inject-fault-probe-function-xe_guc_relay_init:
    - shard-adlp:         [DMESG-WARN][142] ([Intel XE#3086] / [Intel XE#3343]) -> [PASS][143] +1 other test pass
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-3/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_relay_init.html
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-2/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_relay_init.html

  * igt@xe_gt_freq@freq_suspend:
    - shard-bmg:          [TIMEOUT][144] ([Intel XE#3859]) -> [PASS][145]
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-8/igt@xe_gt_freq@freq_suspend.html
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@xe_gt_freq@freq_suspend.html

  * igt@xe_live_ktest@xe_bo:
    - shard-dg2-set2:     [INCOMPLETE][146] -> [PASS][147] +1 other test pass
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-dg2-464/igt@xe_live_ktest@xe_bo.html
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-dg2-463/igt@xe_live_ktest@xe_bo.html

  * igt@xe_pm@s3-mocs:
    - shard-bmg:          [INCOMPLETE][148] -> [PASS][149] +3 other tests pass
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-1/igt@xe_pm@s3-mocs.html
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@xe_pm@s3-mocs.html

  * igt@xe_pm@s4-d3hot-basic-exec:
    - shard-adlp:         [ABORT][150] ([Intel XE#1358] / [Intel XE#1607]) -> [PASS][151]
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-9/igt@xe_pm@s4-d3hot-basic-exec.html
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-4/igt@xe_pm@s4-d3hot-basic-exec.html

  * igt@xe_pm_residency@toggle-gt-c6:
    - shard-lnl:          [FAIL][152] ([Intel XE#958]) -> [PASS][153]
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-lnl-2/igt@xe_pm_residency@toggle-gt-c6.html
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-lnl-6/igt@xe_pm_residency@toggle-gt-c6.html

  * igt@xe_wedged@basic-wedged:
    - shard-bmg:          [FAIL][154] -> [PASS][155]
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@xe_wedged@basic-wedged.html
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@xe_wedged@basic-wedged.html

  
#### Warnings ####

  * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
    - shard-adlp:         [DMESG-FAIL][156] ([Intel XE#3818]) -> [FAIL][157] ([Intel XE#1231])
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-2/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-1/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
    - shard-adlp:         [FAIL][158] ([Intel XE#1231] / [Intel XE#3052]) -> [DMESG-FAIL][159] ([Intel XE#324])
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-8/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-1/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
    - shard-adlp:         [FAIL][160] ([Intel XE#1231]) -> [DMESG-FAIL][161] ([Intel XE#324])
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-3/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-2/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html

  * igt@kms_content_protection@legacy:
    - shard-bmg:          [SKIP][162] ([Intel XE#2341]) -> [FAIL][163] ([Intel XE#1178]) +1 other test fail
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@kms_content_protection@legacy.html
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-3/igt@kms_content_protection@legacy.html

  * igt@kms_content_protection@lic-type-0:
    - shard-bmg:          [FAIL][164] ([Intel XE#1178]) -> [SKIP][165] ([Intel XE#2341])
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-8/igt@kms_content_protection@lic-type-0.html
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_content_protection@lic-type-0.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-toggle:
    - shard-bmg:          [SKIP][166] ([Intel XE#2291]) -> [DMESG-WARN][167] ([Intel XE#877])
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipa-toggle.html
   [167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-7/igt@kms_cursor_legacy@cursorb-vs-flipa-toggle.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-bmg:          [FAIL][168] -> [INCOMPLETE][169] ([Intel XE#2597]) +1 other test incomplete
   [168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-5/igt@kms_flip@flip-vs-suspend.html
   [169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-5/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-blt:
    - shard-bmg:          [SKIP][170] ([Intel XE#2312]) -> [SKIP][171] ([Intel XE#2311]) +8 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-blt.html
   [171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-3/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-render:
    - shard-bmg:          [SKIP][172] ([Intel XE#2312]) -> [FAIL][173] ([Intel XE#2333]) +4 other tests fail
   [172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-render.html
   [173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-render:
    - shard-bmg:          [FAIL][174] ([Intel XE#2333]) -> [SKIP][175] ([Intel XE#2312]) +1 other test skip
   [174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-render.html
   [175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-wc:
    - shard-bmg:          [SKIP][176] ([Intel XE#2311]) -> [SKIP][177] ([Intel XE#2312]) +3 other tests skip
   [176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-wc.html
   [177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-bmg:          [SKIP][178] ([Intel XE#2313]) -> [SKIP][179] ([Intel XE#2312]) +4 other tests skip
   [178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc.html
   [179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-plflip-blt:
    - shard-bmg:          [SKIP][180] ([Intel XE#2312]) -> [SKIP][181] ([Intel XE#2313]) +6 other tests skip
   [180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-plflip-blt.html
   [181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-3/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-plflip-blt.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-adlp:         [SKIP][182] ([Intel XE#734]) -> [FAIL][183] ([Intel XE#3325])
   [182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-adlp-4/igt@kms_pm_dc@dc9-dpms.html
   [183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-adlp-8/igt@kms_pm_dc@dc9-dpms.html

  * igt@xe_evict@evict-beng-mixed-many-threads-large:
    - shard-bmg:          [TIMEOUT][184] ([Intel XE#1473]) -> [INCOMPLETE][185] ([Intel XE#1473])
   [184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-6/igt@xe_evict@evict-beng-mixed-many-threads-large.html
   [185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@xe_evict@evict-beng-mixed-many-threads-large.html

  * igt@xe_evict@evict-beng-mixed-threads-large:
    - shard-bmg:          [TIMEOUT][186] ([Intel XE#1473]) -> [FAIL][187] ([Intel XE#1000])
   [186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-8/igt@xe_evict@evict-beng-mixed-threads-large.html
   [187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-7/igt@xe_evict@evict-beng-mixed-threads-large.html

  * igt@xe_evict@evict-threads-large:
    - shard-bmg:          [FAIL][188] ([Intel XE#1000]) -> [TIMEOUT][189] ([Intel XE#1473] / [Intel XE#2472])
   [188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-8/igt@xe_evict@evict-threads-large.html
   [189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-6/igt@xe_evict@evict-threads-large.html

  * igt@xe_live_ktest@xe_eudebug:
    - shard-bmg:          [SKIP][190] ([Intel XE#1192]) -> [SKIP][191] ([Intel XE#2833])
   [190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076/shard-bmg-3/igt@xe_live_ktest@xe_eudebug.html
   [191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-131815v16/shard-bmg-2/igt@xe_live_ktest@xe_eudebug.html

  
  [Intel XE#1000]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1000
  [Intel XE#1033]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1033
  [Intel XE#1035]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1035
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1192
  [Intel XE#1231]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1231
  [Intel XE#1358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1358
  [Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
  [Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
  [Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
  [Intel XE#1522]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1522
  [Intel XE#1607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1607
  [Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
  [Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
  [Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
  [Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
  [Intel XE#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286
  [Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
  [Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
  [Intel XE#2333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2333
  [Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
  [Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
  [Intel XE#2387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2387
  [Intel XE#2457]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2457
  [Intel XE#2472]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2472
  [Intel XE#2493]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2493
  [Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
  [Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [Intel XE#2724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2724
  [Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
  [Intel XE#2833]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2833
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#2882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2882
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
  [Intel XE#2905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2905
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#3012]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3012
  [Intel XE#3052]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3052
  [Intel XE#3086]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3086
  [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#324]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/324
  [Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
  [Intel XE#3325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3325
  [Intel XE#3343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3343
  [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
  [Intel XE#346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/346
  [Intel XE#361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/361
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#3818]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3818
  [Intel XE#3859]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3859
  [Intel XE#3869]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3869
  [Intel XE#402]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/402
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#616]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/616
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
  [Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
  [Intel XE#734]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/734
  [Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
  [Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
  [Intel XE#877]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/877
  [Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886
  [Intel XE#899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/899
  [Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
  [Intel XE#958]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/958


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

  * Linux: xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076 -> xe-pw-131815v16

  IGT_8160: 4f10d98c56498ab29445ae0b06aab6f5a8ec2eca @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-2392-39dcbfae0f6fcf74398f28d12bc24baab8f2e076: 39dcbfae0f6fcf74398f28d12bc24baab8f2e076
  xe-pw-131815v16: 131815v16

== Logs ==

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

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

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

* Re: [PATCH v15 3/9] drm/ttm/pool: Restructure the pool allocation code
  2024-12-17 14:58 ` [PATCH v15 3/9] drm/ttm/pool: Restructure the pool allocation code Thomas Hellström
@ 2025-01-10  9:45   ` Christian König
  2025-01-10 17:57   ` Matthew Brost
  1 sibling, 0 replies; 23+ messages in thread
From: Christian König @ 2025-01-10  9:45 UTC (permalink / raw)
  To: Thomas Hellström, intel-xe
  Cc: Matthew Brost, Somalapuram Amaranath, Paulo Zanoni, Simona Vetter,
	dri-devel

Am 17.12.24 um 15:58 schrieb Thomas Hellström:
> Simplify the pool allocation code somewhat by merging loop arguments
> used by multiple functions together in a struct and simplifying the
> loop. Also add documentation.
> This hopefully makes the behaviour of the allocation loop
> simplier to understand, but above all paves the way for upcoming
> restore-while-allocating functionality.
>
> There are no functional changes, but the "allow_pools" bool
> introduced to keep current functionality could be removed as a
> follow up, which would enable using write-back cached pools when
> allocating memory for other caching modes, rather than to resort
> to allocating from the system directly.
>
> v15:
> - Introduce this patch to simplify the upcoming patch that introduces
>    restore while allocating.
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>

Reviewed-by: Christian König <christian.koenig@amd.com>

> ---
>   drivers/gpu/drm/ttm/ttm_pool.c | 183 +++++++++++++++++++--------------
>   1 file changed, 108 insertions(+), 75 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
> index 8504dbe19c1a..c9eba76d5143 100644
> --- a/drivers/gpu/drm/ttm/ttm_pool.c
> +++ b/drivers/gpu/drm/ttm/ttm_pool.c
> @@ -58,6 +58,23 @@ struct ttm_pool_dma {
>   	unsigned long vaddr;
>   };
>   
> +/**
> + * struct ttm_pool_alloc_state - Current state of the tt page allocation process
> + * @pages: Pointer to the next tt page pointer to populate.
> + * @caching_divide: Pointer to the first page pointer whose page has a staged but
> + * not committed caching transition from write-back to @tt_caching.
> + * @dma_addr: Pointer to the next tt dma_address entry to populate if any.
> + * @remaining_pages: Remaining pages to populate.
> + * @tt_caching: The requested cpu-caching for the pages allocated.
> + */
> +struct ttm_pool_alloc_state {
> +	struct page **pages;
> +	struct page **caching_divide;
> +	dma_addr_t *dma_addr;
> +	pgoff_t remaining_pages;
> +	enum ttm_caching tt_caching;
> +};
> +
>   static unsigned long page_pool_size;
>   
>   MODULE_PARM_DESC(page_pool_size, "Number of pages in the WC/UC/DMA pool");
> @@ -160,25 +177,25 @@ static void ttm_pool_free_page(struct ttm_pool *pool, enum ttm_caching caching,
>   	kfree(dma);
>   }
>   
> -/* Apply a new caching to an array of pages */
> -static int ttm_pool_apply_caching(struct page **first, struct page **last,
> -				  enum ttm_caching caching)
> +/* Apply any cpu-caching deferred during page allocation */
> +static int ttm_pool_apply_caching(struct ttm_pool_alloc_state *alloc)
>   {
>   #ifdef CONFIG_X86
> -	unsigned int num_pages = last - first;
> +	unsigned int num_pages = alloc->pages - alloc->caching_divide;
>   
>   	if (!num_pages)
>   		return 0;
>   
> -	switch (caching) {
> +	switch (alloc->tt_caching) {
>   	case ttm_cached:
>   		break;
>   	case ttm_write_combined:
> -		return set_pages_array_wc(first, num_pages);
> +		return set_pages_array_wc(alloc->caching_divide, num_pages);
>   	case ttm_uncached:
> -		return set_pages_array_uc(first, num_pages);
> +		return set_pages_array_uc(alloc->caching_divide, num_pages);
>   	}
>   #endif
> +	alloc->caching_divide = alloc->pages;
>   	return 0;
>   }
>   
> @@ -354,24 +371,41 @@ static unsigned int ttm_pool_page_order(struct ttm_pool *pool, struct page *p)
>   	return p->private;
>   }
>   
> -/* Called when we got a page, either from a pool or newly allocated */
> +/*
> + * Called when we got a page, either from a pool or newly allocated.
> + * if needed, dma map the page and populate the dma address array.
> + * Populate the page address array.
> + * If the caching is consistent, update any deferred caching. Otherwise
> + * stage this page for an upcoming deferred caching update.
> + */
>   static int ttm_pool_page_allocated(struct ttm_pool *pool, unsigned int order,
> -				   struct page *p, dma_addr_t **dma_addr,
> -				   unsigned long *num_pages,
> -				   struct page ***pages)
> +				   struct page *p, enum ttm_caching page_caching,
> +				   struct ttm_pool_alloc_state *alloc)
>   {
> -	unsigned int i;
> -	int r;
> +	pgoff_t i, nr = 1UL << order;
> +	bool caching_consistent;
> +	int r = 0;
> +
> +	caching_consistent = (page_caching == alloc->tt_caching) || PageHighMem(p);
> +
> +	if (caching_consistent) {
> +		r = ttm_pool_apply_caching(alloc);
> +		if (r)
> +			return r;
> +	}
>   
> -	if (*dma_addr) {
> -		r = ttm_pool_map(pool, order, p, dma_addr);
> +	if (alloc->dma_addr) {
> +		r = ttm_pool_map(pool, order, p, &alloc->dma_addr);
>   		if (r)
>   			return r;
>   	}
>   
> -	*num_pages -= 1 << order;
> -	for (i = 1 << order; i; --i, ++(*pages), ++p)
> -		**pages = p;
> +	alloc->remaining_pages -= nr;
> +	for (i = 0; i < nr; ++i)
> +		*alloc->pages++ = p++;
> +
> +	if (caching_consistent)
> +		alloc->caching_divide = alloc->pages;
>   
>   	return 0;
>   }
> @@ -413,6 +447,26 @@ static void ttm_pool_free_range(struct ttm_pool *pool, struct ttm_tt *tt,
>   	}
>   }
>   
> +static void ttm_pool_alloc_state_init(const struct ttm_tt *tt,
> +				      struct ttm_pool_alloc_state *alloc)
> +{
> +	alloc->pages = tt->pages;
> +	alloc->caching_divide = tt->pages;
> +	alloc->dma_addr = tt->dma_address;
> +	alloc->remaining_pages = tt->num_pages;
> +	alloc->tt_caching = tt->caching;
> +}
> +
> +/*
> + * Find a suitable allocation order based on highest desired order
> + * and number of remaining pages
> + */
> +static unsigned int ttm_pool_alloc_find_order(unsigned int highest,
> +					      const struct ttm_pool_alloc_state *alloc)
> +{
> +	return min_t(unsigned int, highest, __fls(alloc->remaining_pages));
> +}
> +
>   /**
>    * ttm_pool_alloc - Fill a ttm_tt object
>    *
> @@ -428,19 +482,19 @@ static void ttm_pool_free_range(struct ttm_pool *pool, struct ttm_tt *tt,
>   int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
>   		   struct ttm_operation_ctx *ctx)
>   {
> -	pgoff_t num_pages = tt->num_pages;
> -	dma_addr_t *dma_addr = tt->dma_address;
> -	struct page **caching = tt->pages;
> -	struct page **pages = tt->pages;
> +	struct ttm_pool_alloc_state alloc;
>   	enum ttm_caching page_caching;
>   	gfp_t gfp_flags = GFP_USER;
>   	pgoff_t caching_divide;
>   	unsigned int order;
> +	bool allow_pools;
>   	struct page *p;
>   	int r;
>   
> -	WARN_ON(!num_pages || ttm_tt_is_populated(tt));
> -	WARN_ON(dma_addr && !pool->dev);
> +	ttm_pool_alloc_state_init(tt, &alloc);
> +
> +	WARN_ON(!alloc.remaining_pages || ttm_tt_is_populated(tt));
> +	WARN_ON(alloc.dma_addr && !pool->dev);
>   
>   	if (tt->page_flags & TTM_TT_FLAG_ZERO_ALLOC)
>   		gfp_flags |= __GFP_ZERO;
> @@ -453,67 +507,46 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
>   	else
>   		gfp_flags |= GFP_HIGHUSER;
>   
> -	for (order = min_t(unsigned int, MAX_PAGE_ORDER, __fls(num_pages));
> -	     num_pages;
> -	     order = min_t(unsigned int, order, __fls(num_pages))) {
> +	page_caching = tt->caching;
> +	allow_pools = true;
> +	for (order = ttm_pool_alloc_find_order(MAX_PAGE_ORDER, &alloc);
> +	     alloc.remaining_pages;
> +	     order = ttm_pool_alloc_find_order(order, &alloc)) {
>   		struct ttm_pool_type *pt;
>   
> -		page_caching = tt->caching;
> -		pt = ttm_pool_select_type(pool, tt->caching, order);
> -		p = pt ? ttm_pool_type_take(pt) : NULL;
> -		if (p) {
> -			r = ttm_pool_apply_caching(caching, pages,
> -						   tt->caching);
> -			if (r)
> -				goto error_free_page;
> -
> -			caching = pages;
> -			do {
> -				r = ttm_pool_page_allocated(pool, order, p,
> -							    &dma_addr,
> -							    &num_pages,
> -							    &pages);
> -				if (r)
> -					goto error_free_page;
> -
> -				caching = pages;
> -				if (num_pages < (1 << order))
> -					break;
> -
> -				p = ttm_pool_type_take(pt);
> -			} while (p);
> -		}
> -
> -		page_caching = ttm_cached;
> -		while (num_pages >= (1 << order) &&
> -		       (p = ttm_pool_alloc_page(pool, gfp_flags, order))) {
> -
> -			if (PageHighMem(p)) {
> -				r = ttm_pool_apply_caching(caching, pages,
> -							   tt->caching);
> -				if (r)
> -					goto error_free_page;
> -				caching = pages;
> -			}
> -			r = ttm_pool_page_allocated(pool, order, p, &dma_addr,
> -						    &num_pages, &pages);
> -			if (r)
> -				goto error_free_page;
> -			if (PageHighMem(p))
> -				caching = pages;
> +		/* First, try to allocate a page from a pool if one exists. */
> +		p = NULL;
> +		pt = ttm_pool_select_type(pool, page_caching, order);
> +		if (pt && allow_pools)
> +			p = ttm_pool_type_take(pt);
> +		/*
> +		 * If that fails or previously failed, allocate from system.
> +		 * Note that this also disallows additional pool allocations using
> +		 * write-back cached pools of the same order. Consider removing
> +		 * that behaviour.
> +		 */
> +		if (!p) {
> +			page_caching = ttm_cached;
> +			allow_pools = false;
> +			p = ttm_pool_alloc_page(pool, gfp_flags, order);
>   		}
> -
> +		/* If that fails, lower the order if possible and retry. */
>   		if (!p) {
>   			if (order) {
>   				--order;
> +				page_caching = tt->caching;
> +				allow_pools = true;
>   				continue;
>   			}
>   			r = -ENOMEM;
>   			goto error_free_all;
>   		}
> +		r = ttm_pool_page_allocated(pool, order, p, page_caching, &alloc);
> +		if (r)
> +			goto error_free_page;
>   	}
>   
> -	r = ttm_pool_apply_caching(caching, pages, tt->caching);
> +	r = ttm_pool_apply_caching(&alloc);
>   	if (r)
>   		goto error_free_all;
>   
> @@ -523,10 +556,10 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
>   	ttm_pool_free_page(pool, page_caching, order, p);
>   
>   error_free_all:
> -	num_pages = tt->num_pages - num_pages;
> -	caching_divide = caching - tt->pages;
> +	caching_divide = alloc.caching_divide - tt->pages;
>   	ttm_pool_free_range(pool, tt, tt->caching, 0, caching_divide);
> -	ttm_pool_free_range(pool, tt, ttm_cached, caching_divide, num_pages);
> +	ttm_pool_free_range(pool, tt, ttm_cached, caching_divide,
> +			    tt->num_pages - alloc.remaining_pages);
>   
>   	return r;
>   }


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

* Re: [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker
  2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
                   ` (16 preceding siblings ...)
  2024-12-18  7:48 ` ✗ Xe.CI.Full: failure " Patchwork
@ 2025-01-10  9:47 ` Christian König
  2025-01-10 13:04   ` Thomas Hellström
  17 siblings, 1 reply; 23+ messages in thread
From: Christian König @ 2025-01-10  9:47 UTC (permalink / raw)
  To: Thomas Hellström, intel-xe
  Cc: Somalapuram Amaranath, Matthew Brost, Paulo Zanoni, dri-devel,
	Simona Vetter

Any objections that I push patch #1 and #3 to drm-misc-next?

They are general cleanups anyway and this way we have them out of the way.

Regards,
Christian.

Am 17.12.24 um 15:58 schrieb Thomas Hellström:
> This series implements TTM shrinker / eviction helpers and an xe bo
> shrinker. It builds on a previous series, *and obsoletes that one*.
>
> https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/
>
> Where the comment about layering
> https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/#ma918844aa8a6efe8768fdcda0c6590d5c93850c9
>
> now addressed, and this version also implements shmem objects for backup
> rather than direct swap-cache insertions, which was used in the previuos
> series. It turns out that with per-page backup / shrinking, shmem objects
> appears to work just as well as direct swap-cache insertions with the
> added benefit that was introduced in the previous TTM shrinker series to
> avoid running out of swap entries isn't really needed.
>
> The series earlier consisted of a LRU traversal part and the current part.
> The LRU traversal part is merged, but is still mentioned in the history
> below.
>
> Patch 1 balances ttm_resource_cursor_fini() with an init function. It
> makes patch 5 more straightforward.
>
> Patch 2 introduces a backup implemententaion.
>
> Patch 3 reworks the structure of ttm_pool_alloc in preparation for patch 4.
>
> Patch 4 introduces functionality in the ttm_pool code for page-by-page shrinking
> and recovery. It avoids having to temporarily allocate a huge amount of
> memory to be able to shrink a buffer object. It also introduces the
> possibility to immediately write-back pages if needed.
>
> Patch 5 Adds a simple error injection to the above code to help increase
> test coverage.
>
> Patch 6 Implements a macro for LRU iteration.
>
> Patch 7 Introduces driver-facing helpers for shrinking.
>
> Patch 8 Implements the xe bo shrinker.
>
> Patch 9 Increases (removes) the XE_PL_TT watermark.
>
> v2:
> - Squash obsolete revision history in the patch commit messages.
> - Fix a couple of review comments by Christian
> - Don't store the mem_type in the TTM managers but in the
>    resource cursor.
> - Rename introduced TTM *back_up* function names to *backup*
> - Add ttm pool recovery fault injection.
> - Shrinker xe kunit test
> - Various bugfixes
>
> v3:
> - Address some review comments from Matthew Brost and Christian König.
> - Use the restartable LRU walk for TTM swapping and eviction.
> - Provide a POC drm_exec locking implementation for exhaustive
>    eviction. (Christian König).
>
> v4:
> - Remove the RFC exhaustive eviction part. While the path to exhaustive
>    eviction is pretty clear and demonstrated in v3, there is still some
>    drm_exec work that needs to be agreed and implemented.
> - Add shrinker power management. On some hw we need to wake when shrinking.
> - Fix the lru walker helper for -EALREADY errors.
> - Add drm/xe: Increase the XE_PL_TT watermark.
>
> v5:
> - Update also TTM kunit tests
> - Handle ghost- and zombie objects in the shrinker.
> - A couple of compile- and UAF fixes reported by Kernel Build Robot and
>    Dan Carpenter.
>
> v6:
> - Address review comments from Matthew Brost on the
>    restartable LRU traversal path.
>
> v7:
> - Split out TTM restartable LRU traversal path and merge that.
> - Adapt the review comments on that series.
>
> v8:
> - Address review comments from Matthew Brost as detailed in the
>    respective patches.
>
> v9:
> - Rebase and fix compilation errors
>
> v10:
> - Use a LRU iteration macro rather than a function with a callback.
> - Rebasing and cleanups
> - Address some additional review comments from Matt Brost.
> - Drop the shrinker selftest. It was already merged as a swapout
>    self-test.
>
> v11:
> - Move more core interaction to additional TTM helpers.
> - Don't back up without __GFP_FS, and don't start writeback without __GFP_IO.
> - Rebase.
>
> v12:
> - Fix an indentation flaw.
> - Rebase
>
> v13:
> - Remove the backup base-class, and use direct calls for ttm_backup
>    (Christian König).
> - Rebase on the ttm_backup changes.
> - Move shrunken bos from the LRU list to the unevictable list.
> - Provide an accessor function with sanity checks to set the
> - ttm_tt::backup field.
> - Update documentation.
>
> v14:
> - Update documentation of ttm_backup_bytes_avail().
> - Work around converting between struct file * and struct ttm-backup *.
> - Don't set up backup for imported buffers.
>
> v15:
> - ttm_backup return value change. (Christian König)
> - ttm_pool restore/alloc implementation rework (Christian König)
> - Documentation update.
> - Remove cond_resched (Christian König)
>
> Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> Cc: <dri-devel@lists.freedesktop.org>
>
> Thomas Hellström (9):
>    drm/ttm: Balance ttm_resource_cursor_init() and
>      ttm_resource_cursor_fini()
>    drm/ttm: Provide a shmem backup implementation
>    drm/ttm/pool: Restructure the pool allocation code
>    drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages
>    drm/ttm: Use fault-injection to test error paths
>    drm/ttm: Add a macro to perform LRU iteration
>    drm/ttm: Add helpers for shrinking
>    drm/xe: Add a shrinker for xe bos
>    drm/xe: Increase the XE_PL_TT watermark
>
>   drivers/gpu/drm/ttm/Makefile         |   2 +-
>   drivers/gpu/drm/ttm/ttm_backup.c     | 207 ++++++++
>   drivers/gpu/drm/ttm/ttm_bo.c         |   3 +-
>   drivers/gpu/drm/ttm/ttm_bo_util.c    | 250 +++++++++-
>   drivers/gpu/drm/ttm/ttm_pool.c       | 718 +++++++++++++++++++++++----
>   drivers/gpu/drm/ttm/ttm_resource.c   |  35 +-
>   drivers/gpu/drm/ttm/ttm_tt.c         |  83 ++++
>   drivers/gpu/drm/xe/Makefile          |   1 +
>   drivers/gpu/drm/xe/tests/xe_bo.c     |   6 +-
>   drivers/gpu/drm/xe/xe_bo.c           | 202 +++++++-
>   drivers/gpu/drm/xe/xe_bo.h           |  36 ++
>   drivers/gpu/drm/xe/xe_device.c       |   8 +
>   drivers/gpu/drm/xe/xe_device_types.h |   2 +
>   drivers/gpu/drm/xe/xe_shrinker.c     | 258 ++++++++++
>   drivers/gpu/drm/xe/xe_shrinker.h     |  18 +
>   drivers/gpu/drm/xe/xe_ttm_sys_mgr.c  |   3 +-
>   include/drm/ttm/ttm_backup.h         |  74 +++
>   include/drm/ttm/ttm_bo.h             |  93 ++++
>   include/drm/ttm/ttm_pool.h           |   8 +
>   include/drm/ttm/ttm_resource.h       |  11 +-
>   include/drm/ttm/ttm_tt.h             |  69 ++-
>   21 files changed, 1935 insertions(+), 152 deletions(-)
>   create mode 100644 drivers/gpu/drm/ttm/ttm_backup.c
>   create mode 100644 drivers/gpu/drm/xe/xe_shrinker.c
>   create mode 100644 drivers/gpu/drm/xe/xe_shrinker.h
>   create mode 100644 include/drm/ttm/ttm_backup.h
>


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

* Re: [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker
  2025-01-10  9:47 ` [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Christian König
@ 2025-01-10 13:04   ` Thomas Hellström
  0 siblings, 0 replies; 23+ messages in thread
From: Thomas Hellström @ 2025-01-10 13:04 UTC (permalink / raw)
  To: Christian König, intel-xe
  Cc: Somalapuram Amaranath, Matthew Brost, Paulo Zanoni, dri-devel,
	Simona Vetter

On Fri, 2025-01-10 at 10:47 +0100, Christian König wrote:
> Any objections that I push patch #1 and #3 to drm-misc-next?
> 
> They are general cleanups anyway and this way we have them out of the
> way.
> 
> Regards,
> Christian.

Please do. I have to rewrite the cover letter but that's not a big
deal. Also perhaps consider adding a patch to remove the "allow_pools"
functionality.

Also re-raising the question if there is a way we can make TTM
development scale a bit better, with a team of trusted reviewers? 
I am currently working under the assumption that you want to at least
ack everything that goes into TTM?

Thanks,
Thomas



> 
> Am 17.12.24 um 15:58 schrieb Thomas Hellström:
> > This series implements TTM shrinker / eviction helpers and an xe bo
> > shrinker. It builds on a previous series, *and obsoletes that one*.
> > 
> > https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/
> > 
> > Where the comment about layering
> > https://lore.kernel.org/linux-mm/b7491378-defd-4f1c-31e2-29e4c77e2d67@amd.com/T/#ma918844aa8a6efe8768fdcda0c6590d5c93850c9
> > 
> > now addressed, and this version also implements shmem objects for
> > backup
> > rather than direct swap-cache insertions, which was used in the
> > previuos
> > series. It turns out that with per-page backup / shrinking, shmem
> > objects
> > appears to work just as well as direct swap-cache insertions with
> > the
> > added benefit that was introduced in the previous TTM shrinker
> > series to
> > avoid running out of swap entries isn't really needed.
> > 
> > The series earlier consisted of a LRU traversal part and the
> > current part.
> > The LRU traversal part is merged, but is still mentioned in the
> > history
> > below.
> > 
> > Patch 1 balances ttm_resource_cursor_fini() with an init function.
> > It
> > makes patch 5 more straightforward.
> > 
> > Patch 2 introduces a backup implemententaion.
> > 
> > Patch 3 reworks the structure of ttm_pool_alloc in preparation for
> > patch 4.
> > 
> > Patch 4 introduces functionality in the ttm_pool code for page-by-
> > page shrinking
> > and recovery. It avoids having to temporarily allocate a huge
> > amount of
> > memory to be able to shrink a buffer object. It also introduces the
> > possibility to immediately write-back pages if needed.
> > 
> > Patch 5 Adds a simple error injection to the above code to help
> > increase
> > test coverage.
> > 
> > Patch 6 Implements a macro for LRU iteration.
> > 
> > Patch 7 Introduces driver-facing helpers for shrinking.
> > 
> > Patch 8 Implements the xe bo shrinker.
> > 
> > Patch 9 Increases (removes) the XE_PL_TT watermark.
> > 
> > v2:
> > - Squash obsolete revision history in the patch commit messages.
> > - Fix a couple of review comments by Christian
> > - Don't store the mem_type in the TTM managers but in the
> >    resource cursor.
> > - Rename introduced TTM *back_up* function names to *backup*
> > - Add ttm pool recovery fault injection.
> > - Shrinker xe kunit test
> > - Various bugfixes
> > 
> > v3:
> > - Address some review comments from Matthew Brost and Christian
> > König.
> > - Use the restartable LRU walk for TTM swapping and eviction.
> > - Provide a POC drm_exec locking implementation for exhaustive
> >    eviction. (Christian König).
> > 
> > v4:
> > - Remove the RFC exhaustive eviction part. While the path to
> > exhaustive
> >    eviction is pretty clear and demonstrated in v3, there is still
> > some
> >    drm_exec work that needs to be agreed and implemented.
> > - Add shrinker power management. On some hw we need to wake when
> > shrinking.
> > - Fix the lru walker helper for -EALREADY errors.
> > - Add drm/xe: Increase the XE_PL_TT watermark.
> > 
> > v5:
> > - Update also TTM kunit tests
> > - Handle ghost- and zombie objects in the shrinker.
> > - A couple of compile- and UAF fixes reported by Kernel Build Robot
> > and
> >    Dan Carpenter.
> > 
> > v6:
> > - Address review comments from Matthew Brost on the
> >    restartable LRU traversal path.
> > 
> > v7:
> > - Split out TTM restartable LRU traversal path and merge that.
> > - Adapt the review comments on that series.
> > 
> > v8:
> > - Address review comments from Matthew Brost as detailed in the
> >    respective patches.
> > 
> > v9:
> > - Rebase and fix compilation errors
> > 
> > v10:
> > - Use a LRU iteration macro rather than a function with a callback.
> > - Rebasing and cleanups
> > - Address some additional review comments from Matt Brost.
> > - Drop the shrinker selftest. It was already merged as a swapout
> >    self-test.
> > 
> > v11:
> > - Move more core interaction to additional TTM helpers.
> > - Don't back up without __GFP_FS, and don't start writeback without
> > __GFP_IO.
> > - Rebase.
> > 
> > v12:
> > - Fix an indentation flaw.
> > - Rebase
> > 
> > v13:
> > - Remove the backup base-class, and use direct calls for ttm_backup
> >    (Christian König).
> > - Rebase on the ttm_backup changes.
> > - Move shrunken bos from the LRU list to the unevictable list.
> > - Provide an accessor function with sanity checks to set the
> > - ttm_tt::backup field.
> > - Update documentation.
> > 
> > v14:
> > - Update documentation of ttm_backup_bytes_avail().
> > - Work around converting between struct file * and struct ttm-
> > backup *.
> > - Don't set up backup for imported buffers.
> > 
> > v15:
> > - ttm_backup return value change. (Christian König)
> > - ttm_pool restore/alloc implementation rework (Christian König)
> > - Documentation update.
> > - Remove cond_resched (Christian König)
> > 
> > Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
> > Cc: Christian König <christian.koenig@amd.com>
> > Cc: Matthew Brost <matthew.brost@intel.com>
> > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > Cc: <dri-devel@lists.freedesktop.org>
> > 
> > Thomas Hellström (9):
> >    drm/ttm: Balance ttm_resource_cursor_init() and
> >      ttm_resource_cursor_fini()
> >    drm/ttm: Provide a shmem backup implementation
> >    drm/ttm/pool: Restructure the pool allocation code
> >    drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages
> >    drm/ttm: Use fault-injection to test error paths
> >    drm/ttm: Add a macro to perform LRU iteration
> >    drm/ttm: Add helpers for shrinking
> >    drm/xe: Add a shrinker for xe bos
> >    drm/xe: Increase the XE_PL_TT watermark
> > 
> >   drivers/gpu/drm/ttm/Makefile         |   2 +-
> >   drivers/gpu/drm/ttm/ttm_backup.c     | 207 ++++++++
> >   drivers/gpu/drm/ttm/ttm_bo.c         |   3 +-
> >   drivers/gpu/drm/ttm/ttm_bo_util.c    | 250 +++++++++-
> >   drivers/gpu/drm/ttm/ttm_pool.c       | 718
> > +++++++++++++++++++++++----
> >   drivers/gpu/drm/ttm/ttm_resource.c   |  35 +-
> >   drivers/gpu/drm/ttm/ttm_tt.c         |  83 ++++
> >   drivers/gpu/drm/xe/Makefile          |   1 +
> >   drivers/gpu/drm/xe/tests/xe_bo.c     |   6 +-
> >   drivers/gpu/drm/xe/xe_bo.c           | 202 +++++++-
> >   drivers/gpu/drm/xe/xe_bo.h           |  36 ++
> >   drivers/gpu/drm/xe/xe_device.c       |   8 +
> >   drivers/gpu/drm/xe/xe_device_types.h |   2 +
> >   drivers/gpu/drm/xe/xe_shrinker.c     | 258 ++++++++++
> >   drivers/gpu/drm/xe/xe_shrinker.h     |  18 +
> >   drivers/gpu/drm/xe/xe_ttm_sys_mgr.c  |   3 +-
> >   include/drm/ttm/ttm_backup.h         |  74 +++
> >   include/drm/ttm/ttm_bo.h             |  93 ++++
> >   include/drm/ttm/ttm_pool.h           |   8 +
> >   include/drm/ttm/ttm_resource.h       |  11 +-
> >   include/drm/ttm/ttm_tt.h             |  69 ++-
> >   21 files changed, 1935 insertions(+), 152 deletions(-)
> >   create mode 100644 drivers/gpu/drm/ttm/ttm_backup.c
> >   create mode 100644 drivers/gpu/drm/xe/xe_shrinker.c
> >   create mode 100644 drivers/gpu/drm/xe/xe_shrinker.h
> >   create mode 100644 include/drm/ttm/ttm_backup.h
> > 
> 


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

* Re: [PATCH v15 3/9] drm/ttm/pool: Restructure the pool allocation code
  2024-12-17 14:58 ` [PATCH v15 3/9] drm/ttm/pool: Restructure the pool allocation code Thomas Hellström
  2025-01-10  9:45   ` Christian König
@ 2025-01-10 17:57   ` Matthew Brost
  1 sibling, 0 replies; 23+ messages in thread
From: Matthew Brost @ 2025-01-10 17:57 UTC (permalink / raw)
  To: Thomas Hellström
  Cc: intel-xe, Somalapuram Amaranath, Christian König,
	Paulo Zanoni, Simona Vetter, dri-devel

On Tue, Dec 17, 2024 at 03:58:46PM +0100, Thomas Hellström wrote:
> Simplify the pool allocation code somewhat by merging loop arguments
> used by multiple functions together in a struct and simplifying the
> loop. Also add documentation.
> This hopefully makes the behaviour of the allocation loop
> simplier to understand, but above all paves the way for upcoming
> restore-while-allocating functionality.
> 
> There are no functional changes, but the "allow_pools" bool
> introduced to keep current functionality could be removed as a
> follow up, which would enable using write-back cached pools when
> allocating memory for other caching modes, rather than to resort
> to allocating from the system directly.
> 
> v15:
> - Introduce this patch to simplify the upcoming patch that introduces
>   restore while allocating.
> 
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>

Reviewed-by: Matthew Brost <matthew.brost@intel.com>

> ---
>  drivers/gpu/drm/ttm/ttm_pool.c | 183 +++++++++++++++++++--------------
>  1 file changed, 108 insertions(+), 75 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
> index 8504dbe19c1a..c9eba76d5143 100644
> --- a/drivers/gpu/drm/ttm/ttm_pool.c
> +++ b/drivers/gpu/drm/ttm/ttm_pool.c
> @@ -58,6 +58,23 @@ struct ttm_pool_dma {
>  	unsigned long vaddr;
>  };
>  
> +/**
> + * struct ttm_pool_alloc_state - Current state of the tt page allocation process
> + * @pages: Pointer to the next tt page pointer to populate.
> + * @caching_divide: Pointer to the first page pointer whose page has a staged but
> + * not committed caching transition from write-back to @tt_caching.
> + * @dma_addr: Pointer to the next tt dma_address entry to populate if any.
> + * @remaining_pages: Remaining pages to populate.
> + * @tt_caching: The requested cpu-caching for the pages allocated.
> + */
> +struct ttm_pool_alloc_state {
> +	struct page **pages;
> +	struct page **caching_divide;
> +	dma_addr_t *dma_addr;
> +	pgoff_t remaining_pages;
> +	enum ttm_caching tt_caching;
> +};
> +
>  static unsigned long page_pool_size;
>  
>  MODULE_PARM_DESC(page_pool_size, "Number of pages in the WC/UC/DMA pool");
> @@ -160,25 +177,25 @@ static void ttm_pool_free_page(struct ttm_pool *pool, enum ttm_caching caching,
>  	kfree(dma);
>  }
>  
> -/* Apply a new caching to an array of pages */
> -static int ttm_pool_apply_caching(struct page **first, struct page **last,
> -				  enum ttm_caching caching)
> +/* Apply any cpu-caching deferred during page allocation */
> +static int ttm_pool_apply_caching(struct ttm_pool_alloc_state *alloc)
>  {
>  #ifdef CONFIG_X86
> -	unsigned int num_pages = last - first;
> +	unsigned int num_pages = alloc->pages - alloc->caching_divide;
>  
>  	if (!num_pages)
>  		return 0;
>  
> -	switch (caching) {
> +	switch (alloc->tt_caching) {
>  	case ttm_cached:
>  		break;
>  	case ttm_write_combined:
> -		return set_pages_array_wc(first, num_pages);
> +		return set_pages_array_wc(alloc->caching_divide, num_pages);
>  	case ttm_uncached:
> -		return set_pages_array_uc(first, num_pages);
> +		return set_pages_array_uc(alloc->caching_divide, num_pages);
>  	}
>  #endif
> +	alloc->caching_divide = alloc->pages;
>  	return 0;
>  }
>  
> @@ -354,24 +371,41 @@ static unsigned int ttm_pool_page_order(struct ttm_pool *pool, struct page *p)
>  	return p->private;
>  }
>  
> -/* Called when we got a page, either from a pool or newly allocated */
> +/*
> + * Called when we got a page, either from a pool or newly allocated.
> + * if needed, dma map the page and populate the dma address array.
> + * Populate the page address array.
> + * If the caching is consistent, update any deferred caching. Otherwise
> + * stage this page for an upcoming deferred caching update.
> + */
>  static int ttm_pool_page_allocated(struct ttm_pool *pool, unsigned int order,
> -				   struct page *p, dma_addr_t **dma_addr,
> -				   unsigned long *num_pages,
> -				   struct page ***pages)
> +				   struct page *p, enum ttm_caching page_caching,
> +				   struct ttm_pool_alloc_state *alloc)
>  {
> -	unsigned int i;
> -	int r;
> +	pgoff_t i, nr = 1UL << order;
> +	bool caching_consistent;
> +	int r = 0;
> +
> +	caching_consistent = (page_caching == alloc->tt_caching) || PageHighMem(p);
> +
> +	if (caching_consistent) {
> +		r = ttm_pool_apply_caching(alloc);
> +		if (r)
> +			return r;
> +	}
>  
> -	if (*dma_addr) {
> -		r = ttm_pool_map(pool, order, p, dma_addr);
> +	if (alloc->dma_addr) {
> +		r = ttm_pool_map(pool, order, p, &alloc->dma_addr);
>  		if (r)
>  			return r;
>  	}
>  
> -	*num_pages -= 1 << order;
> -	for (i = 1 << order; i; --i, ++(*pages), ++p)
> -		**pages = p;
> +	alloc->remaining_pages -= nr;
> +	for (i = 0; i < nr; ++i)
> +		*alloc->pages++ = p++;
> +
> +	if (caching_consistent)
> +		alloc->caching_divide = alloc->pages;
>  
>  	return 0;
>  }
> @@ -413,6 +447,26 @@ static void ttm_pool_free_range(struct ttm_pool *pool, struct ttm_tt *tt,
>  	}
>  }
>  
> +static void ttm_pool_alloc_state_init(const struct ttm_tt *tt,
> +				      struct ttm_pool_alloc_state *alloc)
> +{
> +	alloc->pages = tt->pages;
> +	alloc->caching_divide = tt->pages;
> +	alloc->dma_addr = tt->dma_address;
> +	alloc->remaining_pages = tt->num_pages;
> +	alloc->tt_caching = tt->caching;
> +}
> +
> +/*
> + * Find a suitable allocation order based on highest desired order
> + * and number of remaining pages
> + */
> +static unsigned int ttm_pool_alloc_find_order(unsigned int highest,
> +					      const struct ttm_pool_alloc_state *alloc)
> +{
> +	return min_t(unsigned int, highest, __fls(alloc->remaining_pages));
> +}
> +
>  /**
>   * ttm_pool_alloc - Fill a ttm_tt object
>   *
> @@ -428,19 +482,19 @@ static void ttm_pool_free_range(struct ttm_pool *pool, struct ttm_tt *tt,
>  int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
>  		   struct ttm_operation_ctx *ctx)
>  {
> -	pgoff_t num_pages = tt->num_pages;
> -	dma_addr_t *dma_addr = tt->dma_address;
> -	struct page **caching = tt->pages;
> -	struct page **pages = tt->pages;
> +	struct ttm_pool_alloc_state alloc;
>  	enum ttm_caching page_caching;
>  	gfp_t gfp_flags = GFP_USER;
>  	pgoff_t caching_divide;
>  	unsigned int order;
> +	bool allow_pools;
>  	struct page *p;
>  	int r;
>  
> -	WARN_ON(!num_pages || ttm_tt_is_populated(tt));
> -	WARN_ON(dma_addr && !pool->dev);
> +	ttm_pool_alloc_state_init(tt, &alloc);
> +
> +	WARN_ON(!alloc.remaining_pages || ttm_tt_is_populated(tt));
> +	WARN_ON(alloc.dma_addr && !pool->dev);
>  
>  	if (tt->page_flags & TTM_TT_FLAG_ZERO_ALLOC)
>  		gfp_flags |= __GFP_ZERO;
> @@ -453,67 +507,46 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
>  	else
>  		gfp_flags |= GFP_HIGHUSER;
>  
> -	for (order = min_t(unsigned int, MAX_PAGE_ORDER, __fls(num_pages));
> -	     num_pages;
> -	     order = min_t(unsigned int, order, __fls(num_pages))) {
> +	page_caching = tt->caching;
> +	allow_pools = true;
> +	for (order = ttm_pool_alloc_find_order(MAX_PAGE_ORDER, &alloc);
> +	     alloc.remaining_pages;
> +	     order = ttm_pool_alloc_find_order(order, &alloc)) {
>  		struct ttm_pool_type *pt;
>  
> -		page_caching = tt->caching;
> -		pt = ttm_pool_select_type(pool, tt->caching, order);
> -		p = pt ? ttm_pool_type_take(pt) : NULL;
> -		if (p) {
> -			r = ttm_pool_apply_caching(caching, pages,
> -						   tt->caching);
> -			if (r)
> -				goto error_free_page;
> -
> -			caching = pages;
> -			do {
> -				r = ttm_pool_page_allocated(pool, order, p,
> -							    &dma_addr,
> -							    &num_pages,
> -							    &pages);
> -				if (r)
> -					goto error_free_page;
> -
> -				caching = pages;
> -				if (num_pages < (1 << order))
> -					break;
> -
> -				p = ttm_pool_type_take(pt);
> -			} while (p);
> -		}
> -
> -		page_caching = ttm_cached;
> -		while (num_pages >= (1 << order) &&
> -		       (p = ttm_pool_alloc_page(pool, gfp_flags, order))) {
> -
> -			if (PageHighMem(p)) {
> -				r = ttm_pool_apply_caching(caching, pages,
> -							   tt->caching);
> -				if (r)
> -					goto error_free_page;
> -				caching = pages;
> -			}
> -			r = ttm_pool_page_allocated(pool, order, p, &dma_addr,
> -						    &num_pages, &pages);
> -			if (r)
> -				goto error_free_page;
> -			if (PageHighMem(p))
> -				caching = pages;
> +		/* First, try to allocate a page from a pool if one exists. */
> +		p = NULL;
> +		pt = ttm_pool_select_type(pool, page_caching, order);
> +		if (pt && allow_pools)
> +			p = ttm_pool_type_take(pt);
> +		/*
> +		 * If that fails or previously failed, allocate from system.
> +		 * Note that this also disallows additional pool allocations using
> +		 * write-back cached pools of the same order. Consider removing
> +		 * that behaviour.
> +		 */
> +		if (!p) {
> +			page_caching = ttm_cached;
> +			allow_pools = false;
> +			p = ttm_pool_alloc_page(pool, gfp_flags, order);
>  		}
> -
> +		/* If that fails, lower the order if possible and retry. */
>  		if (!p) {
>  			if (order) {
>  				--order;
> +				page_caching = tt->caching;
> +				allow_pools = true;
>  				continue;
>  			}
>  			r = -ENOMEM;
>  			goto error_free_all;
>  		}
> +		r = ttm_pool_page_allocated(pool, order, p, page_caching, &alloc);
> +		if (r)
> +			goto error_free_page;
>  	}
>  
> -	r = ttm_pool_apply_caching(caching, pages, tt->caching);
> +	r = ttm_pool_apply_caching(&alloc);
>  	if (r)
>  		goto error_free_all;
>  
> @@ -523,10 +556,10 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
>  	ttm_pool_free_page(pool, page_caching, order, p);
>  
>  error_free_all:
> -	num_pages = tt->num_pages - num_pages;
> -	caching_divide = caching - tt->pages;
> +	caching_divide = alloc.caching_divide - tt->pages;
>  	ttm_pool_free_range(pool, tt, tt->caching, 0, caching_divide);
> -	ttm_pool_free_range(pool, tt, ttm_cached, caching_divide, num_pages);
> +	ttm_pool_free_range(pool, tt, ttm_cached, caching_divide,
> +			    tt->num_pages - alloc.remaining_pages);
>  
>  	return r;
>  }
> -- 
> 2.47.1
> 

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

* Re: [PATCH v15 4/9] drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages
  2024-12-17 14:58 ` [PATCH v15 4/9] drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages Thomas Hellström
@ 2025-01-16  1:57   ` Matthew Brost
  0 siblings, 0 replies; 23+ messages in thread
From: Matthew Brost @ 2025-01-16  1:57 UTC (permalink / raw)
  To: Thomas Hellström
  Cc: intel-xe, Christian König, Somalapuram Amaranath, dri-devel,
	Paulo Zanoni, Simona Vetter

On Tue, Dec 17, 2024 at 03:58:47PM +0100, Thomas Hellström wrote:
> Provide a helper to shrink ttm_tt page-vectors on a per-page
> basis. A ttm_backup backend could then in theory get away with
> allocating a single temporary page for each struct ttm_tt.
> 
> This is accomplished by splitting larger pages before trying to
> back them up.
> 
> In the future we could allow ttm_backup to handle backing up
> large pages as well, but currently there's no benefit in
> doing that, since the shmem backup backend would have to
> split those anyway to avoid allocating too much temporary
> memory, and if the backend instead inserts pages into the
> swap-cache, those are split on reclaim by the core.
> 
> Due to potential backup- and recover errors, allow partially swapped
> out struct ttm_tt's, although mark them as swapped out stopping them
> from being swapped out a second time. More details in the ttm_pool.c
> DOC section.
> 
> v2:
> - A couple of cleanups and error fixes in ttm_pool_back_up_tt.
> - s/back_up/backup/
> - Add a writeback parameter to the exported interface.
> v8:
> - Use a struct for flags for readability (Matt Brost)
> - Address misc other review comments (Matt Brost)
> v9:
> - Update the kerneldoc for the ttm_tt::backup field.
> v10:
> - Rebase.
> v13:
> - Rebase on ttm_backup interface change. Update kerneldoc.
> - Rebase and adjust ttm_tt_is_swapped().
> v15:
> - Rebase on ttm_backup return value change.
> - Rebase on previous restructuring of ttm_pool_alloc()
> - Rework the ttm_pool backup interface (Christian König)
> - Remove cond_resched() (Christian König)
> - Get rid of the need to allocate an intermediate page array
>   when restoring a multi-order page (Christian König)
> - Update documentation.
> 
> Cc: Christian König <christian.koenig@amd.com>
> Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
> Cc: Matthew Brost <matthew.brost@intel.com>

Reviewed-by: 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/ttm/ttm_pool.c | 554 +++++++++++++++++++++++++++++----
>  drivers/gpu/drm/ttm/ttm_tt.c   |  54 ++++
>  include/drm/ttm/ttm_pool.h     |   8 +
>  include/drm/ttm/ttm_tt.h       |  67 +++-
>  4 files changed, 629 insertions(+), 54 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
> index c9eba76d5143..ffb7abf52bab 100644
> --- a/drivers/gpu/drm/ttm/ttm_pool.c
> +++ b/drivers/gpu/drm/ttm/ttm_pool.c
> @@ -41,6 +41,7 @@
>  #include <asm/set_memory.h>
>  #endif
>  
> +#include <drm/ttm/ttm_backup.h>
>  #include <drm/ttm/ttm_pool.h>
>  #include <drm/ttm/ttm_tt.h>
>  #include <drm/ttm/ttm_bo.h>
> @@ -75,6 +76,35 @@ struct ttm_pool_alloc_state {
>  	enum ttm_caching tt_caching;
>  };
>  
> +/**
> + * struct ttm_pool_tt_restore - State representing restore from backup
> + * @pool: The pool used for page allocation while restoring.
> + * @snapshot_alloc: A snapshot of the most recent struct ttm_pool_alloc_state.
> + * @alloced_page: Pointer to the page most recently allocated from a pool or system.
> + * @first_dma: The dma address corresponding to @alloced_page if dma_mapping
> + * is requested.
> + * @alloced_pages: The number of allocated pages present in the struct ttm_tt
> + * page vector from this restore session.
> + * @restored_pages: The number of 4K pages restored for @alloced_page (which
> + * is typically a multi-order page).
> + * @page_caching: The struct ttm_tt requested caching
> + * @order: The order of @alloced_page.
> + *
> + * Recovery from backup might fail when we've recovered less than the
> + * full ttm_tt. In order not to loose any data (yet), keep information
> + * around that allows us to restart a failed ttm backup recovery.
> + */
> +struct ttm_pool_tt_restore {
> +	struct ttm_pool *pool;
> +	struct ttm_pool_alloc_state snapshot_alloc;
> +	struct page *alloced_page;
> +	dma_addr_t first_dma;
> +	pgoff_t alloced_pages;
> +	pgoff_t restored_pages;
> +	enum ttm_caching page_caching;
> +	unsigned int order;
> +};
> +
>  static unsigned long page_pool_size;
>  
>  MODULE_PARM_DESC(page_pool_size, "Number of pages in the WC/UC/DMA pool");
> @@ -199,12 +229,11 @@ static int ttm_pool_apply_caching(struct ttm_pool_alloc_state *alloc)
>  	return 0;
>  }
>  
> -/* Map pages of 1 << order size and fill the DMA address array  */
> +/* DMA Map pages of 1 << order size and return the resulting dma_address. */
>  static int ttm_pool_map(struct ttm_pool *pool, unsigned int order,
> -			struct page *p, dma_addr_t **dma_addr)
> +			struct page *p, dma_addr_t *dma_addr)
>  {
>  	dma_addr_t addr;
> -	unsigned int i;
>  
>  	if (pool->use_dma_alloc) {
>  		struct ttm_pool_dma *dma = (void *)p->private;
> @@ -218,10 +247,7 @@ static int ttm_pool_map(struct ttm_pool *pool, unsigned int order,
>  			return -EFAULT;
>  	}
>  
> -	for (i = 1 << order; i ; --i) {
> -		*(*dma_addr)++ = addr;
> -		addr += PAGE_SIZE;
> -	}
> +	*dma_addr = addr;
>  
>  	return 0;
>  }
> @@ -371,6 +397,190 @@ static unsigned int ttm_pool_page_order(struct ttm_pool *pool, struct page *p)
>  	return p->private;
>  }
>  
> +/*
> + * Split larger pages so that we can free each PAGE_SIZE page as soon
> + * as it has been backed up, in order to avoid memory pressure during
> + * reclaim.
> + */
> +static void ttm_pool_split_for_swap(struct ttm_pool *pool, struct page *p)
> +{
> +	unsigned int order = ttm_pool_page_order(pool, p);
> +	pgoff_t nr;
> +
> +	if (!order)
> +		return;
> +
> +	split_page(p, order);
> +	nr = 1UL << order;
> +	while (nr--)
> +		(p++)->private = 0;
> +}
> +
> +/**
> + * DOC: Partial backup and restoration of a struct ttm_tt.
> + *
> + * Swapout using ttm_backup_backup_page() and swapin using
> + * ttm_backup_copy_page() may fail.
> + * The former most likely due to lack of swap-space or memory, the latter due
> + * to lack of memory or because of signal interruption during waits.
> + *
> + * Backup failure is easily handled by using a ttm_tt pages vector that holds
> + * both backup handles and page pointers. This has to be taken into account when
> + * restoring such a ttm_tt from backup, and when freeing it while backed up.
> + * When restoring, for simplicity, new pages are actually allocated from the
> + * pool and the contents of any old pages are copied in and then the old pages
> + * are released.
> + *
> + * For restoration failures, the struct ttm_pool_tt_restore holds sufficient state
> + * to be able to resume an interrupted restore, and that structure is freed once
> + * the restoration is complete. If the struct ttm_tt is destroyed while there
> + * is a valid struct ttm_pool_tt_restore attached, that is also properly taken
> + * care of.
> + */
> +
> +/* Is restore ongoing for the currently allocated page? */
> +static bool ttm_pool_restore_valid(const struct ttm_pool_tt_restore *restore)
> +{
> +	return restore && restore->restored_pages < (1 << restore->order);
> +}
> +
> +/* DMA unmap and free a multi-order page, either to the relevant pool or to system. */
> +static pgoff_t ttm_pool_unmap_and_free(struct ttm_pool *pool, struct page *page,
> +				       const dma_addr_t *dma_addr, enum ttm_caching caching)
> +{
> +	struct ttm_pool_type *pt = NULL;
> +	unsigned int order;
> +	pgoff_t nr;
> +
> +	if (pool) {
> +		order = ttm_pool_page_order(pool, page);
> +		nr = (1UL << order);
> +		if (dma_addr)
> +			ttm_pool_unmap(pool, *dma_addr, nr);
> +
> +		pt = ttm_pool_select_type(pool, caching, order);
> +	} else {
> +		order = page->private;
> +		nr = (1UL << order);
> +	}
> +
> +	if (pt)
> +		ttm_pool_type_give(pt, page);
> +	else
> +		ttm_pool_free_page(pool, caching, order, page);
> +
> +	return nr;
> +}
> +
> +/* Populate the page-array using the most recent allocated multi-order page. */
> +static void ttm_pool_allocated_page_commit(struct page *allocated,
> +					   dma_addr_t first_dma,
> +					   struct ttm_pool_alloc_state *alloc,
> +					   pgoff_t nr)
> +{
> +	pgoff_t i;
> +
> +	for (i = 0; i < nr; ++i)
> +		*alloc->pages++ = allocated++;
> +
> +	alloc->remaining_pages -= nr;
> +
> +	if (!alloc->dma_addr)
> +		return;
> +
> +	for (i = 0; i < nr; ++i) {
> +		*alloc->dma_addr++ = first_dma;
> +		first_dma += PAGE_SIZE;
> +	}
> +}
> +
> +/*
> + * When restoring, restore backed-up content to the newly allocated page and
> + * if successful, populate the page-table and dma-address arrays.
> + */
> +static int ttm_pool_restore_commit(struct ttm_pool_tt_restore *restore,
> +				   struct ttm_backup *backup,
> +				   const struct ttm_operation_ctx *ctx,
> +				   struct ttm_pool_alloc_state *alloc)
> +
> +{
> +	pgoff_t i, nr = 1UL << restore->order;
> +	struct page **first_page = alloc->pages;
> +	struct page *p;
> +	int ret = 0;
> +
> +	for (i = restore->restored_pages; i < nr; ++i) {
> +		p = first_page[i];
> +		if (ttm_backup_page_ptr_is_handle(p)) {
> +			unsigned long handle = ttm_backup_page_ptr_to_handle(p);
> +
> +			if (handle == 0) {
> +				restore->restored_pages++;
> +				continue;
> +			}
> +
> +			ret = ttm_backup_copy_page(backup, restore->alloced_page + i,
> +						   handle, ctx->interruptible);
> +			if (ret)
> +				break;
> +
> +			ttm_backup_drop(backup, handle);
> +		} else if (p) {
> +			/*
> +			 * We could probably avoid splitting the old page
> +			 * using clever logic, but ATM we don't care, as
> +			 * we prioritize releasing memory ASAP. Note that
> +			 * here, the old retained page is always write-back
> +			 * cached.
> +			 */
> +			ttm_pool_split_for_swap(restore->pool, p);
> +			copy_highpage(restore->alloced_page + i, p);
> +			__free_pages(p, 0);
> +		}
> +
> +		restore->restored_pages++;
> +		first_page[i] = ttm_backup_handle_to_page_ptr(0);
> +	}
> +
> +	if (ret) {
> +		if (!restore->restored_pages) {
> +			dma_addr_t *dma_addr = alloc->dma_addr ? &restore->first_dma : NULL;
> +
> +			ttm_pool_unmap_and_free(restore->pool, restore->alloced_page,
> +						dma_addr, restore->page_caching);
> +			restore->restored_pages = nr;
> +		}
> +		return ret;
> +	}
> +
> +	ttm_pool_allocated_page_commit(restore->alloced_page, restore->first_dma,
> +				       alloc, nr);
> +	if (restore->page_caching == alloc->tt_caching || PageHighMem(restore->alloced_page))
> +		alloc->caching_divide = alloc->pages;
> +	restore->snapshot_alloc = *alloc;
> +	restore->alloced_pages += nr;
> +
> +	return 0;
> +}
> +
> +/* If restoring, save information needed for ttm_pool_restore_commit(). */
> +static void
> +ttm_pool_page_allocated_restore(struct ttm_pool *pool, unsigned int order,
> +				struct page *p,
> +				enum ttm_caching page_caching,
> +				dma_addr_t first_dma,
> +				struct ttm_pool_tt_restore *restore,
> +				const struct ttm_pool_alloc_state *alloc)
> +{
> +	restore->pool = pool;
> +	restore->order = order;
> +	restore->restored_pages = 0;
> +	restore->page_caching = page_caching;
> +	restore->first_dma = first_dma;
> +	restore->alloced_page = p;
> +	restore->snapshot_alloc = *alloc;
> +}
> +
>  /*
>   * Called when we got a page, either from a pool or newly allocated.
>   * if needed, dma map the page and populate the dma address array.
> @@ -380,10 +590,11 @@ static unsigned int ttm_pool_page_order(struct ttm_pool *pool, struct page *p)
>   */
>  static int ttm_pool_page_allocated(struct ttm_pool *pool, unsigned int order,
>  				   struct page *p, enum ttm_caching page_caching,
> -				   struct ttm_pool_alloc_state *alloc)
> +				   struct ttm_pool_alloc_state *alloc,
> +				   struct ttm_pool_tt_restore *restore)
>  {
> -	pgoff_t i, nr = 1UL << order;
>  	bool caching_consistent;
> +	dma_addr_t first_dma;
>  	int r = 0;
>  
>  	caching_consistent = (page_caching == alloc->tt_caching) || PageHighMem(p);
> @@ -395,17 +606,20 @@ static int ttm_pool_page_allocated(struct ttm_pool *pool, unsigned int order,
>  	}
>  
>  	if (alloc->dma_addr) {
> -		r = ttm_pool_map(pool, order, p, &alloc->dma_addr);
> +		r = ttm_pool_map(pool, order, p, &first_dma);
>  		if (r)
>  			return r;
>  	}
>  
> -	alloc->remaining_pages -= nr;
> -	for (i = 0; i < nr; ++i)
> -		*alloc->pages++ = p++;
> +	if (restore) {
> +		ttm_pool_page_allocated_restore(pool, order, p, page_caching,
> +						first_dma, restore, alloc);
> +	} else {
> +		ttm_pool_allocated_page_commit(p, first_dma, alloc, 1UL << order);
>  
> -	if (caching_consistent)
> -		alloc->caching_divide = alloc->pages;
> +		if (caching_consistent)
> +			alloc->caching_divide = alloc->pages;
> +	}
>  
>  	return 0;
>  }
> @@ -428,22 +642,24 @@ static void ttm_pool_free_range(struct ttm_pool *pool, struct ttm_tt *tt,
>  				pgoff_t start_page, pgoff_t end_page)
>  {
>  	struct page **pages = &tt->pages[start_page];
> -	unsigned int order;
> +	struct ttm_backup *backup = tt->backup;
>  	pgoff_t i, nr;
>  
>  	for (i = start_page; i < end_page; i += nr, pages += nr) {
> -		struct ttm_pool_type *pt = NULL;
> +		struct page *p = *pages;
>  
> -		order = ttm_pool_page_order(pool, *pages);
> -		nr = (1UL << order);
> -		if (tt->dma_address)
> -			ttm_pool_unmap(pool, tt->dma_address[i], nr);
> +		nr = 1;
> +		if (ttm_backup_page_ptr_is_handle(p)) {
> +			unsigned long handle = ttm_backup_page_ptr_to_handle(p);
>  
> -		pt = ttm_pool_select_type(pool, caching, order);
> -		if (pt)
> -			ttm_pool_type_give(pt, *pages);
> -		else
> -			ttm_pool_free_page(pool, caching, order, *pages);
> +			if (handle != 0)
> +				ttm_backup_drop(backup, handle);
> +		} else if (p) {
> +			dma_addr_t *dma_addr = tt->dma_address ?
> +				tt->dma_address + i : NULL;
> +
> +			nr = ttm_pool_unmap_and_free(pool, p, dma_addr, caching);
> +		}
>  	}
>  }
>  
> @@ -467,22 +683,11 @@ static unsigned int ttm_pool_alloc_find_order(unsigned int highest,
>  	return min_t(unsigned int, highest, __fls(alloc->remaining_pages));
>  }
>  
> -/**
> - * ttm_pool_alloc - Fill a ttm_tt object
> - *
> - * @pool: ttm_pool to use
> - * @tt: ttm_tt object to fill
> - * @ctx: operation context
> - *
> - * Fill the ttm_tt object with pages and also make sure to DMA map them when
> - * necessary.
> - *
> - * Returns: 0 on successe, negative error code otherwise.
> - */
> -int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
> -		   struct ttm_operation_ctx *ctx)
> +static int __ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
> +			    const struct ttm_operation_ctx *ctx,
> +			    struct ttm_pool_alloc_state *alloc,
> +			    struct ttm_pool_tt_restore *restore)
>  {
> -	struct ttm_pool_alloc_state alloc;
>  	enum ttm_caching page_caching;
>  	gfp_t gfp_flags = GFP_USER;
>  	pgoff_t caching_divide;
> @@ -491,10 +696,8 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
>  	struct page *p;
>  	int r;
>  
> -	ttm_pool_alloc_state_init(tt, &alloc);
> -
> -	WARN_ON(!alloc.remaining_pages || ttm_tt_is_populated(tt));
> -	WARN_ON(alloc.dma_addr && !pool->dev);
> +	WARN_ON(!alloc->remaining_pages || ttm_tt_is_populated(tt));
> +	WARN_ON(alloc->dma_addr && !pool->dev);
>  
>  	if (tt->page_flags & TTM_TT_FLAG_ZERO_ALLOC)
>  		gfp_flags |= __GFP_ZERO;
> @@ -509,9 +712,9 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
>  
>  	page_caching = tt->caching;
>  	allow_pools = true;
> -	for (order = ttm_pool_alloc_find_order(MAX_PAGE_ORDER, &alloc);
> -	     alloc.remaining_pages;
> -	     order = ttm_pool_alloc_find_order(order, &alloc)) {
> +	for (order = ttm_pool_alloc_find_order(MAX_PAGE_ORDER, alloc);
> +	     alloc->remaining_pages;
> +	     order = ttm_pool_alloc_find_order(order, alloc)) {
>  		struct ttm_pool_type *pt;
>  
>  		/* First, try to allocate a page from a pool if one exists. */
> @@ -541,30 +744,120 @@ int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
>  			r = -ENOMEM;
>  			goto error_free_all;
>  		}
> -		r = ttm_pool_page_allocated(pool, order, p, page_caching, &alloc);
> +		r = ttm_pool_page_allocated(pool, order, p, page_caching, alloc,
> +					    restore);
>  		if (r)
>  			goto error_free_page;
> +
> +		if (ttm_pool_restore_valid(restore)) {
> +			r = ttm_pool_restore_commit(restore, tt->backup, ctx, alloc);
> +			if (r)
> +				goto error_free_all;
> +		}
>  	}
>  
> -	r = ttm_pool_apply_caching(&alloc);
> +	r = ttm_pool_apply_caching(alloc);
>  	if (r)
>  		goto error_free_all;
>  
> +	kfree(tt->restore);
> +	tt->restore = NULL;
> +
>  	return 0;
>  
>  error_free_page:
>  	ttm_pool_free_page(pool, page_caching, order, p);
>  
>  error_free_all:
> -	caching_divide = alloc.caching_divide - tt->pages;
> +	if (tt->restore)
> +		return r;
> +
> +	caching_divide = alloc->caching_divide - tt->pages;
>  	ttm_pool_free_range(pool, tt, tt->caching, 0, caching_divide);
>  	ttm_pool_free_range(pool, tt, ttm_cached, caching_divide,
> -			    tt->num_pages - alloc.remaining_pages);
> +			    tt->num_pages - alloc->remaining_pages);
>  
>  	return r;
>  }
> +
> +/**
> + * ttm_pool_alloc - Fill a ttm_tt object
> + *
> + * @pool: ttm_pool to use
> + * @tt: ttm_tt object to fill
> + * @ctx: operation context
> + *
> + * Fill the ttm_tt object with pages and also make sure to DMA map them when
> + * necessary.
> + *
> + * Returns: 0 on successe, negative error code otherwise.
> + */
> +int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
> +		   struct ttm_operation_ctx *ctx)
> +{
> +	struct ttm_pool_alloc_state alloc;
> +
> +	if (WARN_ON(ttm_tt_is_backed_up(tt)))
> +		return -EINVAL;
> +
> +	ttm_pool_alloc_state_init(tt, &alloc);
> +
> +	return __ttm_pool_alloc(pool, tt, ctx, &alloc, NULL);
> +}
>  EXPORT_SYMBOL(ttm_pool_alloc);
>  
> +/**
> + * ttm_pool_restore_and_alloc - Fill a ttm_tt, restoring previously backed-up
> + * content.
> + *
> + * @pool: ttm_pool to use
> + * @tt: ttm_tt object to fill
> + * @ctx: operation context
> + *
> + * Fill the ttm_tt object with pages and also make sure to DMA map them when
> + * necessary. Read in backed-up content.
> + *
> + * Returns: 0 on successe, negative error code otherwise.
> + */
> +int ttm_pool_restore_and_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
> +			       const struct ttm_operation_ctx *ctx)
> +{
> +	struct ttm_pool_alloc_state alloc;
> +
> +	if (WARN_ON(!ttm_tt_is_backed_up(tt)))
> +		return -EINVAL;
> +
> +	if (!tt->restore) {
> +		gfp_t gfp = GFP_KERNEL | __GFP_NOWARN;
> +
> +		ttm_pool_alloc_state_init(tt, &alloc);
> +		if (ctx->gfp_retry_mayfail)
> +			gfp |= __GFP_RETRY_MAYFAIL;
> +
> +		tt->restore = kzalloc(sizeof(*tt->restore), gfp);
> +		if (!tt->restore)
> +			return -ENOMEM;
> +
> +		tt->restore->snapshot_alloc = alloc;
> +		tt->restore->pool = pool;
> +		tt->restore->restored_pages = 1;
> +	} else {
> +		struct ttm_pool_tt_restore *restore = tt->restore;
> +		int ret;
> +
> +		alloc = restore->snapshot_alloc;
> +		if (ttm_pool_restore_valid(tt->restore)) {
> +			ret = ttm_pool_restore_commit(restore, tt->backup, ctx, &alloc);
> +			if (ret)
> +				return ret;
> +		}
> +		if (!alloc.remaining_pages)
> +			return 0;
> +	}
> +
> +	return __ttm_pool_alloc(pool, tt, ctx, &alloc, tt->restore);
> +}
> +
>  /**
>   * ttm_pool_free - Free the backing pages from a ttm_tt object
>   *
> @@ -582,6 +875,163 @@ void ttm_pool_free(struct ttm_pool *pool, struct ttm_tt *tt)
>  }
>  EXPORT_SYMBOL(ttm_pool_free);
>  
> +/**
> + * ttm_pool_drop_backed_up() - Release content of a swapped-out struct ttm_tt
> + * @tt: The struct ttm_tt.
> + *
> + * Release handles with associated content or any remaining pages of
> + * a backed-up struct ttm_tt.
> + */
> +void ttm_pool_drop_backed_up(struct ttm_tt *tt)
> +{
> +	struct ttm_pool_tt_restore *restore;
> +	pgoff_t start_page = 0;
> +
> +	WARN_ON(!ttm_tt_is_backed_up(tt));
> +
> +	restore = tt->restore;
> +
> +	/*
> +	 * Unmap and free any uncommitted restore page.
> +	 * any tt page-array backup entries already read back has
> +	 * been cleared already
> +	 */
> +	if (ttm_pool_restore_valid(restore)) {
> +		dma_addr_t *dma_addr = tt->dma_address ? &restore->first_dma : NULL;
> +
> +		ttm_pool_unmap_and_free(restore->pool, restore->alloced_page,
> +					dma_addr, restore->page_caching);
> +		restore->restored_pages = 1UL << restore->order;
> +	}
> +
> +	/*
> +	 * If a restore is ongoing, part of the tt pages may have a
> +	 * caching different than writeback.
> +	 */
> +	if (restore) {
> +		pgoff_t mid = restore->snapshot_alloc.caching_divide - tt->pages;
> +
> +		start_page = restore->alloced_pages;
> +		WARN_ON(mid > start_page);
> +		/* Pages that might be dma-mapped and non-cached */
> +		ttm_pool_free_range(restore->pool, tt, tt->caching,
> +				    0, mid);
> +		/* Pages that might be dma-mapped but cached */
> +		ttm_pool_free_range(restore->pool, tt, ttm_cached,
> +				    mid, restore->alloced_pages);
> +		kfree(restore);
> +		tt->restore = NULL;
> +	}
> +
> +	ttm_pool_free_range(NULL, tt, ttm_cached, start_page, tt->num_pages);
> +}
> +
> +/**
> + * ttm_pool_backup() - Back up or purge a struct ttm_tt
> + * @pool: The pool used when allocating the struct ttm_tt.
> + * @tt: The struct ttm_tt.
> + * @flags: Flags to govern the backup behaviour.
> + *
> + * Back up or purge a struct ttm_tt. If @purge is true, then
> + * all pages will be freed directly to the system rather than to the pool
> + * they were allocated from, making the function behave similarly to
> + * ttm_pool_free(). If @purge is false the pages will be backed up instead,
> + * exchanged for handles.
> + * A subsequent call to ttm_pool_restore_and_alloc() will then read back the content and
> + * a subsequent call to ttm_pool_drop_backed_up() will drop it.
> + * If backup of a page fails for whatever reason, @ttm will still be
> + * partially backed up, retaining those pages for which backup fails.
> + * In that case, this function can be retried, possibly after freeing up
> + * memory resources.
> + *
> + * Return: Number of pages actually backed up or freed, or negative
> + * error code on error.
> + */
> +long ttm_pool_backup(struct ttm_pool *pool, struct ttm_tt *tt,
> +		     const struct ttm_backup_flags *flags)
> +{
> +	struct ttm_backup *backup = tt->backup;
> +	struct page *page;
> +	unsigned long handle;
> +	gfp_t alloc_gfp;
> +	gfp_t gfp;
> +	int ret = 0;
> +	pgoff_t shrunken = 0;
> +	pgoff_t i, num_pages;
> +
> +	if (WARN_ON(ttm_tt_is_backed_up(tt)))
> +		return -EINVAL;
> +
> +	if ((!ttm_backup_bytes_avail() && !flags->purge) ||
> +	    pool->use_dma_alloc || ttm_tt_is_backed_up(tt))
> +		return -EBUSY;
> +
> +#ifdef CONFIG_X86
> +	/* Anything returned to the system needs to be cached. */
> +	if (tt->caching != ttm_cached)
> +		set_pages_array_wb(tt->pages, tt->num_pages);
> +#endif
> +
> +	if (tt->dma_address || flags->purge) {
> +		for (i = 0; i < tt->num_pages; i += num_pages) {
> +			unsigned int order;
> +
> +			page = tt->pages[i];
> +			if (unlikely(!page)) {
> +				num_pages = 1;
> +				continue;
> +			}
> +
> +			order = ttm_pool_page_order(pool, page);
> +			num_pages = 1UL << order;
> +			if (tt->dma_address)
> +				ttm_pool_unmap(pool, tt->dma_address[i],
> +					       num_pages);
> +			if (flags->purge) {
> +				shrunken += num_pages;
> +				page->private = 0;
> +				__free_pages(page, order);
> +				memset(tt->pages + i, 0,
> +				       num_pages * sizeof(*tt->pages));
> +			}
> +		}
> +	}
> +
> +	if (flags->purge)
> +		return shrunken;
> +
> +	if (pool->use_dma32)
> +		gfp = GFP_DMA32;
> +	else
> +		gfp = GFP_HIGHUSER;
> +
> +	alloc_gfp = GFP_KERNEL | __GFP_HIGH | __GFP_NOWARN | __GFP_RETRY_MAYFAIL;
> +
> +	for (i = 0; i < tt->num_pages; ++i) {
> +		s64 shandle;
> +
> +		page = tt->pages[i];
> +		if (unlikely(!page))
> +			continue;
> +
> +		ttm_pool_split_for_swap(pool, page);
> +
> +		shandle = ttm_backup_backup_page(backup, page, flags->writeback, i,
> +						 gfp, alloc_gfp);
> +		if (shandle < 0) {
> +			/* We allow partially shrunken tts */
> +			ret = shandle;
> +			break;
> +		}
> +		handle = shandle;
> +		tt->pages[i] = ttm_backup_handle_to_page_ptr(handle);
> +		put_page(page);
> +		shrunken++;
> +	}
> +
> +	return shrunken ? shrunken : ret;
> +}
> +
>  /**
>   * ttm_pool_init - Initialize a pool
>   *
> diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
> index 3baf215eca23..00b7c28f2329 100644
> --- a/drivers/gpu/drm/ttm/ttm_tt.c
> +++ b/drivers/gpu/drm/ttm/ttm_tt.c
> @@ -40,6 +40,7 @@
>  #include <drm/drm_cache.h>
>  #include <drm/drm_device.h>
>  #include <drm/drm_util.h>
> +#include <drm/ttm/ttm_backup.h>
>  #include <drm/ttm/ttm_bo.h>
>  #include <drm/ttm/ttm_tt.h>
>  
> @@ -158,6 +159,8 @@ static void ttm_tt_init_fields(struct ttm_tt *ttm,
>  	ttm->swap_storage = NULL;
>  	ttm->sg = bo->sg;
>  	ttm->caching = caching;
> +	ttm->restore = NULL;
> +	ttm->backup = NULL;
>  }
>  
>  int ttm_tt_init(struct ttm_tt *ttm, struct ttm_buffer_object *bo,
> @@ -182,6 +185,13 @@ void ttm_tt_fini(struct ttm_tt *ttm)
>  		fput(ttm->swap_storage);
>  	ttm->swap_storage = NULL;
>  
> +	if (ttm_tt_is_backed_up(ttm))
> +		ttm_pool_drop_backed_up(ttm);
> +	if (ttm->backup) {
> +		ttm_backup_fini(ttm->backup);
> +		ttm->backup = NULL;
> +	}
> +
>  	if (ttm->pages)
>  		kvfree(ttm->pages);
>  	else
> @@ -253,6 +263,49 @@ int ttm_tt_swapin(struct ttm_tt *ttm)
>  }
>  EXPORT_SYMBOL_FOR_TESTS_ONLY(ttm_tt_swapin);
>  
> +/**
> + * ttm_tt_backup() - Helper to back up a struct ttm_tt.
> + * @bdev: The TTM device.
> + * @tt: The struct ttm_tt.
> + * @flags: Flags that govern the backup behaviour.
> + *
> + * Update the page accounting and call ttm_pool_shrink_tt to free pages
> + * or back them up.
> + *
> + * Return: Number of pages freed or swapped out, or negative error code on
> + * error.
> + */
> +long ttm_tt_backup(struct ttm_device *bdev, struct ttm_tt *tt,
> +		   const struct ttm_backup_flags flags)
> +{
> +	long ret;
> +
> +	if (WARN_ON(IS_ERR_OR_NULL(tt->backup)))
> +		return 0;
> +
> +	ret = ttm_pool_backup(&bdev->pool, tt, &flags);
> +	if (ret > 0) {
> +		tt->page_flags &= ~TTM_TT_FLAG_PRIV_POPULATED;
> +		tt->page_flags |= TTM_TT_FLAG_BACKED_UP;
> +	}
> +
> +	return ret;
> +}
> +
> +int ttm_tt_restore(struct ttm_device *bdev, struct ttm_tt *tt,
> +		   const struct ttm_operation_ctx *ctx)
> +{
> +	int ret = ttm_pool_restore_and_alloc(&bdev->pool, tt, ctx);
> +
> +	if (ret)
> +		return ret;
> +
> +	tt->page_flags &= ~TTM_TT_FLAG_BACKED_UP;
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL(ttm_tt_restore);
> +
>  /**
>   * ttm_tt_swapout - swap out tt object
>   *
> @@ -348,6 +401,7 @@ int ttm_tt_populate(struct ttm_device *bdev,
>  		goto error;
>  
>  	ttm->page_flags |= TTM_TT_FLAG_PRIV_POPULATED;
> +	ttm->page_flags &= ~TTM_TT_FLAG_BACKED_UP;
>  	if (unlikely(ttm->page_flags & TTM_TT_FLAG_SWAPPED)) {
>  		ret = ttm_tt_swapin(ttm);
>  		if (unlikely(ret != 0)) {
> diff --git a/include/drm/ttm/ttm_pool.h b/include/drm/ttm/ttm_pool.h
> index 160d954a261e..54cd34a6e4c0 100644
> --- a/include/drm/ttm/ttm_pool.h
> +++ b/include/drm/ttm/ttm_pool.h
> @@ -33,6 +33,7 @@
>  
>  struct device;
>  struct seq_file;
> +struct ttm_backup_flags;
>  struct ttm_operation_ctx;
>  struct ttm_pool;
>  struct ttm_tt;
> @@ -89,6 +90,13 @@ void ttm_pool_fini(struct ttm_pool *pool);
>  
>  int ttm_pool_debugfs(struct ttm_pool *pool, struct seq_file *m);
>  
> +void ttm_pool_drop_backed_up(struct ttm_tt *tt);
> +
> +long ttm_pool_backup(struct ttm_pool *pool, struct ttm_tt *ttm,
> +		     const struct ttm_backup_flags *flags);
> +int ttm_pool_restore_and_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
> +			       const struct ttm_operation_ctx *ctx);
> +
>  int ttm_pool_mgr_init(unsigned long num_pages);
>  void ttm_pool_mgr_fini(void);
>  
> diff --git a/include/drm/ttm/ttm_tt.h b/include/drm/ttm/ttm_tt.h
> index 991edafdb2dd..c736c01ac2ca 100644
> --- a/include/drm/ttm/ttm_tt.h
> +++ b/include/drm/ttm/ttm_tt.h
> @@ -32,11 +32,13 @@
>  #include <drm/ttm/ttm_caching.h>
>  #include <drm/ttm/ttm_kmap_iter.h>
>  
> +struct ttm_backup;
>  struct ttm_device;
>  struct ttm_tt;
>  struct ttm_resource;
>  struct ttm_buffer_object;
>  struct ttm_operation_ctx;
> +struct ttm_pool_tt_restore;
>  
>  /**
>   * struct ttm_tt - This is a structure holding the pages, caching- and aperture
> @@ -85,17 +87,22 @@ struct ttm_tt {
>  	 * fault handling abuses the DMA api a bit and dma_map_attrs can't be
>  	 * used to assure pgprot always matches.
>  	 *
> +	 * TTM_TT_FLAG_BACKED_UP: TTM internal only. This is set if the
> +	 * struct ttm_tt has been (possibly partially) backed up.
> +	 *
>  	 * TTM_TT_FLAG_PRIV_POPULATED: TTM internal only. DO NOT USE. This is
>  	 * set by TTM after ttm_tt_populate() has successfully returned, and is
>  	 * then unset when TTM calls ttm_tt_unpopulate().
> +	 *
>  	 */
>  #define TTM_TT_FLAG_SWAPPED		BIT(0)
>  #define TTM_TT_FLAG_ZERO_ALLOC		BIT(1)
>  #define TTM_TT_FLAG_EXTERNAL		BIT(2)
>  #define TTM_TT_FLAG_EXTERNAL_MAPPABLE	BIT(3)
>  #define TTM_TT_FLAG_DECRYPTED		BIT(4)
> +#define TTM_TT_FLAG_BACKED_UP	        BIT(5)
>  
> -#define TTM_TT_FLAG_PRIV_POPULATED	BIT(5)
> +#define TTM_TT_FLAG_PRIV_POPULATED	BIT(6)
>  	uint32_t page_flags;
>  	/** @num_pages: Number of pages in the page array. */
>  	uint32_t num_pages;
> @@ -105,11 +112,20 @@ struct ttm_tt {
>  	dma_addr_t *dma_address;
>  	/** @swap_storage: Pointer to shmem struct file for swap storage. */
>  	struct file *swap_storage;
> +	/**
> +	 * @backup: Pointer to backup struct for backed up tts.
> +	 * Could be unified with @swap_storage. Meanwhile, the driver's
> +	 * ttm_tt_create() callback is responsible for assigning
> +	 * this field.
> +	 */
> +	struct ttm_backup *backup;
>  	/**
>  	 * @caching: The current caching state of the pages, see enum
>  	 * ttm_caching.
>  	 */
>  	enum ttm_caching caching;
> +	/** @restore: Partial restoration from backup state. TTM private */
> +	struct ttm_pool_tt_restore *restore;
>  };
>  
>  /**
> @@ -129,9 +145,38 @@ static inline bool ttm_tt_is_populated(struct ttm_tt *tt)
>  	return tt->page_flags & TTM_TT_FLAG_PRIV_POPULATED;
>  }
>  
> +/**
> + * ttm_tt_is_swapped() - Whether the ttm_tt is swapped out or backed up
> + * @tt: The struct ttm_tt.
> + *
> + * Return: true if swapped or backed up, false otherwise.
> + */
>  static inline bool ttm_tt_is_swapped(const struct ttm_tt *tt)
>  {
> -	return tt->page_flags & TTM_TT_FLAG_SWAPPED;
> +	return tt->page_flags & (TTM_TT_FLAG_SWAPPED | TTM_TT_FLAG_BACKED_UP);
> +}
> +
> +/**
> + * ttm_tt_is_backed_up() - Whether the ttm_tt backed up
> + * @tt: The struct ttm_tt.
> + *
> + * Return: true if swapped or backed up, false otherwise.
> + */
> +static inline bool ttm_tt_is_backed_up(const struct ttm_tt *tt)
> +{
> +	return tt->page_flags & TTM_TT_FLAG_BACKED_UP;
> +}
> +
> +/**
> + * ttm_tt_clear_backed_up() - Clear the ttm_tt backed-up status
> + * @tt: The struct ttm_tt.
> + *
> + * Drivers can use this functionto clear the backed-up status,
> + * for example before destroying or re-validating a purged tt.
> + */
> +static inline void ttm_tt_clear_backed_up(struct ttm_tt *tt)
> +{
> +	tt->page_flags &= ~TTM_TT_FLAG_BACKED_UP;
>  }
>  
>  /**
> @@ -235,6 +280,24 @@ void ttm_tt_mgr_init(unsigned long num_pages, unsigned long num_dma32_pages);
>  struct ttm_kmap_iter *ttm_kmap_iter_tt_init(struct ttm_kmap_iter_tt *iter_tt,
>  					    struct ttm_tt *tt);
>  unsigned long ttm_tt_pages_limit(void);
> +
> +/**
> + * struct ttm_backup_flags - Flags to govern backup behaviour.
> + * @purge: Free pages without backing up. Bypass pools.
> + * @writeback: Attempt to copy contents directly to swap space, even
> + * if that means blocking on writes to external memory.
> + */
> +struct ttm_backup_flags {
> +	u32 purge : 1;
> +	u32 writeback : 1;
> +};
> +
> +long ttm_tt_backup(struct ttm_device *bdev, struct ttm_tt *tt,
> +		   const struct ttm_backup_flags flags);
> +
> +int ttm_tt_restore(struct ttm_device *bdev, struct ttm_tt *tt,
> +		   const struct ttm_operation_ctx *ctx);
> +
>  #if IS_ENABLED(CONFIG_AGP)
>  #include <linux/agp_backend.h>
>  
> -- 
> 2.47.1
> 

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

end of thread, other threads:[~2025-01-16  1:56 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-17 14:58 [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Thomas Hellström
2024-12-17 14:58 ` [PATCH v15 1/9] drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini() Thomas Hellström
2024-12-17 14:58 ` [PATCH v15 2/9] drm/ttm: Provide a shmem backup implementation Thomas Hellström
2024-12-17 14:58 ` [PATCH v15 3/9] drm/ttm/pool: Restructure the pool allocation code Thomas Hellström
2025-01-10  9:45   ` Christian König
2025-01-10 17:57   ` Matthew Brost
2024-12-17 14:58 ` [PATCH v15 4/9] drm/ttm/pool, drm/ttm/tt: Provide a helper to shrink pages Thomas Hellström
2025-01-16  1:57   ` Matthew Brost
2024-12-17 14:58 ` [PATCH v15 5/9] drm/ttm: Use fault-injection to test error paths Thomas Hellström
2024-12-17 14:58 ` [PATCH v15 6/9] drm/ttm: Add a macro to perform LRU iteration Thomas Hellström
2024-12-17 14:58 ` [PATCH v15 7/9] drm/ttm: Add helpers for shrinking Thomas Hellström
2024-12-17 14:58 ` [PATCH v15 8/9] drm/xe: Add a shrinker for xe bos Thomas Hellström
2024-12-17 14:58 ` [PATCH v15 9/9] drm/xe: Increase the XE_PL_TT watermark Thomas Hellström
2024-12-17 20:54 ` ✓ CI.Patch_applied: success for TTM shrinker helpers and xe buffer object shrinker (rev16) Patchwork
2024-12-17 20:55 ` ✗ CI.checkpatch: warning " Patchwork
2024-12-17 20:56 ` ✓ CI.KUnit: success " Patchwork
2024-12-17 21:14 ` ✓ CI.Build: " Patchwork
2024-12-17 21:16 ` ✓ CI.Hooks: " Patchwork
2024-12-17 21:18 ` ✗ CI.checksparse: warning " Patchwork
2024-12-17 21:53 ` ✓ Xe.CI.BAT: success " Patchwork
2024-12-18  7:48 ` ✗ Xe.CI.Full: failure " Patchwork
2025-01-10  9:47 ` [PATCH v15 0/9] TTM shrinker helpers and xe buffer object shrinker Christian König
2025-01-10 13:04   ` Thomas Hellström

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).