diff options
| author | Cathy Zhou <Cathy.Zhou@Sun.COM> | 2009-05-20 21:09:54 -0700 |
|---|---|---|
| committer | Cathy Zhou <Cathy.Zhou@Sun.COM> | 2009-05-20 21:09:54 -0700 |
| commit | f1956ffef55a0f859d3974677c90c728e3fc32f5 (patch) | |
| tree | 3d1e78d2343cb8ea71be6f31011fd3e1f236f13a /usr/src/uts/common/io/softmac | |
| parent | edf70dc9b8e373c558a49c15c2d86be817d497fe (diff) | |
| download | illumos-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.c | 5 | ||||
| -rw-r--r-- | usr/src/uts/common/io/softmac/softmac_fp.c | 2 | ||||
| -rw-r--r-- | usr/src/uts/common/io/softmac/softmac_pkt.c | 46 |
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 |
