tp_vars 142 net/batman-adv/tp_meter.c static void batadv_tp_update_cwnd(struct batadv_tp_vars *tp_vars, u32 mss) tp_vars 144 net/batman-adv/tp_meter.c spin_lock_bh(&tp_vars->cwnd_lock); tp_vars 147 net/batman-adv/tp_meter.c if (tp_vars->cwnd <= tp_vars->ss_threshold) { tp_vars 148 net/batman-adv/tp_meter.c tp_vars->dec_cwnd = 0; tp_vars 149 net/batman-adv/tp_meter.c tp_vars->cwnd = batadv_tp_cwnd(tp_vars->cwnd, mss, mss); tp_vars 150 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->cwnd_lock); tp_vars 155 net/batman-adv/tp_meter.c tp_vars->dec_cwnd += max_t(u32, 1U << 3, tp_vars 156 net/batman-adv/tp_meter.c ((mss * mss) << 6) / (tp_vars->cwnd << 3)); tp_vars 157 net/batman-adv/tp_meter.c if (tp_vars->dec_cwnd < (mss << 3)) { tp_vars 158 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->cwnd_lock); tp_vars 162 net/batman-adv/tp_meter.c tp_vars->cwnd = batadv_tp_cwnd(tp_vars->cwnd, mss, mss); tp_vars 163 net/batman-adv/tp_meter.c tp_vars->dec_cwnd = 0; tp_vars 165 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->cwnd_lock); tp_vars 173 net/batman-adv/tp_meter.c static void batadv_tp_update_rto(struct batadv_tp_vars *tp_vars, tp_vars 184 net/batman-adv/tp_meter.c if (tp_vars->srtt != 0) { tp_vars 185 net/batman-adv/tp_meter.c m -= (tp_vars->srtt >> 3); /* m is now error in rtt est */ tp_vars 186 net/batman-adv/tp_meter.c tp_vars->srtt += m; /* rtt = 7/8 srtt + 1/8 new */ tp_vars 190 net/batman-adv/tp_meter.c m -= (tp_vars->rttvar >> 2); tp_vars 191 net/batman-adv/tp_meter.c tp_vars->rttvar += m; /* mdev ~= 3/4 rttvar + 1/4 new */ tp_vars 194 net/batman-adv/tp_meter.c tp_vars->srtt = m << 3; /* take the measured time to be srtt */ tp_vars 195 net/batman-adv/tp_meter.c tp_vars->rttvar = m << 1; /* new_rtt / 2 */ tp_vars 201 net/batman-adv/tp_meter.c tp_vars->rto = (tp_vars->srtt >> 3) + tp_vars->rttvar; tp_vars 264 net/batman-adv/tp_meter.c struct batadv_tp_vars *pos, *tp_vars = NULL; tp_vars 278 net/batman-adv/tp_meter.c tp_vars = pos; tp_vars 283 net/batman-adv/tp_meter.c return tp_vars; tp_vars 303 net/batman-adv/tp_meter.c struct batadv_tp_vars *pos, *tp_vars = NULL; tp_vars 320 net/batman-adv/tp_meter.c tp_vars = pos; tp_vars 325 net/batman-adv/tp_meter.c return tp_vars; tp_vars 335 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars; tp_vars 338 net/batman-adv/tp_meter.c tp_vars = container_of(ref, struct batadv_tp_vars, refcount); tp_vars 343 net/batman-adv/tp_meter.c spin_lock_bh(&tp_vars->unacked_lock); tp_vars 344 net/batman-adv/tp_meter.c list_for_each_entry_safe(un, safe, &tp_vars->unacked_list, list) { tp_vars 348 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->unacked_lock); tp_vars 350 net/batman-adv/tp_meter.c kfree_rcu(tp_vars, rcu); tp_vars 358 net/batman-adv/tp_meter.c static void batadv_tp_vars_put(struct batadv_tp_vars *tp_vars) tp_vars 360 net/batman-adv/tp_meter.c kref_put(&tp_vars->refcount, batadv_tp_vars_release); tp_vars 369 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars) tp_vars 371 net/batman-adv/tp_meter.c cancel_delayed_work(&tp_vars->finish_work); tp_vars 373 net/batman-adv/tp_meter.c spin_lock_bh(&tp_vars->bat_priv->tp_list_lock); tp_vars 374 net/batman-adv/tp_meter.c hlist_del_rcu(&tp_vars->list); tp_vars 375 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->bat_priv->tp_list_lock); tp_vars 378 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars); tp_vars 380 net/batman-adv/tp_meter.c atomic_dec(&tp_vars->bat_priv->tp_num); tp_vars 383 net/batman-adv/tp_meter.c del_timer_sync(&tp_vars->timer); tp_vars 389 net/batman-adv/tp_meter.c del_timer(&tp_vars->timer); tp_vars 390 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars); tp_vars 399 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars) tp_vars 405 net/batman-adv/tp_meter.c tp_vars->other_end, tp_vars->reason); tp_vars 409 net/batman-adv/tp_meter.c tp_vars->srtt >> 3, tp_vars->rttvar >> 2, tp_vars->rto); tp_vars 413 net/batman-adv/tp_meter.c tp_vars->cwnd, tp_vars->ss_threshold); tp_vars 415 net/batman-adv/tp_meter.c session_cookie = batadv_tp_session_cookie(tp_vars->session, tp_vars 416 net/batman-adv/tp_meter.c tp_vars->icmp_uid); tp_vars 418 net/batman-adv/tp_meter.c batadv_tp_batctl_notify(tp_vars->reason, tp_vars 419 net/batman-adv/tp_meter.c tp_vars->other_end, tp_vars 421 net/batman-adv/tp_meter.c tp_vars->start_time, tp_vars 422 net/batman-adv/tp_meter.c atomic64_read(&tp_vars->tot_sent), tp_vars 431 net/batman-adv/tp_meter.c static void batadv_tp_sender_shutdown(struct batadv_tp_vars *tp_vars, tp_vars 434 net/batman-adv/tp_meter.c if (!atomic_dec_and_test(&tp_vars->sending)) tp_vars 437 net/batman-adv/tp_meter.c tp_vars->reason = reason; tp_vars 447 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars; tp_vars 450 net/batman-adv/tp_meter.c tp_vars = container_of(delayed_work, struct batadv_tp_vars, tp_vars 453 net/batman-adv/tp_meter.c batadv_tp_sender_shutdown(tp_vars, BATADV_TP_REASON_COMPLETE); tp_vars 462 net/batman-adv/tp_meter.c static void batadv_tp_reset_sender_timer(struct batadv_tp_vars *tp_vars) tp_vars 467 net/batman-adv/tp_meter.c if (unlikely(atomic_read(&tp_vars->sending) == 0)) tp_vars 471 net/batman-adv/tp_meter.c mod_timer(&tp_vars->timer, jiffies + msecs_to_jiffies(tp_vars->rto)); tp_vars 484 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars = from_timer(tp_vars, t, timer); tp_vars 485 net/batman-adv/tp_meter.c struct batadv_priv *bat_priv = tp_vars->bat_priv; tp_vars 487 net/batman-adv/tp_meter.c if (atomic_read(&tp_vars->sending) == 0) tp_vars 491 net/batman-adv/tp_meter.c if (unlikely(tp_vars->rto >= BATADV_TP_MAX_RTO)) { tp_vars 492 net/batman-adv/tp_meter.c batadv_tp_sender_shutdown(tp_vars, tp_vars 500 net/batman-adv/tp_meter.c tp_vars->rto <<= 1; tp_vars 502 net/batman-adv/tp_meter.c spin_lock_bh(&tp_vars->cwnd_lock); tp_vars 504 net/batman-adv/tp_meter.c tp_vars->ss_threshold = tp_vars->cwnd >> 1; tp_vars 505 net/batman-adv/tp_meter.c if (tp_vars->ss_threshold < BATADV_TP_PLEN * 2) tp_vars 506 net/batman-adv/tp_meter.c tp_vars->ss_threshold = BATADV_TP_PLEN * 2; tp_vars 510 net/batman-adv/tp_meter.c tp_vars->other_end, tp_vars->cwnd, tp_vars->ss_threshold, tp_vars 511 net/batman-adv/tp_meter.c atomic_read(&tp_vars->last_acked)); tp_vars 513 net/batman-adv/tp_meter.c tp_vars->cwnd = BATADV_TP_PLEN * 3; tp_vars 515 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->cwnd_lock); tp_vars 518 net/batman-adv/tp_meter.c tp_vars->last_sent = atomic_read(&tp_vars->last_acked); tp_vars 519 net/batman-adv/tp_meter.c wake_up(&tp_vars->more_bytes); tp_vars 521 net/batman-adv/tp_meter.c batadv_tp_reset_sender_timer(tp_vars); tp_vars 530 net/batman-adv/tp_meter.c static void batadv_tp_fill_prerandom(struct batadv_tp_vars *tp_vars, tp_vars 538 net/batman-adv/tp_meter.c spin_lock_bh(&tp_vars->prerandom_lock); tp_vars 539 net/batman-adv/tp_meter.c local_offset = tp_vars->prerandom_offset; tp_vars 540 net/batman-adv/tp_meter.c tp_vars->prerandom_offset += nbytes; tp_vars 541 net/batman-adv/tp_meter.c tp_vars->prerandom_offset %= sizeof(batadv_tp_prerandom); tp_vars 542 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->prerandom_lock); tp_vars 573 net/batman-adv/tp_meter.c static int batadv_tp_send_msg(struct batadv_tp_vars *tp_vars, const u8 *src, tp_vars 607 net/batman-adv/tp_meter.c batadv_tp_fill_prerandom(tp_vars, data, data_len); tp_vars 629 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars; tp_vars 641 net/batman-adv/tp_meter.c tp_vars = batadv_tp_list_find_session(bat_priv, icmp->orig, tp_vars 643 net/batman-adv/tp_meter.c if (unlikely(!tp_vars)) tp_vars 646 net/batman-adv/tp_meter.c if (unlikely(atomic_read(&tp_vars->sending) == 0)) tp_vars 651 net/batman-adv/tp_meter.c (u32)atomic_read(&tp_vars->last_acked))) tp_vars 665 net/batman-adv/tp_meter.c batadv_tp_update_rto(tp_vars, rtt); tp_vars 668 net/batman-adv/tp_meter.c batadv_tp_reset_sender_timer(tp_vars); tp_vars 673 net/batman-adv/tp_meter.c if (atomic_read(&tp_vars->last_acked) == recv_ack) { tp_vars 674 net/batman-adv/tp_meter.c atomic_inc(&tp_vars->dup_acks); tp_vars 675 net/batman-adv/tp_meter.c if (atomic_read(&tp_vars->dup_acks) != 3) tp_vars 678 net/batman-adv/tp_meter.c if (recv_ack >= tp_vars->recover) tp_vars 682 net/batman-adv/tp_meter.c batadv_tp_send_msg(tp_vars, primary_if->net_dev->dev_addr, tp_vars 687 net/batman-adv/tp_meter.c spin_lock_bh(&tp_vars->cwnd_lock); tp_vars 690 net/batman-adv/tp_meter.c tp_vars->fast_recovery = true; tp_vars 694 net/batman-adv/tp_meter.c tp_vars->recover = tp_vars->last_sent; tp_vars 695 net/batman-adv/tp_meter.c tp_vars->ss_threshold = tp_vars->cwnd >> 1; tp_vars 698 net/batman-adv/tp_meter.c tp_vars->cwnd, tp_vars->ss_threshold, tp_vars 699 net/batman-adv/tp_meter.c tp_vars->last_sent, recv_ack); tp_vars 700 net/batman-adv/tp_meter.c tp_vars->cwnd = batadv_tp_cwnd(tp_vars->ss_threshold, 3 * mss, tp_vars 702 net/batman-adv/tp_meter.c tp_vars->dec_cwnd = 0; tp_vars 703 net/batman-adv/tp_meter.c tp_vars->last_sent = recv_ack; tp_vars 705 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->cwnd_lock); tp_vars 708 net/batman-adv/tp_meter.c atomic64_add(recv_ack - atomic_read(&tp_vars->last_acked), tp_vars 709 net/batman-adv/tp_meter.c &tp_vars->tot_sent); tp_vars 711 net/batman-adv/tp_meter.c atomic_set(&tp_vars->dup_acks, 0); tp_vars 713 net/batman-adv/tp_meter.c if (tp_vars->fast_recovery) { tp_vars 715 net/batman-adv/tp_meter.c if (batadv_seq_before(recv_ack, tp_vars->recover)) { tp_vars 721 net/batman-adv/tp_meter.c batadv_tp_send_msg(tp_vars, dev_addr, tp_vars 726 net/batman-adv/tp_meter.c tp_vars->cwnd = batadv_tp_cwnd(tp_vars->cwnd, tp_vars 729 net/batman-adv/tp_meter.c tp_vars->fast_recovery = false; tp_vars 734 net/batman-adv/tp_meter.c cwnd = batadv_tp_cwnd(tp_vars->ss_threshold, 0, tp_vars 736 net/batman-adv/tp_meter.c tp_vars->cwnd = cwnd; tp_vars 741 net/batman-adv/tp_meter.c if (recv_ack - atomic_read(&tp_vars->last_acked) >= mss) tp_vars 742 net/batman-adv/tp_meter.c batadv_tp_update_cwnd(tp_vars, mss); tp_vars 745 net/batman-adv/tp_meter.c atomic_set(&tp_vars->last_acked, recv_ack); tp_vars 748 net/batman-adv/tp_meter.c wake_up(&tp_vars->more_bytes); tp_vars 754 net/batman-adv/tp_meter.c if (likely(tp_vars)) tp_vars 755 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars); tp_vars 765 net/batman-adv/tp_meter.c static bool batadv_tp_avail(struct batadv_tp_vars *tp_vars, tp_vars 770 net/batman-adv/tp_meter.c win_limit = atomic_read(&tp_vars->last_acked) + tp_vars->cwnd; tp_vars 771 net/batman-adv/tp_meter.c win_left = win_limit - tp_vars->last_sent; tp_vars 787 net/batman-adv/tp_meter.c static int batadv_tp_wait_available(struct batadv_tp_vars *tp_vars, size_t plen) tp_vars 791 net/batman-adv/tp_meter.c ret = wait_event_interruptible_timeout(tp_vars->more_bytes, tp_vars 792 net/batman-adv/tp_meter.c batadv_tp_avail(tp_vars, plen), tp_vars 806 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars = arg; tp_vars 807 net/batman-adv/tp_meter.c struct batadv_priv *bat_priv = tp_vars->bat_priv; tp_vars 813 net/batman-adv/tp_meter.c if (unlikely(tp_vars->role != BATADV_TP_SENDER)) { tp_vars 815 net/batman-adv/tp_meter.c tp_vars->reason = err; tp_vars 819 net/batman-adv/tp_meter.c orig_node = batadv_orig_hash_find(bat_priv, tp_vars->other_end); tp_vars 822 net/batman-adv/tp_meter.c tp_vars->reason = err; tp_vars 829 net/batman-adv/tp_meter.c tp_vars->reason = err; tp_vars 842 net/batman-adv/tp_meter.c batadv_tp_reset_sender_timer(tp_vars); tp_vars 845 net/batman-adv/tp_meter.c queue_delayed_work(batadv_event_workqueue, &tp_vars->finish_work, tp_vars 846 net/batman-adv/tp_meter.c msecs_to_jiffies(tp_vars->test_length)); tp_vars 848 net/batman-adv/tp_meter.c while (atomic_read(&tp_vars->sending) != 0) { tp_vars 849 net/batman-adv/tp_meter.c if (unlikely(!batadv_tp_avail(tp_vars, payload_len))) { tp_vars 850 net/batman-adv/tp_meter.c batadv_tp_wait_available(tp_vars, payload_len); tp_vars 859 net/batman-adv/tp_meter.c err = batadv_tp_send_msg(tp_vars, primary_if->net_dev->dev_addr, tp_vars 860 net/batman-adv/tp_meter.c orig_node, tp_vars->last_sent, tp_vars 862 net/batman-adv/tp_meter.c tp_vars->session, tp_vars->icmp_uid, tp_vars 871 net/batman-adv/tp_meter.c if (atomic_dec_and_test(&tp_vars->sending)) tp_vars 872 net/batman-adv/tp_meter.c tp_vars->reason = err; tp_vars 878 net/batman-adv/tp_meter.c tp_vars->last_sent += payload_len; tp_vars 889 net/batman-adv/tp_meter.c batadv_tp_sender_end(bat_priv, tp_vars); tp_vars 890 net/batman-adv/tp_meter.c batadv_tp_sender_cleanup(bat_priv, tp_vars); tp_vars 892 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars); tp_vars 902 net/batman-adv/tp_meter.c static void batadv_tp_start_kthread(struct batadv_tp_vars *tp_vars) tp_vars 905 net/batman-adv/tp_meter.c struct batadv_priv *bat_priv = tp_vars->bat_priv; tp_vars 908 net/batman-adv/tp_meter.c kref_get(&tp_vars->refcount); tp_vars 909 net/batman-adv/tp_meter.c kthread = kthread_create(batadv_tp_send, tp_vars, "kbatadv_tp_meter"); tp_vars 911 net/batman-adv/tp_meter.c session_cookie = batadv_tp_session_cookie(tp_vars->session, tp_vars 912 net/batman-adv/tp_meter.c tp_vars->icmp_uid); tp_vars 915 net/batman-adv/tp_meter.c tp_vars->other_end, tp_vars 919 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars); tp_vars 922 net/batman-adv/tp_meter.c batadv_tp_sender_cleanup(bat_priv, tp_vars); tp_vars 939 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars; tp_vars 951 net/batman-adv/tp_meter.c tp_vars = batadv_tp_list_find(bat_priv, dst); tp_vars 952 net/batman-adv/tp_meter.c if (tp_vars) { tp_vars 954 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars); tp_vars 971 net/batman-adv/tp_meter.c tp_vars = kmalloc(sizeof(*tp_vars), GFP_ATOMIC); tp_vars 972 net/batman-adv/tp_meter.c if (!tp_vars) { tp_vars 983 net/batman-adv/tp_meter.c ether_addr_copy(tp_vars->other_end, dst); tp_vars 984 net/batman-adv/tp_meter.c kref_init(&tp_vars->refcount); tp_vars 985 net/batman-adv/tp_meter.c tp_vars->role = BATADV_TP_SENDER; tp_vars 986 net/batman-adv/tp_meter.c atomic_set(&tp_vars->sending, 1); tp_vars 987 net/batman-adv/tp_meter.c memcpy(tp_vars->session, session_id, sizeof(session_id)); tp_vars 988 net/batman-adv/tp_meter.c tp_vars->icmp_uid = icmp_uid; tp_vars 990 net/batman-adv/tp_meter.c tp_vars->last_sent = BATADV_TP_FIRST_SEQ; tp_vars 991 net/batman-adv/tp_meter.c atomic_set(&tp_vars->last_acked, BATADV_TP_FIRST_SEQ); tp_vars 992 net/batman-adv/tp_meter.c tp_vars->fast_recovery = false; tp_vars 993 net/batman-adv/tp_meter.c tp_vars->recover = BATADV_TP_FIRST_SEQ; tp_vars 999 net/batman-adv/tp_meter.c tp_vars->cwnd = BATADV_TP_PLEN * 3; tp_vars 1003 net/batman-adv/tp_meter.c tp_vars->ss_threshold = BATADV_TP_AWND; tp_vars 1008 net/batman-adv/tp_meter.c tp_vars->rto = 1000; tp_vars 1009 net/batman-adv/tp_meter.c tp_vars->srtt = 0; tp_vars 1010 net/batman-adv/tp_meter.c tp_vars->rttvar = 0; tp_vars 1012 net/batman-adv/tp_meter.c atomic64_set(&tp_vars->tot_sent, 0); tp_vars 1014 net/batman-adv/tp_meter.c kref_get(&tp_vars->refcount); tp_vars 1015 net/batman-adv/tp_meter.c timer_setup(&tp_vars->timer, batadv_tp_sender_timeout, 0); tp_vars 1017 net/batman-adv/tp_meter.c tp_vars->bat_priv = bat_priv; tp_vars 1018 net/batman-adv/tp_meter.c tp_vars->start_time = jiffies; tp_vars 1020 net/batman-adv/tp_meter.c init_waitqueue_head(&tp_vars->more_bytes); tp_vars 1022 net/batman-adv/tp_meter.c spin_lock_init(&tp_vars->unacked_lock); tp_vars 1023 net/batman-adv/tp_meter.c INIT_LIST_HEAD(&tp_vars->unacked_list); tp_vars 1025 net/batman-adv/tp_meter.c spin_lock_init(&tp_vars->cwnd_lock); tp_vars 1027 net/batman-adv/tp_meter.c tp_vars->prerandom_offset = 0; tp_vars 1028 net/batman-adv/tp_meter.c spin_lock_init(&tp_vars->prerandom_lock); tp_vars 1030 net/batman-adv/tp_meter.c kref_get(&tp_vars->refcount); tp_vars 1031 net/batman-adv/tp_meter.c hlist_add_head_rcu(&tp_vars->list, &bat_priv->tp_list); tp_vars 1034 net/batman-adv/tp_meter.c tp_vars->test_length = test_length; tp_vars 1035 net/batman-adv/tp_meter.c if (!tp_vars->test_length) tp_vars 1036 net/batman-adv/tp_meter.c tp_vars->test_length = BATADV_TP_DEF_TEST_LENGTH; tp_vars 1043 net/batman-adv/tp_meter.c INIT_DELAYED_WORK(&tp_vars->finish_work, batadv_tp_sender_finish); tp_vars 1048 net/batman-adv/tp_meter.c batadv_tp_start_kthread(tp_vars); tp_vars 1051 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars); tp_vars 1064 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars; tp_vars 1073 net/batman-adv/tp_meter.c tp_vars = batadv_tp_list_find(bat_priv, orig_node->orig); tp_vars 1074 net/batman-adv/tp_meter.c if (!tp_vars) { tp_vars 1080 net/batman-adv/tp_meter.c batadv_tp_sender_shutdown(tp_vars, return_value); tp_vars 1081 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars); tp_vars 1092 net/batman-adv/tp_meter.c static void batadv_tp_reset_receiver_timer(struct batadv_tp_vars *tp_vars) tp_vars 1094 net/batman-adv/tp_meter.c mod_timer(&tp_vars->timer, tp_vars 1105 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars = from_timer(tp_vars, t, timer); tp_vars 1109 net/batman-adv/tp_meter.c bat_priv = tp_vars->bat_priv; tp_vars 1112 net/batman-adv/tp_meter.c if (!batadv_has_timed_out(tp_vars->last_recv_time, tp_vars 1115 net/batman-adv/tp_meter.c batadv_tp_reset_receiver_timer(tp_vars); tp_vars 1121 net/batman-adv/tp_meter.c BATADV_TP_RECV_TIMEOUT, tp_vars->other_end); tp_vars 1123 net/batman-adv/tp_meter.c spin_lock_bh(&tp_vars->bat_priv->tp_list_lock); tp_vars 1124 net/batman-adv/tp_meter.c hlist_del_rcu(&tp_vars->list); tp_vars 1125 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->bat_priv->tp_list_lock); tp_vars 1128 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars); tp_vars 1132 net/batman-adv/tp_meter.c spin_lock_bh(&tp_vars->unacked_lock); tp_vars 1133 net/batman-adv/tp_meter.c list_for_each_entry_safe(un, safe, &tp_vars->unacked_list, list) { tp_vars 1137 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->unacked_lock); tp_vars 1140 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars); tp_vars 1226 net/batman-adv/tp_meter.c static bool batadv_tp_handle_out_of_order(struct batadv_tp_vars *tp_vars, tp_vars 1244 net/batman-adv/tp_meter.c spin_lock_bh(&tp_vars->unacked_lock); tp_vars 1246 net/batman-adv/tp_meter.c if (list_empty(&tp_vars->unacked_list)) { tp_vars 1247 net/batman-adv/tp_meter.c list_add(&new->list, &tp_vars->unacked_list); tp_vars 1258 net/batman-adv/tp_meter.c list_for_each_entry_reverse(un, &tp_vars->unacked_list, list) { tp_vars 1283 net/batman-adv/tp_meter.c list_add(&new->list, &tp_vars->unacked_list); tp_vars 1286 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->unacked_lock); tp_vars 1296 net/batman-adv/tp_meter.c static void batadv_tp_ack_unordered(struct batadv_tp_vars *tp_vars) tp_vars 1304 net/batman-adv/tp_meter.c spin_lock_bh(&tp_vars->unacked_lock); tp_vars 1305 net/batman-adv/tp_meter.c list_for_each_entry_safe(un, safe, &tp_vars->unacked_list, list) { tp_vars 1310 net/batman-adv/tp_meter.c if (batadv_seq_before(tp_vars->last_recv, un->seqno)) tp_vars 1313 net/batman-adv/tp_meter.c to_ack = un->seqno + un->len - tp_vars->last_recv; tp_vars 1315 net/batman-adv/tp_meter.c if (batadv_seq_before(tp_vars->last_recv, un->seqno + un->len)) tp_vars 1316 net/batman-adv/tp_meter.c tp_vars->last_recv += to_ack; tp_vars 1321 net/batman-adv/tp_meter.c spin_unlock_bh(&tp_vars->unacked_lock); tp_vars 1335 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars; tp_vars 1338 net/batman-adv/tp_meter.c tp_vars = batadv_tp_list_find_session(bat_priv, icmp->orig, tp_vars 1340 net/batman-adv/tp_meter.c if (tp_vars) tp_vars 1349 net/batman-adv/tp_meter.c tp_vars = kmalloc(sizeof(*tp_vars), GFP_ATOMIC); tp_vars 1350 net/batman-adv/tp_meter.c if (!tp_vars) tp_vars 1353 net/batman-adv/tp_meter.c ether_addr_copy(tp_vars->other_end, icmp->orig); tp_vars 1354 net/batman-adv/tp_meter.c tp_vars->role = BATADV_TP_RECEIVER; tp_vars 1355 net/batman-adv/tp_meter.c memcpy(tp_vars->session, icmp->session, sizeof(tp_vars->session)); tp_vars 1356 net/batman-adv/tp_meter.c tp_vars->last_recv = BATADV_TP_FIRST_SEQ; tp_vars 1357 net/batman-adv/tp_meter.c tp_vars->bat_priv = bat_priv; tp_vars 1358 net/batman-adv/tp_meter.c kref_init(&tp_vars->refcount); tp_vars 1360 net/batman-adv/tp_meter.c spin_lock_init(&tp_vars->unacked_lock); tp_vars 1361 net/batman-adv/tp_meter.c INIT_LIST_HEAD(&tp_vars->unacked_list); tp_vars 1363 net/batman-adv/tp_meter.c kref_get(&tp_vars->refcount); tp_vars 1364 net/batman-adv/tp_meter.c hlist_add_head_rcu(&tp_vars->list, &bat_priv->tp_list); tp_vars 1366 net/batman-adv/tp_meter.c kref_get(&tp_vars->refcount); tp_vars 1367 net/batman-adv/tp_meter.c timer_setup(&tp_vars->timer, batadv_tp_receiver_shutdown, 0); tp_vars 1369 net/batman-adv/tp_meter.c batadv_tp_reset_receiver_timer(tp_vars); tp_vars 1374 net/batman-adv/tp_meter.c return tp_vars; tp_vars 1388 net/batman-adv/tp_meter.c struct batadv_tp_vars *tp_vars; tp_vars 1399 net/batman-adv/tp_meter.c tp_vars = batadv_tp_init_recv(bat_priv, icmp); tp_vars 1400 net/batman-adv/tp_meter.c if (!tp_vars) { tp_vars 1406 net/batman-adv/tp_meter.c tp_vars = batadv_tp_list_find_session(bat_priv, icmp->orig, tp_vars 1408 net/batman-adv/tp_meter.c if (!tp_vars) { tp_vars 1416 net/batman-adv/tp_meter.c if (unlikely(tp_vars->role != BATADV_TP_RECEIVER)) { tp_vars 1419 net/batman-adv/tp_meter.c tp_vars->role); tp_vars 1423 net/batman-adv/tp_meter.c tp_vars->last_recv_time = jiffies; tp_vars 1428 net/batman-adv/tp_meter.c if (batadv_seq_before(seqno, tp_vars->last_recv)) tp_vars 1432 net/batman-adv/tp_meter.c if (ntohl(icmp->seqno) != tp_vars->last_recv) { tp_vars 1436 net/batman-adv/tp_meter.c if (!batadv_tp_handle_out_of_order(tp_vars, skb)) tp_vars 1445 net/batman-adv/tp_meter.c tp_vars->last_recv += packet_size; tp_vars 1448 net/batman-adv/tp_meter.c batadv_tp_ack_unordered(tp_vars); tp_vars 1455 net/batman-adv/tp_meter.c batadv_tp_send_ack(bat_priv, icmp->orig, tp_vars->last_recv, tp_vars 1458 net/batman-adv/tp_meter.c if (likely(tp_vars)) tp_vars 1459 net/batman-adv/tp_meter.c batadv_tp_vars_put(tp_vars);