summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorartem <none@none>2008-06-19 14:31:31 -0700
committerartem <none@none>2008-06-19 14:31:31 -0700
commit308903890e892f9c21ee582e3a52fdd67e52870b (patch)
tree732f36a3e4382b987a7d27c152d718a839ab8e69 /usr/src
parentd81b850f296ee36f8a9ecba637e8c8e2996eaaee (diff)
downloadillumos-joyent-308903890e892f9c21ee582e3a52fdd67e52870b.tar.gz
PSARC/2008/222 Brussels persistence
6485961 link property values do not persist across unplumb/unload
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/cmd-inet/lib/nwamd/interface.c2
-rw-r--r--usr/src/cmd/dladm/dladm.c46
-rw-r--r--usr/src/cmd/dlmgmtd/dlmgmt_door.c33
-rw-r--r--usr/src/cmd/dlmgmtd/dlmgmt_main.c2
-rw-r--r--usr/src/cmd/rcm_daemon/common/network_rcm.c2
-rw-r--r--usr/src/cmd/svc/milestone/net-physical9
-rw-r--r--usr/src/lib/libdladm/common/libdlaggr.c2
-rw-r--r--usr/src/lib/libdladm/common/libdllink.c2
-rw-r--r--usr/src/lib/libdladm/common/libdllink.h2
-rw-r--r--usr/src/lib/libdladm/common/libdlvlan.c2
-rw-r--r--usr/src/lib/libdladm/common/linkprop.c16
-rw-r--r--usr/src/uts/common/io/dls/dls_mgmt.c97
-rw-r--r--usr/src/uts/common/io/mac/mac.c2
-rw-r--r--usr/src/uts/common/sys/dls.h26
-rw-r--r--usr/src/uts/common/sys/mac.h6
-rw-r--r--usr/src/uts/intel/ia32/ml/modstubs.s1
-rw-r--r--usr/src/uts/sparc/ml/modstubs.s1
17 files changed, 212 insertions, 39 deletions
diff --git a/usr/src/cmd/cmd-inet/lib/nwamd/interface.c b/usr/src/cmd/cmd-inet/lib/nwamd/interface.c
index 9886ae817e..44e50c206c 100644
--- a/usr/src/cmd/cmd-inet/lib/nwamd/interface.c
+++ b/usr/src/cmd/cmd-inet/lib/nwamd/interface.c
@@ -1085,7 +1085,7 @@ initialize_interfaces(void)
wait_time = NWAM_IF_WAIT_DELTA_MAX;
}
- (void) dladm_init_linkprop(DATALINK_ALL_LINKID);
+ (void) dladm_init_linkprop(DATALINK_ALL_LINKID, B_FALSE);
(void) icfg_iterate_if(AF_INET, ICFG_PLUMBED, NULL, do_add_interface);
diff --git a/usr/src/cmd/dladm/dladm.c b/usr/src/cmd/dladm/dladm.c
index f8e745b3a5..e9344c0f62 100644
--- a/usr/src/cmd/dladm/dladm.c
+++ b/usr/src/cmd/dladm/dladm.c
@@ -5294,20 +5294,50 @@ do_show_secobj(int argc, char **argv)
static int
i_dladm_init_linkprop(datalink_id_t linkid, void *arg)
{
- (void) dladm_init_linkprop(linkid);
+ (void) dladm_init_linkprop(linkid, B_TRUE);
return (DLADM_WALK_CONTINUE);
}
-/* ARGSUSED */
static void
do_init_linkprop(int argc, char **argv)
{
- /*
- * linkprops of links of other classes have been initialized as a
- * part of the dladm up-xxx operation.
- */
- (void) dladm_walk_datalink_id(i_dladm_init_linkprop, NULL,
- DATALINK_CLASS_PHYS, DATALINK_ANY_MEDIATYPE, DLADM_OPT_PERSIST);
+ int option;
+ dladm_status_t status;
+ datalink_id_t linkid = DATALINK_ALL_LINKID;
+ datalink_media_t media = DATALINK_ANY_MEDIATYPE;
+ uint_t any_media = B_TRUE;
+
+ opterr = 0;
+ while ((option = getopt(argc, argv, ":w")) != -1) {
+ switch (option) {
+ case 'w':
+ media = DL_WIFI;
+ any_media = B_FALSE;
+ break;
+ default:
+ die_opterr(optopt, option);
+ break;
+ }
+ }
+
+ if (optind == (argc - 1)) {
+ if ((status = dladm_name2info(argv[optind], &linkid, NULL, NULL,
+ NULL)) != DLADM_STATUS_OK)
+ die_dlerr(status, "link %s is not valid", argv[optind]);
+ } else if (optind != argc) {
+ usage();
+ }
+
+ if (linkid == DATALINK_ALL_LINKID) {
+ /*
+ * linkprops of links of other classes have been initialized as
+ * part of the dladm up-xxx operation.
+ */
+ (void) dladm_walk_datalink_id(i_dladm_init_linkprop, NULL,
+ DATALINK_CLASS_PHYS, media, DLADM_OPT_PERSIST);
+ } else {
+ (void) dladm_init_linkprop(linkid, any_media);
+ }
}
/* ARGSUSED */
diff --git a/usr/src/cmd/dlmgmtd/dlmgmt_door.c b/usr/src/cmd/dlmgmtd/dlmgmt_door.c
index 1481d0dfa3..50892004a9 100644
--- a/usr/src/cmd/dlmgmtd/dlmgmt_door.c
+++ b/usr/src/cmd/dlmgmtd/dlmgmt_door.c
@@ -873,6 +873,33 @@ done:
dlmgmt_dlconf_table_unlock();
}
+static void
+dlmgmt_upcall_linkprop_init(void *argp, void *retp)
+{
+ dlmgmt_door_linkprop_init_t *lip = argp;
+ dlmgmt_linkprop_init_retval_t *retvalp = retp;
+ dlmgmt_link_t *linkp;
+ boolean_t do_linkprop = B_FALSE;
+
+ /*
+ * Ignore wifi links until wifi property ioctls are converted
+ * to generic property ioctls. This avoids deadlocks due to
+ * wifi property ioctls using their own /dev/net device,
+ * not the DLD control device.
+ */
+ dlmgmt_table_lock(B_FALSE);
+ if ((linkp = link_by_id(lip->ld_linkid)) == NULL)
+ retvalp->lr_err = ENOENT;
+ else if (linkp->ll_media == DL_WIFI)
+ retvalp->lr_err = 0;
+ else
+ do_linkprop = B_TRUE;
+ dlmgmt_table_unlock();
+
+ if (do_linkprop)
+ retvalp->lr_err = dladm_init_linkprop(lip->ld_linkid, B_TRUE);
+}
+
static dlmgmt_door_info_t i_dlmgmt_door_info_tbl[] = {
{ DLMGMT_CMD_DLS_CREATE, B_TRUE, sizeof (dlmgmt_upcall_arg_create_t),
sizeof (dlmgmt_create_retval_t), dlmgmt_upcall_create },
@@ -911,7 +938,11 @@ static dlmgmt_door_info_t i_dlmgmt_door_info_tbl[] = {
{ DLMGMT_CMD_DESTROYCONF, B_TRUE, sizeof (dlmgmt_door_destroyconf_t),
sizeof (dlmgmt_destroyconf_retval_t), dlmgmt_destroyconf },
{ DLMGMT_CMD_GETATTR, B_FALSE, sizeof (dlmgmt_door_getattr_t),
- sizeof (dlmgmt_getattr_retval_t), dlmgmt_getattr }
+ sizeof (dlmgmt_getattr_retval_t), dlmgmt_getattr },
+ { DLMGMT_CMD_LINKPROP_INIT, B_TRUE,
+ sizeof (dlmgmt_door_linkprop_init_t),
+ sizeof (dlmgmt_linkprop_init_retval_t),
+ dlmgmt_upcall_linkprop_init }
};
#define DLMGMT_INFO_TABLE_SIZE (sizeof (i_dlmgmt_door_info_tbl) / \
diff --git a/usr/src/cmd/dlmgmtd/dlmgmt_main.c b/usr/src/cmd/dlmgmtd/dlmgmt_main.c
index 8915b544ec..43e627d4f0 100644
--- a/usr/src/cmd/dlmgmtd/dlmgmt_main.c
+++ b/usr/src/cmd/dlmgmtd/dlmgmt_main.c
@@ -252,7 +252,7 @@ dlmgmt_init_privileges()
return (errno);
if (__init_daemon_priv(PU_RESETGROUPS|PU_CLEARLIMITSET, UID_DLADM,
- GID_SYS, NULL) == -1) {
+ GID_SYS, PRIV_SYS_NET_CONFIG, NULL) == -1) {
(void) close(dld_control_fd);
dld_control_fd = -1;
return (EPERM);
diff --git a/usr/src/cmd/rcm_daemon/common/network_rcm.c b/usr/src/cmd/rcm_daemon/common/network_rcm.c
index 5ec088e808..d4a6b0d00d 100644
--- a/usr/src/cmd/rcm_daemon/common/network_rcm.c
+++ b/usr/src/cmd/rcm_daemon/common/network_rcm.c
@@ -1078,7 +1078,7 @@ notify_new_link(rcm_handle_t *hd, const char *dev)
/*
* Reset the active linkprop of this specific link.
*/
- (void) dladm_init_linkprop(linkid);
+ (void) dladm_init_linkprop(linkid, B_FALSE);
rcm_log_message(RCM_TRACE1, _("NET: notify new link %u (%s)\n"),
linkid, dev);
diff --git a/usr/src/cmd/svc/milestone/net-physical b/usr/src/cmd/svc/milestone/net-physical
index c562d22902..bcee0c9818 100644
--- a/usr/src/cmd/svc/milestone/net-physical
+++ b/usr/src/cmd/svc/milestone/net-physical
@@ -208,12 +208,13 @@ fi
if smf_is_globalzone; then
#
- # Unfortunately, if a driver unloads and then is subsequently reloaded,
- # no mechanism currently exists to restore the properties of its
- # associated links. Hence, we wait until after interfaces have been
+ # Wifi drivers use special property interfaces that are not supported
+ # by the existing property persistence mechanism, so if a wifi driver
+ # unloads and then is subsequently reloaded, associated links' properties
+ # will not be restored. For now, wait until after interfaces have been
# plumbed (above) to initialize link properties.
#
- /sbin/dladm init-linkprop
+ /sbin/dladm init-linkprop -w
fi
#
diff --git a/usr/src/lib/libdladm/common/libdlaggr.c b/usr/src/lib/libdladm/common/libdlaggr.c
index dfac1a2a92..4c61371247 100644
--- a/usr/src/lib/libdladm/common/libdlaggr.c
+++ b/usr/src/lib/libdladm/common/libdlaggr.c
@@ -733,7 +733,7 @@ i_dladm_aggr_up(datalink_id_t linkid, void *arg)
/*
* Reset the active linkprop of this specific link.
*/
- (void) dladm_init_linkprop(linkid);
+ (void) dladm_init_linkprop(linkid, B_FALSE);
done:
free(attr.lg_ports);
diff --git a/usr/src/lib/libdladm/common/libdllink.c b/usr/src/lib/libdladm/common/libdllink.c
index 173c5435b8..9426327e12 100644
--- a/usr/src/lib/libdladm/common/libdllink.c
+++ b/usr/src/lib/libdladm/common/libdllink.c
@@ -481,7 +481,7 @@ i_dladm_rename_link_c2(datalink_id_t linkid1, datalink_id_t linkid2)
((status = dladm_read_conf(linkid2, &conf2)) != DLADM_STATUS_OK)) {
dir.dir_linkid1 = linkid2;
dir.dir_linkid2 = linkid1;
- (void) dladm_init_linkprop(linkid1);
+ (void) dladm_init_linkprop(linkid1, B_FALSE);
(void) i_dladm_ioctl(fd, DLDIOC_RENAME, &dir, sizeof (dir));
(void) close(fd);
return (status);
diff --git a/usr/src/lib/libdladm/common/libdllink.h b/usr/src/lib/libdladm/common/libdllink.h
index 80f6f725e6..9359c9c299 100644
--- a/usr/src/lib/libdladm/common/libdllink.h
+++ b/usr/src/lib/libdladm/common/libdllink.h
@@ -117,7 +117,7 @@ extern const char *dladm_secobjclass2str(dladm_secobj_class_t, char *);
extern dladm_status_t dladm_str2secobjclass(const char *,
dladm_secobj_class_t *);
-extern dladm_status_t dladm_init_linkprop(datalink_id_t);
+extern dladm_status_t dladm_init_linkprop(datalink_id_t, boolean_t);
extern dladm_status_t dladm_init_secobj(void);
extern dladm_status_t dladm_create_datalink_id(const char *, datalink_class_t,
diff --git a/usr/src/lib/libdladm/common/libdlvlan.c b/usr/src/lib/libdladm/common/libdlvlan.c
index fb84ad92f6..d2a78d4f08 100644
--- a/usr/src/lib/libdladm/common/libdlvlan.c
+++ b/usr/src/lib/libdladm/common/libdlvlan.c
@@ -315,7 +315,7 @@ i_dladm_vlan_up(datalink_id_t vlanid, void *arg)
/*
* Reset the active linkprop of this specific link.
*/
- (void) dladm_init_linkprop(vlanid);
+ (void) dladm_init_linkprop(vlanid, B_FALSE);
}
(void) close(fd);
diff --git a/usr/src/lib/libdladm/common/linkprop.c b/usr/src/lib/libdladm/common/linkprop.c
index f08fda0b83..b20fe4fe82 100644
--- a/usr/src/lib/libdladm/common/linkprop.c
+++ b/usr/src/lib/libdladm/common/linkprop.c
@@ -788,18 +788,24 @@ done:
static int
i_dladm_init_linkprop(datalink_id_t linkid, void *arg)
{
- (void) dladm_init_linkprop(linkid);
+ (void) dladm_init_linkprop(linkid, B_TRUE);
return (DLADM_WALK_CONTINUE);
}
dladm_status_t
-dladm_init_linkprop(datalink_id_t linkid)
+dladm_init_linkprop(datalink_id_t linkid, boolean_t any_media)
{
+ datalink_media_t dmedia;
+ uint32_t media;
+
+ dmedia = any_media ? DATALINK_ANY_MEDIATYPE : DL_WIFI;
+
if (linkid == DATALINK_ALL_LINKID) {
(void) dladm_walk_datalink_id(i_dladm_init_linkprop, NULL,
- DATALINK_CLASS_ALL, DATALINK_ANY_MEDIATYPE,
- DLADM_OPT_PERSIST);
- } else {
+ DATALINK_CLASS_ALL, dmedia, DLADM_OPT_PERSIST);
+ } else if (any_media || ((dladm_datalink_id2info(linkid, NULL, NULL,
+ &media, NULL, 0) == DLADM_STATUS_OK) &&
+ DATALINK_MEDIA_ACCEPTED(dmedia, media))) {
(void) dladm_walk_linkprop(linkid, NULL, i_dladm_init_one_prop);
}
return (DLADM_STATUS_OK);
diff --git a/usr/src/uts/common/io/dls/dls_mgmt.c b/usr/src/uts/common/io/dls/dls_mgmt.c
index 7a753b2341..59afd415b1 100644
--- a/usr/src/uts/common/io/dls/dls_mgmt.c
+++ b/usr/src/uts/common/io/dls/dls_mgmt.c
@@ -76,8 +76,12 @@ typedef struct dls_devnet_s {
kmutex_t dd_zid_mutex;
zoneid_t dd_zid;
+
+ boolean_t dd_prop_loaded;
+ taskqid_t dd_prop_taskid;
} dls_devnet_t;
+
/*ARGSUSED*/
static int
i_dls_devnet_constructor(void *buf, void *arg, int kmflag)
@@ -518,6 +522,51 @@ dls_mgmt_get_phydev(datalink_id_t linkid, dev_t *devp)
}
/*
+ * Request the datalink management daemon to push in
+ * all properties associated with the link.
+ * Returns a non-zero error code on failure.
+ */
+int
+dls_mgmt_linkprop_init(datalink_id_t linkid)
+{
+ dlmgmt_door_linkprop_init_t li;
+ dlmgmt_linkprop_init_retval_t retval;
+ int err;
+
+ li.ld_cmd = DLMGMT_CMD_LINKPROP_INIT;
+ li.ld_linkid = linkid;
+
+ err = i_dls_mgmt_upcall(&li, sizeof (li), &retval, sizeof (retval));
+ return (err);
+}
+
+static void
+dls_devnet_prop_task(void *arg)
+{
+ dls_devnet_t *ddp = arg;
+
+ (void) dls_mgmt_linkprop_init(ddp->dd_vlanid);
+
+ mutex_enter(&ddp->dd_mutex);
+ ddp->dd_prop_loaded = B_TRUE;
+ ddp->dd_prop_taskid = NULL;
+ cv_broadcast(&ddp->dd_cv);
+ mutex_exit(&ddp->dd_mutex);
+}
+
+/*
+ * Ensure property loading task is completed.
+ */
+void
+dls_devnet_prop_task_wait(dls_dl_handle_t ddp)
+{
+ mutex_enter(&ddp->dd_mutex);
+ while (ddp->dd_prop_taskid != NULL)
+ cv_wait(&ddp->dd_cv, &ddp->dd_mutex);
+ mutex_exit(&ddp->dd_mutex);
+}
+
+/*
* Hold the vanity naming structure (dls_devnet_t) temporarily. The request to
* delete the dls_devnet_t will wait until the temporary reference is released.
*/
@@ -765,7 +814,15 @@ newphys:
(mod_hash_val_t)ddp) == 0);
devnet_need_rebuild = B_TRUE;
dls_devnet_stat_create(ddp);
+
+ mutex_enter(&ddp->dd_mutex);
+ if (!ddp->dd_prop_loaded && (ddp->dd_prop_taskid == NULL)) {
+ ddp->dd_prop_taskid = taskq_dispatch(system_taskq,
+ dls_devnet_prop_task, ddp, TQ_SLEEP);
+ }
+ mutex_exit(&ddp->dd_mutex);
}
+
err = 0;
done:
rw_exit(&i_dls_devnet_lock);
@@ -801,8 +858,10 @@ dls_devnet_unset_common(dls_devnet_t *ddp)
* Wait until all temporary references are released.
*/
mutex_enter(&ddp->dd_mutex);
- while (ddp->dd_tref != 0)
+ while ((ddp->dd_tref != 0) || (ddp->dd_prop_taskid != NULL))
cv_wait(&ddp->dd_cv, &ddp->dd_mutex);
+
+ ddp->dd_prop_loaded = B_FALSE;
mutex_exit(&ddp->dd_mutex);
if (!ddp->dd_explicit) {
@@ -1139,7 +1198,7 @@ dls_devnet_phydev(datalink_id_t vlanid, dev_t *devp)
* In this case, the link's kstats need to be updated using the given name.
*
* 2. Request to rename a valid link (id1) to the name of a REMOVED
- * physical link (id2). In this case, check htat id1 and its associated
+ * physical link (id2). In this case, check that id1 and its associated
* mac is not held by any application, and update the link's linkid to id2.
*
* This case does not change the <link name, linkid> mapping, so the link's
@@ -1181,6 +1240,31 @@ dls_devnet_rename(datalink_id_t id1, datalink_id_t id2, const char *link)
}
/*
+ * Let the property loading thread finish.
+ * Unfortunately, we have to drop i_dls_devnet_lock temporarily
+ * to avoid deadlocks, and ensure ddp is still in the hash after
+ * reacquiring it. Observe lock order as well.
+ */
+ mutex_enter(&ddp->dd_mutex);
+ if (ddp->dd_prop_taskid != NULL) {
+ rw_exit(&i_dls_devnet_lock);
+ while (ddp->dd_prop_taskid != NULL)
+ cv_wait(&ddp->dd_cv, &ddp->dd_mutex);
+ mutex_exit(&ddp->dd_mutex);
+ rw_enter(&i_dls_devnet_lock, RW_WRITER);
+
+ if ((err = mod_hash_find(i_dls_devnet_id_hash,
+ (mod_hash_key_t)(uintptr_t)id1,
+ (mod_hash_val_t *)&ddp)) != 0) {
+ ASSERT(err == MH_ERR_NOTFOUND);
+ err = ENOENT;
+ goto done;
+ }
+ } else {
+ mutex_exit(&ddp->dd_mutex);
+ }
+
+ /*
* Return EBUSY if any applications have this link open.
*/
if ((ddp->dd_explicit && ddp->dd_ref > 1) ||
@@ -1243,6 +1327,13 @@ dls_devnet_rename(datalink_id_t id1, datalink_id_t id2, const char *link)
(void) mod_hash_insert(i_dls_devnet_id_hash,
(mod_hash_key_t)(uintptr_t)ddp->dd_vlanid, (mod_hash_val_t)ddp);
+ /* load properties for new id */
+ mutex_enter(&ddp->dd_mutex);
+ ddp->dd_prop_loaded = B_FALSE;
+ ddp->dd_prop_taskid = taskq_dispatch(system_taskq,
+ dls_devnet_prop_task, ddp, TQ_SLEEP);
+ mutex_exit(&ddp->dd_mutex);
+
mac_rele_exclusive(mh);
done:
@@ -1347,6 +1438,8 @@ dls_devnet_open(const char *link, dls_dl_handle_t *dhp, dev_t *devp)
return (err);
}
+ dls_devnet_prop_task_wait(ddp);
+
*dhp = ddp;
*devp = dvp->dv_dev;
return (0);
diff --git a/usr/src/uts/common/io/mac/mac.c b/usr/src/uts/common/io/mac/mac.c
index 1d69baf542..6de6872149 100644
--- a/usr/src/uts/common/io/mac/mac.c
+++ b/usr/src/uts/common/io/mac/mac.c
@@ -563,6 +563,8 @@ mac_open_by_linkid(datalink_id_t linkid, mac_handle_t *mhp)
goto done;
}
+ dls_devnet_prop_task_wait(dlh);
+
err = mac_open(dls_devnet_mac(dlh), mhp);
done:
diff --git a/usr/src/uts/common/sys/dls.h b/usr/src/uts/common/sys/dls.h
index 20f556c86f..0982c8ca4b 100644
--- a/usr/src/uts/common/sys/dls.h
+++ b/usr/src/uts/common/sys/dls.h
@@ -116,14 +116,15 @@ typedef uint64_t datalink_media_t;
/*
* Door upcall commands.
*/
-#define DLMGMT_CMD_DLS_CREATE 1
-#define DLMGMT_CMD_DLS_GETATTR 2
-#define DLMGMT_CMD_DLS_DESTROY 3
-#define DLMGMT_CMD_GETNAME 4
-#define DLMGMT_CMD_GETLINKID 5
-#define DLMGMT_CMD_GETNEXT 6
-#define DLMGMT_CMD_DLS_UPDATE 7
-#define DLMGMT_CMD_BASE 128
+#define DLMGMT_CMD_DLS_CREATE 1
+#define DLMGMT_CMD_DLS_GETATTR 2
+#define DLMGMT_CMD_DLS_DESTROY 3
+#define DLMGMT_CMD_GETNAME 4
+#define DLMGMT_CMD_GETLINKID 5
+#define DLMGMT_CMD_GETNEXT 6
+#define DLMGMT_CMD_DLS_UPDATE 7
+#define DLMGMT_CMD_LINKPROP_INIT 8
+#define DLMGMT_CMD_BASE 128
/*
* Indicate the link mapping is active or persistent
@@ -190,12 +191,18 @@ typedef struct dlmgmt_door_getnext_s {
datalink_media_t ld_dmedia;
} dlmgmt_door_getnext_t;
+typedef struct dlmgmt_door_linkprop_init {
+ int ld_cmd;
+ datalink_id_t ld_linkid;
+} dlmgmt_door_linkprop_init_t;
+
/* upcall return value */
typedef struct dlmgmt_retval_s {
uint_t lr_err; /* return error code */
} dlmgmt_retval_t;
-typedef dlmgmt_retval_t dlmgmt_destroy_retval_t;
+typedef dlmgmt_retval_t dlmgmt_destroy_retval_t,
+ dlmgmt_linkprop_init_retval_t;
struct dlmgmt_linkid_retval_s {
uint_t lr_err;
@@ -291,6 +298,7 @@ extern int dls_devnet_create_vlan(datalink_id_t,
extern int dls_devnet_destroy_vlan(datalink_id_t);
extern int dls_devnet_hold_tmp(datalink_id_t, dls_dl_handle_t *);
extern void dls_devnet_rele_tmp(dls_dl_handle_t);
+extern void dls_devnet_prop_task_wait(dls_dl_handle_t);
extern const char *dls_devnet_mac(dls_dl_handle_t);
extern uint16_t dls_devnet_vid(dls_dl_handle_t);
diff --git a/usr/src/uts/common/sys/mac.h b/usr/src/uts/common/sys/mac.h
index 2adf9f03ac..e314da779f 100644
--- a/usr/src/uts/common/sys/mac.h
+++ b/usr/src/uts/common/sys/mac.h
@@ -282,7 +282,7 @@ typedef enum {
MAC_CAPAB_SHARES = 0x200, /* data is mac_capab_share_t */
/* The following capabilities are specific to softmac. */
- MAC_CAPAB_LEGACY = 0x8000, /* data is mac_capab_legacy_t */
+ MAC_CAPAB_LEGACY = 0x8000 /* data is mac_capab_legacy_t */
} mac_capab_t;
typedef int mac_addr_slot_t;
@@ -899,9 +899,9 @@ extern void mactype_free(mactype_register_t *);
extern int mactype_register(mactype_register_t *);
extern int mactype_unregister(const char *);
extern int mac_set_prop(mac_handle_t, mac_prop_t *,
- void *, uint_t);
+ void *, uint_t);
extern int mac_get_prop(mac_handle_t, mac_prop_t *,
- void *, uint_t);
+ void *, uint_t);
#endif /* _KERNEL */
diff --git a/usr/src/uts/intel/ia32/ml/modstubs.s b/usr/src/uts/intel/ia32/ml/modstubs.s
index 5ae7072e82..6bc1a2ca34 100644
--- a/usr/src/uts/intel/ia32/ml/modstubs.s
+++ b/usr/src/uts/intel/ia32/ml/modstubs.s
@@ -1259,6 +1259,7 @@ fcnname/**/_info: \
STUB(dls, dls_devnet_mac, nomod_zero);
STUB(dls, dls_devnet_hold_tmp, nomod_einval);
STUB(dls, dls_devnet_rele_tmp, nomod_void);
+ STUB(dls, dls_devnet_prop_task_wait, nomod_void);
STUB(dls, dls_mgmt_get_linkid, nomod_einval);
END_MODULE(dls);
#endif
diff --git a/usr/src/uts/sparc/ml/modstubs.s b/usr/src/uts/sparc/ml/modstubs.s
index b1936c4172..2d9473d17d 100644
--- a/usr/src/uts/sparc/ml/modstubs.s
+++ b/usr/src/uts/sparc/ml/modstubs.s
@@ -1214,6 +1214,7 @@ stubs_base:
STUB(dls, dls_devnet_mac, nomod_zero);
STUB(dls, dls_devnet_hold_tmp, nomod_einval);
STUB(dls, dls_devnet_rele_tmp, nomod_void);
+ STUB(dls, dls_devnet_prop_task_wait, nomod_void);
STUB(dls, dls_mgmt_get_linkid, nomod_einval);
END_MODULE(dls);
#endif