Lines Matching full: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()
168 spin_lock_bh(&msk->pm.lock); in mptcp_pm_sport_in_anno_list()
169 list_for_each_entry(entry, &msk->pm.anno_list, list) { in mptcp_pm_sport_in_anno_list()
177 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_sport_in_anno_list()
206 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_send_ack()
208 spin_lock_bh(&msk->pm.lock); in mptcp_pm_send_ack()
216 lockdep_assert_held(&msk->pm.lock); in mptcp_pm_addr_send_ack()
290 spin_lock_bh(&msk->pm.lock); in mptcp_pm_add_timer()
303 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_add_timer()
320 spin_lock_bh(&msk->pm.lock); in mptcp_pm_del_add_timer()
328 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_del_add_timer()
344 lockdep_assert_held(&msk->pm.lock); in mptcp_pm_alloc_anno_list()
361 list_add(&add_entry->list, &msk->pm.anno_list); in mptcp_pm_alloc_anno_list()
382 spin_lock_bh(&msk->pm.lock); in mptcp_pm_free_anno_list()
383 list_splice_init(&msk->pm.anno_list, &free_list); in mptcp_pm_free_anno_list()
384 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_free_anno_list()
398 u8 add_addr = READ_ONCE(msk->pm.addr_signal); in mptcp_pm_announce_addr()
402 lockdep_assert_held(&msk->pm.lock); in mptcp_pm_announce_addr()
412 msk->pm.remote = *addr; in mptcp_pm_announce_addr()
415 msk->pm.local = *addr; in mptcp_pm_announce_addr()
418 WRITE_ONCE(msk->pm.addr_signal, add_addr); in mptcp_pm_announce_addr()
424 u8 rm_addr = READ_ONCE(msk->pm.addr_signal); in mptcp_pm_remove_addr()
434 msk->pm.rm_list_tx = *rm_list; in mptcp_pm_remove_addr()
436 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_remove_addr()
445 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_new_connection() local
449 WRITE_ONCE(pm->server_side, server_side); in mptcp_pm_new_connection()
455 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_allow_new_subflow() local
461 spin_lock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
462 pm->subflows++; in mptcp_pm_allow_new_subflow()
463 spin_unlock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
471 pr_debug("msk=%p subflows=%d max=%d allow=%d\n", msk, pm->subflows, in mptcp_pm_allow_new_subflow()
472 subflows_max, READ_ONCE(pm->accept_subflow)); in mptcp_pm_allow_new_subflow()
475 if (!READ_ONCE(pm->accept_subflow)) in mptcp_pm_allow_new_subflow()
478 spin_lock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
479 if (READ_ONCE(pm->accept_subflow)) { in mptcp_pm_allow_new_subflow()
480 ret = pm->subflows < subflows_max; in mptcp_pm_allow_new_subflow()
481 if (ret && ++pm->subflows == subflows_max) in mptcp_pm_allow_new_subflow()
482 WRITE_ONCE(pm->accept_subflow, false); in mptcp_pm_allow_new_subflow()
484 spin_unlock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
495 pr_debug("msk=%p status=%x new=%lx\n", msk, msk->pm.status, in mptcp_pm_schedule_work()
497 if (msk->pm.status & BIT(new_status)) in mptcp_pm_schedule_work()
500 msk->pm.status |= BIT(new_status); in mptcp_pm_schedule_work()
507 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_fully_established() local
512 spin_lock_bh(&pm->lock); in mptcp_pm_fully_established()
518 if (READ_ONCE(pm->work_pending) && in mptcp_pm_fully_established()
519 !(pm->status & BIT(MPTCP_PM_ALREADY_ESTABLISHED))) in mptcp_pm_fully_established()
522 if ((pm->status & BIT(MPTCP_PM_ALREADY_ESTABLISHED)) == 0) in mptcp_pm_fully_established()
525 pm->status |= BIT(MPTCP_PM_ALREADY_ESTABLISHED); in mptcp_pm_fully_established()
526 spin_unlock_bh(&pm->lock); in mptcp_pm_fully_established()
542 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_subflow_established() local
546 if (!READ_ONCE(pm->work_pending)) in mptcp_pm_subflow_established()
549 spin_lock_bh(&pm->lock); in mptcp_pm_subflow_established()
551 if (READ_ONCE(pm->work_pending)) in mptcp_pm_subflow_established()
554 spin_unlock_bh(&pm->lock); in mptcp_pm_subflow_established()
560 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_subflow_check_next() local
566 spin_lock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
567 pm->subflows--; in mptcp_pm_subflow_check_next()
568 spin_unlock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
573 if (!READ_ONCE(pm->work_pending) && !update_subflows) in mptcp_pm_subflow_check_next()
576 spin_lock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
580 /* Even if this subflow is not really established, tell the PM to try in mptcp_pm_subflow_check_next()
586 spin_unlock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
594 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_add_addr_received() local
597 READ_ONCE(pm->accept_addr)); in mptcp_pm_add_addr_received()
601 spin_lock_bh(&pm->lock); in mptcp_pm_add_addr_received()
612 (addr->id > 0 && !READ_ONCE(pm->accept_addr))) { in mptcp_pm_add_addr_received()
616 pm->remote = *addr; in mptcp_pm_add_addr_received()
621 spin_unlock_bh(&pm->lock); in mptcp_pm_add_addr_received()
627 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_add_addr_echoed() local
631 if (!READ_ONCE(pm->work_pending)) in mptcp_pm_add_addr_echoed()
634 spin_lock_bh(&pm->lock); in mptcp_pm_add_addr_echoed()
636 if (mptcp_lookup_anno_list_by_saddr(msk, addr) && READ_ONCE(pm->work_pending)) in mptcp_pm_add_addr_echoed()
639 spin_unlock_bh(&pm->lock); in mptcp_pm_add_addr_echoed()
693 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_or_subflow()
699 spin_lock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_or_subflow()
715 mptcp_pm_rm_addr_or_subflow(msk, &msk->pm.rm_list_rx, MPTCP_MIB_RMADDR); in mptcp_pm_rm_addr_recv()
727 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_rm_addr_received() local
735 spin_lock_bh(&pm->lock); in mptcp_pm_rm_addr_received()
737 pm->rm_list_rx = *rm_list; in mptcp_pm_rm_addr_received()
740 spin_unlock_bh(&pm->lock); in mptcp_pm_rm_addr_received()
789 spin_lock_bh(&msk->pm.lock); in mptcp_pm_add_addr_signal()
805 port = !!(*echo ? msk->pm.remote.port : msk->pm.local.port); in mptcp_pm_add_addr_signal()
807 family = *echo ? msk->pm.remote.family : msk->pm.local.family; in mptcp_pm_add_addr_signal()
812 *addr = msk->pm.remote; in mptcp_pm_add_addr_signal()
813 add_addr = msk->pm.addr_signal & ~BIT(MPTCP_ADD_ADDR_ECHO); in mptcp_pm_add_addr_signal()
815 *addr = msk->pm.local; in mptcp_pm_add_addr_signal()
816 add_addr = msk->pm.addr_signal & ~BIT(MPTCP_ADD_ADDR_SIGNAL); in mptcp_pm_add_addr_signal()
818 WRITE_ONCE(msk->pm.addr_signal, add_addr); in mptcp_pm_add_addr_signal()
822 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_add_addr_signal()
832 spin_lock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_signal()
838 rm_addr = msk->pm.addr_signal & ~BIT(MPTCP_RM_ADDR_SIGNAL); in mptcp_pm_rm_addr_signal()
839 len = mptcp_rm_addr_len(&msk->pm.rm_list_tx); in mptcp_pm_rm_addr_signal()
841 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_rm_addr_signal()
847 *rm_list = msk->pm.rm_list_tx; in mptcp_pm_rm_addr_signal()
848 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_rm_addr_signal()
852 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_signal()
950 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_worker() local
954 if (!(pm->status & MPTCP_PM_WORK_MASK)) in mptcp_pm_worker()
957 spin_lock_bh(&msk->pm.lock); in mptcp_pm_worker()
959 pr_debug("msk=%p status=%x\n", msk, pm->status); in mptcp_pm_worker()
960 if (pm->status & BIT(MPTCP_PM_ADD_ADDR_SEND_ACK)) { in mptcp_pm_worker()
961 pm->status &= ~BIT(MPTCP_PM_ADD_ADDR_SEND_ACK); in mptcp_pm_worker()
964 if (pm->status & BIT(MPTCP_PM_RM_ADDR_RECEIVED)) { in mptcp_pm_worker()
965 pm->status &= ~BIT(MPTCP_PM_RM_ADDR_RECEIVED); in mptcp_pm_worker()
970 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_worker()
984 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_data_reset() local
986 memset(&pm->reset, 0, sizeof(pm->reset)); in mptcp_pm_data_reset()
987 pm->rm_list_tx.nr = 0; in mptcp_pm_data_reset()
988 pm->rm_list_rx.nr = 0; in mptcp_pm_data_reset()
989 WRITE_ONCE(pm->pm_type, pm_type); in mptcp_pm_data_reset()
994 /* pm->work_pending must be only be set to 'true' when in mptcp_pm_data_reset()
995 * pm->pm_type is set to MPTCP_PM_TYPE_KERNEL in mptcp_pm_data_reset()
997 WRITE_ONCE(pm->work_pending, in mptcp_pm_data_reset()
1001 WRITE_ONCE(pm->accept_addr, in mptcp_pm_data_reset()
1004 WRITE_ONCE(pm->accept_subflow, subflows_allowed); in mptcp_pm_data_reset()
1006 bitmap_fill(pm->id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); in mptcp_pm_data_reset()
1012 spin_lock_init(&msk->pm.lock); in mptcp_pm_data_init()
1013 INIT_LIST_HEAD(&msk->pm.anno_list); in mptcp_pm_data_init()
1014 INIT_LIST_HEAD(&msk->pm.userspace_pm_local_addr_list); in mptcp_pm_data_init()