• Michał Winiarski's avatar
    drm/i915/guc: Preemption! With GuC · c41937fd
    Michał Winiarski authored
    Pretty similar to what we have on execlists.
    We're reusing most of the GEM code, however, due to GuC quirks we need a
    couple of extra bits.
    Preemption is implemented as GuC action, and actions can be pretty slow.
    Because of that, we're using a mutex to serialize them. Since we're
    requesting preemption from the tasklet, the task of creating a workitem
    and wrapping it in GuC action is delegated to a worker.
    
    To distinguish that preemption has finished, we're using additional
    piece of HWSP, and since we're not getting context switch interrupts,
    we're also adding a user interrupt.
    
    The fact that our special preempt context has completed unfortunately
    doesn't mean that we're ready to submit new work. We also need to wait
    for GuC to finish its own processing.
    
    v2: Don't compile out the wait for GuC, handle workqueue flush on reset,
    no need for ordered workqueue, put on a reviewer hat when looking at my own
    patches (Chris)
    Move struct work around in intel_guc, move user interruput outside of
    conditional (Michał)
    Keep ring around rather than chase though intel_context
    
    v3: Extract WA for flushing ggtt writes to a helper (Chris)
    Keep work_struct in intel_guc rather than engine (Michał)
    Use ordered workqueue for inject_preempt worker to avoid GuC quirks.
    
    v4: Drop now unused INTEL_GUC_PREEMPT_OPTION_IMMEDIATE (Daniele)
    Drop stray newlines, use container_of for intel_guc in worker,
    check for presence of workqueue when flushing it, rather than
    enable_guc_submission modparam, reorder preempt postprocessing (Chris)
    
    v5: Make wq NULL after destroying it
    
    v6: Swap struct guc_preempt_work members (Michał)
    Signed-off-by: default avatarMichał Winiarski <michal.winiarski@intel.com>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Jeff McGee <jeff.mcgee@intel.com>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Cc: Oscar Mateo <oscar.mateo@intel.com>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Link: https://patchwork.freedesktop.org/patch/msgid/20171026133558.19580-1-michal.winiarski@intel.com
    c41937fd
intel_ringbuffer.h 30.2 KB