A little bit of decoupling the internal scheduler implementation details from the public API - replace the name 'wq' in submission start/stop/ready helpers with generic 'submission'. Decoupling is however not complete since users which pass in their own workqueue still know that is what the scheduler uses. Still, this is a step in the right direction.
Signed-off-by: Tvrtko Ursulin <[email protected]> Cc: Danilo Krummrich <[email protected]> Cc: Matthew Brost <[email protected]> Cc: Philipp Stanner <[email protected]> --- drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 8 +++---- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 8 +++---- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 8 +++---- drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c | 2 +- drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c | 4 ++-- drivers/gpu/drm/msm/adreno/adreno_device.c | 4 ++-- drivers/gpu/drm/scheduler/sched_main.c | 26 ++++++++++----------- drivers/gpu/drm/xe/xe_gpu_scheduler.c | 4 ++-- include/drm/gpu_scheduler.h | 6 ++--- 13 files changed, 42 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c index 389bad724273..b8d4cda0fc1c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c @@ -1773,7 +1773,7 @@ static int amdgpu_debugfs_test_ib_show(struct seq_file *m, void *unused) if (!amdgpu_ring_sched_ready(ring)) continue; - drm_sched_wqueue_stop(&ring->sched); + drm_sched_submission_stop(&ring->sched); } seq_puts(m, "run ib test:\n"); @@ -1789,7 +1789,7 @@ static int amdgpu_debugfs_test_ib_show(struct seq_file *m, void *unused) if (!amdgpu_ring_sched_ready(ring)) continue; - drm_sched_wqueue_start(&ring->sched); + drm_sched_submission_start(&ring->sched); } up_write(&adev->reset_domain->sem); @@ -2029,7 +2029,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val) goto pro_end; /* stop the scheduler */ - drm_sched_wqueue_stop(&ring->sched); + drm_sched_submission_stop(&ring->sched); /* preempt the IB */ r = amdgpu_ring_preempt_ib(ring); @@ -2063,7 +2063,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val) failure: /* restart the scheduler */ - drm_sched_wqueue_start(&ring->sched); + drm_sched_submission_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 211d30f03d25..1e6b75ecafe4 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -5632,7 +5632,7 @@ static void amdgpu_device_halt_activities(struct amdgpu_device *adev, if (!amdgpu_ring_sched_ready(ring)) continue; - drm_sched_wqueue_stop(&ring->sched); + drm_sched_submission_stop(&ring->sched); if (need_emergency_restart) amdgpu_job_stop_all_jobs_on_sched(&ring->sched); @@ -5716,7 +5716,7 @@ static int amdgpu_device_sched_resume(struct list_head *device_list, if (!amdgpu_ring_sched_ready(ring)) continue; - drm_sched_wqueue_start(&ring->sched); + drm_sched_submission_start(&ring->sched); } if (!drm_drv_uses_atomic_modeset(adev_to_drm(tmp_adev)) && !job_signaled) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c index 9ecc6387c1eb..57ebae8bdc78 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c @@ -136,11 +136,11 @@ static enum drm_gpu_sched_stat amdgpu_job_timedout(struct drm_sched_job *s_job) dev_err(adev->dev, "Starting %s ring reset\n", s_job->sched->name); /* Stop the scheduler to prevent anybody else from touching the ring buffer. */ - drm_sched_wqueue_stop(&ring->sched); + drm_sched_submission_stop(&ring->sched); r = amdgpu_ring_reset(ring, job->vmid, job->hw_fence); if (!r) { /* Start the scheduler again */ - drm_sched_wqueue_start(&ring->sched); + drm_sched_submission_start(&ring->sched); atomic_inc(&ring->adev->gpu_reset_counter); dev_err(adev->dev, "Ring %s reset succeeded\n", ring->sched.name); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c index b97fa35bac23..09593fcdb2f7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c @@ -906,7 +906,7 @@ bool amdgpu_ring_sched_ready(struct amdgpu_ring *ring) if (!ring) return false; - if (ring->no_scheduler || !drm_sched_wqueue_ready(&ring->sched)) + if (ring->no_scheduler || !drm_sched_submission_ready(&ring->sched)) return false; return true; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c index fcd81242059e..1ac0d28d8049 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c @@ -568,10 +568,10 @@ int amdgpu_sdma_reset_engine(struct amdgpu_device *adev, uint32_t instance_id, * This ensures that no new tasks are submitted to the queues while * the reset is in progress. */ - drm_sched_wqueue_stop(&gfx_ring->sched); + drm_sched_submission_stop(&gfx_ring->sched); if (adev->sdma.has_page_queue) - drm_sched_wqueue_stop(&page_ring->sched); + drm_sched_submission_stop(&page_ring->sched); } if (sdma_instance->funcs->stop_kernel_queue) { @@ -601,10 +601,10 @@ int amdgpu_sdma_reset_engine(struct amdgpu_device *adev, uint32_t instance_id, */ if (!ret) { amdgpu_fence_driver_force_completion(gfx_ring, NULL); - drm_sched_wqueue_start(&gfx_ring->sched); + drm_sched_submission_start(&gfx_ring->sched); if (adev->sdma.has_page_queue) { amdgpu_fence_driver_force_completion(page_ring, NULL); - drm_sched_wqueue_start(&page_ring->sched); + drm_sched_submission_start(&page_ring->sched); } } } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index 616967519869..b261aa7c1ba8 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -1512,9 +1512,9 @@ int amdgpu_vcn_ring_reset(struct amdgpu_ring *ring, * This ensures that no new tasks are submitted to the queues while * the reset is in progress. */ - drm_sched_wqueue_stop(&vinst->ring_dec.sched); + drm_sched_submission_stop(&vinst->ring_dec.sched); for (i = 0; i < vinst->num_enc_rings; i++) - drm_sched_wqueue_stop(&vinst->ring_enc[i].sched); + drm_sched_submission_stop(&vinst->ring_enc[i].sched); /* Perform the VCN reset for the specified instance */ r = vinst->reset(vinst); @@ -1540,9 +1540,9 @@ int amdgpu_vcn_ring_reset(struct amdgpu_ring *ring, * if they were stopped by this function. This allows new tasks * to be submitted to the queues after the reset is complete. */ - drm_sched_wqueue_start(&vinst->ring_dec.sched); + drm_sched_submission_start(&vinst->ring_dec.sched); for (i = 0; i < vinst->num_enc_rings; i++) - drm_sched_wqueue_start(&vinst->ring_enc[i].sched); + drm_sched_submission_start(&vinst->ring_enc[i].sched); unlock: mutex_unlock(&vinst->engine_reset_mutex); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c index 409e103ffe8c..fa478f9a3875 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c @@ -472,7 +472,7 @@ void amdgpu_xcp_release_sched(struct amdgpu_device *adev, if (!adev->xcp_mgr) return; - if (drm_sched_wqueue_ready(sched)) { + if (drm_sched_submission_ready(sched)) { struct amdgpu_ring *ring = to_amdgpu_ring(sched); atomic_dec(&adev->xcp_mgr->xcp[ring->xcp_id].ref_cnt); diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c index 7f001c32e911..08e9abfb381c 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c @@ -1663,7 +1663,7 @@ static int vcn_v4_0_3_reset_jpeg_pre_helper(struct amdgpu_device *adev, int inst for (i = 0; i < adev->jpeg.num_jpeg_rings; ++i) { ring = &adev->jpeg.inst[inst].ring_dec[i]; - drm_sched_wqueue_stop(&ring->sched); + drm_sched_submission_stop(&ring->sched); /* Get the last emitted fence sequence */ wait_seq = atomic_read(&ring->fence_drv.last_seq); if (wait_seq) @@ -1700,7 +1700,7 @@ static int vcn_v4_0_3_reset_jpeg_post_helper(struct amdgpu_device *adev, int ins if (r) return r; - drm_sched_wqueue_start(&ring->sched); + drm_sched_submission_start(&ring->sched); DRM_DEV_DEBUG(adev->dev, "JPEG ring %d (inst %d) restored and sched restarted\n", i, inst); diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c index d3db0494341e..2aae051b5f5a 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c @@ -1310,7 +1310,7 @@ static int vcn_v5_0_1_reset_jpeg_pre_helper(struct amdgpu_device *adev, int inst for (i = 0; i < adev->jpeg.num_jpeg_rings; ++i) { ring = &adev->jpeg.inst[inst].ring_dec[i]; - drm_sched_wqueue_stop(&ring->sched); + drm_sched_submission_stop(&ring->sched); wait_seq = atomic_read(&ring->fence_drv.last_seq); if (wait_seq) continue; @@ -1346,7 +1346,7 @@ static int vcn_v5_0_1_reset_jpeg_post_helper(struct amdgpu_device *adev, int ins if (r) return r; - drm_sched_wqueue_start(&ring->sched); + drm_sched_submission_start(&ring->sched); DRM_DEV_DEBUG(adev->dev, "JPEG ring %d (inst %d) restored and sched restarted\n", i, inst); diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c index 7f20320ef66a..34485257300e 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_device.c +++ b/drivers/gpu/drm/msm/adreno/adreno_device.c @@ -347,7 +347,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_wqueue_stop(sched); + drm_sched_submission_stop(sched); } } @@ -358,7 +358,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_wqueue_start(sched); + drm_sched_submission_start(sched); } } diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c index d2ca01b31ee4..4e180f21b946 100644 --- a/drivers/gpu/drm/scheduler/sched_main.c +++ b/drivers/gpu/drm/scheduler/sched_main.c @@ -387,7 +387,7 @@ void drm_sched_stop(struct drm_gpu_scheduler *sched, struct drm_sched_job *bad) { struct drm_sched_job *s_job, *tmp; - drm_sched_wqueue_stop(sched); + drm_sched_submission_stop(sched); /* * Reinsert back the bad job here - now it's safe as @@ -497,7 +497,7 @@ void drm_sched_start(struct drm_gpu_scheduler *sched, int errno) } drm_sched_start_timeout_unlocked(sched); - drm_sched_wqueue_start(sched); + drm_sched_submission_start(sched); } EXPORT_SYMBOL(drm_sched_start); @@ -1129,7 +1129,7 @@ static void drm_sched_cancel_remaining_jobs(struct drm_gpu_scheduler *sched) */ void drm_sched_fini(struct drm_gpu_scheduler *sched) { - drm_sched_wqueue_stop(sched); + drm_sched_submission_stop(sched); /* Wakeup everyone stuck in drm_sched_entity_flush for this scheduler */ wake_up_all(&sched->job_scheduled); @@ -1187,49 +1187,49 @@ 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 + * drm_sched_submission_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) +bool drm_sched_submission_ready(struct drm_gpu_scheduler *sched) { return sched->ready; } -EXPORT_SYMBOL(drm_sched_wqueue_ready); +EXPORT_SYMBOL(drm_sched_submission_ready); /** - * drm_sched_wqueue_stop - stop scheduler submission + * drm_sched_submission_stop - stop scheduler submission * @sched: scheduler instance * * Stops the scheduler from pulling new jobs from entities. It also stops * freeing jobs automatically through drm_sched_backend_ops.free_job(). */ -void drm_sched_wqueue_stop(struct drm_gpu_scheduler *sched) +void drm_sched_submission_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); +EXPORT_SYMBOL(drm_sched_submission_stop); /** - * drm_sched_wqueue_start - start scheduler submission + * drm_sched_submission_start - start scheduler submission * @sched: scheduler instance * - * Restarts the scheduler after drm_sched_wqueue_stop() has stopped it. + * Restarts the scheduler after drm_sched_submission_stop() has stopped it. * * This function is not necessary for 'conventional' startup. The scheduler is * fully operational after drm_sched_init() succeeded. */ -void drm_sched_wqueue_start(struct drm_gpu_scheduler *sched) +void drm_sched_submission_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); +EXPORT_SYMBOL(drm_sched_submission_start); /** * drm_sched_is_stopped() - Checks whether drm_sched is stopped diff --git a/drivers/gpu/drm/xe/xe_gpu_scheduler.c b/drivers/gpu/drm/xe/xe_gpu_scheduler.c index 67d8ce368486..ed7f4f52b3c8 100644 --- a/drivers/gpu/drm/xe/xe_gpu_scheduler.c +++ b/drivers/gpu/drm/xe/xe_gpu_scheduler.c @@ -91,13 +91,13 @@ void xe_sched_fini(struct xe_gpu_scheduler *sched) void xe_sched_submission_start(struct xe_gpu_scheduler *sched) { - drm_sched_wqueue_start(&sched->base); + drm_sched_submission_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); + drm_sched_submission_stop(&sched->base); cancel_work_sync(&sched->work_process_msg); } diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h index d61c19e78182..342e28611509 100644 --- a/include/drm/gpu_scheduler.h +++ b/include/drm/gpu_scheduler.h @@ -640,9 +640,9 @@ unsigned long drm_sched_suspend_timeout(struct drm_gpu_scheduler *sched); void drm_sched_resume_timeout(struct drm_gpu_scheduler *sched, unsigned long remaining); void drm_sched_tdr_queue_imm(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); +bool drm_sched_submission_ready(struct drm_gpu_scheduler *sched); +void drm_sched_submission_stop(struct drm_gpu_scheduler *sched); +void drm_sched_submission_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, int errno); void drm_sched_resubmit_jobs(struct drm_gpu_scheduler *sched); -- 2.54.0
