BUG_ON(!skb || !tcp_skb_pcount(skb));
        tp = tcp_sk(sk);
 
+       skb->skb_mstamp = tp->tcp_mstamp;
        if (clone_it) {
-               skb_mstamp_get(&skb->skb_mstamp);
                TCP_SKB_CB(skb)->tx.in_flight = TCP_SKB_CB(skb)->end_seq
                        - tp->snd_una;
                tcp_rate_skb_sent(sk, skb);
        const struct inet_connection_sock *icsk = inet_csk(sk);
        u32 age, send_win, cong_win, limit, in_flight;
        struct tcp_sock *tp = tcp_sk(sk);
-       struct skb_mstamp now;
        struct sk_buff *head;
        int win_divisor;
 
        }
 
        head = tcp_write_queue_head(sk);
-       skb_mstamp_get(&now);
-       age = skb_mstamp_us_delta(&now, &head->skb_mstamp);
+
+       age = skb_mstamp_us_delta(&tp->tcp_mstamp, &head->skb_mstamp);
        /* If next ACK is likely to come too late (half srtt), do not defer */
        if (age < (tp->srtt_us >> 4))
                goto send_now;
        }
 
        max_segs = tcp_tso_segs(sk, mss_now);
+       skb_mstamp_get(&tp->tcp_mstamp);
        while ((skb = tcp_send_head(sk))) {
                unsigned int limit;
 
 
                if (unlikely(tp->repair) && tp->repair_queue == TCP_SEND_QUEUE) {
                        /* "skb_mstamp" is used as a start point for the retransmit timer */
-                       skb_mstamp_get(&skb->skb_mstamp);
+                       skb->skb_mstamp = tp->tcp_mstamp;
                        goto repair; /* Skip network transmission */
                }
 
                     skb_headroom(skb) >= 0xFFFF)) {
                struct sk_buff *nskb;
 
-               skb_mstamp_get(&skb->skb_mstamp);
+               skb->skb_mstamp = tp->tcp_mstamp;
                nskb = __pskb_copy(skb, MAX_TCP_HEADER, GFP_ATOMIC);
                err = nskb ? tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC) :
                             -ENOBUFS;
        skb_reserve(skb, MAX_TCP_HEADER);
        tcp_init_nondata_skb(skb, tcp_acceptable_seq(sk),
                             TCPHDR_ACK | TCPHDR_RST);
-       skb_mstamp_get(&skb->skb_mstamp);
+       skb_mstamp_get(&tcp_sk(sk)->tcp_mstamp);
        /* Send it off. */
        if (tcp_transmit_skb(sk, skb, 0, priority))
                NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPABORTFAILED);
                return -ENOBUFS;
 
        tcp_init_nondata_skb(buff, tp->write_seq++, TCPHDR_SYN);
-       tp->retrans_stamp = tcp_time_stamp;
+       skb_mstamp_get(&tp->tcp_mstamp);
+       tp->retrans_stamp = tp->tcp_mstamp.stamp_jiffies;
        tcp_connect_queue_skb(sk, buff);
        tcp_ecn_send_syn(sk, buff);
 
        skb_set_tcp_pure_ack(buff);
 
        /* Send it off, this clears delayed acks for us. */
-       skb_mstamp_get(&buff->skb_mstamp);
        tcp_transmit_skb(sk, buff, 0, (__force gfp_t)0);
 }
 EXPORT_SYMBOL_GPL(tcp_send_ack);
         * send it.
         */
        tcp_init_nondata_skb(skb, tp->snd_una - !urgent, TCPHDR_ACK);
-       skb_mstamp_get(&skb->skb_mstamp);
        NET_INC_STATS(sock_net(sk), mib);
        return tcp_transmit_skb(sk, skb, 0, (__force gfp_t)0);
 }
 
+/* Called from setsockopt( ... TCP_REPAIR ) */
 void tcp_send_window_probe(struct sock *sk)
 {
        if (sk->sk_state == TCP_ESTABLISHED) {
                tcp_sk(sk)->snd_wl1 = tcp_sk(sk)->rcv_nxt - 1;
+               skb_mstamp_get(&tcp_sk(sk)->tcp_mstamp);
                tcp_xmit_probe_skb(sk, 0, LINUX_MIB_TCPWINPROBE);
        }
 }