tcp: switch tcp_internal_pacing() to tcp_wstamp_ns
Now TCP keeps track of tcp_wstamp_ns, recording the earliest departure time of next packet, we can remove duplicate code from tcp_internal_pacing() This removes one ktime_get_tai_ns() call, and a divide. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ab408b6dc7
commit
c092dd5f4a
|
@ -993,21 +993,12 @@ enum hrtimer_restart tcp_pace_kick(struct hrtimer *timer)
|
|||
return HRTIMER_NORESTART;
|
||||
}
|
||||
|
||||
static void tcp_internal_pacing(struct sock *sk, const struct sk_buff *skb)
|
||||
static void tcp_internal_pacing(struct sock *sk)
|
||||
{
|
||||
u64 len_ns;
|
||||
u32 rate;
|
||||
|
||||
if (!tcp_needs_internal_pacing(sk))
|
||||
return;
|
||||
rate = sk->sk_pacing_rate;
|
||||
if (!rate || rate == ~0U)
|
||||
return;
|
||||
|
||||
len_ns = (u64)skb->len * NSEC_PER_SEC;
|
||||
do_div(len_ns, rate);
|
||||
hrtimer_start(&tcp_sk(sk)->pacing_timer,
|
||||
ktime_add_ns(ktime_get_tai_ns(), len_ns),
|
||||
ns_to_ktime(tcp_sk(sk)->tcp_wstamp_ns),
|
||||
HRTIMER_MODE_ABS_PINNED_SOFT);
|
||||
sock_hold(sk);
|
||||
}
|
||||
|
@ -1026,7 +1017,8 @@ static void tcp_update_skb_after_send(struct sock *sk, struct sk_buff *skb)
|
|||
*/
|
||||
if (rate != ~0U && rate && tp->data_segs_out >= 10) {
|
||||
tp->tcp_wstamp_ns += div_u64((u64)skb->len * NSEC_PER_SEC, rate);
|
||||
/* TODO: update internal pacing here */
|
||||
|
||||
tcp_internal_pacing(sk);
|
||||
}
|
||||
}
|
||||
list_move_tail(&skb->tcp_tsorted_anchor, &tp->tsorted_sent_queue);
|
||||
|
@ -1167,7 +1159,6 @@ static int __tcp_transmit_skb(struct sock *sk, struct sk_buff *skb,
|
|||
tcp_event_data_sent(tp, sk);
|
||||
tp->data_segs_out += tcp_skb_pcount(skb);
|
||||
tp->bytes_sent += skb->len - tcp_header_size;
|
||||
tcp_internal_pacing(sk, skb);
|
||||
}
|
||||
|
||||
if (after(tcb->end_seq, tp->snd_nxt) || tcb->seq == tcb->end_seq)
|
||||
|
|
Loading…
Reference in New Issue