6898776 assertion failed: DEVI(self)->devi_ref, file: ../../common/io/scsi/impl/scsi_hba.c, line: 7710
--- a/usr/src/uts/common/os/devcfg.c Mon Apr 12 12:24:17 2010 -0700
+++ b/usr/src/uts/common/os/devcfg.c Mon Apr 12 15:59:57 2010 -0600
@@ -6411,7 +6411,18 @@
*/
if ((rv = devi_attach_node(dip, flags)) == NDI_SUCCESS) {
if ((flags & NDI_CONFIG) || DEVI_NEED_NDI_CONFIG(dip)) {
+ /*
+ * Hold the attached dip, and exit the parent while
+ * we drive configuration of children below the
+ * attached dip.
+ */
+ ndi_hold_devi(dip);
+ ndi_devi_exit(pdip, circ);
+
(void) ndi_devi_config(dip, flags);
+
+ ndi_devi_enter(pdip, &circ);
+ ndi_rele_devi(dip);
}
if (branch_event)
@@ -7022,7 +7033,6 @@
struct devnames *dnp;
dev_info_t *dip;
int error = DDI_FAILURE;
- int circ;
dnp = &devnamesp[major];
LOCK_DEV_OPS(&dnp->dn_lock);
@@ -7041,9 +7051,7 @@
*/
if ((error == DDI_SUCCESS) && (ddi_prop_exists(DDI_DEV_T_ANY,
dip, DDI_PROP_DONTPASS, "ddi-config-driver-node"))) {
- ndi_devi_enter(dip, &circ);
(void) ndi_devi_config(dip, NDI_NO_EVENT);
- ndi_devi_exit(dip, circ);
}
LOCK_DEV_OPS(&dnp->dn_lock);
ndi_rele_devi(dip);