• Chris Wilson's avatar
    drm/i915: Be wary of data races when reading the active execlists · b82a8b93
    Chris Wilson authored
    To implement preempt-to-busy (and so efficient timeslicing and best utilization
    of the hardware submission ports) we let the GPU run asynchronously in respect
    to the ELSP submission queue. This created challenges in keeping and accessing
    the driver state mirroring the asynchronous GPU execution.
    
    The latest occurence of this was spotted by KCSAN:
    
    [ 1413.563200] BUG: KCSAN: data-race in __await_execution+0x217/0x370 [i915]
    [ 1413.563221]
    [ 1413.563236] race at unknown origin, with read to 0xffff88885bb6c478 of 8 bytes by task 9654 on cpu 1:
    [ 1413.563548]  __await_execution+0x217/0x370 [i915]
    [ 1413.563891]  i915_request_await_dma_fence+0x4eb/0x6a0 [i915]
    [ 1413.564235]  i915_request_await_object+0x421/0x490 [i915]
    [ 1413.564577]  i915_gem_do_execbuffer+0x29b7/0x3c40 [i915]
    [ 1413.564967]  i915_gem_execbuffer2_ioctl+0x22f/0x5c0 [i915]
    [ 1413.564998]  drm_ioctl_kernel+0x156/0x1b0
    [ 1413.565022]  drm_ioctl+0x2ff/0x480
    [ 1413.565046]  __x64_sys_ioctl+0x87/0xd0
    [ 1413.565069]  do_syscall_64+0x4d/0x80
    [ 1413.565094]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    To complicate matters, we have to both avoid the read tearing of *active and
    avoid any write tearing as perform the pending[] -> inflight[] promotion of the
    execlists.
    
    This is because we cannot rely on the memcpy doing u64 aligned copies on all
    kernels/platforms and so we opt to open-code it with explicit WRITE_ONCE
    annotations to satisfy KCSAN.
    
    v2: When in doubt, write the same comment again.
    v3: Expanded commit message.
    
    Fixes: b55230e5 ("drm/i915: Check for awaits on still currently executing requests")
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200716142207.13003-1-chris@chris-wilson.co.ukSigned-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    [Joonas: Rebased and reordered into drm-intel-gt-next branch]
    [Joonas: Added expanded commit message from Tvrtko and Chris]
    Signed-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    (cherry picked from commit b4d9145b)
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    b82a8b93
intel_lrc.c 164 KB