• Chris Wilson's avatar
    drm/i915: Manually unwind after a failed request allocation · bfa01200
    Chris Wilson authored
    In the next patches, we want to move the work out of freeing the request
    and into its retirement (so that we can free the request without
    requiring the struct_mutex). This means that we cannot rely on
    unreferencing the request to completely teardown the request any more
    and so we need to manually unwind the failed allocation. In doing so, we
    reorder the allocation in order to make the unwind simple (and ensure
    that we don't try to unwind a partial request that may have modified
    global state) and so we end up pushing the initial preallocation down
    into the engine request initialisation functions where we have the
    requisite control over the state of the request.
    
    Moving the initial preallocation into the engine is less than ideal: it
    moves logic to handle a specific problem with request handling out of
    the common code. On the other hand, it does allow those backends
    significantly more flexibility in performing its allocations.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1461833819-3991-14-git-send-email-chris@chris-wilson.co.uk
    bfa01200
intel_ringbuffer.c 87.9 KB