Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code
@ 2023-10-25  4:05 Matthew Brost
  2023-10-25  4:11 ` [Intel-xe] ✓ CI.Patch_applied: success for " Patchwork
                   ` (7 more replies)
  0 siblings, 8 replies; 13+ messages in thread
From: Matthew Brost @ 2023-10-25  4:05 UTC (permalink / raw)
  To: intel-xe

The largest change is the message interface has been removed from the
DRM scheduler. Xe still needs a message interface so it is implemented
in the Xe driver by adding a Xe scheduler layer.

Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c  |   8 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c   |   3 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_job.c      |   2 +-
 drivers/gpu/drm/etnaviv/etnaviv_sched.c      |   6 +-
 drivers/gpu/drm/lima/lima_sched.c            |   6 +-
 drivers/gpu/drm/msm/adreno/adreno_device.c   |   4 +-
 drivers/gpu/drm/msm/msm_ringbuffer.c         |   5 +-
 drivers/gpu/drm/nouveau/nouveau_sched.c      |   6 +-
 drivers/gpu/drm/panfrost/panfrost_job.c      |   6 +-
 drivers/gpu/drm/scheduler/sched_entity.c     |  97 +---
 drivers/gpu/drm/scheduler/sched_fence.c      |   2 +-
 drivers/gpu/drm/scheduler/sched_main.c       | 556 +++++++++----------
 drivers/gpu/drm/v3d/v3d_sched.c              |  27 +-
 drivers/gpu/drm/xe/Makefile                  |   1 +
 drivers/gpu/drm/xe/xe_exec_queue_types.h     |   3 +
 drivers/gpu/drm/xe/xe_execlist.c             |   5 +-
 drivers/gpu/drm/xe/xe_gpu_scheduler.c        | 101 ++++
 drivers/gpu/drm/xe/xe_gpu_scheduler.h        |  73 +++
 drivers/gpu/drm/xe/xe_gpu_scheduler_types.h  |  58 ++
 drivers/gpu/drm/xe/xe_guc_exec_queue_types.h |   8 +-
 drivers/gpu/drm/xe/xe_guc_submit.c           | 148 +++--
 drivers/gpu/drm/xe/xe_migrate.c              |   2 +-
 drivers/gpu/drm/xe/xe_trace.h                |  13 +-
 include/drm/gpu_scheduler.h                  |  89 +--
 24 files changed, 688 insertions(+), 541 deletions(-)
 create mode 100644 drivers/gpu/drm/xe/xe_gpu_scheduler.c
 create mode 100644 drivers/gpu/drm/xe/xe_gpu_scheduler.h
 create mode 100644 drivers/gpu/drm/xe/xe_gpu_scheduler_types.h

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
index 78623eaeb90d..411187e7aef6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
@@ -1661,7 +1661,7 @@ static int amdgpu_debugfs_test_ib_show(struct seq_file *m, void *unused)
 
 		if (!ring || !ring->sched.ready)
 			continue;
-		drm_sched_run_wq_stop(&ring->sched);
+		drm_sched_wqueue_stop(&ring->sched);
 	}
 
 	seq_puts(m, "run ib test:\n");
@@ -1677,7 +1677,7 @@ static int amdgpu_debugfs_test_ib_show(struct seq_file *m, void *unused)
 
 		if (!ring || !ring->sched.ready)
 			continue;
-		drm_sched_run_wq_start(&ring->sched);
+		drm_sched_wqueue_start(&ring->sched);
 	}
 
 	up_write(&adev->reset_domain->sem);
@@ -1915,7 +1915,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
 		goto pro_end;
 
 	/* stop the scheduler */
-	drm_sched_run_wq_stop(&ring->sched);
+	drm_sched_wqueue_stop(&ring->sched);
 
 	/* preempt the IB */
 	r = amdgpu_ring_preempt_ib(ring);
@@ -1949,7 +1949,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
 
 failure:
 	/* restart the scheduler */
-	drm_sched_run_wq_start(&ring->sched);
+	drm_sched_wqueue_start(&ring->sched);
 
 	up_read(&adev->reset_domain->sem);
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 501a7f71bcb6..950dc8e498f2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2279,11 +2279,10 @@ static int amdgpu_device_init_schedulers(struct amdgpu_device *adev)
 			break;
 		}
 
-		r = drm_sched_init(&ring->sched, &amdgpu_sched_ops, NULL,
+		r = drm_sched_init(&ring->sched, &amdgpu_sched_ops, 1, NULL,
 				   ring->num_hw_submission, 0,
 				   timeout, adev->reset_domain->wq,
 				   ring->sched_score, ring->name,
-				   DRM_SCHED_POLICY_DEFAULT,
 				   adev->dev);
 		if (r) {
 			DRM_ERROR("Failed to create scheduler on ring %s.\n",
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 78476bc75b4e..b3e199c3fd72 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -326,7 +326,7 @@ void amdgpu_job_stop_all_jobs_on_sched(struct drm_gpu_scheduler *sched)
 
 	/* Signal all jobs not yet scheduled */
 	for (i = DRM_SCHED_PRIORITY_COUNT - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
-		struct drm_sched_rq *rq = &sched->sched_rq[i];
+		struct drm_sched_rq *rq = sched->sched_rq[i];
 		spin_lock(&rq->lock);
 		list_for_each_entry(s_entity, &rq->entities, list) {
 			while ((s_job = to_drm_sched_job(spsc_queue_pop(&s_entity->job_queue)))) {
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_sched.c b/drivers/gpu/drm/etnaviv/etnaviv_sched.c
index 3646f995ca94..396334984e4d 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_sched.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_sched.c
@@ -134,11 +134,11 @@ int etnaviv_sched_init(struct etnaviv_gpu *gpu)
 {
 	int ret;
 
-	ret = drm_sched_init(&gpu->sched, &etnaviv_sched_ops, NULL,
+	ret = drm_sched_init(&gpu->sched, &etnaviv_sched_ops,
+			     DRM_SCHED_PRIORITY_COUNT, NULL,
 			     etnaviv_hw_jobs_limit, etnaviv_job_hang_limit,
 			     msecs_to_jiffies(500), NULL, NULL,
-			     dev_name(gpu->dev), DRM_SCHED_POLICY_DEFAULT,
-			     gpu->dev);
+			     dev_name(gpu->dev), gpu->dev);
 	if (ret)
 		return ret;
 
diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_sched.c
index 465d4bf3882b..23a6276f1332 100644
--- a/drivers/gpu/drm/lima/lima_sched.c
+++ b/drivers/gpu/drm/lima/lima_sched.c
@@ -488,11 +488,11 @@ int lima_sched_pipe_init(struct lima_sched_pipe *pipe, const char *name)
 
 	INIT_WORK(&pipe->recover_work, lima_sched_recover_work);
 
-	return drm_sched_init(&pipe->base, &lima_sched_ops, NULL, 1,
+	return drm_sched_init(&pipe->base, &lima_sched_ops,
+			      DRM_SCHED_PRIORITY_COUNT, NULL, 1,
 			      lima_job_hang_limit,
 			      msecs_to_jiffies(timeout), NULL,
-			      NULL, name, DRM_SCHED_POLICY_DEFAULT,
-			      pipe->ldev->dev);
+			      NULL, name, pipe->ldev->dev);
 }
 
 void lima_sched_pipe_fini(struct lima_sched_pipe *pipe)
diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c
index 3891b629248c..223b5af1f93b 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_device.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_device.c
@@ -809,7 +809,7 @@ static void suspend_scheduler(struct msm_gpu *gpu)
 	 */
 	for (i = 0; i < gpu->nr_rings; i++) {
 		struct drm_gpu_scheduler *sched = &gpu->rb[i]->sched;
-		drm_sched_run_wq_stop(sched);
+		drm_sched_wqueue_stop(sched);
 	}
 }
 
@@ -819,7 +819,7 @@ static void resume_scheduler(struct msm_gpu *gpu)
 
 	for (i = 0; i < gpu->nr_rings; i++) {
 		struct drm_gpu_scheduler *sched = &gpu->rb[i]->sched;
-		drm_sched_run_wq_start(sched);
+		drm_sched_wqueue_start(sched);
 	}
 }
 
diff --git a/drivers/gpu/drm/msm/msm_ringbuffer.c b/drivers/gpu/drm/msm/msm_ringbuffer.c
index 813bff7f0c8f..935154979fc2 100644
--- a/drivers/gpu/drm/msm/msm_ringbuffer.c
+++ b/drivers/gpu/drm/msm/msm_ringbuffer.c
@@ -94,10 +94,11 @@ struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int id,
 	 /* currently managing hangcheck ourselves: */
 	sched_timeout = MAX_SCHEDULE_TIMEOUT;
 
-	ret = drm_sched_init(&ring->sched, &msm_sched_ops, NULL,
+	ret = drm_sched_init(&ring->sched, &msm_sched_ops,
+			     DRM_SCHED_PRIORITY_COUNT, NULL,
 			     num_hw_submissions, 0, sched_timeout,
 			     NULL, NULL, to_msm_bo(ring->bo)->name,
-			     DRM_SCHED_POLICY_DEFAULT, gpu->dev->dev);
+			     gpu->dev->dev);
 	if (ret) {
 		goto fail;
 	}
diff --git a/drivers/gpu/drm/nouveau/nouveau_sched.c b/drivers/gpu/drm/nouveau/nouveau_sched.c
index 3cb0033dccf9..82104380d243 100644
--- a/drivers/gpu/drm/nouveau/nouveau_sched.c
+++ b/drivers/gpu/drm/nouveau/nouveau_sched.c
@@ -435,10 +435,10 @@ int nouveau_sched_init(struct nouveau_drm *drm)
 	if (!drm->sched_wq)
 		return -ENOMEM;
 
-	return drm_sched_init(sched, &nouveau_sched_ops, NULL,
+	return drm_sched_init(sched, &nouveau_sched_ops,
+			      DRM_SCHED_PRIORITY_COUNT, NULL,
 			      NOUVEAU_SCHED_HW_SUBMISSIONS, 0, job_hang_limit,
-			      NULL, NULL, "nouveau_sched",
-			      DRM_SCHED_POLICY_DEFAULT, drm->dev->dev);
+			      NULL, NULL, "nouveau_sched", drm->dev->dev);
 }
 
 void nouveau_sched_fini(struct nouveau_drm *drm)
diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c
index ad36bf3a4699..e33d4398da8e 100644
--- a/drivers/gpu/drm/panfrost/panfrost_job.c
+++ b/drivers/gpu/drm/panfrost/panfrost_job.c
@@ -831,12 +831,12 @@ int panfrost_job_init(struct panfrost_device *pfdev)
 		js->queue[j].fence_context = dma_fence_context_alloc(1);
 
 		ret = drm_sched_init(&js->queue[j].sched,
-				     &panfrost_sched_ops, NULL,
+				     &panfrost_sched_ops,
+				     DRM_SCHED_PRIORITY_COUNT, NULL,
 				     nentries, 0,
 				     msecs_to_jiffies(JOB_TIMEOUT_MS),
 				     pfdev->reset.wq,
-				     NULL, "pan_js", DRM_SCHED_POLICY_DEFAULT,
-				     pfdev->dev);
+				     NULL, "pan_js", pfdev->dev);
 		if (ret) {
 			dev_err(pfdev->dev, "Failed to create scheduler: %d.", ret);
 			goto err_sched;
diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
index 1dec97caaba3..409e4256f6e7 100644
--- a/drivers/gpu/drm/scheduler/sched_entity.c
+++ b/drivers/gpu/drm/scheduler/sched_entity.c
@@ -33,20 +33,6 @@
 #define to_drm_sched_job(sched_job)		\
 		container_of((sched_job), struct drm_sched_job, queue_node)
 
-static bool bad_policies(struct drm_gpu_scheduler **sched_list,
-			 unsigned int num_sched_list)
-{
-	enum drm_sched_policy sched_policy = sched_list[0]->sched_policy;
-	unsigned int i;
-
-	/* All schedule policies must match */
-	for (i = 1; i < num_sched_list; ++i)
-		if (sched_policy != sched_list[i]->sched_policy)
-			return true;
-
-	return false;
-}
-
 /**
  * drm_sched_entity_init - Init a context entity used by scheduler when
  * submit to HW ring.
@@ -76,14 +62,12 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
 			  unsigned int num_sched_list,
 			  atomic_t *guilty)
 {
-	if (!(entity && sched_list && (num_sched_list == 0 || sched_list[0])) ||
-	    bad_policies(sched_list, num_sched_list))
+	if (!(entity && sched_list && (num_sched_list == 0 || sched_list[0])))
 		return -EINVAL;
 
 	memset(entity, 0, sizeof(struct drm_sched_entity));
 	INIT_LIST_HEAD(&entity->list);
 	entity->rq = NULL;
-	entity->single_sched = NULL;
 	entity->guilty = guilty;
 	entity->num_sched_list = num_sched_list;
 	entity->priority = priority;
@@ -91,16 +75,19 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
 	RCU_INIT_POINTER(entity->last_scheduled, NULL);
 	RB_CLEAR_NODE(&entity->rb_tree_node);
 
-	if (num_sched_list) {
-		if (sched_list[0]->sched_policy !=
-		    DRM_SCHED_POLICY_SINGLE_ENTITY) {
-			entity->rq = &sched_list[0]->sched_rq[entity->priority];
-		} else {
-			if (num_sched_list != 1 || sched_list[0]->single_entity)
-				return -EINVAL;
-			sched_list[0]->single_entity = entity;
-			entity->single_sched = sched_list[0];
-		}
+	if (!sched_list[0]->sched_rq) {
+		/* Warn drivers not to do this and to fix their DRM
+		 * calling order.
+		 */
+		pr_warn("%s: called with uninitialized scheduler\n", __func__);
+	} else if (num_sched_list) {
+		/* The "priority" of an entity cannot exceed the number
+		 * of run-queues of a scheduler.
+		 */
+		if (entity->priority >= sched_list[0]->num_rqs)
+			entity->priority = max_t(u32, sched_list[0]->num_rqs,
+						 DRM_SCHED_PRIORITY_MIN);
+		entity->rq = sched_list[0]->sched_rq[entity->priority];
 	}
 
 	init_completion(&entity->entity_idle);
@@ -134,8 +121,7 @@ void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
 				    struct drm_gpu_scheduler **sched_list,
 				    unsigned int num_sched_list)
 {
-	WARN_ON(!num_sched_list || !sched_list ||
-		!!entity->single_sched);
+	WARN_ON(!num_sched_list || !sched_list);
 
 	entity->sched_list = sched_list;
 	entity->num_sched_list = num_sched_list;
@@ -242,15 +228,13 @@ static void drm_sched_entity_kill(struct drm_sched_entity *entity)
 {
 	struct drm_sched_job *job;
 	struct dma_fence *prev;
-	bool single_entity = !!entity->single_sched;
 
-	if (!entity->rq && !single_entity)
+	if (!entity->rq)
 		return;
 
 	spin_lock(&entity->rq_lock);
 	entity->stopped = true;
-	if (!single_entity)
-		drm_sched_rq_remove_entity(entity->rq, entity);
+	drm_sched_rq_remove_entity(entity->rq, entity);
 	spin_unlock(&entity->rq_lock);
 
 	/* Make sure this entity is not used by the scheduler at the moment */
@@ -272,20 +256,6 @@ static void drm_sched_entity_kill(struct drm_sched_entity *entity)
 	dma_fence_put(prev);
 }
 
-/**
- * drm_sched_entity_to_scheduler - Schedule entity to GPU scheduler
- * @entity: scheduler entity
- *
- * Returns GPU scheduler for the entity
- */
-struct drm_gpu_scheduler *
-drm_sched_entity_to_scheduler(struct drm_sched_entity *entity)
-{
-	bool single_entity = !!entity->single_sched;
-
-	return single_entity ? entity->single_sched : entity->rq->sched;
-}
-
 /**
  * drm_sched_entity_flush - Flush a context entity
  *
@@ -303,12 +273,11 @@ long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout)
 	struct drm_gpu_scheduler *sched;
 	struct task_struct *last_user;
 	long ret = timeout;
-	bool single_entity = !!entity->single_sched;
 
-	if (!entity->rq && !single_entity)
+	if (!entity->rq)
 		return 0;
 
-	sched = drm_sched_entity_to_scheduler(entity);
+	sched = entity->rq->sched;
 	/**
 	 * The client will not queue more IBs during this fini, consume existing
 	 * queued IBs or discard them on SIGKILL
@@ -401,7 +370,7 @@ static void drm_sched_entity_wakeup(struct dma_fence *f,
 		container_of(cb, struct drm_sched_entity, cb);
 
 	drm_sched_entity_clear_dep(f, cb);
-	drm_sched_wakeup_if_can_queue(drm_sched_entity_to_scheduler(entity));
+	drm_sched_wakeup_if_can_queue(entity->rq->sched);
 }
 
 /**
@@ -415,8 +384,6 @@ static void drm_sched_entity_wakeup(struct dma_fence *f,
 void drm_sched_entity_set_priority(struct drm_sched_entity *entity,
 				   enum drm_sched_priority priority)
 {
-	WARN_ON(!!entity->single_sched);
-
 	spin_lock(&entity->rq_lock);
 	entity->priority = priority;
 	spin_unlock(&entity->rq_lock);
@@ -429,7 +396,7 @@ EXPORT_SYMBOL(drm_sched_entity_set_priority);
  */
 static bool drm_sched_entity_add_dependency_cb(struct drm_sched_entity *entity)
 {
-	struct drm_gpu_scheduler *sched = drm_sched_entity_to_scheduler(entity);
+	struct drm_gpu_scheduler *sched = entity->rq->sched;
 	struct dma_fence *fence = entity->dependency;
 	struct drm_sched_fence *s_fence;
 
@@ -531,8 +498,7 @@ struct drm_sched_job *drm_sched_entity_pop_job(struct drm_sched_entity *entity)
 	 * Update the entity's location in the min heap according to
 	 * the timestamp of the next job, if any.
 	 */
-	if (drm_sched_entity_to_scheduler(entity)->sched_policy ==
-	    DRM_SCHED_POLICY_FIFO) {
+	if (drm_sched_policy == DRM_SCHED_POLICY_FIFO) {
 		struct drm_sched_job *next;
 
 		next = to_drm_sched_job(spsc_queue_peek(&entity->job_queue));
@@ -555,8 +521,6 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
 	struct drm_gpu_scheduler *sched;
 	struct drm_sched_rq *rq;
 
-	WARN_ON(!!entity->single_sched);
-
 	/* single possible engine and already selected */
 	if (!entity->sched_list)
 		return;
@@ -581,7 +545,7 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
 
 	spin_lock(&entity->rq_lock);
 	sched = drm_sched_pick_best(entity->sched_list, entity->num_sched_list);
-	rq = sched ? &sched->sched_rq[entity->priority] : NULL;
+	rq = sched ? sched->sched_rq[entity->priority] : NULL;
 	if (rq != entity->rq) {
 		drm_sched_rq_remove_entity(entity->rq, entity);
 		entity->rq = rq;
@@ -606,13 +570,11 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
 void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
 {
 	struct drm_sched_entity *entity = sched_job->entity;
-	bool single_entity = !!entity->single_sched;
 	bool first;
 	ktime_t submit_ts;
 
 	trace_drm_sched_job(sched_job, entity);
-	if (!single_entity)
-		atomic_inc(entity->rq->sched->score);
+	atomic_inc(entity->rq->sched->score);
 	WRITE_ONCE(entity->last_user, current->group_leader);
 
 	/*
@@ -625,10 +587,6 @@ void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
 
 	/* first job wakes up scheduler */
 	if (first) {
-		struct drm_gpu_scheduler *sched =
-			drm_sched_entity_to_scheduler(entity);
-		bool fifo = sched->sched_policy == DRM_SCHED_POLICY_FIFO;
-
 		/* Add the entity to the run queue */
 		spin_lock(&entity->rq_lock);
 		if (entity->stopped) {
@@ -638,14 +596,13 @@ void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
 			return;
 		}
 
-		if (!single_entity)
-			drm_sched_rq_add_entity(entity->rq, entity);
+		drm_sched_rq_add_entity(entity->rq, entity);
 		spin_unlock(&entity->rq_lock);
 
-		if (fifo)
+		if (drm_sched_policy == DRM_SCHED_POLICY_FIFO)
 			drm_sched_rq_update_fifo(entity, submit_ts);
 
-		drm_sched_wakeup_if_can_queue(sched);
+		drm_sched_wakeup_if_can_queue(entity->rq->sched);
 	}
 }
 EXPORT_SYMBOL(drm_sched_entity_push_job);
diff --git a/drivers/gpu/drm/scheduler/sched_fence.c b/drivers/gpu/drm/scheduler/sched_fence.c
index f6b926f5e188..06cedfe4b486 100644
--- a/drivers/gpu/drm/scheduler/sched_fence.c
+++ b/drivers/gpu/drm/scheduler/sched_fence.c
@@ -225,7 +225,7 @@ void drm_sched_fence_init(struct drm_sched_fence *fence,
 {
 	unsigned seq;
 
-	fence->sched = drm_sched_entity_to_scheduler(entity);
+	fence->sched = entity->rq->sched;
 	seq = atomic_inc_return(&entity->fence_seq);
 	dma_fence_init(&fence->scheduled, &drm_sched_fence_ops_scheduled,
 		       &fence->lock, entity->fence_context, seq);
diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
index 0626aa6f7b70..ebea02526a7a 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -32,8 +32,7 @@
  * backend operations to the scheduler like submitting a job to hardware run queue,
  * returning the dependencies of a job etc.
  *
- * The organisation of the scheduler is the following for scheduling policies
- * DRM_SCHED_POLICY_RR and DRM_SCHED_POLICY_FIFO:
+ * The organisation of the scheduler is the following:
  *
  * 1. Each hw run queue has one scheduler
  * 2. Each scheduler has multiple run queues with different priorities
@@ -42,22 +41,7 @@
  * 4. Entities themselves maintain a queue of jobs that will be scheduled on
  *    the hardware.
  *
- * The organisation of the scheduler is the following for scheduling policy
- * DRM_SCHED_POLICY_SINGLE_ENTITY:
- *
- * 1. One to one relationship between scheduler and entity
- * 2. No priorities implemented per scheduler (single job queue)
- * 3. No run queues in scheduler rather jobs are directly dequeued from entity
- * 4. The entity maintains a queue of jobs that will be scheduled on the
- * hardware
- *
- * The jobs in a entity are always scheduled in the order that they were pushed
- * regardless of scheduling policy.
- *
- * A policy of DRM_SCHED_POLICY_RR or DRM_SCHED_POLICY_FIFO is expected to used
- * when the KMD is scheduling directly on the hardware while a scheduling policy
- * of DRM_SCHED_POLICY_SINGLE_ENTITY is expected to be used when there is a
- * firmware scheduler.
+ * The jobs in a entity are always scheduled in the order that they were pushed.
  *
  * Note that once a job was taken from the entities queue and pushed to the
  * hardware, i.e. the pending queue, the entity must not be referenced anymore
@@ -82,14 +66,14 @@
 #define to_drm_sched_job(sched_job)		\
 		container_of((sched_job), struct drm_sched_job, queue_node)
 
-int default_drm_sched_policy = DRM_SCHED_POLICY_FIFO;
+int drm_sched_policy = DRM_SCHED_POLICY_FIFO;
 
 /**
  * DOC: sched_policy (int)
  * Used to override default entities scheduling policy in a run queue.
  */
-MODULE_PARM_DESC(sched_policy, "Specify the default scheduling policy for entities on a run-queue, " __stringify(DRM_SCHED_POLICY_RR) " = Round Robin, " __stringify(DRM_SCHED_POLICY_FIFO) " = FIFO (default).");
-module_param_named(sched_policy, default_drm_sched_policy, int, 0444);
+MODULE_PARM_DESC(sched_policy, "Specify the scheduling policy for entities on a run-queue, " __stringify(DRM_SCHED_POLICY_RR) " = Round Robin, " __stringify(DRM_SCHED_POLICY_FIFO) " = FIFO (default).");
+module_param_named(sched_policy, drm_sched_policy, int, 0444);
 
 static __always_inline bool drm_sched_entity_compare_before(struct rb_node *a,
 							    const struct rb_node *b)
@@ -112,8 +96,6 @@ static inline void drm_sched_rq_remove_fifo_locked(struct drm_sched_entity *enti
 
 void drm_sched_rq_update_fifo(struct drm_sched_entity *entity, ktime_t ts)
 {
-	WARN_ON(!!entity->single_sched);
-
 	/*
 	 * Both locks need to be grabbed, one to protect from entity->rq change
 	 * for entity from within concurrent drm_sched_entity_select_rq and the
@@ -144,8 +126,6 @@ void drm_sched_rq_update_fifo(struct drm_sched_entity *entity, ktime_t ts)
 static void drm_sched_rq_init(struct drm_gpu_scheduler *sched,
 			      struct drm_sched_rq *rq)
 {
-	WARN_ON(sched->sched_policy == DRM_SCHED_POLICY_SINGLE_ENTITY);
-
 	spin_lock_init(&rq->lock);
 	INIT_LIST_HEAD(&rq->entities);
 	rq->rb_tree_root = RB_ROOT_CACHED;
@@ -164,8 +144,6 @@ static void drm_sched_rq_init(struct drm_gpu_scheduler *sched,
 void drm_sched_rq_add_entity(struct drm_sched_rq *rq,
 			     struct drm_sched_entity *entity)
 {
-	WARN_ON(!!entity->single_sched);
-
 	if (!list_empty(&entity->list))
 		return;
 
@@ -188,8 +166,6 @@ void drm_sched_rq_add_entity(struct drm_sched_rq *rq,
 void drm_sched_rq_remove_entity(struct drm_sched_rq *rq,
 				struct drm_sched_entity *entity)
 {
-	WARN_ON(!!entity->single_sched);
-
 	if (list_empty(&entity->list))
 		return;
 
@@ -201,7 +177,7 @@ void drm_sched_rq_remove_entity(struct drm_sched_rq *rq,
 	if (rq->current_entity == entity)
 		rq->current_entity = NULL;
 
-	if (rq->sched->sched_policy == DRM_SCHED_POLICY_FIFO)
+	if (drm_sched_policy == DRM_SCHED_POLICY_FIFO)
 		drm_sched_rq_remove_fifo_locked(entity);
 
 	spin_unlock(&rq->lock);
@@ -280,50 +256,90 @@ drm_sched_rq_select_entity_fifo(struct drm_sched_rq *rq)
 }
 
 /**
- * drm_sched_run_wq_stop - stop scheduler run worker
- *
- * @sched: scheduler instance to stop run worker
+ * drm_sched_run_job_queue - enqueue scheduler submission
+ * drm_sched_run_job_queue - enqueue run-job work
+ * @sched: scheduler instance
  */
-void drm_sched_run_wq_stop(struct drm_gpu_scheduler *sched)
+static void drm_sched_run_job_queue(struct drm_gpu_scheduler *sched)
 {
-	sched->pause_run_wq = true;
-	smp_wmb();
+	if (!READ_ONCE(sched->pause_submit))
+		queue_work(sched->submit_wq, &sched->work_run_job);
+}
 
-	cancel_work_sync(&sched->work_run);
+/**
+ * drm_sched_can_queue -- Can we queue more to the hardware?
+ * @sched: scheduler instance
+ *
+ * Return true if we can push more jobs to the hw, otherwise false.
+ */
+static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched)
+{
+	return atomic_read(&sched->hw_rq_count) <
+		sched->hw_submission_limit;
 }
-EXPORT_SYMBOL(drm_sched_run_wq_stop);
 
 /**
- * drm_sched_run_wq_start - start scheduler run worker
+ * drm_sched_select_entity - Select next entity to process
  *
- * @sched: scheduler instance to start run worker
+ * @sched: scheduler instance
+ *
+ * Returns the entity to process or NULL if none are found.
  */
-void drm_sched_run_wq_start(struct drm_gpu_scheduler *sched)
+static struct drm_sched_entity *
+drm_sched_select_entity(struct drm_gpu_scheduler *sched)
 {
-	sched->pause_run_wq = false;
-	smp_wmb();
+	struct drm_sched_entity *entity;
+	int i;
+
+	if (!drm_sched_can_queue(sched))
+		return NULL;
 
-	queue_work(sched->run_wq, &sched->work_run);
+	/* Kernel run queue has higher priority than normal run queue*/
+	for (i = sched->num_rqs - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
+		entity = drm_sched_policy == DRM_SCHED_POLICY_FIFO ?
+			drm_sched_rq_select_entity_fifo(sched->sched_rq[i]) :
+			drm_sched_rq_select_entity_rr(sched->sched_rq[i]);
+		if (entity)
+			break;
+	}
+
+	return entity;
 }
-EXPORT_SYMBOL(drm_sched_run_wq_start);
 
 /**
- * drm_sched_run_wq_queue - queue scheduler run worker
- *
- * @sched: scheduler instance to queue run worker
+ * drm_sched_run_job_queue_if_ready - enqueue run-job work if ready
+ * @sched: scheduler instance
+ */
+static void drm_sched_run_job_queue_if_ready(struct drm_gpu_scheduler *sched)
+{
+	if (drm_sched_select_entity(sched))
+		drm_sched_run_job_queue(sched);
+}
+
+/**
+ * drm_sched_free_job_queue - enqueue free-job work
+ * @sched: scheduler instance
  */
-static void drm_sched_run_wq_queue(struct drm_gpu_scheduler *sched)
+static void drm_sched_free_job_queue(struct drm_gpu_scheduler *sched)
 {
-	smp_rmb();
+	if (!READ_ONCE(sched->pause_submit))
+		queue_work(sched->submit_wq, &sched->work_free_job);
+}
 
-	/*
-	 * Try not to schedule work if pause_run_wq set but not the end of world
-	 * if we do as either it will be cancelled by the above
-	 * cancel_work_sync, or drm_sched_main turns into a NOP while
-	 * pause_run_wq is set.
-	 */
-	if (!sched->pause_run_wq)
-		queue_work(sched->run_wq, &sched->work_run);
+/**
+ * drm_sched_free_job_queue_if_done - enqueue free-job work if ready
+ * @sched: scheduler instance
+ */
+static void drm_sched_free_job_queue_if_done(struct drm_gpu_scheduler *sched)
+{
+	struct drm_sched_job *job;
+
+	spin_lock(&sched->job_list_lock);
+	job = list_first_entry_or_null(&sched->pending_list,
+				       struct drm_sched_job, list);
+	if (job && dma_fence_is_signaled(&job->s_fence->finished))
+		drm_sched_free_job_queue(sched);
+	spin_unlock(&sched->job_list_lock);
 }
 
 /**
@@ -345,7 +361,7 @@ static void drm_sched_job_done(struct drm_sched_job *s_job, int result)
 	dma_fence_get(&s_fence->finished);
 	drm_sched_fence_finished(s_fence, result);
 	dma_fence_put(&s_fence->finished);
-	drm_sched_run_wq_queue(sched);
+	drm_sched_free_job_queue(sched);
 }
 
 /**
@@ -369,28 +385,35 @@ static void drm_sched_job_done_cb(struct dma_fence *f, struct dma_fence_cb *cb)
  */
 static void drm_sched_start_timeout(struct drm_gpu_scheduler *sched)
 {
+	lockdep_assert_held(&sched->job_list_lock);
+
 	if (sched->timeout != MAX_SCHEDULE_TIMEOUT &&
 	    !list_empty(&sched->pending_list))
-		queue_delayed_work(sched->timeout_wq, &sched->work_tdr, sched->timeout);
+		mod_delayed_work(sched->timeout_wq, &sched->work_tdr, sched->timeout);
+}
+
+static void drm_sched_start_timeout_unlocked(struct drm_gpu_scheduler *sched)
+{
+	spin_lock(&sched->job_list_lock);
+	drm_sched_start_timeout(sched);
+	spin_unlock(&sched->job_list_lock);
 }
 
 /**
- * drm_sched_set_timeout - set timeout for reset worker
+ * drm_sched_tdr_queue_imm: - immediately start job timeout handler
  *
- * @sched: scheduler instance to set and (re)-start the worker for
- * @timeout: timeout period
+ * @sched: scheduler for which the timeout handling should be started.
  *
- * Set and (re)-start the timeout for the given scheduler.
+ * Start timeout handling immediately for the named scheduler.
  */
-void drm_sched_set_timeout(struct drm_gpu_scheduler *sched, long timeout)
+void drm_sched_tdr_queue_imm(struct drm_gpu_scheduler *sched)
 {
 	spin_lock(&sched->job_list_lock);
-	sched->timeout = timeout;
-	cancel_delayed_work(&sched->work_tdr);
+	sched->timeout = 0;
 	drm_sched_start_timeout(sched);
 	spin_unlock(&sched->job_list_lock);
 }
-EXPORT_SYMBOL(drm_sched_set_timeout);
+EXPORT_SYMBOL(drm_sched_tdr_queue_imm);
 
 /**
  * drm_sched_fault - immediately start timeout handler
@@ -504,11 +527,8 @@ static void drm_sched_job_timedout(struct work_struct *work)
 		spin_unlock(&sched->job_list_lock);
 	}
 
-	if (status != DRM_GPU_SCHED_STAT_ENODEV) {
-		spin_lock(&sched->job_list_lock);
-		drm_sched_start_timeout(sched);
-		spin_unlock(&sched->job_list_lock);
-	}
+	if (status != DRM_GPU_SCHED_STAT_ENODEV)
+		drm_sched_start_timeout_unlocked(sched);
 }
 
 /**
@@ -527,7 +547,7 @@ void drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad)
 {
 	struct drm_sched_job *s_job, *tmp;
 
-	drm_sched_run_wq_stop(sched);
+	drm_sched_wqueue_stop(sched);
 
 	/*
 	 * Reinsert back the bad job here - now it's safe as
@@ -629,18 +649,15 @@ void drm_sched_start(struct drm_gpu_scheduler *sched, bool full_recovery)
 				drm_sched_job_done(s_job, fence->error);
 			else if (r)
 				DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n",
-					  r);
+					      r);
 		} else
 			drm_sched_job_done(s_job, -ECANCELED);
 	}
 
-	drm_sched_run_wq_start(sched);
+	if (full_recovery)
+		drm_sched_start_timeout_unlocked(sched);
 
-	if (full_recovery) {
-		spin_lock(&sched->job_list_lock);
-		drm_sched_start_timeout(sched);
-		spin_unlock(&sched->job_list_lock);
-	}
+	drm_sched_wqueue_start(sched);
 }
 EXPORT_SYMBOL(drm_sched_start);
 
@@ -720,8 +737,14 @@ int drm_sched_job_init(struct drm_sched_job *job,
 		       struct drm_sched_entity *entity,
 		       void *owner)
 {
-	if (!entity->rq && !entity->single_sched)
+	if (!entity->rq) {
+		/* This will most likely be followed by missing frames
+		 * or worse--a blank screen--leave a trail in the
+		 * logs, so this can be debugged easier.
+		 */
+		drm_err(job->sched, "%s: entity has no rq!\n", __func__);
 		return -ENOENT;
+	}
 
 	job->entity = entity;
 	job->s_fence = drm_sched_fence_alloc(entity, owner);
@@ -753,16 +776,13 @@ void drm_sched_job_arm(struct drm_sched_job *job)
 {
 	struct drm_gpu_scheduler *sched;
 	struct drm_sched_entity *entity = job->entity;
-	bool single_entity = !!entity->single_sched;
 
 	BUG_ON(!entity);
-	if (!single_entity)
-		drm_sched_entity_select_rq(entity);
-	sched = drm_sched_entity_to_scheduler(entity);
+	drm_sched_entity_select_rq(entity);
+	sched = entity->rq->sched;
 
 	job->sched = sched;
-	if (!single_entity)
-		job->s_priority = entity->rq - sched->sched_rq;
+	job->s_priority = entity->priority;
 	job->id = atomic64_inc_return(&sched->job_id_count);
 
 	drm_sched_fence_init(job->s_fence, job->entity);
@@ -790,13 +810,6 @@ int drm_sched_job_add_dependency(struct drm_sched_job *job,
 	if (!fence)
 		return 0;
 
-	/* if it's a fence from us it's guaranteed to be earlier */
-	if (fence->context == job->entity->fence_context ||
-	    fence->context == job->entity->fence_context + 1) {
-		dma_fence_put(fence);
-		return 0;
-	}
-
 	/* Deduplicate if we already depend on a fence from the same context.
 	 * This lets the size of the array of deps scale with the number of
 	 * engines involved, rather than the number of BOs.
@@ -945,18 +958,6 @@ void drm_sched_job_cleanup(struct drm_sched_job *job)
 }
 EXPORT_SYMBOL(drm_sched_job_cleanup);
 
-/**
- * drm_sched_can_queue -- Can we queue more to the hardware?
- * @sched: scheduler instance
- *
- * Return true if we can push more jobs to the hw, otherwise false.
- */
-static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched)
-{
-	return atomic_read(&sched->hw_rq_count) <
-		sched->hw_submission_limit;
-}
-
 /**
  * drm_sched_wakeup_if_can_queue - Wake up the scheduler
  * @sched: scheduler instance
@@ -966,42 +967,7 @@ static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched)
 void drm_sched_wakeup_if_can_queue(struct drm_gpu_scheduler *sched)
 {
 	if (drm_sched_can_queue(sched))
-		drm_sched_run_wq_queue(sched);
-}
-
-/**
- * drm_sched_select_entity - Select next entity to process
- *
- * @sched: scheduler instance
- *
- * Returns the entity to process or NULL if none are found.
- */
-static struct drm_sched_entity *
-drm_sched_select_entity(struct drm_gpu_scheduler *sched)
-{
-	struct drm_sched_entity *entity;
-	int i;
-
-	if (!drm_sched_can_queue(sched))
-		return NULL;
-
-	if (sched->single_entity) {
-		if (drm_sched_entity_is_ready(sched->single_entity))
-			return sched->single_entity;
-
-		return NULL;
-	}
-
-	/* Kernel run queue has higher priority than normal run queue*/
-	for (i = DRM_SCHED_PRIORITY_COUNT - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
-		entity = sched->sched_policy == DRM_SCHED_POLICY_FIFO ?
-			drm_sched_rq_select_entity_fifo(&sched->sched_rq[i]) :
-			drm_sched_rq_select_entity_rr(&sched->sched_rq[i]);
-		if (entity)
-			break;
-	}
-
-	return entity;
+		drm_sched_run_job_queue(sched);
 }
 
 /**
@@ -1033,8 +999,10 @@ drm_sched_get_cleanup_job(struct drm_gpu_scheduler *sched)
 						typeof(*next), list);
 
 		if (next) {
-			next->s_fence->scheduled.timestamp =
-				job->s_fence->finished.timestamp;
+			if (test_bit(DMA_FENCE_FLAG_TIMESTAMP_BIT,
+				     &next->s_fence->scheduled.flags))
+				next->s_fence->scheduled.timestamp =
+					job->s_fence->scheduled.timestamp;
 			/* start TO timer for next job */
 			drm_sched_start_timeout(sched);
 		}
@@ -1084,125 +1052,83 @@ drm_sched_pick_best(struct drm_gpu_scheduler **sched_list,
 EXPORT_SYMBOL(drm_sched_pick_best);
 
 /**
- * drm_sched_add_msg - add scheduler message
+ * drm_sched_free_job_work - worker to call free_job
  *
- * @sched: scheduler instance
- * @msg: message to be added
- *
- * Can and will pass an jobs waiting on dependencies or in a runnable queue.
- * Messages processing will stop if schedule run wq is stopped and resume when
- * run wq is started.
+ * @w: free job work
  */
-void drm_sched_add_msg(struct drm_gpu_scheduler *sched,
-		       struct drm_sched_msg *msg)
+static void drm_sched_free_job_work(struct work_struct *w)
 {
-	spin_lock(&sched->job_list_lock);
-	list_add_tail(&msg->link, &sched->msgs);
-	spin_unlock(&sched->job_list_lock);
+	struct drm_gpu_scheduler *sched =
+		container_of(w, struct drm_gpu_scheduler, work_free_job);
+	struct drm_sched_job *cleanup_job;
 
-	/*
-	 * Same as above in drm_sched_run_wq_queue, try to kick worker if
-	 * paused, harmless if this races
-	 */
-	if (!sched->pause_run_wq)
-		queue_work(sched->run_wq, &sched->work_run);
-}
-EXPORT_SYMBOL(drm_sched_add_msg);
+	if (READ_ONCE(sched->pause_submit))
+		return;
 
-/**
- * drm_sched_get_msg - get scheduler message
- *
- * @sched: scheduler instance
- *
- * Returns NULL or message
- */
-static struct drm_sched_msg *
-drm_sched_get_msg(struct drm_gpu_scheduler *sched)
-{
-	struct drm_sched_msg *msg;
+	cleanup_job = drm_sched_get_cleanup_job(sched);
+	if (cleanup_job) {
+		sched->ops->free_job(cleanup_job);
 
-	spin_lock(&sched->job_list_lock);
-	msg = list_first_entry_or_null(&sched->msgs,
-				       struct drm_sched_msg, link);
-	if (msg)
-		list_del(&msg->link);
-	spin_unlock(&sched->job_list_lock);
-
-	return msg;
+		drm_sched_free_job_queue_if_done(sched);
+		drm_sched_run_job_queue_if_ready(sched);
+	}
 }
 
 /**
- * drm_sched_main - main scheduler thread
+ * drm_sched_run_job_work - worker to call run_job
  *
- * @param: scheduler instance
+ * @w: run job work
  */
-static void drm_sched_main(struct work_struct *w)
+static void drm_sched_run_job_work(struct work_struct *w)
 {
 	struct drm_gpu_scheduler *sched =
-		container_of(w, struct drm_gpu_scheduler, work_run);
+		container_of(w, struct drm_gpu_scheduler, work_run_job);
+	struct drm_sched_entity *entity;
+	struct dma_fence *fence;
+	struct drm_sched_fence *s_fence;
+	struct drm_sched_job *sched_job;
 	int r;
 
-	while (!READ_ONCE(sched->pause_run_wq)) {
-		struct drm_sched_entity *entity;
-		struct drm_sched_msg *msg;
-		struct drm_sched_fence *s_fence;
-		struct drm_sched_job *sched_job;
-		struct dma_fence *fence;
-		struct drm_sched_job *cleanup_job;
-
-		cleanup_job = drm_sched_get_cleanup_job(sched);
-		entity = drm_sched_select_entity(sched);
-		msg = drm_sched_get_msg(sched);
-
-		if (cleanup_job)
-			sched->ops->free_job(cleanup_job);
-
-		if (msg)
-			sched->ops->process_msg(msg);
-
-		if (!entity) {
-			if (!cleanup_job && !msg)
-				break;
-			continue;
-		}
-
-		sched_job = drm_sched_entity_pop_job(entity);
+	if (READ_ONCE(sched->pause_submit))
+		return;
 
-		if (!sched_job) {
-			complete_all(&entity->entity_idle);
-			if (!cleanup_job && !msg)
-				break;
-			continue;
-		}
+	entity = drm_sched_select_entity(sched);
+	if (!entity)
+		return;
 
-		s_fence = sched_job->s_fence;
+	sched_job = drm_sched_entity_pop_job(entity);
+	if (!sched_job) {
+		complete_all(&entity->entity_idle);
+		return;	/* No more work */
+	}
 
-		atomic_inc(&sched->hw_rq_count);
+	s_fence = sched_job->s_fence;
 
-		trace_drm_run_job(sched_job, entity);
-		fence = sched->ops->run_job(sched_job);
-		drm_sched_job_begin(sched_job);
-		complete_all(&entity->entity_idle);
-		drm_sched_fence_scheduled(s_fence, fence);
+	atomic_inc(&sched->hw_rq_count);
+	drm_sched_job_begin(sched_job);
 
-		if (!IS_ERR_OR_NULL(fence)) {
-			/* Drop for original kref_init of the fence */
-			dma_fence_put(fence);
+	trace_drm_run_job(sched_job, entity);
+	fence = sched->ops->run_job(sched_job);
+	complete_all(&entity->entity_idle);
+	drm_sched_fence_scheduled(s_fence, fence);
 
-			r = dma_fence_add_callback(fence, &sched_job->cb,
-						   drm_sched_job_done_cb);
-			if (r == -ENOENT)
-				drm_sched_job_done(sched_job, fence->error);
-			else if (r)
-				DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n",
-					  r);
-		} else {
-			drm_sched_job_done(sched_job, IS_ERR(fence) ?
-					   PTR_ERR(fence) : 0);
-		}
+	if (!IS_ERR_OR_NULL(fence)) {
+		/* Drop for original kref_init of the fence */
+		dma_fence_put(fence);
 
-		wake_up(&sched->job_scheduled);
+		r = dma_fence_add_callback(fence, &sched_job->cb,
+					   drm_sched_job_done_cb);
+		if (r == -ENOENT)
+			drm_sched_job_done(sched_job, fence->error);
+		else if (r)
+			DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n", r);
+	} else {
+		drm_sched_job_done(sched_job, IS_ERR(fence) ?
+				   PTR_ERR(fence) : 0);
 	}
+
+	wake_up(&sched->job_scheduled);
+	drm_sched_run_job_queue_if_ready(sched);
 }
 
 /**
@@ -1210,7 +1136,9 @@ static void drm_sched_main(struct work_struct *w)
  *
  * @sched: scheduler instance
  * @ops: backend operations for this scheduler
- * @run_wq: workqueue to use for run work. If NULL, the system_wq is used
+ * @submit_wq: workqueue to use for submission. If NULL, an ordered wq is
+ *	       allocated and used
+ * @num_rqs: number of runqueues, one for each priority, up to DRM_SCHED_PRIORITY_COUNT
  * @hw_submission: number of hw submissions that can be in flight
  * @hang_limit: number of times to allow a job to hang before dropping it
  * @timeout: timeout value in jiffies for the scheduler
@@ -1218,57 +1146,89 @@ static void drm_sched_main(struct work_struct *w)
  *		used
  * @score: optional score atomic shared with other schedulers
  * @name: name used for debugging
- * @sched_policy: schedule policy
  * @dev: target &struct device
  *
  * Return 0 on success, otherwise error code.
  */
 int drm_sched_init(struct drm_gpu_scheduler *sched,
 		   const struct drm_sched_backend_ops *ops,
-		   struct workqueue_struct *run_wq,
-		   unsigned hw_submission, unsigned hang_limit,
+		   struct workqueue_struct *submit_wq,
+		   u32 num_rqs, unsigned hw_submission, unsigned hang_limit,
 		   long timeout, struct workqueue_struct *timeout_wq,
-		   atomic_t *score, const char *name,
-		   enum drm_sched_policy sched_policy,
-		   struct device *dev)
+		   atomic_t *score, const char *name, struct device *dev)
 {
-	int i;
-
-	if (sched_policy >= DRM_SCHED_POLICY_COUNT)
-		return -EINVAL;
+	int i, ret;
 
 	sched->ops = ops;
-	sched->single_entity = NULL;
 	sched->hw_submission_limit = hw_submission;
 	sched->name = name;
-	sched->run_wq = run_wq ? : system_wq;
+	if (submit_wq) {
+		sched->submit_wq = submit_wq;
+		sched->own_submit_wq = false;
+	} else {
+		sched->submit_wq = alloc_ordered_workqueue(name, 0);
+		if (!sched->submit_wq)
+			return -ENOMEM;
+
+		sched->own_submit_wq = true;
+	}
 	sched->timeout = timeout;
 	sched->timeout_wq = timeout_wq ? : system_wq;
 	sched->hang_limit = hang_limit;
 	sched->score = score ? score : &sched->_score;
 	sched->dev = dev;
-	if (sched_policy == DRM_SCHED_POLICY_DEFAULT)
-		sched->sched_policy = default_drm_sched_policy;
-	else
-		sched->sched_policy = sched_policy;
-	for (i = DRM_SCHED_PRIORITY_MIN; sched_policy !=
-	     DRM_SCHED_POLICY_SINGLE_ENTITY && i < DRM_SCHED_PRIORITY_COUNT;
-	     i++)
-		drm_sched_rq_init(sched, &sched->sched_rq[i]);
+
+	if (num_rqs > DRM_SCHED_PRIORITY_COUNT) {
+		/* This is a gross violation--tell drivers what the  problem is.
+		 */
+		drm_err(sched, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
+			__func__);
+		return -EINVAL;
+	} else if (sched->sched_rq) {
+		/* Not an error, but warn anyway so drivers can
+		 * fine-tune their DRM calling order, and return all
+		 * is good.
+		 */
+		drm_warn(sched, "%s: scheduler already initialized!\n", __func__);
+		return 0;
+	}
+
+	sched->sched_rq = kmalloc_array(num_rqs, sizeof(*sched->sched_rq),
+					GFP_KERNEL | __GFP_ZERO);
+	if (!sched->sched_rq) {
+		drm_err(sched, "%s: out of memory for sched_rq\n", __func__);
+		return -ENOMEM;
+	}
+	sched->num_rqs = num_rqs;
+	ret = -ENOMEM;
+	for (i = DRM_SCHED_PRIORITY_MIN; i < sched->num_rqs; i++) {
+		sched->sched_rq[i] = kzalloc(sizeof(*sched->sched_rq[i]), GFP_KERNEL);
+		if (!sched->sched_rq[i])
+			goto Out_unroll;
+		drm_sched_rq_init(sched, sched->sched_rq[i]);
+	}
 
 	init_waitqueue_head(&sched->job_scheduled);
 	INIT_LIST_HEAD(&sched->pending_list);
-	INIT_LIST_HEAD(&sched->msgs);
 	spin_lock_init(&sched->job_list_lock);
 	atomic_set(&sched->hw_rq_count, 0);
 	INIT_DELAYED_WORK(&sched->work_tdr, drm_sched_job_timedout);
-	INIT_WORK(&sched->work_run, drm_sched_main);
+	INIT_WORK(&sched->work_run_job, drm_sched_run_job_work);
+	INIT_WORK(&sched->work_free_job, drm_sched_free_job_work);
 	atomic_set(&sched->_score, 0);
 	atomic64_set(&sched->job_id_count, 0);
-	sched->pause_run_wq = false;
+	sched->pause_submit = false;
 
 	sched->ready = true;
 	return 0;
+
+Out_unroll:
+	for (--i ; i >= DRM_SCHED_PRIORITY_MIN; i--)
+		kfree(sched->sched_rq[i]);
+	kfree(sched->sched_rq);
+	sched->sched_rq = NULL;
+	drm_err(sched, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
+	return ret;
 }
 EXPORT_SYMBOL(drm_sched_init);
 
@@ -1284,18 +1244,10 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched)
 	struct drm_sched_entity *s_entity;
 	int i;
 
-	drm_sched_run_wq_stop(sched);
+	drm_sched_wqueue_stop(sched);
 
-	if (sched->single_entity) {
-		spin_lock(&sched->single_entity->rq_lock);
-		sched->single_entity->stopped = true;
-		spin_unlock(&sched->single_entity->rq_lock);
-	}
-
-	for (i = DRM_SCHED_PRIORITY_COUNT - 1; sched->sched_policy !=
-	     DRM_SCHED_POLICY_SINGLE_ENTITY && i >= DRM_SCHED_PRIORITY_MIN;
-	     i--) {
-		struct drm_sched_rq *rq = &sched->sched_rq[i];
+	for (i = sched->num_rqs - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
+		struct drm_sched_rq *rq = sched->sched_rq[i];
 
 		spin_lock(&rq->lock);
 		list_for_each_entry(s_entity, &rq->entities, list)
@@ -1306,7 +1258,7 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched)
 			 */
 			s_entity->stopped = true;
 		spin_unlock(&rq->lock);
-
+		kfree(sched->sched_rq[i]);
 	}
 
 	/* Wakeup everyone stuck in drm_sched_entity_flush for this scheduler */
@@ -1315,7 +1267,11 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched)
 	/* Confirm no work left behind accessing device structures */
 	cancel_delayed_work_sync(&sched->work_tdr);
 
+	if (sched->own_submit_wq)
+		destroy_workqueue(sched->submit_wq);
 	sched->ready = false;
+	kfree(sched->sched_rq);
+	sched->sched_rq = NULL;
 }
 EXPORT_SYMBOL(drm_sched_fini);
 
@@ -1335,8 +1291,6 @@ void drm_sched_increase_karma(struct drm_sched_job *bad)
 	struct drm_sched_entity *entity;
 	struct drm_gpu_scheduler *sched = bad->sched;
 
-	WARN_ON(sched->sched_policy == DRM_SCHED_POLICY_SINGLE_ENTITY);
-
 	/* don't change @bad's karma if it's from KERNEL RQ,
 	 * because sometimes GPU hang would cause kernel jobs (like VM updating jobs)
 	 * corrupt but keep in mind that kernel jobs always considered good.
@@ -1344,9 +1298,10 @@ void drm_sched_increase_karma(struct drm_sched_job *bad)
 	if (bad->s_priority != DRM_SCHED_PRIORITY_KERNEL) {
 		atomic_inc(&bad->karma);
 
-		for (i = DRM_SCHED_PRIORITY_MIN; i < DRM_SCHED_PRIORITY_KERNEL;
+		for (i = DRM_SCHED_PRIORITY_MIN;
+		     i < min_t(typeof(sched->num_rqs), sched->num_rqs, DRM_SCHED_PRIORITY_KERNEL);
 		     i++) {
-			struct drm_sched_rq *rq = &sched->sched_rq[i];
+			struct drm_sched_rq *rq = sched->sched_rq[i];
 
 			spin_lock(&rq->lock);
 			list_for_each_entry_safe(entity, tmp, &rq->entities, list) {
@@ -1364,3 +1319,42 @@ void drm_sched_increase_karma(struct drm_sched_job *bad)
 	}
 }
 EXPORT_SYMBOL(drm_sched_increase_karma);
+
+/**
+ * drm_sched_wqueue_ready - Is the scheduler ready for submission
+ *
+ * @sched: scheduler instance
+ *
+ * Returns true if submission is ready
+ */
+bool drm_sched_wqueue_ready(struct drm_gpu_scheduler *sched)
+{
+	return sched->ready;
+}
+EXPORT_SYMBOL(drm_sched_wqueue_ready);
+
+/**
+ * drm_sched_wqueue_stop - stop scheduler submission
+ *
+ * @sched: scheduler instance
+ */
+void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched)
+{
+	WRITE_ONCE(sched->pause_submit, true);
+	cancel_work_sync(&sched->work_run_job);
+	cancel_work_sync(&sched->work_free_job);
+}
+EXPORT_SYMBOL(drm_sched_wqueue_stop);
+
+/**
+ * drm_sched_wqueue_start - start scheduler submission
+ *
+ * @sched: scheduler instance
+ */
+void drm_sched_wqueue_start(struct drm_gpu_scheduler *sched)
+{
+	WRITE_ONCE(sched->pause_submit, false);
+	queue_work(sched->submit_wq, &sched->work_run_job);
+	queue_work(sched->submit_wq, &sched->work_free_job);
+}
+EXPORT_SYMBOL(drm_sched_wqueue_start);
diff --git a/drivers/gpu/drm/v3d/v3d_sched.c b/drivers/gpu/drm/v3d/v3d_sched.c
index 5e3fe77fa991..ce68f170f18d 100644
--- a/drivers/gpu/drm/v3d/v3d_sched.c
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
@@ -388,48 +388,45 @@ v3d_sched_init(struct v3d_dev *v3d)
 	int ret;
 
 	ret = drm_sched_init(&v3d->queue[V3D_BIN].sched,
-			     &v3d_bin_sched_ops, NULL,
+			     &v3d_bin_sched_ops, DRM_SCHED_PRIORITY_COUNT, NULL,
 			     hw_jobs_limit, job_hang_limit,
 			     msecs_to_jiffies(hang_limit_ms), NULL,
-			     NULL, "v3d_bin", DRM_SCHED_POLICY_DEFAULT,
-			     v3d->drm.dev);
+			     NULL, "v3d_bin", v3d->drm.dev);
 	if (ret)
 		return ret;
 
 	ret = drm_sched_init(&v3d->queue[V3D_RENDER].sched,
-			     &v3d_render_sched_ops, NULL,
+			     &v3d_render_sched_ops, DRM_SCHED_PRIORITY_COUNT,
 			     hw_jobs_limit, job_hang_limit,
 			     msecs_to_jiffies(hang_limit_ms), NULL,
-			     ULL, "v3d_render", DRM_SCHED_POLICY_DEFAULT,
-			     v3d->drm.dev);
+			     ULL, "v3d_render", v3d->drm.dev);
 	if (ret)
 		goto fail;
 
 	ret = drm_sched_init(&v3d->queue[V3D_TFU].sched,
-			     &v3d_tfu_sched_ops, NULL,
+			     &v3d_tfu_sched_ops, DRM_SCHED_PRIORITY_COUNT, NULL,
 			     hw_jobs_limit, job_hang_limit,
 			     msecs_to_jiffies(hang_limit_ms), NULL,
-			     NULL, "v3d_tfu", DRM_SCHED_POLICY_DEFAULT,
-			     v3d->drm.dev);
+			     NULL, "v3d_tfu", v3d->drm.dev);
 	if (ret)
 		goto fail;
 
 	if (v3d_has_csd(v3d)) {
 		ret = drm_sched_init(&v3d->queue[V3D_CSD].sched,
-				     &v3d_csd_sched_ops, NULL,
+				     &v3d_csd_sched_ops,
+				     DRM_SCHED_PRIORITY_COUNT, NULL,
 				     hw_jobs_limit, job_hang_limit,
 				     msecs_to_jiffies(hang_limit_ms), NULL,
-				     NULL, "v3d_csd", DRM_SCHED_POLICY_DEFAULT,
-				     v3d->drm.dev);
+				     NULL, "v3d_csd", v3d->drm.dev);
 		if (ret)
 			goto fail;
 
 		ret = drm_sched_init(&v3d->queue[V3D_CACHE_CLEAN].sched,
-				     &v3d_cache_clean_sched_ops, NULL,
+				     &v3d_cache_clean_sched_ops,
+				     DRM_SCHED_PRIORITY_COUNT, NULL,
 				     hw_jobs_limit, job_hang_limit,
 				     msecs_to_jiffies(hang_limit_ms), NULL,
-				     NULL, "v3d_cache_clean",
-				     DRM_SCHED_POLICY_DEFAULT, v3d->drm.dev);
+				     NULL, "v3d_cache_clean", v3d->drm.dev);
 		if (ret)
 			goto fail;
 	}
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index cee57681732d..e40757e1b266 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -57,6 +57,7 @@ xe-y += xe_bb.o \
 	xe_exec_queue.o \
 	xe_force_wake.o \
 	xe_ggtt.o \
+	xe_gpu_scheduler.o \
 	xe_gt.o \
 	xe_gt_clock.o \
 	xe_gt_debugfs.o \
diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h b/drivers/gpu/drm/xe/xe_exec_queue_types.h
index ecd761177567..5ba47a5cfdbd 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
+++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
@@ -10,6 +10,7 @@
 
 #include <drm/gpu_scheduler.h>
 
+#include "xe_gpu_scheduler_types.h"
 #include "xe_hw_engine_types.h"
 #include "xe_hw_fence_types.h"
 #include "xe_lrc_types.h"
@@ -41,6 +42,8 @@ struct xe_exec_queue {
 	struct xe_vm *vm;
 	/** @class: class of this exec queue */
 	enum xe_engine_class class;
+	/** @priority: priority of this exec queue */
+	enum xe_sched_priority priority;
 	/**
 	 * @logical_mask: logical mask of where job submitted to exec queue can run
 	 */
diff --git a/drivers/gpu/drm/xe/xe_execlist.c b/drivers/gpu/drm/xe/xe_execlist.c
index 811b81c39002..5dd5cb4d1c1b 100644
--- a/drivers/gpu/drm/xe/xe_execlist.c
+++ b/drivers/gpu/drm/xe/xe_execlist.c
@@ -333,17 +333,16 @@ static int execlist_exec_queue_init(struct xe_exec_queue *q)
 
 	exl->q = q;
 
-	err = drm_sched_init(&exl->sched, &drm_sched_ops, NULL,
+	err = drm_sched_init(&exl->sched, &drm_sched_ops, NULL, 1,
 			     q->lrc[0].ring.size / MAX_JOB_SIZE_BYTES,
 			     XE_SCHED_HANG_LIMIT, XE_SCHED_JOB_TIMEOUT,
 			     NULL, NULL, q->hwe->name,
-			     DRM_SCHED_POLICY_SINGLE_ENTITY,
 			     gt_to_xe(q->gt)->drm.dev);
 	if (err)
 		goto err_free;
 
 	sched = &exl->sched;
-	err = drm_sched_entity_init(&exl->entity, DRM_SCHED_PRIORITY_NORMAL,
+	err = drm_sched_entity_init(&exl->entity, DRM_SCHED_PRIORITY_MIN,
 				    &sched, 1, NULL);
 	if (err)
 		goto err_sched;
diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler.c b/drivers/gpu/drm/xe/xe_gpu_scheduler.c
new file mode 100644
index 000000000000..e4ad1d6ce1d5
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_gpu_scheduler.c
@@ -0,0 +1,101 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#include "xe_gpu_scheduler.h"
+
+static void xe_sched_process_msg_queue(struct xe_gpu_scheduler *sched)
+{
+	if (!READ_ONCE(sched->base.pause_submit))
+		queue_work(sched->base.submit_wq, &sched->work_process_msg);
+}
+
+static void xe_sched_process_msg_queue_if_ready(struct xe_gpu_scheduler *sched)
+{
+	struct xe_sched_msg *msg;
+
+	spin_lock(&sched->base.job_list_lock);
+	msg = list_first_entry_or_null(&sched->msgs, struct xe_sched_msg, link);
+	if (msg)
+		xe_sched_process_msg_queue(sched);
+	spin_unlock(&sched->base.job_list_lock);
+}
+
+static struct xe_sched_msg *
+xe_sched_get_msg(struct xe_gpu_scheduler *sched)
+{
+	struct xe_sched_msg *msg;
+
+	spin_lock(&sched->base.job_list_lock);
+	msg = list_first_entry_or_null(&sched->msgs,
+				       struct xe_sched_msg, link);
+	if (msg)
+		list_del(&msg->link);
+	spin_unlock(&sched->base.job_list_lock);
+
+	return msg;
+}
+
+static void xe_sched_process_msg_work(struct work_struct *w)
+{
+	struct xe_gpu_scheduler *sched =
+		container_of(w, struct xe_gpu_scheduler, work_process_msg);
+	struct xe_sched_msg *msg;
+
+	if (READ_ONCE(sched->base.pause_submit))
+		return;
+
+	msg = xe_sched_get_msg(sched);
+	if (msg) {
+		sched->ops->process_msg(msg);
+
+		xe_sched_process_msg_queue_if_ready(sched);
+	}
+}
+
+int xe_sched_init(struct xe_gpu_scheduler *sched,
+		  const struct drm_sched_backend_ops *ops,
+		  const struct xe_sched_backend_ops *xe_ops,
+		  struct workqueue_struct *submit_wq,
+		  uint32_t hw_submission, unsigned hang_limit,
+		  long timeout, struct workqueue_struct *timeout_wq,
+		  atomic_t *score, const char *name,
+		  struct device *dev)
+{
+	sched->ops = xe_ops;
+	INIT_LIST_HEAD(&sched->msgs);
+	INIT_WORK(&sched->work_process_msg, xe_sched_process_msg_work);
+
+	return drm_sched_init(&sched->base, ops, submit_wq, 1, hw_submission,
+			      hang_limit, timeout, timeout_wq, score, name,
+			      dev);
+}
+
+void xe_sched_fini(struct xe_gpu_scheduler *sched)
+{
+	xe_sched_submission_stop(sched);
+	drm_sched_fini(&sched->base);
+}
+
+void xe_sched_submission_start(struct xe_gpu_scheduler *sched)
+{
+	drm_sched_wqueue_start(&sched->base);
+	queue_work(sched->base.submit_wq, &sched->work_process_msg);
+}
+
+void xe_sched_submission_stop(struct xe_gpu_scheduler *sched)
+{
+	drm_sched_wqueue_stop(&sched->base);
+	cancel_work_sync(&sched->work_process_msg);
+}
+
+void xe_sched_add_msg(struct xe_gpu_scheduler *sched,
+		      struct xe_sched_msg *msg)
+{
+	spin_lock(&sched->base.job_list_lock);
+	list_add_tail(&msg->link, &sched->msgs);
+	spin_unlock(&sched->base.job_list_lock);
+
+	xe_sched_process_msg_queue(sched);
+}
diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler.h b/drivers/gpu/drm/xe/xe_gpu_scheduler.h
new file mode 100644
index 000000000000..ea785bcd3eb2
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_gpu_scheduler.h
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_GPU_SCHEDULER_H_
+#define _XE_GPU_SCHEDULER_H_
+
+#include "xe_gpu_scheduler_types.h"
+#include "xe_sched_job_types.h"
+
+int xe_sched_init(struct xe_gpu_scheduler *sched,
+		  const struct drm_sched_backend_ops *ops,
+		  const struct xe_sched_backend_ops *xe_ops,
+		  struct workqueue_struct *submit_wq,
+		  uint32_t hw_submission, unsigned hang_limit,
+		  long timeout, struct workqueue_struct *timeout_wq,
+		  atomic_t *score, const char *name,
+		  struct device *dev);
+void xe_sched_fini(struct xe_gpu_scheduler *sched);
+
+void xe_sched_submission_start(struct xe_gpu_scheduler *sched);
+void xe_sched_submission_stop(struct xe_gpu_scheduler *sched);
+
+void xe_sched_add_msg(struct xe_gpu_scheduler *sched,
+		      struct xe_sched_msg *msg);
+
+static inline void xe_sched_stop(struct xe_gpu_scheduler *sched)
+{
+	drm_sched_stop(&sched->base, NULL);
+}
+
+static inline void xe_sched_tdr_queue_imm(struct xe_gpu_scheduler *sched)
+{
+	drm_sched_tdr_queue_imm(&sched->base);
+}
+
+static inline void xe_sched_resubmit_jobs(struct xe_gpu_scheduler *sched)
+{
+	drm_sched_resubmit_jobs(&sched->base);
+}
+
+static inline bool
+xe_sched_invalidate_job(struct xe_sched_job *job, int threshold)
+{
+	return drm_sched_invalidate_job(&job->drm, threshold);
+}
+
+static inline void xe_sched_add_pending_job(struct xe_gpu_scheduler *sched,
+					    struct xe_sched_job *job)
+{
+	list_add(&job->drm.list, &sched->base.pending_list);
+}
+
+static inline
+struct xe_sched_job *xe_sched_first_pending_job(struct xe_gpu_scheduler *sched)
+{
+	return list_first_entry_or_null(&sched->base.pending_list,
+					struct xe_sched_job, drm.list);
+}
+
+static inline int
+xe_sched_entity_init(struct xe_sched_entity *entity,
+		     struct xe_gpu_scheduler *sched)
+{
+	return drm_sched_entity_init(entity, DRM_SCHED_PRIORITY_MIN,
+				     (struct drm_gpu_scheduler **)&sched,
+				     1, NULL);
+}
+
+#define xe_sched_entity_fini drm_sched_entity_fini
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler_types.h b/drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
new file mode 100644
index 000000000000..86133835d4d1
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
@@ -0,0 +1,58 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_GPU_SCHEDULER_TYPES_H_
+#define _XE_GPU_SCHEDULER_TYPES_H_
+
+#include <drm/gpu_scheduler.h>
+
+/**
+ * struct xe_sched_msg - an in-band (relative to GPU scheduler run queue)
+ * message
+ *
+ * Generic enough for backend defined messages, backend can expand if needed.
+ */
+struct xe_sched_msg {
+	/** @link: list link into the gpu scheduler list of messages */
+	struct list_head		link;
+	/**
+	 * @private_data: opaque pointer to message private data (backend defined)
+	 */
+	void				*private_data;
+	/** @opcode: opcode of message (backend defined) */
+	unsigned int			opcode;
+};
+
+/**
+ * struct xe_sched_backend_ops - Define the backend operations called by the
+ * scheduler
+ */
+struct xe_sched_backend_ops {
+	/**
+	 * @process_msg: Process a message. Allowed to block, it is this
+	 * function's responsibility to free message if dynamically allocated.
+	 */
+	void (*process_msg)(struct xe_sched_msg *msg);
+};
+
+/**
+ * struct xe_gpu_scheduler - Xe GPU scheduler
+ */
+struct xe_gpu_scheduler {
+	/** @base: DRM GPU scheduler */
+	struct drm_gpu_scheduler		base;
+	/** @ops: Xe scheduler ops */
+	const struct xe_sched_backend_ops	*ops;
+	/** @msgs: list of messages to be processed in @work_process_msg */
+	struct list_head			msgs;
+	/** @work_process_msg: processes messages */
+	struct work_struct		work_process_msg;
+};
+
+#define xe_sched_entity		drm_sched_entity
+#define xe_sched_policy		drm_sched_policy
+#define xe_sched_priority	drm_sched_priority
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h b/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
index d95ef0021a1f..4c39f01e4f52 100644
--- a/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
+++ b/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
@@ -9,7 +9,7 @@
 #include <linux/spinlock.h>
 #include <linux/workqueue.h>
 
-#include <drm/gpu_scheduler.h>
+#include "xe_gpu_scheduler_types.h"
 
 struct dma_fence;
 struct xe_exec_queue;
@@ -21,16 +21,16 @@ struct xe_guc_exec_queue {
 	/** @q: Backpointer to parent xe_exec_queue */
 	struct xe_exec_queue *q;
 	/** @sched: GPU scheduler for this xe_exec_queue */
-	struct drm_gpu_scheduler sched;
+	struct xe_gpu_scheduler sched;
 	/** @entity: Scheduler entity for this xe_exec_queue */
-	struct drm_sched_entity entity;
+	struct xe_sched_entity entity;
 	/**
 	 * @static_msgs: Static messages for this xe_exec_queue, used when
 	 * a message needs to sent through the GPU scheduler but memory
 	 * allocations are not allowed.
 	 */
 #define MAX_STATIC_MSG_TYPE	3
-	struct drm_sched_msg static_msgs[MAX_STATIC_MSG_TYPE];
+	struct xe_sched_msg static_msgs[MAX_STATIC_MSG_TYPE];
 	/** @lr_tdr: long running TDR worker */
 	struct work_struct lr_tdr;
 	/** @fini_async: do final fini async from this worker */
diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
index 870dc5c532fa..8ae1a49186e5 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -19,6 +19,7 @@
 #include "xe_device.h"
 #include "xe_exec_queue.h"
 #include "xe_force_wake.h"
+#include "xe_gpu_scheduler.h"
 #include "xe_gt.h"
 #include "xe_guc.h"
 #include "xe_guc_ct.h"
@@ -360,7 +361,7 @@ MAKE_EXEC_QUEUE_POLICY_ADD(preemption_timeout, PREEMPTION_TIMEOUT)
 MAKE_EXEC_QUEUE_POLICY_ADD(priority, SCHEDULING_PRIORITY)
 #undef MAKE_EXEC_QUEUE_POLICY_ADD
 
-static const int drm_sched_prio_to_guc[] = {
+static const int xe_sched_prio_to_guc[] = {
 	[DRM_SCHED_PRIORITY_MIN] = GUC_CLIENT_PRIORITY_NORMAL,
 	[DRM_SCHED_PRIORITY_NORMAL] = GUC_CLIENT_PRIORITY_KMD_NORMAL,
 	[DRM_SCHED_PRIORITY_HIGH] = GUC_CLIENT_PRIORITY_HIGH,
@@ -371,14 +372,14 @@ static void init_policies(struct xe_guc *guc, struct xe_exec_queue *q)
 {
 	struct exec_queue_policy policy;
 	struct xe_device *xe = guc_to_xe(guc);
-	enum drm_sched_priority prio = q->entity->priority;
+	enum xe_sched_priority prio = q->priority;
 	u32 timeslice_us = q->sched_props.timeslice_us;
 	u32 preempt_timeout_us = q->sched_props.preempt_timeout_us;
 
 	xe_assert(xe, exec_queue_registered(q));
 
 	__guc_exec_queue_policy_start_klv(&policy, q->guc->id);
-	__guc_exec_queue_policy_add_priority(&policy, drm_sched_prio_to_guc[prio]);
+	__guc_exec_queue_policy_add_priority(&policy, xe_sched_prio_to_guc[prio]);
 	__guc_exec_queue_policy_add_execution_quantum(&policy, timeslice_us);
 	__guc_exec_queue_policy_add_preemption_timeout(&policy, preempt_timeout_us);
 
@@ -719,7 +720,6 @@ static int guc_read_stopped(struct xe_guc *guc)
 		q->guc->id,						\
 		GUC_CONTEXT_##enable_disable,				\
 	}
-#define MIN_SCHED_TIMEOUT	1
 
 static void disable_scheduling_deregister(struct xe_guc *guc,
 					  struct xe_exec_queue *q)
@@ -733,12 +733,12 @@ static void disable_scheduling_deregister(struct xe_guc *guc,
 	ret = wait_event_timeout(guc->ct.wq, !exec_queue_pending_enable(q) ||
 				 guc_read_stopped(guc), HZ * 5);
 	if (!ret) {
-		struct drm_gpu_scheduler *sched = &q->guc->sched;
+		struct xe_gpu_scheduler *sched = &q->guc->sched;
 
 		drm_warn(&xe->drm, "Pending enable failed to respond");
-		sched->timeout = MIN_SCHED_TIMEOUT;
-		drm_sched_run_wq_start(sched);
+		xe_sched_submission_start(sched);
 		xe_gt_reset_async(q->gt);
+		xe_sched_tdr_queue_imm(sched);
 		return;
 	}
 
@@ -809,7 +809,7 @@ static void xe_guc_exec_queue_trigger_cleanup(struct xe_exec_queue *q)
 	if (xe_exec_queue_is_lr(q))
 		queue_work(guc_to_gt(guc)->ordered_wq, &q->guc->lr_tdr);
 	else
-		drm_sched_set_timeout(&q->guc->sched, MIN_SCHED_TIMEOUT);
+		xe_sched_tdr_queue_imm(&q->guc->sched);
 }
 
 static void xe_guc_exec_queue_lr_cleanup(struct work_struct *w)
@@ -819,13 +819,13 @@ static void xe_guc_exec_queue_lr_cleanup(struct work_struct *w)
 	struct xe_exec_queue *q = ge->q;
 	struct xe_guc *guc = exec_queue_to_guc(q);
 	struct xe_device *xe = guc_to_xe(guc);
-	struct drm_gpu_scheduler *sched = &ge->sched;
+	struct xe_gpu_scheduler *sched = &ge->sched;
 
 	xe_assert(xe, xe_exec_queue_is_lr(q));
 	trace_xe_exec_queue_lr_cleanup(q);
 
 	/* Kill the run_job / process_msg entry points */
-	drm_sched_run_wq_stop(sched);
+	xe_sched_submission_stop(sched);
 
 	/*
 	 * Engine state now mostly stable, disable scheduling / deregister if
@@ -854,13 +854,13 @@ static void xe_guc_exec_queue_lr_cleanup(struct work_struct *w)
 					 guc_read_stopped(guc), HZ * 5);
 		if (!ret) {
 			drm_warn(&xe->drm, "Schedule disable failed to respond");
-			drm_sched_run_wq_start(sched);
+			xe_sched_submission_start(sched);
 			xe_gt_reset_async(q->gt);
 			return;
 		}
 	}
 
-	drm_sched_run_wq_start(sched);
+	xe_sched_submission_start(sched);
 }
 
 static enum drm_gpu_sched_stat
@@ -869,7 +869,7 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
 	struct xe_sched_job *job = to_xe_sched_job(drm_job);
 	struct xe_sched_job *tmp_job;
 	struct xe_exec_queue *q = job->q;
-	struct drm_gpu_scheduler *sched = &q->guc->sched;
+	struct xe_gpu_scheduler *sched = &q->guc->sched;
 	struct xe_device *xe = guc_to_xe(exec_queue_to_guc(q));
 	int err = -ETIME;
 	int i = 0;
@@ -889,7 +889,7 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
 	trace_xe_sched_job_timedout(job);
 
 	/* Kill the run_job entry point */
-	drm_sched_run_wq_stop(sched);
+	xe_sched_submission_stop(sched);
 
 	/*
 	 * Kernel jobs should never fail, nor should VM jobs if they do
@@ -897,9 +897,9 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
 	 */
 	if (q->flags & EXEC_QUEUE_FLAG_KERNEL ||
 	    (q->flags & EXEC_QUEUE_FLAG_VM && !exec_queue_killed(q))) {
-		if (!drm_sched_invalidate_job(drm_job, 2)) {
-			list_add(&drm_job->list, &sched->pending_list);
-			drm_sched_run_wq_start(sched);
+		if (!xe_sched_invalidate_job(job, 2)) {
+			xe_sched_add_pending_job(sched, job);
+			xe_sched_submission_start(sched);
 			xe_gt_reset_async(q->gt);
 			goto out;
 		}
@@ -932,10 +932,10 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
 					 guc_read_stopped(guc), HZ * 5);
 		if (!ret || guc_read_stopped(guc)) {
 			drm_warn(&xe->drm, "Schedule disable failed to respond");
-			sched->timeout = MIN_SCHED_TIMEOUT;
-			list_add(&drm_job->list, &sched->pending_list);
-			drm_sched_run_wq_start(sched);
+			xe_sched_add_pending_job(sched, job);
+			xe_sched_submission_start(sched);
 			xe_gt_reset_async(q->gt);
+			xe_sched_tdr_queue_imm(sched);
 			goto out;
 		}
 	}
@@ -947,15 +947,15 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
 	 * Fence state now stable, stop / start scheduler which cleans up any
 	 * fences that are complete
 	 */
-	list_add(&drm_job->list, &sched->pending_list);
-	drm_sched_run_wq_start(sched);
+	xe_sched_add_pending_job(sched, job);
+	xe_sched_submission_start(sched);
 	xe_guc_exec_queue_trigger_cleanup(q);
 
 	/* Mark all outstanding jobs as bad, thus completing them */
-	spin_lock(&sched->job_list_lock);
-	list_for_each_entry(tmp_job, &sched->pending_list, drm.list)
+	spin_lock(&sched->base.job_list_lock);
+	list_for_each_entry(tmp_job, &sched->base.pending_list, drm.list)
 		xe_sched_job_set_error(tmp_job, !i++ ? err : -ECANCELED);
-	spin_unlock(&sched->job_list_lock);
+	spin_unlock(&sched->base.job_list_lock);
 
 	/* Start fence signaling */
 	xe_hw_fence_irq_start(q->fence_irq);
@@ -978,8 +978,8 @@ static void __guc_exec_queue_fini_async(struct work_struct *w)
 	if (q->flags & EXEC_QUEUE_FLAG_PERSISTENT)
 		xe_device_remove_persistent_exec_queues(gt_to_xe(q->gt), q);
 	release_guc_id(guc, q);
-	drm_sched_entity_fini(&ge->entity);
-	drm_sched_fini(&ge->sched);
+	xe_sched_entity_fini(&ge->entity);
+	xe_sched_fini(&ge->sched);
 
 	kfree(ge);
 	xe_exec_queue_fini(q);
@@ -1008,7 +1008,7 @@ static void __guc_exec_queue_fini(struct xe_guc *guc, struct xe_exec_queue *q)
 	guc_exec_queue_fini_async(q);
 }
 
-static void __guc_exec_queue_process_msg_cleanup(struct drm_sched_msg *msg)
+static void __guc_exec_queue_process_msg_cleanup(struct xe_sched_msg *msg)
 {
 	struct xe_exec_queue *q = msg->private_data;
 	struct xe_guc *guc = exec_queue_to_guc(q);
@@ -1028,7 +1028,7 @@ static bool guc_exec_queue_allowed_to_change_state(struct xe_exec_queue *q)
 	return !exec_queue_killed_or_banned(q) && exec_queue_registered(q);
 }
 
-static void __guc_exec_queue_process_msg_set_sched_props(struct drm_sched_msg *msg)
+static void __guc_exec_queue_process_msg_set_sched_props(struct xe_sched_msg *msg)
 {
 	struct xe_exec_queue *q = msg->private_data;
 	struct xe_guc *guc = exec_queue_to_guc(q);
@@ -1052,7 +1052,7 @@ static void suspend_fence_signal(struct xe_exec_queue *q)
 	wake_up(&q->guc->suspend_wait);
 }
 
-static void __guc_exec_queue_process_msg_suspend(struct drm_sched_msg *msg)
+static void __guc_exec_queue_process_msg_suspend(struct xe_sched_msg *msg)
 {
 	struct xe_exec_queue *q = msg->private_data;
 	struct xe_guc *guc = exec_queue_to_guc(q);
@@ -1087,7 +1087,7 @@ static void __guc_exec_queue_process_msg_suspend(struct drm_sched_msg *msg)
 	}
 }
 
-static void __guc_exec_queue_process_msg_resume(struct drm_sched_msg *msg)
+static void __guc_exec_queue_process_msg_resume(struct xe_sched_msg *msg)
 {
 	struct xe_exec_queue *q = msg->private_data;
 	struct xe_guc *guc = exec_queue_to_guc(q);
@@ -1113,9 +1113,9 @@ static void __guc_exec_queue_process_msg_resume(struct drm_sched_msg *msg)
 #define SUSPEND		3
 #define RESUME		4
 
-static void guc_exec_queue_process_msg(struct drm_sched_msg *msg)
+static void guc_exec_queue_process_msg(struct xe_sched_msg *msg)
 {
-	trace_drm_sched_msg_recv(msg);
+	trace_xe_sched_msg_recv(msg);
 
 	switch (msg->opcode) {
 	case CLEANUP:
@@ -1139,12 +1139,15 @@ static const struct drm_sched_backend_ops drm_sched_ops = {
 	.run_job = guc_exec_queue_run_job,
 	.free_job = guc_exec_queue_free_job,
 	.timedout_job = guc_exec_queue_timedout_job,
+};
+
+static const struct xe_sched_backend_ops xe_sched_ops = {
 	.process_msg = guc_exec_queue_process_msg,
 };
 
 static int guc_exec_queue_init(struct xe_exec_queue *q)
 {
-	struct drm_gpu_scheduler *sched;
+	struct xe_gpu_scheduler *sched;
 	struct xe_guc *guc = exec_queue_to_guc(q);
 	struct xe_device *xe = guc_to_xe(guc);
 	struct xe_guc_exec_queue *ge;
@@ -1163,19 +1166,18 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
 
 	timeout = (q->vm && xe_vm_no_dma_fences(q->vm)) ? MAX_SCHEDULE_TIMEOUT :
 		  q->hwe->eclass->sched_props.job_timeout_ms;
-	err = drm_sched_init(&ge->sched, &drm_sched_ops, NULL,
+	err = xe_sched_init(&ge->sched, &drm_sched_ops, &xe_sched_ops, NULL,
 			     q->lrc[0].ring.size / MAX_JOB_SIZE_BYTES,
 			     64, timeout, guc_to_gt(guc)->ordered_wq, NULL,
-			     q->name, DRM_SCHED_POLICY_SINGLE_ENTITY,
-			     gt_to_xe(q->gt)->drm.dev);
+			     q->name, gt_to_xe(q->gt)->drm.dev);
 	if (err)
 		goto err_free;
 
 	sched = &ge->sched;
-	err = drm_sched_entity_init(&ge->entity, DRM_SCHED_PRIORITY_NORMAL,
-				    &sched, 1, NULL);
+	err = xe_sched_entity_init(&ge->entity, sched);
 	if (err)
 		goto err_sched;
+	q->priority = DRM_SCHED_PRIORITY_NORMAL;
 
 	if (xe_exec_queue_is_lr(q))
 		INIT_WORK(&q->guc->lr_tdr, xe_guc_exec_queue_lr_cleanup);
@@ -1189,7 +1191,7 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
 	q->entity = &ge->entity;
 
 	if (guc_read_stopped(guc))
-		drm_sched_stop(sched, NULL);
+		xe_sched_stop(sched);
 
 	mutex_unlock(&guc->submission_state.lock);
 
@@ -1200,9 +1202,9 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
 	return 0;
 
 err_entity:
-	drm_sched_entity_fini(&ge->entity);
+	xe_sched_entity_fini(&ge->entity);
 err_sched:
-	drm_sched_fini(&ge->sched);
+	xe_sched_fini(&ge->sched);
 err_free:
 	kfree(ge);
 
@@ -1216,15 +1218,15 @@ static void guc_exec_queue_kill(struct xe_exec_queue *q)
 	xe_guc_exec_queue_trigger_cleanup(q);
 }
 
-static void guc_exec_queue_add_msg(struct xe_exec_queue *q, struct drm_sched_msg *msg,
+static void guc_exec_queue_add_msg(struct xe_exec_queue *q, struct xe_sched_msg *msg,
 				   u32 opcode)
 {
 	INIT_LIST_HEAD(&msg->link);
 	msg->opcode = opcode;
 	msg->private_data = q;
 
-	trace_drm_sched_msg_add(msg);
-	drm_sched_add_msg(&q->guc->sched, msg);
+	trace_xe_sched_msg_add(msg);
+	xe_sched_add_msg(&q->guc->sched, msg);
 }
 
 #define STATIC_MSG_CLEANUP	0
@@ -1232,7 +1234,7 @@ static void guc_exec_queue_add_msg(struct xe_exec_queue *q, struct drm_sched_msg
 #define STATIC_MSG_RESUME	2
 static void guc_exec_queue_fini(struct xe_exec_queue *q)
 {
-	struct drm_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_CLEANUP;
+	struct xe_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_CLEANUP;
 
 	if (!(q->flags & EXEC_QUEUE_FLAG_PERMANENT))
 		guc_exec_queue_add_msg(q, msg, CLEANUP);
@@ -1241,11 +1243,11 @@ static void guc_exec_queue_fini(struct xe_exec_queue *q)
 }
 
 static int guc_exec_queue_set_priority(struct xe_exec_queue *q,
-				       enum drm_sched_priority priority)
+				       enum xe_sched_priority priority)
 {
-	struct drm_sched_msg *msg;
+	struct xe_sched_msg *msg;
 
-	if (q->entity->priority == priority || exec_queue_killed_or_banned(q))
+	if (q->priority == priority || exec_queue_killed_or_banned(q))
 		return 0;
 
 	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
@@ -1253,13 +1255,14 @@ static int guc_exec_queue_set_priority(struct xe_exec_queue *q,
 		return -ENOMEM;
 
 	guc_exec_queue_add_msg(q, msg, SET_SCHED_PROPS);
+	q->priority = priority;
 
 	return 0;
 }
 
 static int guc_exec_queue_set_timeslice(struct xe_exec_queue *q, u32 timeslice_us)
 {
-	struct drm_sched_msg *msg;
+	struct xe_sched_msg *msg;
 
 	if (q->sched_props.timeslice_us == timeslice_us ||
 	    exec_queue_killed_or_banned(q))
@@ -1278,7 +1281,7 @@ static int guc_exec_queue_set_timeslice(struct xe_exec_queue *q, u32 timeslice_u
 static int guc_exec_queue_set_preempt_timeout(struct xe_exec_queue *q,
 					      u32 preempt_timeout_us)
 {
-	struct drm_sched_msg *msg;
+	struct xe_sched_msg *msg;
 
 	if (q->sched_props.preempt_timeout_us == preempt_timeout_us ||
 	    exec_queue_killed_or_banned(q))
@@ -1296,7 +1299,7 @@ static int guc_exec_queue_set_preempt_timeout(struct xe_exec_queue *q,
 
 static int guc_exec_queue_set_job_timeout(struct xe_exec_queue *q, u32 job_timeout_ms)
 {
-	struct drm_gpu_scheduler *sched = &q->guc->sched;
+	struct xe_gpu_scheduler *sched = &q->guc->sched;
 	struct xe_guc *guc = exec_queue_to_guc(q);
 	struct xe_device *xe = guc_to_xe(guc);
 
@@ -1304,14 +1307,14 @@ static int guc_exec_queue_set_job_timeout(struct xe_exec_queue *q, u32 job_timeo
 	xe_assert(xe, !exec_queue_banned(q));
 	xe_assert(xe, !exec_queue_killed(q));
 
-	sched->timeout = job_timeout_ms;
+	sched->base.timeout = job_timeout_ms;
 
 	return 0;
 }
 
 static int guc_exec_queue_suspend(struct xe_exec_queue *q)
 {
-	struct drm_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_SUSPEND;
+	struct xe_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_SUSPEND;
 
 	if (exec_queue_killed_or_banned(q) || q->guc->suspend_pending)
 		return -EINVAL;
@@ -1332,7 +1335,7 @@ static void guc_exec_queue_suspend_wait(struct xe_exec_queue *q)
 
 static void guc_exec_queue_resume(struct xe_exec_queue *q)
 {
-	struct drm_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_RESUME;
+	struct xe_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_RESUME;
 	struct xe_guc *guc = exec_queue_to_guc(q);
 	struct xe_device *xe = guc_to_xe(guc);
 
@@ -1362,10 +1365,10 @@ static const struct xe_exec_queue_ops guc_exec_queue_ops = {
 
 static void guc_exec_queue_stop(struct xe_guc *guc, struct xe_exec_queue *q)
 {
-	struct drm_gpu_scheduler *sched = &q->guc->sched;
+	struct xe_gpu_scheduler *sched = &q->guc->sched;
 
 	/* Stop scheduling + flush any DRM scheduler operations */
-	drm_sched_run_wq_stop(sched);
+	xe_sched_submission_stop(sched);
 
 	/* Clean up lost G2H + reset engine state */
 	if (exec_queue_registered(q)) {
@@ -1390,18 +1393,14 @@ static void guc_exec_queue_stop(struct xe_guc *guc, struct xe_exec_queue *q)
 	 * more than twice.
 	 */
 	if (!(q->flags & (EXEC_QUEUE_FLAG_KERNEL | EXEC_QUEUE_FLAG_VM))) {
-		struct drm_sched_job *drm_job =
-			list_first_entry_or_null(&sched->pending_list,
-						 struct drm_sched_job, list);
-
-		if (drm_job) {
-			struct xe_sched_job *job = to_xe_sched_job(drm_job);
+		struct xe_sched_job *job = xe_sched_first_pending_job(sched);
 
+		if (job) {
 			if ((xe_sched_job_started(job) &&
 			    !xe_sched_job_completed(job)) ||
-			    drm_sched_invalidate_job(drm_job, 2)) {
+			    xe_sched_invalidate_job(job, 2)) {
 				trace_xe_sched_job_ban(job);
-				sched->timeout = MIN_SCHED_TIMEOUT;
+				xe_sched_tdr_queue_imm(&q->guc->sched);
 				set_exec_queue_banned(q);
 			}
 		}
@@ -1456,7 +1455,7 @@ int xe_guc_submit_stop(struct xe_guc *guc)
 
 static void guc_exec_queue_start(struct xe_exec_queue *q)
 {
-	struct drm_gpu_scheduler *sched = &q->guc->sched;
+	struct xe_gpu_scheduler *sched = &q->guc->sched;
 
 	if (!exec_queue_killed_or_banned(q)) {
 		int i;
@@ -1464,11 +1463,10 @@ static void guc_exec_queue_start(struct xe_exec_queue *q)
 		trace_xe_exec_queue_resubmit(q);
 		for (i = 0; i < q->width; ++i)
 			xe_lrc_set_ring_head(q->lrc + i, q->lrc[i].ring.tail);
-		drm_sched_resubmit_jobs(sched);
+		xe_sched_resubmit_jobs(sched);
 	}
 
-	drm_sched_run_wq_start(sched);
-	drm_sched_set_timeout(sched, sched->timeout);
+	xe_sched_submission_start(sched);
 }
 
 int xe_guc_submit_start(struct xe_guc *guc)
@@ -1752,7 +1750,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
 {
 	struct xe_guc *guc = exec_queue_to_guc(q);
 	struct xe_device *xe = guc_to_xe(guc);
-	struct drm_gpu_scheduler *sched = &q->guc->sched;
+	struct xe_gpu_scheduler *sched = &q->guc->sched;
 	struct xe_sched_job *job;
 	struct xe_guc_submit_exec_queue_snapshot *snapshot;
 	int i;
@@ -1770,7 +1768,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
 	snapshot->logical_mask = q->logical_mask;
 	snapshot->width = q->width;
 	snapshot->refcount = kref_read(&q->refcount);
-	snapshot->sched_timeout = sched->timeout;
+	snapshot->sched_timeout = sched->base.timeout;
 	snapshot->sched_props.timeslice_us = q->sched_props.timeslice_us;
 	snapshot->sched_props.preempt_timeout_us =
 		q->sched_props.preempt_timeout_us;
@@ -1802,8 +1800,8 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
 	if (snapshot->parallel_execution)
 		guc_exec_queue_wq_snapshot_capture(q, snapshot);
 
-	spin_lock(&sched->job_list_lock);
-	snapshot->pending_list_size = list_count_nodes(&sched->pending_list);
+	spin_lock(&sched->base.job_list_lock);
+	snapshot->pending_list_size = list_count_nodes(&sched->base.pending_list);
 	snapshot->pending_list = kmalloc_array(snapshot->pending_list_size,
 					       sizeof(struct pending_list_snapshot),
 					       GFP_ATOMIC);
@@ -1812,7 +1810,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
 		drm_err(&xe->drm, "Skipping GuC Engine pending_list snapshot.\n");
 	} else {
 		i = 0;
-		list_for_each_entry(job, &sched->pending_list, drm.list) {
+		list_for_each_entry(job, &sched->base.pending_list, drm.list) {
 			snapshot->pending_list[i].seqno =
 				xe_sched_job_seqno(job);
 			snapshot->pending_list[i].fence =
@@ -1824,7 +1822,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
 		}
 	}
 
-	spin_unlock(&sched->job_list_lock);
+	spin_unlock(&sched->base.job_list_lock);
 
 	return snapshot;
 }
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index b4baecde60e6..ce803cbdafec 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -395,7 +395,7 @@ struct xe_migrate *xe_migrate_init(struct xe_tile *tile)
 		return ERR_CAST(m->q);
 	}
 	if (xe->info.supports_usm)
-		m->q->entity->priority = DRM_SCHED_PRIORITY_KERNEL;
+		m->q->priority = DRM_SCHED_PRIORITY_KERNEL;
 
 	mutex_init(&m->job_mutex);
 
diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
index e32f1cad51d9..5ea458dadf69 100644
--- a/drivers/gpu/drm/xe/xe_trace.h
+++ b/drivers/gpu/drm/xe/xe_trace.h
@@ -14,6 +14,7 @@
 
 #include "xe_bo_types.h"
 #include "xe_exec_queue_types.h"
+#include "xe_gpu_scheduler_types.h"
 #include "xe_gt_tlb_invalidation_types.h"
 #include "xe_gt_types.h"
 #include "xe_guc_exec_queue_types.h"
@@ -290,8 +291,8 @@ DEFINE_EVENT(xe_sched_job, xe_sched_job_ban,
 	     TP_ARGS(job)
 );
 
-DECLARE_EVENT_CLASS(drm_sched_msg,
-		    TP_PROTO(struct drm_sched_msg *msg),
+DECLARE_EVENT_CLASS(xe_sched_msg,
+		    TP_PROTO(struct xe_sched_msg *msg),
 		    TP_ARGS(msg),
 
 		    TP_STRUCT__entry(
@@ -309,13 +310,13 @@ DECLARE_EVENT_CLASS(drm_sched_msg,
 			      __entry->opcode)
 );
 
-DEFINE_EVENT(drm_sched_msg, drm_sched_msg_add,
-	     TP_PROTO(struct drm_sched_msg *msg),
+DEFINE_EVENT(xe_sched_msg, xe_sched_msg_add,
+	     TP_PROTO(struct xe_sched_msg *msg),
 	     TP_ARGS(msg)
 );
 
-DEFINE_EVENT(drm_sched_msg, drm_sched_msg_recv,
-	     TP_PROTO(struct drm_sched_msg *msg),
+DEFINE_EVENT(xe_sched_msg, xe_sched_msg_recv,
+	     TP_PROTO(struct xe_sched_msg *msg),
 	     TP_ARGS(msg)
 );
 
diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
index 4bc1fef4fc2c..e5a6166eb152 100644
--- a/include/drm/gpu_scheduler.h
+++ b/include/drm/gpu_scheduler.h
@@ -72,16 +72,11 @@ enum drm_sched_priority {
 	DRM_SCHED_PRIORITY_UNSET = -2
 };
 
-/* Used to chose default scheduling policy*/
-extern int default_drm_sched_policy;
-
-enum drm_sched_policy {
-	DRM_SCHED_POLICY_DEFAULT,
-	DRM_SCHED_POLICY_RR,
-	DRM_SCHED_POLICY_FIFO,
-	DRM_SCHED_POLICY_SINGLE_ENTITY,
-	DRM_SCHED_POLICY_COUNT,
-};
+/* Used to chose between FIFO and RR jobs scheduling */
+extern int drm_sched_policy;
+
+#define DRM_SCHED_POLICY_RR    0
+#define DRM_SCHED_POLICY_FIFO  1
 
 /**
  * struct drm_sched_entity - A wrapper around a job queue (typically
@@ -113,9 +108,6 @@ struct drm_sched_entity {
 	 */
 	struct drm_sched_rq		*rq;
 
-	/** @single_sched: Single scheduler */
-	struct drm_gpu_scheduler	*single_sched;
-
 	/**
 	 * @sched_list:
 	 *
@@ -394,23 +386,6 @@ enum drm_gpu_sched_stat {
 	DRM_GPU_SCHED_STAT_ENODEV,
 };
 
-/**
- * struct drm_sched_msg - an in-band (relative to GPU scheduler run queue)
- * message
- *
- * Generic enough for backend defined messages, backend can expand if needed.
- */
-struct drm_sched_msg {
-	/** @link: list link into the gpu scheduler list of messages */
-	struct list_head		link;
-	/**
-	 * @private_data: opaque pointer to message private data (backend defined)
-	 */
-	void				*private_data;
-	/** @opcode: opcode of message (backend defined) */
-	unsigned int			opcode;
-};
-
 /**
  * struct drm_sched_backend_ops - Define the backend operations
  *	called by the scheduler
@@ -488,32 +463,27 @@ struct drm_sched_backend_ops {
          * and it's time to clean it up.
 	 */
 	void (*free_job)(struct drm_sched_job *sched_job);
-
-	/**
-	 * @process_msg: Process a message. Allowed to block, it is this
-	 * function's responsibility to free message if dynamically allocated.
-	 */
-	void (*process_msg)(struct drm_sched_msg *msg);
 };
 
 /**
  * struct drm_gpu_scheduler - scheduler instance-specific data
  *
  * @ops: backend operations provided by the driver.
- * @single_entity: Single entity for the scheduler
  * @hw_submission_limit: the max size of the hardware queue.
  * @timeout: the time after which a job is removed from the scheduler.
  * @name: name of the ring for which this scheduler is being used.
- * @sched_rq: priority wise array of run queues.
- * @msgs: list of messages to be processed in @work_run
+ * @num_rqs: Number of run-queues. This is at most DRM_SCHED_PRIORITY_COUNT,
+ *           as there's usually one run-queue per priority, but could be less.
+ * @sched_rq: An allocated array of run-queues of size @num_rqs;
  * @job_scheduled: once @drm_sched_entity_do_release is called the scheduler
  *                 waits on this wait queue until all the scheduled jobs are
  *                 finished.
  * @hw_rq_count: the number of jobs currently in the hardware queue.
  * @job_id_count: used to assign unique id to the each job.
- * @run_wq: workqueue used to queue @work_run
+ * @submit_wq: workqueue used to queue @work_run_job and @work_free_job
  * @timeout_wq: workqueue used to queue @work_tdr
- * @work_run: schedules jobs, cleans up jobs, and processes messages
+ * @work_run_job: work which calls run_job op of each scheduler.
+ * @work_free_job: work which calls free_job op of each scheduler.
  * @work_tdr: schedules a delayed call to @drm_sched_job_timedout after the
  *            timeout interval is over.
  * @pending_list: the list of jobs which are currently in the job queue.
@@ -522,49 +492,47 @@ struct drm_sched_backend_ops {
  *              guilty and it will no longer be considered for scheduling.
  * @score: score to help loadbalancer pick a idle sched
  * @_score: score used when the driver doesn't provide one
- * @sched_policy: Schedule policy for scheduler
  * @ready: marks if the underlying HW is ready to work
  * @free_guilty: A hit to time out handler to free the guilty job.
- * @pause_run_wq: pause queuing of @work_run on @run_wq
+ * @pause_submit: pause queuing of @work_submit on @submit_wq
+ * @own_submit_wq: scheduler owns allocation of @submit_wq
  * @dev: system &struct device
  *
  * One scheduler is implemented for each hardware ring.
  */
 struct drm_gpu_scheduler {
 	const struct drm_sched_backend_ops	*ops;
-	struct drm_sched_entity		*single_entity;
 	uint32_t			hw_submission_limit;
 	long				timeout;
 	const char			*name;
-	struct drm_sched_rq		sched_rq[DRM_SCHED_PRIORITY_COUNT];
-	struct list_head		msgs;
+	u32                             num_rqs;
+	struct drm_sched_rq             **sched_rq;
 	wait_queue_head_t		job_scheduled;
 	atomic_t			hw_rq_count;
 	atomic64_t			job_id_count;
-	struct workqueue_struct		*run_wq;
+	struct workqueue_struct		*submit_wq;
 	struct workqueue_struct		*timeout_wq;
-	struct work_struct		work_run;
+	struct work_struct		work_run_job;
+	struct work_struct		work_free_job;
 	struct delayed_work		work_tdr;
 	struct list_head		pending_list;
 	spinlock_t			job_list_lock;
 	int				hang_limit;
 	atomic_t                        *score;
 	atomic_t                        _score;
-	enum drm_sched_policy		sched_policy;
 	bool				ready;
 	bool				free_guilty;
-	bool				pause_run_wq;
+	bool				pause_submit;
+	bool				own_submit_wq;
 	struct device			*dev;
 };
 
 int drm_sched_init(struct drm_gpu_scheduler *sched,
 		   const struct drm_sched_backend_ops *ops,
-		   struct workqueue_struct *run_wq,
-		   uint32_t hw_submission, unsigned hang_limit,
+		   struct workqueue_struct *submit_wq,
+		   u32 num_rqs, uint32_t hw_submission, unsigned hang_limit,
 		   long timeout, struct workqueue_struct *timeout_wq,
-		   atomic_t *score, const char *name,
-		   enum drm_sched_policy sched_policy,
-		   struct device *dev);
+		   atomic_t *score, const char *name, struct device *dev);
 
 void drm_sched_fini(struct drm_gpu_scheduler *sched);
 int drm_sched_job_init(struct drm_sched_job *job,
@@ -589,13 +557,12 @@ void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
 				    struct drm_gpu_scheduler **sched_list,
                                    unsigned int num_sched_list);
 
-void drm_sched_set_timeout(struct drm_gpu_scheduler *sched, long timeout);
+void drm_sched_tdr_queue_imm(struct drm_gpu_scheduler *sched);
 void drm_sched_job_cleanup(struct drm_sched_job *job);
 void drm_sched_wakeup_if_can_queue(struct drm_gpu_scheduler *sched);
-void drm_sched_add_msg(struct drm_gpu_scheduler *sched,
-		       struct drm_sched_msg *msg);
-void drm_sched_run_wq_stop(struct drm_gpu_scheduler *sched);
-void drm_sched_run_wq_start(struct drm_gpu_scheduler *sched);
+bool drm_sched_wqueue_ready(struct drm_gpu_scheduler *sched);
+void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched);
+void drm_sched_wqueue_start(struct drm_gpu_scheduler *sched);
 void drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad);
 void drm_sched_start(struct drm_gpu_scheduler *sched, bool full_recovery);
 void drm_sched_resubmit_jobs(struct drm_gpu_scheduler *sched);
@@ -618,8 +585,6 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
 			  struct drm_gpu_scheduler **sched_list,
 			  unsigned int num_sched_list,
 			  atomic_t *guilty);
-struct drm_gpu_scheduler *
-drm_sched_entity_to_scheduler(struct drm_sched_entity *entity);
 long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout);
 void drm_sched_entity_fini(struct drm_sched_entity *entity);
 void drm_sched_entity_destroy(struct drm_sched_entity *entity);
-- 
2.34.1


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

* [Intel-xe] ✓ CI.Patch_applied: success for drm/xe: Update to upstream DRM scheduler code
  2023-10-25  4:05 [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code Matthew Brost
@ 2023-10-25  4:11 ` Patchwork
  2023-10-25  4:11 ` [Intel-xe] ✗ CI.checkpatch: warning " Patchwork
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2023-10-25  4:11 UTC (permalink / raw)
  To: Matthew Brost; +Cc: intel-xe

== Series Details ==

Series: drm/xe: Update to upstream DRM scheduler code
URL   : https://patchwork.freedesktop.org/series/125540/
State : success

== Summary ==

=== Applying kernel patches on branch 'drm-xe-next' with base: ===
Base commit: 4354e27ef drm/xe: Simplify xe_res_get_buddy()
=== git am output follows ===
Applying: drm/xe: Update to upstream DRM scheduler code



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

* [Intel-xe] ✗ CI.checkpatch: warning for drm/xe: Update to upstream DRM scheduler code
  2023-10-25  4:05 [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code Matthew Brost
  2023-10-25  4:11 ` [Intel-xe] ✓ CI.Patch_applied: success for " Patchwork
@ 2023-10-25  4:11 ` Patchwork
  2023-10-25  4:13 ` [Intel-xe] ✓ CI.KUnit: success " Patchwork
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2023-10-25  4:11 UTC (permalink / raw)
  To: Matthew Brost; +Cc: intel-xe

== Series Details ==

Series: drm/xe: Update to upstream DRM scheduler code
URL   : https://patchwork.freedesktop.org/series/125540/
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
63c2b6b160bca2df6efc7bc4cea6f442097d7854
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 672549977619a1ab7cd54fa168f24c9ec2bbe8fc
Author: Matthew Brost <matthew.brost@intel.com>
Date:   Tue Oct 24 21:05:20 2023 -0700

    drm/xe: Update to upstream DRM scheduler code
    
    The largest change is the message interface has been removed from the
    DRM scheduler. Xe still needs a message interface so it is implemented
    in the Xe driver by adding a Xe scheduler layer.
    
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
+ /mt/dim checkpatch 4354e27efb78582ee567ba6264c79d0872a3a4e7 drm-intel
672549977 drm/xe: Update to upstream DRM scheduler code
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:496: WARNING:LONG_LINE: line length of 202 exceeds 100 columns
#496: FILE: drivers/gpu/drm/scheduler/sched_main.c:75:
+MODULE_PARM_DESC(sched_policy, "Specify the scheduling policy for entities on a run-queue, " __stringify(DRM_SCHED_POLICY_RR) " = Round Robin, " __stringify(DRM_SCHED_POLICY_FIFO) " = FIFO (default).");

-:1096: WARNING:UNSPECIFIED_INT: Prefer 'unsigned int' to bare use of 'unsigned'
#1096: FILE: drivers/gpu/drm/scheduler/sched_main.c:1156:
+		   u32 num_rqs, unsigned hw_submission, unsigned hang_limit,

-:1096: WARNING:UNSPECIFIED_INT: Prefer 'unsigned int' to bare use of 'unsigned'
#1096: FILE: drivers/gpu/drm/scheduler/sched_main.c:1156:
+		   u32 num_rqs, unsigned hw_submission, unsigned hang_limit,

-:1156: WARNING:OOM_MESSAGE: Possible unnecessary 'out of memory' message
#1156: FILE: drivers/gpu/drm/scheduler/sched_main.c:1199:
+	if (!sched->sched_rq) {
+		drm_err(sched, "%s: out of memory for sched_rq\n", __func__);

-:1164: CHECK:CAMELCASE: Avoid CamelCase: <Out_unroll>
#1164: FILE: drivers/gpu/drm/scheduler/sched_main.c:1207:
+			goto Out_unroll;

-:1426: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#1426: 
new file mode 100644

-:1491: WARNING:UNSPECIFIED_INT: Prefer 'unsigned int' to bare use of 'unsigned'
#1491: FILE: drivers/gpu/drm/xe/xe_gpu_scheduler.c:61:
+		  uint32_t hw_submission, unsigned hang_limit,

-:1491: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u32' over 'uint32_t'
#1491: FILE: drivers/gpu/drm/xe/xe_gpu_scheduler.c:61:
+		  uint32_t hw_submission, unsigned hang_limit,

-:1553: WARNING:UNSPECIFIED_INT: Prefer 'unsigned int' to bare use of 'unsigned'
#1553: FILE: drivers/gpu/drm/xe/xe_gpu_scheduler.h:16:
+		  uint32_t hw_submission, unsigned hang_limit,

-:1553: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u32' over 'uint32_t'
#1553: FILE: drivers/gpu/drm/xe/xe_gpu_scheduler.h:16:
+		  uint32_t hw_submission, unsigned hang_limit,

-:1959: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#1959: FILE: drivers/gpu/drm/xe/xe_guc_submit.c:1170:
+	err = xe_sched_init(&ge->sched, &drm_sched_ops, &xe_sched_ops, NULL,
 			     q->lrc[0].ring.size / MAX_JOB_SIZE_BYTES,

-:2413: WARNING:UNSPECIFIED_INT: Prefer 'unsigned int' to bare use of 'unsigned'
#2413: FILE: include/drm/gpu_scheduler.h:533:
+		   u32 num_rqs, uint32_t hw_submission, unsigned hang_limit,

total: 0 errors, 8 warnings, 4 checks, 2218 lines checked



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

* [Intel-xe] ✓ CI.KUnit: success for drm/xe: Update to upstream DRM scheduler code
  2023-10-25  4:05 [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code Matthew Brost
  2023-10-25  4:11 ` [Intel-xe] ✓ CI.Patch_applied: success for " Patchwork
  2023-10-25  4:11 ` [Intel-xe] ✗ CI.checkpatch: warning " Patchwork
@ 2023-10-25  4:13 ` Patchwork
  2023-10-25  4:20 ` [Intel-xe] ✓ CI.Build: " Patchwork
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2023-10-25  4:13 UTC (permalink / raw)
  To: Matthew Brost; +Cc: intel-xe

== Series Details ==

Series: drm/xe: Update to upstream DRM scheduler code
URL   : https://patchwork.freedesktop.org/series/125540/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
stty: 'standard input': Inappropriate ioctl for device
[04:11:55] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[04:11:59] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[04:12:19] Starting KUnit Kernel (1/1)...
[04:12:19] ============================================================
[04:12:19] ========================== xe_bo  ==========================
[04:12:19] [SKIPPED] xe_ccs_migrate_kunit
[04:12:19] [SKIPPED] xe_bo_evict_kunit
[04:12:19] ===================== [SKIPPED] xe_bo ======================
[04:12:19] ======================= xe_dma_buf  ========================
[04:12:19] [SKIPPED] xe_dma_buf_kunit
[04:12:19] =================== [SKIPPED] xe_dma_buf ===================
[04:12:19] ======================= xe_migrate  ========================
[04:12:19] [SKIPPED] xe_migrate_sanity_kunit
[04:12:19] =================== [SKIPPED] xe_migrate ===================
[04:12:19] ========================= xe_pci  ==========================
[04:12:19] [PASSED] xe_gmdid_graphics_ip
[04:12:19] [PASSED] xe_gmdid_media_ip
[04:12:19] ===================== [PASSED] xe_pci ======================
[04:12:19] ========================= xe_rtp  ==========================
[04:12:19] ================== xe_rtp_process_tests  ===================
[04:12:19] [PASSED] coalesce-same-reg
[04:12:19] [PASSED] no-match-no-add
[04:12:19] [PASSED] no-match-no-add-multiple-rules
[04:12:19] [PASSED] two-regs-two-entries
[04:12:19] [PASSED] clr-one-set-other
[04:12:19] [PASSED] set-field
[04:12:19] [PASSED] conflict-duplicate
[04:12:19] [PASSED] conflict-not-disjoint
[04:12:19] [PASSED] conflict-reg-type
[04:12:19] ============== [PASSED] xe_rtp_process_tests ===============
[04:12:19] ===================== [PASSED] xe_rtp ======================
[04:12:19] ========================== xe_wa  ==========================
[04:12:19] ======================== xe_wa_gt  =========================
[04:12:19] [PASSED] TIGERLAKE (B0)
[04:12:19] [PASSED] DG1 (A0)
[04:12:19] [PASSED] DG1 (B0)
[04:12:19] [PASSED] ALDERLAKE_S (A0)
[04:12:19] [PASSED] ALDERLAKE_S (B0)
[04:12:19] [PASSED] ALDERLAKE_S (C0)
[04:12:19] [PASSED] ALDERLAKE_S (D0)
[04:12:19] [PASSED] ALDERLAKE_P (A0)
[04:12:19] [PASSED] ALDERLAKE_P (B0)
[04:12:19] [PASSED] ALDERLAKE_P (C0)
[04:12:19] [PASSED] ALDERLAKE_S_RPLS (D0)
[04:12:19] [PASSED] ALDERLAKE_P_RPLU (E0)
[04:12:19] [PASSED] DG2_G10 (A0)
[04:12:19] [PASSED] DG2_G10 (A1)
[04:12:19] [PASSED] DG2_G10 (B0)
[04:12:19] [PASSED] DG2_G10 (C0)
[04:12:19] [PASSED] DG2_G11 (A0)
[04:12:19] [PASSED] DG2_G11 (B0)
[04:12:19] [PASSED] DG2_G11 (B1)
[04:12:19] [PASSED] DG2_G12 (A0)
[04:12:19] [PASSED] DG2_G12 (A1)
[04:12:19] [PASSED] PVC (B0)
[04:12:19] [PASSED] PVC (B1)
[04:12:19] [PASSED] PVC (C0)
[04:12:19] ==================== [PASSED] xe_wa_gt =====================
[04:12:19] ====================== [PASSED] xe_wa ======================
[04:12:19] ============================================================
[04:12:19] Testing complete. Ran 39 tests: passed: 35, skipped: 4
[04:12:19] Elapsed time: 24.671s total, 4.160s configuring, 20.392s building, 0.100s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[04:12:19] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[04:12:21] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[04:12:40] Starting KUnit Kernel (1/1)...
[04:12:40] ============================================================
[04:12:41] ================== drm_test_pick_cmdline  ==================
[04:12:41] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[04:12:41] =============== drm_test_pick_cmdline_named  ===============
[04:12:41] [PASSED] NTSC
[04:12:41] [PASSED] NTSC-J
[04:12:41] [PASSED] PAL
[04:12:41] [PASSED] PAL-M
[04:12:41] =========== [PASSED] drm_test_pick_cmdline_named ===========
[04:12:41] ============== [PASSED] drm_test_pick_cmdline ==============
[04:12:41] ======================== drm_buddy  ========================
[04:12:41] [PASSED] drm_test_buddy_alloc_limit
[04:12:41] [PASSED] drm_test_buddy_alloc_range
[04:12:41] [PASSED] drm_test_buddy_alloc_optimistic
[04:12:41] [PASSED] drm_test_buddy_alloc_pessimistic
[04:12:41] [PASSED] drm_test_buddy_alloc_smoke
[04:12:41] [PASSED] drm_test_buddy_alloc_pathological
[04:12:41] ==================== [PASSED] drm_buddy ====================
[04:12:41] =================== drm_cmdline_parser  ====================
[04:12:41] [PASSED] drm_test_cmdline_force_d_only
[04:12:41] [PASSED] drm_test_cmdline_force_D_only_dvi
[04:12:41] [PASSED] drm_test_cmdline_force_D_only_hdmi
[04:12:41] [PASSED] drm_test_cmdline_force_D_only_not_digital
[04:12:41] [PASSED] drm_test_cmdline_force_e_only
[04:12:41] [PASSED] drm_test_cmdline_res
[04:12:41] [PASSED] drm_test_cmdline_res_vesa
[04:12:41] [PASSED] drm_test_cmdline_res_vesa_rblank
[04:12:41] [PASSED] drm_test_cmdline_res_rblank
[04:12:41] [PASSED] drm_test_cmdline_res_bpp
[04:12:41] [PASSED] drm_test_cmdline_res_refresh
[04:12:41] [PASSED] drm_test_cmdline_res_bpp_refresh
[04:12:41] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[04:12:41] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[04:12:41] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[04:12:41] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[04:12:41] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[04:12:41] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[04:12:41] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[04:12:41] [PASSED] drm_test_cmdline_res_margins_force_on
[04:12:41] [PASSED] drm_test_cmdline_res_vesa_margins
[04:12:41] [PASSED] drm_test_cmdline_name
[04:12:41] [PASSED] drm_test_cmdline_name_bpp
[04:12:41] [PASSED] drm_test_cmdline_name_option
[04:12:41] [PASSED] drm_test_cmdline_name_bpp_option
[04:12:41] [PASSED] drm_test_cmdline_rotate_0
[04:12:41] [PASSED] drm_test_cmdline_rotate_90
[04:12:41] [PASSED] drm_test_cmdline_rotate_180
[04:12:41] [PASSED] drm_test_cmdline_rotate_270
[04:12:41] [PASSED] drm_test_cmdline_hmirror
[04:12:41] [PASSED] drm_test_cmdline_vmirror
[04:12:41] [PASSED] drm_test_cmdline_margin_options
[04:12:41] [PASSED] drm_test_cmdline_multiple_options
[04:12:41] [PASSED] drm_test_cmdline_bpp_extra_and_option
[04:12:41] [PASSED] drm_test_cmdline_extra_and_option
[04:12:41] [PASSED] drm_test_cmdline_freestanding_options
[04:12:41] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[04:12:41] [PASSED] drm_test_cmdline_panel_orientation
[04:12:41] ================ drm_test_cmdline_invalid  =================
[04:12:41] [PASSED] margin_only
[04:12:41] [PASSED] interlace_only
[04:12:41] [PASSED] res_missing_x
[04:12:41] [PASSED] res_missing_y
[04:12:41] [PASSED] res_bad_y
[04:12:41] [PASSED] res_missing_y_bpp
[04:12:41] [PASSED] res_bad_bpp
[04:12:41] [PASSED] res_bad_refresh
[04:12:41] [PASSED] res_bpp_refresh_force_on_off
[04:12:41] [PASSED] res_invalid_mode
[04:12:41] [PASSED] res_bpp_wrong_place_mode
[04:12:41] [PASSED] name_bpp_refresh
[04:12:41] [PASSED] name_refresh
[04:12:41] [PASSED] name_refresh_wrong_mode
[04:12:41] [PASSED] name_refresh_invalid_mode
[04:12:41] [PASSED] rotate_multiple
[04:12:41] [PASSED] rotate_invalid_val
[04:12:41] [PASSED] rotate_truncated
[04:12:41] [PASSED] invalid_option
[04:12:41] [PASSED] invalid_tv_option
[04:12:41] [PASSED] truncated_tv_option
[04:12:41] ============ [PASSED] drm_test_cmdline_invalid =============
[04:12:41] =============== drm_test_cmdline_tv_options  ===============
[04:12:41] [PASSED] NTSC
[04:12:41] [PASSED] NTSC_443
[04:12:41] [PASSED] NTSC_J
[04:12:41] [PASSED] PAL
[04:12:41] [PASSED] PAL_M
[04:12:41] [PASSED] PAL_N
[04:12:41] [PASSED] SECAM
[04:12:41] =========== [PASSED] drm_test_cmdline_tv_options ===========
[04:12:41] =============== [PASSED] drm_cmdline_parser ================
[04:12:41] ================ drm_get_tv_mode_from_name  ================
[04:12:41] ========== drm_test_get_tv_mode_from_name_valid  ===========
[04:12:41] [PASSED] NTSC
[04:12:41] [PASSED] NTSC-443
[04:12:41] [PASSED] NTSC-J
[04:12:41] [PASSED] PAL
[04:12:41] [PASSED] PAL-M
[04:12:41] [PASSED] PAL-N
[04:12:41] [PASSED] SECAM
[04:12:41] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[04:12:41] [PASSED] drm_test_get_tv_mode_from_name_truncated
[04:12:41] ============ [PASSED] drm_get_tv_mode_from_name ============
[04:12:41] ==================== drm_damage_helper  ====================
[04:12:41] [PASSED] drm_test_damage_iter_no_damage
[04:12:41] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[04:12:41] [PASSED] drm_test_damage_iter_no_damage_src_moved
[04:12:41] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[04:12:41] [PASSED] drm_test_damage_iter_no_damage_not_visible
[04:12:41] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[04:12:41] [PASSED] drm_test_damage_iter_no_damage_no_fb
[04:12:41] [PASSED] drm_test_damage_iter_simple_damage
[04:12:41] [PASSED] drm_test_damage_iter_single_damage
[04:12:41] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[04:12:41] [PASSED] drm_test_damage_iter_single_damage_outside_src
[04:12:41] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[04:12:41] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[04:12:41] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[04:12:41] [PASSED] drm_test_damage_iter_single_damage_src_moved
[04:12:41] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[04:12:41] [PASSED] drm_test_damage_iter_damage
[04:12:41] [PASSED] drm_test_damage_iter_damage_one_intersect
[04:12:41] [PASSED] drm_test_damage_iter_damage_one_outside
[04:12:41] [PASSED] drm_test_damage_iter_damage_src_moved
[04:12:41] [PASSED] drm_test_damage_iter_damage_not_visible
[04:12:41] ================ [PASSED] drm_damage_helper ================
[04:12:41] ==================== drm_dp_mst_helper  ====================
[04:12:41] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[04:12:41] [PASSED] Clock 154000 BPP 30 DSC disabled
[04:12:41] [PASSED] Clock 234000 BPP 30 DSC disabled
[04:12:41] [PASSED] Clock 297000 BPP 24 DSC disabled
[04:12:41] [PASSED] Clock 332880 BPP 24 DSC enabled
[04:12:41] [PASSED] Clock 324540 BPP 24 DSC enabled
[04:12:41] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[04:12:41] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[04:12:41] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[04:12:41] [PASSED] DP_POWER_UP_PHY with port number
[04:12:41] [PASSED] DP_POWER_DOWN_PHY with port number
[04:12:41] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[04:12:41] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[04:12:41] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[04:12:41] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[04:12:41] [PASSED] DP_QUERY_PAYLOAD with port number
[04:12:41] [PASSED] DP_QUERY_PAYLOAD with VCPI
[04:12:41] [PASSED] DP_REMOTE_DPCD_READ with port number
[04:12:41] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[04:12:41] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[04:12:41] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[04:12:41] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[04:12:41] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[04:12:41] [PASSED] DP_REMOTE_I2C_READ with port number
[04:12:41] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[04:12:41] [PASSED] DP_REMOTE_I2C_READ with transactions array
[04:12:41] [PASSED] DP_REMOTE_I2C_WRITE with port number
[04:12:41] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[04:12:41] [PASSED] DP_REMOTE_I2C_WRITE with data array
[04:12:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[04:12:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[04:12:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[04:12:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[04:12:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[04:12:41] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[04:12:41] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[04:12:41] ================ [PASSED] drm_dp_mst_helper ================
[04:12:41] ================= drm_format_helper_test  ==================
[04:12:41] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[04:12:41] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[04:12:41] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[04:12:41] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[04:12:41] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[04:12:41] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[04:12:41] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[04:12:41] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[04:12:41] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[04:12:41] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[04:12:41] ============== drm_test_fb_xrgb8888_to_mono  ===============
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[04:12:41] ==================== drm_test_fb_swab  =====================
[04:12:41] [PASSED] single_pixel_source_buffer
[04:12:41] [PASSED] single_pixel_clip_rectangle
[04:12:41] [PASSED] well_known_colors
[04:12:41] [PASSED] destination_pitch
[04:12:41] ================ [PASSED] drm_test_fb_swab =================
[04:12:41] ================= drm_test_fb_clip_offset  =================
[04:12:41] [PASSED] pass through
[04:12:41] [PASSED] horizontal offset
[04:12:41] [PASSED] vertical offset
[04:12:41] [PASSED] horizontal and vertical offset
[04:12:41] [PASSED] horizontal offset (custom pitch)
[04:12:41] [PASSED] vertical offset (custom pitch)
[04:12:41] [PASSED] horizontal and vertical offset (custom pitch)
[04:12:41] ============= [PASSED] drm_test_fb_clip_offset =============
[04:12:41] ============== drm_test_fb_build_fourcc_list  ==============
[04:12:41] [PASSED] no native formats
[04:12:41] [PASSED] XRGB8888 as native format
[04:12:41] [PASSED] remove duplicates
[04:12:41] [PASSED] convert alpha formats
[04:12:41] [PASSED] random formats
[04:12:41] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[04:12:41] =================== drm_test_fb_memcpy  ====================
[04:12:41] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[04:12:41] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[04:12:41] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[04:12:41] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[04:12:41] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[04:12:41] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[04:12:41] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[04:12:41] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[04:12:41] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[04:12:41] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[04:12:41] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[04:12:41] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[04:12:41] =============== [PASSED] drm_test_fb_memcpy ================
[04:12:41] ============= [PASSED] drm_format_helper_test ==============
[04:12:41] ======================= drm_format  ========================
[04:12:41] [PASSED] drm_test_format_block_width_invalid
[04:12:41] [PASSED] drm_test_format_block_width_one_plane
[04:12:41] [PASSED] drm_test_format_block_width_two_plane
[04:12:41] [PASSED] drm_test_format_block_width_three_plane
[04:12:41] [PASSED] drm_test_format_block_width_tiled
[04:12:41] [PASSED] drm_test_format_block_height_invalid
[04:12:41] [PASSED] drm_test_format_block_height_one_plane
[04:12:41] [PASSED] drm_test_format_block_height_two_plane
[04:12:41] [PASSED] drm_test_format_block_height_three_plane
[04:12:41] [PASSED] drm_test_format_block_height_tiled
[04:12:41] [PASSED] drm_test_format_min_pitch_invalid
[04:12:41] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[04:12:41] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[04:12:41] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[04:12:41] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[04:12:41] [PASSED] drm_test_format_min_pitch_two_plane
[04:12:41] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[04:12:41] [PASSED] drm_test_format_min_pitch_tiled
[04:12:41] =================== [PASSED] drm_format ====================
[04:12:41] ===================== drm_framebuffer  =====================
[04:12:41] =============== drm_test_framebuffer_create  ===============
[04:12:41] [PASSED] ABGR8888 normal sizes
[04:12:41] [PASSED] ABGR8888 max sizes
[04:12:41] [PASSED] ABGR8888 pitch greater than min required
[04:12:41] [PASSED] ABGR8888 pitch less than min required
[04:12:41] [PASSED] ABGR8888 Invalid width
[04:12:41] [PASSED] ABGR8888 Invalid buffer handle
[04:12:41] [PASSED] No pixel format
[04:12:41] [PASSED] ABGR8888 Width 0
[04:12:41] [PASSED] ABGR8888 Height 0
[04:12:41] [PASSED] ABGR8888 Out of bound height * pitch combination
[04:12:41] [PASSED] ABGR8888 Large buffer offset
[04:12:41] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[04:12:41] [PASSED] ABGR8888 Valid buffer modifier
[04:12:41] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[04:12:41] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[04:12:41] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[04:12:41] [PASSED] NV12 Normal sizes
[04:12:41] [PASSED] NV12 Max sizes
[04:12:41] [PASSED] NV12 Invalid pitch
[04:12:41] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[04:12:41] [PASSED] NV12 different  modifier per-plane
[04:12:41] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[04:12:41] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[04:12:41] [PASSED] NV12 Modifier for inexistent plane
[04:12:41] [PASSED] NV12 Handle for inexistent plane
[04:12:41] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[04:12:41] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[04:12:41] [PASSED] YVU420 Normal sizes
[04:12:41] [PASSED] YVU420 Max sizes
[04:12:41] [PASSED] YVU420 Invalid pitch
[04:12:41] [PASSED] YVU420 Different pitches
[04:12:41] [PASSED] YVU420 Different buffer offsets/pitches
[04:12:41] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[04:12:41] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[04:12:41] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[04:12:41] [PASSED] YVU420 Valid modifier
[04:12:41] [PASSED] YVU420 Different modifiers per plane
[04:12:41] [PASSED] YVU420 Modifier for inexistent plane
[04:12:41] [PASSED] X0L2 Normal sizes
[04:12:41] [PASSED] X0L2 Max sizes
[04:12:41] [PASSED] X0L2 Invalid pitch
[04:12:41] [PASSED] X0L2 Pitch greater than minimum required
[04:12:41] [PASSED] X0L2 Handle for inexistent plane
[04:12:41] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[04:12:41] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[04:12:41] [PASSED] X0L2 Valid modifier
[04:12:41] [PASSED] X0L2 Modifier for inexistent plane
[04:12:41] =========== [PASSED] drm_test_framebuffer_create ===========
[04:12:41] ================= [PASSED] drm_framebuffer =================
[04:12:41] ==================== drm-test-managed  =====================
[04:12:41] [PASSED] drm_test_managed_run_action
[04:12:41] ================ [PASSED] drm-test-managed =================
[04:12:41] ========================= drm_mm  ==========================
[04:12:41] [PASSED] drm_test_mm_init
[04:12:41] [PASSED] drm_test_mm_debug
[04:12:51] [PASSED] drm_test_mm_reserve
[04:13:01] [PASSED] drm_test_mm_insert
[04:13:02] [PASSED] drm_test_mm_replace
[04:13:02] [PASSED] drm_test_mm_insert_range
[04:13:02] [PASSED] drm_test_mm_frag
[04:13:02] [PASSED] drm_test_mm_align
[04:13:02] [PASSED] drm_test_mm_align32
[04:13:02] [PASSED] drm_test_mm_align64
[04:13:03] [PASSED] drm_test_mm_evict
[04:13:03] [PASSED] drm_test_mm_evict_range
[04:13:03] [PASSED] drm_test_mm_topdown
[04:13:03] [PASSED] drm_test_mm_bottomup
[04:13:03] [PASSED] drm_test_mm_lowest
[04:13:03] [PASSED] drm_test_mm_highest
[04:13:03] [PASSED] drm_test_mm_color
[04:13:04] [PASSED] drm_test_mm_color_evict
[04:13:04] [PASSED] drm_test_mm_color_evict_range
[04:13:04] ===================== [PASSED] drm_mm ======================
[04:13:04] =================== drm_modes_analog_tv  ===================
[04:13:04] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[04:13:04] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[04:13:04] [PASSED] drm_test_modes_analog_tv_pal_576i
[04:13:04] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[04:13:04] =============== [PASSED] drm_modes_analog_tv ===============
[04:13:04] ==================== drm_plane_helper  =====================
[04:13:04] =============== drm_test_check_plane_state  ================
[04:13:04] [PASSED] clipping_simple
[04:13:04] [PASSED] clipping_rotate_reflect
[04:13:04] [PASSED] positioning_simple
[04:13:04] [PASSED] upscaling
[04:13:04] [PASSED] downscaling
[04:13:04] [PASSED] rounding1
[04:13:04] [PASSED] rounding2
[04:13:04] [PASSED] rounding3
[04:13:04] [PASSED] rounding4
[04:13:04] =========== [PASSED] drm_test_check_plane_state ============
[04:13:04] =========== drm_test_check_invalid_plane_state  ============
[04:13:04] [PASSED] positioning_invalid
[04:13:04] [PASSED] upscaling_invalid
[04:13:04] [PASSED] downscaling_invalid
[04:13:04] ======= [PASSED] drm_test_check_invalid_plane_state ========
[04:13:04] ================ [PASSED] drm_plane_helper =================
[04:13:04] ============ drm_connector_helper_tv_get_modes  ============
[04:13:04] ====== drm_test_connector_helper_tv_get_modes_check  =======
[04:13:04] [PASSED] None
[04:13:04] [PASSED] PAL
[04:13:04] [PASSED] NTSC
[04:13:04] [PASSED] Both, NTSC Default
[04:13:04] [PASSED] Both, PAL Default
[04:13:04] [PASSED] Both, NTSC Default, with PAL on command-line
[04:13:04] [PASSED] Both, PAL Default, with NTSC on command-line
[04:13:04] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[04:13:04] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[04:13:04] ======================== drm_rect  =========================
[04:13:04] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[04:13:04] [PASSED] drm_test_rect_clip_scaled_not_clipped
[04:13:04] [PASSED] drm_test_rect_clip_scaled_clipped
[04:13:04] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[04:13:04] ================= drm_test_rect_intersect  =================
[04:13:04] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[04:13:04] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[04:13:04] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[04:13:04] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[04:13:04] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[04:13:04] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[04:13:04] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[04:13:04] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[04:13:04] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[04:13:04] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[04:13:04] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[04:13:04] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[04:13:04] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[04:13:04] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[04:13:04] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[04:13:04] ============= [PASSED] drm_test_rect_intersect =============
[04:13:04] ================ drm_test_rect_calc_hscale  ================
[04:13:04] [PASSED] normal use
[04:13:04] [PASSED] out of max range
[04:13:04] [PASSED] out of min range
[04:13:04] [PASSED] zero dst
[04:13:04] [PASSED] negative src
[04:13:04] [PASSED] negative dst
[04:13:04] ============ [PASSED] drm_test_rect_calc_hscale ============
[04:13:04] ================ drm_test_rect_calc_vscale  ================
[04:13:04] [PASSED] normal use
[04:13:04] [PASSED] out of max range
[04:13:04] [PASSED] out of min range
[04:13:04] [PASSED] zero dst
[04:13:04] [PASSED] negative src
[04:13:04] [PASSED] negative dst
[04:13:04] ============ [PASSED] drm_test_rect_calc_vscale ============
[04:13:04] ================== drm_test_rect_rotate  ===================
[04:13:04] [PASSED] reflect-x
[04:13:04] [PASSED] reflect-y
[04:13:04] [PASSED] rotate-0
[04:13:04] [PASSED] rotate-90
[04:13:04] [PASSED] rotate-180
[04:13:04] [PASSED] rotate-270
[04:13:04] ============== [PASSED] drm_test_rect_rotate ===============
[04:13:04] ================ drm_test_rect_rotate_inv  =================
[04:13:04] [PASSED] reflect-x
[04:13:04] [PASSED] reflect-y
[04:13:04] [PASSED] rotate-0
[04:13:04] [PASSED] rotate-90
[04:13:04] [PASSED] rotate-180
[04:13:04] [PASSED] rotate-270
[04:13:04] ============ [PASSED] drm_test_rect_rotate_inv =============
stty: 'standard input': Inappropriate ioctl for device
[04:13:04] ==================== [PASSED] drm_rect =====================
[04:13:04] ======================== drm_exec  =========================
[04:13:04] [PASSED] sanitycheck
[04:13:04] [PASSED] test_lock
[04:13:04] [PASSED] test_lock_unlock
[04:13:04] [PASSED] test_duplicates
[04:13:04] [PASSED] test_prepare
[04:13:04] [PASSED] test_prepare_array
[04:13:04] [PASSED] test_multiple_loops
[04:13:04] ==================== [PASSED] drm_exec =====================
[04:13:04] ============================================================
[04:13:04] Testing complete. Ran 368 tests: passed: 368
[04:13:04] Elapsed time: 44.675s total, 1.649s configuring, 19.345s building, 23.648s running

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



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

* [Intel-xe] ✓ CI.Build: success for drm/xe: Update to upstream DRM scheduler code
  2023-10-25  4:05 [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code Matthew Brost
                   ` (2 preceding siblings ...)
  2023-10-25  4:13 ` [Intel-xe] ✓ CI.KUnit: success " Patchwork
@ 2023-10-25  4:20 ` Patchwork
  2023-10-25  4:20 ` [Intel-xe] ✓ CI.Hooks: " Patchwork
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2023-10-25  4:20 UTC (permalink / raw)
  To: Matthew Brost; +Cc: intel-xe

== Series Details ==

Series: drm/xe: Update to upstream DRM scheduler code
URL   : https://patchwork.freedesktop.org/series/125540/
State : success

== Summary ==

+ trap cleanup EXIT
+ cd /kernel
+ git clone https://gitlab.freedesktop.org/drm/xe/ci.git .ci
Cloning into '.ci'...
++ date +%s
+ echo -e '\e[0Ksection_start:1698207194:build_x86_64[collapsed=true]\r\e[0KBuild x86-64'
+ mkdir -p build64-default
^[[0Ksection_start:1698207194:build_x86_64[collapsed=true]
^[[0KBuild x86-64
+ cp .ci/kernel/kconfig build64-default/.config
+ make O=build64-default olddefconfig
make[1]: Entering directory '/kernel/build64-default'
  GEN     Makefile
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
make[1]: Leaving directory '/kernel/build64-default'
++ nproc
+ make O=build64-default -j48
make[1]: Entering directory '/kernel/build64-default'
  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
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctls.h
  GEN     arch/x86/include/generated/asm/orc_hash.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.h
  WRAP    arch/x86/include/generated/uapi/asm/param.h
  WRAP    arch/x86/include/generated/uapi/asm/ipcbuf.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_x32.h
  WRAP    arch/x86/include/generated/uapi/asm/poll.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.h
  WRAP    arch/x86/include/generated/uapi/asm/resource.h
  WRAP    arch/x86/include/generated/uapi/asm/socket.h
  SYSHDR  arch/x86/include/generated/asm/unistd_64_x32.h
  WRAP    arch/x86/include/generated/uapi/asm/sockios.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_64.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
  HOSTCC  arch/x86/tools/relocs_32.o
  HOSTCC  arch/x86/tools/relocs_common.o
  HOSTCC  arch/x86/tools/relocs_64.o
  WRAP    arch/x86/include/generated/asm/early_ioremap.h
  WRAP    arch/x86/include/generated/asm/export.h
  WRAP    arch/x86/include/generated/asm/mcs_spinlock.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
  WRAP    arch/x86/include/generated/asm/module.lds.h
  WRAP    arch/x86/include/generated/asm/unaligned.h
  WRAP    arch/x86/include/generated/asm/rwonce.h
  UPD     include/generated/uapi/linux/version.h
  UPD     include/config/kernel.release
  UPD     include/generated/compile.h
  HOSTCC  scripts/unifdef
  HOSTCC  scripts/kallsyms
  HOSTCC  scripts/sorttable
  HOSTCC  scripts/asn1_compiler
  UPD     include/generated/utsrelease.h
  DESCEND objtool
  HOSTCC  /kernel/build64-default/tools/objtool/fixdep.o
  HOSTLD  /kernel/build64-default/tools/objtool/fixdep-in.o
  LINK    /kernel/build64-default/tools/objtool/fixdep
  HOSTLD  arch/x86/tools/relocs
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/exec-cmd.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/help.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/pager.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/parse-options.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/run-command.h
  CC      /kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
  INSTALL libsubcmd_headers
  CC      /kernel/build64-default/tools/objtool/libsubcmd/help.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/pager.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/run-command.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  CC      scripts/mod/devicetable-offsets.s
  HDRINST usr/include/video/edid.h
  HDRINST usr/include/video/uvesafb.h
  HDRINST usr/include/video/sisfb.h
  HDRINST usr/include/drm/amdgpu_drm.h
  HDRINST usr/include/drm/qaic_accel.h
  HDRINST usr/include/drm/i915_drm.h
  HDRINST usr/include/drm/vgem_drm.h
  HDRINST usr/include/drm/virtgpu_drm.h
  HDRINST usr/include/drm/xe_drm.h
  HDRINST usr/include/drm/omap_drm.h
  HDRINST usr/include/drm/radeon_drm.h
  HDRINST usr/include/drm/tegra_drm.h
  HDRINST usr/include/drm/drm_mode.h
  HDRINST usr/include/drm/ivpu_accel.h
  HDRINST usr/include/drm/exynos_drm.h
  HDRINST usr/include/drm/drm_sarea.h
  HDRINST usr/include/drm/v3d_drm.h
  HDRINST usr/include/drm/qxl_drm.h
  HDRINST usr/include/drm/drm_fourcc.h
  HDRINST usr/include/drm/nouveau_drm.h
  HDRINST usr/include/drm/habanalabs_accel.h
  HDRINST usr/include/drm/vmwgfx_drm.h
  HDRINST usr/include/drm/msm_drm.h
  HDRINST usr/include/drm/etnaviv_drm.h
  HDRINST usr/include/drm/panfrost_drm.h
  HDRINST usr/include/drm/vc4_drm.h
  HDRINST usr/include/drm/lima_drm.h
  HDRINST usr/include/drm/armada_drm.h
  HDRINST usr/include/drm/drm.h
  HDRINST usr/include/mtd/inftl-user.h
  HDRINST usr/include/mtd/nftl-user.h
  HDRINST usr/include/mtd/mtd-user.h
  HDRINST usr/include/mtd/ubi-user.h
  HDRINST usr/include/mtd/mtd-abi.h
  HDRINST usr/include/xen/gntdev.h
  HDRINST usr/include/xen/gntalloc.h
  HDRINST usr/include/xen/evtchn.h
  HDRINST usr/include/xen/privcmd.h
  HDRINST usr/include/asm-generic/auxvec.h
  HDRINST usr/include/asm-generic/bitsperlong.h
  HDRINST usr/include/asm-generic/posix_types.h
  HDRINST usr/include/asm-generic/ioctls.h
  HDRINST usr/include/asm-generic/mman.h
  HDRINST usr/include/asm-generic/shmbuf.h
  HDRINST usr/include/asm-generic/bpf_perf_event.h
  HDRINST usr/include/asm-generic/types.h
  HDRINST usr/include/asm-generic/poll.h
  HDRINST usr/include/asm-generic/msgbuf.h
  HDRINST usr/include/asm-generic/swab.h
  HDRINST usr/include/asm-generic/statfs.h
  HDRINST usr/include/asm-generic/unistd.h
  HDRINST usr/include/asm-generic/hugetlb_encode.h
  HDRINST usr/include/asm-generic/resource.h
  HDRINST usr/include/asm-generic/param.h
  HDRINST usr/include/asm-generic/termbits-common.h
  HDRINST usr/include/asm-generic/sockios.h
  HDRINST usr/include/asm-generic/kvm_para.h
  HDRINST usr/include/asm-generic/errno.h
  HDRINST usr/include/asm-generic/termios.h
  HDRINST usr/include/asm-generic/mman-common.h
  HDRINST usr/include/asm-generic/ioctl.h
  HDRINST usr/include/asm-generic/socket.h
  HDRINST usr/include/asm-generic/signal-defs.h
  HDRINST usr/include/asm-generic/termbits.h
  HDRINST usr/include/asm-generic/int-ll64.h
  HDRINST usr/include/asm-generic/signal.h
  HDRINST usr/include/asm-generic/siginfo.h
  HDRINST usr/include/asm-generic/stat.h
  HDRINST usr/include/asm-generic/int-l64.h
  HDRINST usr/include/asm-generic/errno-base.h
  HDRINST usr/include/asm-generic/fcntl.h
  HDRINST usr/include/asm-generic/setup.h
  HDRINST usr/include/asm-generic/ipcbuf.h
  HDRINST usr/include/asm-generic/sembuf.h
  HDRINST usr/include/asm-generic/ucontext.h
  HDRINST usr/include/rdma/mlx5_user_ioctl_cmds.h
  HDRINST usr/include/rdma/irdma-abi.h
  HDRINST usr/include/rdma/mana-abi.h
  HDRINST usr/include/rdma/hfi/hfi1_user.h
  HDRINST usr/include/rdma/hfi/hfi1_ioctl.h
  HDRINST usr/include/rdma/rdma_user_rxe.h
  HDRINST usr/include/rdma/rdma_user_ioctl.h
  HDRINST usr/include/rdma/mlx5_user_ioctl_verbs.h
  HDRINST usr/include/rdma/bnxt_re-abi.h
  HDRINST usr/include/rdma/hns-abi.h
  HDRINST usr/include/rdma/qedr-abi.h
  HDRINST usr/include/rdma/ib_user_ioctl_cmds.h
  HDRINST usr/include/rdma/vmw_pvrdma-abi.h
  HDRINST usr/include/rdma/ib_user_sa.h
  HDRINST usr/include/rdma/ib_user_ioctl_verbs.h
  HDRINST usr/include/rdma/rvt-abi.h
  HDRINST usr/include/rdma/mlx5-abi.h
  HDRINST usr/include/rdma/rdma_netlink.h
  HDRINST usr/include/rdma/erdma-abi.h
  HDRINST usr/include/rdma/rdma_user_ioctl_cmds.h
  HDRINST usr/include/rdma/rdma_user_cm.h
  HDRINST usr/include/rdma/ib_user_verbs.h
  HDRINST usr/include/rdma/efa-abi.h
  HDRINST usr/include/rdma/siw-abi.h
  HDRINST usr/include/rdma/mlx4-abi.h
  HDRINST usr/include/rdma/mthca-abi.h
  HDRINST usr/include/rdma/ib_user_mad.h
  HDRINST usr/include/rdma/ocrdma-abi.h
  HDRINST usr/include/rdma/cxgb4-abi.h
  HDRINST usr/include/misc/xilinx_sdfec.h
  UPD     scripts/mod/devicetable-offsets.h
  HDRINST usr/include/misc/uacce/hisi_qm.h
  HDRINST usr/include/misc/uacce/uacce.h
  HDRINST usr/include/misc/cxl.h
  HDRINST usr/include/misc/ocxl.h
  HDRINST usr/include/misc/fastrpc.h
  HDRINST usr/include/misc/pvpanic.h
  HDRINST usr/include/linux/i8k.h
  HDRINST usr/include/linux/acct.h
  HDRINST usr/include/linux/atmmpc.h
  HDRINST usr/include/linux/fs.h
  HDRINST usr/include/linux/cifs/cifs_mount.h
  HDRINST usr/include/linux/cifs/cifs_netlink.h
  HDRINST usr/include/linux/if_packet.h
  HDRINST usr/include/linux/route.h
  HDRINST usr/include/linux/patchkey.h
  HDRINST usr/include/linux/tc_ematch/tc_em_cmp.h
  HDRINST usr/include/linux/tc_ematch/tc_em_ipt.h
  HDRINST usr/include/linux/tc_ematch/tc_em_meta.h
  HDRINST usr/include/linux/tc_ematch/tc_em_nbyte.h
  HDRINST usr/include/linux/tc_ematch/tc_em_text.h
  HDRINST usr/include/linux/virtio_pmem.h
  HDRINST usr/include/linux/rkisp1-config.h
  HDRINST usr/include/linux/vhost.h
  HDRINST usr/include/linux/cec-funcs.h
  HDRINST usr/include/linux/ppdev.h
  HDRINST usr/include/linux/isdn/capicmd.h
  HDRINST usr/include/linux/virtio_fs.h
  HDRINST usr/include/linux/netfilter_ipv6.h
  HDRINST usr/include/linux/lirc.h
  HDRINST usr/include/linux/mroute6.h
  HDRINST usr/include/linux/nl80211-vnd-intel.h
  HDRINST usr/include/linux/ivtvfb.h
  HDRINST usr/include/linux/auxvec.h
  HDRINST usr/include/linux/dm-log-userspace.h
  HDRINST usr/include/linux/dccp.h
  HDRINST usr/include/linux/virtio_scmi.h
  HDRINST usr/include/linux/atmarp.h
  HDRINST usr/include/linux/arcfb.h
  MKELF   scripts/mod/elfconfig.h
  HDRINST usr/include/linux/nbd-netlink.h
  HDRINST usr/include/linux/sched/types.h
  HDRINST usr/include/linux/tcp.h
  HDRINST usr/include/linux/neighbour.h
  HOSTCC  scripts/mod/modpost.o
  HDRINST usr/include/linux/dlm_device.h
  HDRINST usr/include/linux/wmi.h
  HOSTCC  scripts/mod/file2alias.o
  HDRINST usr/include/linux/btrfs_tree.h
  HOSTCC  scripts/mod/sumversion.o
  HDRINST usr/include/linux/virtio_crypto.h
  HDRINST usr/include/linux/vbox_err.h
  HDRINST usr/include/linux/edd.h
  HDRINST usr/include/linux/loop.h
  HDRINST usr/include/linux/nvme_ioctl.h
  HDRINST usr/include/linux/mmtimer.h
  HDRINST usr/include/linux/if_pppol2tp.h
  HDRINST usr/include/linux/mtio.h
  HDRINST usr/include/linux/if_arcnet.h
  HDRINST usr/include/linux/romfs_fs.h
  HDRINST usr/include/linux/posix_types.h
  HDRINST usr/include/linux/rtc.h
  HDRINST usr/include/linux/landlock.h
  HDRINST usr/include/linux/gpio.h
  HDRINST usr/include/linux/selinux_netlink.h
  HDRINST usr/include/linux/pps.h
  HDRINST usr/include/linux/ndctl.h
  HDRINST usr/include/linux/virtio_gpu.h
  HDRINST usr/include/linux/android/binderfs.h
  HDRINST usr/include/linux/android/binder.h
  HDRINST usr/include/linux/virtio_vsock.h
  HDRINST usr/include/linux/sound.h
  HDRINST usr/include/linux/vtpm_proxy.h
  HDRINST usr/include/linux/nfs_fs.h
  HDRINST usr/include/linux/elf-fdpic.h
  HDRINST usr/include/linux/adfs_fs.h
  HDRINST usr/include/linux/target_core_user.h
  HDRINST usr/include/linux/netlink_diag.h
  HDRINST usr/include/linux/const.h
  HDRINST usr/include/linux/firewire-cdev.h
  HDRINST usr/include/linux/vdpa.h
  HDRINST usr/include/linux/if_infiniband.h
  HDRINST usr/include/linux/serial.h
  HDRINST usr/include/linux/iio/types.h
  HDRINST usr/include/linux/iio/buffer.h
  HDRINST usr/include/linux/iio/events.h
  HDRINST usr/include/linux/baycom.h
  HDRINST usr/include/linux/major.h
  HDRINST usr/include/linux/atmppp.h
  HDRINST usr/include/linux/ipv6_route.h
  HDRINST usr/include/linux/spi/spidev.h
  HDRINST usr/include/linux/spi/spi.h
  HDRINST usr/include/linux/virtio_ring.h
  HDRINST usr/include/linux/hdlc/ioctl.h
  HDRINST usr/include/linux/remoteproc_cdev.h
  HDRINST usr/include/linux/hyperv.h
  HDRINST usr/include/linux/rpl_iptunnel.h
  HDRINST usr/include/linux/igmp.h
  HDRINST usr/include/linux/sync_file.h
  HDRINST usr/include/linux/v4l2-dv-timings.h
  HDRINST usr/include/linux/virtio_i2c.h
  HDRINST usr/include/linux/xfrm.h
  HDRINST usr/include/linux/capability.h
  HDRINST usr/include/linux/gtp.h
  HDRINST usr/include/linux/xdp_diag.h
  HDRINST usr/include/linux/pkt_cls.h
  HDRINST usr/include/linux/suspend_ioctls.h
  HDRINST usr/include/linux/vt.h
  HDRINST usr/include/linux/loadpin.h
  HDRINST usr/include/linux/dlm_plock.h
  HDRINST usr/include/linux/fb.h
  HDRINST usr/include/linux/max2175.h
  HDRINST usr/include/linux/sunrpc/debug.h
  HDRINST usr/include/linux/gsmmux.h
  HDRINST usr/include/linux/watchdog.h
  HDRINST usr/include/linux/vhost_types.h
  HDRINST usr/include/linux/vduse.h
  HDRINST usr/include/linux/ila.h
  HDRINST usr/include/linux/tdx-guest.h
  HDRINST usr/include/linux/close_range.h
  HDRINST usr/include/linux/ivtv.h
  HDRINST usr/include/linux/cryptouser.h
  HDRINST usr/include/linux/netfilter/xt_string.h
  HDRINST usr/include/linux/netfilter/nfnetlink_compat.h
  HDRINST usr/include/linux/netfilter/nf_nat.h
  HDRINST usr/include/linux/netfilter/xt_recent.h
  HDRINST usr/include/linux/netfilter/xt_addrtype.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_tcp.h
  HDRINST usr/include/linux/netfilter/xt_MARK.h
  HDRINST usr/include/linux/netfilter/xt_SYNPROXY.h
  HDRINST usr/include/linux/netfilter/xt_multiport.h
  HDRINST usr/include/linux/netfilter/nfnetlink.h
  HDRINST usr/include/linux/netfilter/xt_cgroup.h
  HDRINST usr/include/linux/netfilter/nf_synproxy.h
  HDRINST usr/include/linux/netfilter/xt_TCPOPTSTRIP.h
  HDRINST usr/include/linux/netfilter/nfnetlink_log.h
  HDRINST usr/include/linux/netfilter/xt_TPROXY.h
  HDRINST usr/include/linux/netfilter/xt_u32.h
  HDRINST usr/include/linux/netfilter/nfnetlink_osf.h
  HDRINST usr/include/linux/netfilter/xt_ecn.h
  HDRINST usr/include/linux/netfilter/xt_esp.h
  HDRINST usr/include/linux/netfilter/nfnetlink_hook.h
  HDRINST usr/include/linux/netfilter/xt_mac.h
  HDRINST usr/include/linux/netfilter/xt_comment.h
  HDRINST usr/include/linux/netfilter/xt_NFQUEUE.h
  HDRINST usr/include/linux/netfilter/xt_osf.h
  HDRINST usr/include/linux/netfilter/xt_hashlimit.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_sctp.h
  HDRINST usr/include/linux/netfilter/xt_socket.h
  HDRINST usr/include/linux/netfilter/xt_connmark.h
  HDRINST usr/include/linux/netfilter/xt_sctp.h
  HDRINST usr/include/linux/netfilter/xt_tcpudp.h
  HDRINST usr/include/linux/netfilter/xt_DSCP.h
  HDRINST usr/include/linux/netfilter/xt_time.h
  HDRINST usr/include/linux/netfilter/xt_IDLETIMER.h
  HDRINST usr/include/linux/netfilter/xt_policy.h
  HDRINST usr/include/linux/netfilter/xt_rpfilter.h
  HDRINST usr/include/linux/netfilter/xt_nfacct.h
  HDRINST usr/include/linux/netfilter/xt_SECMARK.h
  HDRINST usr/include/linux/netfilter/xt_length.h
  HDRINST usr/include/linux/netfilter/nfnetlink_cthelper.h
  HDRINST usr/include/linux/netfilter/xt_quota.h
  HDRINST usr/include/linux/netfilter/xt_CLASSIFY.h
  HDRINST usr/include/linux/netfilter/xt_ipcomp.h
  HDRINST usr/include/linux/netfilter/xt_iprange.h
  HDRINST usr/include/linux/netfilter/xt_bpf.h
  HDRINST usr/include/linux/netfilter/xt_LOG.h
  HDRINST usr/include/linux/netfilter/xt_rateest.h
  HDRINST usr/include/linux/netfilter/xt_CONNSECMARK.h
  HDRINST usr/include/linux/netfilter/xt_HMARK.h
  HDRINST usr/include/linux/netfilter/xt_CONNMARK.h
  HDRINST usr/include/linux/netfilter/xt_pkttype.h
  HDRINST usr/include/linux/netfilter/xt_ipvs.h
  HDRINST usr/include/linux/netfilter/xt_devgroup.h
  HDRINST usr/include/linux/netfilter/xt_AUDIT.h
  HDRINST usr/include/linux/netfilter/xt_realm.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_common.h
  HDRINST usr/include/linux/netfilter/xt_set.h
  HDRINST usr/include/linux/netfilter/xt_LED.h
  HDRINST usr/include/linux/netfilter/xt_connlabel.h
  HDRINST usr/include/linux/netfilter/xt_owner.h
  HDRINST usr/include/linux/netfilter/xt_dccp.h
  HDRINST usr/include/linux/netfilter/xt_limit.h
  HDRINST usr/include/linux/netfilter/xt_conntrack.h
  HDRINST usr/include/linux/netfilter/xt_TEE.h
  HDRINST usr/include/linux/netfilter/xt_RATEEST.h
  HDRINST usr/include/linux/netfilter/xt_connlimit.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set_list.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set_hash.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set_bitmap.h
  HDRINST usr/include/linux/netfilter/x_tables.h
  HDRINST usr/include/linux/netfilter/xt_dscp.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_ftp.h
  HDRINST usr/include/linux/netfilter/xt_cluster.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_tuple_common.h
  HDRINST usr/include/linux/netfilter/nf_log.h
  HDRINST usr/include/linux/netfilter/xt_tcpmss.h
  HDRINST usr/include/linux/netfilter/xt_NFLOG.h
  HDRINST usr/include/linux/netfilter/xt_l2tp.h
  HDRINST usr/include/linux/netfilter/xt_helper.h
  HDRINST usr/include/linux/netfilter/xt_statistic.h
  HDRINST usr/include/linux/netfilter/nfnetlink_queue.h
  HDRINST usr/include/linux/netfilter/nfnetlink_cttimeout.h
  HDRINST usr/include/linux/netfilter/xt_CT.h
  HDRINST usr/include/linux/netfilter/xt_CHECKSUM.h
  HDRINST usr/include/linux/netfilter/xt_connbytes.h
  HDRINST usr/include/linux/netfilter/xt_state.h
  HDRINST usr/include/linux/netfilter/nf_tables.h
  HDRINST usr/include/linux/netfilter/xt_mark.h
  HDRINST usr/include/linux/netfilter/xt_cpu.h
  HDRINST usr/include/linux/netfilter/nf_tables_compat.h
  HDRINST usr/include/linux/netfilter/xt_physdev.h
  HDRINST usr/include/linux/netfilter/nfnetlink_conntrack.h
  HDRINST usr/include/linux/netfilter/nfnetlink_acct.h
  HDRINST usr/include/linux/netfilter/xt_TCPMSS.h
  HDRINST usr/include/linux/tty_flags.h
  HDRINST usr/include/linux/if_phonet.h
  HDRINST usr/include/linux/elf-em.h
  HDRINST usr/include/linux/vm_sockets.h
  HDRINST usr/include/linux/dlmconstants.h
  HDRINST usr/include/linux/bsg.h
  HDRINST usr/include/linux/matroxfb.h
  HDRINST usr/include/linux/sysctl.h
  HDRINST usr/include/linux/unix_diag.h
  HDRINST usr/include/linux/pcitest.h
  HDRINST usr/include/linux/mman.h
  HDRINST usr/include/linux/if_plip.h
  HDRINST usr/include/linux/virtio_balloon.h
  HDRINST usr/include/linux/pidfd.h
  HDRINST usr/include/linux/f2fs.h
  HDRINST usr/include/linux/x25.h
  HDRINST usr/include/linux/if_cablemodem.h
  HDRINST usr/include/linux/utsname.h
  HDRINST usr/include/linux/counter.h
  HDRINST usr/include/linux/atm_tcp.h
  HDRINST usr/include/linux/atalk.h
  HDRINST usr/include/linux/virtio_rng.h
  HDRINST usr/include/linux/vboxguest.h
  HDRINST usr/include/linux/ipmi_ssif_bmc.h
  HDRINST usr/include/linux/bpf_perf_event.h
  HDRINST usr/include/linux/nfs_mount.h
  HDRINST usr/include/linux/sonet.h
  HDRINST usr/include/linux/netfilter.h
  HDRINST usr/include/linux/keyctl.h
  HDRINST usr/include/linux/nl80211.h
  HDRINST usr/include/linux/misc/bcm_vk.h
  HDRINST usr/include/linux/audit.h
  HDRINST usr/include/linux/tipc_config.h
  HDRINST usr/include/linux/tipc_sockets_diag.h
  HDRINST usr/include/linux/futex.h
  HDRINST usr/include/linux/sev-guest.h
  HDRINST usr/include/linux/ublk_cmd.h
  HDRINST usr/include/linux/types.h
  HDRINST usr/include/linux/virtio_input.h
  HDRINST usr/include/linux/if_slip.h
  HDRINST usr/include/linux/personality.h
  HDRINST usr/include/linux/openat2.h
  HDRINST usr/include/linux/poll.h
  HDRINST usr/include/linux/posix_acl.h
  HDRINST usr/include/linux/smc_diag.h
  HDRINST usr/include/linux/snmp.h
  HDRINST usr/include/linux/errqueue.h
  HDRINST usr/include/linux/if_tunnel.h
  HDRINST usr/include/linux/fanotify.h
  HDRINST usr/include/linux/kernel.h
  HDRINST usr/include/linux/rtnetlink.h
  HDRINST usr/include/linux/rpl.h
  HDRINST usr/include/linux/memfd.h
  HDRINST usr/include/linux/serial_core.h
  HDRINST usr/include/linux/dns_resolver.h
  HDRINST usr/include/linux/pr.h
  HDRINST usr/include/linux/atm_eni.h
  HDRINST usr/include/linux/lp.h
  HDRINST usr/include/linux/virtio_mem.h
  HDRINST usr/include/linux/ultrasound.h
  HDRINST usr/include/linux/sctp.h
  HDRINST usr/include/linux/uio.h
  HDRINST usr/include/linux/tcp_metrics.h
  HDRINST usr/include/linux/wwan.h
  HDRINST usr/include/linux/atmbr2684.h
  HDRINST usr/include/linux/in_route.h
  HDRINST usr/include/linux/qemu_fw_cfg.h
  HDRINST usr/include/linux/if_macsec.h
  HDRINST usr/include/linux/usb/charger.h
  HDRINST usr/include/linux/usb/g_uvc.h
  HDRINST usr/include/linux/usb/gadgetfs.h
  HDRINST usr/include/linux/usb/raw_gadget.h
  HDRINST usr/include/linux/usb/cdc-wdm.h
  HDRINST usr/include/linux/usb/g_printer.h
  HDRINST usr/include/linux/usb/midi.h
  HDRINST usr/include/linux/usb/tmc.h
  HDRINST usr/include/linux/usb/video.h
  HDRINST usr/include/linux/usb/functionfs.h
  HDRINST usr/include/linux/usb/audio.h
  HDRINST usr/include/linux/usb/ch11.h
  HDRINST usr/include/linux/usb/ch9.h
  HDRINST usr/include/linux/usb/cdc.h
  HDRINST usr/include/linux/jffs2.h
  HDRINST usr/include/linux/ax25.h
  HDRINST usr/include/linux/auto_fs.h
  HDRINST usr/include/linux/tiocl.h
  HDRINST usr/include/linux/psci.h
  HDRINST usr/include/linux/scc.h
  HDRINST usr/include/linux/swab.h
  HDRINST usr/include/linux/cec.h
  HDRINST usr/include/linux/kfd_ioctl.h
  HDRINST usr/include/linux/smc.h
  HDRINST usr/include/linux/qrtr.h
  HDRINST usr/include/linux/screen_info.h
  HDRINST usr/include/linux/nfsacl.h
  HDRINST usr/include/linux/seg6_hmac.h
  HDRINST usr/include/linux/gameport.h
  HDRINST usr/include/linux/wireless.h
  HDRINST usr/include/linux/fdreg.h
  HDRINST usr/include/linux/cciss_defs.h
  HDRINST usr/include/linux/serial_reg.h
  HDRINST usr/include/linux/perf_event.h
  HDRINST usr/include/linux/in6.h
  HDRINST usr/include/linux/hid.h
  HDRINST usr/include/linux/netlink.h
  HDRINST usr/include/linux/fuse.h
  HDRINST usr/include/linux/magic.h
  HDRINST usr/include/linux/ioam6_iptunnel.h
  HDRINST usr/include/linux/stm.h
  HDRINST usr/include/linux/vsockmon.h
  HDRINST usr/include/linux/seg6.h
  HDRINST usr/include/linux/idxd.h
  HDRINST usr/include/linux/nitro_enclaves.h
  HDRINST usr/include/linux/ptrace.h
  HDRINST usr/include/linux/ioam6_genl.h
  HDRINST usr/include/linux/qnx4_fs.h
  HDRINST usr/include/linux/fsl_mc.h
  HDRINST usr/include/linux/net_tstamp.h
  HDRINST usr/include/linux/msg.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_TTL.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ttl.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ah.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ECN.h
  HDRINST usr/include/linux/netfilter_ipv4/ip_tables.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ecn.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_REJECT.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_LOG.h
  HDRINST usr/include/linux/sem.h
  HDRINST usr/include/linux/net_namespace.h
  HDRINST usr/include/linux/radeonfb.h
  HDRINST usr/include/linux/tee.h
  HDRINST usr/include/linux/udp.h
  HDRINST usr/include/linux/virtio_bt.h
  HDRINST usr/include/linux/v4l2-subdev.h
  HDRINST usr/include/linux/posix_acl_xattr.h
  HDRINST usr/include/linux/v4l2-mediabus.h
  HDRINST usr/include/linux/atmapi.h
  HDRINST usr/include/linux/raid/md_p.h
  HDRINST usr/include/linux/raid/md_u.h
  HDRINST usr/include/linux/zorro_ids.h
  HDRINST usr/include/linux/nbd.h
  HDRINST usr/include/linux/isst_if.h
  HDRINST usr/include/linux/rxrpc.h
  HDRINST usr/include/linux/unistd.h
  HDRINST usr/include/linux/if_arp.h
  HDRINST usr/include/linux/atm_zatm.h
  HDRINST usr/include/linux/io_uring.h
  HDRINST usr/include/linux/if_fddi.h
  HDRINST usr/include/linux/bpqether.h
  HDRINST usr/include/linux/sysinfo.h
  HDRINST usr/include/linux/auto_dev-ioctl.h
  HDRINST usr/include/linux/nfs4_mount.h
  HDRINST usr/include/linux/keyboard.h
  HDRINST usr/include/linux/virtio_mmio.h
  HDRINST usr/include/linux/input.h
  HDRINST usr/include/linux/qnxtypes.h
  HDRINST usr/include/linux/mdio.h
  HDRINST usr/include/linux/lwtunnel.h
  HDRINST usr/include/linux/gfs2_ondisk.h
  HDRINST usr/include/linux/eventfd.h
  HDRINST usr/include/linux/nfs4.h
  HDRINST usr/include/linux/ptp_clock.h
  HDRINST usr/include/linux/nubus.h
  HDRINST usr/include/linux/if_bonding.h
  HDRINST usr/include/linux/kcov.h
  HDRINST usr/include/linux/fadvise.h
  HDRINST usr/include/linux/taskstats.h
  HDRINST usr/include/linux/veth.h
  HDRINST usr/include/linux/atm.h
  HDRINST usr/include/linux/ipmi.h
  HDRINST usr/include/linux/kdev_t.h
  HDRINST usr/include/linux/mount.h
  HDRINST usr/include/linux/shm.h
  HDRINST usr/include/linux/resource.h
  HDRINST usr/include/linux/prctl.h
  HDRINST usr/include/linux/watch_queue.h
  HDRINST usr/include/linux/sched.h
  LD      /kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
  HDRINST usr/include/linux/phonet.h
  HDRINST usr/include/linux/random.h
  HDRINST usr/include/linux/tty.h
  HDRINST usr/include/linux/apm_bios.h
  HDRINST usr/include/linux/fd.h
  HDRINST usr/include/linux/um_timetravel.h
  HDRINST usr/include/linux/tls.h
  HDRINST usr/include/linux/rpmsg_types.h
  HDRINST usr/include/linux/pfrut.h
  HDRINST usr/include/linux/mei.h
  HDRINST usr/include/linux/fsi.h
  HDRINST usr/include/linux/rds.h
  HDRINST usr/include/linux/if_x25.h
  HDRINST usr/include/linux/param.h
  HDRINST usr/include/linux/netdevice.h
  HDRINST usr/include/linux/binfmts.h
  HDRINST usr/include/linux/if_pppox.h
  HDRINST usr/include/linux/sockios.h
  HDRINST usr/include/linux/kcm.h
  HDRINST usr/include/linux/virtio_9p.h
  HDRINST usr/include/linux/genwqe/genwqe_card.h
  HDRINST usr/include/linux/if_tun.h
  HDRINST usr/include/linux/ext4.h
  HDRINST usr/include/linux/if_ether.h
  HDRINST usr/include/linux/kvm_para.h
  HDRINST usr/include/linux/kernel-page-flags.h
  HDRINST usr/include/linux/cdrom.h
  HDRINST usr/include/linux/un.h
  HDRINST usr/include/linux/module.h
  HDRINST usr/include/linux/mqueue.h
  HDRINST usr/include/linux/a.out.h
  AR      /kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
  HDRINST usr/include/linux/input-event-codes.h
  HDRINST usr/include/linux/coda.h
  HDRINST usr/include/linux/rio_mport_cdev.h
  HDRINST usr/include/linux/ipsec.h
  HDRINST usr/include/linux/blkpg.h
  HDRINST usr/include/linux/blkzoned.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_arpreply.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_redirect.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_nflog.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_802_3.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_nat.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_mark_m.h
  HDRINST usr/include/linux/netfilter_bridge/ebtables.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_vlan.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_limit.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_log.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_stp.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_pkttype.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_ip.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_ip6.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_arp.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_mark_t.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_among.h
  HDRINST usr/include/linux/reiserfs_fs.h
  HDRINST usr/include/linux/cciss_ioctl.h
  HDRINST usr/include/linux/fsmap.h
  HDRINST usr/include/linux/smiapp.h
  HDRINST usr/include/linux/switchtec_ioctl.h
  HDRINST usr/include/linux/atmdev.h
  HDRINST usr/include/linux/hpet.h
  HDRINST usr/include/linux/virtio_config.h
  HDRINST usr/include/linux/string.h
  HDRINST usr/include/linux/kfd_sysfs.h
  HDRINST usr/include/linux/inet_diag.h
  HDRINST usr/include/linux/netdev.h
  HDRINST usr/include/linux/xattr.h
  HDRINST usr/include/linux/iommufd.h
  HDRINST usr/include/linux/user_events.h
  HDRINST usr/include/linux/errno.h
  HDRINST usr/include/linux/i2o-dev.h
  HDRINST usr/include/linux/pg.h
  HDRINST usr/include/linux/icmp.h
  HDRINST usr/include/linux/if_bridge.h
  HDRINST usr/include/linux/thermal.h
  HDRINST usr/include/linux/uinput.h
  HDRINST usr/include/linux/handshake.h
  HDRINST usr/include/linux/dqblk_xfs.h
  HDRINST usr/include/linux/v4l2-common.h
  HDRINST usr/include/linux/nvram.h
  HDRINST usr/include/linux/if_vlan.h
  HDRINST usr/include/linux/uhid.h
  HDRINST usr/include/linux/omap3isp.h
  HDRINST usr/include/linux/rose.h
  HDRINST usr/include/linux/phantom.h
  HDRINST usr/include/linux/ipmi_msgdefs.h
  HDRINST usr/include/linux/bcm933xx_hcs.h
  HDRINST usr/include/linux/bpf.h
  HDRINST usr/include/linux/mempolicy.h
  HDRINST usr/include/linux/efs_fs_sb.h
  CC      /kernel/build64-default/tools/objtool/weak.o
  HDRINST usr/include/linux/nexthop.h
  CC      /kernel/build64-default/tools/objtool/check.o
  HDRINST usr/include/linux/net_dropmon.h
  HDRINST usr/include/linux/surface_aggregator/cdev.h
  HDRINST usr/include/linux/surface_aggregator/dtx.h
  HDRINST usr/include/linux/net.h
  CC      /kernel/build64-default/tools/objtool/special.o
  HDRINST usr/include/linux/mii.h
  CC      /kernel/build64-default/tools/objtool/builtin-check.o
  HDRINST usr/include/linux/virtio_pcidev.h
  HDRINST usr/include/linux/termios.h
  CC      /kernel/build64-default/tools/objtool/elf.o
  MKDIR   /kernel/build64-default/tools/objtool/arch/x86/
  HDRINST usr/include/linux/cgroupstats.h
  HDRINST usr/include/linux/mpls.h
  MKDIR   /kernel/build64-default/tools/objtool/arch/x86/lib/
  CC      /kernel/build64-default/tools/objtool/objtool.o
  HDRINST usr/include/linux/iommu.h
  CC      /kernel/build64-default/tools/objtool/arch/x86/special.o
  CC      /kernel/build64-default/tools/objtool/orc_gen.o
  HDRINST usr/include/linux/toshiba.h
  HDRINST usr/include/linux/virtio_scsi.h
  CC      /kernel/build64-default/tools/objtool/orc_dump.o
  HDRINST usr/include/linux/zorro.h
  GEN     /kernel/build64-default/tools/objtool/arch/x86/lib/inat-tables.c
  HDRINST usr/include/linux/chio.h
  HDRINST usr/include/linux/pkt_sched.h
  CC      /kernel/build64-default/tools/objtool/libstring.o
  CC      /kernel/build64-default/tools/objtool/libctype.o
  HDRINST usr/include/linux/cramfs_fs.h
  CC      /kernel/build64-default/tools/objtool/str_error_r.o
  HDRINST usr/include/linux/nfs3.h
  CC      /kernel/build64-default/tools/objtool/librbtree.o
  HDRINST usr/include/linux/vfio_ccw.h
  HDRINST usr/include/linux/ncsi.h
  HDRINST usr/include/linux/atm_nicstar.h
  HDRINST usr/include/linux/virtio_net.h
  HDRINST usr/include/linux/ioctl.h
  HDRINST usr/include/linux/stddef.h
  HDRINST usr/include/linux/limits.h
  HDRINST usr/include/linux/ipmi_bmc.h
  HDRINST usr/include/linux/netfilter_arp.h
  HDRINST usr/include/linux/if_addr.h
  HDRINST usr/include/linux/rpmsg.h
  HDRINST usr/include/linux/media-bus-format.h
  HDRINST usr/include/linux/kernelcapi.h
  HDRINST usr/include/linux/ppp_defs.h
  HDRINST usr/include/linux/ethtool.h
  HDRINST usr/include/linux/aspeed-video.h
  HDRINST usr/include/linux/hdlc.h
  HDRINST usr/include/linux/fscrypt.h
  HDRINST usr/include/linux/batadv_packet.h
  HDRINST usr/include/linux/uuid.h
  HDRINST usr/include/linux/capi.h
  HDRINST usr/include/linux/mptcp.h
  HDRINST usr/include/linux/hidraw.h
  HDRINST usr/include/linux/virtio_console.h
  HDRINST usr/include/linux/irqnr.h
  HDRINST usr/include/linux/coresight-stm.h
  HDRINST usr/include/linux/cxl_mem.h
  HDRINST usr/include/linux/iso_fs.h
  HDRINST usr/include/linux/virtio_blk.h
  HDRINST usr/include/linux/udf_fs_i.h
  HDRINST usr/include/linux/coff.h
  HDRINST usr/include/linux/dma-buf.h
  HDRINST usr/include/linux/ife.h
  HDRINST usr/include/linux/agpgart.h
  HDRINST usr/include/linux/socket.h
  HDRINST usr/include/linux/nilfs2_ondisk.h
  HDRINST usr/include/linux/connector.h
  HDRINST usr/include/linux/auto_fs4.h
  HDRINST usr/include/linux/bt-bmc.h
  HDRINST usr/include/linux/map_to_7segment.h
  HDRINST usr/include/linux/tc_act/tc_skbedit.h
  HDRINST usr/include/linux/tc_act/tc_ctinfo.h
  HDRINST usr/include/linux/tc_act/tc_defact.h
  HDRINST usr/include/linux/tc_act/tc_gact.h
  HDRINST usr/include/linux/tc_act/tc_vlan.h
  HDRINST usr/include/linux/tc_act/tc_skbmod.h
  HDRINST usr/include/linux/tc_act/tc_sample.h
  HDRINST usr/include/linux/tc_act/tc_tunnel_key.h
  HDRINST usr/include/linux/tc_act/tc_gate.h
  HDRINST usr/include/linux/tc_act/tc_mirred.h
  HDRINST usr/include/linux/tc_act/tc_nat.h
  HDRINST usr/include/linux/tc_act/tc_csum.h
  HDRINST usr/include/linux/tc_act/tc_connmark.h
  HDRINST usr/include/linux/tc_act/tc_ife.h
  HDRINST usr/include/linux/tc_act/tc_mpls.h
  CC      /kernel/build64-default/tools/objtool/arch/x86/decode.o
  HDRINST usr/include/linux/tc_act/tc_ct.h
  HDRINST usr/include/linux/tc_act/tc_pedit.h
  HDRINST usr/include/linux/tc_act/tc_bpf.h
  HDRINST usr/include/linux/tc_act/tc_ipt.h
  HDRINST usr/include/linux/netrom.h
  HDRINST usr/include/linux/joystick.h
  HDRINST usr/include/linux/falloc.h
  HDRINST usr/include/linux/cycx_cfm.h
  HDRINST usr/include/linux/omapfb.h
  HDRINST usr/include/linux/msdos_fs.h
  HDRINST usr/include/linux/virtio_types.h
  HDRINST usr/include/linux/mroute.h
  HDRINST usr/include/linux/psample.h
  HDRINST usr/include/linux/ipv6.h
  HDRINST usr/include/linux/dw100.h
  HDRINST usr/include/linux/psp-sev.h
  HDRINST usr/include/linux/vfio.h
  HDRINST usr/include/linux/if_ppp.h
  HDRINST usr/include/linux/byteorder/big_endian.h
  HDRINST usr/include/linux/byteorder/little_endian.h
  HDRINST usr/include/linux/comedi.h
  HDRINST usr/include/linux/scif_ioctl.h
  HDRINST usr/include/linux/timerfd.h
  HDRINST usr/include/linux/time_types.h
  HDRINST usr/include/linux/firewire-constants.h
  HDRINST usr/include/linux/virtio_snd.h
  HDRINST usr/include/linux/ppp-ioctl.h
  HDRINST usr/include/linux/fib_rules.h
  HDRINST usr/include/linux/gen_stats.h
  HDRINST usr/include/linux/virtio_iommu.h
  HDRINST usr/include/linux/genetlink.h
  HDRINST usr/include/linux/uvcvideo.h
  HDRINST usr/include/linux/pfkeyv2.h
  HDRINST usr/include/linux/soundcard.h
  HDRINST usr/include/linux/times.h
  HDRINST usr/include/linux/nfc.h
  HDRINST usr/include/linux/affs_hardblocks.h
  HDRINST usr/include/linux/nilfs2_api.h
  HDRINST usr/include/linux/rseq.h
  HDRINST usr/include/linux/caif/caif_socket.h
  HDRINST usr/include/linux/caif/if_caif.h
  HDRINST usr/include/linux/i2c-dev.h
  HDRINST usr/include/linux/cuda.h
  HDRINST usr/include/linux/mei_uuid.h
  HDRINST usr/include/linux/cn_proc.h
  HDRINST usr/include/linux/parport.h
  HDRINST usr/include/linux/v4l2-controls.h
  HDRINST usr/include/linux/hsi/cs-protocol.h
  HDRINST usr/include/linux/hsi/hsi_char.h
  HDRINST usr/include/linux/seg6_genl.h
  HDRINST usr/include/linux/am437x-vpfe.h
  HDRINST usr/include/linux/amt.h
  HDRINST usr/include/linux/netconf.h
  HDRINST usr/include/linux/erspan.h
  HDRINST usr/include/linux/nsfs.h
  HDRINST usr/include/linux/xilinx-v4l2-controls.h
  HDRINST usr/include/linux/aspeed-p2a-ctrl.h
  HDRINST usr/include/linux/vfio_zdev.h
  HDRINST usr/include/linux/serio.h
  HDRINST usr/include/linux/acrn.h
  HDRINST usr/include/linux/nfs2.h
  HDRINST usr/include/linux/virtio_pci.h
  HDRINST usr/include/linux/ipc.h
  HDRINST usr/include/linux/ethtool_netlink.h
  HDRINST usr/include/linux/kd.h
  HDRINST usr/include/linux/elf.h
  HDRINST usr/include/linux/videodev2.h
  HDRINST usr/include/linux/if_alg.h
  HDRINST usr/include/linux/sonypi.h
  HDRINST usr/include/linux/fsverity.h
  HDRINST usr/include/linux/if.h
  HDRINST usr/include/linux/btrfs.h
  HDRINST usr/include/linux/vm_sockets_diag.h
  HDRINST usr/include/linux/netfilter_bridge.h
  HDRINST usr/include/linux/packet_diag.h
  HDRINST usr/include/linux/netfilter_ipv4.h
  HDRINST usr/include/linux/kvm.h
  HDRINST usr/include/linux/pci.h
  HDRINST usr/include/linux/if_addrlabel.h
  HDRINST usr/include/linux/hdlcdrv.h
  HDRINST usr/include/linux/cfm_bridge.h
  HDRINST usr/include/linux/fiemap.h
  HDRINST usr/include/linux/dm-ioctl.h
  HDRINST usr/include/linux/aspeed-lpc-ctrl.h
  HDRINST usr/include/linux/atmioc.h
  HDRINST usr/include/linux/dlm.h
  HDRINST usr/include/linux/pci_regs.h
  HDRINST usr/include/linux/cachefiles.h
  HDRINST usr/include/linux/membarrier.h
  HDRINST usr/include/linux/nfs_idmap.h
  HDRINST usr/include/linux/ip.h
  HDRINST usr/include/linux/atm_he.h
  HDRINST usr/include/linux/nfsd/export.h
  HDRINST usr/include/linux/nfsd/stats.h
  HDRINST usr/include/linux/nfsd/debug.h
  HDRINST usr/include/linux/nfsd/cld.h
  HDRINST usr/include/linux/ip_vs.h
  HDRINST usr/include/linux/vmcore.h
  HDRINST usr/include/linux/vbox_vmmdev_types.h
  HDRINST usr/include/linux/dvb/osd.h
  HDRINST usr/include/linux/dvb/dmx.h
  HDRINST usr/include/linux/dvb/net.h
  HDRINST usr/include/linux/dvb/frontend.h
  HDRINST usr/include/linux/dvb/ca.h
  HDRINST usr/include/linux/dvb/version.h
  HDRINST usr/include/linux/dvb/video.h
  HDRINST usr/include/linux/dvb/audio.h
  HDRINST usr/include/linux/nfs.h
  HDRINST usr/include/linux/if_link.h
  HDRINST usr/include/linux/wait.h
  HDRINST usr/include/linux/icmpv6.h
  HDRINST usr/include/linux/media.h
  HDRINST usr/include/linux/seg6_local.h
  HDRINST usr/include/linux/tps6594_pfsm.h
  HDRINST usr/include/linux/openvswitch.h
  HDRINST usr/include/linux/atmsap.h
  HDRINST usr/include/linux/bpfilter.h
  HDRINST usr/include/linux/fpga-dfl.h
  HDRINST usr/include/linux/userio.h
  HDRINST usr/include/linux/signal.h
  HDRINST usr/include/linux/map_to_14segment.h
  HDRINST usr/include/linux/hdreg.h
  HDRINST usr/include/linux/utime.h
  HDRINST usr/include/linux/usbdevice_fs.h
  HDRINST usr/include/linux/timex.h
  HDRINST usr/include/linux/if_fc.h
  HDRINST usr/include/linux/hw_breakpoint.h
  HDRINST usr/include/linux/reiserfs_xattr.h
  HDRINST usr/include/linux/quota.h
  HDRINST usr/include/linux/ioprio.h
  HDRINST usr/include/linux/eventpoll.h
  HDRINST usr/include/linux/atmclip.h
  HDRINST usr/include/linux/can.h
  HDRINST usr/include/linux/if_team.h
  HDRINST usr/include/linux/usbip.h
  HDRINST usr/include/linux/stat.h
  HDRINST usr/include/linux/fou.h
  HDRINST usr/include/linux/hash_info.h
  HDRINST usr/include/linux/ppp-comp.h
  HDRINST usr/include/linux/ip6_tunnel.h
  HDRINST usr/include/linux/tipc_netlink.h
  HDRINST usr/include/linux/in.h
  HDRINST usr/include/linux/wireguard.h
  HDRINST usr/include/linux/btf.h
  HDRINST usr/include/linux/batman_adv.h
  HDRINST usr/include/linux/fcntl.h
  HDRINST usr/include/linux/if_ltalk.h
  HDRINST usr/include/linux/i2c.h
  HDRINST usr/include/linux/atm_idt77105.h
  HDRINST usr/include/linux/kexec.h
  HDRINST usr/include/linux/arm_sdei.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6_tables.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_ah.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_NPT.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_rt.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_REJECT.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_opts.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_srh.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_LOG.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_mh.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_HL.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_hl.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_frag.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_ipv6header.h
  HDRINST usr/include/linux/minix_fs.h
  HDRINST usr/include/linux/aio_abi.h
  HDRINST usr/include/linux/pktcdvd.h
  HDRINST usr/include/linux/libc-compat.h
  HDRINST usr/include/linux/atmlec.h
  HDRINST usr/include/linux/signalfd.h
  HDRINST usr/include/linux/bpf_common.h
  HDRINST usr/include/linux/seg6_iptunnel.h
  HDRINST usr/include/linux/synclink.h
  HDRINST usr/include/linux/mpls_iptunnel.h
  HDRINST usr/include/linux/mctp.h
  HDRINST usr/include/linux/if_xdp.h
  HDRINST usr/include/linux/llc.h
  HDRINST usr/include/linux/atmsvc.h
  HDRINST usr/include/linux/sed-opal.h
  HDRINST usr/include/linux/sock_diag.h
  HDRINST usr/include/linux/time.h
  HDRINST usr/include/linux/securebits.h
  HDRINST usr/include/linux/fsl_hypervisor.h
  HDRINST usr/include/linux/if_hippi.h
  HDRINST usr/include/linux/seccomp.h
  HDRINST usr/include/linux/oom.h
  HDRINST usr/include/linux/filter.h
  HDRINST usr/include/linux/inotify.h
  HDRINST usr/include/linux/rfkill.h
  HDRINST usr/include/linux/reboot.h
  HDRINST usr/include/linux/can/vxcan.h
  HDRINST usr/include/linux/can/j1939.h
  HDRINST usr/include/linux/can/netlink.h
  HDRINST usr/include/linux/can/bcm.h
  HDRINST usr/include/linux/can/raw.h
  HDRINST usr/include/linux/can/gw.h
  HDRINST usr/include/linux/can/error.h
  HDRINST usr/include/linux/can/isotp.h
  HDRINST usr/include/linux/if_eql.h
  HDRINST usr/include/linux/psp-dbc.h
  HDRINST usr/include/linux/hiddev.h
  HDRINST usr/include/linux/blktrace_api.h
  HDRINST usr/include/linux/ccs.h
  HDRINST usr/include/linux/ioam6.h
  HDRINST usr/include/linux/hsr_netlink.h
  HDRINST usr/include/linux/mmc/ioctl.h
  HDRINST usr/include/linux/bfs_fs.h
  HDRINST usr/include/linux/rio_cm_cdev.h
  HDRINST usr/include/linux/uleds.h
  HDRINST usr/include/linux/mrp_bridge.h
  HDRINST usr/include/linux/adb.h
  HDRINST usr/include/linux/pmu.h
  HDRINST usr/include/linux/udmabuf.h
  HDRINST usr/include/linux/kcmp.h
  HDRINST usr/include/linux/dma-heap.h
  HDRINST usr/include/linux/userfaultfd.h
  HDRINST usr/include/linux/netfilter_arp/arpt_mangle.h
  HDRINST usr/include/linux/netfilter_arp/arp_tables.h
  HDRINST usr/include/linux/tipc.h
  HDRINST usr/include/linux/virtio_ids.h
  HDRINST usr/include/linux/l2tp.h
  HDRINST usr/include/linux/devlink.h
  HDRINST usr/include/linux/virtio_gpio.h
  HDRINST usr/include/linux/dcbnl.h
  HDRINST usr/include/linux/cyclades.h
  HDRINST usr/include/sound/intel/avs/tokens.h
  HDRINST usr/include/sound/sof/fw.h
  HDRINST usr/include/sound/sof/abi.h
  HDRINST usr/include/sound/sof/header.h
  HDRINST usr/include/sound/sof/tokens.h
  HDRINST usr/include/sound/sfnt_info.h
  HDRINST usr/include/sound/usb_stream.h
  HDRINST usr/include/sound/asequencer.h
  HDRINST usr/include/sound/tlv.h
  HDRINST usr/include/sound/asoc.h
  HDRINST usr/include/sound/asound.h
  HDRINST usr/include/sound/sb16_csp.h
  HDRINST usr/include/sound/compress_offload.h
  HDRINST usr/include/sound/hdsp.h
  HDRINST usr/include/sound/emu10k1.h
  HDRINST usr/include/sound/snd_ar_tokens.h
  HDRINST usr/include/sound/snd_sst_tokens.h
  HDRINST usr/include/sound/asound_fm.h
  HDRINST usr/include/sound/hdspm.h
  HDRINST usr/include/sound/compress_params.h
  HDRINST usr/include/sound/firewire.h
  HDRINST usr/include/sound/skl-tplg-interface.h
  HDRINST usr/include/scsi/scsi_bsg_ufs.h
  HDRINST usr/include/scsi/scsi_netlink_fc.h
  HDRINST usr/include/scsi/scsi_bsg_mpi3mr.h
  HDRINST usr/include/scsi/fc/fc_ns.h
  HDRINST usr/include/scsi/fc/fc_fs.h
  HDRINST usr/include/scsi/fc/fc_els.h
  HDRINST usr/include/scsi/fc/fc_gs.h
  HDRINST usr/include/scsi/scsi_bsg_fc.h
  HDRINST usr/include/scsi/cxlflash_ioctl.h
  HDRINST usr/include/scsi/scsi_netlink.h
  HDRINST usr/include/linux/version.h
  HDRINST usr/include/asm/processor-flags.h
  HDRINST usr/include/asm/auxvec.h
  HDRINST usr/include/asm/svm.h
  HDRINST usr/include/asm/bitsperlong.h
  HDRINST usr/include/asm/kvm_perf.h
  HDRINST usr/include/asm/mce.h
  HDRINST usr/include/asm/posix_types.h
  HDRINST usr/include/asm/msr.h
  HDRINST usr/include/asm/sigcontext32.h
  HDRINST usr/include/asm/mman.h
  HDRINST usr/include/asm/shmbuf.h
  HDRINST usr/include/asm/e820.h
  HDRINST usr/include/asm/posix_types_64.h
  HDRINST usr/include/asm/vsyscall.h
  HDRINST usr/include/asm/msgbuf.h
  HDRINST usr/include/asm/swab.h
  HDRINST usr/include/asm/statfs.h
  HDRINST usr/include/asm/posix_types_x32.h
  HDRINST usr/include/asm/ptrace.h
  HDRINST usr/include/asm/unistd.h
  HDRINST usr/include/asm/ist.h
  HDRINST usr/include/asm/prctl.h
  HDRINST usr/include/asm/boot.h
  HDRINST usr/include/asm/sigcontext.h
  HDRINST usr/include/asm/posix_types_32.h
  HDRINST usr/include/asm/kvm_para.h
  HDRINST usr/include/asm/a.out.h
  HDRINST usr/include/asm/mtrr.h
  HDRINST usr/include/asm/amd_hsmp.h
  HDRINST usr/include/asm/hwcap2.h
  HDRINST usr/include/asm/vm86.h
  HDRINST usr/include/asm/ptrace-abi.h
  HDRINST usr/include/asm/vmx.h
  HDRINST usr/include/asm/ldt.h
  HDRINST usr/include/asm/perf_regs.h
  HDRINST usr/include/asm/kvm.h
  HDRINST usr/include/asm/debugreg.h
  HDRINST usr/include/asm/signal.h
  HDRINST usr/include/asm/bootparam.h
  HDRINST usr/include/asm/siginfo.h
  HDRINST usr/include/asm/hw_breakpoint.h
  HDRINST usr/include/asm/stat.h
  HDRINST usr/include/asm/setup.h
  HDRINST usr/include/asm/sembuf.h
  HDRINST usr/include/asm/sgx.h
  HDRINST usr/include/asm/ucontext.h
  HDRINST usr/include/asm/byteorder.h
  HDRINST usr/include/asm/unistd_64.h
  HDRINST usr/include/asm/ioctls.h
  HDRINST usr/include/asm/bpf_perf_event.h
  HDRINST usr/include/asm/types.h
  HDRINST usr/include/asm/poll.h
  HDRINST usr/include/asm/resource.h
  HDRINST usr/include/asm/param.h
  HDRINST usr/include/asm/sockios.h
  HDRINST usr/include/asm/errno.h
  HDRINST usr/include/asm/unistd_x32.h
  HDRINST usr/include/asm/termios.h
  HDRINST usr/include/asm/ioctl.h
  HDRINST usr/include/asm/socket.h
  HDRINST usr/include/asm/unistd_32.h
  HDRINST usr/include/asm/termbits.h
  HDRINST usr/include/asm/fcntl.h
  HDRINST usr/include/asm/ipcbuf.h
  HOSTLD  scripts/mod/modpost
  CC      kernel/bounds.s
  CHKSHA1 ../include/linux/atomic/atomic-arch-fallback.h
  CHKSHA1 ../include/linux/atomic/atomic-instrumented.h
  CHKSHA1 ../include/linux/atomic/atomic-long.h
  UPD     include/generated/timeconst.h
  UPD     include/generated/bounds.h
  CC      arch/x86/kernel/asm-offsets.s
  LD      /kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
  UPD     include/generated/asm-offsets.h
  CALL    ../scripts/checksyscalls.sh
  LD      /kernel/build64-default/tools/objtool/objtool-in.o
  LINK    /kernel/build64-default/tools/objtool/objtool
  LDS     scripts/module.lds
  CC      ipc/compat.o
  CC      ipc/util.o
  HOSTCC  usr/gen_init_cpio
  CC      ipc/msgutil.o
  CC      ipc/msg.o
  CC      init/main.o
  AR      certs/built-in.a
  CC      ipc/sem.o
  CC      io_uring/io_uring.o
  CC      io_uring/xattr.o
  CC      ipc/shm.o
  CC      init/do_mounts.o
  CC      io_uring/nop.o
  CC      ipc/syscall.o
  CC      ipc/ipc_sysctl.o
  UPD     init/utsversion-tmp.h
  AR      arch/x86/video/built-in.a
  CC      arch/x86/pci/i386.o
  CC      io_uring/fs.o
  CC      mm/filemap.o
  CC      ipc/mqueue.o
  CC      security/commoncap.o
  AS      arch/x86/lib/clear_page_64.o
  CC      arch/x86/realmode/init.o
  CC [M]  arch/x86/video/fbdev.o
  CC      arch/x86/power/cpu.o
  CC      init/do_mounts_initrd.o
  AR      virt/lib/built-in.a
  AR      arch/x86/ia32/built-in.a
  AR      drivers/cache/built-in.a
  CC      arch/x86/power/hibernate_64.o
  CC      arch/x86/lib/cmdline.o
  CC      block/partitions/core.o
  AS      arch/x86/crypto/aesni-intel_asm.o
  AR      arch/x86/net/built-in.a
  CC      security/keys/gc.o
  CC      net/llc/llc_core.o
  AR      drivers/irqchip/built-in.a
  CC      net/core/sock.o
  CC [M]  virt/lib/irqbypass.o
  AR      arch/x86/platform/atom/built-in.a
  CC      arch/x86/events/amd/core.o
  CC      arch/x86/mm/pat/set_memory.o
  CC      fs/notify/dnotify/dnotify.o
  CC      security/keys/key.o
  CC      arch/x86/mm/pat/memtype.o
  AR      drivers/bus/mhi/built-in.a
  CC      sound/core/seq/seq.o
  CC      arch/x86/kernel/fpu/init.o
  CC      arch/x86/kernel/acpi/boot.o
  AR      arch/x86/platform/ce4100/built-in.a
  CC      lib/kunit/hooks.o
  CC      arch/x86/kernel/apic/apic.o
  CC      arch/x86/kernel/cpu/mce/core.o
  CC      arch/x86/entry/vdso/vma.o
  AR      drivers/bus/built-in.a
  CC      mm/kasan/common.o
  CC      kernel/sched/core.o
  CC      arch/x86/platform/efi/memmap.o
  CC      arch/x86/crypto/aesni-intel_glue.o
  AR      drivers/phy/allwinner/built-in.a
  CC      crypto/api.o
  AR      drivers/phy/amlogic/built-in.a
  AR      drivers/phy/broadcom/built-in.a
  AR      drivers/phy/cadence/built-in.a
  AS      arch/x86/lib/cmpxchg16b_emu.o
  AR      drivers/phy/freescale/built-in.a
  CC      arch/x86/lib/copy_mc.o
  AR      drivers/phy/hisilicon/built-in.a
  AR      drivers/phy/ingenic/built-in.a
  AR      drivers/phy/intel/built-in.a
  AR      drivers/phy/lantiq/built-in.a
  AR      drivers/phy/marvell/built-in.a
  AR      drivers/phy/mediatek/built-in.a
  AR      drivers/phy/microchip/built-in.a
  AR      drivers/phy/motorola/built-in.a
  AR      drivers/phy/mscc/built-in.a
  CC [M]  lib/kunit/test.o
  AR      drivers/phy/qualcomm/built-in.a
  GEN     usr/initramfs_data.cpio
  COPY    usr/initramfs_inc_data
  AR      drivers/phy/ralink/built-in.a
  AS      usr/initramfs_data.o
  AR      drivers/phy/realtek/built-in.a
  AR      usr/built-in.a
  AR      drivers/phy/renesas/built-in.a
  CC      arch/x86/entry/vdso/extable.o
  AR      drivers/phy/rockchip/built-in.a
  AR      drivers/phy/samsung/built-in.a
  AR      drivers/phy/socionext/built-in.a
  AR      drivers/phy/st/built-in.a
  AR      drivers/phy/starfive/built-in.a
  CC      arch/x86/kernel/fpu/bugs.o
  AR      drivers/phy/sunplus/built-in.a
  AR      drivers/phy/tegra/built-in.a
  AR      virt/built-in.a
  AR      drivers/phy/ti/built-in.a
  CC      arch/x86/entry/vdso/vdso32-setup.o
  AS      arch/x86/lib/copy_mc_64.o
  AR      drivers/phy/xilinx/built-in.a
  CC      drivers/phy/phy-core.o
  AS      arch/x86/lib/copy_page_64.o
  AS      arch/x86/lib/copy_user_64.o
  CC      sound/core/seq/seq_lock.o
  AS      arch/x86/lib/copy_user_uncached_64.o
  CC      mm/mempool.o
  AS      arch/x86/realmode/rm/header.o
  CC      arch/x86/kernel/fpu/core.o
  CC      arch/x86/lib/cpu.o
  CC      arch/x86/kernel/fpu/regset.o
  AS      arch/x86/realmode/rm/trampoline_64.o
  CC      security/keys/keyring.o
  AS      arch/x86/realmode/rm/stack.o
  CC      fs/notify/inotify/inotify_fsnotify.o
  CC      fs/notify/inotify/inotify_user.o
  CC      net/ethernet/eth.o
  CC      net/llc/llc_input.o
  AS      arch/x86/realmode/rm/reboot.o
  AR      fs/notify/dnotify/built-in.a
  AS      arch/x86/power/hibernate_asm_64.o
  LDS     arch/x86/entry/vdso/vdso.lds
  CC      arch/x86/kernel/apic/apic_common.o
  AS      arch/x86/realmode/rm/wakeup_asm.o
  CC      arch/x86/realmode/rm/wakemain.o
  CC      arch/x86/pci/init.o
  CC      arch/x86/mm/pat/memtype_interval.o
  CC      arch/x86/entry/vsyscall/vsyscall_64.o
  CC      net/802/p8022.o
  AS      arch/x86/entry/vsyscall/vsyscall_emu_64.o
  CC      init/initramfs.o
  CC      arch/x86/realmode/rm/video-mode.o
  CC      sound/core/sound.o
  CC      arch/x86/platform/efi/quirks.o
  CC      arch/x86/kernel/cpu/mtrr/mtrr.o
  CC      sound/core/init.o
  CC      arch/x86/power/hibernate.o
  CC      block/partitions/ldm.o
  CC      mm/kasan/report.o
  AS      arch/x86/realmode/rm/copy.o
  AS      arch/x86/entry/vdso/vdso-note.o
  CC      arch/x86/platform/efi/efi.o
  AS      arch/x86/realmode/rm/bioscall.o
  CC      crypto/cipher.o
  CC      sound/core/seq/seq_clientmgr.o
  CC      arch/x86/realmode/rm/regs.o
  CC      arch/x86/lib/delay.o
  AR      sound/i2c/other/built-in.a
  AR      sound/i2c/built-in.a
  CC [M]  lib/kunit/resource.o
  CC      arch/x86/realmode/rm/video-vga.o
  CC      security/keys/keyctl.o
  CC      arch/x86/entry/vdso/vclock_gettime.o
  AS      arch/x86/crypto/aesni-intel_avx-x86_64.o
  CC      arch/x86/events/amd/lbr.o
  CC      arch/x86/realmode/rm/video-vesa.o
  CC      arch/x86/kernel/acpi/sleep.o
  CC      arch/x86/kernel/apic/apic_noop.o
  CC      ipc/namespace.o
  CC      arch/x86/realmode/rm/video-bios.o
  AS      arch/x86/kernel/acpi/wakeup_64.o
  CC      sound/core/memory.o
  AR      sound/drivers/opl3/built-in.a
  AR      sound/isa/ad1816a/built-in.a
  CC      arch/x86/events/intel/core.o
  AR      sound/drivers/opl4/built-in.a
  PASYMS  arch/x86/realmode/rm/pasyms.h
  AR      sound/isa/ad1848/built-in.a
  AS      arch/x86/lib/getuser.o
  LDS     arch/x86/realmode/rm/realmode.lds
  AR      sound/drivers/mpu401/built-in.a
  LD      arch/x86/realmode/rm/realmode.elf
  AR      sound/isa/cs423x/built-in.a
  RELOCS  arch/x86/realmode/rm/realmode.relocs
  AR      sound/drivers/vx/built-in.a
  GEN     arch/x86/lib/inat-tables.c
  OBJCOPY arch/x86/realmode/rm/realmode.bin
  AS      arch/x86/crypto/aes_ctrby8_avx-x86_64.o
  AS      arch/x86/realmode/rmpiggy.o
  AR      sound/isa/es1688/built-in.a
  AR      sound/drivers/pcsp/built-in.a
  AR      sound/drivers/built-in.a
  CC      arch/x86/events/intel/bts.o
  CC      arch/x86/pci/mmconfig_64.o
  AR      sound/isa/galaxy/built-in.a
  AR      arch/x86/realmode/built-in.a
  CC      arch/x86/kernel/acpi/apei.o
  AR      sound/isa/gus/built-in.a
  CC      arch/x86/lib/insn-eval.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/kvm_main.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/eventfd.o
  AR      sound/isa/msnd/built-in.a
  CC      arch/x86/kernel/acpi/cppc.o
  AR      sound/isa/opti9xx/built-in.a
  AS [M]  arch/x86/crypto/ghash-clmulni-intel_asm.o
  AR      sound/pci/ac97/built-in.a
  AR      sound/isa/sb/built-in.a
  AR      sound/pci/ali5451/built-in.a
  CC      arch/x86/events/intel/ds.o
  AR      sound/isa/wavefront/built-in.a
  CC [M]  arch/x86/crypto/ghash-clmulni-intel_glue.o
  AR      sound/pci/asihpi/built-in.a
  AR      sound/isa/wss/built-in.a
  CC      arch/x86/kernel/kprobes/core.o
  AR      sound/isa/built-in.a
  AR      drivers/phy/built-in.a
  AR      sound/pci/au88x0/built-in.a
  AR      sound/pci/aw2/built-in.a
  AR      drivers/pinctrl/actions/built-in.a
  AR      sound/pci/ctxfi/built-in.a
  AR      drivers/pinctrl/bcm/built-in.a
  CC      drivers/gpio/gpiolib.o
  CC      net/802/psnap.o
  AR      sound/pci/ca0106/built-in.a
  CC      arch/x86/entry/vdso/vgetcpu.o
  CC      net/llc/llc_output.o
  AR      drivers/pinctrl/cirrus/built-in.a
  AR      sound/pci/cs46xx/built-in.a
  AR      drivers/pinctrl/freescale/built-in.a
  AR      sound/pci/cs5535audio/built-in.a
  AR      arch/x86/power/built-in.a
  CC      drivers/pinctrl/intel/pinctrl-baytrail.o
  CC [M]  lib/kunit/static_stub.o
  CC      arch/x86/kernel/cpu/mtrr/if.o
  CC      crypto/compress.o
  AR      sound/pci/lola/built-in.a
  CC      arch/x86/kernel/cpu/mtrr/generic.o
  CC      block/partitions/msdos.o
  AR      sound/pci/lx6464es/built-in.a
  HOSTCC  arch/x86/entry/vdso/vdso2c
  AR      sound/pci/echoaudio/built-in.a
  AR      arch/x86/entry/vsyscall/built-in.a
  AR      sound/pci/emu10k1/built-in.a
  CC      block/partitions/efi.o
  CC      arch/x86/kernel/cpu/mce/severity.o
  AR      sound/pci/hda/built-in.a
  AR      arch/x86/mm/pat/built-in.a
  CC [M]  sound/pci/hda/hda_bind.o
  CC      arch/x86/mm/init.o
  AR      fs/notify/inotify/built-in.a
  AR      sound/pci/ice1712/built-in.a
  CC      arch/x86/mm/init_64.o
  CC      fs/notify/fanotify/fanotify.o
  CC      mm/kasan/init.o
  CC      init/calibrate.o
  CC      fs/notify/fanotify/fanotify_user.o
  CC      arch/x86/kernel/apic/ipi.o
  CC [M]  sound/pci/hda/hda_codec.o
  AS      arch/x86/entry/entry.o
  CC      security/min_addr.o
  CC      arch/x86/kernel/kprobes/opt.o
  LDS     arch/x86/entry/vdso/vdso32/vdso32.lds
  CC      arch/x86/events/amd/ibs.o
  CC      arch/x86/events/amd/uncore.o
  CC      arch/x86/platform/efi/efi_64.o
  CC      arch/x86/kernel/fpu/signal.o
  CC      kernel/sched/fair.o
  CC      arch/x86/kernel/acpi/cstate.o
  AR      net/ethernet/built-in.a
  AS      arch/x86/entry/vdso/vdso32/note.o
  CC      block/bdev.o
  AR      drivers/pinctrl/mediatek/built-in.a
  CC      block/fops.o
  AS      arch/x86/entry/vdso/vdso32/system_call.o
  CC      block/bio.o
  AS [M]  arch/x86/crypto/crc32-pclmul_asm.o
  AS      arch/x86/entry/vdso/vdso32/sigreturn.o
  CC [M]  arch/x86/crypto/crc32-pclmul_glue.o
  CC      arch/x86/entry/vdso/vdso32/vclock_gettime.o
  CC      init/init_task.o
  CC      arch/x86/pci/direct.o
  CC      ipc/mq_sysctl.o
  CC [M]  lib/kunit/string-stream.o
  CC      crypto/algapi.o
  CC      arch/x86/events/intel/knc.o
  CC      arch/x86/kernel/cpu/mtrr/cleanup.o
  CC      arch/x86/kernel/apic/vector.o
  CC      security/keys/permission.o
  CC      arch/x86/lib/insn.o
  AR      net/llc/built-in.a
  CC      net/802/stp.o
  CC      arch/x86/kernel/apic/init.o
  CC      security/keys/process_keys.o
  CC      arch/x86/kernel/cpu/mce/genpool.o
  CC      security/inode.o
  CC      security/keys/request_key.o
  CC [M]  sound/pci/hda/hda_jack.o
  CC      sound/core/seq/seq_memory.o
  AS [M]  arch/x86/crypto/crct10dif-pcl-asm_64.o
  AR      block/partitions/built-in.a
  AR      arch/x86/kernel/acpi/built-in.a
  CC [M]  arch/x86/crypto/crct10dif-pclmul_glue.o
  CC      arch/x86/events/intel/lbr.o
  LDS     arch/x86/kernel/vmlinux.lds
  CC      arch/x86/kernel/cpu/mce/intel.o
  AR      ipc/built-in.a
  CC      arch/x86/kernel/cpu/mce/threshold.o
  AS      arch/x86/kernel/head_64.o
  CC      drivers/pinctrl/intel/pinctrl-intel.o
  CC      arch/x86/kernel/kprobes/ftrace.o
  CC [M]  drivers/pinctrl/intel/pinctrl-cherryview.o
  CC [M]  lib/kunit/assert.o
  LD [M]  arch/x86/crypto/ghash-clmulni-intel.o
  CC      arch/x86/mm/fault.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/binary_stats.o
  AS      arch/x86/lib/memcpy_64.o
  CC      arch/x86/entry/vdso/vdso32/vgetcpu.o
  AS      arch/x86/lib/memmove_64.o
  CC      mm/kasan/generic.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/vfio.o
  AS      arch/x86/lib/memset_64.o
  CC      init/version.o
  CC      arch/x86/pci/mmconfig-shared.o
  VDSO    arch/x86/entry/vdso/vdso64.so.dbg
  CC      arch/x86/lib/misc.o
  AS      arch/x86/platform/efi/efi_stub_64.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/coalesced_mmio.o
  CC      arch/x86/kernel/fpu/xstate.o
  AR      arch/x86/platform/efi/built-in.a
  CC [M]  drivers/pinctrl/intel/pinctrl-broxton.o
  VDSO    arch/x86/entry/vdso/vdso32.so.dbg
  CC      arch/x86/lib/pc-conf-reg.o
  AR      arch/x86/platform/geode/built-in.a
  OBJCOPY arch/x86/entry/vdso/vdso64.so
  OBJCOPY arch/x86/entry/vdso/vdso32.so
  VDSO2C  arch/x86/entry/vdso/vdso-image-64.c
  VDSO2C  arch/x86/entry/vdso/vdso-image-32.c
  AR      arch/x86/platform/iris/built-in.a
  CC      net/core/request_sock.o
  CC      arch/x86/entry/vdso/vdso-image-64.o
  CC      arch/x86/platform/intel/iosf_mbi.o
  CC      arch/x86/kernel/apic/hw_nmi.o
  CC      mm/oom_kill.o
  AR      arch/x86/events/amd/built-in.a
  AR      init/built-in.a
  CC      arch/x86/entry/vdso/vdso-image-32.o
  CC [M]  sound/pci/hda/hda_auto_parser.o
  CC      security/device_cgroup.o
  AS      arch/x86/lib/putuser.o
  LD [M]  arch/x86/crypto/crc32-pclmul.o
  CC      block/elevator.o
  LD [M]  arch/x86/crypto/crct10dif-pclmul.o
  AS      arch/x86/lib/retpoline.o
  AR      arch/x86/crypto/built-in.a
  CC      mm/fadvise.o
  CC      arch/x86/kernel/cpu/mce/apei.o
  CC      arch/x86/lib/usercopy.o
  AR      fs/notify/fanotify/built-in.a
  CC      arch/x86/lib/usercopy_64.o
  CC      fs/notify/fsnotify.o
  AR      net/802/built-in.a
  CC      block/blk-core.o
  CC      arch/x86/events/intel/p4.o
  CC [M]  lib/kunit/try-catch.o
  CC      kernel/sched/build_policy.o
  AR      arch/x86/entry/vdso/built-in.a
  AR      arch/x86/kernel/cpu/mtrr/built-in.a
  AS      arch/x86/entry/entry_64.o
  CC      sound/core/seq/seq_queue.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/async_pf.o
  AR      arch/x86/kernel/kprobes/built-in.a
  CC      block/blk-sysfs.o
  CC      sound/core/seq/seq_fifo.o
  CC      arch/x86/entry/syscall_64.o
  CC      security/keys/request_key_auth.o
  CC      security/keys/user_defined.o
  CC      arch/x86/mm/ioremap.o
  CC      crypto/scatterwalk.o
  CC      mm/maccess.o
  CC      arch/x86/kernel/head64.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/irqchip.o
  CC      net/sched/sch_generic.o
  AR      arch/x86/platform/intel-mid/built-in.a
  CC      kernel/sched/build_utility.o
  AR      arch/x86/platform/intel-quark/built-in.a
  AR      arch/x86/platform/intel/built-in.a
  CC      net/netlink/af_netlink.o
  AR      arch/x86/platform/olpc/built-in.a
  AR      net/bpf/built-in.a
  CC [M]  arch/x86/kvm/../../../virt/kvm/dirty_ring.o
  AR      arch/x86/platform/scx200/built-in.a
  CC      arch/x86/lib/msr-smp.o
  CC [M]  lib/kunit/executor.o
  CC      mm/kasan/report_generic.o
  AR      arch/x86/platform/ts5500/built-in.a
  AR      arch/x86/platform/uv/built-in.a
  AR      arch/x86/platform/built-in.a
  CC      arch/x86/kernel/apic/io_apic.o
  CC      arch/x86/pci/fixup.o
  CC      net/netlink/genetlink.o
  CC      block/blk-flush.o
  CC      net/core/skbuff.o
  CC      net/ethtool/ioctl.o
  AR      arch/x86/kernel/cpu/mce/built-in.a
  CC      arch/x86/kernel/apic/msi.o
  CC      mm/page-writeback.o
  CC      arch/x86/kernel/cpu/microcode/core.o
  CC      arch/x86/kernel/apic/x2apic_phys.o
  CC      drivers/gpio/gpiolib-devres.o
  CC [M]  drivers/pinctrl/intel/pinctrl-geminilake.o
  CC      arch/x86/entry/common.o
  AR      sound/pci/korg1212/built-in.a
  CC      arch/x86/lib/cache-smp.o
  CC      net/ethtool/common.o
  AR      sound/pci/mixart/built-in.a
  CC      net/netlink/policy.o
  CC [M]  lib/kunit/attributes.o
  CC      crypto/proc.o
  CC      security/keys/compat.o
  CC      net/netlink/diag.o
  CC      fs/notify/notification.o
  AR      arch/x86/kernel/fpu/built-in.a
  CC      arch/x86/events/intel/p6.o
  CC      arch/x86/kernel/cpu/cacheinfo.o
  CC      sound/core/seq/seq_prioq.o
  AR      sound/pci/nm256/built-in.a
  CC      arch/x86/lib/msr.o
  CC      mm/folio-compat.o
  CC      security/keys/proc.o
  CC [M]  sound/pci/hda/hda_sysfs.o
  CC      net/ethtool/netlink.o
  CC      security/keys/sysctl.o
  CC      net/ethtool/bitset.o
  CC      fs/notify/group.o
  CC      crypto/aead.o
  CC      drivers/gpio/gpiolib-legacy.o
  CC      arch/x86/mm/extable.o
  CC      sound/core/seq/seq_timer.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/pfncache.o
  CC [M]  drivers/pinctrl/intel/pinctrl-sunrisepoint.o
  CC      net/ethtool/strset.o
  CC      crypto/geniv.o
  CC      mm/kasan/shadow.o
  CC      arch/x86/kernel/cpu/microcode/intel.o
  CC      arch/x86/kernel/apic/x2apic_cluster.o
  AR      lib/kunit/built-in.a
  LD [M]  lib/kunit/kunit.o
  CC      arch/x86/kernel/cpu/microcode/amd.o
  CC      arch/x86/pci/acpi.o
  CC [M]  arch/x86/kvm/x86.o
  CC      lib/math/div64.o
  CC [M]  arch/x86/kvm/emulate.o
  AS      arch/x86/entry/thunk_64.o
  CC      lib/math/gcd.o
  AS      arch/x86/entry/entry_64_compat.o
  AR      drivers/pwm/built-in.a
  CC      arch/x86/entry/syscall_32.o
  CC      crypto/skcipher.o
  CC      fs/notify/mark.o
  CC [M]  arch/x86/kvm/i8259.o
  CC      drivers/gpio/gpiolib-cdev.o
  AR      sound/pci/oxygen/built-in.a
  CC      lib/math/lcm.o
  CC      arch/x86/events/intel/pt.o
  CC      sound/core/seq/seq_system.o
  CC      io_uring/splice.o
  CC      lib/math/int_log.o
  CC      sound/core/seq/seq_ports.o
  AR      security/keys/built-in.a
  AR      security/built-in.a
  CC      arch/x86/events/intel/uncore.o
  CC [M]  sound/pci/hda/hda_controller.o
  CC      lib/math/int_pow.o
  AS      arch/x86/lib/msr-reg.o
  CC      arch/x86/events/zhaoxin/core.o
  AR      drivers/pinctrl/intel/built-in.a
  CC      net/sched/sch_mq.o
  CC      arch/x86/lib/msr-reg-export.o
  CC      lib/math/int_sqrt.o
  AR      drivers/pinctrl/mvebu/built-in.a
  AS      arch/x86/lib/hweight.o
  CC [M]  sound/pci/hda/hda_proc.o
  AR      drivers/pinctrl/nomadik/built-in.a
  CC      arch/x86/lib/iomem.o
  AR      drivers/pinctrl/nuvoton/built-in.a
  AR      drivers/pinctrl/nxp/built-in.a
  CC      lib/math/reciprocal_div.o
  CC      lib/crypto/memneq.o
  AR      drivers/pinctrl/qcom/built-in.a
  CC      lib/zlib_inflate/inffast.o
  AR      drivers/pinctrl/sprd/built-in.a
  CC      arch/x86/mm/mmap.o
  CC      lib/crypto/utils.o
  AR      drivers/pinctrl/sunplus/built-in.a
  CC      lib/crypto/chacha.o
  AR      drivers/pinctrl/ti/built-in.a
  CC      drivers/pinctrl/core.o
  CC      mm/kasan/quarantine.o
  CC      lib/math/rational.o
  CC      arch/x86/mm/pgtable.o
  CC      sound/core/control.o
  CC      lib/zlib_inflate/inflate.o
  CC      crypto/seqiv.o
  CC [M]  lib/math/prime_numbers.o
  CC [M]  arch/x86/kvm/irq.o
  CC      arch/x86/mm/physaddr.o
  CC      arch/x86/kernel/apic/apic_flat_64.o
  CC [M]  arch/x86/kvm/lapic.o
  CC      sound/core/misc.o
  AS      arch/x86/lib/iomap_copy_64.o
  CC      net/ethtool/linkinfo.o
  CC      arch/x86/pci/legacy.o
  AR      arch/x86/entry/built-in.a
  CC      net/ethtool/linkmodes.o
  CC      arch/x86/pci/irq.o
  CC      arch/x86/mm/tlb.o
  CC      arch/x86/lib/inat.o
  AR      arch/x86/kernel/cpu/microcode/built-in.a
  CC      arch/x86/kernel/cpu/scattered.o
  CC      lib/crypto/aes.o
  CC      sound/core/device.o
  CC      block/blk-settings.o
  CC      drivers/gpio/gpiolib-sysfs.o
  AR      arch/x86/lib/built-in.a
  AR      arch/x86/lib/lib.a
  CC      io_uring/sync.o
  CC      io_uring/advise.o
  CC      sound/core/seq/seq_info.o
  CC      net/sched/sch_frag.o
  CC      fs/notify/fdinfo.o
  CC      sound/core/info.o
  AR      arch/x86/events/zhaoxin/built-in.a
  CC      fs/nfs_common/grace.o
  CC      crypto/echainiv.o
  AR      lib/math/built-in.a
  CC      net/sched/sch_api.o
  CC      net/ethtool/rss.o
  AR      mm/kasan/built-in.a
  CC      arch/x86/kernel/cpu/topology.o
  CC      mm/readahead.o
  CC      arch/x86/kernel/cpu/common.o
  CC      mm/swap.o
  CC      lib/zlib_inflate/infutil.o
  CC      arch/x86/kernel/apic/probe_64.o
  CC      mm/truncate.o
  CC [M]  arch/x86/kvm/i8254.o
  CC [M]  arch/x86/kvm/ioapic.o
  CC      lib/zlib_deflate/deflate.o
  CC      sound/core/isadma.o
  CC      lib/zlib_deflate/deftree.o
  CC      arch/x86/pci/common.o
  CC [M]  arch/x86/kvm/irq_comm.o
  CC      mm/vmscan.o
  CC [M]  sound/pci/hda/hda_hwdep.o
  CC      lib/crypto/gf128mul.o
  AR      sound/core/seq/built-in.a
  CC      sound/core/vmaster.o
  CC [M]  arch/x86/kvm/cpuid.o
  CC      lib/zlib_inflate/inftrees.o
  CC      mm/shmem.o
  CC      arch/x86/mm/cpu_entry_area.o
  CC      arch/x86/kernel/cpu/rdrand.o
  CC      io_uring/filetable.o
  CC      lib/zlib_inflate/inflate_syms.o
  CC      io_uring/openclose.o
  AR      arch/x86/kernel/apic/built-in.a
  CC      arch/x86/kernel/ebda.o
  AR      fs/notify/built-in.a
  CC      drivers/pinctrl/pinctrl-utils.o
  CC      block/blk-ioc.o
  CC      drivers/pinctrl/pinmux.o
  CC      drivers/gpio/gpiolib-acpi.o
  CC      arch/x86/kernel/cpu/match.o
  AR      net/netlink/built-in.a
  CC      block/blk-map.o
  CC      net/ethtool/linkstate.o
  CC      arch/x86/kernel/cpu/bugs.o
  CC      crypto/ahash.o
  CC      arch/x86/events/intel/uncore_nhmex.o
  CC      arch/x86/mm/maccess.o
  CC      block/blk-merge.o
  AR      fs/nfs_common/built-in.a
  CC      fs/iomap/trace.o
  CC      block/blk-timeout.o
  CC      fs/iomap/iter.o
  AR      lib/zlib_inflate/built-in.a
  CC      lib/lzo/lzo1x_compress.o
  CC      lib/lz4/lz4_compress.o
  CC      lib/zlib_deflate/deflate_syms.o
  CC      lib/lzo/lzo1x_decompress_safe.o
  CC      arch/x86/mm/pgprot.o
  CC      lib/lz4/lz4hc_compress.o
  CC      lib/crypto/blake2s.o
  CC [M]  sound/pci/hda/hda_generic.o
  CC      block/blk-lib.o
  CC      arch/x86/pci/early.o
  CC      arch/x86/pci/bus_numa.o
  CC      sound/core/ctljack.o
  CC      arch/x86/kernel/platform-quirks.o
  CC      arch/x86/kernel/cpu/aperfmperf.o
  CC      arch/x86/kernel/cpu/cpuid-deps.o
  CC      arch/x86/mm/hugetlbpage.o
  CC      arch/x86/kernel/cpu/umwait.o
  CC      lib/crypto/blake2s-generic.o
  CC      io_uring/uring_cmd.o
  CC [M]  arch/x86/kvm/pmu.o
  AR      lib/zlib_deflate/built-in.a
  CC      lib/zstd/zstd_compress_module.o
  CC      lib/xz/xz_dec_syms.o
  CC      lib/zstd/compress/fse_compress.o
  CC      drivers/pinctrl/pinconf.o
  CC      lib/zstd/compress/hist.o
  CC      lib/xz/xz_dec_stream.o
  CC      lib/zstd/compress/huf_compress.o
  AR      lib/lzo/built-in.a
  CC      lib/lz4/lz4_decompress.o
  CC      arch/x86/kernel/process_64.o
  CC      fs/iomap/buffered-io.o
  CC      sound/core/jack.o
  CC [M]  arch/x86/kvm/mtrr.o
  CC      sound/core/timer.o
  CC      arch/x86/kernel/cpu/proc.o
  CC      lib/zstd/compress/zstd_compress.o
  MKCAP   arch/x86/kernel/cpu/capflags.c
  CC      crypto/shash.o
  CC      io_uring/epoll.o
  CC      lib/crypto/blake2s-selftest.o
  CC      crypto/akcipher.o
  CC      net/ethtool/debug.o
  CC      lib/raid6/algos.o
  CC      drivers/gpio/gpiolib-swnode.o
  CC      lib/raid6/recov.o
  HOSTCC  lib/raid6/mktables
  CC      arch/x86/pci/amd_bus.o
  UNROLL  lib/raid6/int1.c
  CC      lib/xz/xz_dec_lzma2.o
  UNROLL  lib/raid6/int2.c
  CC      lib/xz/xz_dec_bcj.o
  CC      lib/crypto/des.o
  CC      arch/x86/events/intel/uncore_snb.o
  CC      lib/crypto/sha1.o
  CC      arch/x86/events/intel/uncore_snbep.o
  CC      arch/x86/events/intel/uncore_discovery.o
  CC      arch/x86/events/intel/cstate.o
  CC      fs/iomap/direct-io.o
  CC      arch/x86/mm/kasan_init_64.o
  CC [M]  arch/x86/kvm/hyperv.o
  CC      mm/util.o
  CC      mm/mmzone.o
  CC      drivers/pinctrl/pinconf-generic.o
  AR      fs/quota/built-in.a
  CC      mm/vmstat.o
  CC      mm/backing-dev.o
  CC      net/sched/sch_blackhole.o
  CC      mm/mm_init.o
  CC      net/core/datagram.o
  CC      block/blk-mq.o
  AR      drivers/gpio/built-in.a
  CC      net/core/stream.o
  CC      arch/x86/mm/numa.o
  CC      mm/percpu.o
  UNROLL  lib/raid6/int4.c
  CC      io_uring/statx.o
  CC      lib/zstd/compress/zstd_compress_literals.o
  CC      io_uring/net.o
  UNROLL  lib/raid6/int8.c
  UNROLL  lib/raid6/int16.c
  UNROLL  lib/raid6/int32.c
  CC      crypto/sig.o
  CC      lib/raid6/recov_ssse3.o
  CC      net/ethtool/wol.o
  CC      mm/slab_common.o
  AR      arch/x86/pci/built-in.a
  CC      net/ethtool/features.o
  CC      drivers/pci/msi/pcidev_msi.o
  CC      net/ethtool/privflags.o
  CC      drivers/pci/msi/api.o
  CC      net/ethtool/rings.o
  CC      net/ethtool/channels.o
  AR      lib/xz/built-in.a
  AR      lib/lz4/built-in.a
  CC      lib/raid6/recov_avx2.o
  CC      drivers/pci/msi/msi.o
  CC      net/sched/sch_fifo.o
  CC      arch/x86/events/core.o
  CC      drivers/idle/intel_idle.o
  CC      drivers/video/console/dummycon.o
  AR      drivers/pinctrl/built-in.a
  CC      fs/iomap/fiemap.o
  CC      drivers/video/logo/logo.o
  CC      fs/iomap/seek.o
  HOSTCC  drivers/video/logo/pnmtologo
  CC      lib/crypto/sha256.o
  CC      net/ethtool/coalesce.o
  CC      lib/zstd/compress/zstd_compress_sequences.o
  CC      fs/iomap/swapfile.o
  CC      net/core/scm.o
  CC      net/core/gen_stats.o
  CC      sound/core/hrtimer.o
  CC      arch/x86/kernel/signal.o
  CC      lib/zstd/compress/zstd_compress_superblock.o
  CC      crypto/kpp.o
  LOGO    drivers/video/logo/logo_linux_clut224.c
  CC      net/ethtool/pause.o
  CC      drivers/video/logo/logo_linux_clut224.o
  AR      drivers/video/logo/built-in.a
  CC      arch/x86/events/probe.o
  CC      drivers/video/backlight/backlight.o
  CC      lib/fonts/fonts.o
  AR      kernel/sched/built-in.a
  CC      kernel/locking/mutex.o
  CC      lib/raid6/mmx.o
  CC      lib/fonts/font_8x8.o
  CC      lib/raid6/sse1.o
  CC      drivers/video/fbdev/core/fb_notify.o
  CC      drivers/video/console/vgacon.o
  CC      net/ethtool/eee.o
  CC      lib/raid6/sse2.o
  CC      mm/compaction.o
  CC      drivers/video/aperture.o
  CC      drivers/pci/msi/irqdomain.o
  CC      arch/x86/mm/numa_64.o
  CC      arch/x86/mm/amdtopology.o
  CC      arch/x86/mm/srat.o
  CC      fs/proc/task_mmu.o
  CC [M]  lib/crypto/arc4.o
  CC      lib/fonts/font_8x16.o
  CC      kernel/power/qos.o
  CC      kernel/power/main.o
  CC      sound/core/seq_device.o
  AR      sound/pci/pcxhr/built-in.a
  CC      kernel/power/console.o
  AR      net/sched/built-in.a
  CC      net/core/gen_estimator.o
  CC      arch/x86/mm/pkeys.o
  CC      kernel/power/process.o
  CC      kernel/power/suspend.o
  CC      net/ethtool/tsinfo.o
  CC      lib/raid6/avx2.o
  CC      net/core/net_namespace.o
  AR      fs/iomap/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_conn.o
  CC      io_uring/msg_ring.o
  CC      net/ethtool/cabletest.o
  CC      crypto/acompress.o
  CC      fs/kernfs/mount.o
  AR      lib/crypto/built-in.a
  AR      drivers/idle/built-in.a
  LD [M]  lib/crypto/libarc4.o
  CC      arch/x86/kernel/signal_64.o
  AR      lib/fonts/built-in.a
  CC [M]  drivers/video/fbdev/core/fb_info.o
  CC [M]  net/netfilter/ipvs/ip_vs_core.o
  CC      net/netfilter/core.o
  CC      net/netfilter/nf_log.o
  CC      net/netfilter/nf_queue.o
  CC      lib/raid6/avx512.o
  AR      arch/x86/events/intel/built-in.a
  CC      lib/raid6/recov_avx512.o
  AR      drivers/char/ipmi/built-in.a
  CC [M]  sound/pci/hda/patch_realtek.o
  CC      drivers/acpi/acpica/dsargs.o
  AR      drivers/video/backlight/built-in.a
  CC      io_uring/timeout.o
  CC      drivers/acpi/numa/srat.o
  CC      drivers/acpi/apei/apei-base.o
  AR      drivers/acpi/pmic/built-in.a
  CC      arch/x86/mm/pti.o
  CC      drivers/acpi/apei/hest.o
  CC      net/ethtool/tunnels.o
  AR      drivers/pci/msi/built-in.a
  CC [M]  sound/core/control_led.o
  CC      drivers/pci/pcie/portdrv.o
  CC      net/ethtool/fec.o
  CC [M]  drivers/video/fbdev/core/fbmem.o
  CC      net/ethtool/eeprom.o
  CC      net/ethtool/stats.o
  AR      drivers/video/console/built-in.a
  CC      block/blk-mq-tag.o
  CC      lib/argv_split.o
  CC      block/blk-stat.o
  CC      kernel/power/hibernate.o
  CC      drivers/acpi/acpica/dscontrol.o
  CC      lib/zstd/compress/zstd_double_fast.o
  CC      lib/zstd/compress/zstd_fast.o
  CC      fs/kernfs/inode.o
  CC      crypto/scompress.o
  CC      lib/zstd/compress/zstd_lazy.o
  CC      fs/kernfs/dir.o
  CC      fs/kernfs/file.o
  CC      drivers/acpi/apei/erst.o
  CC      drivers/acpi/apei/bert.o
  CC      net/core/secure_seq.o
  CC      arch/x86/events/utils.o
  CC      net/core/flow_dissector.o
  CC      drivers/pci/pcie/rcec.o
  TABLE   lib/raid6/tables.c
  AR      net/ipv4/netfilter/built-in.a
  CC      lib/raid6/int1.o
  CC [M]  net/ipv4/netfilter/nf_defrag_ipv4.o
  CC      lib/raid6/int2.o
  CC [M]  net/ipv4/netfilter/nf_reject_ipv4.o
  CC      lib/raid6/int4.o
  CC      lib/raid6/int8.o
  CC      lib/raid6/int16.o
  CC      drivers/acpi/acpica/dsdebug.o
  AR      drivers/acpi/numa/built-in.a
  CC [M]  sound/core/hwdep.o
  CC      drivers/acpi/acpica/dsfield.o
  AR      arch/x86/mm/built-in.a
  CC      drivers/acpi/acpica/dsinit.o
  CC      net/ethtool/phc_vclocks.o
  CC [M]  sound/pci/hda/patch_analog.o
  AR      sound/pci/riptide/built-in.a
  CC      net/core/sysctl_net_core.o
  AR      sound/pci/rme9652/built-in.a
  CC      io_uring/sqpoll.o
  AR      sound/pci/trident/built-in.a
  CC      kernel/locking/semaphore.o
  CC [M]  drivers/video/fbdev/core/fbcmap.o
  CC      kernel/locking/rwsem.o
  CC      drivers/acpi/apei/ghes.o
  AR      sound/pci/ymfpci/built-in.a
  CC      kernel/locking/percpu-rwsem.o
  CC [M]  sound/core/pcm.o
  CC      drivers/acpi/dptf/int340x_thermal.o
  AR      sound/pci/vx222/built-in.a
  CC      drivers/pnp/pnpacpi/core.o
  CC      crypto/algboss.o
  AR      drivers/amba/built-in.a
  CC      drivers/pnp/core.o
  AR      drivers/clk/actions/built-in.a
  CC      drivers/pnp/card.o
  CC      arch/x86/events/rapl.o
  AR      drivers/clk/analogbits/built-in.a
  CC      arch/x86/events/msr.o
  CC      fs/proc/inode.o
  CC [M]  sound/pci/hda/patch_hdmi.o
  AR      drivers/clk/bcm/built-in.a
  CC [M]  sound/pci/hda/hda_eld.o
  AR      drivers/clk/imgtec/built-in.a
  AR      drivers/clk/imx/built-in.a
  CC      fs/proc/root.o
  CC      drivers/pci/pcie/aspm.o
  AR      drivers/clk/ingenic/built-in.a
  CC      arch/x86/kernel/traps.o
  CC      arch/x86/kernel/idt.o
  AR      drivers/clk/mediatek/built-in.a
  AR      drivers/clk/microchip/built-in.a
  CC      arch/x86/kernel/irq.o
  AR      drivers/clk/mstar/built-in.a
  CC      drivers/acpi/acpica/dsmethod.o
  CC      kernel/power/snapshot.o
  AR      drivers/clk/mvebu/built-in.a
  AR      drivers/clk/ralink/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_ctl.o
  AR      drivers/clk/renesas/built-in.a
  AR      drivers/clk/socfpga/built-in.a
  CC      kernel/power/swap.o
  CC      lib/raid6/int32.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
  CC [M]  net/netfilter/ipvs/ip_vs_sched.o
  CC      drivers/clk/x86/clk-lpss-atom.o
  CC      drivers/pci/hotplug/pci_hotplug_core.o
  CC      kernel/power/user.o
  CC      fs/kernfs/symlink.o
  AR      drivers/acpi/dptf/built-in.a
  AR      drivers/clk/xilinx/built-in.a
  CC [M]  sound/core/pcm_native.o
  CC      drivers/clk/clk-devres.o
  CC      drivers/dma/dw/core.o
  CC      drivers/dma/dw/dw.o
  CC      net/ethtool/mm.o
  CC      drivers/dma/dw/idma32.o
  CC      drivers/pnp/pnpacpi/rsparser.o
  CC      net/ipv4/route.o
  CC [M]  net/ipv4/netfilter/ip_tables.o
  CC      drivers/acpi/tables.o
  CC [M]  drivers/video/fbdev/core/modedb.o
  CC      drivers/acpi/acpica/dsmthdat.o
  CC      drivers/clk/x86/clk-pmc-atom.o
  CC      crypto/testmgr.o
  CC      kernel/power/poweroff.o
  CC      block/blk-mq-sysfs.o
  CC      fs/sysfs/file.o
  CC      net/ipv4/inetpeer.o
  CC      lib/raid6/tables.o
  CC      fs/sysfs/dir.o
  CC      fs/sysfs/symlink.o
  CC      net/xfrm/xfrm_policy.o
  CC      fs/proc/base.o
  CC      io_uring/fdinfo.o
  AR      arch/x86/events/built-in.a
  CC      fs/proc/generic.o
  CC      net/netfilter/nf_sockopt.o
  CC      arch/x86/kernel/irq_64.o
  CC      mm/show_mem.o
  CC      mm/shmem_quota.o
  CC      arch/x86/kernel/cpu/powerflags.o
  CC      drivers/pci/pcie/aer.o
  AR      fs/kernfs/built-in.a
  CC      fs/configfs/inode.o
  AR      drivers/acpi/apei/built-in.a
  CC      arch/x86/kernel/cpu/feat_ctl.o
  CC      drivers/acpi/blacklist.o
  CC      arch/x86/kernel/dumpstack_64.o
  CC      drivers/pci/hotplug/acpi_pcihp.o
  CC      drivers/acpi/acpica/dsobject.o
  CC      fs/configfs/file.o
  CC      fs/configfs/dir.o
  CC      net/ipv4/protocol.o
  CC      kernel/locking/irqflag-debug.o
  CC      mm/interval_tree.o
  CC      fs/sysfs/mount.o
  AR      drivers/clk/x86/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_xmit.o
  CC      drivers/clk/clk-bulk.o
  CC      kernel/locking/mutex-debug.o
  CC      io_uring/tctx.o
  CC      drivers/pci/hotplug/pciehp_core.o
  CC      net/core/dev.o
  AR      lib/raid6/built-in.a
  CC      drivers/pnp/driver.o
  CC      mm/list_lru.o
  CC      block/blk-mq-cpumap.o
  CC      net/ethtool/module.o
  CC      net/unix/af_unix.o
  AR      drivers/pnp/pnpacpi/built-in.a
  CC      arch/x86/kernel/cpu/intel.o
  CC      net/ethtool/pse-pd.o
  AR      net/ipv6/netfilter/built-in.a
  CC      net/ipv6/af_inet6.o
  CC      drivers/pnp/resource.o
  CC [M]  net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
  CC      drivers/pnp/manager.o
  AR      kernel/power/built-in.a
  CC [M]  net/ipv6/netfilter/nf_conntrack_reasm.o
  CC [M]  drivers/video/fbdev/core/fbcvt.o
  CC      drivers/acpi/acpica/dsopcode.o
  CC      drivers/dma/dw/acpi.o
  CC      kernel/printk/printk.o
  CC      kernel/irq/irqdesc.o
  CC      kernel/irq/handle.o
  CC      fs/proc/array.o
  CC      net/ipv4/ip_input.o
  CC      net/ipv4/ip_fragment.o
  CC      net/netfilter/utils.o
  CC      fs/proc/fd.o
  CC      drivers/clk/clkdev.o
  CC      kernel/irq/manage.o
  CC      kernel/printk/printk_safe.o
  CC      kernel/locking/lockdep.o
  CC      fs/sysfs/group.o
  CC      drivers/pnp/support.o
  CC [M]  net/ipv4/netfilter/iptable_filter.o
  CC [M]  sound/pci/hda/hda_intel.o
  CC [M]  net/netfilter/ipvs/ip_vs_app.o
  CC      net/ipv6/anycast.o
  CC      drivers/pnp/interface.o
  CC      drivers/pci/hotplug/pciehp_ctrl.o
  CC      drivers/pci/pcie/err.o
  CC      block/blk-mq-sched.o
  CC      drivers/acpi/acpica/dspkginit.o
  CC      io_uring/poll.o
  CC      drivers/dma/dw/pci.o
  CC      drivers/pci/hotplug/pciehp_pci.o
  CC      fs/configfs/symlink.o
  CC      drivers/pnp/quirks.o
  CC      drivers/pci/pcie/aer_inject.o
  CC      drivers/clk/clk.o
  CC      mm/workingset.o
  CC [M]  drivers/video/fbdev/core/fb_cmdline.o
  CC      fs/configfs/mount.o
  CC      net/ethtool/plca.o
  CC      mm/debug.o
  CC      arch/x86/kernel/cpu/intel_pconfig.o
  CC      mm/gup.o
  CC      block/ioctl.o
  CC      kernel/rcu/update.o
  AR      fs/sysfs/built-in.a
  AR      kernel/livepatch/built-in.a
  CC      drivers/pnp/system.o
  CC      drivers/acpi/acpica/dsutils.o
  CC      arch/x86/kernel/cpu/tsx.o
  CC      kernel/rcu/sync.o
  CC      mm/mmap_lock.o
  CC      drivers/pci/hotplug/pciehp_hpc.o
  CC      crypto/cmac.o
  CC      drivers/pci/hotplug/acpiphp_core.o
  CC      drivers/acpi/acpica/dswexec.o
  CC      lib/zstd/compress/zstd_ldm.o
  CC      kernel/dma/mapping.o
  CC      lib/zstd/compress/zstd_opt.o
  AR      drivers/dma/dw/built-in.a
  CC [M]  net/ipv4/netfilter/iptable_mangle.o
  CC      kernel/printk/printk_ringbuffer.o
  CC      drivers/dma/hsu/hsu.o
  AR      drivers/dma/idxd/built-in.a
  CC      crypto/hmac.o
  LD [M]  net/ipv6/netfilter/nf_defrag_ipv6.o
  CC      drivers/pci/pcie/pme.o
  CC      drivers/pci/hotplug/acpiphp_glue.o
  CC      kernel/irq/spurious.o
  CC      lib/bug.o
  CC      drivers/clk/clk-divider.o
  CC      fs/configfs/item.o
  CC      fs/proc/proc_tty.o
  CC      io_uring/cancel.o
  CC [M]  drivers/video/fbdev/core/fb_io_fops.o
  CC      arch/x86/kernel/cpu/intel_epb.o
  AR      drivers/pnp/built-in.a
  CC      net/ipv6/ip6_output.o
  CC [M]  sound/core/pcm_lib.o
  CC [M]  drivers/video/fbdev/core/fb_backlight.o
  AR      drivers/soc/apple/built-in.a
  CC      drivers/acpi/acpica/dswload.o
  AR      drivers/soc/aspeed/built-in.a
  AR      drivers/soc/bcm/built-in.a
  AR      drivers/soc/fsl/built-in.a
  CC      drivers/clk/clk-fixed-factor.o
  AR      drivers/pmdomain/actions/built-in.a
  AR      drivers/soc/fujitsu/built-in.a
  AR      drivers/soc/hisilicon/built-in.a
  AR      drivers/pmdomain/amlogic/built-in.a
  AR      drivers/soc/imx/built-in.a
  AR      drivers/pmdomain/apple/built-in.a
  AR      drivers/soc/ixp4xx/built-in.a
  CC      mm/highmem.o
  CC      net/ipv4/ip_forward.o
  CC      net/ipv6/ip6_input.o
  AR      drivers/pmdomain/bcm/built-in.a
  AR      drivers/soc/loongson/built-in.a
  AR      drivers/pmdomain/imx/built-in.a
  AR      drivers/soc/mediatek/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_sync.o
  AR      drivers/pmdomain/mediatek/built-in.a
  AR      drivers/soc/microchip/built-in.a
  AR      drivers/pmdomain/qcom/built-in.a
  AR      drivers/soc/nuvoton/built-in.a
  AR      drivers/pmdomain/renesas/built-in.a
  AR      drivers/soc/pxa/built-in.a
  AR      drivers/pmdomain/rockchip/built-in.a
  AR      drivers/soc/amlogic/built-in.a
  AR      drivers/pmdomain/samsung/built-in.a
  AR      drivers/soc/qcom/built-in.a
  AR      drivers/pmdomain/st/built-in.a
  AR      drivers/soc/renesas/built-in.a
  AR      drivers/dma/mediatek/built-in.a
  AR      net/ethtool/built-in.a
  AR      drivers/pmdomain/starfive/built-in.a
  AR      drivers/soc/rockchip/built-in.a
  CC      arch/x86/kernel/time.o
  AR      drivers/soc/sunxi/built-in.a
  AR      drivers/pmdomain/sunxi/built-in.a
  CC      drivers/pci/pcie/dpc.o
  AR      drivers/soc/sifive/built-in.a
  LD [M]  sound/pci/hda/snd-hda-codec.o
  CC      drivers/acpi/acpica/dswload2.o
  AR      drivers/pmdomain/tegra/built-in.a
  CC      drivers/acpi/acpica/dswscope.o
  AR      drivers/soc/ti/built-in.a
  CC      drivers/acpi/acpica/dswstate.o
  AR      drivers/pmdomain/ti/built-in.a
  AR      drivers/soc/xilinx/built-in.a
  CC      block/genhd.o
  AR      drivers/soc/built-in.a
  AR      drivers/pmdomain/xilinx/built-in.a
  AR      drivers/pmdomain/built-in.a
  CC      net/ipv6/addrconf.o
  CC      crypto/vmac.o
  CC      kernel/irq/resend.o
  CC      arch/x86/kernel/cpu/amd.o
  CC [M]  sound/core/pcm_misc.o
  AR      fs/configfs/built-in.a
  CC      drivers/clk/clk-fixed-rate.o
  CC      kernel/rcu/srcutree.o
  CC      crypto/xcbc.o
  LD [M]  sound/pci/hda/snd-hda-codec-generic.o
  LD [M]  sound/pci/hda/snd-hda-codec-realtek.o
  CC      kernel/printk/sysctl.o
  CC      fs/proc/cmdline.o
  LD [M]  sound/pci/hda/snd-hda-codec-analog.o
  CC      kernel/irq/chip.o
  CC      drivers/clk/clk-gate.o
  LD [M]  sound/pci/hda/snd-hda-codec-hdmi.o
  CC      mm/memory.o
  LD [M]  sound/pci/hda/snd-hda-intel.o
  CC      net/ipv4/ip_options.o
  CC      drivers/acpi/acpica/evevent.o
  AR      sound/pci/built-in.a
  CC      drivers/clk/clk-multiplier.o
  CC [M]  net/netfilter/ipvs/ip_vs_est.o
  CC      drivers/clk/clk-mux.o
  AR      drivers/dma/hsu/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_proto.o
  AR      drivers/dma/qcom/built-in.a
  AR      drivers/dma/ti/built-in.a
  AR      drivers/dma/xilinx/built-in.a
  CC      kernel/entry/common.o
  CC [M]  drivers/dma/ioat/init.o
  CC [M]  drivers/video/fbdev/core/fbmon.o
  CC      kernel/module/main.o
  CC [M]  net/ipv4/netfilter/iptable_nat.o
  AR      kernel/printk/built-in.a
  CC      net/ipv4/ip_output.o
  CC      kernel/dma/direct.o
  CC      kernel/dma/ops_helpers.o
  CC      drivers/virtio/virtio.o
  CC      net/unix/garbage.o
  CC      drivers/acpi/acpica/evgpe.o
  CC      drivers/acpi/acpica/evgpeblk.o
  CC      io_uring/kbuf.o
  CC      arch/x86/kernel/ioport.o
  AR      sound/ppc/built-in.a
  CC      kernel/irq/dummychip.o
  CC      io_uring/rsrc.o
  AR      drivers/pci/hotplug/built-in.a
  AR      sound/arm/built-in.a
  CC [M]  net/ipv4/netfilter/ipt_REJECT.o
  AR      sound/sh/built-in.a
  CC      fs/proc/consoles.o
  AR      sound/synth/emux/built-in.a
  AR      sound/synth/built-in.a
  AR      drivers/pci/pcie/built-in.a
  CC      fs/proc/cpuinfo.o
  CC      mm/mincore.o
  AR      drivers/pci/controller/dwc/built-in.a
  AR      drivers/pci/controller/mobiveil/built-in.a
  AR      sound/usb/misc/built-in.a
  CC      drivers/pci/controller/vmd.o
  CC      arch/x86/kernel/dumpstack.o
  AR      sound/usb/usx2y/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_pe.o
  AR      sound/usb/caiaq/built-in.a
  AR      sound/usb/6fire/built-in.a
  AR      sound/usb/hiface/built-in.a
  CC [M]  arch/x86/kvm/debugfs.o
  AR      sound/usb/bcd2000/built-in.a
  AR      sound/usb/built-in.a
  CC      kernel/entry/syscall_user_dispatch.o
  CC      kernel/entry/kvm.o
  CC      crypto/crypto_null.o
  CC      drivers/acpi/acpica/evgpeinit.o
  AR      drivers/pci/switch/built-in.a
  CC      net/ipv4/ip_sockglue.o
  CC      drivers/acpi/acpica/evgpeutil.o
  CC      kernel/dma/dummy.o
  CC      arch/x86/kernel/cpu/hygon.o
  CC      kernel/locking/lockdep_proc.o
  CC      drivers/virtio/virtio_ring.o
  CC      fs/proc/devices.o
  CC      drivers/virtio/virtio_anchor.o
  CC      kernel/irq/devres.o
  CC      block/ioprio.o
  CC      net/xfrm/xfrm_state.o
  CC      block/badblocks.o
  CC      drivers/acpi/acpica/evglock.o
  CC      kernel/rcu/tree.o
  CC      kernel/locking/spinlock.o
  CC [M]  sound/core/pcm_memory.o
  CC      block/blk-rq-qos.o
  CC      kernel/locking/osq_lock.o
  CC      mm/mlock.o
  CC      crypto/md5.o
  CC      fs/proc/interrupts.o
  CC      arch/x86/kernel/nmi.o
  CC      net/unix/sysctl_net_unix.o
  CC [M]  sound/core/memalloc.o
  CC [M]  drivers/dma/ioat/dma.o
  CC      drivers/acpi/acpica/evhandler.o
  CC      drivers/pci/access.o
  CC      net/ipv4/inet_hashtables.o
  CC      net/ipv6/addrlabel.o
  CC      net/ipv4/inet_timewait_sock.o
  CC      arch/x86/kernel/cpu/centaur.o
  CC      io_uring/rw.o
  CC      kernel/dma/contiguous.o
  CC [M]  drivers/video/fbdev/core/fb_defio.o
  AR      kernel/entry/built-in.a
  CC [M]  drivers/dma/ioat/prep.o
  CC [M]  arch/x86/kvm/mmu/mmu.o
  CC      drivers/video/cmdline.o
  CC      kernel/irq/autoprobe.o
  AR      drivers/pci/controller/built-in.a
  CC      fs/proc/loadavg.o
  CC      drivers/acpi/osi.o
  CC      block/disk-events.o
  CC [M]  net/netfilter/ipvs/ip_vs_proto_tcp.o
  CC [M]  drivers/dma/ioat/dca.o
  CC      block/blk-ia-ranges.o
  CC      io_uring/opdef.o
  CC      fs/proc/meminfo.o
  CC      net/unix/diag.o
  CC      fs/proc/stat.o
  CC      drivers/acpi/acpica/evmisc.o
  CC      mm/mmap.o
  CC      crypto/sha1_generic.o
  CC [M]  net/netfilter/nfnetlink.o
  CC      kernel/locking/qspinlock.o
  CC      drivers/clk/clk-composite.o
  CC      block/early-lookup.o
  CC      arch/x86/kernel/cpu/zhaoxin.o
  CC [M]  arch/x86/kvm/mmu/page_track.o
  CC      kernel/dma/swiotlb.o
  CC      kernel/irq/irqdomain.o
  CC      io_uring/notif.o
  CC [M]  net/netfilter/ipvs/ip_vs_proto_udp.o
  CC      net/unix/scm.o
  CC      drivers/acpi/osl.o
  CC      block/bsg.o
  CC      drivers/acpi/acpica/evregion.o
  CC      crypto/sha256_generic.o
  CC      drivers/pci/bus.o
  CC [M]  sound/core/pcm_timer.o
  CC      drivers/video/nomodeset.o
  LD [M]  sound/core/snd-ctl-led.o
  CC [M]  drivers/video/fbdev/core/fb_chrdev.o
  CC      io_uring/io-wq.o
  CC      kernel/irq/proc.o
  CC      fs/proc/uptime.o
  CC      kernel/locking/rtmutex_api.o
  CC      arch/x86/kernel/cpu/perfctr-watchdog.o
  CC      kernel/locking/spinlock_debug.o
  CC      drivers/video/hdmi.o
  CC      kernel/module/strict_rwx.o
  CC      net/ipv6/route.o
  CC      drivers/pci/probe.o
  CC      drivers/clk/clk-fractional-divider.o
  CC      mm/mmu_gather.o
  CC [M]  drivers/dma/ioat/sysfs.o
  CC      kernel/module/kmod.o
  CC      drivers/virtio/virtio_pci_modern_dev.o
  CC      net/ipv6/ip6_fib.o
  CC      fs/proc/util.o
  CC      fs/devpts/inode.o
  CC      fs/ext4/balloc.o
  CC      fs/jbd2/transaction.o
  CC      fs/ramfs/inode.o
  CC      net/ipv4/inet_connection_sock.o
  CC      drivers/acpi/acpica/evrgnini.o
  CC      fs/ext4/bitmap.o
  CC      crypto/sha512_generic.o
  CC [M]  arch/x86/kvm/mmu/spte.o
  CC      net/ipv6/ipv6_sockglue.o
  CC      fs/jbd2/commit.o
  CC      kernel/locking/qrwlock.o
  CC      block/bsg-lib.o
  LD [M]  sound/core/snd-hwdep.o
  LD [M]  sound/core/snd-pcm.o
  CC      kernel/module/tree_lookup.o
  AR      sound/core/built-in.a
  AR      sound/firewire/built-in.a
  AR      sound/spi/built-in.a
  AR      sound/sparc/built-in.a
  AR      sound/parisc/built-in.a
  CC      mm/mprotect.o
  AR      sound/mips/built-in.a
  AR      sound/pcmcia/vx/built-in.a
  CC      mm/mremap.o
  AR      sound/pcmcia/pdaudiocf/built-in.a
  CC      net/ipv6/ndisc.o
  CC      arch/x86/kernel/cpu/vmware.o
  AR      sound/pcmcia/built-in.a
  CC      arch/x86/kernel/cpu/hypervisor.o
  CC      fs/proc/version.o
  AR      sound/soc/built-in.a
  AR      sound/atmel/built-in.a
  AR      sound/hda/built-in.a
  CC [M]  sound/hda/hda_bus_type.o
  CC      fs/proc/softirqs.o
  CC      drivers/clk/clk-gpio.o
  AR      net/unix/built-in.a
  LD [M]  drivers/dma/ioat/ioatdma.o
  CC [M]  sound/hda/hdac_bus.o
  CC [M]  drivers/video/fbdev/core/fb_procfs.o
  CC      drivers/dma/dmaengine.o
  CC      kernel/irq/migration.o
  CC [M]  sound/hda/hdac_device.o
  CC      kernel/dma/remap.o
  CC      kernel/module/debug_kmemleak.o
  CC [M]  arch/x86/kvm/mmu/tdp_iter.o
  CC      drivers/acpi/acpica/evsci.o
  CC      arch/x86/kernel/cpu/mshyperv.o
  CC [M]  net/netfilter/ipvs/ip_vs_nfct.o
  CC      drivers/virtio/virtio_pci_legacy_dev.o
  CC      fs/proc/namespaces.o
  CC      drivers/pci/host-bridge.o
  CC      fs/ramfs/file-mmu.o
  CC      mm/msync.o
  AR      fs/devpts/built-in.a
  CC      fs/proc/self.o
  CC      block/blk-cgroup.o
  CC      kernel/module/kallsyms.o
  CC [M]  net/netfilter/nf_conntrack_core.o
  CC      crypto/sha3_generic.o
  CC [M]  net/netfilter/nf_conntrack_standalone.o
  CC      crypto/blake2b_generic.o
  CC      net/ipv4/tcp.o
  AR      kernel/locking/built-in.a
  CC      drivers/acpi/utils.o
  CC      kernel/irq/cpuhotplug.o
  AR      drivers/clk/built-in.a
  CC      drivers/virtio/virtio_pci_modern.o
  CC      drivers/acpi/acpica/evxface.o
  CC      kernel/module/procfs.o
  CC      fs/proc/thread_self.o
  AR      kernel/dma/built-in.a
  CC      fs/ext4/block_validity.o
  AR      io_uring/built-in.a
  CC      crypto/ecb.o
  CC      fs/hugetlbfs/inode.o
  CC [M]  drivers/video/fbdev/core/fbsysfs.o
  CC [M]  sound/hda/hdac_sysfs.o
  AR      fs/ramfs/built-in.a
  CC      drivers/acpi/reboot.o
  CC      block/blk-cgroup-rwstat.o
  CC [M]  sound/hda/hdac_regmap.o
  CC      kernel/time/time.o
  CC      drivers/virtio/virtio_pci_common.o
  CC      arch/x86/kernel/cpu/capflags.o
  CC [M]  arch/x86/kvm/mmu/tdp_mmu.o
  CC      kernel/futex/core.o
  CC      drivers/pci/remove.o
  CC      drivers/virtio/virtio_pci_legacy.o
  AR      arch/x86/kernel/cpu/built-in.a
  CC      arch/x86/kernel/ldt.o
  CC      fs/fat/cache.o
  CC      drivers/tty/vt/vt_ioctl.o
  CC      net/xfrm/xfrm_hash.o
  CC      fs/fat/dir.o
  CC      kernel/irq/pm.o
  CC      net/ipv6/udp.o
  CC      drivers/tty/hvc/hvc_console.o
  CC      drivers/acpi/acpica/evxfevnt.o
  CC      drivers/acpi/acpica/evxfgpe.o
  CC      fs/proc/proc_sysctl.o
  CC      fs/jbd2/recovery.o
  CC      mm/page_vma_mapped.o
  CC      kernel/module/sysfs.o
  CC [M]  net/netfilter/ipvs/ip_vs_rr.o
  CC [M]  arch/x86/kvm/smm.o
  CC      net/core/dev_addr_lists.o
  CC      drivers/pci/pci.o
  CC      drivers/pci/pci-driver.o
  CC      crypto/cbc.o
  CC      drivers/dma/virt-dma.o
  CC      fs/proc/proc_net.o
  CC      drivers/acpi/nvs.o
  CC      fs/ext4/dir.o
  CC      drivers/tty/vt/vc_screen.o
  CC      kernel/rcu/rcu_segcblist.o
  CC      net/ipv6/udplite.o
  CC [M]  sound/hda/hdac_controller.o
  CC      drivers/pci/search.o
  CC [M]  drivers/video/fbdev/core/fbcon.o
  CC [M]  drivers/virtio/virtio_mem.o
  CC [M]  sound/hda/hdac_stream.o
  CC      drivers/pci/pci-sysfs.o
  AS      arch/x86/kernel/ibt_selftest.o
  CC      net/xfrm/xfrm_input.o
  CC      net/ipv4/tcp_input.o
  CC [M]  drivers/video/fbdev/core/bitblit.o
  CC      drivers/acpi/acpica/evxfregn.o
  CC      kernel/cgroup/cgroup.o
  CC      kernel/trace/trace_clock.o
  CC      crypto/pcbc.o
  CC      kernel/irq/msi.o
  CC      kernel/time/timer.o
  AR      kernel/module/built-in.a
  CC      kernel/bpf/core.o
  CC      kernel/time/hrtimer.o
  CC      arch/x86/kernel/setup.o
  CC      kernel/futex/syscalls.o
  CC      drivers/dma/acpi-dma.o
  AR      drivers/tty/hvc/built-in.a
  CC      net/ipv4/tcp_output.o
  CC      drivers/acpi/wakeup.o
  CC      net/ipv6/raw.o
  AR      fs/hugetlbfs/built-in.a
  CC      net/ipv4/tcp_timer.o
  CC      fs/jbd2/checkpoint.o
  CC      net/ipv6/icmp.o
  CC      mm/pagewalk.o
  CC      net/ipv6/mcast.o
  CC      drivers/acpi/acpica/exconcat.o
  CC      block/blk-throttle.o
  CC      net/ipv4/tcp_ipv4.o
  CC      kernel/trace/ftrace.o
  LD [M]  net/netfilter/ipvs/ip_vs.o
  CC [M]  arch/x86/kvm/vmx/vmx.o
  CC      crypto/cts.o
  CC      drivers/acpi/sleep.o
  CC      net/core/dst.o
  CC      drivers/tty/vt/selection.o
  CC [M]  arch/x86/kvm/kvm-asm-offsets.s
  CC      net/ipv4/tcp_minisocks.o
  AR      kernel/rcu/built-in.a
  CC      block/mq-deadline.o
  CC      fs/ext4/ext4_jbd2.o
  CC      drivers/acpi/acpica/exconfig.o
  CC      fs/fat/fatent.o
  CC [M]  sound/hda/array.o
  CC      fs/jbd2/revoke.o
  CC      fs/jbd2/journal.o
  CC      drivers/tty/serial/8250/8250_core.o
  AR      drivers/tty/ipwireless/built-in.a
  CC      drivers/pci/rom.o
  CC      fs/proc/kcore.o
  AR      drivers/dma/built-in.a
  CC      drivers/tty/serial/8250/8250_pnp.o
  CC      kernel/futex/pi.o
  CC [M]  net/netfilter/nf_conntrack_expect.o
  CC      drivers/pci/setup-res.o
  CC      arch/x86/kernel/x86_init.o
  CC      drivers/acpi/acpica/exconvrt.o
  CC      arch/x86/kernel/i8259.o
  CC      crypto/lrw.o
  CC      kernel/irq/affinity.o
  CC      drivers/tty/vt/keyboard.o
  CC      drivers/pci/irq.o
  CC      mm/pgtable-generic.o
  CC [M]  sound/hda/hdmi_chmap.o
  CC      net/xfrm/xfrm_output.o
  CC      fs/fat/file.o
  CC      kernel/time/timekeeping.o
  CC      drivers/acpi/device_sysfs.o
  CC      kernel/futex/requeue.o
  AR      drivers/virtio/built-in.a
  CC      drivers/char/hw_random/core.o
  CC [M]  drivers/video/fbdev/core/softcursor.o
  CC      drivers/char/hw_random/intel-rng.o
  CC [M]  drivers/video/fbdev/core/tileblit.o
  CC      net/core/netevent.o
  CC      drivers/acpi/acpica/excreate.o
  CC      drivers/char/agp/backend.o
  CC      kernel/irq/matrix.o
  CC      drivers/char/agp/generic.o
  AR      sound/x86/built-in.a
  CC      arch/x86/kernel/irqinit.o
  AR      sound/xen/built-in.a
  AR      sound/virtio/built-in.a
  CC      fs/fat/inode.o
  CC      fs/proc/kmsg.o
  CC      sound/sound_core.o
  CC      fs/fat/misc.o
  CC      net/ipv6/reassembly.o
  CC      kernel/futex/waitwake.o
  CC      drivers/tty/serial/8250/8250_port.o
  CC      crypto/xts.o
  CC      drivers/pci/vpd.o
  CC      drivers/char/tpm/tpm-chip.o
  CC      fs/ext4/extents.o
  CC      block/kyber-iosched.o
  CC      drivers/char/tpm/tpm-dev-common.o
  CC      kernel/trace/ring_buffer.o
  CC      net/ipv6/tcp_ipv6.o
  CC      drivers/acpi/acpica/exdebug.o
  CC      drivers/pci/setup-bus.o
  CC      kernel/cgroup/rstat.o
  CC      sound/last.o
  CC      mm/rmap.o
  CC      kernel/time/ntp.o
  CC      drivers/pci/vc.o
  CC [M]  sound/hda/trace.o
  CC      kernel/time/clocksource.o
  CC      fs/proc/page.o
  CC      fs/fat/nfs.o
  CC      kernel/time/jiffies.o
  AR      drivers/char/hw_random/built-in.a
  CC      drivers/acpi/device_pm.o
  CC      net/core/neighbour.o
  CC [M]  net/netfilter/nf_conntrack_helper.o
  CC [M]  net/netfilter/nf_conntrack_proto.o
  CC [M]  drivers/video/fbdev/core/fb_logo.o
  AR      kernel/futex/built-in.a
  CC      kernel/events/core.o
  CC      drivers/char/agp/isoch.o
  CC      arch/x86/kernel/jump_label.o
  CC      drivers/acpi/acpica/exdump.o
  CC      fs/fat/namei_vfat.o
  CC      kernel/events/ring_buffer.o
  AR      kernel/bpf/built-in.a
  CC      drivers/acpi/proc.o
  CC      kernel/time/timer_list.o
  CC      crypto/ctr.o
  CC      drivers/acpi/acpica/exfield.o
  CC      drivers/tty/tty_io.o
  CC      drivers/char/tpm/tpm-dev.o
  CC      kernel/time/timeconv.o
  CC      drivers/char/agp/intel-agp.o
  CC      net/core/rtnetlink.o
  CC      drivers/tty/vt/consolemap.o
  AR      kernel/irq/built-in.a
  CC      kernel/fork.o
  CC      arch/x86/kernel/irq_work.o
  CC      drivers/acpi/bus.o
  HOSTCC  drivers/tty/vt/conmakehash
  CC      kernel/time/timecounter.o
  CC      lib/zstd/zstd_decompress_module.o
  CC      lib/zstd/decompress/huf_decompress.o
  CC      fs/nfs/client.o
  CC      fs/fat/namei_msdos.o
  CC      lib/zstd/decompress/zstd_ddict.o
  CC      drivers/char/agp/intel-gtt.o
  CC      net/xfrm/xfrm_sysctl.o
  CC [M]  sound/hda/hdac_component.o
  CC      drivers/acpi/acpica/exfldio.o
  CC      drivers/tty/n_tty.o
  CC      fs/nfs/dir.o
  AR      fs/proc/built-in.a
  CC      kernel/cgroup/namespace.o
  CC      fs/exportfs/expfs.o
  CC      fs/lockd/clntlock.o
  CC      crypto/gcm.o
  CC      kernel/time/alarmtimer.o
  CC      fs/nls/nls_base.o
  CC [M]  drivers/video/fbdev/core/cfbfillrect.o
  CC      drivers/char/tpm/tpm-interface.o
  CC      fs/nls/nls_cp437.o
  CC      fs/nfs/file.o
  AR      fs/jbd2/built-in.a
  AR      fs/unicode/built-in.a
  CC      kernel/cgroup/cgroup-v1.o
  CC      fs/ntfs/aops.o
  CC      block/bfq-iosched.o
  AR      fs/hostfs/built-in.a
  CC      drivers/acpi/glue.o
  CC      drivers/acpi/scan.o
  CC [M]  drivers/video/fbdev/core/cfbcopyarea.o
  CC      fs/nls/nls_ascii.o
  CC      crypto/pcrypt.o
  CC      drivers/char/mem.o
  CC      drivers/char/tpm/tpm1-cmd.o
  CC      drivers/acpi/acpica/exmisc.o
  CC      arch/x86/kernel/probe_roms.o
  CC      drivers/pci/mmap.o
  CC      drivers/char/random.o
  CC [M]  sound/hda/hdac_i915.o
  CC      drivers/acpi/resource.o
  CC      drivers/tty/vt/vt.o
  CC      drivers/tty/serial/8250/8250_dma.o
  CC [M]  net/netfilter/nf_conntrack_proto_generic.o
  AR      fs/exportfs/built-in.a
  CC      kernel/cgroup/freezer.o
  CC      kernel/cgroup/legacy_freezer.o
  CC      fs/debugfs/inode.o
  AR      fs/fat/built-in.a
  CC      fs/ntfs/attrib.o
  CC      drivers/char/misc.o
  CC      fs/nls/nls_iso8859-1.o
  CC      net/xfrm/xfrm_replay.o
  CC      net/xfrm/xfrm_device.o
  CC [M]  drivers/video/fbdev/core/cfbimgblt.o
  CC      drivers/acpi/acpica/exmutex.o
  AR      drivers/char/agp/built-in.a
  CC      net/xfrm/xfrm_algo.o
  CC      kernel/cgroup/pids.o
  CC [M]  net/netfilter/nf_conntrack_proto_tcp.o
  CC      crypto/cryptd.o
  CC      drivers/pci/setup-irq.o
  CC      kernel/time/posix-timers.o
  CC      fs/lockd/clntproc.o
  CC [M]  sound/hda/intel-dsp-config.o
  CC      net/core/utils.o
  CC      arch/x86/kernel/sys_ia32.o
  CC      fs/nls/nls_utf8.o
  CC      lib/zstd/decompress/zstd_decompress.o
  CC      net/ipv4/tcp_cong.o
  CC [M]  drivers/video/fbdev/core/sysfillrect.o
  CC      fs/ntfs/collate.o
  CC      kernel/trace/trace.o
  CC      drivers/char/tpm/tpm2-cmd.o
  CC      fs/lockd/clntxdr.o
  CC      drivers/tty/serial/8250/8250_dwlib.o
  CC      drivers/acpi/acpi_processor.o
  CC      net/ipv6/ping.o
  CC      kernel/cgroup/cpuset.o
  CC      mm/vmalloc.o
  CC      block/bfq-wf2q.o
  CC      drivers/acpi/acpica/exnames.o
  AR      drivers/video/fbdev/omap/built-in.a
  CC [M]  sound/hda/intel-nhlt.o
  CC [M]  fs/nls/nls_ucs2_utils.o
  CC      drivers/acpi/processor_core.o
  CC      fs/debugfs/file.o
  CC      drivers/tty/tty_ioctl.o
  CC      drivers/acpi/acpica/exoparg1.o
  CC      kernel/exec_domain.o
  CC      fs/tracefs/inode.o
  CC      drivers/pci/proc.o
  CC      fs/tracefs/event_inode.o
  CC [M]  drivers/video/fbdev/core/syscopyarea.o
  CC      lib/zstd/decompress/zstd_decompress_block.o
  CC      arch/x86/kernel/signal_32.o
  CC [M]  net/netfilter/nf_conntrack_proto_udp.o
  CC      fs/ntfs/compress.o
  CC      kernel/panic.o
  CC [M]  sound/hda/intel-sdw-acpi.o
  AR      fs/nls/built-in.a
  CC      crypto/des_generic.o
  CC      net/ipv4/tcp_metrics.o
  CC      lib/zstd/zstd_common_module.o
  CC      drivers/tty/serial/8250/8250_pcilib.o
  CC      drivers/tty/serial/8250/8250_pci.o
  CC      drivers/acpi/acpica/exoparg2.o
  CC      drivers/acpi/acpica/exoparg3.o
  CC [M]  drivers/video/fbdev/core/sysimgblt.o
  CC [M]  net/netfilter/nf_conntrack_proto_icmp.o
  CC      arch/x86/kernel/sys_x86_64.o
  CC      fs/btrfs/super.o
  CC      net/xfrm/xfrm_user.o
  CC      fs/btrfs/ctree.o
  CC      drivers/tty/serial/8250/8250_exar.o
  CC      arch/x86/kernel/espfix_64.o
  CC      drivers/pci/slot.o
  CC      drivers/char/tpm/tpmrm-dev.o
  CC      kernel/trace/trace_output.o
  CC      net/packet/af_packet.o
  CC      fs/pstore/inode.o
  CC      lib/zstd/common/debug.o
  CC      drivers/tty/tty_ldisc.o
  CC      drivers/acpi/processor_pdc.o
  CC      lib/zstd/common/entropy_common.o
  CC      net/ipv6/exthdrs.o
  CC      block/bfq-cgroup.o
  LD [M]  sound/hda/snd-hda-core.o
  CC      fs/lockd/host.o
  AR      fs/debugfs/built-in.a
  CC      crypto/aes_generic.o
  CC      fs/ext4/extents_status.o
  CC      block/blk-mq-pci.o
  CC      kernel/time/posix-cpu-timers.o
  LD [M]  sound/hda/snd-intel-dspcfg.o
  LD [M]  sound/hda/snd-intel-sdw-acpi.o
  AR      sound/built-in.a
  CC      fs/ext4/file.o
  AR      fs/tracefs/built-in.a
  CC      kernel/trace/trace_seq.o
  CC      lib/zstd/common/error_private.o
  CC      drivers/acpi/acpica/exoparg6.o
  CC      drivers/tty/tty_buffer.o
  CC      fs/lockd/svc.o
  CC      drivers/pci/pci-acpi.o
  CC      fs/efivarfs/inode.o
  CC      lib/zstd/common/fse_decompress.o
  CC [M]  drivers/video/fbdev/core/fb_sys_fops.o
  CC      drivers/pci/quirks.o
  CC      fs/efivarfs/file.o
  CC [M]  arch/x86/kvm/vmx/pmu_intel.o
  CC      fs/nfs/getroot.o
  CC      net/key/af_key.o
  CC [M]  arch/x86/kvm/vmx/vmcs12.o
  CC      drivers/char/tpm/tpm2-space.o
  CC      drivers/acpi/ec.o
  CC      drivers/acpi/dock.o
  CC      drivers/acpi/pci_root.o
  CC      fs/ntfs/debug.o
  CC      drivers/char/tpm/tpm-sysfs.o
  COPY    drivers/tty/vt/defkeymap.c
  CONMK   drivers/tty/vt/consolemap_deftbl.c
  CC      drivers/tty/vt/defkeymap.o
  CC      arch/x86/kernel/ksysfs.o
  CC      drivers/acpi/acpica/exprep.o
  CC      fs/pstore/platform.o
  CC      fs/pstore/pmsg.o
  CC      drivers/acpi/acpica/exregion.o
  CC      drivers/char/tpm/eventlog/common.o
  AR      drivers/video/fbdev/omap2/omapfb/dss/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/displays/built-in.a
  CC      drivers/char/tpm/eventlog/tpm1.o
  AR      drivers/video/fbdev/omap2/omapfb/built-in.a
  CC      drivers/tty/vt/consolemap_deftbl.o
  AR      drivers/video/fbdev/omap2/built-in.a
  CC      kernel/trace/trace_stat.o
  AR      drivers/tty/vt/built-in.a
  CC      fs/ntfs/dir.o
  CC [M]  net/netfilter/nf_conntrack_extend.o
  CC      block/blk-mq-virtio.o
  CC      fs/efivarfs/super.o
  CC      drivers/tty/serial/8250/8250_early.o
  CC      drivers/tty/tty_port.o
  CC      fs/ext4/fsmap.o
  LD [M]  drivers/video/fbdev/core/fb.o
  CC      net/core/link_watch.o
  AR      drivers/video/fbdev/core/built-in.a
  CC [M]  drivers/video/fbdev/uvesafb.o
  CC      fs/ntfs/file.o
  CC      net/core/filter.o
  CC      kernel/trace/trace_printk.o
  CC      crypto/crc32c_generic.o
  CC [M]  drivers/video/fbdev/simplefb.o
  CC      drivers/acpi/acpica/exresnte.o
  CC      block/blk-mq-debugfs.o
  CC      net/ipv4/tcp_fastopen.o
  CC [M]  arch/x86/kvm/vmx/hyperv.o
  CC      arch/x86/kernel/bootflag.o
  CC      kernel/trace/pid_list.o
  CC      block/blk-pm.o
  CC      block/holder.o
  CC      lib/buildid.o
  CC      kernel/time/posix-clock.o
  CC [M]  net/netfilter/nf_conntrack_acct.o
  CC      fs/nfs/inode.o
  CC      drivers/char/tpm/eventlog/tpm2.o
  CC      fs/lockd/svclock.o
  CC      lib/cmdline.o
  AR      fs/pstore/built-in.a
  CC      crypto/crct10dif_common.o
  CC [M]  arch/x86/kvm/vmx/nested.o
  CC      fs/lockd/svcshare.o
  CC      net/ipv6/datagram.o
  CC      kernel/time/itimer.o
  CC      drivers/pci/ats.o
  CC      drivers/tty/serial/8250/8250_dw.o
  CC      fs/efivarfs/vars.o
  CC      kernel/trace/trace_sched_switch.o
  CC      drivers/acpi/acpica/exresolv.o
  AR      kernel/cgroup/built-in.a
  CC      kernel/cpu.o
  CC      kernel/exit.o
  CC      net/ipv4/tcp_rate.o
  CC      drivers/tty/serial/8250/8250_lpss.o
  CC      crypto/crct10dif_generic.o
  CC      arch/x86/kernel/e820.o
  CC      net/ipv6/ip6_flowlabel.o
  CC      drivers/tty/serial/8250/8250_mid.o
  CC      fs/ext4/fsync.o
  CC      kernel/softirq.o
  CC [M]  fs/netfs/buffered_read.o
  CC      lib/cpumask.o
  CC      drivers/tty/serial/8250/8250_pericom.o
  CC      arch/x86/kernel/pci-dma.o
  CC [M]  fs/netfs/io.o
  CC      fs/ntfs/index.o
  CC [M]  net/netfilter/nf_conntrack_seqadj.o
  AR      net/bridge/netfilter/built-in.a
  CC      net/bridge/br.o
  CC      drivers/char/tpm/tpm_ppi.o
  CC      crypto/authenc.o
  CC      drivers/acpi/acpica/exresop.o
  AR      block/built-in.a
  CC      net/bridge/br_device.o
  CC      crypto/authencesn.o
  CC [M]  net/netfilter/nf_conntrack_proto_icmpv6.o
  CC [M]  arch/x86/kvm/vmx/posted_intr.o
  CC      drivers/pci/iov.o
  AR      net/xfrm/built-in.a
  AR      net/dsa/built-in.a
  CC      mm/page_alloc.o
  CC      drivers/pci/pci-label.o
  AR      fs/efivarfs/built-in.a
  CC [M]  net/netfilter/nf_conntrack_proto_dccp.o
  CC [M]  fs/netfs/iterator.o
  CC      lib/zstd/common/zstd_common.o
  LD [M]  arch/x86/kvm/kvm.o
  CC      fs/btrfs/extent-tree.o
  CC      net/bridge/br_fdb.o
  CC      kernel/time/clockevents.o
  CC [M]  fs/fscache/cache.o
  AR      lib/zstd/built-in.a
  CC      drivers/char/virtio_console.o
  CC      lib/ctype.o
  CC [M]  fs/fscache/cookie.o
  CC      lib/dec_and_lock.o
  CC      net/bridge/br_forward.o
  CC      drivers/acpi/acpica/exserial.o
  CC      fs/lockd/svcproc.o
  AR      drivers/tty/serial/8250/built-in.a
  CC      drivers/tty/serial/serial_core.o
  CC [M]  fs/fscache/io.o
  CC      drivers/acpi/acpica/exstore.o
  AR      drivers/video/fbdev/built-in.a
  CC      net/core/sock_diag.o
  AR      drivers/video/built-in.a
  CC      kernel/trace/trace_functions.o
  CC      drivers/acpi/pci_link.o
  CC      lib/decompress.o
  CC      drivers/char/tpm/eventlog/acpi.o
  CC      fs/ntfs/inode.o
  CC      net/ipv4/tcp_recovery.o
  CC      drivers/acpi/pci_irq.o
  CC      lib/decompress_bunzip2.o
  AR      net/key/built-in.a
  CC [M]  net/sunrpc/auth_gss/auth_gss.o
  CC      arch/x86/kernel/quirks.o
  CC      fs/ext4/hash.o
  CC [M]  net/sunrpc/auth_gss/gss_generic_token.o
  CC [M]  net/sunrpc/auth_gss/gss_mech_switch.o
  CC [M]  fs/netfs/main.o
  CC      net/sunrpc/clnt.o
  CC [M]  fs/netfs/objects.o
  CC      kernel/time/tick-common.o
  CC      mm/init-mm.o
  CC      drivers/acpi/acpica/exstoren.o
  CC      net/ipv6/inet6_connection_sock.o
  CC      fs/ext4/ialloc.o
  CC      crypto/lzo.o
  CC      fs/btrfs/print-tree.o
  CC      net/packet/diag.o
  CC      drivers/pci/pci-stub.o
  CC      fs/ntfs/mft.o
  CC      drivers/pci/vgaarb.o
  CC [M]  fs/fscache/main.o
  CC      fs/btrfs/root-tree.o
  CC [M]  net/netfilter/nf_conntrack_proto_sctp.o
  CC      fs/ext4/indirect.o
  CC      drivers/char/tpm/eventlog/efi.o
  CC      drivers/char/hpet.o
  CC      mm/memblock.o
  CC      kernel/events/callchain.o
  CC      drivers/acpi/acpica/exstorob.o
  CC      drivers/acpi/acpi_lpss.o
  CC      lib/decompress_inflate.o
  CC      kernel/resource.o
  CC      kernel/trace/trace_preemptirq.o
  CC      drivers/acpi/acpica/exsystem.o
  CC      fs/lockd/svcsubs.o
  AR      drivers/iommu/amd/built-in.a
  CC      fs/nfs/super.o
  CC      drivers/iommu/intel/dmar.o
  CC      arch/x86/kernel/topology.o
  CC      drivers/iommu/intel/iommu.o
  AR      drivers/iommu/iommufd/built-in.a
  CC      crypto/lzo-rle.o
  AR      drivers/iommu/arm/arm-smmu/built-in.a
  CC      fs/nfs/io.o
  CC      net/core/dev_ioctl.o
  AR      drivers/iommu/arm/arm-smmu-v3/built-in.a
  AR      drivers/iommu/arm/built-in.a
  CC      drivers/iommu/intel/pasid.o
  CC      drivers/acpi/acpica/extrace.o
  CC      kernel/time/tick-broadcast.o
  CC      crypto/lz4.o
  CC [M]  fs/fscache/volume.o
  CC      drivers/acpi/acpica/exutils.o
  CC      net/ipv4/tcp_ulp.o
  CC      net/sunrpc/xprt.o
  CC      lib/decompress_unlz4.o
  CC [M]  net/sunrpc/auth_gss/svcauth_gss.o
  LD [M]  fs/netfs/netfs.o
  CC      fs/lockd/mon.o
  CC      drivers/char/tpm/tpm_crb.o
  CC [M]  fs/smb/common/cifs_arc4.o
  CC [M]  fs/smb/client/trace.o
  AR      net/packet/built-in.a
  CC      fs/ntfs/mst.o
  CC      fs/ntfs/namei.o
  CC      arch/x86/kernel/kdebugfs.o
  CC      drivers/acpi/acpica/hwacpi.o
  CC      kernel/events/hw_breakpoint.o
  CC      kernel/events/uprobes.o
  CC      net/ipv6/udp_offload.o
  CC [M]  fs/smb/common/cifs_md4.o
  CC [M]  fs/fscache/proc.o
  CC      kernel/trace/trace_nop.o
  CC      drivers/char/nvram.o
  CC      fs/ext4/inline.o
  CC      crypto/lz4hc.o
  AR      drivers/pci/built-in.a
  CC      drivers/iommu/iommu.o
  CC      kernel/trace/trace_functions_graph.o
  CC      lib/decompress_unlzma.o
  CC      net/bridge/br_if.o
  CC      kernel/time/tick-broadcast-hrtimer.o
  CC      net/sunrpc/socklib.o
  CC [M]  net/netfilter/nf_conntrack_netlink.o
  CC      drivers/tty/serial/serial_base_bus.o
  CC      net/core/tso.o
  CC      drivers/acpi/acpi_apd.o
  CC      drivers/acpi/acpica/hwesleep.o
  CC      net/bridge/br_input.o
  CC      fs/ntfs/runlist.o
  AR      drivers/gpu/host1x/built-in.a
  CC      fs/ntfs/super.o
  CC      kernel/sysctl.o
  CC      fs/nfs/direct.o
  CC      arch/x86/kernel/alternative.o
  AR      drivers/gpu/drm/tests/built-in.a
  CC [M]  drivers/gpu/drm/tests/drm_kunit_helpers.o
  CC      arch/x86/kernel/i8253.o
  CC [M]  drivers/gpu/drm/tests/drm_buddy_test.o
  CC      kernel/time/tick-oneshot.o
  CC      crypto/xxhash_generic.o
  AR      drivers/char/tpm/built-in.a
  CC      fs/nfs/pagelist.o
  CC      fs/lockd/trace.o
  CC      fs/btrfs/dir-item.o
  CC      fs/lockd/xdr.o
  LD [M]  fs/fscache/fscache.o
  CC      drivers/tty/tty_mutex.o
  CC      net/ipv4/tcp_offload.o
  CC [M]  fs/smb/client/cifsfs.o
  CC      drivers/iommu/intel/trace.o
  CC      fs/lockd/clnt4xdr.o
  AR      drivers/char/built-in.a
  CC      drivers/tty/tty_ldsem.o
  CC [M]  drivers/gpu/drm/tests/drm_cmdline_parser_test.o
  CC      drivers/tty/tty_baudrate.o
  CC      drivers/acpi/acpica/hwgpe.o
  CC      drivers/tty/tty_jobctrl.o
  CC      drivers/acpi/acpi_platform.o
  CC      lib/decompress_unlzo.o
  CC      drivers/tty/serial/serial_ctrl.o
  CC      drivers/acpi/acpi_pnp.o
  CC      kernel/time/tick-sched.o
  CC      crypto/rng.o
  CC      net/ipv6/seg6.o
  CC      drivers/tty/serial/serial_port.o
  CC      drivers/iommu/intel/cap_audit.o
  CC      drivers/iommu/intel/irq_remapping.o
  CC      fs/lockd/xdr4.o
  CC      kernel/trace/fgraph.o
  CC      net/core/sock_reuseport.o
  CC      fs/nfs/read.o
  CC      fs/ext4/inode.o
  CC      drivers/acpi/acpica/hwregs.o
  CC      fs/nfs/symlink.o
  CC      drivers/acpi/power.o
  CC      lib/decompress_unxz.o
  CC      fs/ext4/ioctl.o
  CC      drivers/acpi/event.o
  CC      kernel/trace/blktrace.o
  CC      net/sunrpc/xprtsock.o
  CC      drivers/tty/serial/earlycon.o
  CC      fs/ntfs/sysctl.o
  CC      fs/nfs/unlink.o
  CC      drivers/tty/n_null.o
  CC      kernel/trace/trace_events.o
  CC      fs/ntfs/unistr.o
  CC      drivers/acpi/acpica/hwsleep.o
  CC      crypto/drbg.o
  CC      fs/nfs/write.o
  CC [M]  net/sunrpc/auth_gss/gss_rpc_upcall.o
  CC      crypto/jitterentropy.o
  AR      kernel/events/built-in.a
  CC      kernel/trace/trace_export.o
  CC [M]  fs/fuse/dev.o
  CC      net/bridge/br_ioctl.o
  CC      kernel/trace/trace_event_perf.o
  CC      fs/nfs/namespace.o
  CC      net/sunrpc/sched.o
  CC      fs/btrfs/file-item.o
  CC      arch/x86/kernel/hw_breakpoint.o
  CC      drivers/acpi/acpica/hwvalid.o
  CC      kernel/time/vsyscall.o
  CC      net/ipv4/tcp_plb.o
  CC      lib/decompress_unzstd.o
  CC      fs/ext4/mballoc.o
  UPD     arch/x86/kvm/kvm-asm-offsets.h
  CC      net/sunrpc/auth.o
  AS [M]  arch/x86/kvm/vmx/vmenter.o
  LD [M]  arch/x86/kvm/kvm-intel.o
  CC      net/ipv6/fib6_notifier.o
  CC      mm/memory_hotplug.o
  CC      arch/x86/kernel/tsc.o
  CC      arch/x86/kernel/tsc_msr.o
  CC      fs/ext4/migrate.o
  CC      net/ipv4/datagram.o
  CC      drivers/tty/pty.o
  CC      kernel/capability.o
  CC      drivers/tty/serial/serial_mctrl_gpio.o
  CC      kernel/trace/trace_events_filter.o
  CC      drivers/acpi/evged.o
  CC      kernel/ptrace.o
  CC      fs/lockd/svc4proc.o
  CC      arch/x86/kernel/io_delay.o
  CC      fs/btrfs/inode-item.o
  CC      fs/ntfs/upcase.o
  CC      drivers/acpi/acpica/hwxface.o
  CC      kernel/time/timekeeping_debug.o
  CC      fs/btrfs/disk-io.o
  CC      drivers/iommu/intel/perfmon.o
  CC      drivers/acpi/sysfs.o
  CC [M]  drivers/gpu/drm/tests/drm_connector_test.o
  CC      lib/dump_stack.o
  CC      arch/x86/kernel/rtc.o
  CC      net/bridge/br_stp.o
  CC      arch/x86/kernel/resource.o
  CC [M]  net/netfilter/nf_nat_core.o
  CC [M]  fs/smb/client/cifs_debug.o
  AR      drivers/gpu/vga/built-in.a
  CC      kernel/trace/trace_events_trigger.o
  CC      fs/nfs/mount_clnt.o
  CC [M]  net/netfilter/nf_nat_proto.o
  AS      arch/x86/kernel/irqflags.o
  CC      arch/x86/kernel/static_call.o
  CC [M]  net/sunrpc/auth_gss/gss_rpc_xdr.o
  CC      net/core/fib_notifier.o
  CC      arch/x86/kernel/process.o
  CC      drivers/acpi/acpica/hwxfsleep.o
  CC [M]  net/sunrpc/auth_gss/trace.o
  AR      fs/ntfs/built-in.a
  AR      drivers/tty/serial/built-in.a
  CC      drivers/acpi/acpica/hwpci.o
  CC      drivers/acpi/property.o
  CC [M]  fs/overlayfs/super.o
  CC      net/ipv6/rpl.o
  CC      drivers/tty/sysrq.o
  CC [M]  fs/overlayfs/namei.o
  CC      kernel/time/namespace.o
  CC      kernel/user.o
  CC      net/bridge/br_stp_bpdu.o
  CC [M]  drivers/gpu/drm/tests/drm_damage_helper_test.o
  CC      crypto/jitterentropy-kcapi.o
  CC      drivers/acpi/acpi_cmos_rtc.o
  CC      net/ipv6/ioam6.o
  CC [M]  drivers/gpu/drm/tests/drm_dp_mst_helper_test.o
  CC      lib/earlycpio.o
  CC      drivers/connector/cn_queue.o
  CC      lib/extable.o
  AR      drivers/gpu/drm/arm/built-in.a
  AR      drivers/gpu/drm/display/built-in.a
  CC [M]  drivers/gpu/drm/display/drm_display_helper_mod.o
  CC      drivers/base/power/sysfs.o
  CC      net/ipv4/raw.o
  CC [M]  fs/fuse/dir.o
  CC      drivers/base/power/generic_ops.o
  CC      fs/lockd/procfs.o
  CC      drivers/acpi/acpica/nsaccess.o
  CC      fs/btrfs/transaction.o
  CC      arch/x86/kernel/ptrace.o
  CC [M]  fs/smb/client/connect.o
  CC [M]  fs/fuse/file.o
  CC      crypto/ghash-generic.o
  AR      drivers/iommu/intel/built-in.a
  CC [M]  drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
  CC      drivers/iommu/iommu-traces.o
  CC [M]  drivers/gpu/drm/display/drm_dp_helper.o
  CC [M]  fs/fuse/inode.o
  CC      lib/flex_proportions.o
  CC      crypto/af_alg.o
  CC      net/ipv4/udp.o
  CC      mm/madvise.o
  CC      drivers/block/loop.o
  CC      mm/page_io.o
  AR      kernel/time/built-in.a
  CC      kernel/signal.o
  AR      drivers/gpu/drm/renesas/rcar-du/built-in.a
  CC      kernel/trace/trace_eprobe.o
  AR      drivers/gpu/drm/renesas/built-in.a
  CC      drivers/base/power/common.o
  AR      drivers/misc/eeprom/built-in.a
  CC      kernel/trace/trace_kprobe.o
  CC      net/core/xdp.o
  CC      fs/nfs/nfstrace.o
  AR      drivers/misc/cb710/built-in.a
  AR      drivers/gpu/drm/omapdrm/built-in.a
  AR      drivers/misc/ti-st/built-in.a
  CC      net/bridge/br_stp_if.o
  AR      drivers/misc/lis3lv02d/built-in.a
  CC      net/bridge/br_stp_timer.o
  AR      drivers/misc/cardreader/built-in.a
  CC      drivers/acpi/acpica/nsalloc.o
  CC      net/bridge/br_netlink.o
  CC [M]  drivers/misc/mei/hdcp/mei_hdcp.o
  CC      fs/ext4/mmp.o
  AR      drivers/tty/built-in.a
  CC [M]  drivers/gpu/drm/tests/drm_format_helper_test.o
  AR      fs/lockd/built-in.a
  AR      drivers/misc/built-in.a
  CC [M]  fs/smb/client/dir.o
  CC      fs/open.o
  CC      lib/idr.o
  CC      drivers/acpi/x86/apple.o
  CC      drivers/mfd/mfd-core.o
  CC [M]  net/netfilter/nf_nat_helper.o
  CC      drivers/mfd/intel-lpss.o
  CC      drivers/connector/connector.o
  CC [M]  drivers/misc/mei/pxp/mei_pxp.o
  CC      drivers/mfd/intel-lpss-pci.o
  CC [M]  fs/overlayfs/util.o
  CC      fs/ext4/move_extent.o
  CC      net/bridge/br_netlink_tunnel.o
  CC      drivers/base/power/qos.o
  CC      drivers/acpi/acpica/nsarguments.o
  CC      net/sunrpc/auth_null.o
  CC      fs/read_write.o
  CC      arch/x86/kernel/tls.o
  CC      drivers/iommu/iommu-sysfs.o
  CC      drivers/acpi/x86/utils.o
  CC      lib/irq_regs.o
  CC [M]  drivers/misc/mei/init.o
  CC [M]  drivers/misc/mei/hbm.o
  CC      lib/is_single_threaded.o
  CC      net/ipv6/sysctl_net_ipv6.o
  CC      net/bridge/br_arp_nd_proxy.o
  CC      drivers/mfd/intel-lpss-acpi.o
  CC      fs/file_table.o
  CC      drivers/acpi/acpica/nsconvert.o
  CC      lib/klist.o
  CC      net/8021q/vlan_core.o
  CC [M]  drivers/misc/mei/interrupt.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_mech.o
  CC      net/ipv4/udplite.o
  CC      net/ipv6/xfrm6_policy.o
  CC [M]  drivers/gpu/drm/display/drm_dp_mst_topology.o
  CC      drivers/connector/cn_proc.o
  CC      mm/swap_state.o
  CC [M]  drivers/gpu/drm/tests/drm_format_test.o
  CC      drivers/iommu/dma-iommu.o
  CC      kernel/sys.o
  CC      net/ipv6/xfrm6_state.o
  CC      drivers/iommu/iova.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_seal.o
  CC      crypto/algif_hash.o
  CC      lib/kobject.o
  CC [M]  net/netfilter/nf_nat_redirect.o
  CC      crypto/algif_skcipher.o
  CC      arch/x86/kernel/step.o
  CC      drivers/mfd/intel_soc_pmic_crc.o
  CC      crypto/xor.o
  CC      drivers/acpi/acpica/nsdump.o
  CC      drivers/base/power/runtime.o
  CC      net/core/flow_offload.o
  CC [M]  fs/overlayfs/inode.o
  CC      crypto/hash_info.o
  CC [M]  drivers/gpu/drm/display/drm_dsc_helper.o
  CC [M]  drivers/block/nbd.o
  CC      drivers/base/power/wakeirq.o
  CC      net/bridge/br_sysfs_if.o
  CC      fs/ext4/namei.o
  CC [M]  drivers/misc/mei/client.o
  CC [M]  net/netfilter/nf_nat_masquerade.o
  CC [M]  drivers/gpu/drm/tests/drm_framebuffer_test.o
  CC      fs/btrfs/inode.o
  CC      net/sunrpc/auth_tls.o
  CC      drivers/acpi/acpica/nseval.o
  CC      kernel/trace/error_report-traces.o
  CC      lib/kobject_uevent.o
  CC      lib/logic_pio.o
  CC      drivers/acpi/acpica/nsinit.o
  CC      lib/maple_tree.o
  CC      net/bridge/br_sysfs_br.o
  CC [M]  fs/fuse/control.o
  CC      fs/super.o
  CC      fs/btrfs/file.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_unseal.o
  CC [M]  drivers/gpu/drm/tests/drm_managed_test.o
  CC      arch/x86/kernel/i8237.o
  CC      arch/x86/kernel/stacktrace.o
  CC [M]  drivers/mfd/lpc_sch.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_wrap.o
  CC      arch/x86/kernel/reboot.o
  AR      drivers/gpu/drm/tilcdc/built-in.a
  CC      net/bridge/br_nf_core.o
  CC      net/sunrpc/auth_unix.o
  CC [M]  net/8021q/vlan.o
  CC      net/ipv6/xfrm6_input.o
  CC      net/sunrpc/svc.o
  AR      drivers/connector/built-in.a
  CC      drivers/acpi/x86/s2idle.o
  CC [M]  drivers/mfd/lpc_ich.o
  CC      fs/char_dev.o
  CC      drivers/acpi/acpica/nsload.o
  CC      fs/btrfs/defrag.o
  CC      crypto/simd.o
  CC      mm/swapfile.o
  CC      net/ipv4/udp_offload.o
  CC      arch/x86/kernel/msr.o
  CC [M]  net/netfilter/x_tables.o
  AR      drivers/nfc/built-in.a
  CC      kernel/trace/power-traces.o
  CC [M]  fs/overlayfs/file.o
  AR      drivers/dax/hmem/built-in.a
  CC [M]  drivers/gpu/drm/tests/drm_mm_test.o
  CC      drivers/iommu/irq_remapping.o
  CC      drivers/dax/super.o
  CC      drivers/base/power/main.o
  CC      net/core/gro.o
  CC [M]  fs/fuse/xattr.o
  CC      net/sunrpc/svcsock.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_crypto.o
  CC [M]  net/netfilter/xt_tcpudp.o
  CC      drivers/acpi/acpica/nsnames.o
  CC      drivers/dma-buf/dma-buf.o
  CC      net/sunrpc/svcauth.o
  CC [M]  fs/fuse/acl.o
  CC      fs/ext4/page-io.o
  CC      fs/ext4/readpage.o
  CC [M]  crypto/md4.o
  CC      drivers/dax/bus.o
  AR      drivers/cxl/core/built-in.a
  AR      drivers/cxl/built-in.a
  CC [M]  net/sunrpc/auth_gss/gss_krb5_keys.o
  LD [M]  net/sunrpc/auth_gss/auth_rpcgss.o
  AR      drivers/macintosh/built-in.a
  CC      drivers/scsi/scsi.o
  CC      net/ipv4/arp.o
  AR      drivers/mfd/built-in.a
  CC      arch/x86/kernel/cpuid.o
  CC      drivers/nvme/host/core.o
  CC      net/bridge/br_multicast.o
  CC      drivers/nvme/host/ioctl.o
  CC      drivers/nvme/host/sysfs.o
  CC      fs/stat.o
  CC [M]  fs/smb/client/file.o
  CC      drivers/acpi/debugfs.o
  AR      drivers/iommu/built-in.a
  CC      drivers/scsi/hosts.o
  CC      drivers/acpi/acpica/nsobject.o
  CC      drivers/nvme/host/pr.o
  CC [M]  net/8021q/vlan_dev.o
  CC      kernel/umh.o
  CC [M]  fs/fuse/readdir.o
  CC [M]  fs/overlayfs/dir.o
  CC [M]  drivers/misc/mei/main.o
  CC [M]  crypto/ccm.o
  CC [M]  fs/fuse/ioctl.o
  CC      net/ipv6/xfrm6_output.o
  CC      kernel/workqueue.o
  CC      arch/x86/kernel/early-quirks.o
  CC      drivers/acpi/acpica/nsparse.o
  CC      drivers/acpi/acpi_lpat.o
  CC      kernel/trace/rpm-traces.o
  LD [M]  net/sunrpc/auth_gss/rpcsec_gss_krb5.o
  CC      arch/x86/kernel/smp.o
  CC      fs/ext4/resize.o
  CC      drivers/dma-buf/dma-fence.o
  CC      drivers/acpi/acpi_lpit.o
  CC      fs/nfs/export.o
  CC      drivers/scsi/scsi_ioctl.o
  CC      drivers/nvme/host/trace.o
  CC [M]  drivers/misc/mei/dma-ring.o
  AR      drivers/block/built-in.a
  AR      drivers/gpu/drm/imx/built-in.a
  CC      kernel/trace/trace_dynevent.o
  CC      drivers/scsi/scsicam.o
  AR      drivers/gpu/drm/i2c/built-in.a
  CC      fs/btrfs/extent_map.o
  CC [M]  drivers/gpu/drm/display/drm_hdcp_helper.o
  CC      net/sunrpc/svcauth_unix.o
  AR      drivers/dax/built-in.a
  CC      drivers/nvme/host/fault_inject.o
  CC      drivers/nvme/host/pci.o
  CC [M]  fs/overlayfs/readdir.o
  CC      fs/btrfs/sysfs.o
  CC      drivers/acpi/acpica/nspredef.o
  CC      fs/exec.o
  CC [M]  net/netfilter/xt_mark.o
  CC      drivers/scsi/scsi_error.o
  CC      net/core/netdev-genl.o
  CC      net/sunrpc/addr.o
  CC      drivers/acpi/acpica/nsprepkg.o
  CC      drivers/ata/libata-core.o
  CC      fs/btrfs/accessors.o
  LD [M]  fs/fuse/fuse.o
  CC [M]  drivers/gpu/drm/tests/drm_modes_test.o
  CC      net/core/netdev-genl-gen.o
  CC      fs/btrfs/xattr.o
  CC      drivers/base/power/wakeup.o
  CC      lib/memcat_p.o
  CC [M]  net/8021q/vlan_netlink.o
  CC      net/sunrpc/rpcb_clnt.o
  CC [M]  crypto/arc4.o
  CC      drivers/acpi/acpica/nsrepair.o
  CC      drivers/scsi/scsi_lib.o
  CC      kernel/trace/trace_probe.o
  CC      drivers/base/power/wakeup_stats.o
  CC      fs/pipe.o
  CC [M]  drivers/misc/mei/bus.o
  CC      drivers/scsi/scsi_lib_dma.o
  CC      net/ipv6/xfrm6_protocol.o
  CC      net/ipv4/icmp.o
  CC [M]  crypto/ecc.o
  CC [M]  net/netfilter/xt_nat.o
  CC [M]  drivers/gpu/drm/display/drm_hdmi_helper.o
  CC      arch/x86/kernel/smpboot.o
  CC      lib/nmi_backtrace.o
  CC      net/sunrpc/timer.o
  CC [M]  net/8021q/vlanproc.o
  CC      net/ipv4/devinet.o
  CC      fs/ext4/super.o
  CC      fs/namei.o
  CC      mm/swap_slots.o
  CC      fs/nfs/sysfs.o
  CC      drivers/acpi/acpica/nsrepair2.o
  CC      drivers/dma-buf/dma-fence-array.o
  CC      drivers/base/power/domain.o
  CC [M]  drivers/gpu/drm/tests/drm_plane_helper_test.o
  CC      mm/dmapool.o
  CC      drivers/base/power/domain_governor.o
  CC      kernel/trace/trace_uprobe.o
  CC      net/core/gso.o
  CC      fs/btrfs/ordered-data.o
  CC [M]  fs/overlayfs/copy_up.o
  AR      net/8021q/built-in.a
  CC [M]  fs/overlayfs/export.o
  CC [M]  net/netfilter/xt_REDIRECT.o
  CC [M]  drivers/gpu/drm/display/drm_scdc_helper.o
  CC      fs/btrfs/extent_io.o
  CC      drivers/base/power/clock_ops.o
  CC      drivers/acpi/acpica/nssearch.o
  CC      drivers/acpi/acpica/nsutils.o
  CC      drivers/dma-buf/dma-fence-chain.o
  CC      drivers/acpi/acpica/nswalk.o
  CC      drivers/acpi/prmt.o
  CC      kernel/pid.o
  CC      fs/ext4/symlink.o
  CC      drivers/scsi/scsi_scan.o
  CC [M]  drivers/misc/mei/bus-fixup.o
  LD [M]  net/8021q/8021q.o
  CC      net/sunrpc/xdr.o
  GEN     drivers/scsi/scsi_devinfo_tbl.c
  CC      mm/hugetlb.o
  CC      net/dcb/dcbnl.o
  CC [M]  drivers/gpu/drm/tests/drm_probe_helper_test.o
  CC      net/l3mdev/l3mdev.o
  CC      net/dcb/dcbevent.o
  CC      net/ipv6/netfilter.o
  CC      fs/btrfs/volumes.o
  CC      mm/hugetlb_vmemmap.o
  CC      fs/btrfs/async-thread.o
  CC      drivers/acpi/acpica/nsxfeval.o
  CC      fs/nfs/fs_context.o
  CC      fs/nfs/sysctl.o
  CC      net/sunrpc/sunrpc_syms.o
  CC [M]  drivers/gpu/drm/tests/drm_rect_test.o
  CC      arch/x86/kernel/tsc_sync.o
  AR      drivers/nvme/target/built-in.a
  CC      arch/x86/kernel/setup_percpu.o
  CC      kernel/task_work.o
  CC [M]  drivers/gpu/drm/display/drm_dp_aux_dev.o
  CC      net/core/net-sysfs.o
  CC      net/handshake/alert.o
  CC      drivers/dma-buf/dma-fence-unwrap.o
  CC [M]  net/bluetooth/af_bluetooth.o
  CC      net/handshake/genl.o
  CC [M]  fs/overlayfs/params.o
  CC      drivers/scsi/scsi_devinfo.o
  CC [M]  drivers/gpu/drm/tests/drm_exec_test.o
  AR      drivers/nvme/host/built-in.a
  CC      drivers/acpi/acpi_pcc.o
  AR      drivers/nvme/built-in.a
  CC      drivers/acpi/ac.o
  CC [M]  net/netfilter/xt_MASQUERADE.o
  CC [M]  crypto/essiv.o
  CC [M]  drivers/misc/mei/debugfs.o
  CC [M]  crypto/ecdh.o
  CC      net/handshake/netlink.o
  CC      drivers/acpi/acpica/nsxfname.o
  AR      drivers/base/power/built-in.a
  CC      drivers/acpi/acpica/nsxfobj.o
  CC      drivers/base/firmware_loader/builtin/main.o
  AR      net/l3mdev/built-in.a
  CC      drivers/base/firmware_loader/main.o
  CC      fs/btrfs/ioctl.o
  CC      drivers/dma-buf/dma-resv.o
  CC [M]  crypto/ecdh_helper.o
  CC      kernel/extable.o
  CC      arch/x86/kernel/ftrace.o
  CC      fs/nfs/nfs2super.o
  CC      fs/ext4/sysfs.o
  AR      drivers/base/firmware_loader/builtin/built-in.a
  CC      kernel/params.o
  CC      drivers/acpi/button.o
  CC      net/handshake/request.o
  CC      kernel/trace/rethook.o
  AS      arch/x86/kernel/ftrace_64.o
  CC      fs/btrfs/locking.o
  CC      drivers/scsi/scsi_sysctl.o
  CC      drivers/base/regmap/regmap.o
  CC      drivers/acpi/fan_core.o
  CC      mm/mempolicy.o
  CC      lib/plist.o
  CC      arch/x86/kernel/trace_clock.o
  CC      drivers/base/regmap/regcache.o
  CC [M]  drivers/misc/mei/mei-trace.o
  CC      drivers/acpi/acpica/psargs.o
  LD [M]  drivers/gpu/drm/display/drm_display_helper.o
  CC [M]  net/netfilter/xt_addrtype.o
  CC      lib/radix-tree.o
  AR      drivers/base/test/built-in.a
  CC      fs/nfs/proc.o
  CC      lib/ratelimit.o
  CC      lib/rbtree.o
  CC      drivers/base/regmap/regcache-rbtree.o
  CC      drivers/acpi/acpica/psloop.o
  LD [M]  fs/overlayfs/overlay.o
  CC      net/ipv6/fib6_rules.o
  AR      drivers/gpu/drm/panel/built-in.a
  AR      drivers/gpu/drm/bridge/analogix/built-in.a
  CC      drivers/base/regmap/regcache-flat.o
  AR      drivers/gpu/drm/bridge/cadence/built-in.a
  AR      drivers/gpu/drm/bridge/imx/built-in.a
  CC      net/ipv4/af_inet.o
  AR      drivers/gpu/drm/bridge/synopsys/built-in.a
  AR      drivers/gpu/drm/bridge/built-in.a
  AR      drivers/gpu/drm/hisilicon/built-in.a
  CC      net/bridge/br_mdb.o
  AR      drivers/gpu/drm/mxsfb/built-in.a
  AR      drivers/gpu/drm/tiny/built-in.a
  LD [M]  crypto/ecdh_generic.o
  AR      drivers/gpu/drm/xlnx/built-in.a
  AR      crypto/built-in.a
  AR      drivers/gpu/drm/gud/built-in.a
  CC      net/ipv4/igmp.o
  AR      drivers/gpu/drm/solomon/built-in.a
  CC [M]  net/netfilter/xt_conntrack.o
  CC [M]  drivers/gpu/drm/ttm/ttm_tt.o
  CC      fs/nfs/nfs2xdr.o
  CC      fs/nfs/nfs3super.o
  CC [M]  net/bluetooth/hci_core.o
  CC      net/bridge/br_multicast_eht.o
  CC      lib/seq_buf.o
  CC      drivers/scsi/scsi_debugfs.o
  CC      net/handshake/tlshd.o
  CC      arch/x86/kernel/trace.o
  AR      net/dcb/built-in.a
  CC      fs/ext4/xattr.o
  CC      net/sunrpc/cache.o
  CC [M]  drivers/misc/mei/pci-me.o
  AR      kernel/trace/built-in.a
  CC [M]  drivers/gpu/drm/ttm/ttm_bo.o
  CC      drivers/scsi/scsi_trace.o
  CC      net/handshake/trace.o
  CC      drivers/acpi/acpica/psobject.o
  AR      drivers/base/firmware_loader/built-in.a
  CC      kernel/kthread.o
  CC      drivers/scsi/scsi_logging.o
  CC      drivers/dma-buf/sync_file.o
  CC      fs/btrfs/orphan.o
  CC      fs/nfs/nfs3client.o
  CC      drivers/acpi/fan_attr.o
  CC      kernel/sys_ni.o
  CC [M]  drivers/misc/mei/hw-me.o
  CC      mm/sparse.o
  CC      net/core/page_pool.o
  CC      drivers/acpi/processor_driver.o
  CC      fs/fcntl.o
  CC      net/sunrpc/rpc_pipe.o
  CC      arch/x86/kernel/rethook.o
  CC [M]  net/dns_resolver/dns_key.o
  CC [M]  fs/smb/client/inode.o
  CC      lib/siphash.o
  CC [M]  net/dns_resolver/dns_query.o
  CC [M]  net/bluetooth/hci_conn.o
  CC      drivers/scsi/scsi_pm.o
  CC      drivers/acpi/acpica/psopcode.o
  CC      kernel/nsproxy.o
  CC      fs/nfs/nfs3proc.o
  CC      net/ipv6/proc.o
  CC      lib/string.o
  CC      drivers/ata/libata-scsi.o
  CC      lib/timerqueue.o
  CC      fs/nfs/nfs3xdr.o
  CC      arch/x86/kernel/crash_core_64.o
  CC      kernel/notifier.o
  CC      drivers/dma-buf/sw_sync.o
  CC [M]  net/netfilter/xt_ipvs.o
  CC      kernel/ksysfs.o
  CC [M]  net/bluetooth/hci_event.o
  CC      drivers/acpi/processor_thermal.o
  CC      drivers/scsi/scsi_bsg.o
  CC      lib/vsprintf.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo_util.o
  CC      kernel/cred.o
  CC      drivers/acpi/acpica/psopinfo.o
  CC      drivers/acpi/processor_idle.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo_vm.o
  CC      drivers/scsi/scsi_common.o
  CC [M]  drivers/gpu/drm/scheduler/sched_main.o
  CC      drivers/scsi/sd.o
  CC      drivers/scsi/sg.o
  LD [M]  net/dns_resolver/dns_resolver.o
  CC      net/devres.o
  CC [M]  net/bluetooth/mgmt.o
  CC      arch/x86/kernel/module.o
  CC      drivers/spi/spi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.o
  CC      net/bridge/br_vlan.o
  CC      drivers/net/phy/mdio-boardinfo.o
  AR      net/handshake/built-in.a
  CC      drivers/base/regmap/regcache-maple.o
  CC      kernel/reboot.o
  CC      drivers/acpi/acpica/psparse.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_device.o
  CC      drivers/dma-buf/sync_debug.o
  CC      drivers/net/phy/stubs.o
  CC      drivers/ata/libata-eh.o
  CC      net/sunrpc/sysfs.o
  CC [M]  net/bluetooth/hci_sock.o
  CC      net/ipv6/syncookies.o
  CC      drivers/acpi/processor_throttling.o
  CC      net/core/net-procfs.o
  CC      net/ipv4/fib_frontend.o
  CC [M]  net/bluetooth/hci_sysfs.o
  CC      kernel/async.o
  CC [M]  drivers/gpu/drm/ttm/ttm_module.o
  CC [M]  net/bluetooth/l2cap_core.o
  CC [M]  drivers/misc/mei/gsc-me.o
  CC [M]  drivers/dma-buf/selftest.o
  CC      kernel/range.o
  CC      arch/x86/kernel/early_printk.o
  CC [M]  drivers/gpu/drm/ttm/ttm_execbuf_util.o
  CC      drivers/acpi/acpica/psscope.o
  LD [M]  net/netfilter/nf_conntrack.o
  CC [M]  drivers/gpu/drm/ttm/ttm_range_manager.o
  CC      arch/x86/kernel/hpet.o
  CC      kernel/smpboot.o
  CC      net/socket.o
  LD [M]  net/netfilter/nf_nat.o
  CC      arch/x86/kernel/amd_nb.o
  AR      net/netfilter/built-in.a
  CC      fs/btrfs/export.o
  CC      fs/ext4/xattr_hurd.o
  CC      arch/x86/kernel/kvm.o
  CC      net/ipv6/mip6.o
  CC      drivers/base/regmap/regmap-debugfs.o
  CC      drivers/scsi/scsi_sysfs.o
  CC      drivers/net/phy/mdio_devres.o
  CC      drivers/base/regmap/regmap-i2c.o
  CC      net/sunrpc/svc_xprt.o
  CC      net/sunrpc/xprtmultipath.o
  CC      lib/win_minmax.o
  CC [M]  drivers/dma-buf/st-dma-fence.o
  CC      lib/xarray.o
  CC      drivers/acpi/acpica/pstree.o
../drivers/gpu/drm/amd/amdgpu/amdgpu_device.c: In function ‘amdgpu_device_init_schedulers’:
../drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:2282:55: warning: passing argument 3 of ‘drm_sched_init’ makes pointer from integer without a cast [-Wint-conversion]
 2282 |   r = drm_sched_init(&ring->sched, &amdgpu_sched_ops, 1, NULL,
      |                                                       ^
      |                                                       |
      |                                                       int
In file included from ../drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h:28,
                 from ../drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h:29,
                 from ../drivers/gpu/drm/amd/amdgpu/amdgpu.h:43,
                 from ../drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:49:
../include/drm/gpu_scheduler.h:532:31: note: expected ‘struct workqueue_struct *’ but argument is of type ‘int’
  532 |      struct workqueue_struct *submit_wq,
      |      ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
In file included from ../include/uapi/linux/posix_types.h:5,
                 from ../include/uapi/linux/types.h:14,
                 from ../include/linux/types.h:6,
                 from ../include/linux/kasan-checks.h:5,
                 from ../include/asm-generic/rwonce.h:26,
                 from ./arch/x86/include/generated/asm/rwonce.h:1,
                 from ../include/linux/compiler.h:246,
                 from ../include/linux/dev_printk.h:14,
                 from ../include/linux/device.h:15,
                 from ../include/linux/power_supply.h:15,
                 from ../drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:28:
../include/linux/stddef.h:8:14: warning: passing argument 4 of ‘drm_sched_init’ makes integer from pointer without a cast [-Wint-conversion]
    8 | #define NULL ((void *)0)
      |              ^~~~~~~~~~~
      |              |
      |              void *
../drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:2282:58: note: in expansion of macro ‘NULL’
 2282 |   r = drm_sched_init(&ring->sched, &amdgpu_sched_ops, 1, NULL,
      |                                                          ^~~~
In file included from ../drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h:28,
                 from ../drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h:29,
                 from ../drivers/gpu/drm/amd/amdgpu/amdgpu.h:43,
                 from ../drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:49:
../include/drm/gpu_scheduler.h:533:10: note: expected ‘u32’ {aka ‘unsigned int’} but argument is of type ‘void *’
  533 |      u32 num_rqs, uint32_t hw_submission, unsigned hang_limit,
      |      ~~~~^~~~~~~
  CC [M]  drivers/gpu/drm/scheduler/sched_fence.o
  CC      drivers/acpi/processor_perflib.o
  AR      fs/nfs/built-in.a
  CC      net/core/netpoll.o
  CC      mm/sparse-vmemmap.o
  CC      kernel/ucount.o
  LD [M]  drivers/misc/mei/mei.o
  CC      net/bridge/br_vlan_tunnel.o
  LD [M]  drivers/misc/mei/mei-me.o
  LD [M]  drivers/misc/mei/mei-gsc.o
  CC      net/sunrpc/stats.o
  AR      drivers/firewire/built-in.a
  CC      drivers/net/phy/phy.o
  CC      drivers/base/regmap/regmap-irq.o
  CC      drivers/net/phy/phy-c45.o
  CC      net/sunrpc/sysctl.o
  CC [M]  drivers/gpu/drm/ttm/ttm_resource.o
  CC      fs/btrfs/tree-log.o
  CC      fs/ext4/xattr_trusted.o
  CC      kernel/regset.o
  CC      fs/btrfs/free-space-cache.o
  CC      net/ipv6/addrconf_core.o
  CC      arch/x86/kernel/kvmclock.o
  CC      drivers/acpi/acpica/psutils.o
  CC      net/ipv6/exthdrs_core.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_doorbell_mgr.o
  CC      drivers/net/phy/phy-core.o
  CC [M]  net/bluetooth/l2cap_sock.o
  CC [M]  drivers/gpu/drm/scheduler/sched_entity.o
  CC      fs/btrfs/zlib.o
  CC      net/ipv4/fib_semantics.o
  CC [M]  drivers/dma-buf/st-dma-fence-chain.o
  CC      kernel/ksyms_common.o
  CC      fs/btrfs/lzo.o
  CC      net/bridge/br_vlan_options.o
  CC [M]  drivers/gpu/drm/ttm/ttm_pool.o
  CC      net/core/fib_rules.o
  CC      drivers/acpi/acpica/pswalk.o
  CC      arch/x86/kernel/paravirt.o
  CC      net/ipv4/fib_trie.o
  CC      net/ipv4/fib_notifier.o
  CC      lib/lockref.o
  CC      drivers/acpi/acpica/psxface.o
  CC      mm/mmu_notifier.o
  CC      drivers/acpi/acpica/rsaddr.o
  AR      drivers/cdrom/built-in.a
  CC [M]  fs/smb/client/link.o
  AR      drivers/auxdisplay/built-in.a
  CC [M]  fs/smb/client/misc.o
  CC [M]  fs/smb/client/netmisc.o
  AR      drivers/scsi/built-in.a
  CC [M]  fs/smb/client/smbencrypt.o
  CC [M]  drivers/gpu/drm/ttm/ttm_device.o
  CC      drivers/ata/libata-transport.o
  CC      net/ipv6/ip6_checksum.o
  CC      drivers/acpi/acpica/rscalc.o
  CC      drivers/acpi/acpica/rscreate.o
  CC      kernel/groups.o
  CC      net/ipv4/inet_fragment.o
  AR      drivers/base/regmap/built-in.a
  CC      net/ipv4/ping.o
  CC      drivers/base/component.o
  CC      net/compat.o
  CC [M]  net/bluetooth/smp.o
  LD [M]  drivers/gpu/drm/scheduler/gpu-sched.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.o
  CC [M]  fs/smb/client/transport.o
  CC      drivers/acpi/acpica/rsdumpinfo.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.o
  CC      drivers/acpi/acpica/rsinfo.o
  CC      lib/bcd.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_crtc.o
  CC      lib/sort.o
  CC      arch/x86/kernel/pvclock.o
  CC      net/bridge/br_mst.o
  CC      drivers/net/phy/phy_device.o
  CC      lib/parser.o
  AR      drivers/spi/built-in.a
  CC [M]  drivers/dma-buf/st-dma-fence-unwrap.o
  CC      drivers/usb/common/common.o
  CC      net/core/net-traces.o
  AR      drivers/net/pse-pd/built-in.a
  CC [M]  drivers/dma-buf/st-dma-resv.o
  CC      net/ipv6/ip6_icmp.o
  CC      fs/ext4/xattr_user.o
  CC      drivers/base/core.o
  CC      drivers/usb/common/debug.o
  CC      net/ipv4/ip_tunnel_core.o
  CC      mm/ksm.o
  CC      drivers/usb/core/usb.o
  CC [M]  drivers/gpu/drm/ttm/ttm_sys_manager.o
  CC      drivers/acpi/acpica/rsio.o
  CC      drivers/usb/core/hub.o
  CC      drivers/usb/core/hcd.o
  CC      lib/debug_locks.o
  CC      drivers/ata/libata-trace.o
  CC      kernel/vhost_task.o
  CC      net/sysctl_net.o
  CC      net/ipv6/output_core.o
  AR      net/sunrpc/built-in.a
  CC      drivers/base/bus.o
  CC      net/ipv6/protocol.o
  CC      fs/btrfs/zstd.o
  CC [M]  net/bluetooth/lib.o
  CC      arch/x86/kernel/pcspeaker.o
  CC      lib/random32.o
  CC      drivers/ata/libata-sata.o
  AR      drivers/dma-buf/built-in.a
  CC      drivers/base/dd.o
  LD [M]  drivers/dma-buf/dmabuf_selftests.o
  CC      lib/bust_spinlocks.o
  CC      drivers/acpi/acpica/rsirq.o
  CC [M]  fs/smb/client/cached_dir.o
  CC      lib/kasprintf.o
  AR      drivers/usb/common/built-in.a
  CC      fs/btrfs/compression.o
  CC      fs/ext4/fast_commit.o
  CC [M]  drivers/gpu/drm/ttm/ttm_agp_backend.o
  CC [M]  fs/smb/client/cifs_unicode.o
  CC      net/core/selftests.o
  CC      kernel/kcmp.o
  CC      arch/x86/kernel/check.o
  CC      fs/ext4/orphan.o
  CC      net/ipv6/ip6_offload.o
  CC      net/ipv6/tcpv6_offload.o
  CC      drivers/acpi/acpica/rslist.o
  CC [M]  net/bluetooth/ecdh_helper.o
  CC      drivers/acpi/acpica/rsmemory.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.o
  CC [M]  net/bridge/br_netfilter_hooks.o
  CC      drivers/usb/core/urb.o
  CC [M]  fs/smb/client/nterr.o
  CC      net/ipv4/gre_offload.o
  CC      lib/bitmap.o
  AR      drivers/usb/phy/built-in.a
  CC      drivers/input/serio/serio.o
  CC      drivers/input/keyboard/atkbd.o
  CC      drivers/ata/libata-sff.o
  AR      drivers/input/mouse/built-in.a
  CC      net/ipv4/metrics.o
  CC      net/ipv6/exthdrs_offload.o
  CC      lib/scatterlist.o
  CC      drivers/input/serio/i8042.o
  CC      net/ipv4/netlink.o
  CC      drivers/usb/host/pci-quirks.o
  LD [M]  drivers/gpu/drm/ttm/ttm.o
  CC      drivers/acpi/acpica/rsmisc.o
  CC      net/ipv6/inet6_hashtables.o
  CC      net/ipv4/nexthop.o
  CC      drivers/acpi/acpica/rsserial.o
  CC      net/ipv4/udp_tunnel_stub.o
  CC      arch/x86/kernel/uprobes.o
  CC      drivers/acpi/acpica/rsutils.o
  CC      kernel/freezer.o
  CC      kernel/stacktrace.o
  CC [M]  fs/smb/client/cifsencrypt.o
  CC      drivers/usb/host/ehci-hcd.o
  CC [M]  drivers/gpu/drm/amd/amdxcp/amdgpu_xcp_drv.o
  CC      drivers/base/syscore.o
  CC      drivers/net/phy/linkmode.o
  CC      fs/btrfs/delayed-ref.o
  CC [M]  drivers/gpu/drm/i915/i915_driver.o
  CC [M]  net/bluetooth/hci_request.o
  CC      drivers/ata/libata-pmp.o
  CC [M]  fs/smb/client/readdir.o
  CC [M]  net/bluetooth/mgmt_util.o
  CC [M]  drivers/gpu/drm/i915/i915_drm_client.o
  CC      drivers/input/serio/libps2.o
  CC      drivers/acpi/acpica/rsxface.o
  CC      drivers/acpi/acpica/tbdata.o
  CC      drivers/ata/libata-acpi.o
  CC [M]  drivers/gpu/drm/i915/i915_config.o
  CC      net/ipv4/sysctl_net_ipv4.o
  LD [M]  drivers/gpu/drm/amd/amdxcp/amdxcp.o
  CC      fs/btrfs/relocation.o
  CC      lib/list_sort.o
  CC      drivers/rtc/lib.o
  CC      net/ipv6/mcast_snoop.o
  CC      lib/uuid.o
  CC      lib/iov_iter.o
  CC      drivers/usb/storage/scsiglue.o
  AR      drivers/i2c/algos/built-in.a
  CC [M]  drivers/i2c/algos/i2c-algo-bit.o
  CC      drivers/i2c/busses/i2c-designware-common.o
  AR      drivers/i2c/muxes/built-in.a
  CC      drivers/i2c/i2c-boardinfo.o
  CC [M]  drivers/i2c/muxes/i2c-mux-gpio.o
  CC      arch/x86/kernel/perf_regs.o
  CC      drivers/i2c/i2c-core-base.o
  CC      fs/btrfs/delayed-inode.o
  AR      drivers/input/keyboard/built-in.a
  CC      kernel/dma.o
  CC      drivers/input/input.o
  CC      drivers/i2c/busses/i2c-designware-master.o
  CC      net/ipv4/proc.o
  CC      drivers/net/phy/mdio_bus.o
  CC      lib/clz_ctz.o
  CC      drivers/i2c/busses/i2c-designware-platdrv.o
  CC      lib/bsearch.o
  CC      lib/find_bit.o
  CC      drivers/usb/host/ehci-pci.o
  CC      drivers/i2c/i2c-core-smbus.o
  CC      drivers/i2c/i2c-core-acpi.o
  CC      drivers/base/driver.o
  CC      drivers/usb/host/ohci-hcd.o
  CC      drivers/acpi/acpica/tbfadt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atom.o
  AR      drivers/input/serio/built-in.a
  CC      drivers/rtc/class.o
  AR      drivers/i3c/built-in.a
  AR      drivers/media/i2c/built-in.a
  AR      drivers/ptp/built-in.a
  AR      fs/ext4/built-in.a
  AR      drivers/media/tuners/built-in.a
  CC [M]  drivers/ptp/ptp_clock.o
  CC      lib/llist.o
  CC      drivers/base/class.o
  AR      drivers/media/rc/keymaps/built-in.a
  AR      drivers/media/rc/built-in.a
  CC      kernel/smp.o
  AR      drivers/media/common/b2c2/built-in.a
  AR      drivers/media/platform/allegro-dvt/built-in.a
  AR      drivers/media/common/saa7146/built-in.a
  AR      drivers/media/common/siano/built-in.a
  AR      drivers/media/platform/amlogic/meson-ge2d/built-in.a
  AR      drivers/media/platform/amlogic/built-in.a
  AR      drivers/media/common/v4l2-tpg/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_getparam.o
  AR      drivers/media/pci/ttpci/built-in.a
  AR      drivers/media/common/videobuf2/built-in.a
  CC      drivers/usb/host/ohci-pci.o
  AR      drivers/media/platform/amphion/built-in.a
  AR      drivers/media/common/built-in.a
  AR      drivers/media/pci/b2c2/built-in.a
  AR      drivers/media/platform/aspeed/built-in.a
  CC      arch/x86/kernel/tracepoint.o
  CC      lib/memweight.o
  AR      drivers/media/pci/pluto2/built-in.a
  AR      drivers/media/platform/atmel/built-in.a
  CC      fs/ioctl.o
  AR      drivers/media/pci/dm1105/built-in.a
  AR      drivers/media/platform/cadence/built-in.a
  AR      drivers/media/platform/chips-media/built-in.a
  AR      drivers/media/pci/pt1/built-in.a
  AR      drivers/media/platform/intel/built-in.a
  CC      fs/readdir.o
  AR      drivers/media/platform/marvell/built-in.a
  AR      drivers/media/pci/pt3/built-in.a
  AR      drivers/media/pci/mantis/built-in.a
  AR      drivers/media/platform/mediatek/jpeg/built-in.a
  CC      drivers/usb/storage/protocol.o
  CC      lib/kfifo.o
  AR      drivers/media/pci/ngene/built-in.a
  CC      drivers/usb/storage/transport.o
  AR      drivers/media/platform/mediatek/mdp/built-in.a
  CC      drivers/usb/storage/usb.o
  AR      drivers/media/pci/ddbridge/built-in.a
  AR      drivers/media/platform/mediatek/vcodec/common/built-in.a
  AR      drivers/media/pci/saa7146/built-in.a
  CC      drivers/i2c/i2c-core-slave.o
  CC [M]  net/bluetooth/mgmt_config.o
  CC      mm/slub.o
  AR      drivers/media/platform/mediatek/vcodec/encoder/built-in.a
  AR      drivers/media/pci/smipcie/built-in.a
  CC      drivers/acpi/acpica/tbfind.o
  AR      drivers/media/platform/mediatek/vpu/built-in.a
  AR      drivers/media/platform/mediatek/vcodec/decoder/built-in.a
  CC      fs/btrfs/scrub.o
  AR      drivers/media/pci/netup_unidvb/built-in.a
  AR      drivers/media/platform/mediatek/vcodec/built-in.a
  CC [M]  net/bridge/br_netfilter_ipv6.o
  AR      drivers/media/pci/intel/ipu3/built-in.a
  CC [M]  fs/smb/client/ioctl.o
  AR      drivers/media/platform/mediatek/mdp3/built-in.a
  AR      drivers/media/platform/mediatek/built-in.a
  CC      kernel/uid16.o
  AR      drivers/media/pci/intel/ivsc/built-in.a
  CC      drivers/rtc/interface.o
  AR      drivers/media/pci/intel/built-in.a
  AR      drivers/media/platform/microchip/built-in.a
  AR      drivers/media/pci/built-in.a
  AR      drivers/media/platform/nvidia/tegra-vde/built-in.a
  AR      drivers/media/platform/nvidia/built-in.a
  CC [M]  net/ipv6/ip6_udp_tunnel.o
  CC      arch/x86/kernel/itmt.o
  CC      kernel/kallsyms.o
  CC      drivers/usb/serial/usb-serial.o
  AR      drivers/media/platform/nxp/dw100/built-in.a
  CC      drivers/ata/libata-pata-timings.o
  AR      drivers/media/platform/nxp/imx-jpeg/built-in.a
  CC      drivers/usb/serial/generic.o
  AR      drivers/media/platform/nxp/imx8-isi/built-in.a
  CC      drivers/usb/core/message.o
  AR      drivers/media/platform/nxp/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_ioctl.o
  CC      net/ipv4/syncookies.o
  AR      drivers/media/platform/qcom/camss/built-in.a
  AR      drivers/media/platform/qcom/venus/built-in.a
  AR      drivers/media/platform/qcom/built-in.a
  AR      drivers/media/usb/b2c2/built-in.a
  AR      drivers/media/usb/dvb-usb/built-in.a
  AR      drivers/media/usb/dvb-usb-v2/built-in.a
  CC      drivers/i2c/busses/i2c-designware-baytrail.o
  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/usb/siano/built-in.a
  AR      drivers/media/platform/renesas/vsp1/built-in.a
  AR      drivers/media/usb/ttusb-budget/built-in.a
  AR      drivers/media/platform/renesas/built-in.a
  AR      drivers/media/usb/ttusb-dec/built-in.a
  CC [M]  drivers/i2c/busses/i2c-scmi.o
  AR      drivers/media/usb/built-in.a
  AR      drivers/media/platform/rockchip/rga/built-in.a
  CC [M]  fs/smb/client/sess.o
  AR      drivers/media/platform/samsung/exynos-gsc/built-in.a
  CC [M]  fs/smb/client/export.o
  AR      drivers/media/platform/rockchip/rkisp1/built-in.a
  AR      drivers/media/platform/rockchip/built-in.a
  AR      drivers/media/platform/samsung/exynos4-is/built-in.a
  CC      drivers/acpi/acpica/tbinstal.o
  CC      drivers/acpi/acpica/tbprint.o
  CC      drivers/base/platform.o
  AR      drivers/media/platform/samsung/s3c-camif/built-in.a
  AR      drivers/media/platform/samsung/s5p-g2d/built-in.a
  AR      drivers/media/platform/samsung/s5p-jpeg/built-in.a
  AR      drivers/media/platform/samsung/s5p-mfc/built-in.a
  CC      drivers/acpi/acpica/tbutils.o
  CC [M]  fs/smb/client/unc.o
  AR      drivers/media/platform/samsung/built-in.a
  AR      drivers/media/platform/st/sti/bdisp/built-in.a
  AR      drivers/media/platform/st/sti/c8sectpfe/built-in.a
  CC      drivers/net/phy/mdio_device.o
  CC [M]  drivers/ptp/ptp_chardev.o
  AR      drivers/media/platform/st/sti/delta/built-in.a
  AR      drivers/media/platform/st/sti/hva/built-in.a
  CC      net/ipv4/esp4.o
  AR      drivers/media/platform/st/stm32/built-in.a
  AR      drivers/media/platform/st/built-in.a
  AR      drivers/media/platform/sunxi/sun4i-csi/built-in.a
  AR      drivers/media/platform/sunxi/sun6i-csi/built-in.a
  AR      drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
  AR      drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
  AR      drivers/media/platform/sunxi/sun8i-di/built-in.a
  CC      drivers/ata/ahci.o
  CC      arch/x86/kernel/umip.o
  AR      drivers/media/platform/sunxi/sun8i-rotate/built-in.a
  CC      lib/percpu-refcount.o
  AR      drivers/media/platform/sunxi/built-in.a
  CC      drivers/acpi/container.o
  AR      drivers/media/platform/ti/am437x/built-in.a
  CC      drivers/input/input-compat.o
  AR      drivers/media/platform/ti/cal/built-in.a
  AR      drivers/media/platform/ti/vpe/built-in.a
  CC      drivers/input/input-mt.o
  AR      drivers/media/platform/ti/davinci/built-in.a
  CC      drivers/i2c/i2c-dev.o
  CC      drivers/usb/core/driver.o
  AR      drivers/media/platform/ti/omap/built-in.a
  CC      fs/select.o
  CC      fs/btrfs/backref.o
  AR      drivers/media/platform/ti/omap3isp/built-in.a
  AR      drivers/media/platform/ti/built-in.a
  CC      drivers/usb/core/config.o
  CC      fs/dcache.o
  AR      drivers/media/platform/verisilicon/built-in.a
  AR      drivers/media/platform/via/built-in.a
  CC      drivers/ata/libahci.o
  AR      drivers/media/platform/xilinx/built-in.a
  CC      drivers/usb/storage/initializers.o
  AR      drivers/media/platform/built-in.a
  CC      drivers/ata/ata_piix.o
  CC [M]  net/bluetooth/hci_codec.o
  CC      drivers/acpi/acpica/tbxface.o
  CC      drivers/acpi/acpica/tbxfload.o
  CC      net/ipv4/esp4_offload.o
  AR      drivers/media/mmc/siano/built-in.a
  AR      drivers/media/mmc/built-in.a
  CC [M]  drivers/i2c/i2c-smbus.o
  AR      drivers/media/firewire/built-in.a
  AR      drivers/media/spi/built-in.a
  AR      drivers/media/test-drivers/built-in.a
  AR      drivers/media/built-in.a
  CC      drivers/usb/core/file.o
  CC      net/core/ptp_classifier.o
  CC      fs/btrfs/ulist.o
  CC [M]  drivers/gpu/drm/i915/i915_irq.o
  AR      net/ipv6/built-in.a
  CC [M]  drivers/i2c/busses/i2c-ccgx-ucsi.o
  CC      drivers/usb/storage/sierra_ms.o
  CC      fs/btrfs/qgroup.o
  AR      net/bridge/built-in.a
  CC      kernel/acct.o
  LD [M]  net/bridge/br_netfilter.o
  CC      drivers/net/phy/swphy.o
  CC      drivers/usb/serial/bus.o
  CC [M]  drivers/i2c/i2c-mux.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fence.o
  CC      drivers/input/input-poller.o
  CC [M]  drivers/ptp/ptp_sysfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.o
  CC [M]  fs/smb/client/winucase.o
  CC      arch/x86/kernel/unwind_orc.o
  CC      lib/rhashtable.o
  CC [M]  fs/smb/client/smb2ops.o
  CC      lib/base64.o
  CC      drivers/acpi/acpica/tbxfroot.o
  CC      drivers/base/cpu.o
  CC      drivers/rtc/nvmem.o
  CC [M]  drivers/gpu/drm/vgem/vgem_drv.o
  CC [M]  fs/smb/client/smb2maperror.o
  CC [M]  drivers/gpu/drm/vgem/vgem_fence.o
  CC [M]  drivers/gpu/drm/ast/ast_drv.o
  CC [M]  drivers/gpu/drm/ast/ast_i2c.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/object.o
  CC [M]  drivers/gpu/drm/ast/ast_main.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_bo_test.o
  CC      drivers/gpu/drm/drm_mipi_dsi.o
  CC      drivers/acpi/thermal.o
  CC      lib/once.o
  AR      drivers/usb/misc/built-in.a
  CC      lib/refcount.o
  CC      drivers/usb/gadget/udc/core.o
  CC      drivers/usb/storage/option_ms.o
  CC [M]  drivers/i2c/busses/i2c-i801.o
  CC      drivers/input/ff-core.o
  CC      drivers/usb/serial/console.o
  CC      drivers/acpi/acpica/utaddress.o
  CC [M]  net/bluetooth/eir.o
  CC      drivers/net/phy/fixed_phy.o
  CC      drivers/rtc/dev.o
  CC      drivers/rtc/proc.o
  CC      drivers/usb/core/buffer.o
  CC      drivers/input/touchscreen.o
  CC      net/core/netprio_cgroup.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.o
  CC      drivers/base/firmware.o
  AR      drivers/power/reset/built-in.a
  CC      drivers/hwmon/hwmon.o
  CC      drivers/power/supply/power_supply_core.o
  CC      kernel/crash_core.o
  CC [M]  drivers/hwmon/acpi_power_meter.o
  CC      net/ipv4/netfilter.o
  CC [M]  drivers/ptp/ptp_vclock.o
  CC      fs/btrfs/send.o
  CC      fs/btrfs/dev-replace.o
  LD [M]  drivers/gpu/drm/vgem/vgem.o
  CC      arch/x86/kernel/callthunks.o
  CC [M]  drivers/hwmon/coretemp.o
  CC      drivers/usb/host/uhci-hcd.o
  CC [M]  drivers/i2c/busses/i2c-isch.o
  CC      drivers/usb/serial/ftdi_sio.o
  CC      drivers/acpi/acpica/utalloc.o
  CC [M]  drivers/usb/class/usbtmc.o
  CC      drivers/acpi/acpica/utascii.o
  CC      fs/btrfs/raid56.o
  CC      fs/btrfs/uuid-tree.o
  CC      drivers/base/init.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/client.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.o
  CC [M]  drivers/gpu/drm/ast/ast_mm.o
  CC      drivers/usb/storage/usual-tables.o
  CC      fs/btrfs/props.o
  CC      drivers/input/ff-memless.o
  CC      drivers/usb/gadget/udc/trace.o
  AR      drivers/ata/built-in.a
  CC      kernel/compat.o
  CC      drivers/usb/serial/pl2303.o
  CC      kernel/utsname.o
  CC      drivers/usb/core/sysfs.o
  CC [M]  drivers/gpu/drm/drm_aperture.o
  CC      mm/migrate.o
  CC      drivers/rtc/sysfs.o
  CC      mm/memory-tiers.o
  CC [M]  drivers/gpu/drm/i915/i915_mitigations.o
  CC      lib/rcuref.o
  CC      kernel/user_namespace.o
  CC      drivers/usb/host/xhci.o
  CC      drivers/acpi/acpica/utbuffer.o
  CC [M]  drivers/net/phy/phylink.o
  CC [M]  drivers/ptp/ptp_kvm_x86.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_pci_test.o
  CC      drivers/power/supply/power_supply_sysfs.o
  CC      fs/inode.o
  CC      lib/usercopy.o
  CC [M]  net/bluetooth/hci_sync.o
  CC      drivers/acpi/acpi_memhotplug.o
  CC      arch/x86/kernel/cet.o
  CC      net/core/dst_cache.o
  CC      drivers/acpi/ioapic.o
  CC      net/ipv4/inet_diag.o
  AR      drivers/usb/storage/built-in.a
  CC      drivers/base/map.o
  CC      drivers/power/supply/power_supply_leds.o
  CC      drivers/power/supply/power_supply_hwmon.o
  CC      fs/attr.o
  CC [M]  drivers/gpu/drm/drm_atomic.o
  CC [M]  net/bluetooth/coredump.o
  CC [M]  net/bluetooth/sco.o
  CC [M]  drivers/i2c/busses/i2c-ismt.o
  CC      drivers/acpi/acpica/utcksum.o
  AR      drivers/hwmon/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvif/conn.o
  CC      drivers/acpi/acpica/utcopy.o
  CC      lib/errseq.o
  CC [M]  drivers/gpu/drm/ast/ast_mode.o
  CC      drivers/rtc/rtc-mc146818-lib.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/device.o
  CC      drivers/input/vivaldi-fmap.o
  CC      lib/bucket_locks.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_object.o
  CC      kernel/pid_namespace.o
  CC      drivers/acpi/acpica/utexcep.o
  CC      drivers/base/devres.o
  CC [M]  drivers/i2c/busses/i2c-piix4.o
  CC      mm/migrate_device.o
  AR      drivers/usb/serial/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvif/disp.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/driver.o
  CC      drivers/base/attribute_container.o
  CC [M]  drivers/ptp/ptp_kvm_common.o
  CC [M]  drivers/gpu/drm/i915/i915_module.o
  CC      lib/generic-radix-tree.o
  CC      fs/btrfs/free-space-tree.o
  AR      drivers/power/supply/built-in.a
  CC [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.o
  AR      drivers/usb/gadget/udc/built-in.a
  AR      drivers/power/built-in.a
  AR      drivers/usb/gadget/function/built-in.a
  CC      arch/x86/kernel/mmconf-fam10h_64.o
  CC      drivers/usb/core/endpoint.o
  AR      drivers/usb/gadget/legacy/built-in.a
  CC      mm/huge_memory.o
  CC      mm/khugepaged.o
  CC      drivers/usb/gadget/usbstring.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gart.o
  CC      drivers/input/input-leds.o
  CC      drivers/input/mousedev.o
  CC      drivers/usb/gadget/config.o
  CC [M]  drivers/i2c/busses/i2c-designware-pcidrv.o
  CC [M]  net/bluetooth/iso.o
  CC      drivers/acpi/acpica/utdebug.o
  CC      drivers/acpi/acpica/utdecode.o
  CC      fs/bad_inode.o
  CC      drivers/usb/gadget/epautoconf.o
  CC      drivers/rtc/rtc-cmos.o
  CC      net/core/gro_cells.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/event.o
  CC      lib/string_helpers.o
  LD [M]  drivers/ptp/ptp.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/fifo.o
  CC      arch/x86/kernel/vsmp_64.o
  CC [M]  net/bluetooth/a2mp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_encoders.o
  CC      drivers/acpi/battery.o
  LD [M]  drivers/ptp/ptp_kvm.o
  AR      drivers/thermal/broadcom/built-in.a
  CC      net/ipv4/tcp_diag.o
  CC      drivers/watchdog/watchdog_core.o
  CC      drivers/input/evdev.o
  UPD     kernel/config_data
  AR      drivers/thermal/samsung/built-in.a
  CC      kernel/stop_machine.o
  CC      drivers/acpi/acpica/utdelete.o
  CC      drivers/thermal/intel/intel_tcc.o
  CC      drivers/base/transport_class.o
  CC      drivers/usb/core/devio.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/head.o
  AR      drivers/thermal/st/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_params.o
  AR      drivers/thermal/qcom/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvif/mem.o
  CC      drivers/watchdog/watchdog_dev.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/mmu.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_wa_test.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_display.o
  CC      drivers/thermal/intel/therm_throt.o
  CC      drivers/usb/gadget/composite.o
  CC [M]  drivers/md/persistent-data/dm-array.o
  CC      fs/file.o
  CC [M]  drivers/gpu/drm/i915/i915_pci.o
  LD [M]  drivers/i2c/busses/i2c-designware-pci.o
  AR      arch/x86/kernel/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_scatterlist.o
  AR      drivers/i2c/busses/built-in.a
  AR      drivers/i2c/built-in.a
  AR      arch/x86/built-in.a
  CC [M]  fs/smb/client/smb2transport.o
  CC      drivers/usb/host/xhci-mem.o
  CC [M]  drivers/gpu/drm/drm_atomic_uapi.o
  CC      fs/btrfs/tree-checker.o
  CC      fs/filesystems.o
  CC [M]  fs/smb/client/smb2misc.o
  CC      drivers/base/topology.o
  AR      net/core/built-in.a
  CC [M]  fs/smb/client/smb2pdu.o
  CC      drivers/usb/host/xhci-ext-caps.o
  CC [M]  net/bluetooth/amp.o
  CC [M]  drivers/gpu/drm/ast/ast_post.o
  CC [M]  net/bluetooth/hci_debugfs.o
  CC      lib/hexdump.o
  CC      drivers/acpi/acpica/uterror.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.o
  AR      drivers/rtc/built-in.a
  CC      net/ipv4/udp_diag.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gem.o
  CC [M]  drivers/net/phy/aquantia_main.o
  CC      drivers/watchdog/softdog.o
  CC      lib/kstrtox.o
  AR      drivers/thermal/tegra/built-in.a
  CC      drivers/usb/gadget/functions.o
  CC      net/ipv4/tcp_cubic.o
  CC      kernel/kprobes.o
  CC      net/ipv4/xfrm4_policy.o
  CC      kernel/hung_task.o
  CC [M]  drivers/gpu/drm/xe/xe_bb.o
  AR      drivers/thermal/mediatek/built-in.a
  CC      fs/btrfs/space-info.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/outp.o
  CC      drivers/acpi/acpica/uteval.o
  CC      drivers/acpi/hed.o
  CC      kernel/watchdog.o
  CC      lib/debug_info.o
  CC      drivers/base/container.o
  CC      lib/iomap.o
  AR      drivers/input/built-in.a
  CC      drivers/acpi/acpica/utglobal.o
  CC [M]  drivers/md/persistent-data/dm-bitset.o
  CC      fs/btrfs/block-rsv.o
  CC      drivers/acpi/acpica/uthex.o
  CC [M]  drivers/thermal/intel/x86_pkg_temp_thermal.o
  AR      drivers/watchdog/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_suspend.o
  CC [M]  drivers/net/phy/aquantia_hwmon.o
  CC [M]  drivers/net/phy/ax88796b.o
  CC [M]  fs/smb/client/smb2inode.o
  CC [M]  fs/smb/client/smb2file.o
  CC      net/ipv4/xfrm4_state.o
  CC      drivers/usb/core/notify.o
  CC      drivers/usb/gadget/configfs.o
  CC      drivers/acpi/bgrt.o
  CC      drivers/base/property.o
  CC      drivers/usb/host/xhci-ring.o
  CC      drivers/usb/gadget/u_f.o
  CC      drivers/md/md.o
  CC      drivers/acpi/acpica/utids.o
  CC      lib/pci_iomap.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ring.o
  CC      drivers/usb/core/generic.o
  AR      drivers/thermal/intel/built-in.a
  CC [M]  drivers/gpu/drm/drm_auth.o
  CC      drivers/acpi/cppc_acpi.o
  CC [M]  drivers/gpu/drm/xe/xe_bo.o
  CC      lib/iomap_copy.o
  CC      kernel/watchdog_perf.o
  CC [M]  drivers/md/persistent-data/dm-block-manager.o
  CC [M]  drivers/md/persistent-data/dm-space-map-common.o
  CC      drivers/thermal/thermal_core.o
  CC      drivers/net/mdio/acpi_mdio.o
  CC      drivers/usb/core/quirks.o
  CC [M]  drivers/gpu/drm/ast/ast_dp501.o
  CC      drivers/acpi/acpica/utinit.o
  CC [M]  fs/smb/client/cifsacl.o
  CC      drivers/net/mdio/fwnode_mdio.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_bios.o
  CC      drivers/usb/core/devices.o
  CC [M]  drivers/net/phy/bcm7xxx.o
  CC      drivers/thermal/thermal_sysfs.o
  CC      fs/namespace.o
  CC      drivers/opp/core.o
  CC      fs/seq_file.o
  CC      drivers/opp/cpu.o
  CC      drivers/opp/debugfs.o
  CC [M]  drivers/md/persistent-data/dm-space-map-disk.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/timer.o
  CC      drivers/acpi/acpica/utlock.o
  CC [M]  drivers/net/phy/bcm87xx.o
  CC [M]  drivers/gpu/drm/xe/xe_bo_evict.o
  CC [M]  drivers/gpu/drm/i915/i915_switcheroo.o
  CC      fs/btrfs/delalloc-space.o
  CC      lib/devres.o
  CC      net/ipv4/xfrm4_input.o
  CC [M]  fs/smb/client/fs_context.o
  LD [M]  net/bluetooth/bluetooth.o
  CC      drivers/acpi/acpica/utmath.o
  CC      fs/btrfs/block-group.o
  CC      drivers/usb/host/xhci-hub.o
  CC [M]  drivers/gpu/drm/drm_blend.o
  CC [M]  drivers/gpu/drm/xe/xe_debugfs.o
  CC [M]  drivers/net/phy/bcm-phy-lib.o
  CC      net/ipv4/xfrm4_output.o
  CC      drivers/usb/host/xhci-dbg.o
  CC      kernel/seccomp.o
  CC      drivers/base/cacheinfo.o
  CC      fs/xattr.o
  CC      drivers/acpi/acpica/utmisc.o
  CC [M]  drivers/md/persistent-data/dm-space-map-metadata.o
  CC      fs/btrfs/discard.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.o
  CC [M]  fs/smb/client/dns_resolve.o
  AR      drivers/net/mdio/built-in.a
  AR      drivers/net/pcs/built-in.a
  CC      drivers/md/md-bitmap.o
  CC      drivers/md/md-autodetect.o
  CC      kernel/relay.o
  CC      drivers/usb/core/phy.o
  CC      kernel/utsname_sysctl.o
  CC [M]  drivers/gpu/drm/ast/ast_dp.o
  ASN.1   fs/smb/client/cifs_spnego_negtokeninit.asn1.[ch]
  AR      drivers/usb/gadget/built-in.a
  CC [M]  drivers/md/persistent-data/dm-transaction-manager.o
  CC      net/ipv4/xfrm4_protocol.o
  CC [M]  drivers/net/phy/broadcom.o
  CC      mm/page_counter.o
  CC      fs/libfs.o
  CC      fs/btrfs/reflink.o
  CC      lib/check_signature.o
  CC      drivers/usb/host/xhci-trace.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/vmm.o
  CC      lib/interval_tree.o
  CC      kernel/delayacct.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_dp.o
  CC      fs/fs-writeback.o
  CC      drivers/acpi/acpica/utmutex.o
  CC      lib/assoc_array.o
  CC      kernel/taskstats.o
  CC [M]  net/ipv4/ip_tunnel.o
  CC      mm/memcontrol.o
  CC [M]  fs/smb/client/namespace.o
  AR      drivers/net/ethernet/adi/built-in.a
  AR      drivers/net/ethernet/alacritech/built-in.a
  AR      drivers/net/ethernet/amazon/built-in.a
  CC [M]  fs/smb/client/smb1ops.o
  AR      drivers/net/ethernet/aquantia/built-in.a
  CC      drivers/thermal/thermal_trip.o
  CC [M]  drivers/gpu/drm/i915/i915_sysfs.o
  AR      drivers/net/ethernet/asix/built-in.a
  AR      drivers/net/ethernet/cadence/built-in.a
  AR      drivers/net/ethernet/broadcom/built-in.a
  CC [M]  drivers/net/ethernet/broadcom/b44.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
  CC      drivers/base/swnode.o
  AR      drivers/net/ethernet/cavium/built-in.a
  CC      drivers/base/auxiliary.o
  CC      mm/vmpressure.o
  CC      fs/btrfs/subpage.o
  CC      drivers/usb/core/port.o
  CC      drivers/acpi/spcr.o
  CC      drivers/base/devtmpfs.o
  CC [M]  drivers/md/persistent-data/dm-btree.o
  CC      drivers/acpi/acpica/utnonansi.o
  AR      drivers/opp/built-in.a
  CC      drivers/base/node.o
  CC      drivers/cpufreq/cpufreq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.o
  CC [M]  drivers/gpu/drm/xe/xe_devcoredump.o
  CC [M]  drivers/gpu/drm/xe/xe_device.o
  LD [M]  drivers/gpu/drm/ast/ast.o
  CC [M]  drivers/md/persistent-data/dm-btree-remove.o
  CC      drivers/thermal/thermal_helpers.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/user.o
  CC [M]  drivers/net/phy/lxt.o
  CC      fs/pnode.o
  CC      fs/splice.o
  CC      drivers/usb/core/hcd-pci.o
  AR      drivers/net/ethernet/cortina/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvif/userc361.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_trace_points.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/client.o
  CC [M]  drivers/gpu/drm/drm_bridge.o
  CC      drivers/cpufreq/freq_table.o
  CC      drivers/acpi/acpica/utobject.o
  CC      lib/list_debug.o
  CC      drivers/acpi/acpi_pad.o
  CC      kernel/tsacct.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/engine.o
  CC      fs/btrfs/tree-mod-log.o
  CC      fs/btrfs/extent-io-tree.o
  CC      lib/debugobjects.o
  CC [M]  drivers/gpu/drm/i915/i915_utils.o
  CC      drivers/usb/core/usb-acpi.o
  CC [M]  drivers/net/phy/realtek.o
  CC      drivers/base/memory.o
  CC      drivers/thermal/thermal_hwmon.o
  CC [M]  drivers/gpu/drm/i915/intel_clock_gating.o
  CC [M]  drivers/md/persistent-data/dm-btree-spine.o
  CC      drivers/cpuidle/cpuidle.o
  CC      drivers/cpuidle/governors/menu.o
  CC      fs/btrfs/fs.o
  CC [M]  fs/smb/client/cifssmb.o
  CC      drivers/mmc/core/core.o
  CC      drivers/acpi/acpica/utosi.o
  CC      fs/btrfs/messages.o
  CC      drivers/mmc/host/sdhci.o
  CC      fs/btrfs/bio.o
  CC      fs/btrfs/lru_cache.o
  CC      drivers/mmc/host/sdhci-pci-core.o
  AR      drivers/net/ethernet/engleder/built-in.a
  CC      drivers/usb/host/xhci-debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_device_sysfs.o
  CC      drivers/cpuidle/driver.o
  CC [M]  drivers/net/phy/smsc.o
  CC [M]  drivers/net/ethernet/broadcom/bnx2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/enum.o
  CC      drivers/mmc/host/sdhci-pci-o2micro.o
  CC      kernel/tracepoint.o
  CC [M]  net/ipv4/udp_tunnel_core.o
  CC [M]  drivers/gpu/drm/xe/xe_dma_buf.o
  CC      drivers/thermal/gov_fair_share.o
  CC      drivers/cpuidle/governors/haltpoll.o
  CC      drivers/usb/host/xhci-pci.o
  CC [M]  fs/smb/client/cifs_spnego_negtokeninit.asn1.o
  CC      drivers/md/dm-uevent.o
  CC      fs/sync.o
  CC [M]  fs/smb/client/asn1.o
  AR      drivers/usb/core/built-in.a
  CC      drivers/cpuidle/governor.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/event.o
  CC      drivers/acpi/acpica/utownerid.o
  LD [M]  drivers/md/persistent-data/dm-persistent-data.o
  CC      fs/utimes.o
  CC      drivers/md/dm.o
  CC [M]  drivers/gpu/drm/i915/intel_device_info.o
  CC      drivers/base/module.o
  CC      drivers/md/dm-table.o
  CC [M]  net/ipv4/udp_tunnel_nic.o
  CC      fs/d_path.o
  CC [M]  drivers/gpu/drm/i915/intel_memory_region.o
  CC      fs/btrfs/acl.o
  CC      lib/bitrev.o
  CC      lib/crc16.o
  CC      drivers/thermal/gov_step_wise.o
  CC [M]  drivers/acpi/acpi_video.o
  CC      drivers/base/pinctrl.o
  CC      drivers/cpuidle/sysfs.o
  LD [M]  drivers/net/phy/aquantia.o
  CC      lib/crc-t10dif.o
  CC      kernel/latencytop.o
  AR      drivers/net/usb/built-in.a
  CC [M]  drivers/net/usb/pegasus.o
  CC      drivers/acpi/acpica/utpredef.o
  CC      drivers/cpufreq/cpufreq_performance.o
  CC      drivers/cpufreq/cpufreq_ondemand.o
  CC [M]  drivers/gpu/drm/xe/xe_drm_client.o
  CC      drivers/cpufreq/cpufreq_governor.o
  HOSTCC  lib/gen_crc32table
  CC [M]  drivers/acpi/video_detect.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_encoders.o
  CC      drivers/cpuidle/poll_state.o
  CC      drivers/cpuidle/cpuidle-haltpoll.o
  AR      drivers/net/phy/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/firmware.o
  CC [M]  drivers/net/ipvlan/ipvlan_core.o
  CC      drivers/base/devcoredump.o
  AR      drivers/cpuidle/governors/built-in.a
  CC [M]  drivers/gpu/drm/drm_cache.o
  CC      drivers/cpufreq/cpufreq_governor_attr_set.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/gpuobj.o
  CC [M]  drivers/gpu/drm/xe/xe_exec.o
  CC      drivers/thermal/gov_user_space.o
  CC [M]  drivers/gpu/drm/xe/xe_execlist.o
  CC [M]  drivers/gpu/drm/xe/xe_exec_queue.o
  CC [M]  drivers/gpu/drm/i915/intel_pcode.o
  CC [M]  drivers/net/usb/rtl8150.o
  CC      drivers/cpufreq/acpi-cpufreq.o
  CC [M]  drivers/net/usb/r8152.o
  CC      lib/libcrc32c.o
  CC      drivers/base/platform-msi.o
  CC      drivers/acpi/acpica/utresdecode.o
  CC      drivers/acpi/acpica/utresrc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sa.o
  CC      drivers/acpi/acpica/utstate.o
  CC      drivers/cpufreq/intel_pstate.o
  CC      fs/stack.o
  CC [M]  drivers/net/vxlan/vxlan_core.o
  CC      drivers/net/loopback.o
  AR      drivers/cpuidle/built-in.a
  CC      kernel/irq_work.o
  AR      drivers/ufs/built-in.a
  AR      drivers/leds/trigger/built-in.a
  CC [M]  drivers/leds/trigger/ledtrig-audio.o
  AR      drivers/usb/host/built-in.a
  AR      drivers/usb/built-in.a
  CC      fs/fs_struct.o
  CC [M]  drivers/gpu/drm/i915/intel_region_ttm.o
  AR      drivers/leds/blink/built-in.a
  AR      drivers/thermal/built-in.a
  AR      drivers/firmware/arm_ffa/built-in.a
  CC      fs/statfs.o
  CC [M]  drivers/net/vxlan/vxlan_multicast.o
  AR      drivers/leds/simple/built-in.a
  AR      drivers/firmware/arm_scmi/built-in.a
  AR      fs/btrfs/built-in.a
  CC      drivers/leds/led-core.o
  CC      drivers/leds/led-class.o
  AR      drivers/firmware/broadcom/built-in.a
  CC [M]  drivers/net/usb/asix_devices.o
  AR      drivers/firmware/cirrus/built-in.a
  CC      drivers/acpi/acpica/utstring.o
  AR      drivers/firmware/meson/built-in.a
  CC [M]  drivers/net/ipvlan/ipvlan_main.o
  CC [M]  drivers/gpu/drm/drm_client.o
  CC      lib/xxhash.o
  CC      drivers/firmware/efi/efi-bgrt.o
  CC [M]  drivers/gpu/drm/drm_client_modeset.o
  CC      fs/fs_pin.o
  CC      drivers/firmware/efi/libstub/efi-stub-helper.o
  CC      drivers/mmc/core/bus.o
  CC      drivers/base/physical_location.o
  CC      drivers/firmware/efi/efi.o
  CC      lib/genalloc.o
  CC      fs/nsfs.o
  CC      drivers/leds/led-triggers.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/intr.o
  AR      drivers/crypto/stm32/built-in.a
  AR      drivers/crypto/xilinx/built-in.a
  CC      drivers/clocksource/acpi_pm.o
  LD [M]  net/ipv4/udp_tunnel.o
  AR      drivers/crypto/hisilicon/built-in.a
  AR      net/ipv4/built-in.a
  AR      net/built-in.a
  AR      drivers/crypto/intel/keembay/built-in.a
  AR      drivers/crypto/intel/ixp4xx/built-in.a
  CC      kernel/static_call.o
  AR      drivers/crypto/intel/built-in.a
  AR      drivers/crypto/starfive/built-in.a
  CC      fs/fs_types.o
  AR      drivers/crypto/built-in.a
  CC      drivers/acpi/acpica/utstrsuppt.o
  CC [M]  drivers/gpu/drm/drm_color_mgmt.o
  CC      fs/fs_context.o
  CC [M]  drivers/gpu/drm/i915/intel_runtime_pm.o
  CC [M]  drivers/net/usb/asix_common.o
  CC [M]  drivers/gpu/drm/drm_connector.o
  CC      fs/fs_parser.o
  CC [M]  drivers/net/vxlan/vxlan_vnifilter.o
  CC      drivers/base/trace.o
  CC      kernel/static_call_inline.o
  LD [M]  drivers/acpi/video.o
  CC [M]  drivers/net/usb/ax88172a.o
  CC [M]  drivers/gpu/drm/i915/intel_sbi.o
  CC [M]  drivers/gpu/drm/i915/intel_step.o
  CC [M]  drivers/gpu/drm/drm_crtc.o
  CC [M]  drivers/net/ethernet/broadcom/cnic.o
  CC      drivers/hid/usbhid/hid-core.o
  AR      drivers/staging/media/built-in.a
  AR      drivers/staging/built-in.a
  CC      drivers/hid/hid-core.o
  CC      drivers/hid/usbhid/hiddev.o
  CC [M]  drivers/net/ipvlan/ipvlan_l3s.o
  CC [M]  drivers/gpu/drm/drm_displayid.o
  CC      drivers/firmware/efi/vars.o
  CC      drivers/acpi/acpica/utstrtoul64.o
  CC      drivers/mmc/core/host.o
  CC      drivers/firmware/efi/libstub/gop.o
  CC      drivers/mmc/core/mmc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_i2c.o
  CC      drivers/mailbox/mailbox.o
  AR      drivers/platform/x86/amd/built-in.a
  CC      drivers/mailbox/pcc.o
  CC [M]  drivers/gpu/drm/xe/xe_force_wake.o
  CC      drivers/platform/x86/intel/pmc/core.o
  CC [M]  drivers/gpu/drm/xe/xe_ggtt.o
  AR      drivers/platform/surface/built-in.a
  CC      drivers/clocksource/i8253.o
  CC      lib/percpu_counter.o
  CC      drivers/mmc/host/sdhci-pci-arasan.o
  AR      drivers/leds/built-in.a
  CC      drivers/platform/x86/intel/pmc/core_ssram.o
  CC [M]  drivers/net/vxlan/vxlan_mdb.o
  AR      drivers/firmware/imx/built-in.a
  CC      drivers/platform/x86/p2sb.o
  CC      kernel/user-return-notifier.o
  CC      drivers/platform/x86/pmc_atom.o
  CC [M]  drivers/gpu/drm/drm_drv.o
  CC [M]  drivers/gpu/drm/drm_dumb_buffers.o
  AR      drivers/base/built-in.a
  CC      drivers/acpi/acpica/utxface.o
  CC      kernel/padata.o
  CC      kernel/jump_label.o
  AR      drivers/firmware/psci/built-in.a
  CC [M]  drivers/gpu/drm/i915/intel_uncore.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/ioctl.o
  AR      drivers/clocksource/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/memory.o
  CC [M]  drivers/gpu/drm/drm_edid.o
  CC [M]  drivers/gpu/drm/i915/intel_wakeref.o
  CC      fs/fsopen.o
  CC      drivers/acpi/acpica/utxfinit.o
  CC [M]  drivers/gpu/drm/xe/xe_gpu_scheduler.o
  CC      lib/fault-inject.o
  CC [M]  drivers/platform/x86/wmi.o
  CC      drivers/md/dm-target.o
  CC [M]  drivers/platform/x86/wmi-bmof.o
  CC [M]  drivers/net/usb/ax88179_178a.o
  AR      drivers/cpufreq/built-in.a
  AR      drivers/mailbox/built-in.a
  CC [M]  drivers/net/usb/cdc_ether.o
  CC [M]  drivers/gpu/drm/drm_encoder.o
  CC      drivers/firmware/efi/libstub/secureboot.o
  CC [M]  drivers/gpu/drm/xe/xe_gt.o
  CC [M]  drivers/gpu/drm/i915/vlv_sideband.o
  CC [M]  drivers/net/ethernet/broadcom/tg3.o
  CC      fs/init.o
  CC [M]  drivers/gpu/drm/drm_file.o
  CC      kernel/context_tracking.o
  CC      drivers/mmc/host/sdhci-pci-dwc-mshc.o
  CC      mm/swap_cgroup.o
  CC      drivers/mmc/core/mmc_ops.o
  CC [M]  drivers/platform/x86/mxm-wmi.o
  LD [M]  fs/smb/client/cifs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.o
  CC      drivers/firmware/efi/reboot.o
  CC [M]  drivers/net/usb/cdc_eem.o
  CC      drivers/mmc/host/sdhci-pci-gli.o
  CC      drivers/acpi/acpica/utxferror.o
  LD [M]  drivers/net/ipvlan/ipvlan.o
  CC [M]  drivers/gpu/drm/drm_fourcc.o
  CC [M]  drivers/gpu/drm/drm_framebuffer.o
  CC      drivers/net/netconsole.o
  CC      drivers/acpi/acpica/utxfmutex.o
  CC      mm/hugetlb_cgroup.o
  CC      lib/syscall.o
  CC      drivers/firmware/efi/libstub/tpm.o
  CC      fs/kernel_read_file.o
  CC [M]  drivers/platform/x86/intel_ips.o
  CC [M]  drivers/gpu/drm/drm_gem.o
  CC      kernel/iomem.o
  AR      drivers/hid/usbhid/built-in.a
  CC      drivers/platform/x86/intel/pmc/spt.o
  CC      drivers/hid/hid-input.o
  CC      kernel/rseq.o
  CC      drivers/firmware/efi/libstub/file.o
  CC      fs/mnt_idmapping.o
  CC [M]  drivers/net/dummy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/mm.o
  AR      drivers/firmware/smccc/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/object.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/oproxy.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_clock.o
  CC      drivers/md/dm-linear.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_debugfs.o
  CC      drivers/md/dm-stripe.o
  CC [M]  drivers/gpu/drm/i915/vlv_suspend.o
  AR      drivers/acpi/acpica/built-in.a
  CC      drivers/firmware/efi/memattr.o
  AR      drivers/acpi/built-in.a
  CC [M]  drivers/gpu/drm/i915/soc/intel_dram.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_gmch.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/option.o
  CC      drivers/mmc/host/sdhci-acpi.o
  CC      drivers/devfreq/devfreq.o
  CC [M]  drivers/net/usb/smsc75xx.o
  CC      drivers/mmc/host/cqhci-core.o
  CC      lib/dynamic_debug.o
  CC [M]  drivers/devfreq/governor_simpleondemand.o
  CC      drivers/platform/x86/intel/pmc/cnp.o
  CC [M]  drivers/gpu/drm/drm_ioctl.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_idle_sysfs.o
  CC [M]  drivers/gpu/drm/drm_lease.o
  CC      drivers/mmc/core/sd.o
  CC [M]  drivers/devfreq/governor_performance.o
  CC [M]  drivers/gpu/drm/drm_managed.o
  GZIP    kernel/config_data.gz
  CC      kernel/configs.o
  CC      fs/remap_range.o
  CC      drivers/firmware/efi/libstub/mem.o
  CC [M]  drivers/gpu/drm/drm_mm.o
  CC [M]  drivers/net/usb/smsc95xx.o
  CC      fs/buffer.o
  CC      drivers/platform/x86/intel/pmc/icl.o
  CC      drivers/md/dm-ioctl.o
  CC      drivers/mmc/core/sd_ops.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_pch.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_mcr.o
  CC [M]  drivers/mmc/host/sdhci-pltfm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.o
  CC [M]  drivers/net/usb/mcs7830.o
  CC [M]  drivers/gpu/drm/drm_mode_config.o
  AR      drivers/firmware/tegra/built-in.a
  CC      drivers/platform/x86/intel/pmc/tgl.o
  CC      mm/kmemleak.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_pagefault.o
  AR      drivers/firmware/xilinx/built-in.a
  CC [M]  drivers/net/usb/usbnet.o
  CC      drivers/md/dm-io.o
  CC      drivers/md/dm-kcopyd.o
  CC      drivers/md/dm-sysfs.o
  CC      drivers/md/dm-stats.o
  CC [M]  drivers/platform/x86/intel/pmt/class.o
  CC [M]  drivers/gpu/drm/drm_mode_object.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/ramht.o
  AR      kernel/built-in.a
  CC [M]  drivers/platform/x86/intel/pmt/telemetry.o
  CC [M]  drivers/gpu/drm/i915/i915_memcpy.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sysfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ib.o
  CC      drivers/firmware/efi/libstub/random.o
  CC [M]  drivers/gpu/drm/drm_modes.o
  CC [M]  drivers/platform/x86/intel/pmt/crashlog.o
  CC      drivers/firmware/efi/tpm.o
  CC      drivers/firmware/efi/memmap.o
  CC [M]  drivers/gpu/drm/drm_modeset_lock.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_pll.o
  CC [M]  drivers/gpu/drm/drm_plane.o
  CC      drivers/mmc/core/sdio.o
  CC      drivers/platform/x86/intel/pmc/adl.o
  CC      drivers/mmc/core/sdio_ops.o
  CC      drivers/firmware/efi/libstub/randomalloc.o
  CC [M]  drivers/net/usb/cdc_ncm.o
  AR      drivers/mmc/host/built-in.a
  CC      drivers/firmware/efi/esrt.o
  LD [M]  drivers/net/vxlan/vxlan.o
  CC [M]  drivers/gpu/drm/drm_prime.o
  CC      drivers/md/dm-rq.o
  CC      drivers/hid/hid-quirks.o
  CC      drivers/firmware/dmi_scan.o
  CC      fs/mpage.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.o
  AR      drivers/devfreq/built-in.a
  CC      fs/proc_namespace.o
  CC      fs/direct-io.o
  CC      drivers/firmware/efi/libstub/pci.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/subdev.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/uevent.o
  CC      lib/errname.o
  CC      drivers/md/dm-io-rewind.o
  CC      drivers/firmware/efi/libstub/skip_spaces.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
  CC      lib/nlattr.o
  LD [M]  drivers/platform/x86/intel/pmt/pmt_class.o
  CC      lib/checksum.o
  LD [M]  drivers/platform/x86/intel/pmt/pmt_telemetry.o
  CC      lib/cpu_rmap.o
  LD [M]  drivers/platform/x86/intel/pmt/pmt_crashlog.o
  CC      drivers/md/dm-builtin.o
  CC [M]  drivers/gpu/drm/i915/i915_mm.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_topology.o
  CC      drivers/powercap/powercap_sys.o
  CC      drivers/platform/x86/intel/pmc/mtl.o
  AR      drivers/perf/built-in.a
  CC      drivers/platform/x86/intel/pmc/pltdrv.o
  CC      drivers/powercap/intel_rapl_common.o
  CC [M]  drivers/gpu/drm/drm_print.o
  CC      drivers/ras/ras.o
  AR      drivers/hwtracing/intel_th/built-in.a
  CC [M]  drivers/net/usb/r8153_ecm.o
  CC      drivers/android/binderfs.o
  HOSTCC  drivers/gpu/drm/xe/xe_gen_wa_oob
  CC [M]  drivers/net/macvlan.o
  AR      drivers/nvmem/layouts/built-in.a
  CC      mm/page_isolation.o
  CC      drivers/nvmem/core.o
  CC      drivers/hid/hid-debug.o
  CC      drivers/powercap/intel_rapl_msr.o
  CC [M]  drivers/gpu/drm/i915/i915_sw_fence.o
  CC      drivers/firmware/efi/libstub/lib-cmdline.o
  CC      mm/early_ioremap.o
  CC [M]  drivers/net/mii.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.o
  CC      drivers/hid/hidraw.o
  CC [M]  drivers/gpu/drm/i915/i915_sw_fence_work.o
  CC      drivers/firmware/dmi-sysfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.o
  CC      drivers/hid/hid-generic.o
  CC      drivers/hid/hid-a4tech.o
  CC      drivers/firmware/efi/libstub/lib-ctype.o
  CC [M]  drivers/gpu/drm/drm_property.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sync.o
  CC      drivers/firmware/efi/libstub/alignedmem.o
  CC      drivers/firmware/efi/libstub/relocate.o
  CC      lib/dynamic_queue_limits.o
  CC      drivers/mmc/core/sdio_bus.o
  CC [M]  drivers/net/mdio.o
  CC      drivers/android/binder.o
  CC      drivers/firmware/dmi-id.o
  CC [M]  drivers/gpu/drm/drm_syncobj.o
  CC      drivers/firmware/memmap.o
  AR      drivers/platform/x86/intel/pmc/built-in.a
  CC      drivers/platform/x86/intel/turbo_max_3.o
  CC [M]  drivers/md/dm-bufio.o
  CC      fs/eventpoll.o
  CC      fs/anon_inodes.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/fw.o
  CC      drivers/hid/hid-apple.o
  CC      drivers/android/binder_alloc.o
  CC      drivers/firmware/efi/libstub/printk.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ads.o
  CC [M]  drivers/gpu/drm/i915/i915_syncmap.o
  CC      fs/signalfd.o
  CC      lib/glob.o
  CC      lib/strncpy_from_user.o
  CC      drivers/mmc/core/sdio_cis.o
  CC      lib/strnlen_user.o
  CC      drivers/firmware/efi/libstub/vsprintf.o
  CC [M]  drivers/platform/x86/intel/vsec.o
  CC      fs/timerfd.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ct.o
  CC      fs/eventfd.o
  CC      drivers/ras/debugfs.o
  CC      drivers/mmc/core/sdio_io.o
  CC      mm/cma.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.o
  CC [M]  drivers/gpu/drm/i915/i915_user_extensions.o
  CC      drivers/firmware/efi/libstub/x86-stub.o
  CC      drivers/hid/hid-belkin.o
  AR      drivers/powercap/built-in.a
  LD [M]  drivers/net/usb/asix.o
  CC [M]  drivers/md/dm-bio-prison-v1.o
  CC      mm/secretmem.o
  CC [M]  drivers/net/tun.o
  CC [M]  drivers/mtd/chips/chipreg.o
  CC      drivers/hid/hid-cherry.o
  CC      drivers/firmware/efi/libstub/x86-5lvl.o
  CC      drivers/hid/hid-chicony.o
  CC      mm/userfaultfd.o
  STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
  CC      lib/net_utils.o
  AR      drivers/nvmem/built-in.a
  CC      fs/userfaultfd.o
  CC [M]  drivers/md/dm-bio-prison-v2.o
  CC [M]  drivers/platform/x86/intel/rst.o
  CC [M]  drivers/gpu/drm/i915/i915_ioc32.o
  CC      lib/sg_pool.o
  CC      drivers/mmc/core/sdio_irq.o
  CC [M]  drivers/gpu/drm/drm_sysfs.o
  CC [M]  drivers/gpu/drm/drm_trace_points.o
  CC [M]  drivers/gpu/drm/drm_vblank.o
  CC      lib/stackdepot.o
  STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
  CC      drivers/hid/hid-cypress.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/hs.o
  AR      drivers/ras/built-in.a
  CC [M]  drivers/uio/uio.o
  CC [M]  drivers/vfio/pci/vfio_pci_core.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.o
  CC      drivers/hid/hid-ezkey.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_hwconfig.o
  CC [M]  drivers/pps/pps.o
  CC [M]  drivers/pps/kapi.o
  AR      drivers/platform/x86/intel/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.o
  CC [M]  drivers/mtd/mtdcore.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/ls.o
  LD [M]  drivers/platform/x86/intel/intel_vsec.o
  LD [M]  drivers/platform/x86/intel/intel-rst.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/acr.o
  CC      drivers/hid/hid-kensington.o
  CC      drivers/mmc/core/slot-gpio.o
  CC      drivers/mmc/core/regulator.o
  AR      drivers/platform/x86/built-in.a
  AR      drivers/platform/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_debugfs.o
  CC [M]  drivers/gpu/drm/i915/i915_debugfs_params.o
  CC      drivers/hid/hid-lg.o
  CC [M]  drivers/bluetooth/btusb.o
  CC [M]  drivers/bluetooth/btintel.o
  STUBCPY drivers/firmware/efi/libstub/file.stub.o
  CC [M]  drivers/dca/dca-core.o
  STUBCPY drivers/firmware/efi/libstub/gop.stub.o
  CC [M]  drivers/dca/dca-sysfs.o
  CC [M]  drivers/gpu/drm/drm_vblank_work.o
  STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
  CC      fs/aio.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      fs/locks.o
  CC      lib/ucs2_string.o
  STUBCPY drivers/firmware/efi/libstub/printk.stub.o
  CC      lib/sbitmap.o
  STUBCPY drivers/firmware/efi/libstub/random.stub.o
  STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_log.o
  STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
  CC      drivers/mmc/core/debugfs.o
  STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
  CC [M]  drivers/pps/sysfs.o
  STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
  STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
  STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vf_error.o
  STUBCPY drivers/firmware/efi/libstub/x86-5lvl.stub.o
  CC [M]  drivers/ssb/main.o
  STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sched.o
  CC [M]  drivers/ssb/scan.o
  AR      drivers/firmware/efi/libstub/lib.a
  CC      drivers/firmware/efi/efi-pstore.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.o
  CC      drivers/mmc/core/block.o
  CC [M]  drivers/md/dm-crypt.o
  CC [M]  drivers/gpu/drm/drm_vma_manager.o
  CC      drivers/hid/hid-lg-g15.o
  CC [M]  drivers/bluetooth/btbcm.o
  CC [M]  drivers/bluetooth/btrtl.o
  CC [M]  drivers/gpu/drm/drm_writeback.o
  CC      lib/group_cpus.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_pc.o
  CC [M]  drivers/mtd/mtdsuper.o
  LD [M]  drivers/pps/pps_core.o
  CC [M]  drivers/gpu/drm/lib/drm_random.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ids.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/flcn.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/base.o
  CC [M]  lib/asn1_decoder.o
  CC [M]  drivers/vfio/vfio_main.o
  CC      mm/memremap.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_debugfs.o
  CC [M]  drivers/vhost/net.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/cmdq.o
  LD [M]  drivers/dca/dca.o
  CC [M]  drivers/vhost/vhost.o
  CC      fs/binfmt_script.o
  CC      drivers/mmc/core/queue.o
  CC      drivers/firmware/efi/cper.o
  CC [M]  drivers/gpu/drm/drm_ioc32.o
  CC [M]  drivers/gpu/drm/drm_panel.o
  CC [M]  drivers/vhost/iotlb.o
  CC      drivers/firmware/efi/cper_cxl.o
  CC [M]  drivers/gpu/drm/drm_pci.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_submit.o
  CC [M]  drivers/ssb/sprom.o
  CC [M]  drivers/gpu/drm/drm_debugfs.o
  CC      drivers/hid/hid-microsoft.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.o
  CC [M]  drivers/gpu/drm/xe/xe_heci_gsc.o
  CC      drivers/hid/hid-monterey.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/fw.o
  GEN     lib/oid_registry_data.c
  CC [M]  lib/oid_registry.o
  CC [M]  drivers/vfio/pci/vfio_pci_intrs.o
  CC [M]  drivers/vfio/pci/vfio_pci_rdwr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/msgq.o
  CC [M]  drivers/vfio/pci/vfio_pci_config.o
  CC      fs/binfmt_elf.o
  CC      fs/compat_binfmt_elf.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pipe_crc.o
  CC [M]  drivers/mtd/mtdconcat.o
  CC      drivers/firmware/efi/runtime-wrappers.o
  CC      drivers/firmware/efi/dev-path-parser.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.o
  LD [M]  drivers/vhost/vhost_iotlb.o
  CC [M]  drivers/gpu/drm/i915/i915_pmu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/v1.o
  CC [M]  drivers/vfio/iova_bitmap.o
  CC      fs/mbcache.o
  AR      lib/lib.a
  GEN     lib/crc32table.h
  CC [M]  drivers/vfio/group.o
  CC      lib/crc32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/gp102.o
  CC [M]  drivers/ssb/pci.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine.o
  CC      mm/hmm.o
  CC [M]  drivers/vfio/container.o
  CC [M]  drivers/vfio/virqfd.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_hdp.o
  CC [M]  drivers/gpu/drm/drm_debugfs_crc.o
  CC [M]  drivers/gpu/drm/i915/gt/gen2_engine_cs.o
  CC      drivers/firmware/efi/apple-properties.o
  CC      mm/memfd.o
  CC [M]  drivers/gpu/drm/i915/gt/gen6_engine_cs.o
  CC [M]  drivers/vfio/vfio_iommu_type1.o
  AR      drivers/hid/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.o
  CC [M]  drivers/vfio/pci/vfio_pci.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_csa.o
  CC [M]  drivers/mtd/mtdpart.o
  CC      drivers/firmware/efi/earlycon.o
  AR      drivers/mmc/core/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/ga102.o
  AR      drivers/mmc/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.o
  AR      lib/built-in.a
  CC      fs/posix_acl.o
  CC [M]  drivers/mtd/mtdchar.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
  CC [M]  drivers/ssb/pcihost_wrapper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/lsfw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm20b.o
  CC      fs/coredump.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.o
  CC      mm/bootmem_info.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ras.o
  CC      drivers/firmware/efi/cper-x86.o
  AR      drivers/net/ethernet/ezchip/built-in.a
  AR      drivers/net/ethernet/fungible/built-in.a
  AR      drivers/net/ethernet/huawei/built-in.a
  AR      drivers/net/ethernet/i825xx/built-in.a
  AR      drivers/net/ethernet/microsoft/built-in.a
  AR      drivers/net/ethernet/litex/built-in.a
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_main.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_hw.o
  CC      fs/drop_caches.o
  CC      fs/sysctls.o
  AR      drivers/net/ethernet/microchip/built-in.a
  AR      drivers/net/ethernet/mscc/built-in.a
  CC [M]  drivers/net/veth.o
  CC [M]  drivers/gpu/drm/drm_edid_load.o
  CC [M]  drivers/ssb/driver_chipcommon.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_ethtool.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_huc.o
  LD [M]  drivers/vhost/vhost_net.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.o
  CC [M]  drivers/ssb/driver_chipcommon_pmu.o
  LD [M]  drivers/vfio/pci/vfio-pci-core.o
  CC [M]  drivers/ssb/driver_pcicore.o
  CC      fs/fhandle.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp108.o
  LD [M]  drivers/vfio/pci/vfio-pci.o
  LD [M]  drivers/vfio/vfio.o
  CC [M]  drivers/gpu/drm/xe/xe_huc_debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.o
  CC [M]  drivers/net/ethernet/intel/e1000e/82571.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ich8lan.o
  CC [M]  drivers/md/dm-thin.o
  CC [M]  drivers/md/dm-thin-metadata.o
  LD [M]  drivers/md/dm-bio-prison.o
  CC [M]  drivers/net/ethernet/intel/e1000e/80003es2lan.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gv100.o
  CC [M]  drivers/net/ethernet/intel/e1000e/mac.o
  CC [M]  drivers/gpu/drm/xe/xe_irq.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_param.o
  AR      mm/built-in.a
  CC [M]  drivers/gpu/drm/i915/gt/gen6_ppgtt.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_main.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp10b.o
  CC [M]  drivers/gpu/drm/xe/xe_lrc.o
  GEN     xe_wa_oob.c xe_wa_oob.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_ethtool.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.o
  AR      drivers/firmware/efi/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.o
  AR      drivers/firmware/built-in.a
  CC [M]  drivers/net/ethernet/intel/igc/igc_main.o
  CC [M]  drivers/net/ethernet/intel/igbvf/vf.o
  AR      drivers/android/built-in.a
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_main.o
  CC [M]  drivers/net/ethernet/intel/igbvf/mbx.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_common.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/vf.o
  CC [M]  drivers/net/ethernet/intel/igbvf/ethtool.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_umc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/tu102.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/mbx.o
  AR      drivers/net/ethernet/intel/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga100.o
  LD [M]  drivers/mtd/mtd.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_mac.o
  GEN     xe_wa_oob.c xe_wa_oob.h
  CC [M]  drivers/gpu/drm/xe/xe_mmio.o
  CC [M]  drivers/net/ethernet/intel/e1000e/manage.o
  CC [M]  drivers/gpu/drm/xe/xe_mocs.o
  CC [M]  drivers/net/ethernet/intel/e1000e/nvm.o
  CC [M]  drivers/net/ethernet/intel/e100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga102.o
  CC [M]  drivers/net/ethernet/intel/e1000e/phy.o
  LD [M]  drivers/ssb/ssb.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.o
  CC [M]  drivers/gpu/drm/xe/xe_module.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.o
  AR      fs/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_rap.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fw_attestation.o
  CC [M]  drivers/gpu/drm/i915/gt/gen7_renderclear.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_securedisplay.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_i225.o
  CC [M]  drivers/gpu/drm/i915/gt/gen8_engine_cs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gk20a.o
  CC [M]  drivers/net/ethernet/intel/e1000e/param.o
  CC [M]  drivers/net/ethernet/intel/igbvf/netdev.o
  CC [M]  drivers/gpu/drm/drm_panel_orientation_quirks.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ethtool.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mca.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ethtool.o
  CC [M]  drivers/net/ethernet/intel/e1000e/netdev.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.o
  CC [M]  drivers/gpu/drm/drm_exec.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.o
  CC [M]  drivers/gpu/drm/xe/xe_pat.o
  AR      drivers/net/ethernet/neterion/built-in.a
  CC [M]  drivers/net/ethernet/intel/igc/igc_base.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ptp.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ipsec.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_lsdma.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_82575.o
  CC [M]  drivers/gpu/drm/i915/gt/gen8_ppgtt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm107.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm20b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_context.o
  CC [M]  drivers/gpu/drm/xe/xe_pci.o
  CC [M]  drivers/gpu/drm/xe/xe_pcode.o
  CC [M]  drivers/gpu/drm/xe/xe_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/tu102.o
  CC [M]  drivers/gpu/drm/xe/xe_preempt_fence.o
  AR      drivers/net/ethernet/netronome/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik.o
  AR      drivers/net/ethernet/ni/built-in.a
  CC [M]  drivers/net/ethernet/intel/igc/igc_nvm.o
  AR      drivers/net/ethernet/packetengines/built-in.a
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_82599.o
  AR      drivers/net/ethernet/realtek/built-in.a
  CC [M]  drivers/net/ethernet/realtek/8139cp.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_82598.o
  CC [M]  drivers/net/ethernet/realtek/8139too.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.o
  AR      drivers/md/built-in.a
  LD [M]  drivers/md/dm-thin-pool.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/bit.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/boost.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik_ih.o
  AR      drivers/net/ethernet/renesas/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/conn.o
  AR      drivers/net/ethernet/sfc/built-in.a
  CC [M]  drivers/net/ethernet/intel/igb/e1000_mac.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v8_0.o
  AR      drivers/net/ethernet/smsc/built-in.a
  CC [M]  drivers/net/ethernet/smsc/smsc9420.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_context_sseu.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_cs.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_nvm.o
  CC [M]  drivers/net/ethernet/realtek/r8169_main.o
  CC [M]  drivers/gpu/drm/drm_gpuvm.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_phy.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/cstep.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/dcb.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/disp.o
  CC [M]  drivers/gpu/drm/xe/xe_pt.o
  CC [M]  drivers/gpu/drm/xe/xe_pt_walk.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_diag.o
  LD [M]  drivers/net/ethernet/intel/e1000/e1000.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v7_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik_sdma.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_ethtool.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/dp.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_ptp.o
  CC [M]  drivers/gpu/drm/drm_buddy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/extdev.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v4_2.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/fan.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_pm.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_user.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/gpio.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_execlists_submission.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v2_0.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_mbx.o
  LD [M]  drivers/net/ethernet/intel/igbvf/igbvf.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_i210.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_x540.o
  CC [M]  drivers/gpu/drm/xe/xe_query.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/i2c.o
  CC [M]  drivers/gpu/drm/xe/xe_range_fence.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_dump.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_sr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/iccsense.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_whitelist.o
  CC [M]  drivers/gpu/drm/drm_gem_shmem_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/image.o
  CC [M]  drivers/net/ethernet/realtek/r8169_firmware.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_tsn.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_xdp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/mxm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/npde.o
  CC [M]  drivers/net/ethernet/realtek/r8169_phy_config.o
  CC [M]  drivers/gpu/drm/drm_suballoc.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_x550.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pcir.o
  AR      drivers/net/ethernet/socionext/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_rtp.o
  AR      drivers/net/ethernet/vertexcom/built-in.a
  CC [M]  drivers/net/ethernet/intel/igb/igb_ptp.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_lib.o
  AR      drivers/net/ethernet/wangxun/built-in.a
  AR      drivers/net/ethernet/xilinx/built-in.a
  AR      drivers/net/ethernet/synopsys/built-in.a
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_hwmon.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v6_0.o
  CC [M]  drivers/gpu/drm/drm_gem_ttm_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pll.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pmu.o
  AR      drivers/net/ethernet/pensando/built-in.a
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si_ih.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.o
  CC [M]  drivers/gpu/drm/xe/xe_ring_ops.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/power_budget.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si_dma.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v6_0.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.o
  CC [M]  drivers/gpu/drm/xe/xe_sa.o
  CC [M]  drivers/gpu/drm/drm_atomic_helper.o
  LD [M]  drivers/net/ethernet/intel/ixgbevf/ixgbevf.o
  CC [M]  drivers/gpu/drm/drm_atomic_state_helper.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_sched_job.o
  CC [M]  drivers/gpu/drm/drm_bridge_connector.o
  CC [M]  drivers/gpu/drm/xe/xe_step.o
  CC [M]  drivers/gpu/drm/drm_crtc_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/ramcfg.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.o
  CC [M]  drivers/gpu/drm/drm_damage_helper.o
  LD [M]  drivers/net/ethernet/intel/igc/igc.o
  CC [M]  drivers/gpu/drm/drm_encoder_slave.o
  CC [M]  drivers/gpu/drm/drm_flip_work.o
  CC [M]  drivers/gpu/drm/xe/xe_sync.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.o
  CC [M]  drivers/gpu/drm/xe/xe_tile.o
  CC [M]  drivers/gpu/drm/drm_format_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v3_1.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.o
  LD [M]  drivers/net/ethernet/realtek/r8169.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowramin.o
  CC [M]  drivers/gpu/drm/drm_gem_atomic_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vi.o
  CC [M]  drivers/gpu/drm/xe/xe_tile_sysfs.o
  CC [M]  drivers/gpu/drm/drm_gem_framebuffer_helper.o
  CC [M]  drivers/gpu/drm/xe/xe_trace.o
  CC [M]  drivers/gpu/drm/drm_kms_helper_common.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_vi.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.o
  CC [M]  drivers/gpu/drm/drm_modeset_helper.o
  CC [M]  drivers/gpu/drm/xe/xe_tuning.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowrom.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/timing.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v6_1.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/soc15.o
  LD [M]  drivers/net/ethernet/intel/igb/igb.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_irq.o
  CC [M]  drivers/gpu/drm/drm_plane_helper.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_mcr.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.o
  CC [M]  drivers/gpu/drm/xe/xe_uc.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/emu_soc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/therm.o
  LD [M]  drivers/net/ethernet/intel/e1000e/e1000e.o
  CC [M]  drivers/gpu/drm/drm_probe_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_ai.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega10_reg_init.o
  CC [M]  drivers/gpu/drm/drm_rect.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_fw.o
  CC [M]  drivers/gpu/drm/xe/xe_vm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/vmap.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/volt.o
  CC [M]  drivers/gpu/drm/drm_self_refresh_helper.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
  CC [M]  drivers/gpu/drm/drm_simple_kms_helper.o
  CC [M]  drivers/gpu/drm/bridge/panel.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/vpstate.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega20_reg_init.o
  CC [M]  drivers/gpu/drm/xe/xe_vm_madvise.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/xpio.o
  CC [M]  drivers/gpu/drm/drm_fbdev_generic.o
  CC [M]  drivers/gpu/drm/xe/xe_wait_user_fence.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0203.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0205.o
  CC [M]  drivers/gpu/drm/drm_fb_helper.o
  LD [M]  drivers/gpu/drm/drm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0209.o
  CC [M]  drivers/gpu/drm/xe/xe_wa.o
  CC [M]  drivers/gpu/drm/xe/xe_wopcm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_4.o
  CC [M]  drivers/gpu/drm/xe/xe_hwmon.o
  CC [M]  drivers/gpu/drm/xe/xe_display.o
  LD [M]  drivers/gpu/drm/drm_shmem_helper.o
  LD [M]  drivers/gpu/drm/drm_suballoc_helper.o
  CC [M]  drivers/gpu/drm/xe/display/xe_fb_pin.o
  LD [M]  drivers/gpu/drm/drm_ttm_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v2_3.o
  AR      drivers/gpu/drm/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/nv.o
  CC [M]  drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/arct_reg_init.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_nv.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/P0260.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v4_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v5_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/aldebaran_reg_init.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/aldebaran.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/soc21.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv31.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/g94.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv04.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_requests.o
  CC [M]  drivers/gpu/drm/xe/display/xe_plane_initial.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sienna_cichlid.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_rps.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_misc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/g84.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gtt.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_irq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smu_v13_0_10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v4_3.o
  LD [M]  drivers/net/ethernet/intel/ixgbe/ixgbe.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_utils.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v6_0.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_llc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_7.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_dram.o
  AR      drivers/net/ethernet/built-in.a
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_pch.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v5_2.o
  CC [M]  drivers/gpu/drm/xe/i915-display/icl_dsi.o
  AR      drivers/net/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/lsdma_v6_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_9.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/pllnv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/pllgt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v1_7.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic_plane.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_lrc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v3_6.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_migrate.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v4_3.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_audio.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_backlight.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v7_0.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_mocs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v8_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bios.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv1a.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv20.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.o
  LD [M]  drivers/gpu/drm/drm_kms_helper.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ppgtt.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_rc6.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_region_lmem.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/amd/amdgpu/gfxhub_v1_1.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_renderstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_reset.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v10_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_connector.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ring.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/user.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v3_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp10b.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ring_submission.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_rps.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sa_media.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv04.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv10.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sseu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv1a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v11_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_1.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v3_0_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cursor.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_timeline.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_tlb.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_wopcm.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv41.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv44.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_1.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_workarounds.o
  CC [M]  drivers/gpu/drm/i915/gt/shmem_utils.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv46.o
  CC [M]  drivers/gpu/drm/i915/gt/sysfs_engines.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv47.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv49.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_7.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v8_7.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v8_10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv4e.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display.o
  CC [M]  drivers/gpu/drm/i915/gt/gen6_renderstate.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/g84.o
  CC [M]  drivers/gpu/drm/i915/gt/gen7_renderstate.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ih.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp89.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/iceland_ih.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_device.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/tonga_ih.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cz_ih.o
  CC [M]  drivers/gpu/drm/i915/gt/gen8_renderstate.o
  CC [M]  drivers/gpu/drm/i915/gt/gen9_renderstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_driver.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega10_ih.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf108.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk104.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_busy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega20_ih.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/navi10_ih.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_irq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk110.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 [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_clflush.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_trace.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_context.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/ih_v6_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/ih_v6_1.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_create.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_psp.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v3_1.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_domain.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm20b.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v10_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_wa.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v11_0_8.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v12_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v13_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v10_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dmc.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_internal.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv1a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv20.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv41.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv44.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_object.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_rlc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv49.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv4e.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_lmem.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_mman.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/rammcp77.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v10_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/imu_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf108.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_pages.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_phys.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v11_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v11_0_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/imu_v11_0_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgm107.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v2_4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpt.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_region.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/sddr2.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_drrs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/sddr3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_4.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_shmem.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gddr3.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsb.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gddr5.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v5_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v5_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v6_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mes.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gf100.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_stolen.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mes_v10_1.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mes_v11_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_throttle.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fb.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fbc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv50.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fdi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/g94.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v5_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_tiling.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v6_0.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/ga102.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_global_state.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v7_0.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_userptr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vce.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_gmbus.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdcp.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_wait.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdmi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv50.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v3_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hti.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v4_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/g94.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gemfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_sw_ring.o
  CC [M]  drivers/gpu/drm/i915/i915_active.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf117.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_link_bw.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v1_0.o
  CC [M]  drivers/gpu/drm/i915/i915_cmd_parser.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v2_5.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk110.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_lspcon.o
  CC [M]  drivers/gpu/drm/i915/i915_deps.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v3_0.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_evict.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v4_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gm200.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_gtt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv04.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_ww.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_panel.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv4e.o
  CC [M]  drivers/gpu/drm/i915/i915_gem.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.o
  CC [M]  drivers/gpu/drm/i915/i915_query.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.o
  CC [M]  drivers/gpu/drm/i915/i915_request.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv50.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padg94.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padgf119.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padgm200.o
  CC [M]  drivers/gpu/drm/i915/i915_scheduler.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pps.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_psr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.o
  CC [M]  drivers/gpu/drm/i915/i915_trace_points.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv4e.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.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/amd/amdgpu/jpeg_v4_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vdsc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vga.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vrr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busgf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bit.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_wm.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_scaler.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v1_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v2_0.o
  CC [M]  drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_watermark.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.o
  CC [M]  drivers/gpu/drm/xe/xe_pmu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgf119.o
  CC [M]  drivers/gpu/drm/i915/i915_vma.o
  CC [M]  drivers/gpu/drm/i915/i915_vma_resource.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/anx9805.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_acpi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v2_1.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v9_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v11_0.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_opregion.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v11_0_6.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fbdev.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0_3.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0_6.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_reset.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.o
  CC [M]  drivers/gpu/drm/xe/xe_guc.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gk104.o
  CC [M]  drivers/gpu/drm/xe/xe_migrate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mca_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_klvs_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_errors_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_slpc_abi.h
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_mmio_abi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_module.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_abi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_chardev.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_messages_abi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_topology.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_pasid.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gem.h
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_doorbell.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/ga102.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_flat_memory.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_queue.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv04.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_irq.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv11.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband_reg.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv17.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_wakeref.h
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_cik.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pcode.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg_defs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_vi.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/g84.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v9.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_trace.h
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v10.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v11.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_kernel_queue.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_utils.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager_vi.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager_v9.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process_queue_manager.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_config.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_cik.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp10b.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gem_stolen.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_mchbar_regs.h
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_vi.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_debugfs.h
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v9.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gpu_error.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_pch.h
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_dram.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv41.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_gmch.h
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gsc.o
  CC [M]  drivers/gpu/drm/i915/i915_hwmon.o
  CC [M]  drivers/gpu/drm/i915/display/hsw_ips.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv44.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv50.o
  CC [M]  drivers/gpu/drm/i915/display/intel_atomic.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_interrupt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_events.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gf100.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vgpu.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk104.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_fixed.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/cik_event_interrupt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v9.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v10.o
  CC [M]  drivers/gpu/drm/i915/display/intel_atomic_plane.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk20a.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_runtime_pm.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm200.o
  CC [M]  drivers/gpu/drm/i915/display/intel_audio.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v11.o
  CC [M]  drivers/gpu/drm/i915/display/intel_bios.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_smi_events.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_step.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_crat.o
  CC [M]  drivers/gpu/drm/i915/display/intel_bw.o
  CC [M]  drivers/gpu/drm/i915/display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debug.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm20b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debugfs.o
  CC [M]  drivers/gpu/drm/i915/display/intel_color.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_svm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_migrate.o
  CC [M]  drivers/gpu/drm/i915/display/intel_combo_phy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.o
  CC [M]  drivers/gpu/drm/i915/display/intel_connector.o
  CC [M]  drivers/gpu/drm/i915/display/intel_crtc.o
  CC [M]  drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp10b.o
  CC [M]  drivers/gpu/drm/i915/display/intel_cursor.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_driver.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gv100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_irq.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uc_fw.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pci_config.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mem.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object_frontbuffer.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gt/intel_rps.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_clock_gating.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memnv04.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_gt_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memnv50.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memgf100.o
  HDRTEST drivers/gpu/drm/xe/instructions/xe_instr_defs.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power.o
  HDRTEST drivers/gpu/drm/xe/instructions/xe_mi_commands.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_reg_defs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv04.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power_map.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_guc_regs.h
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power_well.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_gt_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv41.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gc_9_4_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv44.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_gpu_commands.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_lrc_layout.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_mchbar_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_engine_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_test.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_reset.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmmcp77.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_job.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgk20a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_acp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgm20b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_pci_test.h
  CC [M]  drivers/gpu/drm/i915/display/intel_display_rps.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_migrate_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_dma_buf_test.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp10b.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_bo_test.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgv100.o
  HDRTEST drivers/gpu/drm/xe/xe_assert.h
  HDRTEST drivers/gpu/drm/xe/xe_bb.h
  HDRTEST drivers/gpu/drm/xe/xe_bb_types.h
  CC [M]  drivers/gpu/drm/i915/display/intel_display_wa.o
  HDRTEST drivers/gpu/drm/xe/xe_bo.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmtu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/umem.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../acp/acp_hw.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ioc32.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dmc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpio_phy.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpll.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/arcturus_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/ummu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/uvmm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/mxms.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/navi10_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/agp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.o
  CC [M]  drivers/gpu/drm/i915/display/intel_drrs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/vangogh_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/cyan_skillfish_ppt.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsb.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/smu_v11_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fb.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu12/renoir_ppt.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fb_pin.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu12/smu_v12_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.o
  HDRTEST drivers/gpu/drm/xe/xe_bo_doc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0.o
  HDRTEST drivers/gpu/drm/xe/xe_bo_evict.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/aldebaran_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_bo_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/yellow_carp_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_0_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_debugfs.h
  CC [M]  drivers/gpu/drm/i915/display/intel_fbc.o
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump_types.h
  CC [M]  drivers/gpu/drm/i915/display/intel_fdi.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fifo_underrun.o
  CC [M]  drivers/gpu/drm/i915/display/intel_frontbuffer.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_4_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_5_ppt.o
  CC [M]  drivers/gpu/drm/i915/display/intel_global_state.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hdcp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_7_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.o
  HDRTEST drivers/gpu/drm/xe/xe_device.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/memx.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hotplug.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_6_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/amdgpu_smu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu_cmn.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk104.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hotplug_irq.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hti.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu8_smumgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_link_bw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.o
  HDRTEST drivers/gpu/drm/xe/xe_device_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_device_types.h
  HDRTEST drivers/gpu/drm/xe/xe_display.h
  CC [M]  drivers/gpu/drm/i915/display/intel_load_detect.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lpe_audio.o
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_lock.o
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_verify.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/tonga_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/fiji_smumgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/polaris10_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/iceland_smumgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_setup.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu7_smumgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_overlay.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pch_display.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pch_refclk.o
  HDRTEST drivers/gpu/drm/xe/xe_dma_buf.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf117.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega10_smumgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_plane_initial.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pmdemand.o
  HDRTEST drivers/gpu/drm/xe/xe_drm_client.h
  CC [M]  drivers/gpu/drm/i915/display/intel_psr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk20a.o
  HDRTEST drivers/gpu/drm/xe/xe_drv.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu10_smumgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/ci_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_exec.h
  CC [M]  drivers/gpu/drm/i915/display/intel_quirks.o
  CC [M]  drivers/gpu/drm/i915/display/intel_sprite.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gm200.o
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue.h
  CC [M]  drivers/gpu/drm/i915/display/intel_sprite_uapi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gp10b.o
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue_types.h
  CC [M]  drivers/gpu/drm/i915/display/intel_tc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega12_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fan.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fannil.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vegam_smumgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu9_smumgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vblank.o
  HDRTEST drivers/gpu/drm/xe/xe_execlist.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fanpwm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega20_smumgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vga.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/hwmgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/processpptables.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fantog.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/ic.o
  CC [M]  drivers/gpu/drm/i915/display/intel_wm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/hardwaremanager.o
  CC [M]  drivers/gpu/drm/i915/display/i9xx_plane.o
  HDRTEST drivers/gpu/drm/xe/xe_execlist_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/temp.o
  HDRTEST drivers/gpu/drm/xe/xe_force_wake.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.o
  HDRTEST drivers/gpu/drm/xe/xe_force_wake_types.h
  CC [M]  drivers/gpu/drm/i915/display/i9xx_wm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv50.o
  HDRTEST drivers/gpu/drm/xe/xe_ggtt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu8_hwmgr.o
  HDRTEST drivers/gpu/drm/xe/xe_ggtt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler.h
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pppcielanes.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/process_pptables_v1_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gt215.o
  CC [M]  drivers/gpu/drm/i915/display/skl_scaler.o
  CC [M]  drivers/gpu/drm/i915/display/skl_universal_plane.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf100.o
  CC [M]  drivers/gpu/drm/i915/display/skl_watermark.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf119.o
  CC [M]  drivers/gpu/drm/i915/display/intel_acpi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ppatomctrl.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.o
  CC [M]  drivers/gpu/drm/i915/display/intel_opregion.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm107.o
  HDRTEST drivers/gpu/drm/xe/xe_gt.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_clock.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm200.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_debugfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ppatomfwctrl.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle_sysfs_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_mcr.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_pagefault.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_printk.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_hwmgr.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv40.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fbdev.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ch7017.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv41.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_powertune.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_thermal.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_clockpowergating.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_processpptables.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ch7xxx.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_hwmgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_powertune.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ivch.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_thermal.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu10_hwmgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pp_psm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/base.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_topology.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/uvfn.o
  HDRTEST drivers/gpu/drm/xe/xe_guc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/tu102.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ns2501.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/ga100.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_sil164.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gpio.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_processpptables.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf100.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_tfp410.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf117.o
  CC [M]  drivers/gpu/drm/i915/display/g4x_dp.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_hwmgr.o
  CC [M]  drivers/gpu/drm/i915/display/g4x_hdmi.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_thermal.o
  CC [M]  drivers/gpu/drm/i915/display/icl_dsi.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_fwif.h
  CC [M]  drivers/gpu/drm/i915/display/intel_backlight.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pp_overdriver.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_hwconfig.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_log.h
  CC [M]  drivers/gpu/drm/i915/display/intel_crt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu_helper.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_log_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_processpptables.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc.h
  CC [M]  drivers/gpu/drm/i915/display/intel_cx0_phy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_hwmgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_powertune.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.o
  CC [M]  drivers/gpu/drm/i915/display/intel_ddi.o
  CC [M]  drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_thermal.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/falcon.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/common_baco.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/xtensa.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.o
  HDRTEST drivers/gpu/drm/xe/xe_heci_gsc.h
  CC [M]  drivers/gpu/drm/i915/display/intel_display_device.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_trace.o
  HDRTEST drivers/gpu/drm/xe/xe_huc.h
  HDRTEST drivers/gpu/drm/xe/xe_huc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_huc_types.h
  CC [M]  drivers/gpu/drm/i915/display/intel_dkl_phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gm107.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu9_baco.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.h
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_aux.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/tonga_baco.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/polaris_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gm200.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence.h
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_hdcp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gp102.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_link_training.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/tu102.o
  HDRTEST drivers/gpu/drm/xe/xe_hwmon.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/fiji_baco.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_mst.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ci_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_baco.o
  HDRTEST drivers/gpu/drm/xe/xe_irq.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/amd_powerplay.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/cipher/g84.o
  HDRTEST drivers/gpu/drm/xe/xe_lrc.h
  HDRTEST drivers/gpu/drm/xe/xe_lrc_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/legacy_dpm.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_dpm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_smc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/si_dpm.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi_vbt.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dvo.o
  CC [M]  drivers/gpu/drm/i915/display/intel_gmbus.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hdmi.o
  HDRTEST drivers/gpu/drm/xe/xe_macros.h
  HDRTEST drivers/gpu/drm/xe/xe_map.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/si_smc.o
  HDRTEST drivers/gpu/drm/xe/xe_migrate.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/base.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lspcon.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_dpm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lvds.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/pci.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_dpm_internal.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/user.o
  CC [M]  drivers/gpu/drm/i915/display/intel_panel.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pps.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.o
  HDRTEST drivers/gpu/drm/xe/xe_migrate_doc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmi.o
  HDRTEST drivers/gpu/drm/xe/xe_mmio.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_plane.o
  HDRTEST drivers/gpu/drm/xe/xe_mocs.h
  HDRTEST drivers/gpu/drm/xe/xe_module.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_crtc.o
  HDRTEST drivers/gpu/drm/xe/xe_pat.h
  HDRTEST drivers/gpu/drm/xe/xe_pci.h
  CC [M]  drivers/gpu/drm/i915/display/intel_qp_tables.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_irq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/head.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.o
  HDRTEST drivers/gpu/drm/xe/xe_pci_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_color.o
  HDRTEST drivers/gpu/drm/xe/xe_pcode.h
  CC [M]  drivers/gpu/drm/i915/display/intel_sdvo.o
  HDRTEST drivers/gpu/drm/xe/xe_pcode_api.h
  CC [M]  drivers/gpu/drm/i915/display/intel_snps_phy.o
  HDRTEST drivers/gpu/drm/xe/xe_platform_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pm.h
  CC [M]  drivers/gpu/drm/i915/display/intel_tv.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/dc_fpu.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vdsc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vrr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/vga.o
  HDRTEST drivers/gpu/drm/xe/xe_pmu.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_services.o
  HDRTEST drivers/gpu/drm/xe/xe_pmu_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.o
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_helpers.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.o
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt.h
  CC [M]  drivers/gpu/drm/i915/display/vlv_dsi.o
  CC [M]  drivers/gpu/drm/i915/display/vlv_dsi_pll.o
  HDRTEST drivers/gpu/drm/xe/xe_pt_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/g94.o
  CC [M]  drivers/gpu/drm/i915/i915_perf.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_pp_smu.o
  HDRTEST drivers/gpu/drm/xe/xe_pt_walk.h
  HDRTEST drivers/gpu/drm/xe/xe_query.h
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_psr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_replay.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_hdcp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_crc.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gt200.o
  HDRTEST drivers/gpu/drm/xe/xe_range_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr.h
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_cmd.o
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp77.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/conversion.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/fixpt31_32.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_debugfs.o
  HDRTEST drivers/gpu/drm/xe/xe_reg_whitelist.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/vector.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/dc_common.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp89.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_gsccs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gk104.o
  HDRTEST drivers/gpu/drm/xe/xe_res_cursor.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gk110.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.o
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_interface.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_irq.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gp102.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_session.o
  CC [M]  drivers/gpu/drm/i915/i915_gpu_error.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_common.o
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table_helper2.o
  CC [M]  drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.o
  CC [M]  drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.o
  HDRTEST drivers/gpu/drm/xe/xe_rtp.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser2.o
  CC [M]  drivers/gpu/drm/i915/selftests/intel_scheduler_helpers.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce60/command_table_helper_dce60.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce80/command_table_helper_dce80.o
  HDRTEST drivers/gpu/drm/xe/xe_rtp_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce110/command_table_helper_dce110.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce112/command_table_helper_dce112.o
  HDRTEST drivers/gpu/drm/xe/xe_sa.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce112/command_table_helper2_dce112.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dce_calcs.o
  HDRTEST drivers/gpu/drm/xe/xe_sa_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/custom_float.o
  CC [M]  drivers/gpu/drm/i915/selftests/i915_random.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/tu102.o
  CC [M]  drivers/gpu/drm/i915/selftests/i915_selftest.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_atomic.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_flush_test.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/bw_fixed.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_mode_lib.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_live_test.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_rq_dlg_helpers.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dml1_display_rq_dlg_calc.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_mmap.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn10/dcn10_fpu.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_reset.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/udisp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/dcn20_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.o
  HDRTEST drivers/gpu/drm/xe/xe_sched_job.h
  HDRTEST drivers/gpu/drm/xe/xe_sched_job_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_spinner.o
  HDRTEST drivers/gpu/drm/xe/xe_step.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/uhead.o
  HDRTEST drivers/gpu/drm/xe/xe_step_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/base.o
  CC [M]  drivers/gpu/drm/i915/selftests/librapl.o
  HDRTEST drivers/gpu/drm/xe/xe_sync.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_mode_vba.o
  HDRTEST drivers/gpu/drm/xe/xe_sync_types.h
  CC [M]  drivers/gpu/drm/i915/i915_vgpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dkl_phy_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_tile.h
  HDRTEST drivers/gpu/drm/i915/display/intel_crtc_state_dump.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_rq_dlg_calc_20.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_mode_vba_20.o
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs.h
  HDRTEST drivers/gpu/drm/i915/display/hsw_ips.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_rq_dlg_calc_20v2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_mode_vba_20v2.o
  HDRTEST drivers/gpu/drm/i915/display/g4x_hdmi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn21/display_rq_dlg_calc_21.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs_types.h
  HDRTEST drivers/gpu/drm/xe/xe_trace.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn21/display_mode_vba_21.o
  HDRTEST drivers/gpu/drm/xe/xe_ttm_stolen_mgr.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/nv50.o
  HDRTEST drivers/gpu/drm/i915/display/intel_overlay.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_sys_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/dcn30_fpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_mode_vba_30.o
  HDRTEST drivers/gpu/drm/i915/display/skl_watermark_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dmc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_rq_dlg_calc_30.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gf100.o
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_vga.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_mode_vba_31.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_rq_dlg_calc_31.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.o
  HDRTEST drivers/gpu/drm/xe/xe_tuning.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gf119.o
  HDRTEST drivers/gpu/drm/i915/display/intel_audio.h
  HDRTEST drivers/gpu/drm/xe/xe_uc.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lvds.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_setup.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_abi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_rq_dlg_calc_314.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/user.o
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv04.o
  HDRTEST drivers/gpu/drm/xe/xe_uc_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.o
  HDRTEST drivers/gpu/drm/i915/display/intel_cdclk.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_limits.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hotplug.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dkl_phy.h
  HDRTEST drivers/gpu/drm/i915/display/intel_atomic.h
  HDRTEST drivers/gpu/drm/i915/display/intel_color_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_driver.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dpll.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_rq_dlg_calc_32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.o
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_pll_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_mst.h
  HDRTEST drivers/gpu/drm/xe/xe_vm.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_doc.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fdi_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_madvise.h
  HDRTEST drivers/gpu/drm/i915/display/g4x_dp.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_util_32.o
  HDRTEST drivers/gpu/drm/xe/xe_vm_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_tc.h
  HDRTEST drivers/gpu/drm/xe/xe_wa.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.o
  HDRTEST drivers/gpu/drm/xe/xe_wait_user_fence.h
  HDRTEST drivers/gpu/drm/i915/display/intel_frontbuffer.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm_types.h
  LD [M]  drivers/gpu/drm/xe/xe.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi_vbt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/dcn31_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/cgrp.o
  HDRTEST drivers/gpu/drm/i915/display/intel_psr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/dcn32_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.o
  HDRTEST drivers/gpu/drm/i915/display/intel_crt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/chid.o
  HDRTEST drivers/gpu/drm/i915/display/intel_opregion.h
  HDRTEST drivers/gpu/drm/i915/display/intel_snps_phy_regs.h
  HDRTEST drivers/gpu/drm/i915/display/i9xx_wm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.o
  HDRTEST drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn321/dcn321_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/runq.o
  HDRTEST drivers/gpu/drm/i915/display/intel_global_state.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lpe_audio.h
  HDRTEST drivers/gpu/drm/i915/display/intel_drrs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn301/dcn301_fpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_rps.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn302/dcn302_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fbdev.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn303/dcn303_fpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/dcn314_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dsc/rc_calc_fpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pps_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdmi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calcs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calc_math.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fdi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calc_auto.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce60/dce60_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/g98.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fb.h
  HDRTEST drivers/gpu/drm/i915/display/intel_qp_tables.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dsb_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce100/dce_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vdsc.h
  HDRTEST drivers/gpu/drm/i915/display/intel_snps_phy.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_core.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_pll.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo_dev.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp.h
  HDRTEST drivers/gpu/drm/i915/display/intel_sdvo_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce110/dce110_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pch_refclk.h
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_lock.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_trace.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk110.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk208.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce112/dce112_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk20a.o
  HDRTEST drivers/gpu/drm/i915/display/i9xx_plane.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce120/dce120_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv1_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux_backlight.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dpll_mgr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv1_clk_mgr_vbios_smu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm107.o
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_plane_initial.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv2_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn20/dcn20_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn201/dcn201_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn21/rn_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_device.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn21/rn_clk_mgr_vbios_smu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn30/dcn30_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn30/dcn30_clk_mgr_smu_msg.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/ucgrp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn301/vg_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fifo_underrun.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/uchan.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn301/dcn301_smu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_cursor.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn31/dcn31_smu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn31/dcn31_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn314/dcn314_smu.o
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_cx0_phy.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn314/dcn314_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/skl_scaler.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hti.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn315/dcn315_smu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.o
  HDRTEST drivers/gpu/drm/i915/display/icl_dsi_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_atomic_plane.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn315/dcn315_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn316/dcn316_smu.o
  HDRTEST drivers/gpu/drm/i915/display/skl_watermark.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fbc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn316/dcn316_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn32/dcn32_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn32/dcn32_clk_mgr_smu_msg.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_reg_defs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv15.o
  HDRTEST drivers/gpu/drm/i915/display/intel_acpi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv17.o
  HDRTEST drivers/gpu/drm/i915/display/intel_connector.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dpt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_audio.o
  HDRTEST drivers/gpu/drm/i915/display/intel_quirks.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_link_training.h
  HDRTEST drivers/gpu/drm/i915/display/intel_color.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.o
  HDRTEST drivers/gpu/drm/i915/display/intel_crtc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_stream_encoder.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_link_encoder.o
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_verify.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power_well.h
  HDRTEST drivers/gpu/drm/i915/display/intel_psr_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_hwseq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_mem_input.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_clock_source.o
  HDRTEST drivers/gpu/drm/i915/display/intel_wm.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_scl_filters.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_transform.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_opp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_dmcu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pipe_crc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_abm.o
  HDRTEST drivers/gpu/drm/i915/display/intel_audio_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_ipp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_aux.o
  HDRTEST drivers/gpu/drm/i915/display/intel_panel.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_i2c.o
  HDRTEST drivers/gpu/drm/i915/display/intel_sprite.h
  HDRTEST drivers/gpu/drm/i915/display/intel_wm_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_tv.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_i2c_hw.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hti_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_vrr.h
  HDRTEST drivers/gpu/drm/i915/display/intel_load_detect.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv44.o
  HDRTEST drivers/gpu/drm/i915/display/skl_universal_plane.h
  HDRTEST drivers/gpu/drm/i915/display/intel_mg_phy_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_bw.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_i2c_sw.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_irq.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dmub_psr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.o
  HDRTEST drivers/gpu/drm/i915/display/intel_de.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lvds_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dmub_abm.o
  HDRTEST drivers/gpu/drm/i915/display/intel_gmbus_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gt200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp79.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dmub_abm_lcd.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_panel_cntl.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gt215.o
  HDRTEST drivers/gpu/drm/i915/display/intel_sdvo.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux.h
  HDRTEST drivers/gpu/drm/i915/display/intel_vdsc_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dmub_hw_lock_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_combo_phy.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp89.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dmub_outbox.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dmub_replay.o
  HDRTEST drivers/gpu/drm/i915/display/intel_gmbus.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf104.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dmc_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_ddi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf117.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hotplug_irq.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/gpio_base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/gpio_service.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/hw_factory.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf119.o
  HDRTEST drivers/gpu/drm/i915/display/intel_tv_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/hw_gpio.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsb.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/hw_hpd.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/hw_ddc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/hw_generic.o
  HDRTEST drivers/gpu/drm/i915/display/intel_bios.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/hw_translate.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pch_display.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dce60/hw_translate_dce60.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dce60/hw_factory_dce60.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dce80/hw_translate_dce80.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dce80/hw_factory_dce80.o
  HDRTEST drivers/gpu/drm/i915/display/intel_backlight.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dce110/hw_translate_dce110.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vblank.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dce110/hw_factory_dce110.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dce120/hw_translate_dce120.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dce120/hw_factory_dce120.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pmdemand.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn10/hw_translate_dcn10.o
  HDRTEST drivers/gpu/drm/i915/display/intel_backlight_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn10/hw_factory_dcn10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn20/hw_translate_dcn20.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn20/hw_factory_dcn20.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.o
  HDRTEST drivers/gpu/drm/i915/display/intel_combo_phy_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_reset.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gm20b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp104.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power_map.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn21/hw_translate_dcn21.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn21/hw_factory_dcn21.o
  HDRTEST drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp108.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn30/hw_translate_dcn30.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_wa.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp10b.o
  HDRTEST drivers/gpu/drm/i915/display/icl_dsi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn30/hw_factory_dcn30.o
  HDRTEST drivers/gpu/drm/i915/display/intel_lspcon.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn315/hw_translate_dcn315.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dpio_phy.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_hdcp.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn315/hw_factory_dcn315.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn32/hw_translate_dcn32.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/gpio/dcn32/hw_factory_dcn32.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fb_pin.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/irq_service.o
  HDRTEST drivers/gpu/drm/i915/display/intel_link_bw.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dce60/irq_service_dce60.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dce80/irq_service_dce80.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pps.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dce110/irq_service_dce110.o
  HDRTEST drivers/gpu/drm/i915/display/intel_sprite_uapi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dce120/irq_service_dce120.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn10/irq_service_dcn10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn20/irq_service_dcn20.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn21/irq_service_dcn21.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn201/irq_service_dcn201.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_region.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn30/irq_service_dcn30.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn302/irq_service_dcn302.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn303/irq_service_dcn303.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_context_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn31/irq_service_dcn31.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_lmem.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn314/irq_service_dcn314.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ga102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxnv40.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn315/irq_service_dcn315.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_mman.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxnv50.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf108.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf110.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_context.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_clflush.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/irq/dcn32/irq_service_dcn32.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_detection.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf117.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_tiling.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_dpms.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_stolen.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_create.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_factory.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm_move.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_resource.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_validation.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ioctls.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110b.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_domain.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/accessories/link_dp_trace.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/accessories/link_dp_cts.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk208.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/accessories/link_fpga.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_internal.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_dmabuf.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/hwss/link_hwss_dio.o
  HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_context.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/hwss/link_hwss_dpia.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/hwss/link_hwss_hpo_dp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/hwss/link_hwss_dio_fixed_vs_pe_retimer.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/hwss/link_hwss_hpo_fixed_vs_pe_retimer_dp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_hpd.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_ddc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm20b.o
  HDRTEST drivers/gpu/drm/i915/gem/selftests/huge_gem_object.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_dpcd.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_dp_dpia.o
  HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_gem_object.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_dp_training.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_dp_training_8b_10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_dp_training_128b_132b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_dp_training_dpia.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_dp_training_auxless.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_dp_training_fixed_vs_pe_retimer.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_dp_phy.o
  HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_dmabuf.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp107.o
  HDRTEST drivers/gpu/drm/i915/gem/selft



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

* [Intel-xe] ✓ CI.Hooks: success for drm/xe: Update to upstream DRM scheduler code
  2023-10-25  4:05 [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code Matthew Brost
                   ` (3 preceding siblings ...)
  2023-10-25  4:20 ` [Intel-xe] ✓ CI.Build: " Patchwork
@ 2023-10-25  4:20 ` Patchwork
  2023-10-25  4:21 ` [Intel-xe] ✓ CI.checksparse: " Patchwork
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2023-10-25  4:20 UTC (permalink / raw)
  To: Matthew Brost; +Cc: intel-xe

== Series Details ==

Series: drm/xe: Update to upstream DRM scheduler code
URL   : https://patchwork.freedesktop.org/series/125540/
State : success

== Summary ==

run-parts: executing /workspace/ci/hooks/00-showenv
+ pwd
+ ls -la
/workspace
total 1008
drwxrwxr-x 12 1003 1003   4096 Oct 25 04:20 .
drwxr-xr-x  1 root root   4096 Oct 25 04:20 ..
-rw-rw-r--  1 1003 1003 806158 Oct 25 04:20 build.log
-rw-rw-r--  1 1003 1003   3870 Oct 25 04:11 checkpatch.log
drwxrwxr-x  5 1003 1003   4096 Oct 25 04:09 ci
drwxrwxr-x  9 1003 1003   4096 Oct 25 04:09 docker
drwxrwxr-x  8 1003 1003   4096 Oct 25 04:09 .git
-rw-rw-r--  1 1003 1003    212 Oct 25 04:11 git_apply.log
drwxrwxr-x  4 1003 1003   4096 Oct 25 04:09 .github
-rw-rw-r--  1 1003 1003    233 Oct 25 04:09 .groovylintrc.json
-rw-rw-r--  1 1003 1003     78 Oct 25 04:20 hooks.log
drwxrwxr-x 31 1003 1003   4096 Oct 25 04:20 kernel
-rw-rw-r--  1 1003 1003 116173 Oct 25 04:11 kernel.mbox
-rw-rw-r--  1 1003 1003  28749 Oct 25 04:13 kunit.log
-rw-rw-r--  1 1003 1003     48 Oct 25 04:11 parent.tag
drwxrwxr-x 46 1003 1003   4096 Oct 25 04:09 pipelines
-rw-rw-r--  1 1003 1003    793 Oct 25 04:09 README.adoc
drwxrwxr-x  3 1003 1003   4096 Oct 25 04:09 scripts
drwxrwxr-x  3 1003 1003   4096 Oct 25 04:09 src
drwxrwxr-x  2 1003 1003   4096 Oct 25 04:09 vars
drwxrwxr-x  2 1003 1003   4096 Oct 25 04:09 .vscode
+ uname -a
Linux 9e53492ab305 5.4.0-164-generic #181-Ubuntu SMP Fri Sep 1 13:41:22 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
+ 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"
+ '[' -n /workspace ']'
+ git_args='-C /workspace/kernel'
+ git_log_args=
+ git --no-pager -C /workspace/kernel log --format=oneline --abbrev-commit
672549977 drm/xe: Update to upstream DRM scheduler code
4354e27ef drm/xe: Simplify xe_res_get_buddy()
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
+ grep -q -e '^CONFIG_DRM_XE_DISPLAY=[yY]' /workspace/kernel/build64-default/.config
+ RESTORE_DISPLAY_CONFIG=1
+ trap cleanup EXIT
+ ./scripts/config --file /workspace/kernel/build64-default/.config --disable CONFIG_DRM_XE_DISPLAY
++ nproc
+ make -j48 O=/workspace/kernel/build64-default modules_prepare
make[1]: Entering directory '/workspace/kernel/build64-default'
  SYNC    include/config/auto.conf.cmd
  GEN     Makefile
  GEN     Makefile
  UPD     include/config/kernel.release
  UPD     include/generated/compile.h
  UPD     include/generated/utsrelease.h
  DESCEND objtool
  HOSTCC  /workspace/kernel/build64-default/tools/objtool/fixdep.o
  CALL    ../scripts/checksyscalls.sh
  HOSTLD  /workspace/kernel/build64-default/tools/objtool/fixdep-in.o
  LINK    /workspace/kernel/build64-default/tools/objtool/fixdep
  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/subcmd-config.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/sigchain.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/libctype.o
  CC      /workspace/kernel/build64-default/tools/objtool/str_error_r.o
  CC      /workspace/kernel/build64-default/tools/objtool/librbtree.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.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 M=drivers/gpu/drm/xe W=1
make[1]: Entering directory '/workspace/kernel/build64-default'
  CC [M]  drivers/gpu/drm/xe/xe_bb.o
  CC [M]  drivers/gpu/drm/xe/xe_bo.o
  CC [M]  drivers/gpu/drm/xe/xe_bo_evict.o
  CC [M]  drivers/gpu/drm/xe/xe_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_devcoredump.o
  CC [M]  drivers/gpu/drm/xe/xe_device.o
  CC [M]  drivers/gpu/drm/xe/xe_device_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_dma_buf.o
  CC [M]  drivers/gpu/drm/xe/xe_drm_client.o
  CC [M]  drivers/gpu/drm/xe/xe_exec.o
  CC [M]  drivers/gpu/drm/xe/xe_execlist.o
  CC [M]  drivers/gpu/drm/xe/xe_exec_queue.o
  CC [M]  drivers/gpu/drm/xe/xe_force_wake.o
  CC [M]  drivers/gpu/drm/xe/xe_ggtt.o
  CC [M]  drivers/gpu/drm/xe/xe_gpu_scheduler.o
  CC [M]  drivers/gpu/drm/xe/xe_gt.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_clock.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_idle_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_mcr.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_pagefault.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_topology.o
  HOSTCC  drivers/gpu/drm/xe/xe_gen_wa_oob
  CC [M]  drivers/gpu/drm/xe/xe_guc_ads.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ct.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_hwconfig.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_log.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_pc.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_submit.o
  CC [M]  drivers/gpu/drm/xe/xe_heci_gsc.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_huc.o
  CC [M]  drivers/gpu/drm/xe/xe_huc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_irq.o
  CC [M]  drivers/gpu/drm/xe/xe_lrc.o
  CC [M]  drivers/gpu/drm/xe/xe_mmio.o
  CC [M]  drivers/gpu/drm/xe/xe_mocs.o
  CC [M]  drivers/gpu/drm/xe/xe_module.o
  CC [M]  drivers/gpu/drm/xe/xe_pat.o
  CC [M]  drivers/gpu/drm/xe/xe_pci.o
  CC [M]  drivers/gpu/drm/xe/xe_pcode.o
  CC [M]  drivers/gpu/drm/xe/xe_pm.o
  CC [M]  drivers/gpu/drm/xe/xe_preempt_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_pt.o
  CC [M]  drivers/gpu/drm/xe/xe_pt_walk.o
  CC [M]  drivers/gpu/drm/xe/xe_query.o
  CC [M]  drivers/gpu/drm/xe/xe_range_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_sr.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_whitelist.o
  CC [M]  drivers/gpu/drm/xe/xe_rtp.o
  CC [M]  drivers/gpu/drm/xe/xe_sa.o
  CC [M]  drivers/gpu/drm/xe/xe_sched_job.o
  CC [M]  drivers/gpu/drm/xe/xe_step.o
  CC [M]  drivers/gpu/drm/xe/xe_sync.o
  CC [M]  drivers/gpu/drm/xe/xe_tile.o
  CC [M]  drivers/gpu/drm/xe/xe_tile_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_trace.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_tuning.o
  CC [M]  drivers/gpu/drm/xe/xe_uc.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_fw.o
  CC [M]  drivers/gpu/drm/xe/xe_vm_madvise.o
  CC [M]  drivers/gpu/drm/xe/xe_wait_user_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_wopcm.o
  CC [M]  drivers/gpu/drm/xe/xe_hwmon.o
  CC [M]  drivers/gpu/drm/xe/xe_pmu.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_klvs_abi.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_bo_test.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_errors_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_slpc_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_mmio_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_messages_abi.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_instr_defs.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.o
  HDRTEST drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_mi_commands.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_reg_defs.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_pci_test.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_guc_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_gt_regs.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_regs.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_wa_test.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_gpu_commands.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_lrc_layout.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_mchbar_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_engine_regs.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_pci_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_migrate_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_dma_buf_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_bo_test.h
  HDRTEST drivers/gpu/drm/xe/xe_assert.h
  HDRTEST drivers/gpu/drm/xe/xe_bb.h
  HDRTEST drivers/gpu/drm/xe/xe_bb_types.h
  HDRTEST drivers/gpu/drm/xe/xe_bo.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_evict.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_types.h
  HDRTEST drivers/gpu/drm/xe/xe_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump_types.h
  HDRTEST drivers/gpu/drm/xe/xe_device.h
  HDRTEST drivers/gpu/drm/xe/xe_device_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_device_types.h
  HDRTEST drivers/gpu/drm/xe/xe_dma_buf.h
  HDRTEST drivers/gpu/drm/xe/xe_drm_client.h
  HDRTEST drivers/gpu/drm/xe/xe_drv.h
  HDRTEST drivers/gpu/drm/xe/xe_exec.h
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue.h
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue_types.h
  HDRTEST drivers/gpu/drm/xe/xe_execlist.h
  HDRTEST drivers/gpu/drm/xe/xe_execlist_types.h
  HDRTEST drivers/gpu/drm/xe/xe_force_wake.h
  HDRTEST drivers/gpu/drm/xe/xe_force_wake_types.h
  HDRTEST drivers/gpu/drm/xe/xe_ggtt.h
  HDRTEST drivers/gpu/drm/xe/xe_ggtt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler.h
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_clock.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle_sysfs_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_mcr.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_pagefault.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_printk.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_topology.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_fwif.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_hwconfig.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_log.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_log_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_heci_gsc.h
  HDRTEST drivers/gpu/drm/xe/xe_huc.h
  HDRTEST drivers/gpu/drm/xe/xe_huc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_huc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_types.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence_types.h
  HDRTEST drivers/gpu/drm/xe/xe_hwmon.h
  HDRTEST drivers/gpu/drm/xe/xe_irq.h
  HDRTEST drivers/gpu/drm/xe/xe_lrc.h
  HDRTEST drivers/gpu/drm/xe/xe_lrc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_macros.h
  HDRTEST drivers/gpu/drm/xe/xe_map.h
  HDRTEST drivers/gpu/drm/xe/xe_migrate.h
  HDRTEST drivers/gpu/drm/xe/xe_migrate_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_mmio.h
  HDRTEST drivers/gpu/drm/xe/xe_mocs.h
  HDRTEST drivers/gpu/drm/xe/xe_module.h
  HDRTEST drivers/gpu/drm/xe/xe_pat.h
  HDRTEST drivers/gpu/drm/xe/xe_pci.h
  HDRTEST drivers/gpu/drm/xe/xe_pci_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pcode.h
  HDRTEST drivers/gpu/drm/xe/xe_pcode_api.h
  HDRTEST drivers/gpu/drm/xe/xe_platform_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pm.h
  HDRTEST drivers/gpu/drm/xe/xe_pmu.h
  HDRTEST drivers/gpu/drm/xe/xe_pmu_types.h
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_walk.h
  HDRTEST drivers/gpu/drm/xe/xe_query.h
  HDRTEST drivers/gpu/drm/xe/xe_range_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr_types.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_whitelist.h
  HDRTEST drivers/gpu/drm/xe/xe_res_cursor.h
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops.h
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops_types.h
  HDRTEST drivers/gpu/drm/xe/xe_rtp.h
  HDRTEST drivers/gpu/drm/xe/xe_rtp_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sa.h
  HDRTEST drivers/gpu/drm/xe/xe_sa_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sched_job.h
  HDRTEST drivers/gpu/drm/xe/xe_sched_job_types.h
  HDRTEST drivers/gpu/drm/xe/xe_step.h
  HDRTEST drivers/gpu/drm/xe/xe_step_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sync.h
  HDRTEST drivers/gpu/drm/xe/xe_sync_types.h
  HDRTEST drivers/gpu/drm/xe/xe_tile.h
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs_types.h
  HDRTEST drivers/gpu/drm/xe/xe_trace.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_stolen_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_sys_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
  HDRTEST drivers/gpu/drm/xe/xe_tuning.h
  HDRTEST drivers/gpu/drm/xe/xe_uc.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_abi.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_types.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_vm.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_madvise.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_types.h
  HDRTEST drivers/gpu/drm/xe/xe_wa.h
  HDRTEST drivers/gpu/drm/xe/xe_wait_user_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm_types.h
  GEN     xe_wa_oob.c xe_wa_oob.h
  GEN     xe_wa_oob.c xe_wa_oob.h
  CC [M]  drivers/gpu/drm/xe/xe_guc.o
  CC [M]  drivers/gpu/drm/xe/xe_migrate.o
  CC [M]  drivers/gpu/drm/xe/xe_ring_ops.o
  CC [M]  drivers/gpu/drm/xe/xe_vm.o
  CC [M]  drivers/gpu/drm/xe/xe_wa.o
  LD [M]  drivers/gpu/drm/xe/xe.o
  MODPOST drivers/gpu/drm/xe/Module.symvers
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/xe/tests/xe_bo_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/xe/tests/xe_dma_buf_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/xe/tests/xe_migrate_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/xe/tests/xe_pci_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/xe/tests/xe_rtp_test.o
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/xe/tests/xe_wa_test.o
  CC [M]  drivers/gpu/drm/xe/xe.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_bo_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_pci_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_wa_test.mod.o
  LD [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_pci_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_bo_test.ko
  LD [M]  drivers/gpu/drm/xe/xe.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_wa_test.ko
make[1]: Leaving directory '/workspace/kernel/build64-default'
+ cleanup
+ '[' 1 -eq 1 ']'
+ ./scripts/config --file /workspace/kernel/build64-default/.config --enable CONFIG_DRM_XE_DISPLAY
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] 13+ messages in thread

* [Intel-xe] ✓ CI.checksparse: success for drm/xe: Update to upstream DRM scheduler code
  2023-10-25  4:05 [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code Matthew Brost
                   ` (4 preceding siblings ...)
  2023-10-25  4:20 ` [Intel-xe] ✓ CI.Hooks: " Patchwork
@ 2023-10-25  4:21 ` Patchwork
  2023-10-25  4:47 ` [Intel-xe] ✗ CI.BAT: failure " Patchwork
  2023-10-25 13:56 ` [Intel-xe] [PATCH] " Lucas De Marchi
  7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2023-10-25  4:21 UTC (permalink / raw)
  To: Matthew Brost; +Cc: intel-xe

== Series Details ==

Series: drm/xe: Update to upstream DRM scheduler code
URL   : https://patchwork.freedesktop.org/series/125540/
State : success

== 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 4354e27efb78582ee567ba6264c79d0872a3a4e7
Sparse version: 0.6.1 (Ubuntu: 0.6.1-2build1)
Fast mode used, each commit won't be checked separately.
Okay!

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



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

* [Intel-xe] ✗ CI.BAT: failure for drm/xe: Update to upstream DRM scheduler code
  2023-10-25  4:05 [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code Matthew Brost
                   ` (5 preceding siblings ...)
  2023-10-25  4:21 ` [Intel-xe] ✓ CI.checksparse: " Patchwork
@ 2023-10-25  4:47 ` Patchwork
  2023-10-25 13:56 ` [Intel-xe] [PATCH] " Lucas De Marchi
  7 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2023-10-25  4:47 UTC (permalink / raw)
  To: Matthew Brost; +Cc: intel-xe

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

== Series Details ==

Series: drm/xe: Update to upstream DRM scheduler code
URL   : https://patchwork.freedesktop.org/series/125540/
State : failure

== Summary ==

CI Bug Log - changes from xe-444-4354e27efb78582ee567ba6264c79d0872a3a4e7_BAT -> xe-pw-125540v1_BAT
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with xe-pw-125540v1_BAT absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in xe-pw-125540v1_BAT, please notify your bug team (lgci.bug.filing@intel.com) 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-125540v1_BAT:

### IGT changes ###

#### Possible regressions ####

  * igt@xe_create@create-massive-size:
    - bat-pvc-2:          [PASS][1] -> [ABORT][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-444-4354e27efb78582ee567ba6264c79d0872a3a4e7/bat-pvc-2/igt@xe_create@create-massive-size.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-125540v1/bat-pvc-2/igt@xe_create@create-massive-size.html
    - bat-atsm-2:         [PASS][3] -> [ABORT][4]
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-444-4354e27efb78582ee567ba6264c79d0872a3a4e7/bat-atsm-2/igt@xe_create@create-massive-size.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-125540v1/bat-atsm-2/igt@xe_create@create-massive-size.html

  
#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * {igt@xe_create@create-execqueues-leak}:
    - bat-adlp-7:         [PASS][5] -> [ABORT][6]
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-444-4354e27efb78582ee567ba6264c79d0872a3a4e7/bat-adlp-7/igt@xe_create@create-execqueues-leak.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-125540v1/bat-adlp-7/igt@xe_create@create-execqueues-leak.html
    - bat-dg2-oem2:       [PASS][7] -> [ABORT][8]
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-444-4354e27efb78582ee567ba6264c79d0872a3a4e7/bat-dg2-oem2/igt@xe_create@create-execqueues-leak.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-125540v1/bat-dg2-oem2/igt@xe_create@create-execqueues-leak.html

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

  Here are the changes found in xe-pw-125540v1_BAT that come from known issues:

### IGT changes ###

  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [Intel XE#524]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/524


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

  * Linux: xe-444-4354e27efb78582ee567ba6264c79d0872a3a4e7 -> xe-pw-125540v1

  IGT_7552: 557856802dfee103802f1157f97c65bb476d5468 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-444-4354e27efb78582ee567ba6264c79d0872a3a4e7: 4354e27efb78582ee567ba6264c79d0872a3a4e7
  xe-pw-125540v1: 125540v1

== Logs ==

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

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

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

* Re: [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code
  2023-10-25  4:05 [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code Matthew Brost
                   ` (6 preceding siblings ...)
  2023-10-25  4:47 ` [Intel-xe] ✗ CI.BAT: failure " Patchwork
@ 2023-10-25 13:56 ` Lucas De Marchi
  2023-10-25 17:07   ` Matthew Brost
  7 siblings, 1 reply; 13+ messages in thread
From: Lucas De Marchi @ 2023-10-25 13:56 UTC (permalink / raw)
  To: Matthew Brost; +Cc: intel-xe

On Tue, Oct 24, 2023 at 09:05:20PM -0700, Matthew Brost wrote:
>The largest change is the message interface has been removed from the
>DRM scheduler. Xe still needs a message interface so it is implemented
>in the Xe driver by adding a Xe scheduler layer.

can you point to the commits upstream? What commits in our branch it
replaces so we know what to drop when drm-xe-next is rebase... ?
How was this diff generated ?

Lucas De Marchi

>
>Signed-off-by: Matthew Brost <matthew.brost@intel.com>
>---
> drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c  |   8 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c   |   3 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_job.c      |   2 +-
> drivers/gpu/drm/etnaviv/etnaviv_sched.c      |   6 +-
> drivers/gpu/drm/lima/lima_sched.c            |   6 +-
> drivers/gpu/drm/msm/adreno/adreno_device.c   |   4 +-
> drivers/gpu/drm/msm/msm_ringbuffer.c         |   5 +-
> drivers/gpu/drm/nouveau/nouveau_sched.c      |   6 +-
> drivers/gpu/drm/panfrost/panfrost_job.c      |   6 +-
> drivers/gpu/drm/scheduler/sched_entity.c     |  97 +---
> drivers/gpu/drm/scheduler/sched_fence.c      |   2 +-
> drivers/gpu/drm/scheduler/sched_main.c       | 556 +++++++++----------
> drivers/gpu/drm/v3d/v3d_sched.c              |  27 +-
> drivers/gpu/drm/xe/Makefile                  |   1 +
> drivers/gpu/drm/xe/xe_exec_queue_types.h     |   3 +
> drivers/gpu/drm/xe/xe_execlist.c             |   5 +-
> drivers/gpu/drm/xe/xe_gpu_scheduler.c        | 101 ++++
> drivers/gpu/drm/xe/xe_gpu_scheduler.h        |  73 +++
> drivers/gpu/drm/xe/xe_gpu_scheduler_types.h  |  58 ++
> drivers/gpu/drm/xe/xe_guc_exec_queue_types.h |   8 +-
> drivers/gpu/drm/xe/xe_guc_submit.c           | 148 +++--
> drivers/gpu/drm/xe/xe_migrate.c              |   2 +-
> drivers/gpu/drm/xe/xe_trace.h                |  13 +-
> include/drm/gpu_scheduler.h                  |  89 +--
> 24 files changed, 688 insertions(+), 541 deletions(-)
> create mode 100644 drivers/gpu/drm/xe/xe_gpu_scheduler.c
> create mode 100644 drivers/gpu/drm/xe/xe_gpu_scheduler.h
> create mode 100644 drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
>
>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
>index 78623eaeb90d..411187e7aef6 100644
>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
>@@ -1661,7 +1661,7 @@ static int amdgpu_debugfs_test_ib_show(struct seq_file *m, void *unused)
>
> 		if (!ring || !ring->sched.ready)
> 			continue;
>-		drm_sched_run_wq_stop(&ring->sched);
>+		drm_sched_wqueue_stop(&ring->sched);
> 	}
>
> 	seq_puts(m, "run ib test:\n");
>@@ -1677,7 +1677,7 @@ static int amdgpu_debugfs_test_ib_show(struct seq_file *m, void *unused)
>
> 		if (!ring || !ring->sched.ready)
> 			continue;
>-		drm_sched_run_wq_start(&ring->sched);
>+		drm_sched_wqueue_start(&ring->sched);
> 	}
>
> 	up_write(&adev->reset_domain->sem);
>@@ -1915,7 +1915,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
> 		goto pro_end;
>
> 	/* stop the scheduler */
>-	drm_sched_run_wq_stop(&ring->sched);
>+	drm_sched_wqueue_stop(&ring->sched);
>
> 	/* preempt the IB */
> 	r = amdgpu_ring_preempt_ib(ring);
>@@ -1949,7 +1949,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
>
> failure:
> 	/* restart the scheduler */
>-	drm_sched_run_wq_start(&ring->sched);
>+	drm_sched_wqueue_start(&ring->sched);
>
> 	up_read(&adev->reset_domain->sem);
>
>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>index 501a7f71bcb6..950dc8e498f2 100644
>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>@@ -2279,11 +2279,10 @@ static int amdgpu_device_init_schedulers(struct amdgpu_device *adev)
> 			break;
> 		}
>
>-		r = drm_sched_init(&ring->sched, &amdgpu_sched_ops, NULL,
>+		r = drm_sched_init(&ring->sched, &amdgpu_sched_ops, 1, NULL,
> 				   ring->num_hw_submission, 0,
> 				   timeout, adev->reset_domain->wq,
> 				   ring->sched_score, ring->name,
>-				   DRM_SCHED_POLICY_DEFAULT,
> 				   adev->dev);
> 		if (r) {
> 			DRM_ERROR("Failed to create scheduler on ring %s.\n",
>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>index 78476bc75b4e..b3e199c3fd72 100644
>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>@@ -326,7 +326,7 @@ void amdgpu_job_stop_all_jobs_on_sched(struct drm_gpu_scheduler *sched)
>
> 	/* Signal all jobs not yet scheduled */
> 	for (i = DRM_SCHED_PRIORITY_COUNT - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
>-		struct drm_sched_rq *rq = &sched->sched_rq[i];
>+		struct drm_sched_rq *rq = sched->sched_rq[i];
> 		spin_lock(&rq->lock);
> 		list_for_each_entry(s_entity, &rq->entities, list) {
> 			while ((s_job = to_drm_sched_job(spsc_queue_pop(&s_entity->job_queue)))) {
>diff --git a/drivers/gpu/drm/etnaviv/etnaviv_sched.c b/drivers/gpu/drm/etnaviv/etnaviv_sched.c
>index 3646f995ca94..396334984e4d 100644
>--- a/drivers/gpu/drm/etnaviv/etnaviv_sched.c
>+++ b/drivers/gpu/drm/etnaviv/etnaviv_sched.c
>@@ -134,11 +134,11 @@ int etnaviv_sched_init(struct etnaviv_gpu *gpu)
> {
> 	int ret;
>
>-	ret = drm_sched_init(&gpu->sched, &etnaviv_sched_ops, NULL,
>+	ret = drm_sched_init(&gpu->sched, &etnaviv_sched_ops,
>+			     DRM_SCHED_PRIORITY_COUNT, NULL,
> 			     etnaviv_hw_jobs_limit, etnaviv_job_hang_limit,
> 			     msecs_to_jiffies(500), NULL, NULL,
>-			     dev_name(gpu->dev), DRM_SCHED_POLICY_DEFAULT,
>-			     gpu->dev);
>+			     dev_name(gpu->dev), gpu->dev);
> 	if (ret)
> 		return ret;
>
>diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_sched.c
>index 465d4bf3882b..23a6276f1332 100644
>--- a/drivers/gpu/drm/lima/lima_sched.c
>+++ b/drivers/gpu/drm/lima/lima_sched.c
>@@ -488,11 +488,11 @@ int lima_sched_pipe_init(struct lima_sched_pipe *pipe, const char *name)
>
> 	INIT_WORK(&pipe->recover_work, lima_sched_recover_work);
>
>-	return drm_sched_init(&pipe->base, &lima_sched_ops, NULL, 1,
>+	return drm_sched_init(&pipe->base, &lima_sched_ops,
>+			      DRM_SCHED_PRIORITY_COUNT, NULL, 1,
> 			      lima_job_hang_limit,
> 			      msecs_to_jiffies(timeout), NULL,
>-			      NULL, name, DRM_SCHED_POLICY_DEFAULT,
>-			      pipe->ldev->dev);
>+			      NULL, name, pipe->ldev->dev);
> }
>
> void lima_sched_pipe_fini(struct lima_sched_pipe *pipe)
>diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c
>index 3891b629248c..223b5af1f93b 100644
>--- a/drivers/gpu/drm/msm/adreno/adreno_device.c
>+++ b/drivers/gpu/drm/msm/adreno/adreno_device.c
>@@ -809,7 +809,7 @@ static void suspend_scheduler(struct msm_gpu *gpu)
> 	 */
> 	for (i = 0; i < gpu->nr_rings; i++) {
> 		struct drm_gpu_scheduler *sched = &gpu->rb[i]->sched;
>-		drm_sched_run_wq_stop(sched);
>+		drm_sched_wqueue_stop(sched);
> 	}
> }
>
>@@ -819,7 +819,7 @@ static void resume_scheduler(struct msm_gpu *gpu)
>
> 	for (i = 0; i < gpu->nr_rings; i++) {
> 		struct drm_gpu_scheduler *sched = &gpu->rb[i]->sched;
>-		drm_sched_run_wq_start(sched);
>+		drm_sched_wqueue_start(sched);
> 	}
> }
>
>diff --git a/drivers/gpu/drm/msm/msm_ringbuffer.c b/drivers/gpu/drm/msm/msm_ringbuffer.c
>index 813bff7f0c8f..935154979fc2 100644
>--- a/drivers/gpu/drm/msm/msm_ringbuffer.c
>+++ b/drivers/gpu/drm/msm/msm_ringbuffer.c
>@@ -94,10 +94,11 @@ struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int id,
> 	 /* currently managing hangcheck ourselves: */
> 	sched_timeout = MAX_SCHEDULE_TIMEOUT;
>
>-	ret = drm_sched_init(&ring->sched, &msm_sched_ops, NULL,
>+	ret = drm_sched_init(&ring->sched, &msm_sched_ops,
>+			     DRM_SCHED_PRIORITY_COUNT, NULL,
> 			     num_hw_submissions, 0, sched_timeout,
> 			     NULL, NULL, to_msm_bo(ring->bo)->name,
>-			     DRM_SCHED_POLICY_DEFAULT, gpu->dev->dev);
>+			     gpu->dev->dev);
> 	if (ret) {
> 		goto fail;
> 	}
>diff --git a/drivers/gpu/drm/nouveau/nouveau_sched.c b/drivers/gpu/drm/nouveau/nouveau_sched.c
>index 3cb0033dccf9..82104380d243 100644
>--- a/drivers/gpu/drm/nouveau/nouveau_sched.c
>+++ b/drivers/gpu/drm/nouveau/nouveau_sched.c
>@@ -435,10 +435,10 @@ int nouveau_sched_init(struct nouveau_drm *drm)
> 	if (!drm->sched_wq)
> 		return -ENOMEM;
>
>-	return drm_sched_init(sched, &nouveau_sched_ops, NULL,
>+	return drm_sched_init(sched, &nouveau_sched_ops,
>+			      DRM_SCHED_PRIORITY_COUNT, NULL,
> 			      NOUVEAU_SCHED_HW_SUBMISSIONS, 0, job_hang_limit,
>-			      NULL, NULL, "nouveau_sched",
>-			      DRM_SCHED_POLICY_DEFAULT, drm->dev->dev);
>+			      NULL, NULL, "nouveau_sched", drm->dev->dev);
> }
>
> void nouveau_sched_fini(struct nouveau_drm *drm)
>diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c
>index ad36bf3a4699..e33d4398da8e 100644
>--- a/drivers/gpu/drm/panfrost/panfrost_job.c
>+++ b/drivers/gpu/drm/panfrost/panfrost_job.c
>@@ -831,12 +831,12 @@ int panfrost_job_init(struct panfrost_device *pfdev)
> 		js->queue[j].fence_context = dma_fence_context_alloc(1);
>
> 		ret = drm_sched_init(&js->queue[j].sched,
>-				     &panfrost_sched_ops, NULL,
>+				     &panfrost_sched_ops,
>+				     DRM_SCHED_PRIORITY_COUNT, NULL,
> 				     nentries, 0,
> 				     msecs_to_jiffies(JOB_TIMEOUT_MS),
> 				     pfdev->reset.wq,
>-				     NULL, "pan_js", DRM_SCHED_POLICY_DEFAULT,
>-				     pfdev->dev);
>+				     NULL, "pan_js", pfdev->dev);
> 		if (ret) {
> 			dev_err(pfdev->dev, "Failed to create scheduler: %d.", ret);
> 			goto err_sched;
>diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
>index 1dec97caaba3..409e4256f6e7 100644
>--- a/drivers/gpu/drm/scheduler/sched_entity.c
>+++ b/drivers/gpu/drm/scheduler/sched_entity.c
>@@ -33,20 +33,6 @@
> #define to_drm_sched_job(sched_job)		\
> 		container_of((sched_job), struct drm_sched_job, queue_node)
>
>-static bool bad_policies(struct drm_gpu_scheduler **sched_list,
>-			 unsigned int num_sched_list)
>-{
>-	enum drm_sched_policy sched_policy = sched_list[0]->sched_policy;
>-	unsigned int i;
>-
>-	/* All schedule policies must match */
>-	for (i = 1; i < num_sched_list; ++i)
>-		if (sched_policy != sched_list[i]->sched_policy)
>-			return true;
>-
>-	return false;
>-}
>-
> /**
>  * drm_sched_entity_init - Init a context entity used by scheduler when
>  * submit to HW ring.
>@@ -76,14 +62,12 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
> 			  unsigned int num_sched_list,
> 			  atomic_t *guilty)
> {
>-	if (!(entity && sched_list && (num_sched_list == 0 || sched_list[0])) ||
>-	    bad_policies(sched_list, num_sched_list))
>+	if (!(entity && sched_list && (num_sched_list == 0 || sched_list[0])))
> 		return -EINVAL;
>
> 	memset(entity, 0, sizeof(struct drm_sched_entity));
> 	INIT_LIST_HEAD(&entity->list);
> 	entity->rq = NULL;
>-	entity->single_sched = NULL;
> 	entity->guilty = guilty;
> 	entity->num_sched_list = num_sched_list;
> 	entity->priority = priority;
>@@ -91,16 +75,19 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
> 	RCU_INIT_POINTER(entity->last_scheduled, NULL);
> 	RB_CLEAR_NODE(&entity->rb_tree_node);
>
>-	if (num_sched_list) {
>-		if (sched_list[0]->sched_policy !=
>-		    DRM_SCHED_POLICY_SINGLE_ENTITY) {
>-			entity->rq = &sched_list[0]->sched_rq[entity->priority];
>-		} else {
>-			if (num_sched_list != 1 || sched_list[0]->single_entity)
>-				return -EINVAL;
>-			sched_list[0]->single_entity = entity;
>-			entity->single_sched = sched_list[0];
>-		}
>+	if (!sched_list[0]->sched_rq) {
>+		/* Warn drivers not to do this and to fix their DRM
>+		 * calling order.
>+		 */
>+		pr_warn("%s: called with uninitialized scheduler\n", __func__);
>+	} else if (num_sched_list) {
>+		/* The "priority" of an entity cannot exceed the number
>+		 * of run-queues of a scheduler.
>+		 */
>+		if (entity->priority >= sched_list[0]->num_rqs)
>+			entity->priority = max_t(u32, sched_list[0]->num_rqs,
>+						 DRM_SCHED_PRIORITY_MIN);
>+		entity->rq = sched_list[0]->sched_rq[entity->priority];
> 	}
>
> 	init_completion(&entity->entity_idle);
>@@ -134,8 +121,7 @@ void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
> 				    struct drm_gpu_scheduler **sched_list,
> 				    unsigned int num_sched_list)
> {
>-	WARN_ON(!num_sched_list || !sched_list ||
>-		!!entity->single_sched);
>+	WARN_ON(!num_sched_list || !sched_list);
>
> 	entity->sched_list = sched_list;
> 	entity->num_sched_list = num_sched_list;
>@@ -242,15 +228,13 @@ static void drm_sched_entity_kill(struct drm_sched_entity *entity)
> {
> 	struct drm_sched_job *job;
> 	struct dma_fence *prev;
>-	bool single_entity = !!entity->single_sched;
>
>-	if (!entity->rq && !single_entity)
>+	if (!entity->rq)
> 		return;
>
> 	spin_lock(&entity->rq_lock);
> 	entity->stopped = true;
>-	if (!single_entity)
>-		drm_sched_rq_remove_entity(entity->rq, entity);
>+	drm_sched_rq_remove_entity(entity->rq, entity);
> 	spin_unlock(&entity->rq_lock);
>
> 	/* Make sure this entity is not used by the scheduler at the moment */
>@@ -272,20 +256,6 @@ static void drm_sched_entity_kill(struct drm_sched_entity *entity)
> 	dma_fence_put(prev);
> }
>
>-/**
>- * drm_sched_entity_to_scheduler - Schedule entity to GPU scheduler
>- * @entity: scheduler entity
>- *
>- * Returns GPU scheduler for the entity
>- */
>-struct drm_gpu_scheduler *
>-drm_sched_entity_to_scheduler(struct drm_sched_entity *entity)
>-{
>-	bool single_entity = !!entity->single_sched;
>-
>-	return single_entity ? entity->single_sched : entity->rq->sched;
>-}
>-
> /**
>  * drm_sched_entity_flush - Flush a context entity
>  *
>@@ -303,12 +273,11 @@ long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout)
> 	struct drm_gpu_scheduler *sched;
> 	struct task_struct *last_user;
> 	long ret = timeout;
>-	bool single_entity = !!entity->single_sched;
>
>-	if (!entity->rq && !single_entity)
>+	if (!entity->rq)
> 		return 0;
>
>-	sched = drm_sched_entity_to_scheduler(entity);
>+	sched = entity->rq->sched;
> 	/**
> 	 * The client will not queue more IBs during this fini, consume existing
> 	 * queued IBs or discard them on SIGKILL
>@@ -401,7 +370,7 @@ static void drm_sched_entity_wakeup(struct dma_fence *f,
> 		container_of(cb, struct drm_sched_entity, cb);
>
> 	drm_sched_entity_clear_dep(f, cb);
>-	drm_sched_wakeup_if_can_queue(drm_sched_entity_to_scheduler(entity));
>+	drm_sched_wakeup_if_can_queue(entity->rq->sched);
> }
>
> /**
>@@ -415,8 +384,6 @@ static void drm_sched_entity_wakeup(struct dma_fence *f,
> void drm_sched_entity_set_priority(struct drm_sched_entity *entity,
> 				   enum drm_sched_priority priority)
> {
>-	WARN_ON(!!entity->single_sched);
>-
> 	spin_lock(&entity->rq_lock);
> 	entity->priority = priority;
> 	spin_unlock(&entity->rq_lock);
>@@ -429,7 +396,7 @@ EXPORT_SYMBOL(drm_sched_entity_set_priority);
>  */
> static bool drm_sched_entity_add_dependency_cb(struct drm_sched_entity *entity)
> {
>-	struct drm_gpu_scheduler *sched = drm_sched_entity_to_scheduler(entity);
>+	struct drm_gpu_scheduler *sched = entity->rq->sched;
> 	struct dma_fence *fence = entity->dependency;
> 	struct drm_sched_fence *s_fence;
>
>@@ -531,8 +498,7 @@ struct drm_sched_job *drm_sched_entity_pop_job(struct drm_sched_entity *entity)
> 	 * Update the entity's location in the min heap according to
> 	 * the timestamp of the next job, if any.
> 	 */
>-	if (drm_sched_entity_to_scheduler(entity)->sched_policy ==
>-	    DRM_SCHED_POLICY_FIFO) {
>+	if (drm_sched_policy == DRM_SCHED_POLICY_FIFO) {
> 		struct drm_sched_job *next;
>
> 		next = to_drm_sched_job(spsc_queue_peek(&entity->job_queue));
>@@ -555,8 +521,6 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
> 	struct drm_gpu_scheduler *sched;
> 	struct drm_sched_rq *rq;
>
>-	WARN_ON(!!entity->single_sched);
>-
> 	/* single possible engine and already selected */
> 	if (!entity->sched_list)
> 		return;
>@@ -581,7 +545,7 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
>
> 	spin_lock(&entity->rq_lock);
> 	sched = drm_sched_pick_best(entity->sched_list, entity->num_sched_list);
>-	rq = sched ? &sched->sched_rq[entity->priority] : NULL;
>+	rq = sched ? sched->sched_rq[entity->priority] : NULL;
> 	if (rq != entity->rq) {
> 		drm_sched_rq_remove_entity(entity->rq, entity);
> 		entity->rq = rq;
>@@ -606,13 +570,11 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
> void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
> {
> 	struct drm_sched_entity *entity = sched_job->entity;
>-	bool single_entity = !!entity->single_sched;
> 	bool first;
> 	ktime_t submit_ts;
>
> 	trace_drm_sched_job(sched_job, entity);
>-	if (!single_entity)
>-		atomic_inc(entity->rq->sched->score);
>+	atomic_inc(entity->rq->sched->score);
> 	WRITE_ONCE(entity->last_user, current->group_leader);
>
> 	/*
>@@ -625,10 +587,6 @@ void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
>
> 	/* first job wakes up scheduler */
> 	if (first) {
>-		struct drm_gpu_scheduler *sched =
>-			drm_sched_entity_to_scheduler(entity);
>-		bool fifo = sched->sched_policy == DRM_SCHED_POLICY_FIFO;
>-
> 		/* Add the entity to the run queue */
> 		spin_lock(&entity->rq_lock);
> 		if (entity->stopped) {
>@@ -638,14 +596,13 @@ void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
> 			return;
> 		}
>
>-		if (!single_entity)
>-			drm_sched_rq_add_entity(entity->rq, entity);
>+		drm_sched_rq_add_entity(entity->rq, entity);
> 		spin_unlock(&entity->rq_lock);
>
>-		if (fifo)
>+		if (drm_sched_policy == DRM_SCHED_POLICY_FIFO)
> 			drm_sched_rq_update_fifo(entity, submit_ts);
>
>-		drm_sched_wakeup_if_can_queue(sched);
>+		drm_sched_wakeup_if_can_queue(entity->rq->sched);
> 	}
> }
> EXPORT_SYMBOL(drm_sched_entity_push_job);
>diff --git a/drivers/gpu/drm/scheduler/sched_fence.c b/drivers/gpu/drm/scheduler/sched_fence.c
>index f6b926f5e188..06cedfe4b486 100644
>--- a/drivers/gpu/drm/scheduler/sched_fence.c
>+++ b/drivers/gpu/drm/scheduler/sched_fence.c
>@@ -225,7 +225,7 @@ void drm_sched_fence_init(struct drm_sched_fence *fence,
> {
> 	unsigned seq;
>
>-	fence->sched = drm_sched_entity_to_scheduler(entity);
>+	fence->sched = entity->rq->sched;
> 	seq = atomic_inc_return(&entity->fence_seq);
> 	dma_fence_init(&fence->scheduled, &drm_sched_fence_ops_scheduled,
> 		       &fence->lock, entity->fence_context, seq);
>diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
>index 0626aa6f7b70..ebea02526a7a 100644
>--- a/drivers/gpu/drm/scheduler/sched_main.c
>+++ b/drivers/gpu/drm/scheduler/sched_main.c
>@@ -32,8 +32,7 @@
>  * backend operations to the scheduler like submitting a job to hardware run queue,
>  * returning the dependencies of a job etc.
>  *
>- * The organisation of the scheduler is the following for scheduling policies
>- * DRM_SCHED_POLICY_RR and DRM_SCHED_POLICY_FIFO:
>+ * The organisation of the scheduler is the following:
>  *
>  * 1. Each hw run queue has one scheduler
>  * 2. Each scheduler has multiple run queues with different priorities
>@@ -42,22 +41,7 @@
>  * 4. Entities themselves maintain a queue of jobs that will be scheduled on
>  *    the hardware.
>  *
>- * The organisation of the scheduler is the following for scheduling policy
>- * DRM_SCHED_POLICY_SINGLE_ENTITY:
>- *
>- * 1. One to one relationship between scheduler and entity
>- * 2. No priorities implemented per scheduler (single job queue)
>- * 3. No run queues in scheduler rather jobs are directly dequeued from entity
>- * 4. The entity maintains a queue of jobs that will be scheduled on the
>- * hardware
>- *
>- * The jobs in a entity are always scheduled in the order that they were pushed
>- * regardless of scheduling policy.
>- *
>- * A policy of DRM_SCHED_POLICY_RR or DRM_SCHED_POLICY_FIFO is expected to used
>- * when the KMD is scheduling directly on the hardware while a scheduling policy
>- * of DRM_SCHED_POLICY_SINGLE_ENTITY is expected to be used when there is a
>- * firmware scheduler.
>+ * The jobs in a entity are always scheduled in the order that they were pushed.
>  *
>  * Note that once a job was taken from the entities queue and pushed to the
>  * hardware, i.e. the pending queue, the entity must not be referenced anymore
>@@ -82,14 +66,14 @@
> #define to_drm_sched_job(sched_job)		\
> 		container_of((sched_job), struct drm_sched_job, queue_node)
>
>-int default_drm_sched_policy = DRM_SCHED_POLICY_FIFO;
>+int drm_sched_policy = DRM_SCHED_POLICY_FIFO;
>
> /**
>  * DOC: sched_policy (int)
>  * Used to override default entities scheduling policy in a run queue.
>  */
>-MODULE_PARM_DESC(sched_policy, "Specify the default scheduling policy for entities on a run-queue, " __stringify(DRM_SCHED_POLICY_RR) " = Round Robin, " __stringify(DRM_SCHED_POLICY_FIFO) " = FIFO (default).");
>-module_param_named(sched_policy, default_drm_sched_policy, int, 0444);
>+MODULE_PARM_DESC(sched_policy, "Specify the scheduling policy for entities on a run-queue, " __stringify(DRM_SCHED_POLICY_RR) " = Round Robin, " __stringify(DRM_SCHED_POLICY_FIFO) " = FIFO (default).");
>+module_param_named(sched_policy, drm_sched_policy, int, 0444);
>
> static __always_inline bool drm_sched_entity_compare_before(struct rb_node *a,
> 							    const struct rb_node *b)
>@@ -112,8 +96,6 @@ static inline void drm_sched_rq_remove_fifo_locked(struct drm_sched_entity *enti
>
> void drm_sched_rq_update_fifo(struct drm_sched_entity *entity, ktime_t ts)
> {
>-	WARN_ON(!!entity->single_sched);
>-
> 	/*
> 	 * Both locks need to be grabbed, one to protect from entity->rq change
> 	 * for entity from within concurrent drm_sched_entity_select_rq and the
>@@ -144,8 +126,6 @@ void drm_sched_rq_update_fifo(struct drm_sched_entity *entity, ktime_t ts)
> static void drm_sched_rq_init(struct drm_gpu_scheduler *sched,
> 			      struct drm_sched_rq *rq)
> {
>-	WARN_ON(sched->sched_policy == DRM_SCHED_POLICY_SINGLE_ENTITY);
>-
> 	spin_lock_init(&rq->lock);
> 	INIT_LIST_HEAD(&rq->entities);
> 	rq->rb_tree_root = RB_ROOT_CACHED;
>@@ -164,8 +144,6 @@ static void drm_sched_rq_init(struct drm_gpu_scheduler *sched,
> void drm_sched_rq_add_entity(struct drm_sched_rq *rq,
> 			     struct drm_sched_entity *entity)
> {
>-	WARN_ON(!!entity->single_sched);
>-
> 	if (!list_empty(&entity->list))
> 		return;
>
>@@ -188,8 +166,6 @@ void drm_sched_rq_add_entity(struct drm_sched_rq *rq,
> void drm_sched_rq_remove_entity(struct drm_sched_rq *rq,
> 				struct drm_sched_entity *entity)
> {
>-	WARN_ON(!!entity->single_sched);
>-
> 	if (list_empty(&entity->list))
> 		return;
>
>@@ -201,7 +177,7 @@ void drm_sched_rq_remove_entity(struct drm_sched_rq *rq,
> 	if (rq->current_entity == entity)
> 		rq->current_entity = NULL;
>
>-	if (rq->sched->sched_policy == DRM_SCHED_POLICY_FIFO)
>+	if (drm_sched_policy == DRM_SCHED_POLICY_FIFO)
> 		drm_sched_rq_remove_fifo_locked(entity);
>
> 	spin_unlock(&rq->lock);
>@@ -280,50 +256,90 @@ drm_sched_rq_select_entity_fifo(struct drm_sched_rq *rq)
> }
>
> /**
>- * drm_sched_run_wq_stop - stop scheduler run worker
>- *
>- * @sched: scheduler instance to stop run worker
>+ * drm_sched_run_job_queue - enqueue scheduler submission
>+ * drm_sched_run_job_queue - enqueue run-job work
>+ * @sched: scheduler instance
>  */
>-void drm_sched_run_wq_stop(struct drm_gpu_scheduler *sched)
>+static void drm_sched_run_job_queue(struct drm_gpu_scheduler *sched)
> {
>-	sched->pause_run_wq = true;
>-	smp_wmb();
>+	if (!READ_ONCE(sched->pause_submit))
>+		queue_work(sched->submit_wq, &sched->work_run_job);
>+}
>
>-	cancel_work_sync(&sched->work_run);
>+/**
>+ * drm_sched_can_queue -- Can we queue more to the hardware?
>+ * @sched: scheduler instance
>+ *
>+ * Return true if we can push more jobs to the hw, otherwise false.
>+ */
>+static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched)
>+{
>+	return atomic_read(&sched->hw_rq_count) <
>+		sched->hw_submission_limit;
> }
>-EXPORT_SYMBOL(drm_sched_run_wq_stop);
>
> /**
>- * drm_sched_run_wq_start - start scheduler run worker
>+ * drm_sched_select_entity - Select next entity to process
>  *
>- * @sched: scheduler instance to start run worker
>+ * @sched: scheduler instance
>+ *
>+ * Returns the entity to process or NULL if none are found.
>  */
>-void drm_sched_run_wq_start(struct drm_gpu_scheduler *sched)
>+static struct drm_sched_entity *
>+drm_sched_select_entity(struct drm_gpu_scheduler *sched)
> {
>-	sched->pause_run_wq = false;
>-	smp_wmb();
>+	struct drm_sched_entity *entity;
>+	int i;
>+
>+	if (!drm_sched_can_queue(sched))
>+		return NULL;
>
>-	queue_work(sched->run_wq, &sched->work_run);
>+	/* Kernel run queue has higher priority than normal run queue*/
>+	for (i = sched->num_rqs - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
>+		entity = drm_sched_policy == DRM_SCHED_POLICY_FIFO ?
>+			drm_sched_rq_select_entity_fifo(sched->sched_rq[i]) :
>+			drm_sched_rq_select_entity_rr(sched->sched_rq[i]);
>+		if (entity)
>+			break;
>+	}
>+
>+	return entity;
> }
>-EXPORT_SYMBOL(drm_sched_run_wq_start);
>
> /**
>- * drm_sched_run_wq_queue - queue scheduler run worker
>- *
>- * @sched: scheduler instance to queue run worker
>+ * drm_sched_run_job_queue_if_ready - enqueue run-job work if ready
>+ * @sched: scheduler instance
>+ */
>+static void drm_sched_run_job_queue_if_ready(struct drm_gpu_scheduler *sched)
>+{
>+	if (drm_sched_select_entity(sched))
>+		drm_sched_run_job_queue(sched);
>+}
>+
>+/**
>+ * drm_sched_free_job_queue - enqueue free-job work
>+ * @sched: scheduler instance
>  */
>-static void drm_sched_run_wq_queue(struct drm_gpu_scheduler *sched)
>+static void drm_sched_free_job_queue(struct drm_gpu_scheduler *sched)
> {
>-	smp_rmb();
>+	if (!READ_ONCE(sched->pause_submit))
>+		queue_work(sched->submit_wq, &sched->work_free_job);
>+}
>
>-	/*
>-	 * Try not to schedule work if pause_run_wq set but not the end of world
>-	 * if we do as either it will be cancelled by the above
>-	 * cancel_work_sync, or drm_sched_main turns into a NOP while
>-	 * pause_run_wq is set.
>-	 */
>-	if (!sched->pause_run_wq)
>-		queue_work(sched->run_wq, &sched->work_run);
>+/**
>+ * drm_sched_free_job_queue_if_done - enqueue free-job work if ready
>+ * @sched: scheduler instance
>+ */
>+static void drm_sched_free_job_queue_if_done(struct drm_gpu_scheduler *sched)
>+{
>+	struct drm_sched_job *job;
>+
>+	spin_lock(&sched->job_list_lock);
>+	job = list_first_entry_or_null(&sched->pending_list,
>+				       struct drm_sched_job, list);
>+	if (job && dma_fence_is_signaled(&job->s_fence->finished))
>+		drm_sched_free_job_queue(sched);
>+	spin_unlock(&sched->job_list_lock);
> }
>
> /**
>@@ -345,7 +361,7 @@ static void drm_sched_job_done(struct drm_sched_job *s_job, int result)
> 	dma_fence_get(&s_fence->finished);
> 	drm_sched_fence_finished(s_fence, result);
> 	dma_fence_put(&s_fence->finished);
>-	drm_sched_run_wq_queue(sched);
>+	drm_sched_free_job_queue(sched);
> }
>
> /**
>@@ -369,28 +385,35 @@ static void drm_sched_job_done_cb(struct dma_fence *f, struct dma_fence_cb *cb)
>  */
> static void drm_sched_start_timeout(struct drm_gpu_scheduler *sched)
> {
>+	lockdep_assert_held(&sched->job_list_lock);
>+
> 	if (sched->timeout != MAX_SCHEDULE_TIMEOUT &&
> 	    !list_empty(&sched->pending_list))
>-		queue_delayed_work(sched->timeout_wq, &sched->work_tdr, sched->timeout);
>+		mod_delayed_work(sched->timeout_wq, &sched->work_tdr, sched->timeout);
>+}
>+
>+static void drm_sched_start_timeout_unlocked(struct drm_gpu_scheduler *sched)
>+{
>+	spin_lock(&sched->job_list_lock);
>+	drm_sched_start_timeout(sched);
>+	spin_unlock(&sched->job_list_lock);
> }
>
> /**
>- * drm_sched_set_timeout - set timeout for reset worker
>+ * drm_sched_tdr_queue_imm: - immediately start job timeout handler
>  *
>- * @sched: scheduler instance to set and (re)-start the worker for
>- * @timeout: timeout period
>+ * @sched: scheduler for which the timeout handling should be started.
>  *
>- * Set and (re)-start the timeout for the given scheduler.
>+ * Start timeout handling immediately for the named scheduler.
>  */
>-void drm_sched_set_timeout(struct drm_gpu_scheduler *sched, long timeout)
>+void drm_sched_tdr_queue_imm(struct drm_gpu_scheduler *sched)
> {
> 	spin_lock(&sched->job_list_lock);
>-	sched->timeout = timeout;
>-	cancel_delayed_work(&sched->work_tdr);
>+	sched->timeout = 0;
> 	drm_sched_start_timeout(sched);
> 	spin_unlock(&sched->job_list_lock);
> }
>-EXPORT_SYMBOL(drm_sched_set_timeout);
>+EXPORT_SYMBOL(drm_sched_tdr_queue_imm);
>
> /**
>  * drm_sched_fault - immediately start timeout handler
>@@ -504,11 +527,8 @@ static void drm_sched_job_timedout(struct work_struct *work)
> 		spin_unlock(&sched->job_list_lock);
> 	}
>
>-	if (status != DRM_GPU_SCHED_STAT_ENODEV) {
>-		spin_lock(&sched->job_list_lock);
>-		drm_sched_start_timeout(sched);
>-		spin_unlock(&sched->job_list_lock);
>-	}
>+	if (status != DRM_GPU_SCHED_STAT_ENODEV)
>+		drm_sched_start_timeout_unlocked(sched);
> }
>
> /**
>@@ -527,7 +547,7 @@ void drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad)
> {
> 	struct drm_sched_job *s_job, *tmp;
>
>-	drm_sched_run_wq_stop(sched);
>+	drm_sched_wqueue_stop(sched);
>
> 	/*
> 	 * Reinsert back the bad job here - now it's safe as
>@@ -629,18 +649,15 @@ void drm_sched_start(struct drm_gpu_scheduler *sched, bool full_recovery)
> 				drm_sched_job_done(s_job, fence->error);
> 			else if (r)
> 				DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n",
>-					  r);
>+					      r);
> 		} else
> 			drm_sched_job_done(s_job, -ECANCELED);
> 	}
>
>-	drm_sched_run_wq_start(sched);
>+	if (full_recovery)
>+		drm_sched_start_timeout_unlocked(sched);
>
>-	if (full_recovery) {
>-		spin_lock(&sched->job_list_lock);
>-		drm_sched_start_timeout(sched);
>-		spin_unlock(&sched->job_list_lock);
>-	}
>+	drm_sched_wqueue_start(sched);
> }
> EXPORT_SYMBOL(drm_sched_start);
>
>@@ -720,8 +737,14 @@ int drm_sched_job_init(struct drm_sched_job *job,
> 		       struct drm_sched_entity *entity,
> 		       void *owner)
> {
>-	if (!entity->rq && !entity->single_sched)
>+	if (!entity->rq) {
>+		/* This will most likely be followed by missing frames
>+		 * or worse--a blank screen--leave a trail in the
>+		 * logs, so this can be debugged easier.
>+		 */
>+		drm_err(job->sched, "%s: entity has no rq!\n", __func__);
> 		return -ENOENT;
>+	}
>
> 	job->entity = entity;
> 	job->s_fence = drm_sched_fence_alloc(entity, owner);
>@@ -753,16 +776,13 @@ void drm_sched_job_arm(struct drm_sched_job *job)
> {
> 	struct drm_gpu_scheduler *sched;
> 	struct drm_sched_entity *entity = job->entity;
>-	bool single_entity = !!entity->single_sched;
>
> 	BUG_ON(!entity);
>-	if (!single_entity)
>-		drm_sched_entity_select_rq(entity);
>-	sched = drm_sched_entity_to_scheduler(entity);
>+	drm_sched_entity_select_rq(entity);
>+	sched = entity->rq->sched;
>
> 	job->sched = sched;
>-	if (!single_entity)
>-		job->s_priority = entity->rq - sched->sched_rq;
>+	job->s_priority = entity->priority;
> 	job->id = atomic64_inc_return(&sched->job_id_count);
>
> 	drm_sched_fence_init(job->s_fence, job->entity);
>@@ -790,13 +810,6 @@ int drm_sched_job_add_dependency(struct drm_sched_job *job,
> 	if (!fence)
> 		return 0;
>
>-	/* if it's a fence from us it's guaranteed to be earlier */
>-	if (fence->context == job->entity->fence_context ||
>-	    fence->context == job->entity->fence_context + 1) {
>-		dma_fence_put(fence);
>-		return 0;
>-	}
>-
> 	/* Deduplicate if we already depend on a fence from the same context.
> 	 * This lets the size of the array of deps scale with the number of
> 	 * engines involved, rather than the number of BOs.
>@@ -945,18 +958,6 @@ void drm_sched_job_cleanup(struct drm_sched_job *job)
> }
> EXPORT_SYMBOL(drm_sched_job_cleanup);
>
>-/**
>- * drm_sched_can_queue -- Can we queue more to the hardware?
>- * @sched: scheduler instance
>- *
>- * Return true if we can push more jobs to the hw, otherwise false.
>- */
>-static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched)
>-{
>-	return atomic_read(&sched->hw_rq_count) <
>-		sched->hw_submission_limit;
>-}
>-
> /**
>  * drm_sched_wakeup_if_can_queue - Wake up the scheduler
>  * @sched: scheduler instance
>@@ -966,42 +967,7 @@ static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched)
> void drm_sched_wakeup_if_can_queue(struct drm_gpu_scheduler *sched)
> {
> 	if (drm_sched_can_queue(sched))
>-		drm_sched_run_wq_queue(sched);
>-}
>-
>-/**
>- * drm_sched_select_entity - Select next entity to process
>- *
>- * @sched: scheduler instance
>- *
>- * Returns the entity to process or NULL if none are found.
>- */
>-static struct drm_sched_entity *
>-drm_sched_select_entity(struct drm_gpu_scheduler *sched)
>-{
>-	struct drm_sched_entity *entity;
>-	int i;
>-
>-	if (!drm_sched_can_queue(sched))
>-		return NULL;
>-
>-	if (sched->single_entity) {
>-		if (drm_sched_entity_is_ready(sched->single_entity))
>-			return sched->single_entity;
>-
>-		return NULL;
>-	}
>-
>-	/* Kernel run queue has higher priority than normal run queue*/
>-	for (i = DRM_SCHED_PRIORITY_COUNT - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
>-		entity = sched->sched_policy == DRM_SCHED_POLICY_FIFO ?
>-			drm_sched_rq_select_entity_fifo(&sched->sched_rq[i]) :
>-			drm_sched_rq_select_entity_rr(&sched->sched_rq[i]);
>-		if (entity)
>-			break;
>-	}
>-
>-	return entity;
>+		drm_sched_run_job_queue(sched);
> }
>
> /**
>@@ -1033,8 +999,10 @@ drm_sched_get_cleanup_job(struct drm_gpu_scheduler *sched)
> 						typeof(*next), list);
>
> 		if (next) {
>-			next->s_fence->scheduled.timestamp =
>-				job->s_fence->finished.timestamp;
>+			if (test_bit(DMA_FENCE_FLAG_TIMESTAMP_BIT,
>+				     &next->s_fence->scheduled.flags))
>+				next->s_fence->scheduled.timestamp =
>+					job->s_fence->scheduled.timestamp;
> 			/* start TO timer for next job */
> 			drm_sched_start_timeout(sched);
> 		}
>@@ -1084,125 +1052,83 @@ drm_sched_pick_best(struct drm_gpu_scheduler **sched_list,
> EXPORT_SYMBOL(drm_sched_pick_best);
>
> /**
>- * drm_sched_add_msg - add scheduler message
>+ * drm_sched_free_job_work - worker to call free_job
>  *
>- * @sched: scheduler instance
>- * @msg: message to be added
>- *
>- * Can and will pass an jobs waiting on dependencies or in a runnable queue.
>- * Messages processing will stop if schedule run wq is stopped and resume when
>- * run wq is started.
>+ * @w: free job work
>  */
>-void drm_sched_add_msg(struct drm_gpu_scheduler *sched,
>-		       struct drm_sched_msg *msg)
>+static void drm_sched_free_job_work(struct work_struct *w)
> {
>-	spin_lock(&sched->job_list_lock);
>-	list_add_tail(&msg->link, &sched->msgs);
>-	spin_unlock(&sched->job_list_lock);
>+	struct drm_gpu_scheduler *sched =
>+		container_of(w, struct drm_gpu_scheduler, work_free_job);
>+	struct drm_sched_job *cleanup_job;
>
>-	/*
>-	 * Same as above in drm_sched_run_wq_queue, try to kick worker if
>-	 * paused, harmless if this races
>-	 */
>-	if (!sched->pause_run_wq)
>-		queue_work(sched->run_wq, &sched->work_run);
>-}
>-EXPORT_SYMBOL(drm_sched_add_msg);
>+	if (READ_ONCE(sched->pause_submit))
>+		return;
>
>-/**
>- * drm_sched_get_msg - get scheduler message
>- *
>- * @sched: scheduler instance
>- *
>- * Returns NULL or message
>- */
>-static struct drm_sched_msg *
>-drm_sched_get_msg(struct drm_gpu_scheduler *sched)
>-{
>-	struct drm_sched_msg *msg;
>+	cleanup_job = drm_sched_get_cleanup_job(sched);
>+	if (cleanup_job) {
>+		sched->ops->free_job(cleanup_job);
>
>-	spin_lock(&sched->job_list_lock);
>-	msg = list_first_entry_or_null(&sched->msgs,
>-				       struct drm_sched_msg, link);
>-	if (msg)
>-		list_del(&msg->link);
>-	spin_unlock(&sched->job_list_lock);
>-
>-	return msg;
>+		drm_sched_free_job_queue_if_done(sched);
>+		drm_sched_run_job_queue_if_ready(sched);
>+	}
> }
>
> /**
>- * drm_sched_main - main scheduler thread
>+ * drm_sched_run_job_work - worker to call run_job
>  *
>- * @param: scheduler instance
>+ * @w: run job work
>  */
>-static void drm_sched_main(struct work_struct *w)
>+static void drm_sched_run_job_work(struct work_struct *w)
> {
> 	struct drm_gpu_scheduler *sched =
>-		container_of(w, struct drm_gpu_scheduler, work_run);
>+		container_of(w, struct drm_gpu_scheduler, work_run_job);
>+	struct drm_sched_entity *entity;
>+	struct dma_fence *fence;
>+	struct drm_sched_fence *s_fence;
>+	struct drm_sched_job *sched_job;
> 	int r;
>
>-	while (!READ_ONCE(sched->pause_run_wq)) {
>-		struct drm_sched_entity *entity;
>-		struct drm_sched_msg *msg;
>-		struct drm_sched_fence *s_fence;
>-		struct drm_sched_job *sched_job;
>-		struct dma_fence *fence;
>-		struct drm_sched_job *cleanup_job;
>-
>-		cleanup_job = drm_sched_get_cleanup_job(sched);
>-		entity = drm_sched_select_entity(sched);
>-		msg = drm_sched_get_msg(sched);
>-
>-		if (cleanup_job)
>-			sched->ops->free_job(cleanup_job);
>-
>-		if (msg)
>-			sched->ops->process_msg(msg);
>-
>-		if (!entity) {
>-			if (!cleanup_job && !msg)
>-				break;
>-			continue;
>-		}
>-
>-		sched_job = drm_sched_entity_pop_job(entity);
>+	if (READ_ONCE(sched->pause_submit))
>+		return;
>
>-		if (!sched_job) {
>-			complete_all(&entity->entity_idle);
>-			if (!cleanup_job && !msg)
>-				break;
>-			continue;
>-		}
>+	entity = drm_sched_select_entity(sched);
>+	if (!entity)
>+		return;
>
>-		s_fence = sched_job->s_fence;
>+	sched_job = drm_sched_entity_pop_job(entity);
>+	if (!sched_job) {
>+		complete_all(&entity->entity_idle);
>+		return;	/* No more work */
>+	}
>
>-		atomic_inc(&sched->hw_rq_count);
>+	s_fence = sched_job->s_fence;
>
>-		trace_drm_run_job(sched_job, entity);
>-		fence = sched->ops->run_job(sched_job);
>-		drm_sched_job_begin(sched_job);
>-		complete_all(&entity->entity_idle);
>-		drm_sched_fence_scheduled(s_fence, fence);
>+	atomic_inc(&sched->hw_rq_count);
>+	drm_sched_job_begin(sched_job);
>
>-		if (!IS_ERR_OR_NULL(fence)) {
>-			/* Drop for original kref_init of the fence */
>-			dma_fence_put(fence);
>+	trace_drm_run_job(sched_job, entity);
>+	fence = sched->ops->run_job(sched_job);
>+	complete_all(&entity->entity_idle);
>+	drm_sched_fence_scheduled(s_fence, fence);
>
>-			r = dma_fence_add_callback(fence, &sched_job->cb,
>-						   drm_sched_job_done_cb);
>-			if (r == -ENOENT)
>-				drm_sched_job_done(sched_job, fence->error);
>-			else if (r)
>-				DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n",
>-					  r);
>-		} else {
>-			drm_sched_job_done(sched_job, IS_ERR(fence) ?
>-					   PTR_ERR(fence) : 0);
>-		}
>+	if (!IS_ERR_OR_NULL(fence)) {
>+		/* Drop for original kref_init of the fence */
>+		dma_fence_put(fence);
>
>-		wake_up(&sched->job_scheduled);
>+		r = dma_fence_add_callback(fence, &sched_job->cb,
>+					   drm_sched_job_done_cb);
>+		if (r == -ENOENT)
>+			drm_sched_job_done(sched_job, fence->error);
>+		else if (r)
>+			DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n", r);
>+	} else {
>+		drm_sched_job_done(sched_job, IS_ERR(fence) ?
>+				   PTR_ERR(fence) : 0);
> 	}
>+
>+	wake_up(&sched->job_scheduled);
>+	drm_sched_run_job_queue_if_ready(sched);
> }
>
> /**
>@@ -1210,7 +1136,9 @@ static void drm_sched_main(struct work_struct *w)
>  *
>  * @sched: scheduler instance
>  * @ops: backend operations for this scheduler
>- * @run_wq: workqueue to use for run work. If NULL, the system_wq is used
>+ * @submit_wq: workqueue to use for submission. If NULL, an ordered wq is
>+ *	       allocated and used
>+ * @num_rqs: number of runqueues, one for each priority, up to DRM_SCHED_PRIORITY_COUNT
>  * @hw_submission: number of hw submissions that can be in flight
>  * @hang_limit: number of times to allow a job to hang before dropping it
>  * @timeout: timeout value in jiffies for the scheduler
>@@ -1218,57 +1146,89 @@ static void drm_sched_main(struct work_struct *w)
>  *		used
>  * @score: optional score atomic shared with other schedulers
>  * @name: name used for debugging
>- * @sched_policy: schedule policy
>  * @dev: target &struct device
>  *
>  * Return 0 on success, otherwise error code.
>  */
> int drm_sched_init(struct drm_gpu_scheduler *sched,
> 		   const struct drm_sched_backend_ops *ops,
>-		   struct workqueue_struct *run_wq,
>-		   unsigned hw_submission, unsigned hang_limit,
>+		   struct workqueue_struct *submit_wq,
>+		   u32 num_rqs, unsigned hw_submission, unsigned hang_limit,
> 		   long timeout, struct workqueue_struct *timeout_wq,
>-		   atomic_t *score, const char *name,
>-		   enum drm_sched_policy sched_policy,
>-		   struct device *dev)
>+		   atomic_t *score, const char *name, struct device *dev)
> {
>-	int i;
>-
>-	if (sched_policy >= DRM_SCHED_POLICY_COUNT)
>-		return -EINVAL;
>+	int i, ret;
>
> 	sched->ops = ops;
>-	sched->single_entity = NULL;
> 	sched->hw_submission_limit = hw_submission;
> 	sched->name = name;
>-	sched->run_wq = run_wq ? : system_wq;
>+	if (submit_wq) {
>+		sched->submit_wq = submit_wq;
>+		sched->own_submit_wq = false;
>+	} else {
>+		sched->submit_wq = alloc_ordered_workqueue(name, 0);
>+		if (!sched->submit_wq)
>+			return -ENOMEM;
>+
>+		sched->own_submit_wq = true;
>+	}
> 	sched->timeout = timeout;
> 	sched->timeout_wq = timeout_wq ? : system_wq;
> 	sched->hang_limit = hang_limit;
> 	sched->score = score ? score : &sched->_score;
> 	sched->dev = dev;
>-	if (sched_policy == DRM_SCHED_POLICY_DEFAULT)
>-		sched->sched_policy = default_drm_sched_policy;
>-	else
>-		sched->sched_policy = sched_policy;
>-	for (i = DRM_SCHED_PRIORITY_MIN; sched_policy !=
>-	     DRM_SCHED_POLICY_SINGLE_ENTITY && i < DRM_SCHED_PRIORITY_COUNT;
>-	     i++)
>-		drm_sched_rq_init(sched, &sched->sched_rq[i]);
>+
>+	if (num_rqs > DRM_SCHED_PRIORITY_COUNT) {
>+		/* This is a gross violation--tell drivers what the  problem is.
>+		 */
>+		drm_err(sched, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
>+			__func__);
>+		return -EINVAL;
>+	} else if (sched->sched_rq) {
>+		/* Not an error, but warn anyway so drivers can
>+		 * fine-tune their DRM calling order, and return all
>+		 * is good.
>+		 */
>+		drm_warn(sched, "%s: scheduler already initialized!\n", __func__);
>+		return 0;
>+	}
>+
>+	sched->sched_rq = kmalloc_array(num_rqs, sizeof(*sched->sched_rq),
>+					GFP_KERNEL | __GFP_ZERO);
>+	if (!sched->sched_rq) {
>+		drm_err(sched, "%s: out of memory for sched_rq\n", __func__);
>+		return -ENOMEM;
>+	}
>+	sched->num_rqs = num_rqs;
>+	ret = -ENOMEM;
>+	for (i = DRM_SCHED_PRIORITY_MIN; i < sched->num_rqs; i++) {
>+		sched->sched_rq[i] = kzalloc(sizeof(*sched->sched_rq[i]), GFP_KERNEL);
>+		if (!sched->sched_rq[i])
>+			goto Out_unroll;
>+		drm_sched_rq_init(sched, sched->sched_rq[i]);
>+	}
>
> 	init_waitqueue_head(&sched->job_scheduled);
> 	INIT_LIST_HEAD(&sched->pending_list);
>-	INIT_LIST_HEAD(&sched->msgs);
> 	spin_lock_init(&sched->job_list_lock);
> 	atomic_set(&sched->hw_rq_count, 0);
> 	INIT_DELAYED_WORK(&sched->work_tdr, drm_sched_job_timedout);
>-	INIT_WORK(&sched->work_run, drm_sched_main);
>+	INIT_WORK(&sched->work_run_job, drm_sched_run_job_work);
>+	INIT_WORK(&sched->work_free_job, drm_sched_free_job_work);
> 	atomic_set(&sched->_score, 0);
> 	atomic64_set(&sched->job_id_count, 0);
>-	sched->pause_run_wq = false;
>+	sched->pause_submit = false;
>
> 	sched->ready = true;
> 	return 0;
>+
>+Out_unroll:
>+	for (--i ; i >= DRM_SCHED_PRIORITY_MIN; i--)
>+		kfree(sched->sched_rq[i]);
>+	kfree(sched->sched_rq);
>+	sched->sched_rq = NULL;
>+	drm_err(sched, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
>+	return ret;
> }
> EXPORT_SYMBOL(drm_sched_init);
>
>@@ -1284,18 +1244,10 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched)
> 	struct drm_sched_entity *s_entity;
> 	int i;
>
>-	drm_sched_run_wq_stop(sched);
>+	drm_sched_wqueue_stop(sched);
>
>-	if (sched->single_entity) {
>-		spin_lock(&sched->single_entity->rq_lock);
>-		sched->single_entity->stopped = true;
>-		spin_unlock(&sched->single_entity->rq_lock);
>-	}
>-
>-	for (i = DRM_SCHED_PRIORITY_COUNT - 1; sched->sched_policy !=
>-	     DRM_SCHED_POLICY_SINGLE_ENTITY && i >= DRM_SCHED_PRIORITY_MIN;
>-	     i--) {
>-		struct drm_sched_rq *rq = &sched->sched_rq[i];
>+	for (i = sched->num_rqs - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
>+		struct drm_sched_rq *rq = sched->sched_rq[i];
>
> 		spin_lock(&rq->lock);
> 		list_for_each_entry(s_entity, &rq->entities, list)
>@@ -1306,7 +1258,7 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched)
> 			 */
> 			s_entity->stopped = true;
> 		spin_unlock(&rq->lock);
>-
>+		kfree(sched->sched_rq[i]);
> 	}
>
> 	/* Wakeup everyone stuck in drm_sched_entity_flush for this scheduler */
>@@ -1315,7 +1267,11 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched)
> 	/* Confirm no work left behind accessing device structures */
> 	cancel_delayed_work_sync(&sched->work_tdr);
>
>+	if (sched->own_submit_wq)
>+		destroy_workqueue(sched->submit_wq);
> 	sched->ready = false;
>+	kfree(sched->sched_rq);
>+	sched->sched_rq = NULL;
> }
> EXPORT_SYMBOL(drm_sched_fini);
>
>@@ -1335,8 +1291,6 @@ void drm_sched_increase_karma(struct drm_sched_job *bad)
> 	struct drm_sched_entity *entity;
> 	struct drm_gpu_scheduler *sched = bad->sched;
>
>-	WARN_ON(sched->sched_policy == DRM_SCHED_POLICY_SINGLE_ENTITY);
>-
> 	/* don't change @bad's karma if it's from KERNEL RQ,
> 	 * because sometimes GPU hang would cause kernel jobs (like VM updating jobs)
> 	 * corrupt but keep in mind that kernel jobs always considered good.
>@@ -1344,9 +1298,10 @@ void drm_sched_increase_karma(struct drm_sched_job *bad)
> 	if (bad->s_priority != DRM_SCHED_PRIORITY_KERNEL) {
> 		atomic_inc(&bad->karma);
>
>-		for (i = DRM_SCHED_PRIORITY_MIN; i < DRM_SCHED_PRIORITY_KERNEL;
>+		for (i = DRM_SCHED_PRIORITY_MIN;
>+		     i < min_t(typeof(sched->num_rqs), sched->num_rqs, DRM_SCHED_PRIORITY_KERNEL);
> 		     i++) {
>-			struct drm_sched_rq *rq = &sched->sched_rq[i];
>+			struct drm_sched_rq *rq = sched->sched_rq[i];
>
> 			spin_lock(&rq->lock);
> 			list_for_each_entry_safe(entity, tmp, &rq->entities, list) {
>@@ -1364,3 +1319,42 @@ void drm_sched_increase_karma(struct drm_sched_job *bad)
> 	}
> }
> EXPORT_SYMBOL(drm_sched_increase_karma);
>+
>+/**
>+ * drm_sched_wqueue_ready - Is the scheduler ready for submission
>+ *
>+ * @sched: scheduler instance
>+ *
>+ * Returns true if submission is ready
>+ */
>+bool drm_sched_wqueue_ready(struct drm_gpu_scheduler *sched)
>+{
>+	return sched->ready;
>+}
>+EXPORT_SYMBOL(drm_sched_wqueue_ready);
>+
>+/**
>+ * drm_sched_wqueue_stop - stop scheduler submission
>+ *
>+ * @sched: scheduler instance
>+ */
>+void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched)
>+{
>+	WRITE_ONCE(sched->pause_submit, true);
>+	cancel_work_sync(&sched->work_run_job);
>+	cancel_work_sync(&sched->work_free_job);
>+}
>+EXPORT_SYMBOL(drm_sched_wqueue_stop);
>+
>+/**
>+ * drm_sched_wqueue_start - start scheduler submission
>+ *
>+ * @sched: scheduler instance
>+ */
>+void drm_sched_wqueue_start(struct drm_gpu_scheduler *sched)
>+{
>+	WRITE_ONCE(sched->pause_submit, false);
>+	queue_work(sched->submit_wq, &sched->work_run_job);
>+	queue_work(sched->submit_wq, &sched->work_free_job);
>+}
>+EXPORT_SYMBOL(drm_sched_wqueue_start);
>diff --git a/drivers/gpu/drm/v3d/v3d_sched.c b/drivers/gpu/drm/v3d/v3d_sched.c
>index 5e3fe77fa991..ce68f170f18d 100644
>--- a/drivers/gpu/drm/v3d/v3d_sched.c
>+++ b/drivers/gpu/drm/v3d/v3d_sched.c
>@@ -388,48 +388,45 @@ v3d_sched_init(struct v3d_dev *v3d)
> 	int ret;
>
> 	ret = drm_sched_init(&v3d->queue[V3D_BIN].sched,
>-			     &v3d_bin_sched_ops, NULL,
>+			     &v3d_bin_sched_ops, DRM_SCHED_PRIORITY_COUNT, NULL,
> 			     hw_jobs_limit, job_hang_limit,
> 			     msecs_to_jiffies(hang_limit_ms), NULL,
>-			     NULL, "v3d_bin", DRM_SCHED_POLICY_DEFAULT,
>-			     v3d->drm.dev);
>+			     NULL, "v3d_bin", v3d->drm.dev);
> 	if (ret)
> 		return ret;
>
> 	ret = drm_sched_init(&v3d->queue[V3D_RENDER].sched,
>-			     &v3d_render_sched_ops, NULL,
>+			     &v3d_render_sched_ops, DRM_SCHED_PRIORITY_COUNT,
> 			     hw_jobs_limit, job_hang_limit,
> 			     msecs_to_jiffies(hang_limit_ms), NULL,
>-			     ULL, "v3d_render", DRM_SCHED_POLICY_DEFAULT,
>-			     v3d->drm.dev);
>+			     ULL, "v3d_render", v3d->drm.dev);
> 	if (ret)
> 		goto fail;
>
> 	ret = drm_sched_init(&v3d->queue[V3D_TFU].sched,
>-			     &v3d_tfu_sched_ops, NULL,
>+			     &v3d_tfu_sched_ops, DRM_SCHED_PRIORITY_COUNT, NULL,
> 			     hw_jobs_limit, job_hang_limit,
> 			     msecs_to_jiffies(hang_limit_ms), NULL,
>-			     NULL, "v3d_tfu", DRM_SCHED_POLICY_DEFAULT,
>-			     v3d->drm.dev);
>+			     NULL, "v3d_tfu", v3d->drm.dev);
> 	if (ret)
> 		goto fail;
>
> 	if (v3d_has_csd(v3d)) {
> 		ret = drm_sched_init(&v3d->queue[V3D_CSD].sched,
>-				     &v3d_csd_sched_ops, NULL,
>+				     &v3d_csd_sched_ops,
>+				     DRM_SCHED_PRIORITY_COUNT, NULL,
> 				     hw_jobs_limit, job_hang_limit,
> 				     msecs_to_jiffies(hang_limit_ms), NULL,
>-				     NULL, "v3d_csd", DRM_SCHED_POLICY_DEFAULT,
>-				     v3d->drm.dev);
>+				     NULL, "v3d_csd", v3d->drm.dev);
> 		if (ret)
> 			goto fail;
>
> 		ret = drm_sched_init(&v3d->queue[V3D_CACHE_CLEAN].sched,
>-				     &v3d_cache_clean_sched_ops, NULL,
>+				     &v3d_cache_clean_sched_ops,
>+				     DRM_SCHED_PRIORITY_COUNT, NULL,
> 				     hw_jobs_limit, job_hang_limit,
> 				     msecs_to_jiffies(hang_limit_ms), NULL,
>-				     NULL, "v3d_cache_clean",
>-				     DRM_SCHED_POLICY_DEFAULT, v3d->drm.dev);
>+				     NULL, "v3d_cache_clean", v3d->drm.dev);
> 		if (ret)
> 			goto fail;
> 	}
>diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
>index cee57681732d..e40757e1b266 100644
>--- a/drivers/gpu/drm/xe/Makefile
>+++ b/drivers/gpu/drm/xe/Makefile
>@@ -57,6 +57,7 @@ xe-y += xe_bb.o \
> 	xe_exec_queue.o \
> 	xe_force_wake.o \
> 	xe_ggtt.o \
>+	xe_gpu_scheduler.o \
> 	xe_gt.o \
> 	xe_gt_clock.o \
> 	xe_gt_debugfs.o \
>diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h b/drivers/gpu/drm/xe/xe_exec_queue_types.h
>index ecd761177567..5ba47a5cfdbd 100644
>--- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
>+++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
>@@ -10,6 +10,7 @@
>
> #include <drm/gpu_scheduler.h>
>
>+#include "xe_gpu_scheduler_types.h"
> #include "xe_hw_engine_types.h"
> #include "xe_hw_fence_types.h"
> #include "xe_lrc_types.h"
>@@ -41,6 +42,8 @@ struct xe_exec_queue {
> 	struct xe_vm *vm;
> 	/** @class: class of this exec queue */
> 	enum xe_engine_class class;
>+	/** @priority: priority of this exec queue */
>+	enum xe_sched_priority priority;
> 	/**
> 	 * @logical_mask: logical mask of where job submitted to exec queue can run
> 	 */
>diff --git a/drivers/gpu/drm/xe/xe_execlist.c b/drivers/gpu/drm/xe/xe_execlist.c
>index 811b81c39002..5dd5cb4d1c1b 100644
>--- a/drivers/gpu/drm/xe/xe_execlist.c
>+++ b/drivers/gpu/drm/xe/xe_execlist.c
>@@ -333,17 +333,16 @@ static int execlist_exec_queue_init(struct xe_exec_queue *q)
>
> 	exl->q = q;
>
>-	err = drm_sched_init(&exl->sched, &drm_sched_ops, NULL,
>+	err = drm_sched_init(&exl->sched, &drm_sched_ops, NULL, 1,
> 			     q->lrc[0].ring.size / MAX_JOB_SIZE_BYTES,
> 			     XE_SCHED_HANG_LIMIT, XE_SCHED_JOB_TIMEOUT,
> 			     NULL, NULL, q->hwe->name,
>-			     DRM_SCHED_POLICY_SINGLE_ENTITY,
> 			     gt_to_xe(q->gt)->drm.dev);
> 	if (err)
> 		goto err_free;
>
> 	sched = &exl->sched;
>-	err = drm_sched_entity_init(&exl->entity, DRM_SCHED_PRIORITY_NORMAL,
>+	err = drm_sched_entity_init(&exl->entity, DRM_SCHED_PRIORITY_MIN,
> 				    &sched, 1, NULL);
> 	if (err)
> 		goto err_sched;
>diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler.c b/drivers/gpu/drm/xe/xe_gpu_scheduler.c
>new file mode 100644
>index 000000000000..e4ad1d6ce1d5
>--- /dev/null
>+++ b/drivers/gpu/drm/xe/xe_gpu_scheduler.c
>@@ -0,0 +1,101 @@
>+// SPDX-License-Identifier: MIT
>+/*
>+ * Copyright © 2023 Intel Corporation
>+ */
>+
>+#include "xe_gpu_scheduler.h"
>+
>+static void xe_sched_process_msg_queue(struct xe_gpu_scheduler *sched)
>+{
>+	if (!READ_ONCE(sched->base.pause_submit))
>+		queue_work(sched->base.submit_wq, &sched->work_process_msg);
>+}
>+
>+static void xe_sched_process_msg_queue_if_ready(struct xe_gpu_scheduler *sched)
>+{
>+	struct xe_sched_msg *msg;
>+
>+	spin_lock(&sched->base.job_list_lock);
>+	msg = list_first_entry_or_null(&sched->msgs, struct xe_sched_msg, link);
>+	if (msg)
>+		xe_sched_process_msg_queue(sched);
>+	spin_unlock(&sched->base.job_list_lock);
>+}
>+
>+static struct xe_sched_msg *
>+xe_sched_get_msg(struct xe_gpu_scheduler *sched)
>+{
>+	struct xe_sched_msg *msg;
>+
>+	spin_lock(&sched->base.job_list_lock);
>+	msg = list_first_entry_or_null(&sched->msgs,
>+				       struct xe_sched_msg, link);
>+	if (msg)
>+		list_del(&msg->link);
>+	spin_unlock(&sched->base.job_list_lock);
>+
>+	return msg;
>+}
>+
>+static void xe_sched_process_msg_work(struct work_struct *w)
>+{
>+	struct xe_gpu_scheduler *sched =
>+		container_of(w, struct xe_gpu_scheduler, work_process_msg);
>+	struct xe_sched_msg *msg;
>+
>+	if (READ_ONCE(sched->base.pause_submit))
>+		return;
>+
>+	msg = xe_sched_get_msg(sched);
>+	if (msg) {
>+		sched->ops->process_msg(msg);
>+
>+		xe_sched_process_msg_queue_if_ready(sched);
>+	}
>+}
>+
>+int xe_sched_init(struct xe_gpu_scheduler *sched,
>+		  const struct drm_sched_backend_ops *ops,
>+		  const struct xe_sched_backend_ops *xe_ops,
>+		  struct workqueue_struct *submit_wq,
>+		  uint32_t hw_submission, unsigned hang_limit,
>+		  long timeout, struct workqueue_struct *timeout_wq,
>+		  atomic_t *score, const char *name,
>+		  struct device *dev)
>+{
>+	sched->ops = xe_ops;
>+	INIT_LIST_HEAD(&sched->msgs);
>+	INIT_WORK(&sched->work_process_msg, xe_sched_process_msg_work);
>+
>+	return drm_sched_init(&sched->base, ops, submit_wq, 1, hw_submission,
>+			      hang_limit, timeout, timeout_wq, score, name,
>+			      dev);
>+}
>+
>+void xe_sched_fini(struct xe_gpu_scheduler *sched)
>+{
>+	xe_sched_submission_stop(sched);
>+	drm_sched_fini(&sched->base);
>+}
>+
>+void xe_sched_submission_start(struct xe_gpu_scheduler *sched)
>+{
>+	drm_sched_wqueue_start(&sched->base);
>+	queue_work(sched->base.submit_wq, &sched->work_process_msg);
>+}
>+
>+void xe_sched_submission_stop(struct xe_gpu_scheduler *sched)
>+{
>+	drm_sched_wqueue_stop(&sched->base);
>+	cancel_work_sync(&sched->work_process_msg);
>+}
>+
>+void xe_sched_add_msg(struct xe_gpu_scheduler *sched,
>+		      struct xe_sched_msg *msg)
>+{
>+	spin_lock(&sched->base.job_list_lock);
>+	list_add_tail(&msg->link, &sched->msgs);
>+	spin_unlock(&sched->base.job_list_lock);
>+
>+	xe_sched_process_msg_queue(sched);
>+}
>diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler.h b/drivers/gpu/drm/xe/xe_gpu_scheduler.h
>new file mode 100644
>index 000000000000..ea785bcd3eb2
>--- /dev/null
>+++ b/drivers/gpu/drm/xe/xe_gpu_scheduler.h
>@@ -0,0 +1,73 @@
>+/* SPDX-License-Identifier: MIT */
>+/*
>+ * Copyright © 2023 Intel Corporation
>+ */
>+
>+#ifndef _XE_GPU_SCHEDULER_H_
>+#define _XE_GPU_SCHEDULER_H_
>+
>+#include "xe_gpu_scheduler_types.h"
>+#include "xe_sched_job_types.h"
>+
>+int xe_sched_init(struct xe_gpu_scheduler *sched,
>+		  const struct drm_sched_backend_ops *ops,
>+		  const struct xe_sched_backend_ops *xe_ops,
>+		  struct workqueue_struct *submit_wq,
>+		  uint32_t hw_submission, unsigned hang_limit,
>+		  long timeout, struct workqueue_struct *timeout_wq,
>+		  atomic_t *score, const char *name,
>+		  struct device *dev);
>+void xe_sched_fini(struct xe_gpu_scheduler *sched);
>+
>+void xe_sched_submission_start(struct xe_gpu_scheduler *sched);
>+void xe_sched_submission_stop(struct xe_gpu_scheduler *sched);
>+
>+void xe_sched_add_msg(struct xe_gpu_scheduler *sched,
>+		      struct xe_sched_msg *msg);
>+
>+static inline void xe_sched_stop(struct xe_gpu_scheduler *sched)
>+{
>+	drm_sched_stop(&sched->base, NULL);
>+}
>+
>+static inline void xe_sched_tdr_queue_imm(struct xe_gpu_scheduler *sched)
>+{
>+	drm_sched_tdr_queue_imm(&sched->base);
>+}
>+
>+static inline void xe_sched_resubmit_jobs(struct xe_gpu_scheduler *sched)
>+{
>+	drm_sched_resubmit_jobs(&sched->base);
>+}
>+
>+static inline bool
>+xe_sched_invalidate_job(struct xe_sched_job *job, int threshold)
>+{
>+	return drm_sched_invalidate_job(&job->drm, threshold);
>+}
>+
>+static inline void xe_sched_add_pending_job(struct xe_gpu_scheduler *sched,
>+					    struct xe_sched_job *job)
>+{
>+	list_add(&job->drm.list, &sched->base.pending_list);
>+}
>+
>+static inline
>+struct xe_sched_job *xe_sched_first_pending_job(struct xe_gpu_scheduler *sched)
>+{
>+	return list_first_entry_or_null(&sched->base.pending_list,
>+					struct xe_sched_job, drm.list);
>+}
>+
>+static inline int
>+xe_sched_entity_init(struct xe_sched_entity *entity,
>+		     struct xe_gpu_scheduler *sched)
>+{
>+	return drm_sched_entity_init(entity, DRM_SCHED_PRIORITY_MIN,
>+				     (struct drm_gpu_scheduler **)&sched,
>+				     1, NULL);
>+}
>+
>+#define xe_sched_entity_fini drm_sched_entity_fini
>+
>+#endif
>diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler_types.h b/drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
>new file mode 100644
>index 000000000000..86133835d4d1
>--- /dev/null
>+++ b/drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
>@@ -0,0 +1,58 @@
>+/* SPDX-License-Identifier: MIT */
>+/*
>+ * Copyright © 2023 Intel Corporation
>+ */
>+
>+#ifndef _XE_GPU_SCHEDULER_TYPES_H_
>+#define _XE_GPU_SCHEDULER_TYPES_H_
>+
>+#include <drm/gpu_scheduler.h>
>+
>+/**
>+ * struct xe_sched_msg - an in-band (relative to GPU scheduler run queue)
>+ * message
>+ *
>+ * Generic enough for backend defined messages, backend can expand if needed.
>+ */
>+struct xe_sched_msg {
>+	/** @link: list link into the gpu scheduler list of messages */
>+	struct list_head		link;
>+	/**
>+	 * @private_data: opaque pointer to message private data (backend defined)
>+	 */
>+	void				*private_data;
>+	/** @opcode: opcode of message (backend defined) */
>+	unsigned int			opcode;
>+};
>+
>+/**
>+ * struct xe_sched_backend_ops - Define the backend operations called by the
>+ * scheduler
>+ */
>+struct xe_sched_backend_ops {
>+	/**
>+	 * @process_msg: Process a message. Allowed to block, it is this
>+	 * function's responsibility to free message if dynamically allocated.
>+	 */
>+	void (*process_msg)(struct xe_sched_msg *msg);
>+};
>+
>+/**
>+ * struct xe_gpu_scheduler - Xe GPU scheduler
>+ */
>+struct xe_gpu_scheduler {
>+	/** @base: DRM GPU scheduler */
>+	struct drm_gpu_scheduler		base;
>+	/** @ops: Xe scheduler ops */
>+	const struct xe_sched_backend_ops	*ops;
>+	/** @msgs: list of messages to be processed in @work_process_msg */
>+	struct list_head			msgs;
>+	/** @work_process_msg: processes messages */
>+	struct work_struct		work_process_msg;
>+};
>+
>+#define xe_sched_entity		drm_sched_entity
>+#define xe_sched_policy		drm_sched_policy
>+#define xe_sched_priority	drm_sched_priority
>+
>+#endif
>diff --git a/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h b/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
>index d95ef0021a1f..4c39f01e4f52 100644
>--- a/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
>+++ b/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
>@@ -9,7 +9,7 @@
> #include <linux/spinlock.h>
> #include <linux/workqueue.h>
>
>-#include <drm/gpu_scheduler.h>
>+#include "xe_gpu_scheduler_types.h"
>
> struct dma_fence;
> struct xe_exec_queue;
>@@ -21,16 +21,16 @@ struct xe_guc_exec_queue {
> 	/** @q: Backpointer to parent xe_exec_queue */
> 	struct xe_exec_queue *q;
> 	/** @sched: GPU scheduler for this xe_exec_queue */
>-	struct drm_gpu_scheduler sched;
>+	struct xe_gpu_scheduler sched;
> 	/** @entity: Scheduler entity for this xe_exec_queue */
>-	struct drm_sched_entity entity;
>+	struct xe_sched_entity entity;
> 	/**
> 	 * @static_msgs: Static messages for this xe_exec_queue, used when
> 	 * a message needs to sent through the GPU scheduler but memory
> 	 * allocations are not allowed.
> 	 */
> #define MAX_STATIC_MSG_TYPE	3
>-	struct drm_sched_msg static_msgs[MAX_STATIC_MSG_TYPE];
>+	struct xe_sched_msg static_msgs[MAX_STATIC_MSG_TYPE];
> 	/** @lr_tdr: long running TDR worker */
> 	struct work_struct lr_tdr;
> 	/** @fini_async: do final fini async from this worker */
>diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
>index 870dc5c532fa..8ae1a49186e5 100644
>--- a/drivers/gpu/drm/xe/xe_guc_submit.c
>+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
>@@ -19,6 +19,7 @@
> #include "xe_device.h"
> #include "xe_exec_queue.h"
> #include "xe_force_wake.h"
>+#include "xe_gpu_scheduler.h"
> #include "xe_gt.h"
> #include "xe_guc.h"
> #include "xe_guc_ct.h"
>@@ -360,7 +361,7 @@ MAKE_EXEC_QUEUE_POLICY_ADD(preemption_timeout, PREEMPTION_TIMEOUT)
> MAKE_EXEC_QUEUE_POLICY_ADD(priority, SCHEDULING_PRIORITY)
> #undef MAKE_EXEC_QUEUE_POLICY_ADD
>
>-static const int drm_sched_prio_to_guc[] = {
>+static const int xe_sched_prio_to_guc[] = {
> 	[DRM_SCHED_PRIORITY_MIN] = GUC_CLIENT_PRIORITY_NORMAL,
> 	[DRM_SCHED_PRIORITY_NORMAL] = GUC_CLIENT_PRIORITY_KMD_NORMAL,
> 	[DRM_SCHED_PRIORITY_HIGH] = GUC_CLIENT_PRIORITY_HIGH,
>@@ -371,14 +372,14 @@ static void init_policies(struct xe_guc *guc, struct xe_exec_queue *q)
> {
> 	struct exec_queue_policy policy;
> 	struct xe_device *xe = guc_to_xe(guc);
>-	enum drm_sched_priority prio = q->entity->priority;
>+	enum xe_sched_priority prio = q->priority;
> 	u32 timeslice_us = q->sched_props.timeslice_us;
> 	u32 preempt_timeout_us = q->sched_props.preempt_timeout_us;
>
> 	xe_assert(xe, exec_queue_registered(q));
>
> 	__guc_exec_queue_policy_start_klv(&policy, q->guc->id);
>-	__guc_exec_queue_policy_add_priority(&policy, drm_sched_prio_to_guc[prio]);
>+	__guc_exec_queue_policy_add_priority(&policy, xe_sched_prio_to_guc[prio]);
> 	__guc_exec_queue_policy_add_execution_quantum(&policy, timeslice_us);
> 	__guc_exec_queue_policy_add_preemption_timeout(&policy, preempt_timeout_us);
>
>@@ -719,7 +720,6 @@ static int guc_read_stopped(struct xe_guc *guc)
> 		q->guc->id,						\
> 		GUC_CONTEXT_##enable_disable,				\
> 	}
>-#define MIN_SCHED_TIMEOUT	1
>
> static void disable_scheduling_deregister(struct xe_guc *guc,
> 					  struct xe_exec_queue *q)
>@@ -733,12 +733,12 @@ static void disable_scheduling_deregister(struct xe_guc *guc,
> 	ret = wait_event_timeout(guc->ct.wq, !exec_queue_pending_enable(q) ||
> 				 guc_read_stopped(guc), HZ * 5);
> 	if (!ret) {
>-		struct drm_gpu_scheduler *sched = &q->guc->sched;
>+		struct xe_gpu_scheduler *sched = &q->guc->sched;
>
> 		drm_warn(&xe->drm, "Pending enable failed to respond");
>-		sched->timeout = MIN_SCHED_TIMEOUT;
>-		drm_sched_run_wq_start(sched);
>+		xe_sched_submission_start(sched);
> 		xe_gt_reset_async(q->gt);
>+		xe_sched_tdr_queue_imm(sched);
> 		return;
> 	}
>
>@@ -809,7 +809,7 @@ static void xe_guc_exec_queue_trigger_cleanup(struct xe_exec_queue *q)
> 	if (xe_exec_queue_is_lr(q))
> 		queue_work(guc_to_gt(guc)->ordered_wq, &q->guc->lr_tdr);
> 	else
>-		drm_sched_set_timeout(&q->guc->sched, MIN_SCHED_TIMEOUT);
>+		xe_sched_tdr_queue_imm(&q->guc->sched);
> }
>
> static void xe_guc_exec_queue_lr_cleanup(struct work_struct *w)
>@@ -819,13 +819,13 @@ static void xe_guc_exec_queue_lr_cleanup(struct work_struct *w)
> 	struct xe_exec_queue *q = ge->q;
> 	struct xe_guc *guc = exec_queue_to_guc(q);
> 	struct xe_device *xe = guc_to_xe(guc);
>-	struct drm_gpu_scheduler *sched = &ge->sched;
>+	struct xe_gpu_scheduler *sched = &ge->sched;
>
> 	xe_assert(xe, xe_exec_queue_is_lr(q));
> 	trace_xe_exec_queue_lr_cleanup(q);
>
> 	/* Kill the run_job / process_msg entry points */
>-	drm_sched_run_wq_stop(sched);
>+	xe_sched_submission_stop(sched);
>
> 	/*
> 	 * Engine state now mostly stable, disable scheduling / deregister if
>@@ -854,13 +854,13 @@ static void xe_guc_exec_queue_lr_cleanup(struct work_struct *w)
> 					 guc_read_stopped(guc), HZ * 5);
> 		if (!ret) {
> 			drm_warn(&xe->drm, "Schedule disable failed to respond");
>-			drm_sched_run_wq_start(sched);
>+			xe_sched_submission_start(sched);
> 			xe_gt_reset_async(q->gt);
> 			return;
> 		}
> 	}
>
>-	drm_sched_run_wq_start(sched);
>+	xe_sched_submission_start(sched);
> }
>
> static enum drm_gpu_sched_stat
>@@ -869,7 +869,7 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> 	struct xe_sched_job *job = to_xe_sched_job(drm_job);
> 	struct xe_sched_job *tmp_job;
> 	struct xe_exec_queue *q = job->q;
>-	struct drm_gpu_scheduler *sched = &q->guc->sched;
>+	struct xe_gpu_scheduler *sched = &q->guc->sched;
> 	struct xe_device *xe = guc_to_xe(exec_queue_to_guc(q));
> 	int err = -ETIME;
> 	int i = 0;
>@@ -889,7 +889,7 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> 	trace_xe_sched_job_timedout(job);
>
> 	/* Kill the run_job entry point */
>-	drm_sched_run_wq_stop(sched);
>+	xe_sched_submission_stop(sched);
>
> 	/*
> 	 * Kernel jobs should never fail, nor should VM jobs if they do
>@@ -897,9 +897,9 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> 	 */
> 	if (q->flags & EXEC_QUEUE_FLAG_KERNEL ||
> 	    (q->flags & EXEC_QUEUE_FLAG_VM && !exec_queue_killed(q))) {
>-		if (!drm_sched_invalidate_job(drm_job, 2)) {
>-			list_add(&drm_job->list, &sched->pending_list);
>-			drm_sched_run_wq_start(sched);
>+		if (!xe_sched_invalidate_job(job, 2)) {
>+			xe_sched_add_pending_job(sched, job);
>+			xe_sched_submission_start(sched);
> 			xe_gt_reset_async(q->gt);
> 			goto out;
> 		}
>@@ -932,10 +932,10 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> 					 guc_read_stopped(guc), HZ * 5);
> 		if (!ret || guc_read_stopped(guc)) {
> 			drm_warn(&xe->drm, "Schedule disable failed to respond");
>-			sched->timeout = MIN_SCHED_TIMEOUT;
>-			list_add(&drm_job->list, &sched->pending_list);
>-			drm_sched_run_wq_start(sched);
>+			xe_sched_add_pending_job(sched, job);
>+			xe_sched_submission_start(sched);
> 			xe_gt_reset_async(q->gt);
>+			xe_sched_tdr_queue_imm(sched);
> 			goto out;
> 		}
> 	}
>@@ -947,15 +947,15 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> 	 * Fence state now stable, stop / start scheduler which cleans up any
> 	 * fences that are complete
> 	 */
>-	list_add(&drm_job->list, &sched->pending_list);
>-	drm_sched_run_wq_start(sched);
>+	xe_sched_add_pending_job(sched, job);
>+	xe_sched_submission_start(sched);
> 	xe_guc_exec_queue_trigger_cleanup(q);
>
> 	/* Mark all outstanding jobs as bad, thus completing them */
>-	spin_lock(&sched->job_list_lock);
>-	list_for_each_entry(tmp_job, &sched->pending_list, drm.list)
>+	spin_lock(&sched->base.job_list_lock);
>+	list_for_each_entry(tmp_job, &sched->base.pending_list, drm.list)
> 		xe_sched_job_set_error(tmp_job, !i++ ? err : -ECANCELED);
>-	spin_unlock(&sched->job_list_lock);
>+	spin_unlock(&sched->base.job_list_lock);
>
> 	/* Start fence signaling */
> 	xe_hw_fence_irq_start(q->fence_irq);
>@@ -978,8 +978,8 @@ static void __guc_exec_queue_fini_async(struct work_struct *w)
> 	if (q->flags & EXEC_QUEUE_FLAG_PERSISTENT)
> 		xe_device_remove_persistent_exec_queues(gt_to_xe(q->gt), q);
> 	release_guc_id(guc, q);
>-	drm_sched_entity_fini(&ge->entity);
>-	drm_sched_fini(&ge->sched);
>+	xe_sched_entity_fini(&ge->entity);
>+	xe_sched_fini(&ge->sched);
>
> 	kfree(ge);
> 	xe_exec_queue_fini(q);
>@@ -1008,7 +1008,7 @@ static void __guc_exec_queue_fini(struct xe_guc *guc, struct xe_exec_queue *q)
> 	guc_exec_queue_fini_async(q);
> }
>
>-static void __guc_exec_queue_process_msg_cleanup(struct drm_sched_msg *msg)
>+static void __guc_exec_queue_process_msg_cleanup(struct xe_sched_msg *msg)
> {
> 	struct xe_exec_queue *q = msg->private_data;
> 	struct xe_guc *guc = exec_queue_to_guc(q);
>@@ -1028,7 +1028,7 @@ static bool guc_exec_queue_allowed_to_change_state(struct xe_exec_queue *q)
> 	return !exec_queue_killed_or_banned(q) && exec_queue_registered(q);
> }
>
>-static void __guc_exec_queue_process_msg_set_sched_props(struct drm_sched_msg *msg)
>+static void __guc_exec_queue_process_msg_set_sched_props(struct xe_sched_msg *msg)
> {
> 	struct xe_exec_queue *q = msg->private_data;
> 	struct xe_guc *guc = exec_queue_to_guc(q);
>@@ -1052,7 +1052,7 @@ static void suspend_fence_signal(struct xe_exec_queue *q)
> 	wake_up(&q->guc->suspend_wait);
> }
>
>-static void __guc_exec_queue_process_msg_suspend(struct drm_sched_msg *msg)
>+static void __guc_exec_queue_process_msg_suspend(struct xe_sched_msg *msg)
> {
> 	struct xe_exec_queue *q = msg->private_data;
> 	struct xe_guc *guc = exec_queue_to_guc(q);
>@@ -1087,7 +1087,7 @@ static void __guc_exec_queue_process_msg_suspend(struct drm_sched_msg *msg)
> 	}
> }
>
>-static void __guc_exec_queue_process_msg_resume(struct drm_sched_msg *msg)
>+static void __guc_exec_queue_process_msg_resume(struct xe_sched_msg *msg)
> {
> 	struct xe_exec_queue *q = msg->private_data;
> 	struct xe_guc *guc = exec_queue_to_guc(q);
>@@ -1113,9 +1113,9 @@ static void __guc_exec_queue_process_msg_resume(struct drm_sched_msg *msg)
> #define SUSPEND		3
> #define RESUME		4
>
>-static void guc_exec_queue_process_msg(struct drm_sched_msg *msg)
>+static void guc_exec_queue_process_msg(struct xe_sched_msg *msg)
> {
>-	trace_drm_sched_msg_recv(msg);
>+	trace_xe_sched_msg_recv(msg);
>
> 	switch (msg->opcode) {
> 	case CLEANUP:
>@@ -1139,12 +1139,15 @@ static const struct drm_sched_backend_ops drm_sched_ops = {
> 	.run_job = guc_exec_queue_run_job,
> 	.free_job = guc_exec_queue_free_job,
> 	.timedout_job = guc_exec_queue_timedout_job,
>+};
>+
>+static const struct xe_sched_backend_ops xe_sched_ops = {
> 	.process_msg = guc_exec_queue_process_msg,
> };
>
> static int guc_exec_queue_init(struct xe_exec_queue *q)
> {
>-	struct drm_gpu_scheduler *sched;
>+	struct xe_gpu_scheduler *sched;
> 	struct xe_guc *guc = exec_queue_to_guc(q);
> 	struct xe_device *xe = guc_to_xe(guc);
> 	struct xe_guc_exec_queue *ge;
>@@ -1163,19 +1166,18 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
>
> 	timeout = (q->vm && xe_vm_no_dma_fences(q->vm)) ? MAX_SCHEDULE_TIMEOUT :
> 		  q->hwe->eclass->sched_props.job_timeout_ms;
>-	err = drm_sched_init(&ge->sched, &drm_sched_ops, NULL,
>+	err = xe_sched_init(&ge->sched, &drm_sched_ops, &xe_sched_ops, NULL,
> 			     q->lrc[0].ring.size / MAX_JOB_SIZE_BYTES,
> 			     64, timeout, guc_to_gt(guc)->ordered_wq, NULL,
>-			     q->name, DRM_SCHED_POLICY_SINGLE_ENTITY,
>-			     gt_to_xe(q->gt)->drm.dev);
>+			     q->name, gt_to_xe(q->gt)->drm.dev);
> 	if (err)
> 		goto err_free;
>
> 	sched = &ge->sched;
>-	err = drm_sched_entity_init(&ge->entity, DRM_SCHED_PRIORITY_NORMAL,
>-				    &sched, 1, NULL);
>+	err = xe_sched_entity_init(&ge->entity, sched);
> 	if (err)
> 		goto err_sched;
>+	q->priority = DRM_SCHED_PRIORITY_NORMAL;
>
> 	if (xe_exec_queue_is_lr(q))
> 		INIT_WORK(&q->guc->lr_tdr, xe_guc_exec_queue_lr_cleanup);
>@@ -1189,7 +1191,7 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
> 	q->entity = &ge->entity;
>
> 	if (guc_read_stopped(guc))
>-		drm_sched_stop(sched, NULL);
>+		xe_sched_stop(sched);
>
> 	mutex_unlock(&guc->submission_state.lock);
>
>@@ -1200,9 +1202,9 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
> 	return 0;
>
> err_entity:
>-	drm_sched_entity_fini(&ge->entity);
>+	xe_sched_entity_fini(&ge->entity);
> err_sched:
>-	drm_sched_fini(&ge->sched);
>+	xe_sched_fini(&ge->sched);
> err_free:
> 	kfree(ge);
>
>@@ -1216,15 +1218,15 @@ static void guc_exec_queue_kill(struct xe_exec_queue *q)
> 	xe_guc_exec_queue_trigger_cleanup(q);
> }
>
>-static void guc_exec_queue_add_msg(struct xe_exec_queue *q, struct drm_sched_msg *msg,
>+static void guc_exec_queue_add_msg(struct xe_exec_queue *q, struct xe_sched_msg *msg,
> 				   u32 opcode)
> {
> 	INIT_LIST_HEAD(&msg->link);
> 	msg->opcode = opcode;
> 	msg->private_data = q;
>
>-	trace_drm_sched_msg_add(msg);
>-	drm_sched_add_msg(&q->guc->sched, msg);
>+	trace_xe_sched_msg_add(msg);
>+	xe_sched_add_msg(&q->guc->sched, msg);
> }
>
> #define STATIC_MSG_CLEANUP	0
>@@ -1232,7 +1234,7 @@ static void guc_exec_queue_add_msg(struct xe_exec_queue *q, struct drm_sched_msg
> #define STATIC_MSG_RESUME	2
> static void guc_exec_queue_fini(struct xe_exec_queue *q)
> {
>-	struct drm_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_CLEANUP;
>+	struct xe_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_CLEANUP;
>
> 	if (!(q->flags & EXEC_QUEUE_FLAG_PERMANENT))
> 		guc_exec_queue_add_msg(q, msg, CLEANUP);
>@@ -1241,11 +1243,11 @@ static void guc_exec_queue_fini(struct xe_exec_queue *q)
> }
>
> static int guc_exec_queue_set_priority(struct xe_exec_queue *q,
>-				       enum drm_sched_priority priority)
>+				       enum xe_sched_priority priority)
> {
>-	struct drm_sched_msg *msg;
>+	struct xe_sched_msg *msg;
>
>-	if (q->entity->priority == priority || exec_queue_killed_or_banned(q))
>+	if (q->priority == priority || exec_queue_killed_or_banned(q))
> 		return 0;
>
> 	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
>@@ -1253,13 +1255,14 @@ static int guc_exec_queue_set_priority(struct xe_exec_queue *q,
> 		return -ENOMEM;
>
> 	guc_exec_queue_add_msg(q, msg, SET_SCHED_PROPS);
>+	q->priority = priority;
>
> 	return 0;
> }
>
> static int guc_exec_queue_set_timeslice(struct xe_exec_queue *q, u32 timeslice_us)
> {
>-	struct drm_sched_msg *msg;
>+	struct xe_sched_msg *msg;
>
> 	if (q->sched_props.timeslice_us == timeslice_us ||
> 	    exec_queue_killed_or_banned(q))
>@@ -1278,7 +1281,7 @@ static int guc_exec_queue_set_timeslice(struct xe_exec_queue *q, u32 timeslice_u
> static int guc_exec_queue_set_preempt_timeout(struct xe_exec_queue *q,
> 					      u32 preempt_timeout_us)
> {
>-	struct drm_sched_msg *msg;
>+	struct xe_sched_msg *msg;
>
> 	if (q->sched_props.preempt_timeout_us == preempt_timeout_us ||
> 	    exec_queue_killed_or_banned(q))
>@@ -1296,7 +1299,7 @@ static int guc_exec_queue_set_preempt_timeout(struct xe_exec_queue *q,
>
> static int guc_exec_queue_set_job_timeout(struct xe_exec_queue *q, u32 job_timeout_ms)
> {
>-	struct drm_gpu_scheduler *sched = &q->guc->sched;
>+	struct xe_gpu_scheduler *sched = &q->guc->sched;
> 	struct xe_guc *guc = exec_queue_to_guc(q);
> 	struct xe_device *xe = guc_to_xe(guc);
>
>@@ -1304,14 +1307,14 @@ static int guc_exec_queue_set_job_timeout(struct xe_exec_queue *q, u32 job_timeo
> 	xe_assert(xe, !exec_queue_banned(q));
> 	xe_assert(xe, !exec_queue_killed(q));
>
>-	sched->timeout = job_timeout_ms;
>+	sched->base.timeout = job_timeout_ms;
>
> 	return 0;
> }
>
> static int guc_exec_queue_suspend(struct xe_exec_queue *q)
> {
>-	struct drm_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_SUSPEND;
>+	struct xe_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_SUSPEND;
>
> 	if (exec_queue_killed_or_banned(q) || q->guc->suspend_pending)
> 		return -EINVAL;
>@@ -1332,7 +1335,7 @@ static void guc_exec_queue_suspend_wait(struct xe_exec_queue *q)
>
> static void guc_exec_queue_resume(struct xe_exec_queue *q)
> {
>-	struct drm_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_RESUME;
>+	struct xe_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_RESUME;
> 	struct xe_guc *guc = exec_queue_to_guc(q);
> 	struct xe_device *xe = guc_to_xe(guc);
>
>@@ -1362,10 +1365,10 @@ static const struct xe_exec_queue_ops guc_exec_queue_ops = {
>
> static void guc_exec_queue_stop(struct xe_guc *guc, struct xe_exec_queue *q)
> {
>-	struct drm_gpu_scheduler *sched = &q->guc->sched;
>+	struct xe_gpu_scheduler *sched = &q->guc->sched;
>
> 	/* Stop scheduling + flush any DRM scheduler operations */
>-	drm_sched_run_wq_stop(sched);
>+	xe_sched_submission_stop(sched);
>
> 	/* Clean up lost G2H + reset engine state */
> 	if (exec_queue_registered(q)) {
>@@ -1390,18 +1393,14 @@ static void guc_exec_queue_stop(struct xe_guc *guc, struct xe_exec_queue *q)
> 	 * more than twice.
> 	 */
> 	if (!(q->flags & (EXEC_QUEUE_FLAG_KERNEL | EXEC_QUEUE_FLAG_VM))) {
>-		struct drm_sched_job *drm_job =
>-			list_first_entry_or_null(&sched->pending_list,
>-						 struct drm_sched_job, list);
>-
>-		if (drm_job) {
>-			struct xe_sched_job *job = to_xe_sched_job(drm_job);
>+		struct xe_sched_job *job = xe_sched_first_pending_job(sched);
>
>+		if (job) {
> 			if ((xe_sched_job_started(job) &&
> 			    !xe_sched_job_completed(job)) ||
>-			    drm_sched_invalidate_job(drm_job, 2)) {
>+			    xe_sched_invalidate_job(job, 2)) {
> 				trace_xe_sched_job_ban(job);
>-				sched->timeout = MIN_SCHED_TIMEOUT;
>+				xe_sched_tdr_queue_imm(&q->guc->sched);
> 				set_exec_queue_banned(q);
> 			}
> 		}
>@@ -1456,7 +1455,7 @@ int xe_guc_submit_stop(struct xe_guc *guc)
>
> static void guc_exec_queue_start(struct xe_exec_queue *q)
> {
>-	struct drm_gpu_scheduler *sched = &q->guc->sched;
>+	struct xe_gpu_scheduler *sched = &q->guc->sched;
>
> 	if (!exec_queue_killed_or_banned(q)) {
> 		int i;
>@@ -1464,11 +1463,10 @@ static void guc_exec_queue_start(struct xe_exec_queue *q)
> 		trace_xe_exec_queue_resubmit(q);
> 		for (i = 0; i < q->width; ++i)
> 			xe_lrc_set_ring_head(q->lrc + i, q->lrc[i].ring.tail);
>-		drm_sched_resubmit_jobs(sched);
>+		xe_sched_resubmit_jobs(sched);
> 	}
>
>-	drm_sched_run_wq_start(sched);
>-	drm_sched_set_timeout(sched, sched->timeout);
>+	xe_sched_submission_start(sched);
> }
>
> int xe_guc_submit_start(struct xe_guc *guc)
>@@ -1752,7 +1750,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
> {
> 	struct xe_guc *guc = exec_queue_to_guc(q);
> 	struct xe_device *xe = guc_to_xe(guc);
>-	struct drm_gpu_scheduler *sched = &q->guc->sched;
>+	struct xe_gpu_scheduler *sched = &q->guc->sched;
> 	struct xe_sched_job *job;
> 	struct xe_guc_submit_exec_queue_snapshot *snapshot;
> 	int i;
>@@ -1770,7 +1768,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
> 	snapshot->logical_mask = q->logical_mask;
> 	snapshot->width = q->width;
> 	snapshot->refcount = kref_read(&q->refcount);
>-	snapshot->sched_timeout = sched->timeout;
>+	snapshot->sched_timeout = sched->base.timeout;
> 	snapshot->sched_props.timeslice_us = q->sched_props.timeslice_us;
> 	snapshot->sched_props.preempt_timeout_us =
> 		q->sched_props.preempt_timeout_us;
>@@ -1802,8 +1800,8 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
> 	if (snapshot->parallel_execution)
> 		guc_exec_queue_wq_snapshot_capture(q, snapshot);
>
>-	spin_lock(&sched->job_list_lock);
>-	snapshot->pending_list_size = list_count_nodes(&sched->pending_list);
>+	spin_lock(&sched->base.job_list_lock);
>+	snapshot->pending_list_size = list_count_nodes(&sched->base.pending_list);
> 	snapshot->pending_list = kmalloc_array(snapshot->pending_list_size,
> 					       sizeof(struct pending_list_snapshot),
> 					       GFP_ATOMIC);
>@@ -1812,7 +1810,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
> 		drm_err(&xe->drm, "Skipping GuC Engine pending_list snapshot.\n");
> 	} else {
> 		i = 0;
>-		list_for_each_entry(job, &sched->pending_list, drm.list) {
>+		list_for_each_entry(job, &sched->base.pending_list, drm.list) {
> 			snapshot->pending_list[i].seqno =
> 				xe_sched_job_seqno(job);
> 			snapshot->pending_list[i].fence =
>@@ -1824,7 +1822,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
> 		}
> 	}
>
>-	spin_unlock(&sched->job_list_lock);
>+	spin_unlock(&sched->base.job_list_lock);
>
> 	return snapshot;
> }
>diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
>index b4baecde60e6..ce803cbdafec 100644
>--- a/drivers/gpu/drm/xe/xe_migrate.c
>+++ b/drivers/gpu/drm/xe/xe_migrate.c
>@@ -395,7 +395,7 @@ struct xe_migrate *xe_migrate_init(struct xe_tile *tile)
> 		return ERR_CAST(m->q);
> 	}
> 	if (xe->info.supports_usm)
>-		m->q->entity->priority = DRM_SCHED_PRIORITY_KERNEL;
>+		m->q->priority = DRM_SCHED_PRIORITY_KERNEL;
>
> 	mutex_init(&m->job_mutex);
>
>diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
>index e32f1cad51d9..5ea458dadf69 100644
>--- a/drivers/gpu/drm/xe/xe_trace.h
>+++ b/drivers/gpu/drm/xe/xe_trace.h
>@@ -14,6 +14,7 @@
>
> #include "xe_bo_types.h"
> #include "xe_exec_queue_types.h"
>+#include "xe_gpu_scheduler_types.h"
> #include "xe_gt_tlb_invalidation_types.h"
> #include "xe_gt_types.h"
> #include "xe_guc_exec_queue_types.h"
>@@ -290,8 +291,8 @@ DEFINE_EVENT(xe_sched_job, xe_sched_job_ban,
> 	     TP_ARGS(job)
> );
>
>-DECLARE_EVENT_CLASS(drm_sched_msg,
>-		    TP_PROTO(struct drm_sched_msg *msg),
>+DECLARE_EVENT_CLASS(xe_sched_msg,
>+		    TP_PROTO(struct xe_sched_msg *msg),
> 		    TP_ARGS(msg),
>
> 		    TP_STRUCT__entry(
>@@ -309,13 +310,13 @@ DECLARE_EVENT_CLASS(drm_sched_msg,
> 			      __entry->opcode)
> );
>
>-DEFINE_EVENT(drm_sched_msg, drm_sched_msg_add,
>-	     TP_PROTO(struct drm_sched_msg *msg),
>+DEFINE_EVENT(xe_sched_msg, xe_sched_msg_add,
>+	     TP_PROTO(struct xe_sched_msg *msg),
> 	     TP_ARGS(msg)
> );
>
>-DEFINE_EVENT(drm_sched_msg, drm_sched_msg_recv,
>-	     TP_PROTO(struct drm_sched_msg *msg),
>+DEFINE_EVENT(xe_sched_msg, xe_sched_msg_recv,
>+	     TP_PROTO(struct xe_sched_msg *msg),
> 	     TP_ARGS(msg)
> );
>
>diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
>index 4bc1fef4fc2c..e5a6166eb152 100644
>--- a/include/drm/gpu_scheduler.h
>+++ b/include/drm/gpu_scheduler.h
>@@ -72,16 +72,11 @@ enum drm_sched_priority {
> 	DRM_SCHED_PRIORITY_UNSET = -2
> };
>
>-/* Used to chose default scheduling policy*/
>-extern int default_drm_sched_policy;
>-
>-enum drm_sched_policy {
>-	DRM_SCHED_POLICY_DEFAULT,
>-	DRM_SCHED_POLICY_RR,
>-	DRM_SCHED_POLICY_FIFO,
>-	DRM_SCHED_POLICY_SINGLE_ENTITY,
>-	DRM_SCHED_POLICY_COUNT,
>-};
>+/* Used to chose between FIFO and RR jobs scheduling */
>+extern int drm_sched_policy;
>+
>+#define DRM_SCHED_POLICY_RR    0
>+#define DRM_SCHED_POLICY_FIFO  1
>
> /**
>  * struct drm_sched_entity - A wrapper around a job queue (typically
>@@ -113,9 +108,6 @@ struct drm_sched_entity {
> 	 */
> 	struct drm_sched_rq		*rq;
>
>-	/** @single_sched: Single scheduler */
>-	struct drm_gpu_scheduler	*single_sched;
>-
> 	/**
> 	 * @sched_list:
> 	 *
>@@ -394,23 +386,6 @@ enum drm_gpu_sched_stat {
> 	DRM_GPU_SCHED_STAT_ENODEV,
> };
>
>-/**
>- * struct drm_sched_msg - an in-band (relative to GPU scheduler run queue)
>- * message
>- *
>- * Generic enough for backend defined messages, backend can expand if needed.
>- */
>-struct drm_sched_msg {
>-	/** @link: list link into the gpu scheduler list of messages */
>-	struct list_head		link;
>-	/**
>-	 * @private_data: opaque pointer to message private data (backend defined)
>-	 */
>-	void				*private_data;
>-	/** @opcode: opcode of message (backend defined) */
>-	unsigned int			opcode;
>-};
>-
> /**
>  * struct drm_sched_backend_ops - Define the backend operations
>  *	called by the scheduler
>@@ -488,32 +463,27 @@ struct drm_sched_backend_ops {
>          * and it's time to clean it up.
> 	 */
> 	void (*free_job)(struct drm_sched_job *sched_job);
>-
>-	/**
>-	 * @process_msg: Process a message. Allowed to block, it is this
>-	 * function's responsibility to free message if dynamically allocated.
>-	 */
>-	void (*process_msg)(struct drm_sched_msg *msg);
> };
>
> /**
>  * struct drm_gpu_scheduler - scheduler instance-specific data
>  *
>  * @ops: backend operations provided by the driver.
>- * @single_entity: Single entity for the scheduler
>  * @hw_submission_limit: the max size of the hardware queue.
>  * @timeout: the time after which a job is removed from the scheduler.
>  * @name: name of the ring for which this scheduler is being used.
>- * @sched_rq: priority wise array of run queues.
>- * @msgs: list of messages to be processed in @work_run
>+ * @num_rqs: Number of run-queues. This is at most DRM_SCHED_PRIORITY_COUNT,
>+ *           as there's usually one run-queue per priority, but could be less.
>+ * @sched_rq: An allocated array of run-queues of size @num_rqs;
>  * @job_scheduled: once @drm_sched_entity_do_release is called the scheduler
>  *                 waits on this wait queue until all the scheduled jobs are
>  *                 finished.
>  * @hw_rq_count: the number of jobs currently in the hardware queue.
>  * @job_id_count: used to assign unique id to the each job.
>- * @run_wq: workqueue used to queue @work_run
>+ * @submit_wq: workqueue used to queue @work_run_job and @work_free_job
>  * @timeout_wq: workqueue used to queue @work_tdr
>- * @work_run: schedules jobs, cleans up jobs, and processes messages
>+ * @work_run_job: work which calls run_job op of each scheduler.
>+ * @work_free_job: work which calls free_job op of each scheduler.
>  * @work_tdr: schedules a delayed call to @drm_sched_job_timedout after the
>  *            timeout interval is over.
>  * @pending_list: the list of jobs which are currently in the job queue.
>@@ -522,49 +492,47 @@ struct drm_sched_backend_ops {
>  *              guilty and it will no longer be considered for scheduling.
>  * @score: score to help loadbalancer pick a idle sched
>  * @_score: score used when the driver doesn't provide one
>- * @sched_policy: Schedule policy for scheduler
>  * @ready: marks if the underlying HW is ready to work
>  * @free_guilty: A hit to time out handler to free the guilty job.
>- * @pause_run_wq: pause queuing of @work_run on @run_wq
>+ * @pause_submit: pause queuing of @work_submit on @submit_wq
>+ * @own_submit_wq: scheduler owns allocation of @submit_wq
>  * @dev: system &struct device
>  *
>  * One scheduler is implemented for each hardware ring.
>  */
> struct drm_gpu_scheduler {
> 	const struct drm_sched_backend_ops	*ops;
>-	struct drm_sched_entity		*single_entity;
> 	uint32_t			hw_submission_limit;
> 	long				timeout;
> 	const char			*name;
>-	struct drm_sched_rq		sched_rq[DRM_SCHED_PRIORITY_COUNT];
>-	struct list_head		msgs;
>+	u32                             num_rqs;
>+	struct drm_sched_rq             **sched_rq;
> 	wait_queue_head_t		job_scheduled;
> 	atomic_t			hw_rq_count;
> 	atomic64_t			job_id_count;
>-	struct workqueue_struct		*run_wq;
>+	struct workqueue_struct		*submit_wq;
> 	struct workqueue_struct		*timeout_wq;
>-	struct work_struct		work_run;
>+	struct work_struct		work_run_job;
>+	struct work_struct		work_free_job;
> 	struct delayed_work		work_tdr;
> 	struct list_head		pending_list;
> 	spinlock_t			job_list_lock;
> 	int				hang_limit;
> 	atomic_t                        *score;
> 	atomic_t                        _score;
>-	enum drm_sched_policy		sched_policy;
> 	bool				ready;
> 	bool				free_guilty;
>-	bool				pause_run_wq;
>+	bool				pause_submit;
>+	bool				own_submit_wq;
> 	struct device			*dev;
> };
>
> int drm_sched_init(struct drm_gpu_scheduler *sched,
> 		   const struct drm_sched_backend_ops *ops,
>-		   struct workqueue_struct *run_wq,
>-		   uint32_t hw_submission, unsigned hang_limit,
>+		   struct workqueue_struct *submit_wq,
>+		   u32 num_rqs, uint32_t hw_submission, unsigned hang_limit,
> 		   long timeout, struct workqueue_struct *timeout_wq,
>-		   atomic_t *score, const char *name,
>-		   enum drm_sched_policy sched_policy,
>-		   struct device *dev);
>+		   atomic_t *score, const char *name, struct device *dev);
>
> void drm_sched_fini(struct drm_gpu_scheduler *sched);
> int drm_sched_job_init(struct drm_sched_job *job,
>@@ -589,13 +557,12 @@ void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
> 				    struct drm_gpu_scheduler **sched_list,
>                                    unsigned int num_sched_list);
>
>-void drm_sched_set_timeout(struct drm_gpu_scheduler *sched, long timeout);
>+void drm_sched_tdr_queue_imm(struct drm_gpu_scheduler *sched);
> void drm_sched_job_cleanup(struct drm_sched_job *job);
> void drm_sched_wakeup_if_can_queue(struct drm_gpu_scheduler *sched);
>-void drm_sched_add_msg(struct drm_gpu_scheduler *sched,
>-		       struct drm_sched_msg *msg);
>-void drm_sched_run_wq_stop(struct drm_gpu_scheduler *sched);
>-void drm_sched_run_wq_start(struct drm_gpu_scheduler *sched);
>+bool drm_sched_wqueue_ready(struct drm_gpu_scheduler *sched);
>+void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched);
>+void drm_sched_wqueue_start(struct drm_gpu_scheduler *sched);
> void drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad);
> void drm_sched_start(struct drm_gpu_scheduler *sched, bool full_recovery);
> void drm_sched_resubmit_jobs(struct drm_gpu_scheduler *sched);
>@@ -618,8 +585,6 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
> 			  struct drm_gpu_scheduler **sched_list,
> 			  unsigned int num_sched_list,
> 			  atomic_t *guilty);
>-struct drm_gpu_scheduler *
>-drm_sched_entity_to_scheduler(struct drm_sched_entity *entity);
> long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout);
> void drm_sched_entity_fini(struct drm_sched_entity *entity);
> void drm_sched_entity_destroy(struct drm_sched_entity *entity);
>-- 
>2.34.1
>

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

* Re: [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code
  2023-10-25 13:56 ` [Intel-xe] [PATCH] " Lucas De Marchi
@ 2023-10-25 17:07   ` Matthew Brost
  2023-10-25 17:49     ` Lucas De Marchi
  0 siblings, 1 reply; 13+ messages in thread
From: Matthew Brost @ 2023-10-25 17:07 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe

On Wed, Oct 25, 2023 at 08:56:17AM -0500, Lucas De Marchi wrote:
> On Tue, Oct 24, 2023 at 09:05:20PM -0700, Matthew Brost wrote:
> > The largest change is the message interface has been removed from the
> > DRM scheduler. Xe still needs a message interface so it is implemented
> > in the Xe driver by adding a Xe scheduler layer.
> 
> can you point to the commits upstream? What commits in our branch it
> replaces so we know what to drop when drm-xe-next is rebase... ?
> How was this diff generated ?
> 

This is based on the upstream series [1] that hopefully gets merged
soon. To create this patch I just dropped in the new drm-scheduler code
(copied drivers/gpu/drm/scheduler/*.c / *.h into this repo) and updated
the Xe code as required. The DRM scheduler coded so much in the baseline
I'm not sure if it worth trying to do fixup patches, rather we just
merge it on tip and find a proper place these changes during the next
rebase. Open to other ideas too.

Matt

[1] https://patchwork.freedesktop.org/series/121745/

> Lucas De Marchi
> 
> > 
> > Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> > ---
> > drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c  |   8 +-
> > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c   |   3 +-
> > drivers/gpu/drm/amd/amdgpu/amdgpu_job.c      |   2 +-
> > drivers/gpu/drm/etnaviv/etnaviv_sched.c      |   6 +-
> > drivers/gpu/drm/lima/lima_sched.c            |   6 +-
> > drivers/gpu/drm/msm/adreno/adreno_device.c   |   4 +-
> > drivers/gpu/drm/msm/msm_ringbuffer.c         |   5 +-
> > drivers/gpu/drm/nouveau/nouveau_sched.c      |   6 +-
> > drivers/gpu/drm/panfrost/panfrost_job.c      |   6 +-
> > drivers/gpu/drm/scheduler/sched_entity.c     |  97 +---
> > drivers/gpu/drm/scheduler/sched_fence.c      |   2 +-
> > drivers/gpu/drm/scheduler/sched_main.c       | 556 +++++++++----------
> > drivers/gpu/drm/v3d/v3d_sched.c              |  27 +-
> > drivers/gpu/drm/xe/Makefile                  |   1 +
> > drivers/gpu/drm/xe/xe_exec_queue_types.h     |   3 +
> > drivers/gpu/drm/xe/xe_execlist.c             |   5 +-
> > drivers/gpu/drm/xe/xe_gpu_scheduler.c        | 101 ++++
> > drivers/gpu/drm/xe/xe_gpu_scheduler.h        |  73 +++
> > drivers/gpu/drm/xe/xe_gpu_scheduler_types.h  |  58 ++
> > drivers/gpu/drm/xe/xe_guc_exec_queue_types.h |   8 +-
> > drivers/gpu/drm/xe/xe_guc_submit.c           | 148 +++--
> > drivers/gpu/drm/xe/xe_migrate.c              |   2 +-
> > drivers/gpu/drm/xe/xe_trace.h                |  13 +-
> > include/drm/gpu_scheduler.h                  |  89 +--
> > 24 files changed, 688 insertions(+), 541 deletions(-)
> > create mode 100644 drivers/gpu/drm/xe/xe_gpu_scheduler.c
> > create mode 100644 drivers/gpu/drm/xe/xe_gpu_scheduler.h
> > create mode 100644 drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
> > 
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> > index 78623eaeb90d..411187e7aef6 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
> > @@ -1661,7 +1661,7 @@ static int amdgpu_debugfs_test_ib_show(struct seq_file *m, void *unused)
> > 
> > 		if (!ring || !ring->sched.ready)
> > 			continue;
> > -		drm_sched_run_wq_stop(&ring->sched);
> > +		drm_sched_wqueue_stop(&ring->sched);
> > 	}
> > 
> > 	seq_puts(m, "run ib test:\n");
> > @@ -1677,7 +1677,7 @@ static int amdgpu_debugfs_test_ib_show(struct seq_file *m, void *unused)
> > 
> > 		if (!ring || !ring->sched.ready)
> > 			continue;
> > -		drm_sched_run_wq_start(&ring->sched);
> > +		drm_sched_wqueue_start(&ring->sched);
> > 	}
> > 
> > 	up_write(&adev->reset_domain->sem);
> > @@ -1915,7 +1915,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
> > 		goto pro_end;
> > 
> > 	/* stop the scheduler */
> > -	drm_sched_run_wq_stop(&ring->sched);
> > +	drm_sched_wqueue_stop(&ring->sched);
> > 
> > 	/* preempt the IB */
> > 	r = amdgpu_ring_preempt_ib(ring);
> > @@ -1949,7 +1949,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
> > 
> > failure:
> > 	/* restart the scheduler */
> > -	drm_sched_run_wq_start(&ring->sched);
> > +	drm_sched_wqueue_start(&ring->sched);
> > 
> > 	up_read(&adev->reset_domain->sem);
> > 
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > index 501a7f71bcb6..950dc8e498f2 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > @@ -2279,11 +2279,10 @@ static int amdgpu_device_init_schedulers(struct amdgpu_device *adev)
> > 			break;
> > 		}
> > 
> > -		r = drm_sched_init(&ring->sched, &amdgpu_sched_ops, NULL,
> > +		r = drm_sched_init(&ring->sched, &amdgpu_sched_ops, 1, NULL,
> > 				   ring->num_hw_submission, 0,
> > 				   timeout, adev->reset_domain->wq,
> > 				   ring->sched_score, ring->name,
> > -				   DRM_SCHED_POLICY_DEFAULT,
> > 				   adev->dev);
> > 		if (r) {
> > 			DRM_ERROR("Failed to create scheduler on ring %s.\n",
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> > index 78476bc75b4e..b3e199c3fd72 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> > @@ -326,7 +326,7 @@ void amdgpu_job_stop_all_jobs_on_sched(struct drm_gpu_scheduler *sched)
> > 
> > 	/* Signal all jobs not yet scheduled */
> > 	for (i = DRM_SCHED_PRIORITY_COUNT - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
> > -		struct drm_sched_rq *rq = &sched->sched_rq[i];
> > +		struct drm_sched_rq *rq = sched->sched_rq[i];
> > 		spin_lock(&rq->lock);
> > 		list_for_each_entry(s_entity, &rq->entities, list) {
> > 			while ((s_job = to_drm_sched_job(spsc_queue_pop(&s_entity->job_queue)))) {
> > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_sched.c b/drivers/gpu/drm/etnaviv/etnaviv_sched.c
> > index 3646f995ca94..396334984e4d 100644
> > --- a/drivers/gpu/drm/etnaviv/etnaviv_sched.c
> > +++ b/drivers/gpu/drm/etnaviv/etnaviv_sched.c
> > @@ -134,11 +134,11 @@ int etnaviv_sched_init(struct etnaviv_gpu *gpu)
> > {
> > 	int ret;
> > 
> > -	ret = drm_sched_init(&gpu->sched, &etnaviv_sched_ops, NULL,
> > +	ret = drm_sched_init(&gpu->sched, &etnaviv_sched_ops,
> > +			     DRM_SCHED_PRIORITY_COUNT, NULL,
> > 			     etnaviv_hw_jobs_limit, etnaviv_job_hang_limit,
> > 			     msecs_to_jiffies(500), NULL, NULL,
> > -			     dev_name(gpu->dev), DRM_SCHED_POLICY_DEFAULT,
> > -			     gpu->dev);
> > +			     dev_name(gpu->dev), gpu->dev);
> > 	if (ret)
> > 		return ret;
> > 
> > diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_sched.c
> > index 465d4bf3882b..23a6276f1332 100644
> > --- a/drivers/gpu/drm/lima/lima_sched.c
> > +++ b/drivers/gpu/drm/lima/lima_sched.c
> > @@ -488,11 +488,11 @@ int lima_sched_pipe_init(struct lima_sched_pipe *pipe, const char *name)
> > 
> > 	INIT_WORK(&pipe->recover_work, lima_sched_recover_work);
> > 
> > -	return drm_sched_init(&pipe->base, &lima_sched_ops, NULL, 1,
> > +	return drm_sched_init(&pipe->base, &lima_sched_ops,
> > +			      DRM_SCHED_PRIORITY_COUNT, NULL, 1,
> > 			      lima_job_hang_limit,
> > 			      msecs_to_jiffies(timeout), NULL,
> > -			      NULL, name, DRM_SCHED_POLICY_DEFAULT,
> > -			      pipe->ldev->dev);
> > +			      NULL, name, pipe->ldev->dev);
> > }
> > 
> > void lima_sched_pipe_fini(struct lima_sched_pipe *pipe)
> > diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c
> > index 3891b629248c..223b5af1f93b 100644
> > --- a/drivers/gpu/drm/msm/adreno/adreno_device.c
> > +++ b/drivers/gpu/drm/msm/adreno/adreno_device.c
> > @@ -809,7 +809,7 @@ static void suspend_scheduler(struct msm_gpu *gpu)
> > 	 */
> > 	for (i = 0; i < gpu->nr_rings; i++) {
> > 		struct drm_gpu_scheduler *sched = &gpu->rb[i]->sched;
> > -		drm_sched_run_wq_stop(sched);
> > +		drm_sched_wqueue_stop(sched);
> > 	}
> > }
> > 
> > @@ -819,7 +819,7 @@ static void resume_scheduler(struct msm_gpu *gpu)
> > 
> > 	for (i = 0; i < gpu->nr_rings; i++) {
> > 		struct drm_gpu_scheduler *sched = &gpu->rb[i]->sched;
> > -		drm_sched_run_wq_start(sched);
> > +		drm_sched_wqueue_start(sched);
> > 	}
> > }
> > 
> > diff --git a/drivers/gpu/drm/msm/msm_ringbuffer.c b/drivers/gpu/drm/msm/msm_ringbuffer.c
> > index 813bff7f0c8f..935154979fc2 100644
> > --- a/drivers/gpu/drm/msm/msm_ringbuffer.c
> > +++ b/drivers/gpu/drm/msm/msm_ringbuffer.c
> > @@ -94,10 +94,11 @@ struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int id,
> > 	 /* currently managing hangcheck ourselves: */
> > 	sched_timeout = MAX_SCHEDULE_TIMEOUT;
> > 
> > -	ret = drm_sched_init(&ring->sched, &msm_sched_ops, NULL,
> > +	ret = drm_sched_init(&ring->sched, &msm_sched_ops,
> > +			     DRM_SCHED_PRIORITY_COUNT, NULL,
> > 			     num_hw_submissions, 0, sched_timeout,
> > 			     NULL, NULL, to_msm_bo(ring->bo)->name,
> > -			     DRM_SCHED_POLICY_DEFAULT, gpu->dev->dev);
> > +			     gpu->dev->dev);
> > 	if (ret) {
> > 		goto fail;
> > 	}
> > diff --git a/drivers/gpu/drm/nouveau/nouveau_sched.c b/drivers/gpu/drm/nouveau/nouveau_sched.c
> > index 3cb0033dccf9..82104380d243 100644
> > --- a/drivers/gpu/drm/nouveau/nouveau_sched.c
> > +++ b/drivers/gpu/drm/nouveau/nouveau_sched.c
> > @@ -435,10 +435,10 @@ int nouveau_sched_init(struct nouveau_drm *drm)
> > 	if (!drm->sched_wq)
> > 		return -ENOMEM;
> > 
> > -	return drm_sched_init(sched, &nouveau_sched_ops, NULL,
> > +	return drm_sched_init(sched, &nouveau_sched_ops,
> > +			      DRM_SCHED_PRIORITY_COUNT, NULL,
> > 			      NOUVEAU_SCHED_HW_SUBMISSIONS, 0, job_hang_limit,
> > -			      NULL, NULL, "nouveau_sched",
> > -			      DRM_SCHED_POLICY_DEFAULT, drm->dev->dev);
> > +			      NULL, NULL, "nouveau_sched", drm->dev->dev);
> > }
> > 
> > void nouveau_sched_fini(struct nouveau_drm *drm)
> > diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c
> > index ad36bf3a4699..e33d4398da8e 100644
> > --- a/drivers/gpu/drm/panfrost/panfrost_job.c
> > +++ b/drivers/gpu/drm/panfrost/panfrost_job.c
> > @@ -831,12 +831,12 @@ int panfrost_job_init(struct panfrost_device *pfdev)
> > 		js->queue[j].fence_context = dma_fence_context_alloc(1);
> > 
> > 		ret = drm_sched_init(&js->queue[j].sched,
> > -				     &panfrost_sched_ops, NULL,
> > +				     &panfrost_sched_ops,
> > +				     DRM_SCHED_PRIORITY_COUNT, NULL,
> > 				     nentries, 0,
> > 				     msecs_to_jiffies(JOB_TIMEOUT_MS),
> > 				     pfdev->reset.wq,
> > -				     NULL, "pan_js", DRM_SCHED_POLICY_DEFAULT,
> > -				     pfdev->dev);
> > +				     NULL, "pan_js", pfdev->dev);
> > 		if (ret) {
> > 			dev_err(pfdev->dev, "Failed to create scheduler: %d.", ret);
> > 			goto err_sched;
> > diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
> > index 1dec97caaba3..409e4256f6e7 100644
> > --- a/drivers/gpu/drm/scheduler/sched_entity.c
> > +++ b/drivers/gpu/drm/scheduler/sched_entity.c
> > @@ -33,20 +33,6 @@
> > #define to_drm_sched_job(sched_job)		\
> > 		container_of((sched_job), struct drm_sched_job, queue_node)
> > 
> > -static bool bad_policies(struct drm_gpu_scheduler **sched_list,
> > -			 unsigned int num_sched_list)
> > -{
> > -	enum drm_sched_policy sched_policy = sched_list[0]->sched_policy;
> > -	unsigned int i;
> > -
> > -	/* All schedule policies must match */
> > -	for (i = 1; i < num_sched_list; ++i)
> > -		if (sched_policy != sched_list[i]->sched_policy)
> > -			return true;
> > -
> > -	return false;
> > -}
> > -
> > /**
> >  * drm_sched_entity_init - Init a context entity used by scheduler when
> >  * submit to HW ring.
> > @@ -76,14 +62,12 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
> > 			  unsigned int num_sched_list,
> > 			  atomic_t *guilty)
> > {
> > -	if (!(entity && sched_list && (num_sched_list == 0 || sched_list[0])) ||
> > -	    bad_policies(sched_list, num_sched_list))
> > +	if (!(entity && sched_list && (num_sched_list == 0 || sched_list[0])))
> > 		return -EINVAL;
> > 
> > 	memset(entity, 0, sizeof(struct drm_sched_entity));
> > 	INIT_LIST_HEAD(&entity->list);
> > 	entity->rq = NULL;
> > -	entity->single_sched = NULL;
> > 	entity->guilty = guilty;
> > 	entity->num_sched_list = num_sched_list;
> > 	entity->priority = priority;
> > @@ -91,16 +75,19 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
> > 	RCU_INIT_POINTER(entity->last_scheduled, NULL);
> > 	RB_CLEAR_NODE(&entity->rb_tree_node);
> > 
> > -	if (num_sched_list) {
> > -		if (sched_list[0]->sched_policy !=
> > -		    DRM_SCHED_POLICY_SINGLE_ENTITY) {
> > -			entity->rq = &sched_list[0]->sched_rq[entity->priority];
> > -		} else {
> > -			if (num_sched_list != 1 || sched_list[0]->single_entity)
> > -				return -EINVAL;
> > -			sched_list[0]->single_entity = entity;
> > -			entity->single_sched = sched_list[0];
> > -		}
> > +	if (!sched_list[0]->sched_rq) {
> > +		/* Warn drivers not to do this and to fix their DRM
> > +		 * calling order.
> > +		 */
> > +		pr_warn("%s: called with uninitialized scheduler\n", __func__);
> > +	} else if (num_sched_list) {
> > +		/* The "priority" of an entity cannot exceed the number
> > +		 * of run-queues of a scheduler.
> > +		 */
> > +		if (entity->priority >= sched_list[0]->num_rqs)
> > +			entity->priority = max_t(u32, sched_list[0]->num_rqs,
> > +						 DRM_SCHED_PRIORITY_MIN);
> > +		entity->rq = sched_list[0]->sched_rq[entity->priority];
> > 	}
> > 
> > 	init_completion(&entity->entity_idle);
> > @@ -134,8 +121,7 @@ void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
> > 				    struct drm_gpu_scheduler **sched_list,
> > 				    unsigned int num_sched_list)
> > {
> > -	WARN_ON(!num_sched_list || !sched_list ||
> > -		!!entity->single_sched);
> > +	WARN_ON(!num_sched_list || !sched_list);
> > 
> > 	entity->sched_list = sched_list;
> > 	entity->num_sched_list = num_sched_list;
> > @@ -242,15 +228,13 @@ static void drm_sched_entity_kill(struct drm_sched_entity *entity)
> > {
> > 	struct drm_sched_job *job;
> > 	struct dma_fence *prev;
> > -	bool single_entity = !!entity->single_sched;
> > 
> > -	if (!entity->rq && !single_entity)
> > +	if (!entity->rq)
> > 		return;
> > 
> > 	spin_lock(&entity->rq_lock);
> > 	entity->stopped = true;
> > -	if (!single_entity)
> > -		drm_sched_rq_remove_entity(entity->rq, entity);
> > +	drm_sched_rq_remove_entity(entity->rq, entity);
> > 	spin_unlock(&entity->rq_lock);
> > 
> > 	/* Make sure this entity is not used by the scheduler at the moment */
> > @@ -272,20 +256,6 @@ static void drm_sched_entity_kill(struct drm_sched_entity *entity)
> > 	dma_fence_put(prev);
> > }
> > 
> > -/**
> > - * drm_sched_entity_to_scheduler - Schedule entity to GPU scheduler
> > - * @entity: scheduler entity
> > - *
> > - * Returns GPU scheduler for the entity
> > - */
> > -struct drm_gpu_scheduler *
> > -drm_sched_entity_to_scheduler(struct drm_sched_entity *entity)
> > -{
> > -	bool single_entity = !!entity->single_sched;
> > -
> > -	return single_entity ? entity->single_sched : entity->rq->sched;
> > -}
> > -
> > /**
> >  * drm_sched_entity_flush - Flush a context entity
> >  *
> > @@ -303,12 +273,11 @@ long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout)
> > 	struct drm_gpu_scheduler *sched;
> > 	struct task_struct *last_user;
> > 	long ret = timeout;
> > -	bool single_entity = !!entity->single_sched;
> > 
> > -	if (!entity->rq && !single_entity)
> > +	if (!entity->rq)
> > 		return 0;
> > 
> > -	sched = drm_sched_entity_to_scheduler(entity);
> > +	sched = entity->rq->sched;
> > 	/**
> > 	 * The client will not queue more IBs during this fini, consume existing
> > 	 * queued IBs or discard them on SIGKILL
> > @@ -401,7 +370,7 @@ static void drm_sched_entity_wakeup(struct dma_fence *f,
> > 		container_of(cb, struct drm_sched_entity, cb);
> > 
> > 	drm_sched_entity_clear_dep(f, cb);
> > -	drm_sched_wakeup_if_can_queue(drm_sched_entity_to_scheduler(entity));
> > +	drm_sched_wakeup_if_can_queue(entity->rq->sched);
> > }
> > 
> > /**
> > @@ -415,8 +384,6 @@ static void drm_sched_entity_wakeup(struct dma_fence *f,
> > void drm_sched_entity_set_priority(struct drm_sched_entity *entity,
> > 				   enum drm_sched_priority priority)
> > {
> > -	WARN_ON(!!entity->single_sched);
> > -
> > 	spin_lock(&entity->rq_lock);
> > 	entity->priority = priority;
> > 	spin_unlock(&entity->rq_lock);
> > @@ -429,7 +396,7 @@ EXPORT_SYMBOL(drm_sched_entity_set_priority);
> >  */
> > static bool drm_sched_entity_add_dependency_cb(struct drm_sched_entity *entity)
> > {
> > -	struct drm_gpu_scheduler *sched = drm_sched_entity_to_scheduler(entity);
> > +	struct drm_gpu_scheduler *sched = entity->rq->sched;
> > 	struct dma_fence *fence = entity->dependency;
> > 	struct drm_sched_fence *s_fence;
> > 
> > @@ -531,8 +498,7 @@ struct drm_sched_job *drm_sched_entity_pop_job(struct drm_sched_entity *entity)
> > 	 * Update the entity's location in the min heap according to
> > 	 * the timestamp of the next job, if any.
> > 	 */
> > -	if (drm_sched_entity_to_scheduler(entity)->sched_policy ==
> > -	    DRM_SCHED_POLICY_FIFO) {
> > +	if (drm_sched_policy == DRM_SCHED_POLICY_FIFO) {
> > 		struct drm_sched_job *next;
> > 
> > 		next = to_drm_sched_job(spsc_queue_peek(&entity->job_queue));
> > @@ -555,8 +521,6 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
> > 	struct drm_gpu_scheduler *sched;
> > 	struct drm_sched_rq *rq;
> > 
> > -	WARN_ON(!!entity->single_sched);
> > -
> > 	/* single possible engine and already selected */
> > 	if (!entity->sched_list)
> > 		return;
> > @@ -581,7 +545,7 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
> > 
> > 	spin_lock(&entity->rq_lock);
> > 	sched = drm_sched_pick_best(entity->sched_list, entity->num_sched_list);
> > -	rq = sched ? &sched->sched_rq[entity->priority] : NULL;
> > +	rq = sched ? sched->sched_rq[entity->priority] : NULL;
> > 	if (rq != entity->rq) {
> > 		drm_sched_rq_remove_entity(entity->rq, entity);
> > 		entity->rq = rq;
> > @@ -606,13 +570,11 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
> > void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
> > {
> > 	struct drm_sched_entity *entity = sched_job->entity;
> > -	bool single_entity = !!entity->single_sched;
> > 	bool first;
> > 	ktime_t submit_ts;
> > 
> > 	trace_drm_sched_job(sched_job, entity);
> > -	if (!single_entity)
> > -		atomic_inc(entity->rq->sched->score);
> > +	atomic_inc(entity->rq->sched->score);
> > 	WRITE_ONCE(entity->last_user, current->group_leader);
> > 
> > 	/*
> > @@ -625,10 +587,6 @@ void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
> > 
> > 	/* first job wakes up scheduler */
> > 	if (first) {
> > -		struct drm_gpu_scheduler *sched =
> > -			drm_sched_entity_to_scheduler(entity);
> > -		bool fifo = sched->sched_policy == DRM_SCHED_POLICY_FIFO;
> > -
> > 		/* Add the entity to the run queue */
> > 		spin_lock(&entity->rq_lock);
> > 		if (entity->stopped) {
> > @@ -638,14 +596,13 @@ void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
> > 			return;
> > 		}
> > 
> > -		if (!single_entity)
> > -			drm_sched_rq_add_entity(entity->rq, entity);
> > +		drm_sched_rq_add_entity(entity->rq, entity);
> > 		spin_unlock(&entity->rq_lock);
> > 
> > -		if (fifo)
> > +		if (drm_sched_policy == DRM_SCHED_POLICY_FIFO)
> > 			drm_sched_rq_update_fifo(entity, submit_ts);
> > 
> > -		drm_sched_wakeup_if_can_queue(sched);
> > +		drm_sched_wakeup_if_can_queue(entity->rq->sched);
> > 	}
> > }
> > EXPORT_SYMBOL(drm_sched_entity_push_job);
> > diff --git a/drivers/gpu/drm/scheduler/sched_fence.c b/drivers/gpu/drm/scheduler/sched_fence.c
> > index f6b926f5e188..06cedfe4b486 100644
> > --- a/drivers/gpu/drm/scheduler/sched_fence.c
> > +++ b/drivers/gpu/drm/scheduler/sched_fence.c
> > @@ -225,7 +225,7 @@ void drm_sched_fence_init(struct drm_sched_fence *fence,
> > {
> > 	unsigned seq;
> > 
> > -	fence->sched = drm_sched_entity_to_scheduler(entity);
> > +	fence->sched = entity->rq->sched;
> > 	seq = atomic_inc_return(&entity->fence_seq);
> > 	dma_fence_init(&fence->scheduled, &drm_sched_fence_ops_scheduled,
> > 		       &fence->lock, entity->fence_context, seq);
> > diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
> > index 0626aa6f7b70..ebea02526a7a 100644
> > --- a/drivers/gpu/drm/scheduler/sched_main.c
> > +++ b/drivers/gpu/drm/scheduler/sched_main.c
> > @@ -32,8 +32,7 @@
> >  * backend operations to the scheduler like submitting a job to hardware run queue,
> >  * returning the dependencies of a job etc.
> >  *
> > - * The organisation of the scheduler is the following for scheduling policies
> > - * DRM_SCHED_POLICY_RR and DRM_SCHED_POLICY_FIFO:
> > + * The organisation of the scheduler is the following:
> >  *
> >  * 1. Each hw run queue has one scheduler
> >  * 2. Each scheduler has multiple run queues with different priorities
> > @@ -42,22 +41,7 @@
> >  * 4. Entities themselves maintain a queue of jobs that will be scheduled on
> >  *    the hardware.
> >  *
> > - * The organisation of the scheduler is the following for scheduling policy
> > - * DRM_SCHED_POLICY_SINGLE_ENTITY:
> > - *
> > - * 1. One to one relationship between scheduler and entity
> > - * 2. No priorities implemented per scheduler (single job queue)
> > - * 3. No run queues in scheduler rather jobs are directly dequeued from entity
> > - * 4. The entity maintains a queue of jobs that will be scheduled on the
> > - * hardware
> > - *
> > - * The jobs in a entity are always scheduled in the order that they were pushed
> > - * regardless of scheduling policy.
> > - *
> > - * A policy of DRM_SCHED_POLICY_RR or DRM_SCHED_POLICY_FIFO is expected to used
> > - * when the KMD is scheduling directly on the hardware while a scheduling policy
> > - * of DRM_SCHED_POLICY_SINGLE_ENTITY is expected to be used when there is a
> > - * firmware scheduler.
> > + * The jobs in a entity are always scheduled in the order that they were pushed.
> >  *
> >  * Note that once a job was taken from the entities queue and pushed to the
> >  * hardware, i.e. the pending queue, the entity must not be referenced anymore
> > @@ -82,14 +66,14 @@
> > #define to_drm_sched_job(sched_job)		\
> > 		container_of((sched_job), struct drm_sched_job, queue_node)
> > 
> > -int default_drm_sched_policy = DRM_SCHED_POLICY_FIFO;
> > +int drm_sched_policy = DRM_SCHED_POLICY_FIFO;
> > 
> > /**
> >  * DOC: sched_policy (int)
> >  * Used to override default entities scheduling policy in a run queue.
> >  */
> > -MODULE_PARM_DESC(sched_policy, "Specify the default scheduling policy for entities on a run-queue, " __stringify(DRM_SCHED_POLICY_RR) " = Round Robin, " __stringify(DRM_SCHED_POLICY_FIFO) " = FIFO (default).");
> > -module_param_named(sched_policy, default_drm_sched_policy, int, 0444);
> > +MODULE_PARM_DESC(sched_policy, "Specify the scheduling policy for entities on a run-queue, " __stringify(DRM_SCHED_POLICY_RR) " = Round Robin, " __stringify(DRM_SCHED_POLICY_FIFO) " = FIFO (default).");
> > +module_param_named(sched_policy, drm_sched_policy, int, 0444);
> > 
> > static __always_inline bool drm_sched_entity_compare_before(struct rb_node *a,
> > 							    const struct rb_node *b)
> > @@ -112,8 +96,6 @@ static inline void drm_sched_rq_remove_fifo_locked(struct drm_sched_entity *enti
> > 
> > void drm_sched_rq_update_fifo(struct drm_sched_entity *entity, ktime_t ts)
> > {
> > -	WARN_ON(!!entity->single_sched);
> > -
> > 	/*
> > 	 * Both locks need to be grabbed, one to protect from entity->rq change
> > 	 * for entity from within concurrent drm_sched_entity_select_rq and the
> > @@ -144,8 +126,6 @@ void drm_sched_rq_update_fifo(struct drm_sched_entity *entity, ktime_t ts)
> > static void drm_sched_rq_init(struct drm_gpu_scheduler *sched,
> > 			      struct drm_sched_rq *rq)
> > {
> > -	WARN_ON(sched->sched_policy == DRM_SCHED_POLICY_SINGLE_ENTITY);
> > -
> > 	spin_lock_init(&rq->lock);
> > 	INIT_LIST_HEAD(&rq->entities);
> > 	rq->rb_tree_root = RB_ROOT_CACHED;
> > @@ -164,8 +144,6 @@ static void drm_sched_rq_init(struct drm_gpu_scheduler *sched,
> > void drm_sched_rq_add_entity(struct drm_sched_rq *rq,
> > 			     struct drm_sched_entity *entity)
> > {
> > -	WARN_ON(!!entity->single_sched);
> > -
> > 	if (!list_empty(&entity->list))
> > 		return;
> > 
> > @@ -188,8 +166,6 @@ void drm_sched_rq_add_entity(struct drm_sched_rq *rq,
> > void drm_sched_rq_remove_entity(struct drm_sched_rq *rq,
> > 				struct drm_sched_entity *entity)
> > {
> > -	WARN_ON(!!entity->single_sched);
> > -
> > 	if (list_empty(&entity->list))
> > 		return;
> > 
> > @@ -201,7 +177,7 @@ void drm_sched_rq_remove_entity(struct drm_sched_rq *rq,
> > 	if (rq->current_entity == entity)
> > 		rq->current_entity = NULL;
> > 
> > -	if (rq->sched->sched_policy == DRM_SCHED_POLICY_FIFO)
> > +	if (drm_sched_policy == DRM_SCHED_POLICY_FIFO)
> > 		drm_sched_rq_remove_fifo_locked(entity);
> > 
> > 	spin_unlock(&rq->lock);
> > @@ -280,50 +256,90 @@ drm_sched_rq_select_entity_fifo(struct drm_sched_rq *rq)
> > }
> > 
> > /**
> > - * drm_sched_run_wq_stop - stop scheduler run worker
> > - *
> > - * @sched: scheduler instance to stop run worker
> > + * drm_sched_run_job_queue - enqueue scheduler submission
> > + * drm_sched_run_job_queue - enqueue run-job work
> > + * @sched: scheduler instance
> >  */
> > -void drm_sched_run_wq_stop(struct drm_gpu_scheduler *sched)
> > +static void drm_sched_run_job_queue(struct drm_gpu_scheduler *sched)
> > {
> > -	sched->pause_run_wq = true;
> > -	smp_wmb();
> > +	if (!READ_ONCE(sched->pause_submit))
> > +		queue_work(sched->submit_wq, &sched->work_run_job);
> > +}
> > 
> > -	cancel_work_sync(&sched->work_run);
> > +/**
> > + * drm_sched_can_queue -- Can we queue more to the hardware?
> > + * @sched: scheduler instance
> > + *
> > + * Return true if we can push more jobs to the hw, otherwise false.
> > + */
> > +static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched)
> > +{
> > +	return atomic_read(&sched->hw_rq_count) <
> > +		sched->hw_submission_limit;
> > }
> > -EXPORT_SYMBOL(drm_sched_run_wq_stop);
> > 
> > /**
> > - * drm_sched_run_wq_start - start scheduler run worker
> > + * drm_sched_select_entity - Select next entity to process
> >  *
> > - * @sched: scheduler instance to start run worker
> > + * @sched: scheduler instance
> > + *
> > + * Returns the entity to process or NULL if none are found.
> >  */
> > -void drm_sched_run_wq_start(struct drm_gpu_scheduler *sched)
> > +static struct drm_sched_entity *
> > +drm_sched_select_entity(struct drm_gpu_scheduler *sched)
> > {
> > -	sched->pause_run_wq = false;
> > -	smp_wmb();
> > +	struct drm_sched_entity *entity;
> > +	int i;
> > +
> > +	if (!drm_sched_can_queue(sched))
> > +		return NULL;
> > 
> > -	queue_work(sched->run_wq, &sched->work_run);
> > +	/* Kernel run queue has higher priority than normal run queue*/
> > +	for (i = sched->num_rqs - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
> > +		entity = drm_sched_policy == DRM_SCHED_POLICY_FIFO ?
> > +			drm_sched_rq_select_entity_fifo(sched->sched_rq[i]) :
> > +			drm_sched_rq_select_entity_rr(sched->sched_rq[i]);
> > +		if (entity)
> > +			break;
> > +	}
> > +
> > +	return entity;
> > }
> > -EXPORT_SYMBOL(drm_sched_run_wq_start);
> > 
> > /**
> > - * drm_sched_run_wq_queue - queue scheduler run worker
> > - *
> > - * @sched: scheduler instance to queue run worker
> > + * drm_sched_run_job_queue_if_ready - enqueue run-job work if ready
> > + * @sched: scheduler instance
> > + */
> > +static void drm_sched_run_job_queue_if_ready(struct drm_gpu_scheduler *sched)
> > +{
> > +	if (drm_sched_select_entity(sched))
> > +		drm_sched_run_job_queue(sched);
> > +}
> > +
> > +/**
> > + * drm_sched_free_job_queue - enqueue free-job work
> > + * @sched: scheduler instance
> >  */
> > -static void drm_sched_run_wq_queue(struct drm_gpu_scheduler *sched)
> > +static void drm_sched_free_job_queue(struct drm_gpu_scheduler *sched)
> > {
> > -	smp_rmb();
> > +	if (!READ_ONCE(sched->pause_submit))
> > +		queue_work(sched->submit_wq, &sched->work_free_job);
> > +}
> > 
> > -	/*
> > -	 * Try not to schedule work if pause_run_wq set but not the end of world
> > -	 * if we do as either it will be cancelled by the above
> > -	 * cancel_work_sync, or drm_sched_main turns into a NOP while
> > -	 * pause_run_wq is set.
> > -	 */
> > -	if (!sched->pause_run_wq)
> > -		queue_work(sched->run_wq, &sched->work_run);
> > +/**
> > + * drm_sched_free_job_queue_if_done - enqueue free-job work if ready
> > + * @sched: scheduler instance
> > + */
> > +static void drm_sched_free_job_queue_if_done(struct drm_gpu_scheduler *sched)
> > +{
> > +	struct drm_sched_job *job;
> > +
> > +	spin_lock(&sched->job_list_lock);
> > +	job = list_first_entry_or_null(&sched->pending_list,
> > +				       struct drm_sched_job, list);
> > +	if (job && dma_fence_is_signaled(&job->s_fence->finished))
> > +		drm_sched_free_job_queue(sched);
> > +	spin_unlock(&sched->job_list_lock);
> > }
> > 
> > /**
> > @@ -345,7 +361,7 @@ static void drm_sched_job_done(struct drm_sched_job *s_job, int result)
> > 	dma_fence_get(&s_fence->finished);
> > 	drm_sched_fence_finished(s_fence, result);
> > 	dma_fence_put(&s_fence->finished);
> > -	drm_sched_run_wq_queue(sched);
> > +	drm_sched_free_job_queue(sched);
> > }
> > 
> > /**
> > @@ -369,28 +385,35 @@ static void drm_sched_job_done_cb(struct dma_fence *f, struct dma_fence_cb *cb)
> >  */
> > static void drm_sched_start_timeout(struct drm_gpu_scheduler *sched)
> > {
> > +	lockdep_assert_held(&sched->job_list_lock);
> > +
> > 	if (sched->timeout != MAX_SCHEDULE_TIMEOUT &&
> > 	    !list_empty(&sched->pending_list))
> > -		queue_delayed_work(sched->timeout_wq, &sched->work_tdr, sched->timeout);
> > +		mod_delayed_work(sched->timeout_wq, &sched->work_tdr, sched->timeout);
> > +}
> > +
> > +static void drm_sched_start_timeout_unlocked(struct drm_gpu_scheduler *sched)
> > +{
> > +	spin_lock(&sched->job_list_lock);
> > +	drm_sched_start_timeout(sched);
> > +	spin_unlock(&sched->job_list_lock);
> > }
> > 
> > /**
> > - * drm_sched_set_timeout - set timeout for reset worker
> > + * drm_sched_tdr_queue_imm: - immediately start job timeout handler
> >  *
> > - * @sched: scheduler instance to set and (re)-start the worker for
> > - * @timeout: timeout period
> > + * @sched: scheduler for which the timeout handling should be started.
> >  *
> > - * Set and (re)-start the timeout for the given scheduler.
> > + * Start timeout handling immediately for the named scheduler.
> >  */
> > -void drm_sched_set_timeout(struct drm_gpu_scheduler *sched, long timeout)
> > +void drm_sched_tdr_queue_imm(struct drm_gpu_scheduler *sched)
> > {
> > 	spin_lock(&sched->job_list_lock);
> > -	sched->timeout = timeout;
> > -	cancel_delayed_work(&sched->work_tdr);
> > +	sched->timeout = 0;
> > 	drm_sched_start_timeout(sched);
> > 	spin_unlock(&sched->job_list_lock);
> > }
> > -EXPORT_SYMBOL(drm_sched_set_timeout);
> > +EXPORT_SYMBOL(drm_sched_tdr_queue_imm);
> > 
> > /**
> >  * drm_sched_fault - immediately start timeout handler
> > @@ -504,11 +527,8 @@ static void drm_sched_job_timedout(struct work_struct *work)
> > 		spin_unlock(&sched->job_list_lock);
> > 	}
> > 
> > -	if (status != DRM_GPU_SCHED_STAT_ENODEV) {
> > -		spin_lock(&sched->job_list_lock);
> > -		drm_sched_start_timeout(sched);
> > -		spin_unlock(&sched->job_list_lock);
> > -	}
> > +	if (status != DRM_GPU_SCHED_STAT_ENODEV)
> > +		drm_sched_start_timeout_unlocked(sched);
> > }
> > 
> > /**
> > @@ -527,7 +547,7 @@ void drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad)
> > {
> > 	struct drm_sched_job *s_job, *tmp;
> > 
> > -	drm_sched_run_wq_stop(sched);
> > +	drm_sched_wqueue_stop(sched);
> > 
> > 	/*
> > 	 * Reinsert back the bad job here - now it's safe as
> > @@ -629,18 +649,15 @@ void drm_sched_start(struct drm_gpu_scheduler *sched, bool full_recovery)
> > 				drm_sched_job_done(s_job, fence->error);
> > 			else if (r)
> > 				DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n",
> > -					  r);
> > +					      r);
> > 		} else
> > 			drm_sched_job_done(s_job, -ECANCELED);
> > 	}
> > 
> > -	drm_sched_run_wq_start(sched);
> > +	if (full_recovery)
> > +		drm_sched_start_timeout_unlocked(sched);
> > 
> > -	if (full_recovery) {
> > -		spin_lock(&sched->job_list_lock);
> > -		drm_sched_start_timeout(sched);
> > -		spin_unlock(&sched->job_list_lock);
> > -	}
> > +	drm_sched_wqueue_start(sched);
> > }
> > EXPORT_SYMBOL(drm_sched_start);
> > 
> > @@ -720,8 +737,14 @@ int drm_sched_job_init(struct drm_sched_job *job,
> > 		       struct drm_sched_entity *entity,
> > 		       void *owner)
> > {
> > -	if (!entity->rq && !entity->single_sched)
> > +	if (!entity->rq) {
> > +		/* This will most likely be followed by missing frames
> > +		 * or worse--a blank screen--leave a trail in the
> > +		 * logs, so this can be debugged easier.
> > +		 */
> > +		drm_err(job->sched, "%s: entity has no rq!\n", __func__);
> > 		return -ENOENT;
> > +	}
> > 
> > 	job->entity = entity;
> > 	job->s_fence = drm_sched_fence_alloc(entity, owner);
> > @@ -753,16 +776,13 @@ void drm_sched_job_arm(struct drm_sched_job *job)
> > {
> > 	struct drm_gpu_scheduler *sched;
> > 	struct drm_sched_entity *entity = job->entity;
> > -	bool single_entity = !!entity->single_sched;
> > 
> > 	BUG_ON(!entity);
> > -	if (!single_entity)
> > -		drm_sched_entity_select_rq(entity);
> > -	sched = drm_sched_entity_to_scheduler(entity);
> > +	drm_sched_entity_select_rq(entity);
> > +	sched = entity->rq->sched;
> > 
> > 	job->sched = sched;
> > -	if (!single_entity)
> > -		job->s_priority = entity->rq - sched->sched_rq;
> > +	job->s_priority = entity->priority;
> > 	job->id = atomic64_inc_return(&sched->job_id_count);
> > 
> > 	drm_sched_fence_init(job->s_fence, job->entity);
> > @@ -790,13 +810,6 @@ int drm_sched_job_add_dependency(struct drm_sched_job *job,
> > 	if (!fence)
> > 		return 0;
> > 
> > -	/* if it's a fence from us it's guaranteed to be earlier */
> > -	if (fence->context == job->entity->fence_context ||
> > -	    fence->context == job->entity->fence_context + 1) {
> > -		dma_fence_put(fence);
> > -		return 0;
> > -	}
> > -
> > 	/* Deduplicate if we already depend on a fence from the same context.
> > 	 * This lets the size of the array of deps scale with the number of
> > 	 * engines involved, rather than the number of BOs.
> > @@ -945,18 +958,6 @@ void drm_sched_job_cleanup(struct drm_sched_job *job)
> > }
> > EXPORT_SYMBOL(drm_sched_job_cleanup);
> > 
> > -/**
> > - * drm_sched_can_queue -- Can we queue more to the hardware?
> > - * @sched: scheduler instance
> > - *
> > - * Return true if we can push more jobs to the hw, otherwise false.
> > - */
> > -static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched)
> > -{
> > -	return atomic_read(&sched->hw_rq_count) <
> > -		sched->hw_submission_limit;
> > -}
> > -
> > /**
> >  * drm_sched_wakeup_if_can_queue - Wake up the scheduler
> >  * @sched: scheduler instance
> > @@ -966,42 +967,7 @@ static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched)
> > void drm_sched_wakeup_if_can_queue(struct drm_gpu_scheduler *sched)
> > {
> > 	if (drm_sched_can_queue(sched))
> > -		drm_sched_run_wq_queue(sched);
> > -}
> > -
> > -/**
> > - * drm_sched_select_entity - Select next entity to process
> > - *
> > - * @sched: scheduler instance
> > - *
> > - * Returns the entity to process or NULL if none are found.
> > - */
> > -static struct drm_sched_entity *
> > -drm_sched_select_entity(struct drm_gpu_scheduler *sched)
> > -{
> > -	struct drm_sched_entity *entity;
> > -	int i;
> > -
> > -	if (!drm_sched_can_queue(sched))
> > -		return NULL;
> > -
> > -	if (sched->single_entity) {
> > -		if (drm_sched_entity_is_ready(sched->single_entity))
> > -			return sched->single_entity;
> > -
> > -		return NULL;
> > -	}
> > -
> > -	/* Kernel run queue has higher priority than normal run queue*/
> > -	for (i = DRM_SCHED_PRIORITY_COUNT - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
> > -		entity = sched->sched_policy == DRM_SCHED_POLICY_FIFO ?
> > -			drm_sched_rq_select_entity_fifo(&sched->sched_rq[i]) :
> > -			drm_sched_rq_select_entity_rr(&sched->sched_rq[i]);
> > -		if (entity)
> > -			break;
> > -	}
> > -
> > -	return entity;
> > +		drm_sched_run_job_queue(sched);
> > }
> > 
> > /**
> > @@ -1033,8 +999,10 @@ drm_sched_get_cleanup_job(struct drm_gpu_scheduler *sched)
> > 						typeof(*next), list);
> > 
> > 		if (next) {
> > -			next->s_fence->scheduled.timestamp =
> > -				job->s_fence->finished.timestamp;
> > +			if (test_bit(DMA_FENCE_FLAG_TIMESTAMP_BIT,
> > +				     &next->s_fence->scheduled.flags))
> > +				next->s_fence->scheduled.timestamp =
> > +					job->s_fence->scheduled.timestamp;
> > 			/* start TO timer for next job */
> > 			drm_sched_start_timeout(sched);
> > 		}
> > @@ -1084,125 +1052,83 @@ drm_sched_pick_best(struct drm_gpu_scheduler **sched_list,
> > EXPORT_SYMBOL(drm_sched_pick_best);
> > 
> > /**
> > - * drm_sched_add_msg - add scheduler message
> > + * drm_sched_free_job_work - worker to call free_job
> >  *
> > - * @sched: scheduler instance
> > - * @msg: message to be added
> > - *
> > - * Can and will pass an jobs waiting on dependencies or in a runnable queue.
> > - * Messages processing will stop if schedule run wq is stopped and resume when
> > - * run wq is started.
> > + * @w: free job work
> >  */
> > -void drm_sched_add_msg(struct drm_gpu_scheduler *sched,
> > -		       struct drm_sched_msg *msg)
> > +static void drm_sched_free_job_work(struct work_struct *w)
> > {
> > -	spin_lock(&sched->job_list_lock);
> > -	list_add_tail(&msg->link, &sched->msgs);
> > -	spin_unlock(&sched->job_list_lock);
> > +	struct drm_gpu_scheduler *sched =
> > +		container_of(w, struct drm_gpu_scheduler, work_free_job);
> > +	struct drm_sched_job *cleanup_job;
> > 
> > -	/*
> > -	 * Same as above in drm_sched_run_wq_queue, try to kick worker if
> > -	 * paused, harmless if this races
> > -	 */
> > -	if (!sched->pause_run_wq)
> > -		queue_work(sched->run_wq, &sched->work_run);
> > -}
> > -EXPORT_SYMBOL(drm_sched_add_msg);
> > +	if (READ_ONCE(sched->pause_submit))
> > +		return;
> > 
> > -/**
> > - * drm_sched_get_msg - get scheduler message
> > - *
> > - * @sched: scheduler instance
> > - *
> > - * Returns NULL or message
> > - */
> > -static struct drm_sched_msg *
> > -drm_sched_get_msg(struct drm_gpu_scheduler *sched)
> > -{
> > -	struct drm_sched_msg *msg;
> > +	cleanup_job = drm_sched_get_cleanup_job(sched);
> > +	if (cleanup_job) {
> > +		sched->ops->free_job(cleanup_job);
> > 
> > -	spin_lock(&sched->job_list_lock);
> > -	msg = list_first_entry_or_null(&sched->msgs,
> > -				       struct drm_sched_msg, link);
> > -	if (msg)
> > -		list_del(&msg->link);
> > -	spin_unlock(&sched->job_list_lock);
> > -
> > -	return msg;
> > +		drm_sched_free_job_queue_if_done(sched);
> > +		drm_sched_run_job_queue_if_ready(sched);
> > +	}
> > }
> > 
> > /**
> > - * drm_sched_main - main scheduler thread
> > + * drm_sched_run_job_work - worker to call run_job
> >  *
> > - * @param: scheduler instance
> > + * @w: run job work
> >  */
> > -static void drm_sched_main(struct work_struct *w)
> > +static void drm_sched_run_job_work(struct work_struct *w)
> > {
> > 	struct drm_gpu_scheduler *sched =
> > -		container_of(w, struct drm_gpu_scheduler, work_run);
> > +		container_of(w, struct drm_gpu_scheduler, work_run_job);
> > +	struct drm_sched_entity *entity;
> > +	struct dma_fence *fence;
> > +	struct drm_sched_fence *s_fence;
> > +	struct drm_sched_job *sched_job;
> > 	int r;
> > 
> > -	while (!READ_ONCE(sched->pause_run_wq)) {
> > -		struct drm_sched_entity *entity;
> > -		struct drm_sched_msg *msg;
> > -		struct drm_sched_fence *s_fence;
> > -		struct drm_sched_job *sched_job;
> > -		struct dma_fence *fence;
> > -		struct drm_sched_job *cleanup_job;
> > -
> > -		cleanup_job = drm_sched_get_cleanup_job(sched);
> > -		entity = drm_sched_select_entity(sched);
> > -		msg = drm_sched_get_msg(sched);
> > -
> > -		if (cleanup_job)
> > -			sched->ops->free_job(cleanup_job);
> > -
> > -		if (msg)
> > -			sched->ops->process_msg(msg);
> > -
> > -		if (!entity) {
> > -			if (!cleanup_job && !msg)
> > -				break;
> > -			continue;
> > -		}
> > -
> > -		sched_job = drm_sched_entity_pop_job(entity);
> > +	if (READ_ONCE(sched->pause_submit))
> > +		return;
> > 
> > -		if (!sched_job) {
> > -			complete_all(&entity->entity_idle);
> > -			if (!cleanup_job && !msg)
> > -				break;
> > -			continue;
> > -		}
> > +	entity = drm_sched_select_entity(sched);
> > +	if (!entity)
> > +		return;
> > 
> > -		s_fence = sched_job->s_fence;
> > +	sched_job = drm_sched_entity_pop_job(entity);
> > +	if (!sched_job) {
> > +		complete_all(&entity->entity_idle);
> > +		return;	/* No more work */
> > +	}
> > 
> > -		atomic_inc(&sched->hw_rq_count);
> > +	s_fence = sched_job->s_fence;
> > 
> > -		trace_drm_run_job(sched_job, entity);
> > -		fence = sched->ops->run_job(sched_job);
> > -		drm_sched_job_begin(sched_job);
> > -		complete_all(&entity->entity_idle);
> > -		drm_sched_fence_scheduled(s_fence, fence);
> > +	atomic_inc(&sched->hw_rq_count);
> > +	drm_sched_job_begin(sched_job);
> > 
> > -		if (!IS_ERR_OR_NULL(fence)) {
> > -			/* Drop for original kref_init of the fence */
> > -			dma_fence_put(fence);
> > +	trace_drm_run_job(sched_job, entity);
> > +	fence = sched->ops->run_job(sched_job);
> > +	complete_all(&entity->entity_idle);
> > +	drm_sched_fence_scheduled(s_fence, fence);
> > 
> > -			r = dma_fence_add_callback(fence, &sched_job->cb,
> > -						   drm_sched_job_done_cb);
> > -			if (r == -ENOENT)
> > -				drm_sched_job_done(sched_job, fence->error);
> > -			else if (r)
> > -				DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n",
> > -					  r);
> > -		} else {
> > -			drm_sched_job_done(sched_job, IS_ERR(fence) ?
> > -					   PTR_ERR(fence) : 0);
> > -		}
> > +	if (!IS_ERR_OR_NULL(fence)) {
> > +		/* Drop for original kref_init of the fence */
> > +		dma_fence_put(fence);
> > 
> > -		wake_up(&sched->job_scheduled);
> > +		r = dma_fence_add_callback(fence, &sched_job->cb,
> > +					   drm_sched_job_done_cb);
> > +		if (r == -ENOENT)
> > +			drm_sched_job_done(sched_job, fence->error);
> > +		else if (r)
> > +			DRM_DEV_ERROR(sched->dev, "fence add callback failed (%d)\n", r);
> > +	} else {
> > +		drm_sched_job_done(sched_job, IS_ERR(fence) ?
> > +				   PTR_ERR(fence) : 0);
> > 	}
> > +
> > +	wake_up(&sched->job_scheduled);
> > +	drm_sched_run_job_queue_if_ready(sched);
> > }
> > 
> > /**
> > @@ -1210,7 +1136,9 @@ static void drm_sched_main(struct work_struct *w)
> >  *
> >  * @sched: scheduler instance
> >  * @ops: backend operations for this scheduler
> > - * @run_wq: workqueue to use for run work. If NULL, the system_wq is used
> > + * @submit_wq: workqueue to use for submission. If NULL, an ordered wq is
> > + *	       allocated and used
> > + * @num_rqs: number of runqueues, one for each priority, up to DRM_SCHED_PRIORITY_COUNT
> >  * @hw_submission: number of hw submissions that can be in flight
> >  * @hang_limit: number of times to allow a job to hang before dropping it
> >  * @timeout: timeout value in jiffies for the scheduler
> > @@ -1218,57 +1146,89 @@ static void drm_sched_main(struct work_struct *w)
> >  *		used
> >  * @score: optional score atomic shared with other schedulers
> >  * @name: name used for debugging
> > - * @sched_policy: schedule policy
> >  * @dev: target &struct device
> >  *
> >  * Return 0 on success, otherwise error code.
> >  */
> > int drm_sched_init(struct drm_gpu_scheduler *sched,
> > 		   const struct drm_sched_backend_ops *ops,
> > -		   struct workqueue_struct *run_wq,
> > -		   unsigned hw_submission, unsigned hang_limit,
> > +		   struct workqueue_struct *submit_wq,
> > +		   u32 num_rqs, unsigned hw_submission, unsigned hang_limit,
> > 		   long timeout, struct workqueue_struct *timeout_wq,
> > -		   atomic_t *score, const char *name,
> > -		   enum drm_sched_policy sched_policy,
> > -		   struct device *dev)
> > +		   atomic_t *score, const char *name, struct device *dev)
> > {
> > -	int i;
> > -
> > -	if (sched_policy >= DRM_SCHED_POLICY_COUNT)
> > -		return -EINVAL;
> > +	int i, ret;
> > 
> > 	sched->ops = ops;
> > -	sched->single_entity = NULL;
> > 	sched->hw_submission_limit = hw_submission;
> > 	sched->name = name;
> > -	sched->run_wq = run_wq ? : system_wq;
> > +	if (submit_wq) {
> > +		sched->submit_wq = submit_wq;
> > +		sched->own_submit_wq = false;
> > +	} else {
> > +		sched->submit_wq = alloc_ordered_workqueue(name, 0);
> > +		if (!sched->submit_wq)
> > +			return -ENOMEM;
> > +
> > +		sched->own_submit_wq = true;
> > +	}
> > 	sched->timeout = timeout;
> > 	sched->timeout_wq = timeout_wq ? : system_wq;
> > 	sched->hang_limit = hang_limit;
> > 	sched->score = score ? score : &sched->_score;
> > 	sched->dev = dev;
> > -	if (sched_policy == DRM_SCHED_POLICY_DEFAULT)
> > -		sched->sched_policy = default_drm_sched_policy;
> > -	else
> > -		sched->sched_policy = sched_policy;
> > -	for (i = DRM_SCHED_PRIORITY_MIN; sched_policy !=
> > -	     DRM_SCHED_POLICY_SINGLE_ENTITY && i < DRM_SCHED_PRIORITY_COUNT;
> > -	     i++)
> > -		drm_sched_rq_init(sched, &sched->sched_rq[i]);
> > +
> > +	if (num_rqs > DRM_SCHED_PRIORITY_COUNT) {
> > +		/* This is a gross violation--tell drivers what the  problem is.
> > +		 */
> > +		drm_err(sched, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
> > +			__func__);
> > +		return -EINVAL;
> > +	} else if (sched->sched_rq) {
> > +		/* Not an error, but warn anyway so drivers can
> > +		 * fine-tune their DRM calling order, and return all
> > +		 * is good.
> > +		 */
> > +		drm_warn(sched, "%s: scheduler already initialized!\n", __func__);
> > +		return 0;
> > +	}
> > +
> > +	sched->sched_rq = kmalloc_array(num_rqs, sizeof(*sched->sched_rq),
> > +					GFP_KERNEL | __GFP_ZERO);
> > +	if (!sched->sched_rq) {
> > +		drm_err(sched, "%s: out of memory for sched_rq\n", __func__);
> > +		return -ENOMEM;
> > +	}
> > +	sched->num_rqs = num_rqs;
> > +	ret = -ENOMEM;
> > +	for (i = DRM_SCHED_PRIORITY_MIN; i < sched->num_rqs; i++) {
> > +		sched->sched_rq[i] = kzalloc(sizeof(*sched->sched_rq[i]), GFP_KERNEL);
> > +		if (!sched->sched_rq[i])
> > +			goto Out_unroll;
> > +		drm_sched_rq_init(sched, sched->sched_rq[i]);
> > +	}
> > 
> > 	init_waitqueue_head(&sched->job_scheduled);
> > 	INIT_LIST_HEAD(&sched->pending_list);
> > -	INIT_LIST_HEAD(&sched->msgs);
> > 	spin_lock_init(&sched->job_list_lock);
> > 	atomic_set(&sched->hw_rq_count, 0);
> > 	INIT_DELAYED_WORK(&sched->work_tdr, drm_sched_job_timedout);
> > -	INIT_WORK(&sched->work_run, drm_sched_main);
> > +	INIT_WORK(&sched->work_run_job, drm_sched_run_job_work);
> > +	INIT_WORK(&sched->work_free_job, drm_sched_free_job_work);
> > 	atomic_set(&sched->_score, 0);
> > 	atomic64_set(&sched->job_id_count, 0);
> > -	sched->pause_run_wq = false;
> > +	sched->pause_submit = false;
> > 
> > 	sched->ready = true;
> > 	return 0;
> > +
> > +Out_unroll:
> > +	for (--i ; i >= DRM_SCHED_PRIORITY_MIN; i--)
> > +		kfree(sched->sched_rq[i]);
> > +	kfree(sched->sched_rq);
> > +	sched->sched_rq = NULL;
> > +	drm_err(sched, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
> > +	return ret;
> > }
> > EXPORT_SYMBOL(drm_sched_init);
> > 
> > @@ -1284,18 +1244,10 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched)
> > 	struct drm_sched_entity *s_entity;
> > 	int i;
> > 
> > -	drm_sched_run_wq_stop(sched);
> > +	drm_sched_wqueue_stop(sched);
> > 
> > -	if (sched->single_entity) {
> > -		spin_lock(&sched->single_entity->rq_lock);
> > -		sched->single_entity->stopped = true;
> > -		spin_unlock(&sched->single_entity->rq_lock);
> > -	}
> > -
> > -	for (i = DRM_SCHED_PRIORITY_COUNT - 1; sched->sched_policy !=
> > -	     DRM_SCHED_POLICY_SINGLE_ENTITY && i >= DRM_SCHED_PRIORITY_MIN;
> > -	     i--) {
> > -		struct drm_sched_rq *rq = &sched->sched_rq[i];
> > +	for (i = sched->num_rqs - 1; i >= DRM_SCHED_PRIORITY_MIN; i--) {
> > +		struct drm_sched_rq *rq = sched->sched_rq[i];
> > 
> > 		spin_lock(&rq->lock);
> > 		list_for_each_entry(s_entity, &rq->entities, list)
> > @@ -1306,7 +1258,7 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched)
> > 			 */
> > 			s_entity->stopped = true;
> > 		spin_unlock(&rq->lock);
> > -
> > +		kfree(sched->sched_rq[i]);
> > 	}
> > 
> > 	/* Wakeup everyone stuck in drm_sched_entity_flush for this scheduler */
> > @@ -1315,7 +1267,11 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched)
> > 	/* Confirm no work left behind accessing device structures */
> > 	cancel_delayed_work_sync(&sched->work_tdr);
> > 
> > +	if (sched->own_submit_wq)
> > +		destroy_workqueue(sched->submit_wq);
> > 	sched->ready = false;
> > +	kfree(sched->sched_rq);
> > +	sched->sched_rq = NULL;
> > }
> > EXPORT_SYMBOL(drm_sched_fini);
> > 
> > @@ -1335,8 +1291,6 @@ void drm_sched_increase_karma(struct drm_sched_job *bad)
> > 	struct drm_sched_entity *entity;
> > 	struct drm_gpu_scheduler *sched = bad->sched;
> > 
> > -	WARN_ON(sched->sched_policy == DRM_SCHED_POLICY_SINGLE_ENTITY);
> > -
> > 	/* don't change @bad's karma if it's from KERNEL RQ,
> > 	 * because sometimes GPU hang would cause kernel jobs (like VM updating jobs)
> > 	 * corrupt but keep in mind that kernel jobs always considered good.
> > @@ -1344,9 +1298,10 @@ void drm_sched_increase_karma(struct drm_sched_job *bad)
> > 	if (bad->s_priority != DRM_SCHED_PRIORITY_KERNEL) {
> > 		atomic_inc(&bad->karma);
> > 
> > -		for (i = DRM_SCHED_PRIORITY_MIN; i < DRM_SCHED_PRIORITY_KERNEL;
> > +		for (i = DRM_SCHED_PRIORITY_MIN;
> > +		     i < min_t(typeof(sched->num_rqs), sched->num_rqs, DRM_SCHED_PRIORITY_KERNEL);
> > 		     i++) {
> > -			struct drm_sched_rq *rq = &sched->sched_rq[i];
> > +			struct drm_sched_rq *rq = sched->sched_rq[i];
> > 
> > 			spin_lock(&rq->lock);
> > 			list_for_each_entry_safe(entity, tmp, &rq->entities, list) {
> > @@ -1364,3 +1319,42 @@ void drm_sched_increase_karma(struct drm_sched_job *bad)
> > 	}
> > }
> > EXPORT_SYMBOL(drm_sched_increase_karma);
> > +
> > +/**
> > + * drm_sched_wqueue_ready - Is the scheduler ready for submission
> > + *
> > + * @sched: scheduler instance
> > + *
> > + * Returns true if submission is ready
> > + */
> > +bool drm_sched_wqueue_ready(struct drm_gpu_scheduler *sched)
> > +{
> > +	return sched->ready;
> > +}
> > +EXPORT_SYMBOL(drm_sched_wqueue_ready);
> > +
> > +/**
> > + * drm_sched_wqueue_stop - stop scheduler submission
> > + *
> > + * @sched: scheduler instance
> > + */
> > +void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched)
> > +{
> > +	WRITE_ONCE(sched->pause_submit, true);
> > +	cancel_work_sync(&sched->work_run_job);
> > +	cancel_work_sync(&sched->work_free_job);
> > +}
> > +EXPORT_SYMBOL(drm_sched_wqueue_stop);
> > +
> > +/**
> > + * drm_sched_wqueue_start - start scheduler submission
> > + *
> > + * @sched: scheduler instance
> > + */
> > +void drm_sched_wqueue_start(struct drm_gpu_scheduler *sched)
> > +{
> > +	WRITE_ONCE(sched->pause_submit, false);
> > +	queue_work(sched->submit_wq, &sched->work_run_job);
> > +	queue_work(sched->submit_wq, &sched->work_free_job);
> > +}
> > +EXPORT_SYMBOL(drm_sched_wqueue_start);
> > diff --git a/drivers/gpu/drm/v3d/v3d_sched.c b/drivers/gpu/drm/v3d/v3d_sched.c
> > index 5e3fe77fa991..ce68f170f18d 100644
> > --- a/drivers/gpu/drm/v3d/v3d_sched.c
> > +++ b/drivers/gpu/drm/v3d/v3d_sched.c
> > @@ -388,48 +388,45 @@ v3d_sched_init(struct v3d_dev *v3d)
> > 	int ret;
> > 
> > 	ret = drm_sched_init(&v3d->queue[V3D_BIN].sched,
> > -			     &v3d_bin_sched_ops, NULL,
> > +			     &v3d_bin_sched_ops, DRM_SCHED_PRIORITY_COUNT, NULL,
> > 			     hw_jobs_limit, job_hang_limit,
> > 			     msecs_to_jiffies(hang_limit_ms), NULL,
> > -			     NULL, "v3d_bin", DRM_SCHED_POLICY_DEFAULT,
> > -			     v3d->drm.dev);
> > +			     NULL, "v3d_bin", v3d->drm.dev);
> > 	if (ret)
> > 		return ret;
> > 
> > 	ret = drm_sched_init(&v3d->queue[V3D_RENDER].sched,
> > -			     &v3d_render_sched_ops, NULL,
> > +			     &v3d_render_sched_ops, DRM_SCHED_PRIORITY_COUNT,
> > 			     hw_jobs_limit, job_hang_limit,
> > 			     msecs_to_jiffies(hang_limit_ms), NULL,
> > -			     ULL, "v3d_render", DRM_SCHED_POLICY_DEFAULT,
> > -			     v3d->drm.dev);
> > +			     ULL, "v3d_render", v3d->drm.dev);
> > 	if (ret)
> > 		goto fail;
> > 
> > 	ret = drm_sched_init(&v3d->queue[V3D_TFU].sched,
> > -			     &v3d_tfu_sched_ops, NULL,
> > +			     &v3d_tfu_sched_ops, DRM_SCHED_PRIORITY_COUNT, NULL,
> > 			     hw_jobs_limit, job_hang_limit,
> > 			     msecs_to_jiffies(hang_limit_ms), NULL,
> > -			     NULL, "v3d_tfu", DRM_SCHED_POLICY_DEFAULT,
> > -			     v3d->drm.dev);
> > +			     NULL, "v3d_tfu", v3d->drm.dev);
> > 	if (ret)
> > 		goto fail;
> > 
> > 	if (v3d_has_csd(v3d)) {
> > 		ret = drm_sched_init(&v3d->queue[V3D_CSD].sched,
> > -				     &v3d_csd_sched_ops, NULL,
> > +				     &v3d_csd_sched_ops,
> > +				     DRM_SCHED_PRIORITY_COUNT, NULL,
> > 				     hw_jobs_limit, job_hang_limit,
> > 				     msecs_to_jiffies(hang_limit_ms), NULL,
> > -				     NULL, "v3d_csd", DRM_SCHED_POLICY_DEFAULT,
> > -				     v3d->drm.dev);
> > +				     NULL, "v3d_csd", v3d->drm.dev);
> > 		if (ret)
> > 			goto fail;
> > 
> > 		ret = drm_sched_init(&v3d->queue[V3D_CACHE_CLEAN].sched,
> > -				     &v3d_cache_clean_sched_ops, NULL,
> > +				     &v3d_cache_clean_sched_ops,
> > +				     DRM_SCHED_PRIORITY_COUNT, NULL,
> > 				     hw_jobs_limit, job_hang_limit,
> > 				     msecs_to_jiffies(hang_limit_ms), NULL,
> > -				     NULL, "v3d_cache_clean",
> > -				     DRM_SCHED_POLICY_DEFAULT, v3d->drm.dev);
> > +				     NULL, "v3d_cache_clean", v3d->drm.dev);
> > 		if (ret)
> > 			goto fail;
> > 	}
> > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > index cee57681732d..e40757e1b266 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -57,6 +57,7 @@ xe-y += xe_bb.o \
> > 	xe_exec_queue.o \
> > 	xe_force_wake.o \
> > 	xe_ggtt.o \
> > +	xe_gpu_scheduler.o \
> > 	xe_gt.o \
> > 	xe_gt_clock.o \
> > 	xe_gt_debugfs.o \
> > diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h b/drivers/gpu/drm/xe/xe_exec_queue_types.h
> > index ecd761177567..5ba47a5cfdbd 100644
> > --- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
> > +++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
> > @@ -10,6 +10,7 @@
> > 
> > #include <drm/gpu_scheduler.h>
> > 
> > +#include "xe_gpu_scheduler_types.h"
> > #include "xe_hw_engine_types.h"
> > #include "xe_hw_fence_types.h"
> > #include "xe_lrc_types.h"
> > @@ -41,6 +42,8 @@ struct xe_exec_queue {
> > 	struct xe_vm *vm;
> > 	/** @class: class of this exec queue */
> > 	enum xe_engine_class class;
> > +	/** @priority: priority of this exec queue */
> > +	enum xe_sched_priority priority;
> > 	/**
> > 	 * @logical_mask: logical mask of where job submitted to exec queue can run
> > 	 */
> > diff --git a/drivers/gpu/drm/xe/xe_execlist.c b/drivers/gpu/drm/xe/xe_execlist.c
> > index 811b81c39002..5dd5cb4d1c1b 100644
> > --- a/drivers/gpu/drm/xe/xe_execlist.c
> > +++ b/drivers/gpu/drm/xe/xe_execlist.c
> > @@ -333,17 +333,16 @@ static int execlist_exec_queue_init(struct xe_exec_queue *q)
> > 
> > 	exl->q = q;
> > 
> > -	err = drm_sched_init(&exl->sched, &drm_sched_ops, NULL,
> > +	err = drm_sched_init(&exl->sched, &drm_sched_ops, NULL, 1,
> > 			     q->lrc[0].ring.size / MAX_JOB_SIZE_BYTES,
> > 			     XE_SCHED_HANG_LIMIT, XE_SCHED_JOB_TIMEOUT,
> > 			     NULL, NULL, q->hwe->name,
> > -			     DRM_SCHED_POLICY_SINGLE_ENTITY,
> > 			     gt_to_xe(q->gt)->drm.dev);
> > 	if (err)
> > 		goto err_free;
> > 
> > 	sched = &exl->sched;
> > -	err = drm_sched_entity_init(&exl->entity, DRM_SCHED_PRIORITY_NORMAL,
> > +	err = drm_sched_entity_init(&exl->entity, DRM_SCHED_PRIORITY_MIN,
> > 				    &sched, 1, NULL);
> > 	if (err)
> > 		goto err_sched;
> > diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler.c b/drivers/gpu/drm/xe/xe_gpu_scheduler.c
> > new file mode 100644
> > index 000000000000..e4ad1d6ce1d5
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_gpu_scheduler.c
> > @@ -0,0 +1,101 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2023 Intel Corporation
> > + */
> > +
> > +#include "xe_gpu_scheduler.h"
> > +
> > +static void xe_sched_process_msg_queue(struct xe_gpu_scheduler *sched)
> > +{
> > +	if (!READ_ONCE(sched->base.pause_submit))
> > +		queue_work(sched->base.submit_wq, &sched->work_process_msg);
> > +}
> > +
> > +static void xe_sched_process_msg_queue_if_ready(struct xe_gpu_scheduler *sched)
> > +{
> > +	struct xe_sched_msg *msg;
> > +
> > +	spin_lock(&sched->base.job_list_lock);
> > +	msg = list_first_entry_or_null(&sched->msgs, struct xe_sched_msg, link);
> > +	if (msg)
> > +		xe_sched_process_msg_queue(sched);
> > +	spin_unlock(&sched->base.job_list_lock);
> > +}
> > +
> > +static struct xe_sched_msg *
> > +xe_sched_get_msg(struct xe_gpu_scheduler *sched)
> > +{
> > +	struct xe_sched_msg *msg;
> > +
> > +	spin_lock(&sched->base.job_list_lock);
> > +	msg = list_first_entry_or_null(&sched->msgs,
> > +				       struct xe_sched_msg, link);
> > +	if (msg)
> > +		list_del(&msg->link);
> > +	spin_unlock(&sched->base.job_list_lock);
> > +
> > +	return msg;
> > +}
> > +
> > +static void xe_sched_process_msg_work(struct work_struct *w)
> > +{
> > +	struct xe_gpu_scheduler *sched =
> > +		container_of(w, struct xe_gpu_scheduler, work_process_msg);
> > +	struct xe_sched_msg *msg;
> > +
> > +	if (READ_ONCE(sched->base.pause_submit))
> > +		return;
> > +
> > +	msg = xe_sched_get_msg(sched);
> > +	if (msg) {
> > +		sched->ops->process_msg(msg);
> > +
> > +		xe_sched_process_msg_queue_if_ready(sched);
> > +	}
> > +}
> > +
> > +int xe_sched_init(struct xe_gpu_scheduler *sched,
> > +		  const struct drm_sched_backend_ops *ops,
> > +		  const struct xe_sched_backend_ops *xe_ops,
> > +		  struct workqueue_struct *submit_wq,
> > +		  uint32_t hw_submission, unsigned hang_limit,
> > +		  long timeout, struct workqueue_struct *timeout_wq,
> > +		  atomic_t *score, const char *name,
> > +		  struct device *dev)
> > +{
> > +	sched->ops = xe_ops;
> > +	INIT_LIST_HEAD(&sched->msgs);
> > +	INIT_WORK(&sched->work_process_msg, xe_sched_process_msg_work);
> > +
> > +	return drm_sched_init(&sched->base, ops, submit_wq, 1, hw_submission,
> > +			      hang_limit, timeout, timeout_wq, score, name,
> > +			      dev);
> > +}
> > +
> > +void xe_sched_fini(struct xe_gpu_scheduler *sched)
> > +{
> > +	xe_sched_submission_stop(sched);
> > +	drm_sched_fini(&sched->base);
> > +}
> > +
> > +void xe_sched_submission_start(struct xe_gpu_scheduler *sched)
> > +{
> > +	drm_sched_wqueue_start(&sched->base);
> > +	queue_work(sched->base.submit_wq, &sched->work_process_msg);
> > +}
> > +
> > +void xe_sched_submission_stop(struct xe_gpu_scheduler *sched)
> > +{
> > +	drm_sched_wqueue_stop(&sched->base);
> > +	cancel_work_sync(&sched->work_process_msg);
> > +}
> > +
> > +void xe_sched_add_msg(struct xe_gpu_scheduler *sched,
> > +		      struct xe_sched_msg *msg)
> > +{
> > +	spin_lock(&sched->base.job_list_lock);
> > +	list_add_tail(&msg->link, &sched->msgs);
> > +	spin_unlock(&sched->base.job_list_lock);
> > +
> > +	xe_sched_process_msg_queue(sched);
> > +}
> > diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler.h b/drivers/gpu/drm/xe/xe_gpu_scheduler.h
> > new file mode 100644
> > index 000000000000..ea785bcd3eb2
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_gpu_scheduler.h
> > @@ -0,0 +1,73 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2023 Intel Corporation
> > + */
> > +
> > +#ifndef _XE_GPU_SCHEDULER_H_
> > +#define _XE_GPU_SCHEDULER_H_
> > +
> > +#include "xe_gpu_scheduler_types.h"
> > +#include "xe_sched_job_types.h"
> > +
> > +int xe_sched_init(struct xe_gpu_scheduler *sched,
> > +		  const struct drm_sched_backend_ops *ops,
> > +		  const struct xe_sched_backend_ops *xe_ops,
> > +		  struct workqueue_struct *submit_wq,
> > +		  uint32_t hw_submission, unsigned hang_limit,
> > +		  long timeout, struct workqueue_struct *timeout_wq,
> > +		  atomic_t *score, const char *name,
> > +		  struct device *dev);
> > +void xe_sched_fini(struct xe_gpu_scheduler *sched);
> > +
> > +void xe_sched_submission_start(struct xe_gpu_scheduler *sched);
> > +void xe_sched_submission_stop(struct xe_gpu_scheduler *sched);
> > +
> > +void xe_sched_add_msg(struct xe_gpu_scheduler *sched,
> > +		      struct xe_sched_msg *msg);
> > +
> > +static inline void xe_sched_stop(struct xe_gpu_scheduler *sched)
> > +{
> > +	drm_sched_stop(&sched->base, NULL);
> > +}
> > +
> > +static inline void xe_sched_tdr_queue_imm(struct xe_gpu_scheduler *sched)
> > +{
> > +	drm_sched_tdr_queue_imm(&sched->base);
> > +}
> > +
> > +static inline void xe_sched_resubmit_jobs(struct xe_gpu_scheduler *sched)
> > +{
> > +	drm_sched_resubmit_jobs(&sched->base);
> > +}
> > +
> > +static inline bool
> > +xe_sched_invalidate_job(struct xe_sched_job *job, int threshold)
> > +{
> > +	return drm_sched_invalidate_job(&job->drm, threshold);
> > +}
> > +
> > +static inline void xe_sched_add_pending_job(struct xe_gpu_scheduler *sched,
> > +					    struct xe_sched_job *job)
> > +{
> > +	list_add(&job->drm.list, &sched->base.pending_list);
> > +}
> > +
> > +static inline
> > +struct xe_sched_job *xe_sched_first_pending_job(struct xe_gpu_scheduler *sched)
> > +{
> > +	return list_first_entry_or_null(&sched->base.pending_list,
> > +					struct xe_sched_job, drm.list);
> > +}
> > +
> > +static inline int
> > +xe_sched_entity_init(struct xe_sched_entity *entity,
> > +		     struct xe_gpu_scheduler *sched)
> > +{
> > +	return drm_sched_entity_init(entity, DRM_SCHED_PRIORITY_MIN,
> > +				     (struct drm_gpu_scheduler **)&sched,
> > +				     1, NULL);
> > +}
> > +
> > +#define xe_sched_entity_fini drm_sched_entity_fini
> > +
> > +#endif
> > diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler_types.h b/drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
> > new file mode 100644
> > index 000000000000..86133835d4d1
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
> > @@ -0,0 +1,58 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2023 Intel Corporation
> > + */
> > +
> > +#ifndef _XE_GPU_SCHEDULER_TYPES_H_
> > +#define _XE_GPU_SCHEDULER_TYPES_H_
> > +
> > +#include <drm/gpu_scheduler.h>
> > +
> > +/**
> > + * struct xe_sched_msg - an in-band (relative to GPU scheduler run queue)
> > + * message
> > + *
> > + * Generic enough for backend defined messages, backend can expand if needed.
> > + */
> > +struct xe_sched_msg {
> > +	/** @link: list link into the gpu scheduler list of messages */
> > +	struct list_head		link;
> > +	/**
> > +	 * @private_data: opaque pointer to message private data (backend defined)
> > +	 */
> > +	void				*private_data;
> > +	/** @opcode: opcode of message (backend defined) */
> > +	unsigned int			opcode;
> > +};
> > +
> > +/**
> > + * struct xe_sched_backend_ops - Define the backend operations called by the
> > + * scheduler
> > + */
> > +struct xe_sched_backend_ops {
> > +	/**
> > +	 * @process_msg: Process a message. Allowed to block, it is this
> > +	 * function's responsibility to free message if dynamically allocated.
> > +	 */
> > +	void (*process_msg)(struct xe_sched_msg *msg);
> > +};
> > +
> > +/**
> > + * struct xe_gpu_scheduler - Xe GPU scheduler
> > + */
> > +struct xe_gpu_scheduler {
> > +	/** @base: DRM GPU scheduler */
> > +	struct drm_gpu_scheduler		base;
> > +	/** @ops: Xe scheduler ops */
> > +	const struct xe_sched_backend_ops	*ops;
> > +	/** @msgs: list of messages to be processed in @work_process_msg */
> > +	struct list_head			msgs;
> > +	/** @work_process_msg: processes messages */
> > +	struct work_struct		work_process_msg;
> > +};
> > +
> > +#define xe_sched_entity		drm_sched_entity
> > +#define xe_sched_policy		drm_sched_policy
> > +#define xe_sched_priority	drm_sched_priority
> > +
> > +#endif
> > diff --git a/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h b/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
> > index d95ef0021a1f..4c39f01e4f52 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
> > +++ b/drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
> > @@ -9,7 +9,7 @@
> > #include <linux/spinlock.h>
> > #include <linux/workqueue.h>
> > 
> > -#include <drm/gpu_scheduler.h>
> > +#include "xe_gpu_scheduler_types.h"
> > 
> > struct dma_fence;
> > struct xe_exec_queue;
> > @@ -21,16 +21,16 @@ struct xe_guc_exec_queue {
> > 	/** @q: Backpointer to parent xe_exec_queue */
> > 	struct xe_exec_queue *q;
> > 	/** @sched: GPU scheduler for this xe_exec_queue */
> > -	struct drm_gpu_scheduler sched;
> > +	struct xe_gpu_scheduler sched;
> > 	/** @entity: Scheduler entity for this xe_exec_queue */
> > -	struct drm_sched_entity entity;
> > +	struct xe_sched_entity entity;
> > 	/**
> > 	 * @static_msgs: Static messages for this xe_exec_queue, used when
> > 	 * a message needs to sent through the GPU scheduler but memory
> > 	 * allocations are not allowed.
> > 	 */
> > #define MAX_STATIC_MSG_TYPE	3
> > -	struct drm_sched_msg static_msgs[MAX_STATIC_MSG_TYPE];
> > +	struct xe_sched_msg static_msgs[MAX_STATIC_MSG_TYPE];
> > 	/** @lr_tdr: long running TDR worker */
> > 	struct work_struct lr_tdr;
> > 	/** @fini_async: do final fini async from this worker */
> > diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
> > index 870dc5c532fa..8ae1a49186e5 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_submit.c
> > +++ b/drivers/gpu/drm/xe/xe_guc_submit.c
> > @@ -19,6 +19,7 @@
> > #include "xe_device.h"
> > #include "xe_exec_queue.h"
> > #include "xe_force_wake.h"
> > +#include "xe_gpu_scheduler.h"
> > #include "xe_gt.h"
> > #include "xe_guc.h"
> > #include "xe_guc_ct.h"
> > @@ -360,7 +361,7 @@ MAKE_EXEC_QUEUE_POLICY_ADD(preemption_timeout, PREEMPTION_TIMEOUT)
> > MAKE_EXEC_QUEUE_POLICY_ADD(priority, SCHEDULING_PRIORITY)
> > #undef MAKE_EXEC_QUEUE_POLICY_ADD
> > 
> > -static const int drm_sched_prio_to_guc[] = {
> > +static const int xe_sched_prio_to_guc[] = {
> > 	[DRM_SCHED_PRIORITY_MIN] = GUC_CLIENT_PRIORITY_NORMAL,
> > 	[DRM_SCHED_PRIORITY_NORMAL] = GUC_CLIENT_PRIORITY_KMD_NORMAL,
> > 	[DRM_SCHED_PRIORITY_HIGH] = GUC_CLIENT_PRIORITY_HIGH,
> > @@ -371,14 +372,14 @@ static void init_policies(struct xe_guc *guc, struct xe_exec_queue *q)
> > {
> > 	struct exec_queue_policy policy;
> > 	struct xe_device *xe = guc_to_xe(guc);
> > -	enum drm_sched_priority prio = q->entity->priority;
> > +	enum xe_sched_priority prio = q->priority;
> > 	u32 timeslice_us = q->sched_props.timeslice_us;
> > 	u32 preempt_timeout_us = q->sched_props.preempt_timeout_us;
> > 
> > 	xe_assert(xe, exec_queue_registered(q));
> > 
> > 	__guc_exec_queue_policy_start_klv(&policy, q->guc->id);
> > -	__guc_exec_queue_policy_add_priority(&policy, drm_sched_prio_to_guc[prio]);
> > +	__guc_exec_queue_policy_add_priority(&policy, xe_sched_prio_to_guc[prio]);
> > 	__guc_exec_queue_policy_add_execution_quantum(&policy, timeslice_us);
> > 	__guc_exec_queue_policy_add_preemption_timeout(&policy, preempt_timeout_us);
> > 
> > @@ -719,7 +720,6 @@ static int guc_read_stopped(struct xe_guc *guc)
> > 		q->guc->id,						\
> > 		GUC_CONTEXT_##enable_disable,				\
> > 	}
> > -#define MIN_SCHED_TIMEOUT	1
> > 
> > static void disable_scheduling_deregister(struct xe_guc *guc,
> > 					  struct xe_exec_queue *q)
> > @@ -733,12 +733,12 @@ static void disable_scheduling_deregister(struct xe_guc *guc,
> > 	ret = wait_event_timeout(guc->ct.wq, !exec_queue_pending_enable(q) ||
> > 				 guc_read_stopped(guc), HZ * 5);
> > 	if (!ret) {
> > -		struct drm_gpu_scheduler *sched = &q->guc->sched;
> > +		struct xe_gpu_scheduler *sched = &q->guc->sched;
> > 
> > 		drm_warn(&xe->drm, "Pending enable failed to respond");
> > -		sched->timeout = MIN_SCHED_TIMEOUT;
> > -		drm_sched_run_wq_start(sched);
> > +		xe_sched_submission_start(sched);
> > 		xe_gt_reset_async(q->gt);
> > +		xe_sched_tdr_queue_imm(sched);
> > 		return;
> > 	}
> > 
> > @@ -809,7 +809,7 @@ static void xe_guc_exec_queue_trigger_cleanup(struct xe_exec_queue *q)
> > 	if (xe_exec_queue_is_lr(q))
> > 		queue_work(guc_to_gt(guc)->ordered_wq, &q->guc->lr_tdr);
> > 	else
> > -		drm_sched_set_timeout(&q->guc->sched, MIN_SCHED_TIMEOUT);
> > +		xe_sched_tdr_queue_imm(&q->guc->sched);
> > }
> > 
> > static void xe_guc_exec_queue_lr_cleanup(struct work_struct *w)
> > @@ -819,13 +819,13 @@ static void xe_guc_exec_queue_lr_cleanup(struct work_struct *w)
> > 	struct xe_exec_queue *q = ge->q;
> > 	struct xe_guc *guc = exec_queue_to_guc(q);
> > 	struct xe_device *xe = guc_to_xe(guc);
> > -	struct drm_gpu_scheduler *sched = &ge->sched;
> > +	struct xe_gpu_scheduler *sched = &ge->sched;
> > 
> > 	xe_assert(xe, xe_exec_queue_is_lr(q));
> > 	trace_xe_exec_queue_lr_cleanup(q);
> > 
> > 	/* Kill the run_job / process_msg entry points */
> > -	drm_sched_run_wq_stop(sched);
> > +	xe_sched_submission_stop(sched);
> > 
> > 	/*
> > 	 * Engine state now mostly stable, disable scheduling / deregister if
> > @@ -854,13 +854,13 @@ static void xe_guc_exec_queue_lr_cleanup(struct work_struct *w)
> > 					 guc_read_stopped(guc), HZ * 5);
> > 		if (!ret) {
> > 			drm_warn(&xe->drm, "Schedule disable failed to respond");
> > -			drm_sched_run_wq_start(sched);
> > +			xe_sched_submission_start(sched);
> > 			xe_gt_reset_async(q->gt);
> > 			return;
> > 		}
> > 	}
> > 
> > -	drm_sched_run_wq_start(sched);
> > +	xe_sched_submission_start(sched);
> > }
> > 
> > static enum drm_gpu_sched_stat
> > @@ -869,7 +869,7 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> > 	struct xe_sched_job *job = to_xe_sched_job(drm_job);
> > 	struct xe_sched_job *tmp_job;
> > 	struct xe_exec_queue *q = job->q;
> > -	struct drm_gpu_scheduler *sched = &q->guc->sched;
> > +	struct xe_gpu_scheduler *sched = &q->guc->sched;
> > 	struct xe_device *xe = guc_to_xe(exec_queue_to_guc(q));
> > 	int err = -ETIME;
> > 	int i = 0;
> > @@ -889,7 +889,7 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> > 	trace_xe_sched_job_timedout(job);
> > 
> > 	/* Kill the run_job entry point */
> > -	drm_sched_run_wq_stop(sched);
> > +	xe_sched_submission_stop(sched);
> > 
> > 	/*
> > 	 * Kernel jobs should never fail, nor should VM jobs if they do
> > @@ -897,9 +897,9 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> > 	 */
> > 	if (q->flags & EXEC_QUEUE_FLAG_KERNEL ||
> > 	    (q->flags & EXEC_QUEUE_FLAG_VM && !exec_queue_killed(q))) {
> > -		if (!drm_sched_invalidate_job(drm_job, 2)) {
> > -			list_add(&drm_job->list, &sched->pending_list);
> > -			drm_sched_run_wq_start(sched);
> > +		if (!xe_sched_invalidate_job(job, 2)) {
> > +			xe_sched_add_pending_job(sched, job);
> > +			xe_sched_submission_start(sched);
> > 			xe_gt_reset_async(q->gt);
> > 			goto out;
> > 		}
> > @@ -932,10 +932,10 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> > 					 guc_read_stopped(guc), HZ * 5);
> > 		if (!ret || guc_read_stopped(guc)) {
> > 			drm_warn(&xe->drm, "Schedule disable failed to respond");
> > -			sched->timeout = MIN_SCHED_TIMEOUT;
> > -			list_add(&drm_job->list, &sched->pending_list);
> > -			drm_sched_run_wq_start(sched);
> > +			xe_sched_add_pending_job(sched, job);
> > +			xe_sched_submission_start(sched);
> > 			xe_gt_reset_async(q->gt);
> > +			xe_sched_tdr_queue_imm(sched);
> > 			goto out;
> > 		}
> > 	}
> > @@ -947,15 +947,15 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> > 	 * Fence state now stable, stop / start scheduler which cleans up any
> > 	 * fences that are complete
> > 	 */
> > -	list_add(&drm_job->list, &sched->pending_list);
> > -	drm_sched_run_wq_start(sched);
> > +	xe_sched_add_pending_job(sched, job);
> > +	xe_sched_submission_start(sched);
> > 	xe_guc_exec_queue_trigger_cleanup(q);
> > 
> > 	/* Mark all outstanding jobs as bad, thus completing them */
> > -	spin_lock(&sched->job_list_lock);
> > -	list_for_each_entry(tmp_job, &sched->pending_list, drm.list)
> > +	spin_lock(&sched->base.job_list_lock);
> > +	list_for_each_entry(tmp_job, &sched->base.pending_list, drm.list)
> > 		xe_sched_job_set_error(tmp_job, !i++ ? err : -ECANCELED);
> > -	spin_unlock(&sched->job_list_lock);
> > +	spin_unlock(&sched->base.job_list_lock);
> > 
> > 	/* Start fence signaling */
> > 	xe_hw_fence_irq_start(q->fence_irq);
> > @@ -978,8 +978,8 @@ static void __guc_exec_queue_fini_async(struct work_struct *w)
> > 	if (q->flags & EXEC_QUEUE_FLAG_PERSISTENT)
> > 		xe_device_remove_persistent_exec_queues(gt_to_xe(q->gt), q);
> > 	release_guc_id(guc, q);
> > -	drm_sched_entity_fini(&ge->entity);
> > -	drm_sched_fini(&ge->sched);
> > +	xe_sched_entity_fini(&ge->entity);
> > +	xe_sched_fini(&ge->sched);
> > 
> > 	kfree(ge);
> > 	xe_exec_queue_fini(q);
> > @@ -1008,7 +1008,7 @@ static void __guc_exec_queue_fini(struct xe_guc *guc, struct xe_exec_queue *q)
> > 	guc_exec_queue_fini_async(q);
> > }
> > 
> > -static void __guc_exec_queue_process_msg_cleanup(struct drm_sched_msg *msg)
> > +static void __guc_exec_queue_process_msg_cleanup(struct xe_sched_msg *msg)
> > {
> > 	struct xe_exec_queue *q = msg->private_data;
> > 	struct xe_guc *guc = exec_queue_to_guc(q);
> > @@ -1028,7 +1028,7 @@ static bool guc_exec_queue_allowed_to_change_state(struct xe_exec_queue *q)
> > 	return !exec_queue_killed_or_banned(q) && exec_queue_registered(q);
> > }
> > 
> > -static void __guc_exec_queue_process_msg_set_sched_props(struct drm_sched_msg *msg)
> > +static void __guc_exec_queue_process_msg_set_sched_props(struct xe_sched_msg *msg)
> > {
> > 	struct xe_exec_queue *q = msg->private_data;
> > 	struct xe_guc *guc = exec_queue_to_guc(q);
> > @@ -1052,7 +1052,7 @@ static void suspend_fence_signal(struct xe_exec_queue *q)
> > 	wake_up(&q->guc->suspend_wait);
> > }
> > 
> > -static void __guc_exec_queue_process_msg_suspend(struct drm_sched_msg *msg)
> > +static void __guc_exec_queue_process_msg_suspend(struct xe_sched_msg *msg)
> > {
> > 	struct xe_exec_queue *q = msg->private_data;
> > 	struct xe_guc *guc = exec_queue_to_guc(q);
> > @@ -1087,7 +1087,7 @@ static void __guc_exec_queue_process_msg_suspend(struct drm_sched_msg *msg)
> > 	}
> > }
> > 
> > -static void __guc_exec_queue_process_msg_resume(struct drm_sched_msg *msg)
> > +static void __guc_exec_queue_process_msg_resume(struct xe_sched_msg *msg)
> > {
> > 	struct xe_exec_queue *q = msg->private_data;
> > 	struct xe_guc *guc = exec_queue_to_guc(q);
> > @@ -1113,9 +1113,9 @@ static void __guc_exec_queue_process_msg_resume(struct drm_sched_msg *msg)
> > #define SUSPEND		3
> > #define RESUME		4
> > 
> > -static void guc_exec_queue_process_msg(struct drm_sched_msg *msg)
> > +static void guc_exec_queue_process_msg(struct xe_sched_msg *msg)
> > {
> > -	trace_drm_sched_msg_recv(msg);
> > +	trace_xe_sched_msg_recv(msg);
> > 
> > 	switch (msg->opcode) {
> > 	case CLEANUP:
> > @@ -1139,12 +1139,15 @@ static const struct drm_sched_backend_ops drm_sched_ops = {
> > 	.run_job = guc_exec_queue_run_job,
> > 	.free_job = guc_exec_queue_free_job,
> > 	.timedout_job = guc_exec_queue_timedout_job,
> > +};
> > +
> > +static const struct xe_sched_backend_ops xe_sched_ops = {
> > 	.process_msg = guc_exec_queue_process_msg,
> > };
> > 
> > static int guc_exec_queue_init(struct xe_exec_queue *q)
> > {
> > -	struct drm_gpu_scheduler *sched;
> > +	struct xe_gpu_scheduler *sched;
> > 	struct xe_guc *guc = exec_queue_to_guc(q);
> > 	struct xe_device *xe = guc_to_xe(guc);
> > 	struct xe_guc_exec_queue *ge;
> > @@ -1163,19 +1166,18 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
> > 
> > 	timeout = (q->vm && xe_vm_no_dma_fences(q->vm)) ? MAX_SCHEDULE_TIMEOUT :
> > 		  q->hwe->eclass->sched_props.job_timeout_ms;
> > -	err = drm_sched_init(&ge->sched, &drm_sched_ops, NULL,
> > +	err = xe_sched_init(&ge->sched, &drm_sched_ops, &xe_sched_ops, NULL,
> > 			     q->lrc[0].ring.size / MAX_JOB_SIZE_BYTES,
> > 			     64, timeout, guc_to_gt(guc)->ordered_wq, NULL,
> > -			     q->name, DRM_SCHED_POLICY_SINGLE_ENTITY,
> > -			     gt_to_xe(q->gt)->drm.dev);
> > +			     q->name, gt_to_xe(q->gt)->drm.dev);
> > 	if (err)
> > 		goto err_free;
> > 
> > 	sched = &ge->sched;
> > -	err = drm_sched_entity_init(&ge->entity, DRM_SCHED_PRIORITY_NORMAL,
> > -				    &sched, 1, NULL);
> > +	err = xe_sched_entity_init(&ge->entity, sched);
> > 	if (err)
> > 		goto err_sched;
> > +	q->priority = DRM_SCHED_PRIORITY_NORMAL;
> > 
> > 	if (xe_exec_queue_is_lr(q))
> > 		INIT_WORK(&q->guc->lr_tdr, xe_guc_exec_queue_lr_cleanup);
> > @@ -1189,7 +1191,7 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
> > 	q->entity = &ge->entity;
> > 
> > 	if (guc_read_stopped(guc))
> > -		drm_sched_stop(sched, NULL);
> > +		xe_sched_stop(sched);
> > 
> > 	mutex_unlock(&guc->submission_state.lock);
> > 
> > @@ -1200,9 +1202,9 @@ static int guc_exec_queue_init(struct xe_exec_queue *q)
> > 	return 0;
> > 
> > err_entity:
> > -	drm_sched_entity_fini(&ge->entity);
> > +	xe_sched_entity_fini(&ge->entity);
> > err_sched:
> > -	drm_sched_fini(&ge->sched);
> > +	xe_sched_fini(&ge->sched);
> > err_free:
> > 	kfree(ge);
> > 
> > @@ -1216,15 +1218,15 @@ static void guc_exec_queue_kill(struct xe_exec_queue *q)
> > 	xe_guc_exec_queue_trigger_cleanup(q);
> > }
> > 
> > -static void guc_exec_queue_add_msg(struct xe_exec_queue *q, struct drm_sched_msg *msg,
> > +static void guc_exec_queue_add_msg(struct xe_exec_queue *q, struct xe_sched_msg *msg,
> > 				   u32 opcode)
> > {
> > 	INIT_LIST_HEAD(&msg->link);
> > 	msg->opcode = opcode;
> > 	msg->private_data = q;
> > 
> > -	trace_drm_sched_msg_add(msg);
> > -	drm_sched_add_msg(&q->guc->sched, msg);
> > +	trace_xe_sched_msg_add(msg);
> > +	xe_sched_add_msg(&q->guc->sched, msg);
> > }
> > 
> > #define STATIC_MSG_CLEANUP	0
> > @@ -1232,7 +1234,7 @@ static void guc_exec_queue_add_msg(struct xe_exec_queue *q, struct drm_sched_msg
> > #define STATIC_MSG_RESUME	2
> > static void guc_exec_queue_fini(struct xe_exec_queue *q)
> > {
> > -	struct drm_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_CLEANUP;
> > +	struct xe_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_CLEANUP;
> > 
> > 	if (!(q->flags & EXEC_QUEUE_FLAG_PERMANENT))
> > 		guc_exec_queue_add_msg(q, msg, CLEANUP);
> > @@ -1241,11 +1243,11 @@ static void guc_exec_queue_fini(struct xe_exec_queue *q)
> > }
> > 
> > static int guc_exec_queue_set_priority(struct xe_exec_queue *q,
> > -				       enum drm_sched_priority priority)
> > +				       enum xe_sched_priority priority)
> > {
> > -	struct drm_sched_msg *msg;
> > +	struct xe_sched_msg *msg;
> > 
> > -	if (q->entity->priority == priority || exec_queue_killed_or_banned(q))
> > +	if (q->priority == priority || exec_queue_killed_or_banned(q))
> > 		return 0;
> > 
> > 	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
> > @@ -1253,13 +1255,14 @@ static int guc_exec_queue_set_priority(struct xe_exec_queue *q,
> > 		return -ENOMEM;
> > 
> > 	guc_exec_queue_add_msg(q, msg, SET_SCHED_PROPS);
> > +	q->priority = priority;
> > 
> > 	return 0;
> > }
> > 
> > static int guc_exec_queue_set_timeslice(struct xe_exec_queue *q, u32 timeslice_us)
> > {
> > -	struct drm_sched_msg *msg;
> > +	struct xe_sched_msg *msg;
> > 
> > 	if (q->sched_props.timeslice_us == timeslice_us ||
> > 	    exec_queue_killed_or_banned(q))
> > @@ -1278,7 +1281,7 @@ static int guc_exec_queue_set_timeslice(struct xe_exec_queue *q, u32 timeslice_u
> > static int guc_exec_queue_set_preempt_timeout(struct xe_exec_queue *q,
> > 					      u32 preempt_timeout_us)
> > {
> > -	struct drm_sched_msg *msg;
> > +	struct xe_sched_msg *msg;
> > 
> > 	if (q->sched_props.preempt_timeout_us == preempt_timeout_us ||
> > 	    exec_queue_killed_or_banned(q))
> > @@ -1296,7 +1299,7 @@ static int guc_exec_queue_set_preempt_timeout(struct xe_exec_queue *q,
> > 
> > static int guc_exec_queue_set_job_timeout(struct xe_exec_queue *q, u32 job_timeout_ms)
> > {
> > -	struct drm_gpu_scheduler *sched = &q->guc->sched;
> > +	struct xe_gpu_scheduler *sched = &q->guc->sched;
> > 	struct xe_guc *guc = exec_queue_to_guc(q);
> > 	struct xe_device *xe = guc_to_xe(guc);
> > 
> > @@ -1304,14 +1307,14 @@ static int guc_exec_queue_set_job_timeout(struct xe_exec_queue *q, u32 job_timeo
> > 	xe_assert(xe, !exec_queue_banned(q));
> > 	xe_assert(xe, !exec_queue_killed(q));
> > 
> > -	sched->timeout = job_timeout_ms;
> > +	sched->base.timeout = job_timeout_ms;
> > 
> > 	return 0;
> > }
> > 
> > static int guc_exec_queue_suspend(struct xe_exec_queue *q)
> > {
> > -	struct drm_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_SUSPEND;
> > +	struct xe_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_SUSPEND;
> > 
> > 	if (exec_queue_killed_or_banned(q) || q->guc->suspend_pending)
> > 		return -EINVAL;
> > @@ -1332,7 +1335,7 @@ static void guc_exec_queue_suspend_wait(struct xe_exec_queue *q)
> > 
> > static void guc_exec_queue_resume(struct xe_exec_queue *q)
> > {
> > -	struct drm_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_RESUME;
> > +	struct xe_sched_msg *msg = q->guc->static_msgs + STATIC_MSG_RESUME;
> > 	struct xe_guc *guc = exec_queue_to_guc(q);
> > 	struct xe_device *xe = guc_to_xe(guc);
> > 
> > @@ -1362,10 +1365,10 @@ static const struct xe_exec_queue_ops guc_exec_queue_ops = {
> > 
> > static void guc_exec_queue_stop(struct xe_guc *guc, struct xe_exec_queue *q)
> > {
> > -	struct drm_gpu_scheduler *sched = &q->guc->sched;
> > +	struct xe_gpu_scheduler *sched = &q->guc->sched;
> > 
> > 	/* Stop scheduling + flush any DRM scheduler operations */
> > -	drm_sched_run_wq_stop(sched);
> > +	xe_sched_submission_stop(sched);
> > 
> > 	/* Clean up lost G2H + reset engine state */
> > 	if (exec_queue_registered(q)) {
> > @@ -1390,18 +1393,14 @@ static void guc_exec_queue_stop(struct xe_guc *guc, struct xe_exec_queue *q)
> > 	 * more than twice.
> > 	 */
> > 	if (!(q->flags & (EXEC_QUEUE_FLAG_KERNEL | EXEC_QUEUE_FLAG_VM))) {
> > -		struct drm_sched_job *drm_job =
> > -			list_first_entry_or_null(&sched->pending_list,
> > -						 struct drm_sched_job, list);
> > -
> > -		if (drm_job) {
> > -			struct xe_sched_job *job = to_xe_sched_job(drm_job);
> > +		struct xe_sched_job *job = xe_sched_first_pending_job(sched);
> > 
> > +		if (job) {
> > 			if ((xe_sched_job_started(job) &&
> > 			    !xe_sched_job_completed(job)) ||
> > -			    drm_sched_invalidate_job(drm_job, 2)) {
> > +			    xe_sched_invalidate_job(job, 2)) {
> > 				trace_xe_sched_job_ban(job);
> > -				sched->timeout = MIN_SCHED_TIMEOUT;
> > +				xe_sched_tdr_queue_imm(&q->guc->sched);
> > 				set_exec_queue_banned(q);
> > 			}
> > 		}
> > @@ -1456,7 +1455,7 @@ int xe_guc_submit_stop(struct xe_guc *guc)
> > 
> > static void guc_exec_queue_start(struct xe_exec_queue *q)
> > {
> > -	struct drm_gpu_scheduler *sched = &q->guc->sched;
> > +	struct xe_gpu_scheduler *sched = &q->guc->sched;
> > 
> > 	if (!exec_queue_killed_or_banned(q)) {
> > 		int i;
> > @@ -1464,11 +1463,10 @@ static void guc_exec_queue_start(struct xe_exec_queue *q)
> > 		trace_xe_exec_queue_resubmit(q);
> > 		for (i = 0; i < q->width; ++i)
> > 			xe_lrc_set_ring_head(q->lrc + i, q->lrc[i].ring.tail);
> > -		drm_sched_resubmit_jobs(sched);
> > +		xe_sched_resubmit_jobs(sched);
> > 	}
> > 
> > -	drm_sched_run_wq_start(sched);
> > -	drm_sched_set_timeout(sched, sched->timeout);
> > +	xe_sched_submission_start(sched);
> > }
> > 
> > int xe_guc_submit_start(struct xe_guc *guc)
> > @@ -1752,7 +1750,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
> > {
> > 	struct xe_guc *guc = exec_queue_to_guc(q);
> > 	struct xe_device *xe = guc_to_xe(guc);
> > -	struct drm_gpu_scheduler *sched = &q->guc->sched;
> > +	struct xe_gpu_scheduler *sched = &q->guc->sched;
> > 	struct xe_sched_job *job;
> > 	struct xe_guc_submit_exec_queue_snapshot *snapshot;
> > 	int i;
> > @@ -1770,7 +1768,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
> > 	snapshot->logical_mask = q->logical_mask;
> > 	snapshot->width = q->width;
> > 	snapshot->refcount = kref_read(&q->refcount);
> > -	snapshot->sched_timeout = sched->timeout;
> > +	snapshot->sched_timeout = sched->base.timeout;
> > 	snapshot->sched_props.timeslice_us = q->sched_props.timeslice_us;
> > 	snapshot->sched_props.preempt_timeout_us =
> > 		q->sched_props.preempt_timeout_us;
> > @@ -1802,8 +1800,8 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
> > 	if (snapshot->parallel_execution)
> > 		guc_exec_queue_wq_snapshot_capture(q, snapshot);
> > 
> > -	spin_lock(&sched->job_list_lock);
> > -	snapshot->pending_list_size = list_count_nodes(&sched->pending_list);
> > +	spin_lock(&sched->base.job_list_lock);
> > +	snapshot->pending_list_size = list_count_nodes(&sched->base.pending_list);
> > 	snapshot->pending_list = kmalloc_array(snapshot->pending_list_size,
> > 					       sizeof(struct pending_list_snapshot),
> > 					       GFP_ATOMIC);
> > @@ -1812,7 +1810,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
> > 		drm_err(&xe->drm, "Skipping GuC Engine pending_list snapshot.\n");
> > 	} else {
> > 		i = 0;
> > -		list_for_each_entry(job, &sched->pending_list, drm.list) {
> > +		list_for_each_entry(job, &sched->base.pending_list, drm.list) {
> > 			snapshot->pending_list[i].seqno =
> > 				xe_sched_job_seqno(job);
> > 			snapshot->pending_list[i].fence =
> > @@ -1824,7 +1822,7 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
> > 		}
> > 	}
> > 
> > -	spin_unlock(&sched->job_list_lock);
> > +	spin_unlock(&sched->base.job_list_lock);
> > 
> > 	return snapshot;
> > }
> > diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
> > index b4baecde60e6..ce803cbdafec 100644
> > --- a/drivers/gpu/drm/xe/xe_migrate.c
> > +++ b/drivers/gpu/drm/xe/xe_migrate.c
> > @@ -395,7 +395,7 @@ struct xe_migrate *xe_migrate_init(struct xe_tile *tile)
> > 		return ERR_CAST(m->q);
> > 	}
> > 	if (xe->info.supports_usm)
> > -		m->q->entity->priority = DRM_SCHED_PRIORITY_KERNEL;
> > +		m->q->priority = DRM_SCHED_PRIORITY_KERNEL;
> > 
> > 	mutex_init(&m->job_mutex);
> > 
> > diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
> > index e32f1cad51d9..5ea458dadf69 100644
> > --- a/drivers/gpu/drm/xe/xe_trace.h
> > +++ b/drivers/gpu/drm/xe/xe_trace.h
> > @@ -14,6 +14,7 @@
> > 
> > #include "xe_bo_types.h"
> > #include "xe_exec_queue_types.h"
> > +#include "xe_gpu_scheduler_types.h"
> > #include "xe_gt_tlb_invalidation_types.h"
> > #include "xe_gt_types.h"
> > #include "xe_guc_exec_queue_types.h"
> > @@ -290,8 +291,8 @@ DEFINE_EVENT(xe_sched_job, xe_sched_job_ban,
> > 	     TP_ARGS(job)
> > );
> > 
> > -DECLARE_EVENT_CLASS(drm_sched_msg,
> > -		    TP_PROTO(struct drm_sched_msg *msg),
> > +DECLARE_EVENT_CLASS(xe_sched_msg,
> > +		    TP_PROTO(struct xe_sched_msg *msg),
> > 		    TP_ARGS(msg),
> > 
> > 		    TP_STRUCT__entry(
> > @@ -309,13 +310,13 @@ DECLARE_EVENT_CLASS(drm_sched_msg,
> > 			      __entry->opcode)
> > );
> > 
> > -DEFINE_EVENT(drm_sched_msg, drm_sched_msg_add,
> > -	     TP_PROTO(struct drm_sched_msg *msg),
> > +DEFINE_EVENT(xe_sched_msg, xe_sched_msg_add,
> > +	     TP_PROTO(struct xe_sched_msg *msg),
> > 	     TP_ARGS(msg)
> > );
> > 
> > -DEFINE_EVENT(drm_sched_msg, drm_sched_msg_recv,
> > -	     TP_PROTO(struct drm_sched_msg *msg),
> > +DEFINE_EVENT(xe_sched_msg, xe_sched_msg_recv,
> > +	     TP_PROTO(struct xe_sched_msg *msg),
> > 	     TP_ARGS(msg)
> > );
> > 
> > diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
> > index 4bc1fef4fc2c..e5a6166eb152 100644
> > --- a/include/drm/gpu_scheduler.h
> > +++ b/include/drm/gpu_scheduler.h
> > @@ -72,16 +72,11 @@ enum drm_sched_priority {
> > 	DRM_SCHED_PRIORITY_UNSET = -2
> > };
> > 
> > -/* Used to chose default scheduling policy*/
> > -extern int default_drm_sched_policy;
> > -
> > -enum drm_sched_policy {
> > -	DRM_SCHED_POLICY_DEFAULT,
> > -	DRM_SCHED_POLICY_RR,
> > -	DRM_SCHED_POLICY_FIFO,
> > -	DRM_SCHED_POLICY_SINGLE_ENTITY,
> > -	DRM_SCHED_POLICY_COUNT,
> > -};
> > +/* Used to chose between FIFO and RR jobs scheduling */
> > +extern int drm_sched_policy;
> > +
> > +#define DRM_SCHED_POLICY_RR    0
> > +#define DRM_SCHED_POLICY_FIFO  1
> > 
> > /**
> >  * struct drm_sched_entity - A wrapper around a job queue (typically
> > @@ -113,9 +108,6 @@ struct drm_sched_entity {
> > 	 */
> > 	struct drm_sched_rq		*rq;
> > 
> > -	/** @single_sched: Single scheduler */
> > -	struct drm_gpu_scheduler	*single_sched;
> > -
> > 	/**
> > 	 * @sched_list:
> > 	 *
> > @@ -394,23 +386,6 @@ enum drm_gpu_sched_stat {
> > 	DRM_GPU_SCHED_STAT_ENODEV,
> > };
> > 
> > -/**
> > - * struct drm_sched_msg - an in-band (relative to GPU scheduler run queue)
> > - * message
> > - *
> > - * Generic enough for backend defined messages, backend can expand if needed.
> > - */
> > -struct drm_sched_msg {
> > -	/** @link: list link into the gpu scheduler list of messages */
> > -	struct list_head		link;
> > -	/**
> > -	 * @private_data: opaque pointer to message private data (backend defined)
> > -	 */
> > -	void				*private_data;
> > -	/** @opcode: opcode of message (backend defined) */
> > -	unsigned int			opcode;
> > -};
> > -
> > /**
> >  * struct drm_sched_backend_ops - Define the backend operations
> >  *	called by the scheduler
> > @@ -488,32 +463,27 @@ struct drm_sched_backend_ops {
> >          * and it's time to clean it up.
> > 	 */
> > 	void (*free_job)(struct drm_sched_job *sched_job);
> > -
> > -	/**
> > -	 * @process_msg: Process a message. Allowed to block, it is this
> > -	 * function's responsibility to free message if dynamically allocated.
> > -	 */
> > -	void (*process_msg)(struct drm_sched_msg *msg);
> > };
> > 
> > /**
> >  * struct drm_gpu_scheduler - scheduler instance-specific data
> >  *
> >  * @ops: backend operations provided by the driver.
> > - * @single_entity: Single entity for the scheduler
> >  * @hw_submission_limit: the max size of the hardware queue.
> >  * @timeout: the time after which a job is removed from the scheduler.
> >  * @name: name of the ring for which this scheduler is being used.
> > - * @sched_rq: priority wise array of run queues.
> > - * @msgs: list of messages to be processed in @work_run
> > + * @num_rqs: Number of run-queues. This is at most DRM_SCHED_PRIORITY_COUNT,
> > + *           as there's usually one run-queue per priority, but could be less.
> > + * @sched_rq: An allocated array of run-queues of size @num_rqs;
> >  * @job_scheduled: once @drm_sched_entity_do_release is called the scheduler
> >  *                 waits on this wait queue until all the scheduled jobs are
> >  *                 finished.
> >  * @hw_rq_count: the number of jobs currently in the hardware queue.
> >  * @job_id_count: used to assign unique id to the each job.
> > - * @run_wq: workqueue used to queue @work_run
> > + * @submit_wq: workqueue used to queue @work_run_job and @work_free_job
> >  * @timeout_wq: workqueue used to queue @work_tdr
> > - * @work_run: schedules jobs, cleans up jobs, and processes messages
> > + * @work_run_job: work which calls run_job op of each scheduler.
> > + * @work_free_job: work which calls free_job op of each scheduler.
> >  * @work_tdr: schedules a delayed call to @drm_sched_job_timedout after the
> >  *            timeout interval is over.
> >  * @pending_list: the list of jobs which are currently in the job queue.
> > @@ -522,49 +492,47 @@ struct drm_sched_backend_ops {
> >  *              guilty and it will no longer be considered for scheduling.
> >  * @score: score to help loadbalancer pick a idle sched
> >  * @_score: score used when the driver doesn't provide one
> > - * @sched_policy: Schedule policy for scheduler
> >  * @ready: marks if the underlying HW is ready to work
> >  * @free_guilty: A hit to time out handler to free the guilty job.
> > - * @pause_run_wq: pause queuing of @work_run on @run_wq
> > + * @pause_submit: pause queuing of @work_submit on @submit_wq
> > + * @own_submit_wq: scheduler owns allocation of @submit_wq
> >  * @dev: system &struct device
> >  *
> >  * One scheduler is implemented for each hardware ring.
> >  */
> > struct drm_gpu_scheduler {
> > 	const struct drm_sched_backend_ops	*ops;
> > -	struct drm_sched_entity		*single_entity;
> > 	uint32_t			hw_submission_limit;
> > 	long				timeout;
> > 	const char			*name;
> > -	struct drm_sched_rq		sched_rq[DRM_SCHED_PRIORITY_COUNT];
> > -	struct list_head		msgs;
> > +	u32                             num_rqs;
> > +	struct drm_sched_rq             **sched_rq;
> > 	wait_queue_head_t		job_scheduled;
> > 	atomic_t			hw_rq_count;
> > 	atomic64_t			job_id_count;
> > -	struct workqueue_struct		*run_wq;
> > +	struct workqueue_struct		*submit_wq;
> > 	struct workqueue_struct		*timeout_wq;
> > -	struct work_struct		work_run;
> > +	struct work_struct		work_run_job;
> > +	struct work_struct		work_free_job;
> > 	struct delayed_work		work_tdr;
> > 	struct list_head		pending_list;
> > 	spinlock_t			job_list_lock;
> > 	int				hang_limit;
> > 	atomic_t                        *score;
> > 	atomic_t                        _score;
> > -	enum drm_sched_policy		sched_policy;
> > 	bool				ready;
> > 	bool				free_guilty;
> > -	bool				pause_run_wq;
> > +	bool				pause_submit;
> > +	bool				own_submit_wq;
> > 	struct device			*dev;
> > };
> > 
> > int drm_sched_init(struct drm_gpu_scheduler *sched,
> > 		   const struct drm_sched_backend_ops *ops,
> > -		   struct workqueue_struct *run_wq,
> > -		   uint32_t hw_submission, unsigned hang_limit,
> > +		   struct workqueue_struct *submit_wq,
> > +		   u32 num_rqs, uint32_t hw_submission, unsigned hang_limit,
> > 		   long timeout, struct workqueue_struct *timeout_wq,
> > -		   atomic_t *score, const char *name,
> > -		   enum drm_sched_policy sched_policy,
> > -		   struct device *dev);
> > +		   atomic_t *score, const char *name, struct device *dev);
> > 
> > void drm_sched_fini(struct drm_gpu_scheduler *sched);
> > int drm_sched_job_init(struct drm_sched_job *job,
> > @@ -589,13 +557,12 @@ void drm_sched_entity_modify_sched(struct drm_sched_entity *entity,
> > 				    struct drm_gpu_scheduler **sched_list,
> >                                    unsigned int num_sched_list);
> > 
> > -void drm_sched_set_timeout(struct drm_gpu_scheduler *sched, long timeout);
> > +void drm_sched_tdr_queue_imm(struct drm_gpu_scheduler *sched);
> > void drm_sched_job_cleanup(struct drm_sched_job *job);
> > void drm_sched_wakeup_if_can_queue(struct drm_gpu_scheduler *sched);
> > -void drm_sched_add_msg(struct drm_gpu_scheduler *sched,
> > -		       struct drm_sched_msg *msg);
> > -void drm_sched_run_wq_stop(struct drm_gpu_scheduler *sched);
> > -void drm_sched_run_wq_start(struct drm_gpu_scheduler *sched);
> > +bool drm_sched_wqueue_ready(struct drm_gpu_scheduler *sched);
> > +void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched);
> > +void drm_sched_wqueue_start(struct drm_gpu_scheduler *sched);
> > void drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad);
> > void drm_sched_start(struct drm_gpu_scheduler *sched, bool full_recovery);
> > void drm_sched_resubmit_jobs(struct drm_gpu_scheduler *sched);
> > @@ -618,8 +585,6 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
> > 			  struct drm_gpu_scheduler **sched_list,
> > 			  unsigned int num_sched_list,
> > 			  atomic_t *guilty);
> > -struct drm_gpu_scheduler *
> > -drm_sched_entity_to_scheduler(struct drm_sched_entity *entity);
> > long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout);
> > void drm_sched_entity_fini(struct drm_sched_entity *entity);
> > void drm_sched_entity_destroy(struct drm_sched_entity *entity);
> > -- 
> > 2.34.1
> > 

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

* Re: [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code
  2023-10-25 17:07   ` Matthew Brost
@ 2023-10-25 17:49     ` Lucas De Marchi
  2023-10-25 21:45       ` Rodrigo Vivi
  0 siblings, 1 reply; 13+ messages in thread
From: Lucas De Marchi @ 2023-10-25 17:49 UTC (permalink / raw)
  To: Matthew Brost; +Cc: intel-xe, Rodrigo Vivi

On Wed, Oct 25, 2023 at 05:07:00PM +0000, Matthew Brost wrote:
>On Wed, Oct 25, 2023 at 08:56:17AM -0500, Lucas De Marchi wrote:
>> On Tue, Oct 24, 2023 at 09:05:20PM -0700, Matthew Brost wrote:
>> > The largest change is the message interface has been removed from the
>> > DRM scheduler. Xe still needs a message interface so it is implemented
>> > in the Xe driver by adding a Xe scheduler layer.
>>
>> can you point to the commits upstream? What commits in our branch it
>> replaces so we know what to drop when drm-xe-next is rebase... ?
>> How was this diff generated ?
>>
>
>This is based on the upstream series [1] that hopefully gets merged
>soon. To create this patch I just dropped in the new drm-scheduler code
>(copied drivers/gpu/drm/scheduler/*.c / *.h into this repo) and updated
>the Xe code as required. The DRM scheduler coded so much in the baseline
>I'm not sure if it worth trying to do fixup patches, rather we just
>merge it on tip and find a proper place these changes during the next
>rebase. Open to other ideas too.

I don't think we should do fixup patches neither, but it's important to
keep documented in the commit message how and what was changed. Like you
did now.

However I think it will be quite troublesome to rebase the branch in
future since you are also changing other parts of the code. So it's not
a matter of just dropping this one patch when we rebase.  Lately it's
usually Rodrigo who is rebasing drm-xe-next, so +Rodrigo.

One alternative that comes to mind is: can you do the rebase and post
the result to a remote branch? Assuming your remote is called xe:

	git fetch xe
	git reset --hard xe/drm-xe-next
	git rebase -i bb46e837b7e59c22a567ae6913ff4d6bf0e9211a

Then drop the patches as you see fit and add the ones from this series.

Lucas De Marchi

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

* Re: [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code
  2023-10-25 17:49     ` Lucas De Marchi
@ 2023-10-25 21:45       ` Rodrigo Vivi
  2023-11-03  3:35         ` Rodrigo Vivi
  0 siblings, 1 reply; 13+ messages in thread
From: Rodrigo Vivi @ 2023-10-25 21:45 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe

> > This is based on the upstream series [1] that hopefully gets merged
> > soon. To create this patch I just dropped in the new drm-scheduler code
> > (copied drivers/gpu/drm/scheduler/*.c / *.h into this repo) and updated
> > the Xe code as required. The DRM scheduler coded so much in the baseline
> > I'm not sure if it worth trying to do fixup patches, rather we just
> > merge it on tip and find a proper place these changes during the next
> > rebase. Open to other ideas too.
> 
> I don't think we should do fixup patches neither, but it's important to
> keep documented in the commit message how and what was changed. Like you
> did now.
> 
> However I think it will be quite troublesome to rebase the branch in
> future since you are also changing other parts of the code. So it's not
> a matter of just dropping this one patch when we rebase.  Lately it's
> usually Rodrigo who is rebasing drm-xe-next, so +Rodrigo.

the rebase won't be easy indeed.
Another aspect is that we will likely need to wait that to propagate
from drm-misc-next to drm-next before we can rebase on drm-next and do
the first pull-request.

> 
> One alternative that comes to mind is: can you do the rebase and post
> the result to a remote branch? Assuming your remote is called xe:
> 
> 	git fetch xe
> 	git reset --hard xe/drm-xe-next
> 	git rebase -i bb46e837b7e59c22a567ae6913ff4d6bf0e9211a

Yes, please! We had a similar situation with the display case and this
is what I asked Jouni to do. Having the reference branch when rebasing
was super helpful.

Besides the reference branch, we need a top commit on drm-xe-next.
(Maybe this commit here?, maybe something more)

But in a way that the
$ git diff drm-xe-next..reference-branch
should be empty

Then we force-push origin/drm-xe-next

and when the rebase on drm-next comes, the drm-sched base patches
will disappear and we won't have any conflict.

> 
> Then drop the patches as you see fit and add the ones from this series.
> 
> Lucas De Marchi

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

* Re: [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code
  2023-10-25 21:45       ` Rodrigo Vivi
@ 2023-11-03  3:35         ` Rodrigo Vivi
  0 siblings, 0 replies; 13+ messages in thread
From: Rodrigo Vivi @ 2023-11-03  3:35 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-xe

On Wed, Oct 25, 2023 at 05:45:24PM -0400, Rodrigo Vivi wrote:
> > > This is based on the upstream series [1] that hopefully gets merged
> > > soon. To create this patch I just dropped in the new drm-scheduler code
> > > (copied drivers/gpu/drm/scheduler/*.c / *.h into this repo) and updated
> > > the Xe code as required. The DRM scheduler coded so much in the baseline
> > > I'm not sure if it worth trying to do fixup patches, rather we just
> > > merge it on tip and find a proper place these changes during the next
> > > rebase. Open to other ideas too.
> > 
> > I don't think we should do fixup patches neither, but it's important to
> > keep documented in the commit message how and what was changed. Like you
> > did now.
> > 
> > However I think it will be quite troublesome to rebase the branch in
> > future since you are also changing other parts of the code. So it's not
> > a matter of just dropping this one patch when we rebase.  Lately it's
> > usually Rodrigo who is rebasing drm-xe-next, so +Rodrigo.
> 
> the rebase won't be easy indeed.
> Another aspect is that we will likely need to wait that to propagate
> from drm-misc-next to drm-next before we can rebase on drm-next and do
> the first pull-request.
> 
> > 
> > One alternative that comes to mind is: can you do the rebase and post
> > the result to a remote branch? Assuming your remote is called xe:
> > 
> > 	git fetch xe
> > 	git reset --hard xe/drm-xe-next
> > 	git rebase -i bb46e837b7e59c22a567ae6913ff4d6bf0e9211a
> 
> Yes, please! We had a similar situation with the display case and this
> is what I asked Jouni to do. Having the reference branch when rebasing
> was super helpful.
> 
> Besides the reference branch, we need a top commit on drm-xe-next.
> (Maybe this commit here?, maybe something more)
> 
> But in a way that the
> $ git diff drm-xe-next..reference-branch
> should be empty
> 
> Then we force-push origin/drm-xe-next
> 
> and when the rebase on drm-next comes, the drm-sched base patches
> will disappear and we won't have any conflict.

Hi Matt, will we have some update here now that the patches got merged?
I'd like to get the update in so we can send the update to the xe.rst
confirming that that is done and the patches here will be vanished on
drm-next rebase.

Thanks,
Rodrigo.

> 
> > 
> > Then drop the patches as you see fit and add the ones from this series.
> > 
> > Lucas De Marchi

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

end of thread, other threads:[~2023-11-03  3:35 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-25  4:05 [Intel-xe] [PATCH] drm/xe: Update to upstream DRM scheduler code Matthew Brost
2023-10-25  4:11 ` [Intel-xe] ✓ CI.Patch_applied: success for " Patchwork
2023-10-25  4:11 ` [Intel-xe] ✗ CI.checkpatch: warning " Patchwork
2023-10-25  4:13 ` [Intel-xe] ✓ CI.KUnit: success " Patchwork
2023-10-25  4:20 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-10-25  4:20 ` [Intel-xe] ✓ CI.Hooks: " Patchwork
2023-10-25  4:21 ` [Intel-xe] ✓ CI.checksparse: " Patchwork
2023-10-25  4:47 ` [Intel-xe] ✗ CI.BAT: failure " Patchwork
2023-10-25 13:56 ` [Intel-xe] [PATCH] " Lucas De Marchi
2023-10-25 17:07   ` Matthew Brost
2023-10-25 17:49     ` Lucas De Marchi
2023-10-25 21:45       ` Rodrigo Vivi
2023-11-03  3:35         ` Rodrigo Vivi

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