struct ccid3_hc_rx_sock *hcrx = ccid3_hc_rx_sk(sk);
        struct dccp_sock *dp = dccp_sk(sk);
        struct dccp_rx_hist_entry *packet;
-       ktime_t now, t_hist;
+       ktime_t now;
        suseconds_t delta;
 
        ccid3_pr_debug("%s(%p) - entry \n", dccp_role(sk), sk);
        hcrx->ccid3hcrx_bytes_recv           = 0;
 
        /* Elapsed time information [RFC 4340, 13.2] in units of 10 * usecs */
-       t_hist = timeval_to_ktime(packet->dccphrx_tstamp);
-       delta = ktime_us_delta(now, t_hist);
+       delta = ktime_us_delta(now, packet->dccphrx_tstamp);
        DCCP_BUG_ON(delta < 0);
        hcrx->ccid3hcrx_elapsed_time = delta / 10;
 
 
        while (dccp_delta_seqno(hcrx->ccid3hcrx_seqno_nonloss, seqno)
           > TFRC_RECV_NUM_LATE_LOSS) {
-               struct timeval tstamp =
-                       ktime_to_timeval(hcrx->ccid3hcrx_tstamp_last_feedback);
                loss = 1;
                dccp_li_update_li(sk,
                                  &hcrx->ccid3hcrx_li_hist,
                                  &hcrx->ccid3hcrx_hist,
-                                 &tstamp,
+                                 hcrx->ccid3hcrx_tstamp_last_feedback,
                                  hcrx->ccid3hcrx_s,
                                  hcrx->ccid3hcrx_bytes_recv,
                                  hcrx->ccid3hcrx_x_recv,
                return;
        }
 
-       packet = dccp_rx_hist_entry_new(ccid3_rx_hist, sk, opt_recv->dccpor_ndp,
+       packet = dccp_rx_hist_entry_new(ccid3_rx_hist, opt_recv->dccpor_ndp,
                                        skb, GFP_ATOMIC);
        if (unlikely(packet == NULL)) {
                DCCP_WARN("%s(%p), Not enough mem to add rx packet "
 
  * returns estimated loss interval in usecs */
 static u32 dccp_li_calc_first_li(struct sock *sk,
                                 struct list_head *hist_list,
-                                struct timeval *last_feedback,
+                                ktime_t last_feedback,
                                 u16 s, u32 bytes_recv,
                                 u32 previous_x_recv)
 {
        struct dccp_rx_hist_entry *entry, *next, *tail = NULL;
        u32 x_recv, p;
        suseconds_t rtt, delta;
-       struct timeval tstamp = { 0, 0 };
+       ktime_t tstamp = ktime_set(0, 0);
        int interval = 0;
        int win_count = 0;
        int step = 0;
                return ~0;
        }
 
-       delta = timeval_delta(&tstamp, &tail->dccphrx_tstamp);
+       delta = ktime_us_delta(tstamp, tail->dccphrx_tstamp);
        DCCP_BUG_ON(delta < 0);
 
        rtt = delta * 4 / interval;
                return ~0;
        }
 
-       dccp_timestamp(sk, &tstamp);
-       delta = timeval_delta(&tstamp, last_feedback);
+       delta = ktime_us_delta(ktime_get_real(), last_feedback);
        DCCP_BUG_ON(delta <= 0);
 
        x_recv = scaled_div32(bytes_recv, delta);
 void dccp_li_update_li(struct sock *sk,
                       struct list_head *li_hist_list,
                       struct list_head *hist_list,
-                      struct timeval *last_feedback, u16 s, u32 bytes_recv,
+                      ktime_t last_feedback, u16 s, u32 bytes_recv,
                       u32 previous_x_recv, u64 seq_loss, u8 win_loss)
 {
        struct dccp_li_hist_entry *head;
 
  *  any later version.
  */
 
+#include <linux/ktime.h>
 #include <linux/list.h>
-#include <linux/time.h>
 
 extern void dccp_li_hist_purge(struct list_head *list);
 
 extern void dccp_li_update_li(struct sock *sk,
                              struct list_head *li_hist_list,
                              struct list_head *hist_list,
-                             struct timeval *last_feedback, u16 s,
+                             ktime_t last_feedback, u16 s,
                              u32 bytes_recv, u32 previous_x_recv,
                              u64 seq_loss, u8 win_loss);
 #endif /* _DCCP_LI_HIST_ */
 
 #ifndef _DCCP_PKT_HIST_
 #define _DCCP_PKT_HIST_
 
+#include <linux/ktime.h>
 #include <linux/list.h>
 #include <linux/slab.h>
 #include <linux/time.h>
                         dccphrx_ccval:4,
                         dccphrx_type:4;
        u32              dccphrx_ndp; /* In fact it is from 8 to 24 bits */
-       struct timeval   dccphrx_tstamp;
+       ktime_t          dccphrx_tstamp;
 };
 
 struct dccp_rx_hist {
 
 static inline struct dccp_rx_hist_entry *
                        dccp_rx_hist_entry_new(struct dccp_rx_hist *hist,
-                                              const struct sock *sk,
                                               const u32 ndp,
                                               const struct sk_buff *skb,
                                               const gfp_t prio)
                entry->dccphrx_ccval = dh->dccph_ccval;
                entry->dccphrx_type  = dh->dccph_type;
                entry->dccphrx_ndp   = ndp;
-               dccp_timestamp(sk, &entry->dccphrx_tstamp);
+               entry->dccphrx_tstamp = ktime_get_real();
        }
 
        return entry;