TFRC_T_MBI);
 
        } else {
-               struct timeval now;
+               const ktime_t now = ktime_get_real();
 
-               dccp_timestamp(sk, &now);
-
-               if ((timeval_delta(&now, &hctx->ccid3hctx_t_ld) -
-                    (suseconds_t)hctx->ccid3hctx_rtt) >= 0) {
+               if ((ktime_us_delta(now, hctx->ccid3hctx_t_ld) -
+                    (s64)hctx->ccid3hctx_rtt) >= 0) {
 
                        hctx->ccid3hctx_x =
                                max(min(2 * hctx->ccid3hctx_x, min_rate),
                        ccid3_pr_debug("SYN RTT = %uus\n", dp->dccps_syn_rtt);
                        hctx->ccid3hctx_rtt  = dp->dccps_syn_rtt;
                        hctx->ccid3hctx_x    = rfc3390_initial_rate(sk);
-                       hctx->ccid3hctx_t_ld = ktime_to_timeval(now);
+                       hctx->ccid3hctx_t_ld = now;
                } else {
                        /* Sender does not have RTT sample: X = MSS/second */
                        hctx->ccid3hctx_x = dp->dccps_mss_cache;
                         */
                        hctx->ccid3hctx_rtt  = r_sample;
                        hctx->ccid3hctx_x    = rfc3390_initial_rate(sk);
-                       hctx->ccid3hctx_t_ld = now;
+                       hctx->ccid3hctx_t_ld = timeval_to_ktime(now);
 
                        ccid3_update_send_interval(hctx);
 
 
 
 #include <linux/ktime.h>
 #include <linux/list.h>
-#include <linux/time.h>
 #include <linux/types.h>
 #include <linux/tfrc.h>
 #include "../ccid.h"
        u8                              ccid3hctx_idle;
        ktime_t                         ccid3hctx_t_last_win_count;
        struct timer_list               ccid3hctx_no_feedback_timer;
-       struct timeval                  ccid3hctx_t_ld;
+       ktime_t                         ccid3hctx_t_ld;
        ktime_t                         ccid3hctx_t_nom;
        u32                             ccid3hctx_delta;
        struct list_head                ccid3hctx_hist;