Lines Matching refs:mac_srs

137  * Every Tx and Rx mac_soft_ring_set_t (mac_srs) created gets added
229 mac_srs_soft_rings_free(mac_soft_ring_set_t *mac_srs)
240 mutex_enter(&mac_srs->srs_lock);
242 head = mac_srs->srs_soft_ring_head;
243 mac_srs->srs_soft_ring_head = NULL;
244 mac_srs->srs_soft_ring_tail = NULL;
245 mac_srs->srs_soft_ring_count = 0;
247 mutex_exit(&mac_srs->srs_lock);
256 mac_srs_add_glist(mac_soft_ring_set_t *mac_srs)
258 ASSERT(mac_srs->srs_next == NULL && mac_srs->srs_prev == NULL);
259 ASSERT(MAC_PERIM_HELD((mac_handle_t)mac_srs->srs_mcip->mci_mip));
262 mutex_enter(&mac_srs->srs_lock);
264 ASSERT((mac_srs->srs_state & SRS_IN_GLIST) == 0);
267 mac_srs_g_list = mac_srs;
269 mac_srs->srs_next = mac_srs_g_list;
270 mac_srs_g_list->srs_prev = mac_srs;
271 mac_srs->srs_prev = NULL;
272 mac_srs_g_list = mac_srs;
274 mac_srs->srs_state |= SRS_IN_GLIST;
276 mutex_exit(&mac_srs->srs_lock);
281 mac_srs_remove_glist(mac_soft_ring_set_t *mac_srs)
283 ASSERT(MAC_PERIM_HELD((mac_handle_t)mac_srs->srs_mcip->mci_mip));
286 mutex_enter(&mac_srs->srs_lock);
288 ASSERT((mac_srs->srs_state & SRS_IN_GLIST) != 0);
290 if (mac_srs == mac_srs_g_list) {
291 mac_srs_g_list = mac_srs->srs_next;
295 mac_srs->srs_prev->srs_next = mac_srs->srs_next;
296 if (mac_srs->srs_next != NULL)
297 mac_srs->srs_next->srs_prev = mac_srs->srs_prev;
299 mac_srs->srs_state &= ~SRS_IN_GLIST;
301 mutex_exit(&mac_srs->srs_lock);
316 mac_soft_ring_set_t *mac_srs)
322 if (!(mac_srs->srs_type & SRST_CLIENT_POLL_ENABLED)) {
323 ASSERT(!(mac_srs->srs_type & SRST_DLS_BYPASS));
327 for (softring = mac_srs->srs_soft_ring_head;
339 mac_soft_ring_set_t *mac_srs)
345 if (!(mac_srs->srs_type & SRST_CLIENT_POLL_ENABLED)) {
346 ASSERT(!(mac_srs->srs_type & SRST_DLS_BYPASS));
350 for (softring = mac_srs->srs_soft_ring_head;
367 mac_soft_ring_set_t *mac_srs)
372 ASSERT(mac_srs->srs_mcip == mcip);
386 if (mac_srs->srs_type & SRST_NO_SOFT_RINGS)
392 mac_srs->srs_type |= SRST_CLIENT_POLL_ENABLED;
394 softring = mac_srs->srs_soft_ring_head;
417 mrf.mrf_flow_priority = mac_srs->srs_pri;
433 mac_soft_ring_set_t *mac_srs)
444 if (mac_srs->srs_type & SRST_NO_SOFT_RINGS)
447 mutex_enter(&mac_srs->srs_lock);
448 if (!(mac_srs->srs_type & SRST_CLIENT_POLL_ENABLED)) {
449 ASSERT(!(mac_srs->srs_type & SRST_DLS_BYPASS));
450 mutex_exit(&mac_srs->srs_lock);
453 mac_srs->srs_type &= ~(SRST_CLIENT_POLL_ENABLED | SRST_DLS_BYPASS);
454 mutex_exit(&mac_srs->srs_lock);
462 for (softring = mac_srs->srs_soft_ring_head;
499 mac_srs_poll_state_change(mac_soft_ring_set_t *mac_srs,
503 mac_srs_rx_t *srs_rx = &mac_srs->srs_rx;
506 if (!SRS_QUIESCED(mac_srs)) {
507 mac_rx_srs_quiesce(mac_srs, SRS_QUIESCE);
511 ring = mac_srs->srs_ring;
515 mac_srs->srs_state &= ~SRS_POLLING_CAPAB;
517 mac_srs->srs_state |= SRS_POLLING_CAPAB;
522 mac_rx_srs_restart(mac_srs);
1180 mac_srs_fanout_list_alloc(mac_soft_ring_set_t *mac_srs)
1182 mac_client_impl_t *mcip = mac_srs->srs_mcip;
1184 if (mac_srs->srs_type & SRST_TX) {
1185 mac_srs->srs_tx_soft_rings = (mac_soft_ring_t **)
1189 mac_srs_tx_t *tx = &mac_srs->srs_tx;
1196 mac_srs->srs_tcp_soft_rings = (mac_soft_ring_t **)
1199 mac_srs->srs_udp_soft_rings = (mac_soft_ring_t **)
1202 mac_srs->srs_oth_soft_rings = (mac_soft_ring_t **)
1209 mac_srs_worker_bind(mac_soft_ring_set_t *mac_srs, processorid_t cpuid)
1223 mutex_enter(&mac_srs->srs_lock);
1224 mac_srs->srs_state |= SRS_WORKER_BOUND;
1225 if (mac_srs->srs_worker_cpuid != -1)
1227 mac_srs->srs_worker_cpuid = cpuid;
1228 mutex_exit(&mac_srs->srs_lock);
1231 thread_affinity_clear(mac_srs->srs_worker);
1233 thread_affinity_set(mac_srs->srs_worker, cpuid);
1238 mac_srs_poll_bind(mac_soft_ring_set_t *mac_srs, processorid_t cpuid)
1245 if (!mac_srs_thread_bind || mac_srs->srs_poll_thr == NULL)
1252 mutex_enter(&mac_srs->srs_lock);
1253 mac_srs->srs_state |= SRS_POLL_BOUND;
1254 if (mac_srs->srs_poll_cpuid != -1)
1256 mac_srs->srs_poll_cpuid = cpuid;
1257 mutex_exit(&mac_srs->srs_lock);
1260 thread_affinity_clear(mac_srs->srs_poll_thr);
1262 thread_affinity_set(mac_srs->srs_poll_thr, cpuid);
1271 mac_rx_srs_retarget_intr(mac_soft_ring_set_t *mac_srs, processorid_t cpuid)
1274 mac_ring_t *ring = mac_srs->srs_ring;
1276 flow_entry_t *flent = mac_srs->srs_flent;
1277 boolean_t primary = mac_is_primary_client(mac_srs->srs_mcip);
1295 mac_srs->srs_cpu.mc_rx_intr_cpu = -1;
1309 mac_srs->srs_cpu.mc_rx_intr_cpu = cpuid;
1311 mac_srs->srs_cpu.mc_rx_intr_cpu = -1;
1319 mac_tx_srs_retarget_intr(mac_soft_ring_set_t *mac_srs)
1332 srs_cpu = &mac_srs->srs_cpu;
1333 if (MAC_TX_SOFT_RINGS(mac_srs)) {
1334 for (i = 0; i < mac_srs->srs_tx_ring_count; i++) {
1335 sringp = mac_srs->srs_tx_soft_rings[i];
1365 srs_tx = &mac_srs->srs_tx;
1394 mac_soft_ring_set_t *mac_srs;
1399 if ((mac_srs = mac_srs_g_list) == NULL)
1402 for (; mac_srs != NULL; mac_srs = mac_srs->srs_next) {
1403 if (mac_srs->srs_worker_cpuid == -1 &&
1404 mac_srs->srs_worker_cpuid_save == cpuid) {
1405 mac_srs->srs_worker_cpuid_save = -1;
1406 mac_srs_worker_bind(mac_srs, cpuid);
1409 if (!(mac_srs->srs_type & SRST_TX)) {
1410 if (mac_srs->srs_poll_cpuid == -1 &&
1411 mac_srs->srs_poll_cpuid_save == cpuid) {
1412 mac_srs->srs_poll_cpuid_save = -1;
1413 mac_srs_poll_bind(mac_srs, cpuid);
1418 mutex_enter(&mac_srs->srs_lock);
1419 for (soft_ring = mac_srs->srs_soft_ring_head; soft_ring != NULL;
1427 mutex_exit(&mac_srs->srs_lock);
1439 mac_update_srs_priority(mac_soft_ring_set_t *mac_srs, pri_t prival)
1443 mac_srs->srs_pri = prival;
1444 thread_lock(mac_srs->srs_worker);
1445 (void) thread_change_pri(mac_srs->srs_worker, mac_srs->srs_pri, 0);
1446 thread_unlock(mac_srs->srs_worker);
1447 if (mac_srs->srs_poll_thr != NULL) {
1448 thread_lock(mac_srs->srs_poll_thr);
1449 (void) thread_change_pri(mac_srs->srs_poll_thr,
1450 mac_srs->srs_pri, 0);
1451 thread_unlock(mac_srs->srs_poll_thr);
1453 if ((ringp = mac_srs->srs_soft_ring_head) == NULL)
1455 while (ringp != mac_srs->srs_soft_ring_tail) {
1458 mac_srs->srs_pri, 0);
1462 ASSERT(ringp == mac_srs->srs_soft_ring_tail);
1464 (void) thread_change_pri(ringp->s_ring_worker, mac_srs->srs_pri, 0);
1598 mac_soft_ring_set_t *mac_srs = arg;
1599 mac_srs_rx_t *srs_rx = &mac_srs->srs_rx;
1602 mutex_enter(&mac_srs->srs_lock);
1603 ASSERT((mac_srs->srs_type & SRST_TX) == 0);
1607 softring = mac_srs->srs_soft_ring_head;
1616 mutex_exit(&mac_srs->srs_lock);
1682 mac_srs_update_fanout_list(mac_soft_ring_set_t *mac_srs)
1687 softring = mac_srs->srs_soft_ring_head;
1689 ASSERT(mac_srs->srs_soft_ring_count == 0);
1690 mac_srs->srs_tcp_ring_count = 0;
1691 mac_srs->srs_udp_ring_count = 0;
1692 mac_srs->srs_oth_ring_count = 0;
1693 mac_srs->srs_tx_ring_count = 0;
1699 mac_srs->srs_tcp_soft_rings[tcp_count++] = softring;
1701 mac_srs->srs_udp_soft_rings[udp_count++] = softring;
1703 mac_srs->srs_oth_soft_rings[oth_count++] = softring;
1706 mac_srs->srs_tx_soft_rings[tx_count++] = softring;
1711 ASSERT(mac_srs->srs_soft_ring_count ==
1713 mac_srs->srs_tcp_ring_count = tcp_count;
1714 mac_srs->srs_udp_ring_count = udp_count;
1715 mac_srs->srs_oth_ring_count = oth_count;
1716 mac_srs->srs_tx_ring_count = tx_count;
1721 mac_client_impl_t *mcip, mac_soft_ring_set_t *mac_srs,
1738 (type|ST_RING_TCP), pri, mcip, mac_srs,
1773 (type|ST_RING_UDP), pri, mcip, mac_srs,
1785 (type|ST_RING_OTH), pri, mcip, mac_srs,
2101 mac_soft_ring_set_t *mac_srs;
2108 mac_srs = kmem_cache_alloc(mac_srs_cache, KM_SLEEP);
2109 bzero(mac_srs, sizeof (mac_soft_ring_set_t));
2110 srs_rx = &mac_srs->srs_rx;
2111 srs_tx = &mac_srs->srs_tx;
2123 mac_srs->srs_bw = &flent->fe_tx_bw;
2124 bzero(mac_srs->srs_bw, sizeof (mac_bw_ctl_t));
2125 flent->fe_tx_srs = mac_srs;
2131 mac_srs->srs_bw = &flent->fe_rx_bw;
2134 bzero(mac_srs->srs_bw, sizeof (mac_bw_ctl_t));
2146 flent->fe_rx_srs[flent->fe_rx_srs_cnt] = mac_srs;
2149 mac_srs->srs_flent = flent;
2152 mac_srs->srs_state = 0;
2153 mac_srs->srs_type = (srs_type | SRST_NO_SOFT_RINGS);
2154 mac_srs->srs_worker_cpuid = mac_srs->srs_worker_cpuid_save = -1;
2155 mac_srs->srs_poll_cpuid = mac_srs->srs_poll_cpuid_save = -1;
2156 mac_srs->srs_mcip = mcip;
2157 mac_srs_fanout_list_alloc(mac_srs);
2165 if ((mac_srs->srs_type & SRST_FLOW) != 0) {
2166 mac_srs->srs_pri = FLOW_PRIORITY(mcip->mci_min_pri,
2169 mac_srs->srs_pri = mcip->mci_max_pri;
2178 mac_srs_add_glist(mac_srs);
2182 mac_srs->srs_drain_func = mac_rx_srs_drain_bw;
2184 mac_bw = mac_srs->srs_bw;
2194 mac_srs->srs_type |= SRST_BW_CONTROL;
2196 mac_srs->srs_drain_func = mac_rx_srs_drain;
2231 mac_srs->srs_state |= SRS_LATENCY_OPT;
2233 mac_srs->srs_state |= SRS_SOFTRING_QUEUE;
2236 mac_srs->srs_worker = thread_create(NULL, 0,
2237 mac_srs_worker, mac_srs, 0, &p0, TS_RUN, mac_srs->srs_pri);
2241 mac_srs->srs_drain_func = mac_tx_srs_drain;
2264 /* Is the mac_srs created over the RX default group? */
2267 mac_srs->srs_type |= SRST_DEFAULT_GRP;
2269 mac_srs->srs_ring = ring;
2270 ring->mr_srs = mac_srs;
2276 mac_srs->srs_state |= SRS_POLLING_CAPAB;
2278 mac_srs->srs_poll_thr = thread_create(NULL, 0,
2279 mac_rx_srs_poll_ring, mac_srs, 0, &p0, TS_RUN,
2280 mac_srs->srs_pri);
2290 mac_srs->srs_state |= SRS_SOFTRING_QUEUE;
2293 mac_srs_stat_create(mac_srs);
2294 return (mac_srs);
2341 mac_soft_ring_set_t *mac_srs;
2349 mac_srs = ring->mr_srs;
2350 ASSERT(mac_srs != NULL);
2351 mac_rx_srs_remove(mac_srs);
2401 mac_soft_ring_set_t *mac_srs;
2412 mac_srs = mac_srs_create(mcip, flent, fanout_type | link_type,
2415 flent->fe_cb_fn = (flow_fn_t)mac_srs->srs_rx.sr_lower_proc;
2417 flent->fe_cb_arg2 = (void *)mac_srs;
2455 mac_srs = mac_srs_create(mcip, flent,
2538 mac_soft_ring_set_t *mac_srs;
2545 mac_srs = flent->fe_rx_srs[i];
2546 mac_rx_srs_quiesce(mac_srs, SRS_CONDEMNED);
2547 mac_srs_free(mac_srs);
3331 mac_srs_fanout_list_free(mac_soft_ring_set_t *mac_srs)
3333 if (mac_srs->srs_type & SRST_TX) {
3336 ASSERT(mac_srs->srs_tcp_soft_rings == NULL);
3337 ASSERT(mac_srs->srs_udp_soft_rings == NULL);
3338 ASSERT(mac_srs->srs_oth_soft_rings == NULL);
3339 ASSERT(mac_srs->srs_tx_soft_rings != NULL);
3340 kmem_free(mac_srs->srs_tx_soft_rings,
3342 mac_srs->srs_tx_soft_rings = NULL;
3343 tx = &mac_srs->srs_tx;
3349 ASSERT(mac_srs->srs_tx_soft_rings == NULL);
3350 ASSERT(mac_srs->srs_tcp_soft_rings != NULL);
3351 kmem_free(mac_srs->srs_tcp_soft_rings,
3353 mac_srs->srs_tcp_soft_rings = NULL;
3354 ASSERT(mac_srs->srs_udp_soft_rings != NULL);
3355 kmem_free(mac_srs->srs_udp_soft_rings,
3357 mac_srs->srs_udp_soft_rings = NULL;
3358 ASSERT(mac_srs->srs_oth_soft_rings != NULL);
3359 kmem_free(mac_srs->srs_oth_soft_rings,
3361 mac_srs->srs_oth_soft_rings = NULL;
3370 mac_srs_ring_free(mac_soft_ring_set_t *mac_srs)
3376 ring = mac_srs->srs_ring;
3377 if (mac_srs->srs_type & SRST_TX) {
3389 flent = mac_srs->srs_flent;
3404 mac_srs_free(mac_soft_ring_set_t *mac_srs)
3406 ASSERT(mac_srs->srs_mcip == NULL ||
3407 MAC_PERIM_HELD((mac_handle_t)mac_srs->srs_mcip->mci_mip));
3408 ASSERT((mac_srs->srs_state & (SRS_CONDEMNED | SRS_CONDEMNED_DONE |
3411 mac_pkt_drop(NULL, NULL, mac_srs->srs_first, B_FALSE);
3412 mac_srs_ring_free(mac_srs);
3413 mac_srs_soft_rings_free(mac_srs);
3414 mac_srs_fanout_list_free(mac_srs);
3416 mac_srs->srs_bw = NULL;
3417 mac_srs_stat_delete(mac_srs);
3418 kmem_cache_free(mac_srs_cache, mac_srs);
3422 mac_srs_soft_rings_quiesce(mac_soft_ring_set_t *mac_srs, uint_t s_ring_flag)
3426 ASSERT(MUTEX_HELD(&mac_srs->srs_lock));
3428 mac_srs_soft_rings_signal(mac_srs, s_ring_flag);
3430 while (mac_srs->srs_soft_ring_condemned_count !=
3431 mac_srs->srs_soft_ring_count)
3432 cv_wait(&mac_srs->srs_async, &mac_srs->srs_lock);
3434 while (mac_srs->srs_soft_ring_quiesced_count !=
3435 mac_srs->srs_soft_ring_count)
3436 cv_wait(&mac_srs->srs_async, &mac_srs->srs_lock);
3438 mutex_exit(&mac_srs->srs_lock);
3440 for (softring = mac_srs->srs_soft_ring_head; softring != NULL;
3444 (void) untimeout(mac_srs->srs_tid);
3446 mutex_enter(&mac_srs->srs_lock);
3457 mac_srs_worker_quiesce(mac_soft_ring_set_t *mac_srs)
3462 ASSERT(MUTEX_HELD(&mac_srs->srs_lock));
3463 ASSERT(mac_srs->srs_state & (SRS_CONDEMNED | SRS_QUIESCE));
3465 if (mac_srs->srs_state & SRS_CONDEMNED) {
3476 if ((mac_srs->srs_type & SRST_TX) == 0 &&
3477 mac_srs->srs_poll_thr != NULL) {
3478 while (!(mac_srs->srs_state & srs_poll_wait_flag))
3479 cv_wait(&mac_srs->srs_async, &mac_srs->srs_lock);
3484 MAC_SRS_POLLING_OFF(mac_srs);
3485 mac_srs->srs_state &= ~(SRS_POLLING | SRS_GET_PKTS);
3492 mac_srs_soft_rings_quiesce(mac_srs, s_ring_flag);
3494 if (mac_srs->srs_state & SRS_CONDEMNED)
3495 mac_srs->srs_state |= (SRS_QUIESCE_DONE | SRS_CONDEMNED_DONE);
3497 mac_srs->srs_state |= SRS_QUIESCE_DONE;
3498 cv_signal(&mac_srs->srs_quiesce_done_cv);
3509 mac_srs_signal(mac_soft_ring_set_t *mac_srs, uint_t srs_flag)
3513 ring = mac_srs->srs_ring;
3524 mac_srs_threads_unbind(mac_srs);
3525 mac_srs_remove_glist(mac_srs);
3530 mutex_enter(&mac_srs->srs_lock);
3531 mac_srs->srs_state |= srs_flag;
3532 cv_signal(&mac_srs->srs_async);
3533 cv_signal(&mac_srs->srs_cv);
3534 mutex_exit(&mac_srs->srs_lock);
3546 mac_srs_soft_rings_signal(mac_soft_ring_set_t *mac_srs, uint_t sr_flag)
3550 for (softring = mac_srs->srs_soft_ring_head; softring != NULL;
3562 mac_srs_worker_restart(mac_soft_ring_set_t *mac_srs)
3567 ASSERT(MUTEX_HELD(&mac_srs->srs_lock));
3568 if ((mac_srs->srs_type & SRST_TX) != 0) {
3570 ASSERT((mac_srs->srs_state &
3575 ASSERT((mac_srs->srs_state &
3578 if (mac_srs->srs_poll_thr != NULL) {
3579 ASSERT((mac_srs->srs_state & SRS_POLL_THR_QUIESCED) ==
3588 if (mac_srs->srs_soft_ring_quiesced_count != 0) {
3589 for (softring = mac_srs->srs_soft_ring_head; softring != NULL;
3595 while (mac_srs->srs_soft_ring_quiesced_count != 0)
3596 cv_wait(&mac_srs->srs_async, &mac_srs->srs_lock);
3599 mac_srs->srs_state &= ~(SRS_QUIESCE_DONE | SRS_QUIESCE | SRS_RESTART);
3600 if (iam_rx_srs && mac_srs->srs_poll_thr != NULL) {
3606 mac_srs->srs_state |= SRS_POLL_THR_RESTART;
3607 cv_signal(&mac_srs->srs_cv);
3608 while (mac_srs->srs_state & SRS_POLL_THR_QUIESCED)
3609 cv_wait(&mac_srs->srs_async, &mac_srs->srs_lock);
3610 ASSERT(!(mac_srs->srs_state & SRS_POLL_THR_RESTART));
3613 mac_srs->srs_state |= SRS_RESTART_DONE;
3614 cv_signal(&mac_srs->srs_quiesce_done_cv);
3618 mac_srs_worker_unbind(mac_soft_ring_set_t *mac_srs)
3620 mutex_enter(&mac_srs->srs_lock);
3621 if (!(mac_srs->srs_state & SRS_WORKER_BOUND)) {
3622 ASSERT(mac_srs->srs_worker_cpuid == -1);
3623 mutex_exit(&mac_srs->srs_lock);
3627 mac_srs->srs_worker_cpuid = -1;
3628 mac_srs->srs_state &= ~SRS_WORKER_BOUND;
3629 thread_affinity_clear(mac_srs->srs_worker);
3630 mutex_exit(&mac_srs->srs_lock);
3634 mac_srs_poll_unbind(mac_soft_ring_set_t *mac_srs)
3636 mutex_enter(&mac_srs->srs_lock);
3637 if (mac_srs->srs_poll_thr == NULL ||
3638 (mac_srs->srs_state & SRS_POLL_BOUND) == 0) {
3639 ASSERT(mac_srs->srs_poll_cpuid == -1);
3640 mutex_exit(&mac_srs->srs_lock);
3644 mac_srs->srs_poll_cpuid = -1;
3645 mac_srs->srs_state &= ~SRS_POLL_BOUND;
3646 thread_affinity_clear(mac_srs->srs_poll_thr);
3647 mutex_exit(&mac_srs->srs_lock);
3651 mac_srs_threads_unbind(mac_soft_ring_set_t *mac_srs)
3655 ASSERT(MAC_PERIM_HELD((mac_handle_t)mac_srs->srs_mcip->mci_mip));
3658 mac_srs_worker_unbind(mac_srs);
3659 if (!(mac_srs->srs_type & SRST_TX))
3660 mac_srs_poll_unbind(mac_srs);
3662 for (soft_ring = mac_srs->srs_soft_ring_head; soft_ring != NULL;
3677 mac_soft_ring_set_t *mac_srs;
3682 if ((mac_srs = mac_srs_g_list) == NULL)
3685 for (; mac_srs != NULL; mac_srs = mac_srs->srs_next) {
3686 if (mac_srs->srs_worker_cpuid == cpuid) {
3687 mac_srs->srs_worker_cpuid_save = cpuid;
3688 mac_srs_worker_unbind(mac_srs);
3691 if (!(mac_srs->srs_type & SRST_TX)) {
3692 if (mac_srs->srs_poll_cpuid == cpuid) {
3693 mac_srs->srs_poll_cpuid_save = cpuid;
3694 mac_srs_poll_unbind(mac_srs);
3699 mutex_enter(&mac_srs->srs_lock);
3700 for (soft_ring = mac_srs->srs_soft_ring_head; soft_ring != NULL;
3707 mutex_exit(&mac_srs->srs_lock);
3718 * a ring pointed to by mac_srs->srs_tx_arg2.
3721 mac_tx_srs_add_ring(mac_soft_ring_set_t *mac_srs, mac_ring_t *tx_ring)
3723 mac_client_impl_t *mcip = mac_srs->srs_mcip;
3725 int count = mac_srs->srs_tx_ring_count;
3729 ASSERT(mac_srs->srs_state & SRS_QUIESCE);
3734 soft_ring_type, maxclsyspri, mcip, mac_srs, -1,
3736 mac_srs->srs_tx_ring_count++;
3737 mac_srs_update_fanout_list(mac_srs);
3746 mac_soft_ring_remove(mac_soft_ring_set_t *mac_srs, mac_soft_ring_t *softring)
3750 mutex_enter(&mac_srs->srs_lock);
3751 sringcnt = mac_srs->srs_soft_ring_count;
3755 ASSERT(mac_srs->srs_soft_ring_condemned_count == 0);
3756 while (mac_srs->srs_soft_ring_condemned_count != 1)
3757 cv_wait(&mac_srs->srs_async, &mac_srs->srs_lock);
3759 if (softring == mac_srs->srs_soft_ring_head) {
3760 mac_srs->srs_soft_ring_head = softring->s_ring_next;
3761 if (mac_srs->srs_soft_ring_head != NULL) {
3762 mac_srs->srs_soft_ring_head->s_ring_prev = NULL;
3764 mac_srs->srs_soft_ring_tail = NULL;
3773 mac_srs->srs_soft_ring_tail =
3777 mac_srs->srs_soft_ring_count--;
3779 mac_srs->srs_soft_ring_condemned_count--;
3780 mutex_exit(&mac_srs->srs_lock);
3786 mac_tx_srs_del_ring(mac_soft_ring_set_t *mac_srs, mac_ring_t *tx_ring)
3790 mac_client_impl_t *mcip = mac_srs->srs_mcip;
3792 mutex_enter(&mac_srs->srs_lock);
3793 for (i = 0; i < mac_srs->srs_tx_ring_count; i++) {
3794 soft_ring = mac_srs->srs_tx_soft_rings[i];
3798 mutex_exit(&mac_srs->srs_lock);
3799 ASSERT(i < mac_srs->srs_tx_ring_count);
3807 mac_srs_tx_t *tx = &mac_srs->srs_tx;
3812 mac_soft_ring_remove(mac_srs, remove_sring);
3813 mac_srs_update_fanout_list(mac_srs);