diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2007-06-16 12:34:02 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-07-11 01:15:27 -0400 |
commit | 8132da4d412ad51c34bad11133a8f0941e2a1972 (patch) | |
tree | 9c8539609c1fce671d3b060cef98ad98e0c59fe6 /net/dccp | |
parent | 1e180f726a58089d15637b5495fecbad8c50c833 (diff) |
[CCID3]: Sending time: update to ktime_t
This updates the computation of t_nom and t_last_win_count to use the newer
gettimeofday interface.
Committer note: used ktime_to_timeval to set the 'now' variable to t_ld in
ccid3hctx_no_feedback_timer
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Diffstat (limited to 'net/dccp')
-rw-r--r-- | net/dccp/ccids/ccid3.c | 33 | ||||
-rw-r--r-- | net/dccp/ccids/ccid3.h | 5 |
2 files changed, 16 insertions, 22 deletions
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c index 407f10c742ae..94b3a1a29537 100644 --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c | |||
@@ -193,25 +193,20 @@ static inline void ccid3_hc_tx_update_s(struct ccid3_hc_tx_sock *hctx, int len) | |||
193 | * The algorithm is not applicable if RTT < 4 microseconds. | 193 | * The algorithm is not applicable if RTT < 4 microseconds. |
194 | */ | 194 | */ |
195 | static inline void ccid3_hc_tx_update_win_count(struct ccid3_hc_tx_sock *hctx, | 195 | static inline void ccid3_hc_tx_update_win_count(struct ccid3_hc_tx_sock *hctx, |
196 | struct timeval *now) | 196 | ktime_t now) |
197 | { | 197 | { |
198 | suseconds_t delta; | ||
199 | u32 quarter_rtts; | 198 | u32 quarter_rtts; |
200 | 199 | ||
201 | if (unlikely(hctx->ccid3hctx_rtt < 4)) /* avoid divide-by-zero */ | 200 | if (unlikely(hctx->ccid3hctx_rtt < 4)) /* avoid divide-by-zero */ |
202 | return; | 201 | return; |
203 | 202 | ||
204 | delta = timeval_delta(now, &hctx->ccid3hctx_t_last_win_count); | 203 | quarter_rtts = ktime_us_delta(now, hctx->ccid3hctx_t_last_win_count); |
205 | DCCP_BUG_ON(delta < 0); | 204 | quarter_rtts /= hctx->ccid3hctx_rtt / 4; |
206 | |||
207 | quarter_rtts = (u32)delta / (hctx->ccid3hctx_rtt / 4); | ||
208 | 205 | ||
209 | if (quarter_rtts > 0) { | 206 | if (quarter_rtts > 0) { |
210 | hctx->ccid3hctx_t_last_win_count = *now; | 207 | hctx->ccid3hctx_t_last_win_count = now; |
211 | hctx->ccid3hctx_last_win_count += min_t(u32, quarter_rtts, 5); | 208 | hctx->ccid3hctx_last_win_count += min_t(u32, quarter_rtts, 5); |
212 | hctx->ccid3hctx_last_win_count &= 0xF; /* mod 16 */ | 209 | hctx->ccid3hctx_last_win_count &= 0xF; /* mod 16 */ |
213 | |||
214 | ccid3_pr_debug("now at %#X\n", hctx->ccid3hctx_last_win_count); | ||
215 | } | 210 | } |
216 | } | 211 | } |
217 | 212 | ||
@@ -311,8 +306,8 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb) | |||
311 | { | 306 | { |
312 | struct dccp_sock *dp = dccp_sk(sk); | 307 | struct dccp_sock *dp = dccp_sk(sk); |
313 | struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); | 308 | struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); |
314 | struct timeval now; | 309 | ktime_t now = ktime_get_real(); |
315 | suseconds_t delay; | 310 | s64 delay; |
316 | 311 | ||
317 | BUG_ON(hctx == NULL); | 312 | BUG_ON(hctx == NULL); |
318 | 313 | ||
@@ -324,8 +319,6 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb) | |||
324 | if (unlikely(skb->len == 0)) | 319 | if (unlikely(skb->len == 0)) |
325 | return -EBADMSG; | 320 | return -EBADMSG; |
326 | 321 | ||
327 | dccp_timestamp(sk, &now); | ||
328 | |||
329 | switch (hctx->ccid3hctx_state) { | 322 | switch (hctx->ccid3hctx_state) { |
330 | case TFRC_SSTATE_NO_SENT: | 323 | case TFRC_SSTATE_NO_SENT: |
331 | sk_reset_timer(sk, &hctx->ccid3hctx_no_feedback_timer, | 324 | sk_reset_timer(sk, &hctx->ccid3hctx_no_feedback_timer, |
@@ -348,7 +341,7 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb) | |||
348 | ccid3_pr_debug("SYN RTT = %uus\n", dp->dccps_syn_rtt); | 341 | ccid3_pr_debug("SYN RTT = %uus\n", dp->dccps_syn_rtt); |
349 | hctx->ccid3hctx_rtt = dp->dccps_syn_rtt; | 342 | hctx->ccid3hctx_rtt = dp->dccps_syn_rtt; |
350 | hctx->ccid3hctx_x = rfc3390_initial_rate(sk); | 343 | hctx->ccid3hctx_x = rfc3390_initial_rate(sk); |
351 | hctx->ccid3hctx_t_ld = now; | 344 | hctx->ccid3hctx_t_ld = ktime_to_timeval(now); |
352 | } else { | 345 | } else { |
353 | /* Sender does not have RTT sample: X = MSS/second */ | 346 | /* Sender does not have RTT sample: X = MSS/second */ |
354 | hctx->ccid3hctx_x = dp->dccps_mss_cache; | 347 | hctx->ccid3hctx_x = dp->dccps_mss_cache; |
@@ -360,7 +353,7 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb) | |||
360 | break; | 353 | break; |
361 | case TFRC_SSTATE_NO_FBACK: | 354 | case TFRC_SSTATE_NO_FBACK: |
362 | case TFRC_SSTATE_FBACK: | 355 | case TFRC_SSTATE_FBACK: |
363 | delay = timeval_delta(&hctx->ccid3hctx_t_nom, &now); | 356 | delay = ktime_us_delta(hctx->ccid3hctx_t_nom, now); |
364 | ccid3_pr_debug("delay=%ld\n", (long)delay); | 357 | ccid3_pr_debug("delay=%ld\n", (long)delay); |
365 | /* | 358 | /* |
366 | * Scheduling of packet transmissions [RFC 3448, 4.6] | 359 | * Scheduling of packet transmissions [RFC 3448, 4.6] |
@@ -370,10 +363,10 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb) | |||
370 | * else | 363 | * else |
371 | * // send the packet in (t_nom - t_now) milliseconds. | 364 | * // send the packet in (t_nom - t_now) milliseconds. |
372 | */ | 365 | */ |
373 | if (delay - (suseconds_t)hctx->ccid3hctx_delta >= 0) | 366 | if (delay - (s64)hctx->ccid3hctx_delta >= 0) |
374 | return delay / 1000L; | 367 | return (u32)delay / 1000L; |
375 | 368 | ||
376 | ccid3_hc_tx_update_win_count(hctx, &now); | 369 | ccid3_hc_tx_update_win_count(hctx, now); |
377 | break; | 370 | break; |
378 | case TFRC_SSTATE_TERM: | 371 | case TFRC_SSTATE_TERM: |
379 | DCCP_BUG("%s(%p) - Illegal state TERM", dccp_role(sk), sk); | 372 | DCCP_BUG("%s(%p) - Illegal state TERM", dccp_role(sk), sk); |
@@ -386,8 +379,8 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb) | |||
386 | hctx->ccid3hctx_idle = 0; | 379 | hctx->ccid3hctx_idle = 0; |
387 | 380 | ||
388 | /* set the nominal send time for the next following packet */ | 381 | /* set the nominal send time for the next following packet */ |
389 | timeval_add_usecs(&hctx->ccid3hctx_t_nom, hctx->ccid3hctx_t_ipi); | 382 | hctx->ccid3hctx_t_nom = ktime_add_us(hctx->ccid3hctx_t_nom, |
390 | 383 | hctx->ccid3hctx_t_ipi); | |
391 | return 0; | 384 | return 0; |
392 | } | 385 | } |
393 | 386 | ||
diff --git a/net/dccp/ccids/ccid3.h b/net/dccp/ccids/ccid3.h index 8d31b389c19c..51d4b804e334 100644 --- a/net/dccp/ccids/ccid3.h +++ b/net/dccp/ccids/ccid3.h | |||
@@ -36,6 +36,7 @@ | |||
36 | #ifndef _DCCP_CCID3_H_ | 36 | #ifndef _DCCP_CCID3_H_ |
37 | #define _DCCP_CCID3_H_ | 37 | #define _DCCP_CCID3_H_ |
38 | 38 | ||
39 | #include <linux/ktime.h> | ||
39 | #include <linux/list.h> | 40 | #include <linux/list.h> |
40 | #include <linux/time.h> | 41 | #include <linux/time.h> |
41 | #include <linux/types.h> | 42 | #include <linux/types.h> |
@@ -108,10 +109,10 @@ struct ccid3_hc_tx_sock { | |||
108 | enum ccid3_hc_tx_states ccid3hctx_state:8; | 109 | enum ccid3_hc_tx_states ccid3hctx_state:8; |
109 | u8 ccid3hctx_last_win_count; | 110 | u8 ccid3hctx_last_win_count; |
110 | u8 ccid3hctx_idle; | 111 | u8 ccid3hctx_idle; |
111 | struct timeval ccid3hctx_t_last_win_count; | 112 | ktime_t ccid3hctx_t_last_win_count; |
112 | struct timer_list ccid3hctx_no_feedback_timer; | 113 | struct timer_list ccid3hctx_no_feedback_timer; |
113 | struct timeval ccid3hctx_t_ld; | 114 | struct timeval ccid3hctx_t_ld; |
114 | struct timeval ccid3hctx_t_nom; | 115 | ktime_t ccid3hctx_t_nom; |
115 | u32 ccid3hctx_delta; | 116 | u32 ccid3hctx_delta; |
116 | struct list_head ccid3hctx_hist; | 117 | struct list_head ccid3hctx_hist; |
117 | struct ccid3_options_received ccid3hctx_options_received; | 118 | struct ccid3_options_received ccid3hctx_options_received; |