1. Nov 02, 2023
    • Matthew Brost's avatar
      drm/sched: Split free_job into own work item · f7fe64ad
      Matthew Brost authored
      
      
      Rather than call free_job and run_job in same work item have a dedicated
      work item for each. This aligns with the design and intended use of work
      queues.
      
      v2:
         - Test for DMA_FENCE_FLAG_TIMESTAMP_BIT before setting
           timestamp in free_job() work item (Danilo)
      v3:
        - Drop forward dec of drm_sched_select_entity (Boris)
        - Return in drm_sched_run_job_work if entity NULL (Boris)
      v4:
        - Replace dequeue with peek and invert logic (Luben)
        - Wrap to 100 lines (Luben)
        - Update comments for *_queue / *_queue_if_ready functions (Luben)
      v5:
        - Drop peek argument, blindly reinit idle (Luben)
        - s/drm_sched_free_job_queue_if_ready/drm_sched_free_job_queue_if_done (Luben)
        - Update work_run_job & work_free_job kernel doc (Luben)
      v6:
        - Do not move drm_sched_select_entity in file (Luben)
      
      Signed-off-by: default avatarMatthew Brost <matthew.brost@intel.com>
      Link: https://lore.kernel.org/r/20231031032439.1558703-4-matthew.brost@intel.com
      
      
      Reviewed-by: default avatarLuben Tuikov <ltuikov89@gmail.com>
      Signed-off-by: default avatarLuben Tuikov <ltuikov89@gmail.com>
      f7fe64ad
    • Matthew Brost's avatar
      drm/sched: Convert drm scheduler to use a work queue rather than kthread · a6149f03
      Matthew Brost authored
      
      
      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: default avatarMatthew Brost <matthew.brost@intel.com>
      Reviewed-by: default avatarLuben Tuikov <luben.tuikov@amd.com>
      Link: https://lore.kernel.org/r/20231031032439.1558703-3-matthew.brost@intel.com
      
      
      Signed-off-by: default avatarLuben Tuikov <ltuikov89@gmail.com>
      a6149f03
    • Matthew Brost's avatar
      drm/sched: Add drm_sched_wqueue_* helpers · 35963cf2
      Matthew Brost authored
      
      
      Add scheduler wqueue ready, stop, and start helpers to hide the
      implementation details of the scheduler from the drivers.
      
      v2:
        - s/sched_wqueue/sched_wqueue (Luben)
        - Remove the extra white line after the return-statement (Luben)
        - update drm_sched_wqueue_ready comment (Luben)
      
      Cc: Luben Tuikov <luben.tuikov@amd.com>
      Signed-off-by: default avatarMatthew Brost <matthew.brost@intel.com>
      Reviewed-by: default avatarLuben Tuikov <luben.tuikov@amd.com>
      Link: https://lore.kernel.org/r/20231031032439.1558703-2-matthew.brost@intel.com
      
      
      Signed-off-by: default avatarLuben Tuikov <ltuikov89@gmail.com>
      35963cf2
  2. Nov 01, 2023
  3. Oct 31, 2023
  4. Oct 30, 2023
  5. Oct 28, 2023
  6. Oct 27, 2023