diff options
Diffstat (limited to 'linux/i810_dma.c')
-rw-r--r-- | linux/i810_dma.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/linux/i810_dma.c b/linux/i810_dma.c index 30b7dfcf..8e0e8f45 100644 --- a/linux/i810_dma.c +++ b/linux/i810_dma.c @@ -234,11 +234,19 @@ static int i810_dma_get_buffer(drm_device_t *dev, drm_i810_dma_t *d, return retcode; } -static int i810_dma_cleanup(drm_device_t *dev) +int i810_dma_cleanup(drm_device_t *dev) { drm_device_dma_t *dma = dev->dma; - if(dev->dev_private) { +#if _HAVE_DMA_IRQ + /* Make sure interrupts are disabled here because the uninstall ioctl + * may not have been called from userspace and after dev_private + * is freed, it's too late. + */ + if (dev->irq) DRM(irq_uninstall)(dev); +#endif + + if (dev->dev_private) { int i; drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private; |