static inline u32 tcp_skb_timestamp(const struct sk_buff *skb)
 {
-       return div_u64(skb->skb_mstamp, USEC_PER_SEC / TCP_TS_HZ);
+       return div_u64(skb->skb_mstamp_ns, NSEC_PER_SEC / TCP_TS_HZ);
 }
 
 /* provide the departure time in us unit */
 static inline u64 tcp_skb_timestamp_us(const struct sk_buff *skb)
 {
-       return skb->skb_mstamp;
+       return div_u64(skb->skb_mstamp_ns, NSEC_PER_USEC);
 }
 
 
 #define TCPCB_SACKED_RETRANS   0x02    /* SKB retransmitted            */
 #define TCPCB_LOST             0x04    /* SKB is lost                  */
 #define TCPCB_TAGBITS          0x07    /* All tag bits                 */
-#define TCPCB_REPAIRED         0x10    /* SKB repaired (no skb_mstamp) */
+#define TCPCB_REPAIRED         0x10    /* SKB repaired (no skb_mstamp_ns)      */
 #define TCPCB_EVER_RETRANS     0x80    /* Ever retransmitted frame     */
 #define TCPCB_RETRANS          (TCPCB_SACKED_RETRANS|TCPCB_EVER_RETRANS| \
                                TCPCB_REPAIRED)
 
 
 static void tcp_update_skb_after_send(struct tcp_sock *tp, struct sk_buff *skb)
 {
-       skb->skb_mstamp = tp->tcp_mstamp;
+       skb->skb_mstamp_ns = tp->tcp_wstamp_ns;
        list_move_tail(&skb->tcp_tsorted_anchor, &tp->tsorted_sent_queue);
 }
 
                if (unlikely(!skb))
                        return -ENOBUFS;
        }
-       skb->skb_mstamp = tp->tcp_mstamp;
+       skb->skb_mstamp_ns = tp->tcp_wstamp_ns;
 
        inet = inet_sk(sk);
        tcb = TCP_SKB_CB(skb);
        skb_shinfo(skb)->gso_segs = tcp_skb_pcount(skb);
        skb_shinfo(skb)->gso_size = tcp_skb_mss(skb);
 
-       /* Our usage of tstamp should remain private */
-       skb->tstamp = 0;
+       /* Leave earliest departure time in skb->tstamp (skb->skb_mstamp_ns) */
 
        /* Cleanup our debris for IP stacks */
        memset(skb->cb, 0, max(sizeof(struct inet_skb_parm),
        memset(&opts, 0, sizeof(opts));
 #ifdef CONFIG_SYN_COOKIES
        if (unlikely(req->cookie_ts))
-               skb->skb_mstamp = cookie_init_timestamp(req);
+               skb->skb_mstamp_ns = cookie_init_timestamp(req);
        else
 #endif
-               skb->skb_mstamp = tcp_clock_us();
+               skb->skb_mstamp_ns = tcp_clock_ns();
 
 #ifdef CONFIG_TCP_MD5SIG
        rcu_read_lock();
 
        err = tcp_transmit_skb(sk, syn_data, 1, sk->sk_allocation);
 
-       syn->skb_mstamp = syn_data->skb_mstamp;
+       syn->skb_mstamp_ns = syn_data->skb_mstamp_ns;
 
        /* Now full SYN+DATA was cloned and sent (or not),
         * remove the SYN from the original skb (syn_data)
 
         */
        start_ts = tcp_skb_timestamp(skb);
        if (!start_ts)
-               skb->skb_mstamp = tp->tcp_mstamp;
+               skb->skb_mstamp_ns = tp->tcp_wstamp_ns;
        else if (icsk->icsk_user_timeout &&
                 (s32)(tcp_time_stamp(tp) - start_ts) > icsk->icsk_user_timeout)
                goto abort;