• Chris Wilson's avatar
    drm/i915: Convert trace-irq to the breadcrumb waiter · c81d4613
    Chris Wilson authored
    If we convert the tracing over from direct use of ring->irq_get() and
    over to the breadcrumb infrastructure, we only have a single user of the
    ring->irq_get and so we will be able to simplify the driver routines
    (eliminating the redundant validation and irq refcounting).
    
    Process context is preferred over softirq (or even hardirq) for a couple
    of reasons:
    
     - we already utilize process context to have fast wakeup of a single
       client (i.e. the client waiting for the GPU inspects the seqno for
       itself following an interrupt to avoid the overhead of a context
       switch before it returns to userspace)
    
     - engine->irq_seqno() is not suitable for use from an softirq/hardirq
       context as we may require long waits (100-250us) to ensure the seqno
       write is posted before we read it from the CPU
    
    A signaling framework is a requirement for enabling dma-fences.
    
    v2: Move to a signaling framework based upon the waiter.
    v3: Track the first-signal to avoid having to walk the rbtree everytime.
    v4: Mark the signaler thread as RT priority to reduce latency in the
    indirect wakeups.
    v5: Make failure to allocate the thread fatal.
    v6: Rename kthreads to i915/signal:%u
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1467390209-3576-16-git-send-email-chris@chris-wilson.co.uk
    c81d4613
intel_breadcrumbs.c 16.2 KB