diff options
author | Thomas Hellstrom <thomas@tungstengraphics.com> | 2006-06-19 09:12:50 +0000 |
---|---|---|
committer | Thomas Hellstrom <thomas@tungstengraphics.com> | 2006-06-19 09:12:50 +0000 |
commit | 58b63ee5ccc1427a6835ef5112fe556faa9e1be3 (patch) | |
tree | f4c109974601d12474da77898918355011403c7b /linux-core/sis_mm.c | |
parent | 96f272884d6caf7940c9bc3c95dcac75b0a8cd3f (diff) |
Fix buffer cleanup on close. Move memory manager reset from final_context
to lastclose.
Diffstat (limited to 'linux-core/sis_mm.c')
-rw-r--r-- | linux-core/sis_mm.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/linux-core/sis_mm.c b/linux-core/sis_mm.c index ee924535..a89ed64b 100644 --- a/linux-core/sis_mm.c +++ b/linux-core/sis_mm.c @@ -232,19 +232,18 @@ static int sis_ioctl_agp_alloc(DRM_IOCTL_ARGS) return sis_drm_alloc(dev, priv, data, AGP_TYPE); } -int sis_final_context(struct drm_device *dev, int context) +void sis_lastclose(struct drm_device *dev) { - if (dev->ctx_count == 1 && dev->dev_private) { - drm_sis_private_t *dev_priv = dev->dev_private; - - DRM_DEBUG("Last Context\n"); - down(&dev->struct_sem); - drm_sman_cleanup(&dev_priv->sman); - dev_priv->vram_initialized = FALSE; - dev_priv->agp_initialized = FALSE; - up(&dev->struct_sem); - } - return 1; + drm_sis_private_t *dev_priv = dev->dev_private; + + if (!dev_priv) + return; + + down(&dev->struct_sem); + drm_sman_cleanup(&dev_priv->sman); + dev_priv->vram_initialized = FALSE; + dev_priv->agp_initialized = FALSE; + up(&dev->struct_sem); } void sis_reclaim_buffers_locked(drm_device_t * dev, struct file *filp) |