• Chris Wilson's avatar
    drm/i915: Move object release to a freelist + worker · fbbd37b3
    Chris Wilson authored
    We want to hide the latency of releasing objects and their backing
    storage from the submission, so we move the actual free to a worker.
    This allows us to switch to struct_mutex freeing of the object in the
    next patch.
    
    Furthermore, if we know that the object we are dereferencing remains valid
    for the duration of our access, we can forgo the usual synchronisation
    barriers and atomic reference counting. To ensure this we defer freeing
    an object til after an RCU grace period, such that any lookup of the
    object within an RCU read critical section will remain valid until
    after we exit that critical section. We also employ this delay for
    rate-limiting the serialisation on reallocation - we have to slow down
    object creation in order to prevent resource starvation (in particular,
    files).
    
    v2: Return early in i915_gem_tiling() ioctl to skip over superfluous
    work on error.
    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-19-chris@chris-wilson.co.uk
    fbbd37b3
i915_gem_shrinker.c 14.7 KB