Module Name:    src
Committed By:   mrg
Date:           Sat Nov  6 22:06:10 UTC 2010

Modified Files:
        src/sys/external/bsd/drm/dist/bsd-core: drm_drv.c
        src/sys/external/bsd/drm/dist/shared-core: radeon_cp.c radeon_state.c

Log Message:
call the sysctl destroy functions upon failure and unload, which
should fix PR#40029.  while there, fix the radeon unload, which
was improperly matching mutex init/destroy operations and leading
to trying to destroy lock that was never initialised.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/external/bsd/drm/dist/bsd-core/drm_drv.c
cvs rdiff -u -r1.8 -r1.9 \
    src/sys/external/bsd/drm/dist/shared-core/radeon_cp.c
cvs rdiff -u -r1.5 -r1.6 \
    src/sys/external/bsd/drm/dist/shared-core/radeon_state.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm/dist/bsd-core/drm_drv.c
diff -u src/sys/external/bsd/drm/dist/bsd-core/drm_drv.c:1.18 src/sys/external/bsd/drm/dist/bsd-core/drm_drv.c:1.19
--- src/sys/external/bsd/drm/dist/bsd-core/drm_drv.c:1.18	Sun Dec  6 22:51:25 2009
+++ src/sys/external/bsd/drm/dist/bsd-core/drm_drv.c	Sat Nov  6 22:06:10 2010
@@ -659,9 +659,7 @@
 	return 0;
 
 error:
-#if defined(__FreeBSD__)
 	drm_sysctl_cleanup(dev);
-#endif
 	DRM_LOCK();
 	drm_lastclose(dev);
 	DRM_UNLOCK();
@@ -685,8 +683,8 @@
 
 	DRM_DEBUG("\n");
 
-#if defined(__FreeBSD__)
 	drm_sysctl_cleanup(dev);
+#if defined(__FreeBSD__)
 	destroy_dev(dev->devnode);
 #endif
 

Index: src/sys/external/bsd/drm/dist/shared-core/radeon_cp.c
diff -u src/sys/external/bsd/drm/dist/shared-core/radeon_cp.c:1.8 src/sys/external/bsd/drm/dist/shared-core/radeon_cp.c:1.9
--- src/sys/external/bsd/drm/dist/shared-core/radeon_cp.c:1.8	Mon Jul  5 20:32:24 2010
+++ src/sys/external/bsd/drm/dist/shared-core/radeon_cp.c	Sat Nov  6 22:06:10 2010
@@ -1983,6 +1983,8 @@
 	dev->dev_private = (void *)dev_priv;
 	dev_priv->flags = flags;
 
+	DRM_SPININIT(&dev_priv->cs.cs_mutex, "cs_mtx");
+
 	switch (flags & RADEON_FAMILY_MASK) {
 	case CHIP_R100:
 	case CHIP_RV200:
@@ -2032,8 +2034,6 @@
 
 	dev_priv->gart_info.table_size = RADEON_PCIGART_TABLE_SIZE;
 
-	DRM_SPININIT(&dev_priv->cs.cs_mutex, "cs_mtx");
-
 	ret = drm_addmap(dev, drm_get_resource_start(dev, 2),
 			 drm_get_resource_len(dev, 2), _DRM_REGISTERS,
 			 _DRM_READ_ONLY, &dev_priv->mmio);

Index: src/sys/external/bsd/drm/dist/shared-core/radeon_state.c
diff -u src/sys/external/bsd/drm/dist/shared-core/radeon_state.c:1.5 src/sys/external/bsd/drm/dist/shared-core/radeon_state.c:1.6
--- src/sys/external/bsd/drm/dist/shared-core/radeon_state.c:1.5	Mon May 24 01:39:06 2010
+++ src/sys/external/bsd/drm/dist/shared-core/radeon_state.c	Sat Nov  6 22:06:10 2010
@@ -3226,7 +3226,6 @@
 		if (dev_priv->sarea_priv &&
 		    dev_priv->sarea_priv->pfCurrentPage != 0)
 			radeon_cp_dispatch_flip(dev);
-		DRM_SPINUNINIT(&dev_priv->cs.cs_mutex);
 	}
 
 	radeon_do_release(dev);

Reply via email to