aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/sis/sis_mm.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2011-10-25 17:42:59 -0400
committerDave Airlie <airlied@redhat.com>2012-07-19 22:49:17 -0400
commitea5e437406701838751ebc0f797d8b1c31df8121 (patch)
tree58a2fc21ddfb474f25cd045744324e148078f47c /drivers/gpu/drm/sis/sis_mm.c
parent834859c3abf9272bf55bd0d0c95e5a892f24dadc (diff)
drm/sis: clean up reclaim_buffers
Like for via. v2: Actually drop the idlelock again if taken. v3: Fixup. v4: Fixup the "has master" vs. "is master" confusion the refactor introduced. v5: Drop the idlelock in the early return path. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/sis/sis_mm.c')
-rw-r--r--drivers/gpu/drm/sis/sis_mm.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/gpu/drm/sis/sis_mm.c b/drivers/gpu/drm/sis/sis_mm.c
index dd4a316c3d74..5acc396ef93c 100644
--- a/drivers/gpu/drm/sis/sis_mm.c
+++ b/drivers/gpu/drm/sis/sis_mm.c
@@ -321,14 +321,20 @@ void sis_reclaim_buffers_locked(struct drm_device *dev,
321 struct sis_file_private *file_priv = file->driver_priv; 321 struct sis_file_private *file_priv = file->driver_priv;
322 struct sis_memblock *entry, *next; 322 struct sis_memblock *entry, *next;
323 323
324 if (!(file->minor->master && file->master->lock.hw_lock))
325 return;
326
327 drm_idlelock_take(&file->master->lock);
328
324 mutex_lock(&dev->struct_mutex); 329 mutex_lock(&dev->struct_mutex);
325 if (list_empty(&file_priv->obj_list)) { 330 if (list_empty(&file_priv->obj_list)) {
326 mutex_unlock(&dev->struct_mutex); 331 mutex_unlock(&dev->struct_mutex);
332 drm_idlelock_release(&file->master->lock);
333
327 return; 334 return;
328 } 335 }
329 336
330 if (dev->driver->dma_quiescent) 337 sis_idle(dev);
331 dev->driver->dma_quiescent(dev);
332 338
333 339
334 list_for_each_entry_safe(entry, next, &file_priv->obj_list, 340 list_for_each_entry_safe(entry, next, &file_priv->obj_list,
@@ -343,6 +349,9 @@ void sis_reclaim_buffers_locked(struct drm_device *dev,
343 kfree(entry); 349 kfree(entry);
344 } 350 }
345 mutex_unlock(&dev->struct_mutex); 351 mutex_unlock(&dev->struct_mutex);
352
353 drm_idlelock_release(&file->master->lock);
354
346 return; 355 return;
347} 356}
348 357