• Chris Wilson's avatar
    drm/i915/gt: Protect context lifetime with RCU · 9261a1db
    Chris Wilson authored
    Allow a brief period for continued access to a dead intel_context by
    deferring the release of the struct until after an RCU grace period.
    As we are using a dedicated slab cache for the contexts, we can defer
    the release of the slab pages via RCU, with the caveat that individual
    structs may be reused from the freelist within an RCU grace period. To
    handle that, we have to avoid clearing members of the zombie struct.
    
    This is required for a later patch to handle locking around virtual
    requests in the signaler, as those requests may want to move between
    engines and be destroyed while we are holding b->irq_lock on a physical
    engine.
    
    v2: Drop mutex_reinit(), if we never mark the mutex as destroyed we
    don't need to reset the debug code, at the loss of having the mutex
    debug code spot us attempting to destroy a locked mutex.
    v3: As the intended use will remain strongly referenced counted, with
    very little inflight access across reuse, drop the ctor.
    v4: Drop the unrequired change to remove the temporary reference around
    dropping the active context, and add back some more missing ctor
    operations.
    v5: The ctor is back. Tvrtko spotted that ce->signal_lock [introduced
    later] maybe accessed under RCU and so needs special care not to be
    reinitialised.
    v6: Don't mix SLAB_TYPESAFE_BY_RCU and RCU list iteration.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20201126140407.31952-3-chris@chris-wilson.co.uk
    (cherry picked from commit 14d1eaf0)
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    9261a1db
intel_context.c 10.8 KB