]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/gpu/drm/i810/i810_dma.c
drm/i810: don't acces hw regs in lastclose
[mv-sheeva.git] / drivers / gpu / drm / i810 / i810_dma.c
index 8f371e8d630ffeeced2b295400d2a7a4f3233b60..f7c17b23983389ae7b978224180dadcd4b6616c3 100644 (file)
@@ -222,8 +222,6 @@ static int i810_dma_cleanup(struct drm_device *dev)
                        pci_free_consistent(dev->pdev, PAGE_SIZE,
                                            dev_priv->hw_status_page,
                                            dev_priv->dma_status_page);
-                       /* Need to rewrite hardware status page */
-                       I810_WRITE(0x02080, 0x1ffff000);
                }
                kfree(dev->dev_private);
                dev->dev_private = NULL;
@@ -888,7 +886,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;
@@ -1225,12 +1223,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)