• Boris Brezillon's avatar
    drm/sched: Call drm_sched_fence_set_parent() from drm_sched_fence_scheduled() · db8b4968
    Boris Brezillon authored
    
    
    Drivers that can delegate waits to the firmware/GPU pass the scheduled
    fence to drm_sched_job_add_dependency(), and issue wait commands to
    the firmware/GPU at job submission time. For this to be possible, they
    need all their 'native' dependencies to have a valid parent since this
    is where the actual HW fence information are encoded.
    
    In drm_sched_main(), we currently call drm_sched_fence_set_parent()
    after drm_sched_fence_scheduled(), leaving a short period of time
    during which the job depending on this fence can be submitted.
    
    Since setting parent and signaling the fence are two things that are
    kinda related (you can't have a parent if the job hasn't been scheduled),
    it probably makes sense to pass the parent fence to
    drm_sched_fence_scheduled() and let it call drm_sched_fence_set_parent()
    before it signals the scheduled fence.
    
    Here is a detailed description of the race we are fixing here:
    
    Thread A				Thread B
    
    - calls drm_sched_fence_scheduled()
    - signals s_fence->scheduled which
      wakes up thread B
    
    					- entity dep signaled, checking
    					  the next dep
    					- no more deps waiting
    					- entity is picked for job
    					  submission by drm_gpu_scheduler
    					- run_job() is called
    					- run_job() tries to
    					  collect native fence info from
    					  s_fence->parent, but it's
    					  NULL =>
    					  BOOM, we can't do our native
    					  wait
    
    - calls drm_sched_fence_set_parent()
    
    v2:
    * Fix commit message
    
    v3:
    * Add a detailed description of the race to the commit message
    * Add Luben's R-b
    Signed-off-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
    Cc: Frank Binns <frank.binns@imgtec.com>
    Cc: Sarah Walker <sarah.walker@imgtec.com>
    Cc: Donald Robson <donald.robson@imgtec.com>
    Cc: Luben Tuikov <luben.tuikov@amd.com>
    Cc: David Airlie <airlied@gmail.com>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: Sumit Semwal <sumit.semwal@linaro.org>
    Cc: "Christian König" <christian.koenig@amd.com>
    Reviewed-by: default avatarLuben Tuikov <luben.tuikov@amd.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230623075204.382350-1-boris.brezillon@collabora.com
    db8b4968
gpu_scheduler.h 19.6 KB