6731031 panic assertion failed: devi->devi_busy_thread == (threadp()) file: devcfg.c, line: 1835
authorvikram
Thu, 31 Jul 2008 00:41:24 -0700
changeset 7235 9ecc64f25993
parent 7234 597dfdb4be08
child 7236 a4434ad6aa68
6731031 panic assertion failed: devi->devi_busy_thread == (threadp()) file: devcfg.c, line: 1835 6731108 in_dq_drv() unlinks multiple in_drv_t
usr/src/uts/common/os/devcfg.c
usr/src/uts/common/os/instance.c
--- a/usr/src/uts/common/os/devcfg.c	Wed Jul 30 21:26:02 2008 -0700
+++ b/usr/src/uts/common/os/devcfg.c	Thu Jul 31 00:41:24 2008 -0700
@@ -5709,7 +5709,7 @@
 
 	ndi_devi_exit(pdip, circ);
 	if (vdip)
-		ndi_devi_exit(pdip, v_circ);
+		ndi_devi_exit(vdip, v_circ);
 
 	return (rv);
 }
@@ -5804,7 +5804,7 @@
 out:
 	ndi_devi_exit(pdip, circ);
 	if (vdip)
-		ndi_devi_exit(pdip, v_circ);
+		ndi_devi_exit(vdip, v_circ);
 
 	pm_post_unconfig(pdip, pm_cookie, devnm);
 
@@ -7819,6 +7819,7 @@
 e_ddi_unretire_device(char *path)
 {
 	int		circ;
+	int		circ2;
 	char		*path2;
 	dev_info_t	*pdip;
 	dev_info_t	*dip;
@@ -7868,9 +7869,9 @@
 
 	(void) unmark_and_unfence(dip, path2);
 	if (!is_leaf_node(dip)) {
-		ndi_devi_enter(dip, &circ);
+		ndi_devi_enter(dip, &circ2);
 		ddi_walk_devs(ddi_get_child(dip), unmark_and_unfence, path2);
-		ndi_devi_exit(dip, circ);
+		ndi_devi_exit(dip, circ2);
 	}
 
 	kmem_free(path2, MAXPATHLEN);
--- a/usr/src/uts/common/os/instance.c	Wed Jul 30 21:26:02 2008 -0700
+++ b/usr/src/uts/common/os/instance.c	Thu Jul 31 00:41:24 2008 -0700
@@ -1321,6 +1321,7 @@
 			prev->ind_next_drv = ptr->ind_next_drv;
 			return;
 		}
+		prev = ptr;
 	}
 	panic("in_dq_drv: in_drv not found on node driver list");
 }