aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/sis/sis_mm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/sis/sis_mm.c')
-rw-r--r--drivers/gpu/drm/sis/sis_mm.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/gpu/drm/sis/sis_mm.c b/drivers/gpu/drm/sis/sis_mm.c
index dd4a316c3d74..2c231070d250 100644
--- a/drivers/gpu/drm/sis/sis_mm.c
+++ b/drivers/gpu/drm/sis/sis_mm.c
@@ -74,7 +74,7 @@ static int sis_fb_init(struct drm_device *dev, void *data, struct drm_file *file
74 dev_priv->vram_offset = fb->offset; 74 dev_priv->vram_offset = fb->offset;
75 75
76 mutex_unlock(&dev->struct_mutex); 76 mutex_unlock(&dev->struct_mutex);
77 DRM_DEBUG("offset = %u, size = %u\n", fb->offset, fb->size); 77 DRM_DEBUG("offset = %lu, size = %lu\n", fb->offset, fb->size);
78 78
79 return 0; 79 return 0;
80} 80}
@@ -161,7 +161,7 @@ fail_alloc:
161 mem->size = 0; 161 mem->size = 0;
162 mem->free = 0; 162 mem->free = 0;
163 163
164 DRM_DEBUG("alloc %d, size = %d, offset = %d\n", pool, mem->size, 164 DRM_DEBUG("alloc %d, size = %ld, offset = %ld\n", pool, mem->size,
165 mem->offset); 165 mem->offset);
166 166
167 return retval; 167 return retval;
@@ -215,7 +215,7 @@ static int sis_ioctl_agp_init(struct drm_device *dev, void *data,
215 dev_priv->agp_offset = agp->offset; 215 dev_priv->agp_offset = agp->offset;
216 mutex_unlock(&dev->struct_mutex); 216 mutex_unlock(&dev->struct_mutex);
217 217
218 DRM_DEBUG("offset = %u, size = %u\n", agp->offset, agp->size); 218 DRM_DEBUG("offset = %lu, size = %lu\n", agp->offset, agp->size);
219 return 0; 219 return 0;
220} 220}
221 221
@@ -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