• Chris Wilson's avatar
    drm/i915: Disable all GEM timers and work on unload · 45c5f202
    Chris Wilson authored
    We have two once very similar functions, i915_gpu_idle() and
    i915_gem_idle(). The former is used as the lower level operation to
    flush work on the GPU, whereas the latter is the high level interface to
    flush the GEM bookkeeping in addition to flushing the GPU. As such
    i915_gem_idle() also clears out the request and activity lists and
    cancels the delayed work. This is what we need for unloading the driver,
    unfortunately we called i915_gpu_idle() instead.
    
    In the process, make sure that when cancelling the delayed work and
    timer, which is synchronous, that we do not hold any locks to prevent a
    deadlock if the work item is already waiting upon the mutex. This
    requires us to push the mutex down from the caller to i915_gem_idle().
    
    v2: s/i915_gem_idle/i915_gem_suspend/
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=70334Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Tested-by: xunx.fang@intel.com
    [danvet: Only set ums.suspended for !kms as discussed earlier. Chris
    noticed that this slipped through.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    45c5f202
i915_gem.c 127 KB