• Luben Tuikov's avatar
    drm/sched: Don't disturb the entity when in RR-mode scheduling · bc8d6a9d
    Luben Tuikov authored
    Don't call drm_sched_select_entity() in drm_sched_run_job_queue().  In fact,
    rename __drm_sched_run_job_queue() to just drm_sched_run_job_queue(), and let
    it do just that, schedule the work item for execution.
    
    The problem is that drm_sched_run_job_queue() calls drm_sched_select_entity()
    to determine if the scheduler has an entity ready in one of its run-queues,
    and in the case of the Round-Robin (RR) scheduling, the function
    drm_sched_rq_select_entity_rr() does just that, selects the _next_ entity
    which is ready, sets up the run-queue and completion and returns that
    entity. The FIFO scheduling algorithm is unaffected.
    
    Now, since drm_sched_run_job_work() also calls drm_sched_select_entity(), then
    in the case of RR scheduling, that would result in drm_sched_select_entity()
    having been called twice, which may result in skipping a ready entity if more
    than one entity is ready. This commit fixes this by eliminating the call to
    drm_sched_select_entity() from drm_sched_run_job_queue(), and leaves it only
    in drm_sched_run_job_work().
    
    v2: Rebased on top of Tvrtko's renames series of patches. (Luben)
        Add fixes-tag. (Tvrtko)
    Signed-off-by: default avatarLuben Tuikov <ltuikov89@gmail.com>
    Fixes: f7fe64ad ("drm/sched: Split free_job into own work item")
    Reviewed-by: default avatarMatthew Brost <matthew.brost@intel.com>
    Reviewed-by: default avatarDanilo Krummrich <dakr@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20231107041020.10035-2-ltuikov89@gmail.com
    bc8d6a9d
sched_main.c 37.2 KB