• Chris Wilson's avatar
    drm/i915: Move GEM activity tracking into a common struct reservation_object · d07f0e59
    Chris Wilson authored
    In preparation to support many distinct timelines, we need to expand the
    activity tracking on the GEM object to handle more than just a request
    per engine. We already use the struct reservation_object on the dma-buf
    to handle many fence contexts, so integrating that into the GEM object
    itself is the preferred solution. (For example, we can now share the same
    reservation_object between every consumer/producer using this buffer and
    skip the manual import/export via dma-buf.)
    
    v2: Reimplement busy-ioctl (by walking the reservation object), postpone
    the ABI change for another day. Similarly use the reservation object to
    find the last_write request (if active and from i915) for choosing
    display CS flips.
    
    Caveats:
    
     * busy-ioctl: busy-ioctl only reports on the native fences, it will not
    warn of stalls (in set-domain-ioctl, pread/pwrite etc) if the object is
    being rendered to by external fences. It also will not report the same
    busy state as wait-ioctl (or polling on the dma-buf) in the same
    circumstances. On the plus side, it does retain reporting of which
    *i915* engines are engaged with this object.
    
     * non-blocking atomic modesets take a step backwards as the wait for
    render completion blocks the ioctl. This is fixed in a subsequent
    patch to use a fence instead for awaiting on the rendering, see
    "drm/i915: Restore nonblocking awaits for modesetting"
    
     * dynamic array manipulation for shared-fences in reservation is slower
    than the previous lockless static assignment (e.g. gem_exec_lut_handle
    runtime on ivb goes from 42s to 66s), mainly due to atomic operations
    (maintaining the fence refcounts).
    
     * loss of object-level retirement callbacks, emulated by VMA retirement
    tracking.
    
     * minor loss of object-level last activity information from debugfs,
    could be replaced with per-vma information if desired
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/20161028125858.23563-21-chris@chris-wilson.co.uk
    d07f0e59
i915_drv.h 123 KB