• C
    drm/i915: Enable userspace to opt-out of implicit fencing · 77ae9957
    Chris Wilson 提交于
    Userspace is faced with a dilemma. The kernel requires implicit fencing
    to manage resource usage (we always must wait for the GPU to finish
    before releasing its PTE) and for third parties. However, userspace may
    wish to avoid this serialisation if it is either using explicit fencing
    between parties and wants more fine-grained access to buffers (e.g. it
    may partition the buffer between uses and track fences on ranges rather
    than the implicit fences tracking the whole object). It follows that
    userspace needs a mechanism to avoid the kernel's serialisation on its
    implicit fences before execbuf execution.
    
    The next question is whether this is an object, execbuf or context flag.
    Hybrid users (such as using explicit EGL_ANDROID_native_sync fencing on
    shared winsys buffers, but implicit fencing on internal surfaces)
    require a per-object level flag. Given that this flag need to be only
    set once for the lifetime of the object, this reduces the convenience of
    having an execbuf or context level flag (and avoids having multiple
    pieces of uABI controlling the same feature).
    
    Incorrect use of this flag will result in rendering corruption and GPU
    hangs - but will not result in use-after-free or similar resource
    tracking issues.
    
    Serious caveat: write ordering is not strictly correct after setting
    this flag on a render target on multiple engines. This affects all
    subsequent GEM operations (execbuf, set-domain, pread) and shared
    dma-buf operations. A fix is possible - but costly (both in terms of
    further ABI changes and runtime overhead).
    
    Testcase: igt/gem_exec_async
    Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Acked-by: NChad Versace <chadversary@chromium.org>
    Link: http://patchwork.freedesktop.org/patch/msgid/20170127094008.27489-1-chris@chris-wilson.co.uk
    77ae9957
i915_gem_execbuffer.c 52.8 KB