net: ethernet: update drivers to make both SW and HW TX timestamps
authorMiroslav Lichvar <mlichvar@redhat.com>
Fri, 19 May 2017 15:52:41 +0000 (17:52 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sun, 21 May 2017 17:37:32 +0000 (13:37 -0400)
Some drivers were calling the skb_tx_timestamp() function only when
a hardware timestamp was not requested. Now that applications can use
the SOF_TIMESTAMPING_OPT_TX_SWHW option to request both software and
hardware timestamps, the drivers need to be modified to unconditionally
call skb_tx_timestamp().

CC: Richard Cochran <richardcochran@gmail.com>
CC: Willem de Bruijn <willemb@google.com>
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/amd/xgbe/xgbe-drv.c
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index 89b21d7c537b6e690d0643b90f01816123963afa..5a2ad9c5faab16a8206bde14a7fb28f079e0ec15 100644 (file)
@@ -1391,8 +1391,7 @@ static void xgbe_prep_tx_tstamp(struct xgbe_prv_data *pdata,
                spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
        }
 
-       if (!XGMAC_GET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES, PTP))
-               skb_tx_timestamp(skb);
+       skb_tx_timestamp(skb);
 }
 
 static void xgbe_prep_vlan(struct sk_buff *skb, struct xgbe_packet_data *packet)
index 0ff9295ed449b3f02c54e9287a8b666114fd2bcc..6ed3bc419b96e2452cb2413f1610c4ea48e6a0f3 100644 (file)
@@ -5868,10 +5868,10 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
                        adapter->tx_hwtstamp_skb = skb_get(skb);
                        adapter->tx_hwtstamp_start = jiffies;
                        schedule_work(&adapter->tx_hwtstamp_work);
-               } else {
-                       skb_tx_timestamp(skb);
                }
 
+               skb_tx_timestamp(skb);
+
                netdev_sent_queue(netdev, skb->len);
                e1000_tx_queue(tx_ring, tx_flags, count);
                /* Make sure there is space in the ring for the next send. */
index 1e594351a60f1db0e980491290ae09c47bb33a35..89831adb8eb75c51e00f7e919880601d8e57fa55 100644 (file)
@@ -1418,8 +1418,7 @@ static netdev_tx_t sxgbe_xmit(struct sk_buff *skb, struct net_device *dev)
                priv->hw->desc->tx_enable_tstamp(first_desc);
        }
 
-       if (!tqueue->hwts_tx_en)
-               skb_tx_timestamp(skb);
+       skb_tx_timestamp(skb);
 
        priv->hw->dma->enable_dma_transmission(priv->ioaddr, txq_index);
 
index cce862b81f3e2426db38af9561cfdf28b41fb218..27c12e732a8ac7ad066698ebbc21428ef93fc41e 100644 (file)
@@ -2880,8 +2880,7 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)
                priv->xstats.tx_set_ic_bit++;
        }
 
-       if (!priv->hwts_tx_en)
-               skb_tx_timestamp(skb);
+       skb_tx_timestamp(skb);
 
        if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
                     priv->hwts_tx_en)) {
@@ -3084,8 +3083,7 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
                priv->xstats.tx_set_ic_bit++;
        }
 
-       if (!priv->hwts_tx_en)
-               skb_tx_timestamp(skb);
+       skb_tx_timestamp(skb);
 
        /* Ready to fill the first descriptor and set the OWN bit w/o any
         * problems because all the descriptors are actually ready to be