]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commitdiff
intel-ethernet: software timestamp skbs as late as possible
authorJacob Keller <jacob.e.keller@intel.com>
Fri, 5 Oct 2018 16:33:56 +0000 (09:33 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Wed, 7 Nov 2018 17:47:01 +0000 (09:47 -0800)
Many of the Intel Ethernet drivers call skb_tx_timestamp() earlier than
necessary. Move the calls to this function to the latest point possible,
just prior to notifying hardware of the new Tx packet when we bump the
tail register.

This affects i40e, iavf, igb, igc, and ixgbe.

The e100, e1000, e1000e, fm10k, and ice drivers already call the
skb_tx_timestamp() function just prior to indicating the Tx packet to
hardware, so they do not need to be changed.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_txrx.c
drivers/net/ethernet/intel/iavf/iavf_txrx.c
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igc/igc_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index aef3c89ee79c4e7384e0713c55b12090c1c36f60..1384a5a006a449351eee6c2f2dc4728af75e56a2 100644 (file)
@@ -3473,6 +3473,8 @@ static inline int i40e_tx_map(struct i40e_ring *tx_ring, struct sk_buff *skb,
        tx_desc->cmd_type_offset_bsz =
                        build_ctob(td_cmd, td_offset, size, td_tag);
 
+       skb_tx_timestamp(skb);
+
        /* Force memory writes to complete before letting h/w know there
         * are new descriptors to fetch.
         *
@@ -3652,8 +3654,6 @@ static netdev_tx_t i40e_xmit_frame_ring(struct sk_buff *skb,
        if (tsyn)
                tx_flags |= I40E_TX_FLAGS_TSYN;
 
-       skb_tx_timestamp(skb);
-
        /* always enable CRC insertion offload */
        td_cmd |= I40E_TX_DESC_CMD_ICRC;
 
index fb9bfad96daff5f57f079a24d47be0d55cb8f96c..3b1dc77ae368851052156cc57a2e6baf1d582be5 100644 (file)
@@ -2343,6 +2343,8 @@ static inline void iavf_tx_map(struct iavf_ring *tx_ring, struct sk_buff *skb,
        tx_desc->cmd_type_offset_bsz =
                        build_ctob(td_cmd, td_offset, size, td_tag);
 
+       skb_tx_timestamp(skb);
+
        /* Force memory writes to complete before letting h/w know there
         * are new descriptors to fetch.
         *
@@ -2461,8 +2463,6 @@ static netdev_tx_t iavf_xmit_frame_ring(struct sk_buff *skb,
        if (tso < 0)
                goto out_drop;
 
-       skb_tx_timestamp(skb);
-
        /* always enable CRC insertion offload */
        td_cmd |= IAVF_TX_DESC_CMD_ICRC;
 
index 5df88ad8ac819914377c0a0fa5513adc17857e96..4584ebc9e8fe68acabaeaaf05fac76a9c5c50917 100644 (file)
@@ -6019,6 +6019,8 @@ static int igb_tx_map(struct igb_ring *tx_ring,
        /* set the timestamp */
        first->time_stamp = jiffies;
 
+       skb_tx_timestamp(skb);
+
        /* Force memory writes to complete before letting h/w know there
         * are new descriptors to fetch.  (Only applicable for weak-ordered
         * memory model archs, such as IA-64).
@@ -6147,8 +6149,6 @@ netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb,
        else if (!tso)
                igb_tx_csum(tx_ring, first);
 
-       skb_tx_timestamp(skb);
-
        if (igb_tx_map(tx_ring, first, hdr_len))
                goto cleanup_tx_tstamp;
 
index 9d85707e8a81e48ba551dd51020864c2e7e314c8..615a5fcd5a000b915bfb31873d78ebad419cd88a 100644 (file)
@@ -865,6 +865,8 @@ static int igc_tx_map(struct igc_ring *tx_ring,
        /* set the timestamp */
        first->time_stamp = jiffies;
 
+       skb_tx_timestamp(skb);
+
        /* Force memory writes to complete before letting h/w know there
         * are new descriptors to fetch.  (Only applicable for weak-ordered
         * memory model archs, such as IA-64).
@@ -959,8 +961,6 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb,
        first->bytecount = skb->len;
        first->gso_segs = 1;
 
-       skb_tx_timestamp(skb);
-
        /* record initial flags and protocol */
        first->tx_flags = tx_flags;
        first->protocol = protocol;
index aeda1834e66aa5181966a5a91abf6caedfde030d..cfb83687c3d83d7d90ced6e72d51e7a199525760 100644 (file)
@@ -8269,6 +8269,8 @@ static int ixgbe_tx_map(struct ixgbe_ring *tx_ring,
        /* set the timestamp */
        first->time_stamp = jiffies;
 
+       skb_tx_timestamp(skb);
+
        /*
         * Force memory writes to complete before letting h/w know there
         * are new descriptors to fetch.  (Only applicable for weak-ordered
@@ -8646,8 +8648,6 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
                }
        }
 
-       skb_tx_timestamp(skb);
-
 #ifdef CONFIG_PCI_IOV
        /*
         * Use the l2switch_enable flag - would be false if the DMA