• Daniel Vetter's avatar
    drm/i915: Ensure consistent control flow __i915_gem_active_get_rcu · c75870d8
    Daniel Vetter authored
    This issue here is (I think) purely theoretical, since a compiler
    would need to be especially foolish to recompute the value of
    i915_gem_request_completed right after it was already used. Hence the
    additional barrier() is also not really a restriction.
    
    But I believe this to be at least permissible, and since our rcu
    trickery is a beast it's worth to annotate all the corner cases.
    Chris proposed to instead just wrap a READ_ONCE around
    request->fence.seqno in i915_gem_request_completed. But that has a
    measurable impact on code size, and everywhere we hold a full
    reference to the underlying request it's also not needed. And
    personally I'd like to have just enough barriers and locking needed
    for correctness, but not more - it makes it much easier in the future
    to understand what's going on.
    
    Since the busy ioctl has now fully embraced it's races there's no
    point annotating it there too. We really only need it in
    active_get_rcu, since that function _must_ deliver a correct snapshot
    of the active fences (and not chase something else).
    
    v2: Polish the comment a bit more (Chris).
    
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Link: http://patchwork.freedesktop.org/patch/msgid/1471856122-466-1-git-send-email-daniel.vetter@ffwll.ch
    c75870d8
i915_gem_request.h 23.2 KB