summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/softmac
diff options
context:
space:
mode:
authorCathy Zhou <Cathy.Zhou@Sun.COM>2009-05-20 21:09:54 -0700
committerCathy Zhou <Cathy.Zhou@Sun.COM>2009-05-20 21:09:54 -0700
commitf1956ffef55a0f859d3974677c90c728e3fc32f5 (patch)
tree3d1e78d2343cb8ea71be6f31011fd3e1f236f13a /usr/src/uts/common/io/softmac
parentedf70dc9b8e373c558a49c15c2d86be817d497fe (diff)
downloadillumos-gate-f1956ffef55a0f859d3974677c90c728e3fc32f5.tar.gz
6803804 softmac_serialize_enter()/exit() can be replaced using the mac perimeter
6803642 dls_devnet_t reference leak in dls_devnet_setzid() 6807924 net-physical`net_reconfigure() emits errors on non-reconfig boots. 6822408 old-style autopush above network devices no longer works 6832151 memory leak for M_CTL messages sent down to the softmac
Diffstat (limited to 'usr/src/uts/common/io/softmac')
-rw-r--r--usr/src/uts/common/io/softmac/softmac_dev.c5
-rw-r--r--usr/src/uts/common/io/softmac/softmac_fp.c2
-rw-r--r--usr/src/uts/common/io/softmac/softmac_pkt.c46
3 files changed, 12 insertions, 41 deletions
diff --git a/usr/src/uts/common/io/softmac/softmac_dev.c b/usr/src/uts/common/io/softmac/softmac_dev.c
index 37c5740846..0a64e11a8a 100644
--- a/usr/src/uts/common/io/softmac/softmac_dev.c
+++ b/usr/src/uts/common/io/softmac/softmac_dev.c
@@ -254,8 +254,6 @@ softmac_cmn_open(queue_t *rq, dev_t *devp, int flag, int sflag, cred_t *credp)
slp->sl_wq = WR(rq);
cv_init(&slp->sl_cv, NULL, CV_DRIVER, NULL);
mutex_init(&slp->sl_mutex, NULL, MUTEX_DRIVER, NULL);
- cv_init(&slp->sl_ctl_cv, NULL, CV_DRIVER, NULL);
- mutex_init(&slp->sl_ctl_mutex, NULL, MUTEX_DRIVER, NULL);
slp->sl_pending_prim = DL_PRIM_INVAL;
rq->q_ptr = WR(rq)->q_ptr = slp;
qprocson(rq);
@@ -289,14 +287,11 @@ softmac_mod_close(queue_t *rq)
slp->sl_lh = NULL;
ASSERT(slp->sl_ack_mp == NULL);
- ASSERT(slp->sl_ctl_inprogress == B_FALSE);
ASSERT(slp->sl_pending_prim == DL_PRIM_INVAL);
ASSERT(slp->sl_pending_ioctl == B_FALSE);
cv_destroy(&slp->sl_cv);
mutex_destroy(&slp->sl_mutex);
- cv_destroy(&slp->sl_ctl_cv);
- mutex_destroy(&slp->sl_ctl_mutex);
kmem_free(slp, sizeof (*slp));
return (0);
diff --git a/usr/src/uts/common/io/softmac/softmac_fp.c b/usr/src/uts/common/io/softmac/softmac_fp.c
index 9568de1332..4086007daf 100644
--- a/usr/src/uts/common/io/softmac/softmac_fp.c
+++ b/usr/src/uts/common/io/softmac/softmac_fp.c
@@ -671,6 +671,8 @@ softmac_wput_single_nondata(softmac_upper_t *sup, mblk_t *mp)
*/
if (dbtype == M_IOCTL)
miocnak(sup->su_wq, mp, 0, EINVAL);
+ else
+ freemsg(mp);
/*
* This stream is either IP or ARP. See whether
diff --git a/usr/src/uts/common/io/softmac/softmac_pkt.c b/usr/src/uts/common/io/softmac/softmac_pkt.c
index b0d613b9be..01b8f70abc 100644
--- a/usr/src/uts/common/io/softmac/softmac_pkt.c
+++ b/usr/src/uts/common/io/softmac/softmac_pkt.c
@@ -92,38 +92,6 @@ failed:
#define ACKTIMEOUT (10 * hz)
-/*
- * Serialize control message processing.
- */
-static void
-softmac_serialize_enter(softmac_lower_t *slp)
-{
- mutex_enter(&slp->sl_ctl_mutex);
- while (slp->sl_ctl_inprogress)
- cv_wait(&slp->sl_ctl_cv, &slp->sl_ctl_mutex);
-
- ASSERT(!slp->sl_ctl_inprogress);
- ASSERT(!slp->sl_pending_ioctl);
- ASSERT(slp->sl_pending_prim == DL_PRIM_INVAL);
-
- slp->sl_ctl_inprogress = B_TRUE;
- mutex_exit(&slp->sl_ctl_mutex);
-}
-
-static void
-softmac_serialize_exit(softmac_lower_t *slp)
-{
- mutex_enter(&slp->sl_ctl_mutex);
-
- ASSERT(slp->sl_ctl_inprogress);
- ASSERT(!slp->sl_pending_ioctl);
- ASSERT(slp->sl_pending_prim == DL_PRIM_INVAL);
-
- slp->sl_ctl_inprogress = B_FALSE;
- cv_broadcast(&slp->sl_ctl_cv);
- mutex_exit(&slp->sl_ctl_mutex);
-}
-
static int
dlpi_get_errno(t_uscalar_t error, t_uscalar_t unix_errno)
{
@@ -135,9 +103,13 @@ softmac_output(softmac_lower_t *slp, mblk_t *mp, t_uscalar_t dl_prim,
t_uscalar_t ack, mblk_t **mpp)
{
union DL_primitives *dlp;
+ mac_perim_handle_t mph;
int err = 0;
- softmac_serialize_enter(slp);
+ mac_perim_enter_by_mh(slp->sl_softmac->smac_mh, &mph);
+
+ ASSERT(!slp->sl_pending_ioctl);
+ ASSERT(slp->sl_pending_prim == DL_PRIM_INVAL);
/*
* Record the pending DLPI primitive.
@@ -185,14 +157,16 @@ softmac_output(softmac_lower_t *slp, mblk_t *mp, t_uscalar_t dl_prim,
else
freemsg(mp);
- softmac_serialize_exit(slp);
+ mac_perim_exit(mph);
return (err);
}
void
softmac_ioctl_tx(softmac_lower_t *slp, mblk_t *mp, mblk_t **mpp)
{
- softmac_serialize_enter(slp);
+ mac_perim_handle_t mph;
+
+ mac_perim_enter_by_mh(slp->sl_softmac->smac_mh, &mph);
/*
* Record that ioctl processing is currently in progress.
@@ -213,7 +187,7 @@ softmac_ioctl_tx(softmac_lower_t *slp, mblk_t *mp, mblk_t **mpp)
ASSERT(mpp != NULL && mp != NULL);
*mpp = mp;
- softmac_serialize_exit(slp);
+ mac_perim_exit(mph);
}
int