Lines Matching refs:mux
57 struct kcm_mux *mux = psock->mux; in kcm_abort_tx_psock() local
61 spin_lock_bh(&mux->lock); in kcm_abort_tx_psock()
64 spin_unlock_bh(&mux->lock); in kcm_abort_tx_psock()
85 spin_unlock_bh(&mux->lock); in kcm_abort_tx_psock()
92 static void kcm_update_rx_mux_stats(struct kcm_mux *mux, in kcm_update_rx_mux_stats() argument
95 STRP_STATS_ADD(mux->stats.rx_bytes, in kcm_update_rx_mux_stats()
98 mux->stats.rx_msgs += in kcm_update_rx_mux_stats()
104 static void kcm_update_tx_mux_stats(struct kcm_mux *mux, in kcm_update_tx_mux_stats() argument
107 KCM_STATS_ADD(mux->stats.tx_bytes, in kcm_update_tx_mux_stats()
109 mux->stats.tx_msgs += in kcm_update_tx_mux_stats()
123 struct kcm_mux *mux = kcm->mux; in kcm_rcv_ready() local
130 while (unlikely((skb = __skb_dequeue(&mux->rx_hold_queue)))) { in kcm_rcv_ready()
133 skb_queue_head(&mux->rx_hold_queue, skb); in kcm_rcv_ready()
139 while (!list_empty(&mux->psocks_ready)) { in kcm_rcv_ready()
140 psock = list_first_entry(&mux->psocks_ready, struct kcm_psock, in kcm_rcv_ready()
163 &kcm->mux->kcm_rx_waiters); in kcm_rcv_ready()
171 struct kcm_mux *mux = kcm->mux; in kcm_rfree() local
182 spin_lock_bh(&mux->rx_lock); in kcm_rfree()
184 spin_unlock_bh(&mux->rx_lock); in kcm_rfree()
218 static void requeue_rx_msgs(struct kcm_mux *mux, struct sk_buff_head *head) in requeue_rx_msgs() argument
228 if (list_empty(&mux->kcm_rx_waiters)) { in requeue_rx_msgs()
229 skb_queue_tail(&mux->rx_hold_queue, skb); in requeue_rx_msgs()
233 kcm = list_first_entry(&mux->kcm_rx_waiters, in requeue_rx_msgs()
253 struct kcm_mux *mux = psock->mux; in reserve_rx_kcm() local
261 spin_lock_bh(&mux->rx_lock); in reserve_rx_kcm()
264 spin_unlock_bh(&mux->rx_lock); in reserve_rx_kcm()
268 kcm_update_rx_mux_stats(mux, psock); in reserve_rx_kcm()
270 if (list_empty(&mux->kcm_rx_waiters)) { in reserve_rx_kcm()
274 &mux->psocks_ready); in reserve_rx_kcm()
275 spin_unlock_bh(&mux->rx_lock); in reserve_rx_kcm()
279 kcm = list_first_entry(&mux->kcm_rx_waiters, in reserve_rx_kcm()
287 spin_unlock_bh(&mux->rx_lock); in reserve_rx_kcm()
304 struct kcm_mux *mux = psock->mux; in unreserve_rx_kcm() local
309 spin_lock_bh(&mux->rx_lock); in unreserve_rx_kcm()
320 spin_unlock_bh(&mux->rx_lock); in unreserve_rx_kcm()
331 requeue_rx_msgs(mux, &kcm->sk.sk_receive_queue); in unreserve_rx_kcm()
338 spin_unlock_bh(&mux->rx_lock); in unreserve_rx_kcm()
411 struct kcm_mux *mux; in psock_write_space() local
419 mux = psock->mux; in psock_write_space()
421 spin_lock_bh(&mux->lock); in psock_write_space()
428 spin_unlock_bh(&mux->lock); in psock_write_space()
438 struct kcm_mux *mux = kcm->mux; in reserve_psock() local
453 spin_lock_bh(&mux->lock); in reserve_psock()
461 spin_unlock_bh(&mux->lock); in reserve_psock()
465 if (!list_empty(&mux->psocks_avail)) { in reserve_psock()
466 psock = list_first_entry(&mux->psocks_avail, in reserve_psock()
479 &mux->kcm_tx_waiters); in reserve_psock()
483 spin_unlock_bh(&mux->lock); in reserve_psock()
491 struct kcm_mux *mux = psock->mux; in psock_now_avail() local
494 if (list_empty(&mux->kcm_tx_waiters)) { in psock_now_avail()
496 &mux->psocks_avail); in psock_now_avail()
498 kcm = list_first_entry(&mux->kcm_tx_waiters, in psock_now_avail()
520 struct kcm_mux *mux = kcm->mux; in unreserve_psock() local
522 spin_lock_bh(&mux->lock); in unreserve_psock()
527 spin_unlock_bh(&mux->lock); in unreserve_psock()
533 kcm_update_tx_mux_stats(mux, psock); in unreserve_psock()
545 mux->psocks_cnt--; in unreserve_psock()
553 spin_unlock_bh(&mux->lock); in unreserve_psock()
560 spin_unlock_bh(&mux->lock); in unreserve_psock()
565 struct kcm_mux *mux = kcm->mux; in kcm_report_tx_retry() local
567 spin_lock_bh(&mux->lock); in kcm_report_tx_retry()
568 KCM_STATS_INCR(mux->stats.tx_retries); in kcm_report_tx_retry()
569 spin_unlock_bh(&mux->lock); in kcm_report_tx_retry()
1231 struct kcm_mux *mux = kcm->mux; in kcm_recv_disable() local
1236 spin_lock_bh(&mux->rx_lock); in kcm_recv_disable()
1247 requeue_rx_msgs(mux, &kcm->sk.sk_receive_queue); in kcm_recv_disable()
1250 spin_unlock_bh(&mux->rx_lock); in kcm_recv_disable()
1256 struct kcm_mux *mux = kcm->mux; in kcm_recv_enable() local
1261 spin_lock_bh(&mux->rx_lock); in kcm_recv_enable()
1266 spin_unlock_bh(&mux->rx_lock); in kcm_recv_enable()
1334 static void init_kcm_sock(struct kcm_sock *kcm, struct kcm_mux *mux) in init_kcm_sock() argument
1347 kcm->mux = mux; in init_kcm_sock()
1348 spin_lock_bh(&mux->lock); in init_kcm_sock()
1350 head = &mux->kcm_socks; in init_kcm_sock()
1351 list_for_each_entry(tkcm, &mux->kcm_socks, kcm_sock_list) { in init_kcm_sock()
1361 mux->kcm_socks_cnt++; in init_kcm_sock()
1362 spin_unlock_bh(&mux->lock); in init_kcm_sock()
1366 spin_lock_bh(&mux->rx_lock); in init_kcm_sock()
1368 spin_unlock_bh(&mux->rx_lock); in init_kcm_sock()
1375 struct kcm_mux *mux = kcm->mux; in kcm_attach() local
1412 psock->mux = mux; in kcm_attach()
1449 spin_lock_bh(&mux->lock); in kcm_attach()
1450 head = &mux->psocks; in kcm_attach()
1451 list_for_each_entry(tpsock, &mux->psocks, psock_list) { in kcm_attach()
1461 KCM_STATS_INCR(mux->stats.psock_attach); in kcm_attach()
1462 mux->psocks_cnt++; in kcm_attach()
1464 spin_unlock_bh(&mux->lock); in kcm_attach()
1508 struct kcm_mux *mux = psock->mux; in kcm_unattach() local
1528 spin_lock_bh(&mux->rx_lock); in kcm_unattach()
1537 KCM_STATS_INCR(mux->stats.rx_ready_drops); in kcm_unattach()
1540 spin_unlock_bh(&mux->rx_lock); in kcm_unattach()
1551 spin_lock_bh(&mux->lock); in kcm_unattach()
1553 aggregate_psock_stats(&psock->stats, &mux->aggregate_psock_stats); in kcm_unattach()
1554 save_strp_stats(&psock->strp, &mux->aggregate_strp_stats); in kcm_unattach()
1556 KCM_STATS_INCR(mux->stats.psock_unattach); in kcm_unattach()
1563 KCM_STATS_INCR(mux->stats.psock_unattach_rsvd); in kcm_unattach()
1564 spin_unlock_bh(&mux->lock); in kcm_unattach()
1572 spin_lock_bh(&mux->lock); in kcm_unattach()
1584 spin_unlock_bh(&mux->lock); in kcm_unattach()
1590 mux->psocks_cnt--; in kcm_unattach()
1591 spin_unlock_bh(&mux->lock); in kcm_unattach()
1604 struct kcm_mux *mux = kcm->mux; in kcm_unattach_ioctl() local
1622 spin_lock_bh(&mux->lock); in kcm_unattach_ioctl()
1624 list_for_each_entry(psock, &mux->psocks, psock_list) { in kcm_unattach_ioctl()
1637 spin_unlock_bh(&mux->lock); in kcm_unattach_ioctl()
1646 spin_unlock_bh(&mux->lock); in kcm_unattach_ioctl()
1681 init_kcm_sock(kcm_sk(newsk), kcm_sk(osock->sk)->mux); in kcm_clone()
1744 struct kcm_mux *mux = container_of(rcu, in free_mux() local
1747 kmem_cache_free(kcm_muxp, mux); in free_mux()
1750 static void release_mux(struct kcm_mux *mux) in release_mux() argument
1752 struct kcm_net *knet = mux->knet; in release_mux()
1757 &mux->psocks, psock_list) { in release_mux()
1762 if (WARN_ON(mux->psocks_cnt)) in release_mux()
1765 __skb_queue_purge(&mux->rx_hold_queue); in release_mux()
1768 aggregate_mux_stats(&mux->stats, &knet->aggregate_mux_stats); in release_mux()
1769 aggregate_psock_stats(&mux->aggregate_psock_stats, in release_mux()
1771 aggregate_strp_stats(&mux->aggregate_strp_stats, in release_mux()
1773 list_del_rcu(&mux->kcm_mux_list); in release_mux()
1777 call_rcu(&mux->rcu, free_mux); in release_mux()
1782 struct kcm_mux *mux = kcm->mux; in kcm_done() local
1786 spin_lock_bh(&mux->rx_lock); in kcm_done()
1792 spin_unlock_bh(&mux->rx_lock); in kcm_done()
1801 requeue_rx_msgs(mux, &sk->sk_receive_queue); in kcm_done()
1803 spin_unlock_bh(&mux->rx_lock); in kcm_done()
1809 spin_lock_bh(&mux->lock); in kcm_done()
1812 mux->kcm_socks_cnt--; in kcm_done()
1813 socks_cnt = mux->kcm_socks_cnt; in kcm_done()
1815 spin_unlock_bh(&mux->lock); in kcm_done()
1819 release_mux(mux); in kcm_done()
1834 struct kcm_mux *mux; in kcm_release() local
1841 mux = kcm->mux; in kcm_release()
1861 spin_lock_bh(&mux->lock); in kcm_release()
1869 spin_unlock_bh(&mux->lock); in kcm_release()
1947 struct kcm_mux *mux; in kcm_create() local
1968 mux = kmem_cache_zalloc(kcm_muxp, GFP_KERNEL); in kcm_create()
1969 if (!mux) { in kcm_create()
1974 spin_lock_init(&mux->lock); in kcm_create()
1975 spin_lock_init(&mux->rx_lock); in kcm_create()
1976 INIT_LIST_HEAD(&mux->kcm_socks); in kcm_create()
1977 INIT_LIST_HEAD(&mux->kcm_rx_waiters); in kcm_create()
1978 INIT_LIST_HEAD(&mux->kcm_tx_waiters); in kcm_create()
1980 INIT_LIST_HEAD(&mux->psocks); in kcm_create()
1981 INIT_LIST_HEAD(&mux->psocks_ready); in kcm_create()
1982 INIT_LIST_HEAD(&mux->psocks_avail); in kcm_create()
1984 mux->knet = knet; in kcm_create()
1988 list_add_rcu(&mux->kcm_mux_list, &knet->mux_list); in kcm_create()
1992 skb_queue_head_init(&mux->rx_hold_queue); in kcm_create()
1996 init_kcm_sock(kcm_sk(sk), mux); in kcm_create()