svn commit: r254821 - head/sys/dev/drm2
Jean-Sebastien Pedron
dumbbell at FreeBSD.org
Sun Aug 25 00:22:35 UTC 2013
Author: dumbbell
Date: Sun Aug 25 00:22:34 2013
New Revision: 254821
URL: http://svnweb.freebsd.org/changeset/base/254821
Log:
drm: Fix cleanup if device initialization fails
This plugs some memory leaks.
Modified:
head/sys/dev/drm2/drm_drv.c
Modified: head/sys/dev/drm2/drm_drv.c
==============================================================================
--- head/sys/dev/drm2/drm_drv.c Sun Aug 25 00:13:53 2013 (r254820)
+++ head/sys/dev/drm2/drm_drv.c Sun Aug 25 00:22:34 2013 (r254821)
@@ -313,8 +313,22 @@ int drm_attach(device_t kdev, drm_pci_id
sx_init(&dev->dev_struct_lock, "drmslk");
error = drm_load(dev);
- if (error == 0)
- error = drm_create_cdevs(kdev);
+ if (error)
+ goto error;
+
+ error = drm_create_cdevs(kdev);
+ if (error)
+ goto error;
+
+ return (error);
+error:
+ if (dev->irqr) {
+ bus_release_resource(dev->device, SYS_RES_IRQ,
+ dev->irqrid, dev->irqr);
+ }
+ if (dev->msi_enabled) {
+ pci_release_msi(dev->device);
+ }
return (error);
}
@@ -572,7 +586,7 @@ static int drm_load(struct drm_device *d
DRM_ERROR("Request to enable bus-master failed.\n");
DRM_UNLOCK(dev);
if (retcode != 0)
- goto error;
+ goto error1;
}
DRM_INFO("Initialized %s %d.%d.%d %s\n",
@@ -586,7 +600,9 @@ static int drm_load(struct drm_device *d
error1:
delete_unrhdr(dev->drw_unrhdr);
+ drm_gem_destroy(dev);
error:
+ drm_ctxbitmap_cleanup(dev);
drm_sysctl_cleanup(dev);
DRM_LOCK(dev);
drm_lastclose(dev);
More information about the svn-src-head
mailing list