summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/i915/i915_dma.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2010-08-21 00:25:16 +0200
committerChris Wilson <chris@chris-wilson.co.uk>2010-09-08 10:13:28 +0100
commit75ef9da2cdb64e7926404dd2b755bbbfe98eaeaf (patch)
treeef200ecba7bb6c9a8cb2ee3d830f30c5d5377207 /drivers/gpu/drm/i915/i915_dma.c
parentc911fc1c6ad61b56869ee521f1a477c741b039da (diff)
downloadlwn-75ef9da2cdb64e7926404dd2b755bbbfe98eaeaf.tar.gz
lwn-75ef9da2cdb64e7926404dd2b755bbbfe98eaeaf.zip
drm/i915: unload: fix retire_work races
ums-gem code correctly cancels the retire work (at lastclose time), kms does not do so. Fix this by canceling the work right after ideling the gpu. While staring at the code I noticed that the work function is not static. Fix this, too. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_dma.c')
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 14133ebef33b..c58ec5c02919 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -2261,6 +2261,9 @@ int i915_driver_unload(struct drm_device *dev)
DRM_ERROR("failed to idle hardware: %d\n", ret);
mutex_unlock(&dev->struct_mutex);
+ /* Cancel the retire work handler, which should be idle now. */
+ cancel_delayed_work_sync(&dev_priv->mm.retire_work);
+
io_mapping_free(dev_priv->mm.gtt_mapping);
if (dev_priv->mm.gtt_mtrr >= 0) {
mtrr_del(dev_priv->mm.gtt_mtrr, dev->agp->base,