linux/drivers/gpu/drm/lima
Matthew Brost a6149f0393 drm/sched: Convert drm scheduler to use a work queue rather than kthread
In Xe, the new Intel GPU driver, a choice has made to have a 1 to 1
mapping between a drm_gpu_scheduler and drm_sched_entity. At first this
seems a bit odd but let us explain the reasoning below.

1. In Xe the submission order from multiple drm_sched_entity is not
guaranteed to be the same completion even if targeting the same hardware
engine. This is because in Xe we have a firmware scheduler, the GuC,
which allowed to reorder, timeslice, and preempt submissions. If a using
shared drm_gpu_scheduler across multiple drm_sched_entity, the TDR falls
apart as the TDR expects submission order == completion order. Using a
dedicated drm_gpu_scheduler per drm_sched_entity solve this problem.

2. In Xe submissions are done via programming a ring buffer (circular
buffer), a drm_gpu_scheduler provides a limit on number of jobs, if the
limit of number jobs is set to RING_SIZE / MAX_SIZE_PER_JOB we get flow
control on the ring for free.

A problem with this design is currently a drm_gpu_scheduler uses a
kthread for submission / job cleanup. This doesn't scale if a large
number of drm_gpu_scheduler are used. To work around the scaling issue,
use a worker rather than kthread for submission / job cleanup.

v2:
  - (Rob Clark) Fix msm build
  - Pass in run work queue
v3:
  - (Boris) don't have loop in worker
v4:
  - (Tvrtko) break out submit ready, stop, start helpers into own patch
v5:
  - (Boris) default to ordered work queue
v6:
  - (Luben / checkpatch) fix alignment in msm_ringbuffer.c
  - (Luben) s/drm_sched_submit_queue/drm_sched_wqueue_enqueue
  - (Luben) Update comment for drm_sched_wqueue_enqueue
  - (Luben) Positive check for submit_wq in drm_sched_init
  - (Luben) s/alloc_submit_wq/own_submit_wq
v7:
  - (Luben) s/drm_sched_wqueue_enqueue/drm_sched_run_job_queue
v8:
  - (Luben) Adjust var names / comments

Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Luben Tuikov <luben.tuikov@amd.com>
Link: https://lore.kernel.org/r/20231031032439.1558703-3-matthew.brost@intel.com
Signed-off-by: Luben Tuikov <ltuikov89@gmail.com>
History 2023-11-01 17:29:21 -04:00
..
Kconfig drm/lima: Add optional devfreq and cooling device support 2020-03-28 16:29:46 +08:00
lima_bcast.c drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_bcast.h drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_ctx.c Revert "drm/lima: add usage counting method to ctx_mgr" 2023-04-05 08:40:47 +08:00
lima_ctx.h Revert "drm/lima: add usage counting method to ctx_mgr" 2023-04-05 08:40:47 +08:00
lima_devfreq.c drm/lima: Fix opp clkname setting in case of missing regulator 2022-11-14 19:08:21 +08:00
lima_devfreq.h drm for 5.13-rc1 2021-04-28 10:01:40 -07:00
lima_device.c Linux 5.16-rc5 2021-12-14 10:24:28 +01:00
lima_device.h Revert "drm/lima: allocate unique id per drm_file" 2023-04-05 08:40:06 +08:00
lima_dlbu.c drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_dlbu.h drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_drv.c drm: Explicitly include correct DT includes 2023-07-21 09:12:43 +02:00
lima_drv.h Revert "drm/lima: allocate unique id per drm_file" 2023-04-05 08:40:06 +08:00
lima_dump.h drm/lima: save task info dump when task fail 2020-03-22 09:35:19 +08:00
lima_gem.c drm/shmem-helper: Switch to reservation lock 2023-06-21 20:22:20 +03:00
lima_gem.h drm/lima: support heap buffer creation 2020-01-27 22:01:09 +08:00
lima_gp.c drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_gp.h drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_l2_cache.c drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_l2_cache.h drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_mmu.c drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_mmu.h drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_pmu.c drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_pmu.h drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_pp.c drm/lima: fix wait pp reset timeout 2020-07-20 08:46:06 +08:00
lima_pp.h drm/lima: add resume/suspend callback for each ip 2020-04-24 20:51:10 +08:00
lima_regs.h drm/lima: update register info 2020-01-27 22:00:12 +08:00
lima_sched.c drm/sched: Convert drm scheduler to use a work queue rather than kthread 2023-11-01 17:29:21 -04:00
lima_sched.h drm/lima: use scheduler dependency tracking 2021-08-30 10:58:20 +02:00
lima_trace.c drm/lima: add trace point for tasks 2020-03-22 09:57:21 +08:00
lima_trace.h treewide: Add missing semicolons to __assign_str uses 2021-06-30 09:19:14 -04:00
lima_vm.c drm: lima: fix common struct sg_table related issues 2020-09-10 08:18:35 +02:00
lima_vm.h drm/lima: check vm != NULL in lima_vm_put 2020-04-24 20:50:46 +08:00
Makefile drm/lima: Add optional devfreq and cooling device support 2020-03-28 16:29:46 +08:00