Lines Matching full:pm

21 	u8 add_addr = READ_ONCE(msk->pm.addr_signal);  in mptcp_pm_announce_addr()
25 lockdep_assert_held(&msk->pm.lock); in mptcp_pm_announce_addr()
35 msk->pm.remote = *addr; in mptcp_pm_announce_addr()
38 msk->pm.local = *addr; in mptcp_pm_announce_addr()
41 WRITE_ONCE(msk->pm.addr_signal, add_addr); in mptcp_pm_announce_addr()
47 u8 rm_addr = READ_ONCE(msk->pm.addr_signal); in mptcp_pm_remove_addr()
57 msk->pm.rm_list_tx = *rm_list; in mptcp_pm_remove_addr()
59 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_remove_addr()
68 spin_lock_bh(&msk->pm.lock); in mptcp_pm_remove_subflow()
70 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_remove_subflow()
78 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_new_connection() local
82 WRITE_ONCE(pm->server_side, server_side); in mptcp_pm_new_connection()
88 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_allow_new_subflow() local
94 spin_lock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
95 pm->subflows++; in mptcp_pm_allow_new_subflow()
96 spin_unlock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
104 pr_debug("msk=%p subflows=%d max=%d allow=%d", msk, pm->subflows, in mptcp_pm_allow_new_subflow()
105 subflows_max, READ_ONCE(pm->accept_subflow)); in mptcp_pm_allow_new_subflow()
108 if (!READ_ONCE(pm->accept_subflow)) in mptcp_pm_allow_new_subflow()
111 spin_lock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
112 if (READ_ONCE(pm->accept_subflow)) { in mptcp_pm_allow_new_subflow()
113 ret = pm->subflows < subflows_max; in mptcp_pm_allow_new_subflow()
114 if (ret && ++pm->subflows == subflows_max) in mptcp_pm_allow_new_subflow()
115 WRITE_ONCE(pm->accept_subflow, false); in mptcp_pm_allow_new_subflow()
117 spin_unlock_bh(&pm->lock); in mptcp_pm_allow_new_subflow()
128 pr_debug("msk=%p status=%x new=%lx", msk, msk->pm.status, in mptcp_pm_schedule_work()
130 if (msk->pm.status & BIT(new_status)) in mptcp_pm_schedule_work()
133 msk->pm.status |= BIT(new_status); in mptcp_pm_schedule_work()
140 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_fully_established() local
145 spin_lock_bh(&pm->lock); in mptcp_pm_fully_established()
151 if (READ_ONCE(pm->work_pending) && in mptcp_pm_fully_established()
152 !(msk->pm.status & BIT(MPTCP_PM_ALREADY_ESTABLISHED))) in mptcp_pm_fully_established()
155 if ((msk->pm.status & BIT(MPTCP_PM_ALREADY_ESTABLISHED)) == 0) in mptcp_pm_fully_established()
158 msk->pm.status |= BIT(MPTCP_PM_ALREADY_ESTABLISHED); in mptcp_pm_fully_established()
159 spin_unlock_bh(&pm->lock); in mptcp_pm_fully_established()
172 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_subflow_established() local
176 if (!READ_ONCE(pm->work_pending)) in mptcp_pm_subflow_established()
179 spin_lock_bh(&pm->lock); in mptcp_pm_subflow_established()
181 if (READ_ONCE(pm->work_pending)) in mptcp_pm_subflow_established()
184 spin_unlock_bh(&pm->lock); in mptcp_pm_subflow_established()
190 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_subflow_check_next() local
196 spin_lock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
197 pm->subflows--; in mptcp_pm_subflow_check_next()
198 spin_unlock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
203 if (!READ_ONCE(pm->work_pending) && !update_subflows) in mptcp_pm_subflow_check_next()
206 spin_lock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
210 /* Even if this subflow is not really established, tell the PM to try in mptcp_pm_subflow_check_next()
216 spin_unlock_bh(&pm->lock); in mptcp_pm_subflow_check_next()
224 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_add_addr_received() local
227 READ_ONCE(pm->accept_addr)); in mptcp_pm_add_addr_received()
231 spin_lock_bh(&pm->lock); in mptcp_pm_add_addr_received()
240 } else if (!READ_ONCE(pm->accept_addr)) { in mptcp_pm_add_addr_received()
244 pm->remote = *addr; in mptcp_pm_add_addr_received()
249 spin_unlock_bh(&pm->lock); in mptcp_pm_add_addr_received()
255 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_add_addr_echoed() local
259 spin_lock_bh(&pm->lock); in mptcp_pm_add_addr_echoed()
261 if (mptcp_lookup_anno_list_by_saddr(msk, addr) && READ_ONCE(pm->work_pending)) in mptcp_pm_add_addr_echoed()
264 spin_unlock_bh(&pm->lock); in mptcp_pm_add_addr_echoed()
278 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_rm_addr_received() local
286 spin_lock_bh(&pm->lock); in mptcp_pm_rm_addr_received()
288 pm->rm_list_rx = *rm_list; in mptcp_pm_rm_addr_received()
291 spin_unlock_bh(&pm->lock); in mptcp_pm_rm_addr_received()
342 spin_lock_bh(&msk->pm.lock); in mptcp_pm_add_addr_signal()
358 port = !!(*echo ? msk->pm.remote.port : msk->pm.local.port); in mptcp_pm_add_addr_signal()
360 family = *echo ? msk->pm.remote.family : msk->pm.local.family; in mptcp_pm_add_addr_signal()
365 *addr = msk->pm.remote; in mptcp_pm_add_addr_signal()
366 add_addr = msk->pm.addr_signal & ~BIT(MPTCP_ADD_ADDR_ECHO); in mptcp_pm_add_addr_signal()
368 *addr = msk->pm.local; in mptcp_pm_add_addr_signal()
369 add_addr = msk->pm.addr_signal & ~BIT(MPTCP_ADD_ADDR_SIGNAL); in mptcp_pm_add_addr_signal()
371 WRITE_ONCE(msk->pm.addr_signal, add_addr); in mptcp_pm_add_addr_signal()
375 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_add_addr_signal()
385 spin_lock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_signal()
391 rm_addr = msk->pm.addr_signal & ~BIT(MPTCP_RM_ADDR_SIGNAL); in mptcp_pm_rm_addr_signal()
392 len = mptcp_rm_addr_len(&msk->pm.rm_list_tx); in mptcp_pm_rm_addr_signal()
394 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_rm_addr_signal()
400 *rm_list = msk->pm.rm_list_tx; in mptcp_pm_rm_addr_signal()
401 WRITE_ONCE(msk->pm.addr_signal, rm_addr); in mptcp_pm_rm_addr_signal()
405 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_rm_addr_signal()
500 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_data_reset() local
502 pm->add_addr_signaled = 0; in mptcp_pm_data_reset()
503 pm->add_addr_accepted = 0; in mptcp_pm_data_reset()
504 pm->local_addr_used = 0; in mptcp_pm_data_reset()
505 pm->subflows = 0; in mptcp_pm_data_reset()
506 pm->rm_list_tx.nr = 0; in mptcp_pm_data_reset()
507 pm->rm_list_rx.nr = 0; in mptcp_pm_data_reset()
508 WRITE_ONCE(pm->pm_type, pm_type); in mptcp_pm_data_reset()
513 /* pm->work_pending must be only be set to 'true' when in mptcp_pm_data_reset()
514 * pm->pm_type is set to MPTCP_PM_TYPE_KERNEL in mptcp_pm_data_reset()
516 WRITE_ONCE(pm->work_pending, in mptcp_pm_data_reset()
520 WRITE_ONCE(pm->accept_addr, in mptcp_pm_data_reset()
523 WRITE_ONCE(pm->accept_subflow, subflows_allowed); in mptcp_pm_data_reset()
525 WRITE_ONCE(pm->work_pending, 0); in mptcp_pm_data_reset()
526 WRITE_ONCE(pm->accept_addr, 0); in mptcp_pm_data_reset()
527 WRITE_ONCE(pm->accept_subflow, 0); in mptcp_pm_data_reset()
530 WRITE_ONCE(pm->addr_signal, 0); in mptcp_pm_data_reset()
531 WRITE_ONCE(pm->remote_deny_join_id0, false); in mptcp_pm_data_reset()
532 pm->status = 0; in mptcp_pm_data_reset()
533 bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); in mptcp_pm_data_reset()
538 spin_lock_init(&msk->pm.lock); in mptcp_pm_data_init()
539 INIT_LIST_HEAD(&msk->pm.anno_list); in mptcp_pm_data_init()
540 INIT_LIST_HEAD(&msk->pm.userspace_pm_local_addr_list); in mptcp_pm_data_init()