|
@@ -881,7 +881,7 @@ static int i810_flush_queue(struct drm_device *dev)
|
|
|
}
|
|
|
|
|
|
/* Must be called with the lock held */
|
|
|
-static void i810_reclaim_buffers(struct drm_device *dev,
|
|
|
+void i810_driver_reclaim_buffers(struct drm_device *dev,
|
|
|
struct drm_file *file_priv)
|
|
|
{
|
|
|
struct drm_device_dma *dma = dev->dma;
|
|
@@ -1220,12 +1220,17 @@ void i810_driver_preclose(struct drm_device *dev, struct drm_file *file_priv)
|
|
|
if (dev_priv->page_flipping)
|
|
|
i810_do_cleanup_pageflip(dev);
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-void i810_driver_reclaim_buffers_locked(struct drm_device *dev,
|
|
|
- struct drm_file *file_priv)
|
|
|
-{
|
|
|
- i810_reclaim_buffers(dev, file_priv);
|
|
|
+ if (file_priv->master && file_priv->master->lock.hw_lock) {
|
|
|
+ drm_idlelock_take(&file_priv->master->lock);
|
|
|
+ i810_driver_reclaim_buffers(dev, file_priv);
|
|
|
+ drm_idlelock_release(&file_priv->master->lock);
|
|
|
+ } else {
|
|
|
+ /* master disappeared, clean up stuff anyway and hope nothing
|
|
|
+ * goes wrong */
|
|
|
+ i810_driver_reclaim_buffers(dev, file_priv);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
int i810_driver_dma_quiescent(struct drm_device *dev)
|