[CCID3]: Update TX RTT sampling to use ktime_t Using the new TX history interface (which looks up send time in ktime_t units), the CCID3 sender side is now upgraded to use the ktime_t interface for sampling RTT values. Signed-off-by: Gerrit Renker <gerrit@xxxxxxxxxxxxxx> --- net/dccp/ccids/ccid3.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c @@ -407,8 +407,7 @@ static void ccid3_hc_tx_packet_recv(stru { struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); struct ccid3_options_received *opt_recv; - struct dccp_tx_hist_entry *packet; - struct timeval now; + ktime_t t_send, now; unsigned long t_nfb; u32 pinv, r_sample; @@ -424,14 +423,12 @@ static void ccid3_hc_tx_packet_recv(stru switch (hctx->ccid3hctx_state) { case TFRC_SSTATE_NO_FBACK: case TFRC_SSTATE_FBACK: - /* get packet from history to look up t_recvdata */ - packet = dccp_tx_hist_find_entry(&hctx->ccid3hctx_hist, - DCCP_SKB_CB(skb)->dccpd_ack_seq); - if (unlikely(packet == NULL)) { - DCCP_WARN("%s(%p), seqno %llu(%s) doesn't exist " - "in history!\n", dccp_role(sk), sk, - (unsigned long long)DCCP_SKB_CB(skb)->dccpd_ack_seq, - dccp_packet_name(DCCP_SKB_CB(skb)->dccpd_type)); + /* estimate RTT from history if ACK number is valid */ + if (! tfrc_tx_hist_when(&t_send, &hctx->ccid3hctx_hist, + DCCP_SKB_CB(skb)->dccpd_ack_seq)) { + DCCP_WARN("%s(%p): %s with bogus ACK-%llu\n", dccp_role(sk), sk, + dccp_packet_name(DCCP_SKB_CB(skb)->dccpd_type), + (unsigned long long)DCCP_SKB_CB(skb)->dccpd_ack_seq); return; } @@ -446,12 +443,11 @@ static void ccid3_hc_tx_packet_recv(stru else /* can not exceed 100% */ hctx->ccid3hctx_p = 1000000 / pinv; - dccp_timestamp(sk, &now); - /* * Calculate new RTT sample and update moving average */ - r_sample = dccp_sample_rtt(sk, &now, &packet->dccphtx_tstamp); + now = ktime_get_real(); + r_sample = dccp_sample_rtt(sk, ktime_delta(now, t_send)); hctx->ccid3hctx_rtt = tfrc_ewma(hctx->ccid3hctx_rtt, r_sample, 9); if (hctx->ccid3hctx_state == TFRC_SSTATE_NO_FBACK) { @@ -493,9 +489,6 @@ static void ccid3_hc_tx_packet_recv(stru /* unschedule no feedback timer */ sk_stop_timer(sk, &hctx->ccid3hctx_no_feedback_timer); - /* remove all packets older than the one acked from history */ - dccp_tx_hist_purge_older(ccid3_tx_hist, - &hctx->ccid3hctx_hist, packet); /* * As we have calculated new ipi, delta, t_nom it is possible * that we now can send a packet, so wake up dccp_wait_for_ccid - To unsubscribe from this list: send the line "unsubscribe dccp" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html