summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/dls/dls_link.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/io/dls/dls_link.c')
-rw-r--r--usr/src/uts/common/io/dls/dls_link.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/usr/src/uts/common/io/dls/dls_link.c b/usr/src/uts/common/io/dls/dls_link.c
index 8ecdcdd7f5..ffa17acc31 100644
--- a/usr/src/uts/common/io/dls/dls_link.c
+++ b/usr/src/uts/common/io/dls/dls_link.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -918,6 +918,7 @@ dls_mac_rele(dls_link_t *dlp)
ASSERT(dlp->dl_mh != NULL);
if (--dlp->dl_macref == 0) {
+ mac_rx_remove_wait(dlp->dl_mh);
mac_close(dlp->dl_mh);
dlp->dl_mh = NULL;
dlp->dl_mip = NULL;
@@ -999,7 +1000,7 @@ dls_link_add(dls_link_t *dlp, uint32_t sap, dls_impl_t *dip)
/* Replace the existing receive function if there is one. */
if (dlp->dl_mrh != NULL)
- mac_rx_remove(dlp->dl_mh, dlp->dl_mrh);
+ mac_rx_remove(dlp->dl_mh, dlp->dl_mrh, B_FALSE);
dlp->dl_mrh = mac_rx_add(dlp->dl_mh, rx, (void *)dlp);
mutex_exit(&dlp->dl_lock);
}
@@ -1075,7 +1076,7 @@ dls_link_remove(dls_link_t *dlp, dls_impl_t *dip)
*/
if (dlp->dl_impl_count == 0) {
rw_exit(&dlp->dl_impl_lock);
- mac_rx_remove(dlp->dl_mh, dlp->dl_mrh);
+ mac_rx_remove(dlp->dl_mh, dlp->dl_mrh, B_FALSE);
dlp->dl_mrh = NULL;
} else {
boolean_t promisc = B_FALSE;
@@ -1097,7 +1098,7 @@ dls_link_remove(dls_link_t *dlp, dls_impl_t *dip)
else
rx = i_dls_link_rx;
- mac_rx_remove(dlp->dl_mh, dlp->dl_mrh);
+ mac_rx_remove(dlp->dl_mh, dlp->dl_mrh, B_FALSE);
dlp->dl_mrh = mac_rx_add(dlp->dl_mh, rx, (void *)dlp);
}
mutex_exit(&dlp->dl_lock);