aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/drm2
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <dumbbell@FreeBSD.org>2013-08-25 00:22:34 +0000
committerJean-Sébastien Pédron <dumbbell@FreeBSD.org>2013-08-25 00:22:34 +0000
commit5eaeb549902026021b6d1df055a56719083afc10 (patch)
tree43a5752c78c98ab322089594e394e0a26340f11f /sys/dev/drm2
parent22f61fe5d4d7a382223c4b4225085aa14809727e (diff)
Notes
Diffstat (limited to 'sys/dev/drm2')
-rw-r--r--sys/dev/drm2/drm_drv.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/sys/dev/drm2/drm_drv.c b/sys/dev/drm2/drm_drv.c
index 53ec93092419..91ea1d01ab8c 100644
--- a/sys/dev/drm2/drm_drv.c
+++ b/sys/dev/drm2/drm_drv.c
@@ -313,8 +313,22 @@ int drm_attach(device_t kdev, drm_pci_id_list_t *idlist)
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 *dev)
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 *dev)
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);