Lines Matching refs:pm
140 lockdep_assert_held(&msk->pm.lock); in mptcp_lookup_anno_list_by_saddr()
142 list_for_each_entry(entry, &msk->pm.anno_list, list) { in mptcp_lookup_anno_list_by_saddr()
171 spin_lock_bh(&msk->pm.lock); in mptcp_pm_sport_in_anno_list()
172 list_for_each_entry(entry, &msk->pm.anno_list, list) { in mptcp_pm_sport_in_anno_list()
180 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_sport_in_anno_list()
209 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_send_ack()
211 spin_lock_bh(&msk->pm.lock); in mptcp_pm_send_ack()
219 lockdep_assert_held(&msk->pm.lock); in mptcp_pm_addr_send_ack()
294 spin_lock_bh(&msk->pm.lock); in mptcp_pm_add_timer()
307 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_add_timer()
324 spin_lock_bh(&msk->pm.lock); in mptcp_pm_del_add_timer()
332 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_del_add_timer()
348 lockdep_assert_held(&msk->pm.lock); in mptcp_pm_alloc_anno_list()
365 list_add(&add_entry->list, &msk->pm.anno_list); in mptcp_pm_alloc_anno_list()
386 spin_lock_bh(&msk->pm.lock); in mptcp_pm_free_anno_list()
387 list_splice_init(&msk->pm.anno_list, &free_list); in mptcp_pm_free_anno_list()
388 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_free_anno_list()
402 u8 add_addr = READ_ONCE(msk->pm.addr_signal); in mptcp_pm_announce_addr()
406 lockdep_assert_held(&msk->pm.lock); in mptcp_pm_announce_addr()
416 msk->pm.remote = *addr; in mptcp_pm_announce_addr()
419 msk->pm.local = *addr; in mptcp_pm_announce_addr()
422 WRITE_ONCE(msk->pm.addr_signal, add_addr); in mptcp_pm_announce_addr()
428 u8 rm_addr = READ_ONCE(msk->pm.addr_signal); in mptcp_pm_remove_addr()
438 msk->pm.rm_list_tx = *rm_list; in mptcp_pm_remove_addr()
440 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_remove_addr()
449 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_new_connection() local
453 WRITE_ONCE(pm->server_side, server_side); in mptcp_pm_new_connection()
459 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_allow_new_subflow() local
465 spin_lock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
466 pm->subflows++; in mptcp_pm_allow_new_subflow()
467 spin_unlock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
475 pr_debug("msk=%p subflows=%d max=%d allow=%d\n", msk, pm->subflows, in mptcp_pm_allow_new_subflow()
476 subflows_max, READ_ONCE(pm->accept_subflow)); in mptcp_pm_allow_new_subflow()
479 if (!READ_ONCE(pm->accept_subflow)) in mptcp_pm_allow_new_subflow()
482 spin_lock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
483 if (READ_ONCE(pm->accept_subflow)) { in mptcp_pm_allow_new_subflow()
484 ret = pm->subflows < subflows_max; in mptcp_pm_allow_new_subflow()
485 if (ret && ++pm->subflows == subflows_max) in mptcp_pm_allow_new_subflow()
486 WRITE_ONCE(pm->accept_subflow, false); in mptcp_pm_allow_new_subflow()
488 spin_unlock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
499 pr_debug("msk=%p status=%x new=%lx\n", msk, msk->pm.status, in mptcp_pm_schedule_work()
501 if (msk->pm.status & BIT(new_status)) in mptcp_pm_schedule_work()
504 msk->pm.status |= BIT(new_status); in mptcp_pm_schedule_work()
511 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_fully_established() local
516 spin_lock_bh(&pm->lock); in mptcp_pm_fully_established()
522 if (READ_ONCE(pm->work_pending) && in mptcp_pm_fully_established()
523 !(pm->status & BIT(MPTCP_PM_ALREADY_ESTABLISHED))) in mptcp_pm_fully_established()
526 if ((pm->status & BIT(MPTCP_PM_ALREADY_ESTABLISHED)) == 0) in mptcp_pm_fully_established()
529 pm->status |= BIT(MPTCP_PM_ALREADY_ESTABLISHED); in mptcp_pm_fully_established()
530 spin_unlock_bh(&pm->lock); in mptcp_pm_fully_established()
546 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_subflow_established() local
550 if (!READ_ONCE(pm->work_pending)) in mptcp_pm_subflow_established()
553 spin_lock_bh(&pm->lock); in mptcp_pm_subflow_established()
555 if (READ_ONCE(pm->work_pending)) in mptcp_pm_subflow_established()
558 spin_unlock_bh(&pm->lock); in mptcp_pm_subflow_established()
564 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_subflow_check_next() local
570 spin_lock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
571 pm->subflows--; in mptcp_pm_subflow_check_next()
572 spin_unlock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
577 if (!READ_ONCE(pm->work_pending) && !update_subflows) in mptcp_pm_subflow_check_next()
580 spin_lock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
590 spin_unlock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
598 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_add_addr_received() local
601 READ_ONCE(pm->accept_addr)); in mptcp_pm_add_addr_received()
605 spin_lock_bh(&pm->lock); in mptcp_pm_add_addr_received()
616 (addr->id > 0 && !READ_ONCE(pm->accept_addr))) { in mptcp_pm_add_addr_received()
620 pm->remote = *addr; in mptcp_pm_add_addr_received()
625 spin_unlock_bh(&pm->lock); in mptcp_pm_add_addr_received()
631 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_add_addr_echoed() local
635 if (!READ_ONCE(pm->work_pending)) in mptcp_pm_add_addr_echoed()
638 spin_lock_bh(&pm->lock); in mptcp_pm_add_addr_echoed()
640 if (mptcp_lookup_anno_list_by_saddr(msk, addr) && READ_ONCE(pm->work_pending)) in mptcp_pm_add_addr_echoed()
643 spin_unlock_bh(&pm->lock); in mptcp_pm_add_addr_echoed()
697 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_or_subflow()
703 spin_lock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_or_subflow()
719 mptcp_pm_rm_addr_or_subflow(msk, &msk->pm.rm_list_rx, MPTCP_MIB_RMADDR); in mptcp_pm_rm_addr_recv()
731 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_rm_addr_received() local
739 spin_lock_bh(&pm->lock); in mptcp_pm_rm_addr_received()
741 pm->rm_list_rx = *rm_list; in mptcp_pm_rm_addr_received()
744 spin_unlock_bh(&pm->lock); in mptcp_pm_rm_addr_received()
799 spin_lock_bh(&msk->pm.lock); in mptcp_pm_add_addr_signal()
815 port = !!(*echo ? msk->pm.remote.port : msk->pm.local.port); in mptcp_pm_add_addr_signal()
817 family = *echo ? msk->pm.remote.family : msk->pm.local.family; in mptcp_pm_add_addr_signal()
822 *addr = msk->pm.remote; in mptcp_pm_add_addr_signal()
823 add_addr = msk->pm.addr_signal & ~BIT(MPTCP_ADD_ADDR_ECHO); in mptcp_pm_add_addr_signal()
825 *addr = msk->pm.local; in mptcp_pm_add_addr_signal()
826 add_addr = msk->pm.addr_signal & ~BIT(MPTCP_ADD_ADDR_SIGNAL); in mptcp_pm_add_addr_signal()
828 WRITE_ONCE(msk->pm.addr_signal, add_addr); in mptcp_pm_add_addr_signal()
832 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_add_addr_signal()
842 spin_lock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_signal()
848 rm_addr = msk->pm.addr_signal & ~BIT(MPTCP_RM_ADDR_SIGNAL); in mptcp_pm_rm_addr_signal()
849 len = mptcp_rm_addr_len(&msk->pm.rm_list_tx); in mptcp_pm_rm_addr_signal()
851 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_rm_addr_signal()
857 *rm_list = msk->pm.rm_list_tx; in mptcp_pm_rm_addr_signal()
858 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_rm_addr_signal()
862 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_signal()
960 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_worker() local
964 if (!(pm->status & MPTCP_PM_WORK_MASK)) in mptcp_pm_worker()
967 spin_lock_bh(&msk->pm.lock); in mptcp_pm_worker()
969 pr_debug("msk=%p status=%x\n", msk, pm->status); in mptcp_pm_worker()
970 if (pm->status & BIT(MPTCP_PM_ADD_ADDR_SEND_ACK)) { in mptcp_pm_worker()
971 pm->status &= ~BIT(MPTCP_PM_ADD_ADDR_SEND_ACK); in mptcp_pm_worker()
974 if (pm->status & BIT(MPTCP_PM_RM_ADDR_RECEIVED)) { in mptcp_pm_worker()
975 pm->status &= ~BIT(MPTCP_PM_RM_ADDR_RECEIVED); in mptcp_pm_worker()
980 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_worker()
994 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_data_reset() local
996 memset(&pm->reset, 0, sizeof(pm->reset)); in mptcp_pm_data_reset()
997 pm->rm_list_tx.nr = 0; in mptcp_pm_data_reset()
998 pm->rm_list_rx.nr = 0; in mptcp_pm_data_reset()
999 WRITE_ONCE(pm->pm_type, pm_type); in mptcp_pm_data_reset()
1007 WRITE_ONCE(pm->work_pending, in mptcp_pm_data_reset()
1011 WRITE_ONCE(pm->accept_addr, in mptcp_pm_data_reset()
1014 WRITE_ONCE(pm->accept_subflow, subflows_allowed); in mptcp_pm_data_reset()
1016 bitmap_fill(pm->id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); in mptcp_pm_data_reset()
1022 spin_lock_init(&msk->pm.lock); in mptcp_pm_data_init()
1023 INIT_LIST_HEAD(&msk->pm.anno_list); in mptcp_pm_data_init()
1024 INIT_LIST_HEAD(&msk->pm.userspace_pm_local_addr_list); in mptcp_pm_data_init()