Author: dumbbell
Date: Sun Feb  9 15:17:57 2014
New Revision: 261659
URL: http://svnweb.freebsd.org/changeset/base/261659

Log:
  MFC r254821:
  
  drm: Fix cleanup if device initialization fails
  
  This plugs some memory leaks.

Modified:
  stable/9/sys/dev/drm2/drm_drv.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/dev/   (props changed)

Modified: stable/9/sys/dev/drm2/drm_drv.c
==============================================================================
--- stable/9/sys/dev/drm2/drm_drv.c     Sun Feb  9 14:58:47 2014        
(r261658)
+++ stable/9/sys/dev/drm2/drm_drv.c     Sun Feb  9 15:17:57 2014        
(r261659)
@@ -311,8 +311,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);
 }
 
@@ -570,7 +584,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",
@@ -584,7 +598,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);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to