• Chris Wilson's avatar
    drm/i915: Lock signaler timeline while navigating · 6a79d848
    Chris Wilson authored
    As we need to take a walk back along the signaler timeline to find the
    fence before upon which we want to wait, we need to lock that timeline
    to prevent it being modified as we walk. Similarly, we also need to
    acquire a reference to the earlier fence while it still exists!
    
    Though we lack the correct locking today, we are saved by the
    overarching struct_mutex -- but that protection is being removed.
    
    v2: Tvrtko made me realise I was being lax and using annotations to
    ignore the AB-BA deadlock from the timeline overlap. As it would be
    possible to construct a second request that was using a semaphore from the
    same timeline as ourselves, we could quite easily end up in a situation
    where we deadlocked in our mutex waits. Avoid that by using a trylock
    and falling back to a normal dma-fence await if contended.
    
    v3: Eek, the signal->timeline is volatile and must be carefully
    dereferenced to ensure it is valid.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190919111912.21631-2-chris@chris-wilson.co.uk
    6a79d848
i915_request.c 46.7 KB