diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 20 | 
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 2f3dab07990..d27eb4ed7a0 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -4593,7 +4593,6 @@ static inline int igb_maybe_stop_tx(struct igb_ring *tx_ring, const u16 size)  netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb,  				struct igb_ring *tx_ring)  { -	struct igb_adapter *adapter = netdev_priv(tx_ring->netdev);  	struct igb_tx_buffer *first;  	int tso;  	u32 tx_flags = 0; @@ -4628,15 +4627,18 @@ netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb,  	skb_tx_timestamp(skb); -	if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && -		     !(adapter->ptp_tx_skb))) { -		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; -		tx_flags |= IGB_TX_FLAGS_TSTAMP; +	if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) { +		struct igb_adapter *adapter = netdev_priv(tx_ring->netdev); -		adapter->ptp_tx_skb = skb_get(skb); -		adapter->ptp_tx_start = jiffies; -		if (adapter->hw.mac.type == e1000_82576) -			schedule_work(&adapter->ptp_tx_work); +		if (!(adapter->ptp_tx_skb)) { +			skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; +			tx_flags |= IGB_TX_FLAGS_TSTAMP; + +			adapter->ptp_tx_skb = skb_get(skb); +			adapter->ptp_tx_start = jiffies; +			if (adapter->hw.mac.type == e1000_82576) +				schedule_work(&adapter->ptp_tx_work); +		}  	}  	if (vlan_tx_tag_present(skb)) {  |