• Tvrtko Ursulin's avatar
    drm/i915: Request watchdog infrastructure · 9b4d0598
    Tvrtko Ursulin authored
    Prepares the plumbing for setting request/fence expiration time. All code
    is put in place but is never activated due yet missing ability to actually
    configure the timer.
    
    Outline of the basic operation:
    
    A timer is started when request is ready for execution. If the request
    completes (retires) before the timer fires, timer is cancelled and nothing
    further happens.
    
    If the timer fires request is added to a lockless list and worker queued.
    Purpose of this is twofold: a) It allows request cancellation from a more
    friendly context and b) coalesces multiple expirations into a single event
    of consuming the list.
    
    Worker locklessly consumes the list of expired requests and cancels them
    all using previous added i915_request_cancel().
    
    Associated timeout value is stored in rq->context.watchdog.timeout_us.
    
    v2:
     * Log expiration.
    
    v3:
     * Include more information about user timeline in the log message.
    
    v4:
     * Remove obsolete comment and fix formatting. (Matt)
    Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210324121335.2307063-6-tvrtko.ursulin@linux.intel.com
    9b4d0598
intel_gt_requests.c 6.61 KB