mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-29 05:55:02 +08:00
intel-ethernet: software timestamp skbs as late as possible
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>
This commit is contained in:
parent
9fc145fcb5
commit
a9e510589d
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user