diff options
| author | artem <none@none> | 2008-06-19 14:31:31 -0700 |
|---|---|---|
| committer | artem <none@none> | 2008-06-19 14:31:31 -0700 |
| commit | 308903890e892f9c21ee582e3a52fdd67e52870b (patch) | |
| tree | 732f36a3e4382b987a7d27c152d718a839ab8e69 /usr/src | |
| parent | d81b850f296ee36f8a9ecba637e8c8e2996eaaee (diff) | |
| download | illumos-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.c | 2 | ||||
| -rw-r--r-- | usr/src/cmd/dladm/dladm.c | 46 | ||||
| -rw-r--r-- | usr/src/cmd/dlmgmtd/dlmgmt_door.c | 33 | ||||
| -rw-r--r-- | usr/src/cmd/dlmgmtd/dlmgmt_main.c | 2 | ||||
| -rw-r--r-- | usr/src/cmd/rcm_daemon/common/network_rcm.c | 2 | ||||
| -rw-r--r-- | usr/src/cmd/svc/milestone/net-physical | 9 | ||||
| -rw-r--r-- | usr/src/lib/libdladm/common/libdlaggr.c | 2 | ||||
| -rw-r--r-- | usr/src/lib/libdladm/common/libdllink.c | 2 | ||||
| -rw-r--r-- | usr/src/lib/libdladm/common/libdllink.h | 2 | ||||
| -rw-r--r-- | usr/src/lib/libdladm/common/libdlvlan.c | 2 | ||||
| -rw-r--r-- | usr/src/lib/libdladm/common/linkprop.c | 16 | ||||
| -rw-r--r-- | usr/src/uts/common/io/dls/dls_mgmt.c | 97 | ||||
| -rw-r--r-- | usr/src/uts/common/io/mac/mac.c | 2 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/dls.h | 26 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/mac.h | 6 | ||||
| -rw-r--r-- | usr/src/uts/intel/ia32/ml/modstubs.s | 1 | ||||
| -rw-r--r-- | usr/src/uts/sparc/ml/modstubs.s | 1 |
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 |
