Lines Matching defs:mapp

68 #define	DAM_INCR_STAT(mapp, stat)				\
69 if ((mapp)->dam_kstatsp) { \
70 struct dam_kstats *stp = (mapp)->dam_kstatsp->ks_data; \
74 #define DAM_SET_STAT(mapp, stat, val) \
75 if ((mapp)->dam_kstatsp) { \
76 struct dam_kstats *stp = (mapp)->dam_kstatsp->ks_data; \
128 dam_t *mapp;
133 mapp = kmem_zalloc(sizeof (*mapp), KM_SLEEP);
134 mapp->dam_options = map_opts;
135 mapp->dam_stable_ticks = drv_usectohz(stable_usec);
136 mapp->dam_size = 0;
137 mapp->dam_rptmode = mode;
138 mapp->dam_activate_arg = activate_arg;
139 mapp->dam_activate_cb = (activate_cb_t)activate_cb;
140 mapp->dam_deactivate_cb = (deactivate_cb_t)deactivate_cb;
141 mapp->dam_config_arg = config_arg;
142 mapp->dam_configure_cb = (configure_cb_t)configure_cb;
143 mapp->dam_unconfig_cb = (unconfig_cb_t)unconfig_cb;
144 mapp->dam_name = i_ddi_strdup(name, KM_SLEEP);
145 mutex_init(&mapp->dam_lock, NULL, MUTEX_DRIVER, NULL);
146 cv_init(&mapp->dam_sync_cv, NULL, CV_DRIVER, NULL);
147 bitset_init(&mapp->dam_active_set);
148 bitset_init(&mapp->dam_stable_set);
149 bitset_init(&mapp->dam_report_set);
150 *damapp = (damap_t *)mapp;
153 char *, mapp->dam_name, damap_t *, mapp,
167 dam_map_alloc(dam_t *mapp)
171 ASSERT(mutex_owned(&mapp->dam_lock));
172 if (mapp->dam_flags & DAM_DESTROYPEND)
178 if (mapp->dam_high)
181 mapp->dam_size = DAM_SIZE_BUMP;
183 mapp->dam_size) != DDI_SUCCESS)
186 if (ddi_strid_init(&mapp->dam_addr_hash, mapp->dam_size) !=
191 if (dam_kstat_create(mapp) != DDI_SUCCESS) {
193 ddi_strid_fini(&mapp->dam_addr_hash);
196 mapp->dam_da = softstate_p;
197 mapp->dam_high = 1;
198 bitset_resize(&mapp->dam_active_set, mapp->dam_size);
199 bitset_resize(&mapp->dam_stable_set, mapp->dam_size);
200 bitset_resize(&mapp->dam_report_set, mapp->dam_size);
217 dam_t *mapp = (dam_t *)damapp;
219 ASSERT(mapp);
222 char *, mapp->dam_name, damap_t *, mapp);
224 mutex_enter(&mapp->dam_lock);
229 mapp->dam_flags |= DAM_DESTROYPEND;
231 if (mapp->dam_high) {
232 mutex_exit(&mapp->dam_lock);
238 mutex_enter(&mapp->dam_lock);
239 dam_sched_timeout(NULL, mapp, 0);
246 mutex_exit(&mapp->dam_lock);
247 for (i = 1; i < mapp->dam_high; i++) {
248 if (ddi_get_soft_state(mapp->dam_da, i) == NULL)
251 ASSERT(DAM_IN_REPORT(mapp, i) == 0);
253 if (DAM_IS_STABLE(mapp, i)) {
254 dam_addr_deactivate(mapp, i);
256 ddi_strid_free(mapp->dam_addr_hash, i);
257 ddi_soft_state_free(mapp->dam_da, i);
260 ddi_strid_fini(&mapp->dam_addr_hash);
261 ddi_soft_state_fini(&mapp->dam_da);
262 kstat_delete(mapp->dam_kstatsp);
264 mutex_exit(&mapp->dam_lock);
266 bitset_fini(&mapp->dam_active_set);
267 bitset_fini(&mapp->dam_stable_set);
268 bitset_fini(&mapp->dam_report_set);
269 mutex_destroy(&mapp->dam_lock);
270 cv_destroy(&mapp->dam_sync_cv);
271 if (mapp->dam_name)
272 kmem_free(mapp->dam_name, strlen(mapp->dam_name) + 1);
273 kmem_free(mapp, sizeof (*mapp));
289 dam_t *mapp = (dam_t *)damapp;
292 ASSERT(mapp);
294 char *, mapp->dam_name, dam_t *, mapp,
304 mutex_enter(&mapp->dam_lock);
305 again: while ((mapp->dam_flags & WAITFOR_FLAGS) ||
306 (!bitset_is_null(&mapp->dam_report_set)) ||
307 (mapp->dam_tid != 0)) {
309 char *, mapp->dam_name, dam_t *, mapp);
313 if (cv_reltimedwait(&mapp->dam_sync_cv, &mapp->dam_lock,
315 mapp->dam_sync_to_cnt++;
320 cv_wait(&mapp->dam_sync_cv, &mapp->dam_lock);
328 (void) cv_reltimedwait(&mapp->dam_sync_cv, &mapp->dam_lock,
329 mapp->dam_stable_ticks, TR_MICROSEC);
330 if (rv && ((mapp->dam_flags & WAITFOR_FLAGS) ||
331 (!bitset_is_null(&mapp->dam_report_set)) ||
332 (mapp->dam_tid != 0)))
335 mutex_exit(&mapp->dam_lock);
338 char *, mapp->dam_name, dam_t *, mapp,
349 dam_t *mapp = (dam_t *)damapp;
352 mutex_enter(&mapp->dam_lock);
353 rv = bitset_is_null(&mapp->dam_active_set);
354 mutex_exit(&mapp->dam_lock);
368 dam_t *mapp = (dam_t *)damapp;
370 return (mapp ? mapp->dam_name : "UNKNOWN_damap");
383 dam_t *mapp = (dam_t *)damapp;
385 return (mapp->dam_size);
405 dam_t *mapp = (dam_t *)damapp;
409 if (!mapp || !address || (mapp->dam_rptmode != DAMAP_REPORT_PERADDR))
413 char *, mapp->dam_name, dam_t *, mapp,
416 mutex_enter(&mapp->dam_lock);
417 if ((dam_map_alloc(mapp) != DAM_SUCCESS) ||
418 ((addrid = dam_get_addrid(mapp, address)) == 0)) {
419 mutex_exit(&mapp->dam_lock);
423 passp = ddi_get_soft_state(mapp->dam_da, addrid);
430 if (DAM_IN_REPORT(mapp, addrid)) {
432 char *, mapp->dam_name, dam_t *, mapp,
434 DAM_INCR_STAT(mapp, dam_jitter);
435 dam_addr_report_release(mapp, addrid);
442 dam_addr_report(mapp, passp, addrid, RPT_ADDR_ADD);
445 mutex_exit(&mapp->dam_lock);
462 dam_t *mapp = (dam_t *)damapp;
466 if (!mapp || !address || (mapp->dam_rptmode != DAMAP_REPORT_PERADDR))
470 char *, mapp->dam_name, dam_t *, mapp,
472 mutex_enter(&mapp->dam_lock);
473 if (dam_map_alloc(mapp) != DAM_SUCCESS) {
474 mutex_exit(&mapp->dam_lock);
482 if (!(addrid = ddi_strid_str2id(mapp->dam_addr_hash, address))) {
483 mutex_exit(&mapp->dam_lock);
486 passp = ddi_get_soft_state(mapp->dam_da, addrid);
488 if (DAM_IN_REPORT(mapp, addrid)) {
490 char *, mapp->dam_name, dam_t *, mapp,
492 DAM_INCR_STAT(mapp, dam_jitter);
493 dam_addr_report_release(mapp, addrid);
496 dam_addr_report(mapp, passp, addrid, RPT_ADDR_DEL);
497 mutex_exit(&mapp->dam_lock);
504 dam_t *mapp = (dam_t *)damapp;
507 ASSERT(mapp);
508 ASSERT(mutex_owned(&mapp->dam_lock));
509 if (mapp->dam_rptmode != DAMAP_REPORT_FULLSET) {
514 char *, mapp->dam_name, dam_t *, mapp);
515 if (mapp->dam_flags & DAM_SETADD) {
517 char *, mapp->dam_name, dam_t *, mapp);
522 dam_sched_timeout(NULL, mapp, 0);
523 DAM_INCR_STAT(mapp, dam_jitter);
528 for (idx = 1; idx < mapp->dam_high; idx++) {
529 if (DAM_IN_REPORT(mapp, idx)) {
530 dam_addr_report_release(mapp, idx);
534 bitset_zero(&mapp->dam_report_set);
535 mapp->dam_flags &= ~DAM_SETADD;
536 cv_signal(&mapp->dam_sync_cv);
553 dam_t *mapp = (dam_t *)damapp;
556 if (mapp == NULL) {
561 char *, mapp->dam_name, dam_t *, mapp);
563 mutex_enter(&mapp->dam_lock);
564 if (dam_map_alloc(mapp) != DAM_SUCCESS) {
565 mutex_exit(&mapp->dam_lock);
572 mapp->dam_flags |= DAM_SETADD;
574 mutex_exit(&mapp->dam_lock);
591 dam_t *mapp = (dam_t *)damapp;
593 if (mapp == NULL) {
598 char *, mapp->dam_name, dam_t *, mapp);
600 mutex_enter(&mapp->dam_lock);
602 mutex_exit(&mapp->dam_lock);
625 dam_t *mapp = (dam_t *)damapp;
629 if (!mapp || !address || (mapp->dam_rptmode != DAMAP_REPORT_FULLSET))
633 char *, mapp->dam_name, dam_t *, mapp, char *, address);
635 mutex_enter(&mapp->dam_lock);
636 if (!(mapp->dam_flags & DAM_SETADD)) {
637 mutex_exit(&mapp->dam_lock);
641 if ((addrid = dam_get_addrid(mapp, address)) == 0) {
642 mutex_exit(&mapp->dam_lock);
646 passp = ddi_get_soft_state(mapp->dam_da, addrid);
648 if (DAM_IN_REPORT(mapp, addrid)) {
650 char *, mapp->dam_name, dam_t *, mapp,
652 dam_addr_report_release(mapp, addrid);
658 bitset_add(&mapp->dam_report_set, addrid);
661 mutex_exit(&mapp->dam_lock);
678 dam_t *mapp = (dam_t *)damapp;
681 if (!mapp || (mapp->dam_rptmode != DAMAP_REPORT_FULLSET))
685 char *, mapp->dam_name, dam_t *, mapp);
687 mutex_enter(&mapp->dam_lock);
688 if (!(mapp->dam_flags & DAM_SETADD)) {
689 mutex_exit(&mapp->dam_lock);
695 char *, mapp->dam_name, dam_t *, mapp);
696 dam_sched_timeout(NULL, mapp, 0);
697 for (i = 1; i < mapp->dam_high; i++)
698 if (DAM_IN_REPORT(mapp, i))
699 dam_addr_report_release(mapp, i);
701 mapp->dam_last_update = gethrtime();
702 dam_sched_timeout(dam_addrset_stable_cb, mapp,
703 mapp->dam_stable_ticks);
705 mutex_exit(&mapp->dam_lock);
721 dam_t *mapp = (dam_t *)damapp;
724 if (mapp->dam_high && ddi_strid_id2str(mapp->dam_addr_hash, addrid)) {
725 if (pass = ddi_get_soft_state(mapp->dam_da, addrid))
743 dam_t *mapp = (dam_t *)damapp;
745 if (mapp->dam_high)
746 return (ddi_strid_id2str(mapp->dam_addr_hash, addrid));
760 dam_t *mapp = (dam_t *)damapp;
764 passp = ddi_get_soft_state(mapp->dam_da, (id_t)addrid);
769 char *, mapp->dam_name, dam_t *, mapp,
772 mutex_enter(&mapp->dam_lock);
778 dam_addr_release(mapp, (id_t)addrid);
780 mutex_exit(&mapp->dam_lock);
795 dam_t *mapp = (dam_t *)damapp;
799 passp = ddi_get_soft_state(mapp->dam_da, (id_t)addrid);
821 dam_t *mapp = (dam_t *)damapp;
824 if (!mapp || !dam_list)
828 for (i = start; i < mapp->dam_high; i++) {
847 dam_t *mapp = (dam_t *)damapp;
850 mutex_enter(&mapp->dam_lock);
851 passp = ddi_get_soft_state(mapp->dam_da, (id_t)addrid);
853 mutex_exit(&mapp->dam_lock);
857 mutex_exit(&mapp->dam_lock);
871 dam_t *mapp = (dam_t *)damapp;
875 mutex_enter(&mapp->dam_lock);
876 passp = ddi_get_soft_state(mapp->dam_da, (id_t)addrid);
878 mutex_exit(&mapp->dam_lock);
882 mutex_exit(&mapp->dam_lock);
900 dam_t *mapp = (dam_t *)damapp;
905 char *, mapp->dam_name, dam_t *, mapp,
907 mutex_enter(&mapp->dam_lock);
908 if (!mapp->dam_high)
911 addrid = ddi_strid_str2id(mapp->dam_addr_hash, address);
913 if (DAM_IS_STABLE(mapp, addrid)) {
914 passp = ddi_get_soft_state(mapp->dam_da, addrid);
925 mutex_exit(&mapp->dam_lock);
927 char *, mapp->dam_name, dam_t *, mapp,
944 dam_t *mapp = (dam_t *)damapp;
945 int mapsz = mapp->dam_size;
952 char *, mapp->dam_name, dam_t *, mapp);
953 mutex_enter(&mapp->dam_lock);
954 if (!mapp->dam_high) {
956 mutex_exit(&mapp->dam_lock);
958 char *, mapp->dam_name, dam_t *, mapp);
964 bitset_copy(&mapp->dam_active_set, bsp);
967 passp = ddi_get_soft_state(mapp->dam_da, i);
972 char *, mapp->dam_name, dam_t *, mapp,
981 mutex_exit(&mapp->dam_lock);
987 mutex_exit(&mapp->dam_lock);
995 * mapp: address map handle
1001 dam_t *mapp = (dam_t *)damapp;
1007 mutex_enter(&mapp->dam_lock);
1008 for (i = 1; i < mapp->dam_high; i++) {
1010 (void) dam_addr_release(mapp, i);
1012 mutex_exit(&mapp->dam_lock);
1021 dam_addr_activate(dam_t *mapp, id_t addrid)
1027 mutex_enter(&mapp->dam_lock);
1028 bitset_add(&mapp->dam_active_set, addrid);
1029 passp = ddi_get_soft_state(mapp->dam_da, addrid);
1035 addrstr = ddi_strid_id2str(mapp->dam_addr_hash, addrid);
1037 char *, mapp->dam_name, dam_t *, mapp,
1045 mutex_exit(&mapp->dam_lock);
1046 if (mapp->dam_activate_cb) {
1047 (*mapp->dam_activate_cb)(mapp->dam_activate_arg, addrstr,
1055 config_rv = (*mapp->dam_configure_cb)(mapp->dam_config_arg, mapp,
1058 mutex_enter(&mapp->dam_lock);
1060 mutex_exit(&mapp->dam_lock);
1062 char *, mapp->dam_name, dam_t *, mapp,
1064 dam_deact_cleanup(mapp, addrid, addrstr,
1068 char *, mapp->dam_name, dam_t *, mapp,
1077 dam_addr_deactivate(dam_t *mapp, id_t addrid)
1081 addrstr = ddi_strid_id2str(mapp->dam_addr_hash, addrid);
1083 char *, mapp->dam_name, dam_t *, mapp,
1089 (*mapp->dam_unconfig_cb)(mapp->dam_config_arg, mapp, addrid);
1090 dam_deact_cleanup(mapp, addrid, addrstr, DAMAP_DEACT_RSN_GONE);
1094 dam_deact_cleanup(dam_t *mapp, id_t addrid, char *addrstr,
1099 passp = ddi_get_soft_state(mapp->dam_da, addrid);
1101 if (mapp->dam_deactivate_cb)
1102 (*mapp->dam_deactivate_cb)(mapp->dam_activate_arg,
1103 ddi_strid_id2str(mapp->dam_addr_hash, addrid),
1110 mutex_enter(&mapp->dam_lock);
1111 bitset_del(&mapp->dam_active_set, addrid);
1120 char *, mapp->dam_name, dam_t *, mapp,
1123 (void) dam_addr_release(mapp, addrid);
1124 mutex_exit(&mapp->dam_lock);
1155 dam_addrset_activate(dam_t *mapp, bitset_t *activate)
1164 if (mapp->dam_options & DAMAP_MTCONFIG) {
1168 for (i = 1, nset = 0; i < mapp->dam_high; i++)
1172 (void) snprintf(tqn, sizeof (tqn), "actv-%s", mapp->dam_name);
1176 for (i = 1; i < mapp->dam_high; i++) {
1179 dam_addr_activate(mapp, i);
1185 tqd->tqd_mapp = mapp;
1202 dam_addrset_deactivate(dam_t *mapp, bitset_t *deactivate)
1210 char *, mapp->dam_name, dam_t *, mapp);
1212 if (mapp->dam_options & DAMAP_MTCONFIG) {
1216 for (i = 1, nset = 0; i < mapp->dam_high; i++)
1220 mapp->dam_name);
1224 for (i = 1; i < mapp->dam_high; i++) {
1227 dam_addr_deactivate(mapp, i);
1230 tqd->tqd_mapp = mapp;
1248 dam_addr_release(dam_t *mapp, id_t addrid)
1254 ASSERT(mutex_owned(&mapp->dam_lock));
1255 passp = ddi_get_soft_state(mapp->dam_da, addrid);
1258 addrstr = ddi_strid_id2str(mapp->dam_addr_hash, addrid);
1260 char *, mapp->dam_name, dam_t *, mapp,
1269 char *, mapp->dam_name, dam_t *, mapp,
1277 if (DAM_IN_REPORT(mapp, addrid)) {
1279 char *, mapp->dam_name, dam_t *, mapp,
1284 ddi_strid_free(mapp->dam_addr_hash, addrid);
1285 ddi_soft_state_free(mapp->dam_da, addrid);
1294 dam_t *mapp = (dam_t *)arg;
1302 char *, mapp->dam_name, dam_t *, mapp);
1305 bitset_resize(&delta, mapp->dam_size);
1307 bitset_resize(&cfg, mapp->dam_size);
1309 bitset_resize(&uncfg, mapp->dam_size);
1315 mutex_enter(&mapp->dam_lock);
1316 ASSERT(mapp->dam_flags & DAM_SPEND);
1317 if (!bitset_xor(&mapp->dam_active_set, &mapp->dam_stable_set,
1322 bitset_zero(&mapp->dam_stable_set);
1323 mapp->dam_flags &= ~DAM_SPEND;
1324 cv_signal(&mapp->dam_sync_cv);
1325 mutex_exit(&mapp->dam_lock);
1331 char *, mapp->dam_name, dam_t *, mapp);
1338 has_cfg = bitset_and(&delta, &mapp->dam_stable_set, &cfg);
1339 has_uncfg = bitset_and(&delta, &mapp->dam_active_set, &uncfg);
1344 mutex_exit(&mapp->dam_lock);
1350 dam_addrset_activate(mapp, &cfg);
1356 dam_addrset_deactivate(mapp, &uncfg);
1363 mutex_enter(&mapp->dam_lock);
1364 bitset_zero(&mapp->dam_stable_set);
1365 mapp->dam_last_stable = gethrtime();
1366 mapp->dam_stable_cnt++;
1367 DAM_INCR_STAT(mapp, dam_cycles);
1373 for (i = 1, n_active = 0; i < mapp->dam_high; i++)
1374 if (bitset_in_set(&mapp->dam_active_set, i))
1376 DAM_SET_STAT(mapp, dam_active, n_active);
1379 char *, mapp->dam_name, dam_t *, mapp,
1382 mapp->dam_flags &= ~DAM_SPEND;
1383 cv_signal(&mapp->dam_sync_cv);
1384 mutex_exit(&mapp->dam_lock);
1397 dam_t *mapp = (dam_t *)arg;
1404 mutex_enter(&mapp->dam_lock);
1405 if (mapp->dam_tid == 0) {
1407 char *, mapp->dam_name, dam_t *, mapp);
1408 mutex_exit(&mapp->dam_lock);
1411 mapp->dam_tid = 0;
1418 if (mapp->dam_flags & DAM_SPEND) {
1419 DAM_INCR_STAT(mapp, dam_overrun);
1420 mapp->dam_stable_overrun++;
1422 char *, mapp->dam_name, dam_t *, mapp);
1423 dam_sched_timeout(dam_addr_stable_cb, mapp,
1424 mapp->dam_stable_ticks);
1425 mutex_exit(&mapp->dam_lock);
1429 DAM_SET_STAT(mapp, dam_overrun, 0);
1430 mapp->dam_stable_overrun = 0;
1434 next_ticks = mapp->dam_stable_ticks;
1435 for (i = 1; i < mapp->dam_high; i++) {
1436 if (bitset_in_set(&mapp->dam_report_set, i)) {
1437 passp = ddi_get_soft_state(mapp->dam_da, i);
1457 mapp, TQ_NOSLEEP | TQ_NOQUEUE)) {
1459 char *, mapp->dam_name, dam_t *, mapp);
1470 mapp->dam_flags |= DAM_SPEND;
1477 bitset_copy(&mapp->dam_active_set,
1478 &mapp->dam_stable_set);
1479 for (i = 1; i < mapp->dam_high; i++) {
1480 if (!bitset_in_set(&mapp->dam_report_set, i))
1483 passp = ddi_get_soft_state(mapp->dam_da, i);
1489 bitset_del(&mapp->dam_stable_set, i);
1491 bitset_add(&mapp->dam_stable_set, i);
1493 bitset_del(&mapp->dam_report_set, i);
1497 char *, mapp->dam_name, dam_t *, mapp);
1517 mapp->dam_name, dam_t *, mapp);
1518 dam_sched_timeout(dam_addr_stable_cb, mapp,
1522 mutex_exit(&mapp->dam_lock);
1531 dam_t *mapp = (dam_t *)arg;
1533 mutex_enter(&mapp->dam_lock);
1534 if (mapp->dam_tid == 0) {
1535 mutex_exit(&mapp->dam_lock);
1537 char *, mapp->dam_name, dam_t *, mapp);
1540 mapp->dam_tid = 0;
1547 if ((mapp->dam_flags & DAM_SPEND) ||
1548 (taskq_dispatch(system_taskq, dam_stabilize_map, mapp,
1550 DAM_INCR_STAT(mapp, dam_overrun);
1551 mapp->dam_stable_overrun++;
1552 dam_sched_timeout(dam_addrset_stable_cb, mapp,
1556 char *, mapp->dam_name, dam_t *, mapp);
1557 mutex_exit(&mapp->dam_lock);
1561 DAM_SET_STAT(mapp, dam_overrun, 0);
1562 mapp->dam_stable_overrun = 0;
1563 bitset_copy(&mapp->dam_report_set, &mapp->dam_stable_set);
1564 bitset_zero(&mapp->dam_report_set);
1565 mapp->dam_flags |= DAM_SPEND;
1566 mapp->dam_flags &= ~DAM_SETADD;
1570 char *, mapp->dam_name, dam_t *, mapp);
1571 mutex_exit(&mapp->dam_lock);
1579 dam_sched_timeout(void (*timeout_cb)(), dam_t *mapp, clock_t ticks)
1584 char *, mapp->dam_name, dam_t *, mapp,
1585 int, ticks, timeout_id_t, mapp->dam_tid);
1587 ASSERT(mutex_owned(&mapp->dam_lock));
1588 if ((tid = mapp->dam_tid) != 0) {
1590 mapp->dam_tid = 0;
1591 mutex_exit(&mapp->dam_lock);
1593 mutex_enter(&mapp->dam_lock);
1597 mapp->dam_tid = timeout(timeout_cb, mapp, ticks);
1605 dam_addr_report(dam_t *mapp, dam_da_t *passp, id_t addrid, int rpt_type)
1607 char *addrstr = damap_id2addr((damap_t *)mapp, addrid);
1610 char *, mapp->dam_name, dam_t *, mapp,
1613 ASSERT(mutex_owned(&mapp->dam_lock));
1614 ASSERT(!DAM_IN_REPORT(mapp, addrid));
1616 mapp->dam_last_update = gethrtime();
1618 passp->da_deadline = ddi_get_lbolt64() + mapp->dam_stable_ticks;
1623 bitset_add(&mapp->dam_report_set, addrid);
1624 dam_sched_timeout(dam_addr_stable_cb, mapp, mapp->dam_stable_ticks);
1631 dam_addr_report_release(dam_t *mapp, id_t addrid)
1634 char *addrstr = damap_id2addr((damap_t *)mapp, addrid);
1637 char *, mapp->dam_name, dam_t *, mapp,
1640 ASSERT(mutex_owned(&mapp->dam_lock));
1641 passp = ddi_get_soft_state(mapp->dam_da, addrid);
1649 bitset_del(&mapp->dam_report_set, addrid);
1650 if (!DAM_IS_STABLE(mapp, addrid) && mapp->dam_deactivate_cb &&
1652 mutex_exit(&mapp->dam_lock);
1653 (*mapp->dam_deactivate_cb)(mapp->dam_activate_arg,
1654 ddi_strid_id2str(mapp->dam_addr_hash, addrid),
1656 mutex_enter(&mapp->dam_lock);
1666 dam_get_addrid(dam_t *mapp, char *address)
1671 ASSERT(mutex_owned(&mapp->dam_lock));
1672 if ((addrid = ddi_strid_str2id(mapp->dam_addr_hash, address)) == 0) {
1673 if ((addrid = ddi_strid_alloc(mapp->dam_addr_hash,
1677 if (ddi_soft_state_zalloc(mapp->dam_da, addrid) !=
1679 ddi_strid_free(mapp->dam_addr_hash, addrid);
1683 if (addrid >= mapp->dam_high)
1684 mapp->dam_high = addrid + 1;
1689 if (mapp->dam_high > mapp->dam_size) {
1690 mapp->dam_size = mapp->dam_size + DAM_SIZE_BUMP;
1691 bitset_resize(&mapp->dam_active_set, mapp->dam_size);
1692 bitset_resize(&mapp->dam_stable_set, mapp->dam_size);
1693 bitset_resize(&mapp->dam_report_set, mapp->dam_size);
1696 passp = ddi_get_soft_state(mapp->dam_da, addrid);
1698 passp->da_addr = ddi_strid_id2str(mapp->dam_addr_hash,
1708 dam_kstat_create(dam_t *mapp)
1713 mapsp = kstat_create("dam", 0, mapp->dam_name, "damap",
1726 mapp->dam_kstatsp = mapsp;