summaryrefslogtreecommitdiff
path: root/usr
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
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')
-rw-r--r--usr/src/cmd/dlmgmtd/dlmgmt_door.c4
-rw-r--r--usr/src/cmd/svc/shell/net_include.sh3
-rw-r--r--usr/src/uts/common/io/dls/dls_mgmt.c10
-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
-rw-r--r--usr/src/uts/common/sys/softmac_impl.h9
7 files changed, 21 insertions, 58 deletions
diff --git a/usr/src/cmd/dlmgmtd/dlmgmt_door.c b/usr/src/cmd/dlmgmtd/dlmgmt_door.c
index c2c86ede72..68bfa82719 100644
--- a/usr/src/cmd/dlmgmtd/dlmgmt_door.c
+++ b/usr/src/cmd/dlmgmtd/dlmgmt_door.c
@@ -459,7 +459,6 @@ dlmgmt_upcall_getattr(void *argp, void *retp)
dlmgmt_upcall_arg_getattr_t *getattr = argp;
dlmgmt_getattr_retval_t *retvalp = retp;
dlmgmt_link_t *linkp;
- int err = 0;
/*
* Hold the reader lock to access the link
@@ -469,7 +468,7 @@ dlmgmt_upcall_getattr(void *argp, void *retp)
/*
* The link does not exist.
*/
- err = ENOENT;
+ retvalp->lr_err = ENOENT;
goto done;
}
@@ -477,7 +476,6 @@ dlmgmt_upcall_getattr(void *argp, void *retp)
done:
dlmgmt_table_unlock();
- retvalp->lr_err = err;
}
static void
diff --git a/usr/src/cmd/svc/shell/net_include.sh b/usr/src/cmd/svc/shell/net_include.sh
index 71dc6a8256..e8d1c75f62 100644
--- a/usr/src/cmd/svc/shell/net_include.sh
+++ b/usr/src/cmd/svc/shell/net_include.sh
@@ -667,7 +667,8 @@ net_reconfigure ()
# Is this a reconfigure boot? If not, then there's nothing
# for us to do.
#
- reconfig=`svcprop -c -p system/reconfigure system/svc/restarter:default`
+ reconfig=`svcprop -c -p system/reconfigure \
+ system/svc/restarter:default 2>/dev/null`
if [ $? -ne 0 -o "$reconfig" = false ]; then
return 0
fi
diff --git a/usr/src/uts/common/io/dls/dls_mgmt.c b/usr/src/uts/common/io/dls/dls_mgmt.c
index 576e13ac2c..9e509e163d 100644
--- a/usr/src/uts/common/io/dls/dls_mgmt.c
+++ b/usr/src/uts/common/io/dls/dls_mgmt.c
@@ -1300,17 +1300,19 @@ done:
int
dls_devnet_setzid(const char *link, zoneid_t zid)
{
- dls_devnet_t *ddp;
- int err;
- zoneid_t old_zid;
+ dls_devnet_t *ddp;
+ int err;
+ zoneid_t old_zid;
mac_perim_handle_t mph;
if ((err = dls_devnet_hold_by_name(link, &ddp)) != 0)
return (err);
err = mac_perim_enter_by_macname(ddp->dd_mac, &mph);
- if (err != 0)
+ if (err != 0) {
+ dls_devnet_rele(ddp);
return (err);
+ }
if ((old_zid = ddp->dd_zid) == zid) {
mac_perim_exit(mph);
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
diff --git a/usr/src/uts/common/sys/softmac_impl.h b/usr/src/uts/common/sys/softmac_impl.h
index 83caa23c82..3e578fe38f 100644
--- a/usr/src/uts/common/sys/softmac_impl.h
+++ b/usr/src/uts/common/sys/softmac_impl.h
@@ -60,15 +60,6 @@ typedef struct softmac_lower_s {
softmac_lower_rxinfo_t *sl_rxinfo;
/*
- * sl_ctl_inprogress is used to serialize the control path. It will
- * be set when either an ioctl or an M_{PC,}PROTO message is received
- * from the upper layer, and will be cleared when processing done.
- */
- kmutex_t sl_ctl_mutex;
- kcondvar_t sl_ctl_cv;
- boolean_t sl_ctl_inprogress;
-
- /*
* When a control message is processed, either sl_pending_prim or
* sl_pending_ioctl will be set. They will be cleared when the
* acknowledgement of the specific control message is received