diff options
author | 2009-01-19 17:17:58 +1000 | |
---|---|---|
committer | 2009-01-19 17:17:58 +1000 | |
commit | c1ff85d97708550e634fb6fa099c463db90fc40d (patch) | |
tree | 58d06ba7fb375232ec614bc78db39faceb7898c6 /drivers/gpu/drm/drm_drv.c | |
parent | Linux 2.6.29-rc2 (diff) | |
download | linux-c1ff85d97708550e634fb6fa099c463db90fc40d.tar.gz linux-c1ff85d97708550e634fb6fa099c463db90fc40d.tar.bz2 linux-c1ff85d97708550e634fb6fa099c463db90fc40d.zip |
drm: fix leak of device mappings since multi-master changes.
Device maps now contain a link to the master that created them, so
when cleaning up the master, remove any maps that are connected to it.
Also delete any remaining maps at driver unload time.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/drm_drv.c')
-rw-r--r-- | drivers/gpu/drm/drm_drv.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 5ff88d952226..14c7a23dc157 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -294,6 +294,7 @@ EXPORT_SYMBOL(drm_init); */ static void drm_cleanup(struct drm_device * dev) { + struct drm_map_list *r_list, *list_temp; DRM_DEBUG("\n"); if (!dev) { @@ -325,6 +326,9 @@ static void drm_cleanup(struct drm_device * dev) drm_ht_remove(&dev->map_hash); drm_ctxbitmap_cleanup(dev); + list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) + drm_rmmap(dev, r_list->map); + if (drm_core_check_feature(dev, DRIVER_MODESET)) drm_put_minor(&dev->control); |