• C
    drm/i915: Disable all GEM timers and work on unload · 45c5f202
    Chris Wilson 提交于
    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: NChris 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: NDaniel Vetter <daniel.vetter@ffwll.ch>
    45c5f202
i915_dma.c 52.6 KB