diff options
Diffstat (limited to 'drivers/gpu/drm/sis/sis_mm.c')
-rw-r--r-- | drivers/gpu/drm/sis/sis_mm.c | 19 |
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 | ||