ice: remove ptp_tx ring parameter flag
authorJacob Keller <jacob.e.keller@intel.com>
Tue, 21 Nov 2023 21:12:55 +0000 (13:12 -0800)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 23 Nov 2023 14:27:32 +0000 (15:27 +0100)
Before performing a Tx timestamp in ice_stamp(), the driver checks a ptp_tx
ring variable to see if timestamping is enabled on that ring. This value is
set for all rings whenever userspace configures Tx timestamping.

Ostensibly this was done to avoid wasting cycles checking other fields when
timestamping has not been enabled. However, for Tx timestamps we already
get an individual per-SKB flag indicating whether userspace wants to
request a timestamp on that packet. We do not gain much by also having
a separate flag to check for whether timestamping was enabled.

In fact, the driver currently fails to restore the field after a PF reset.
Because of this, if a PF reset occurs, timestamps will be disabled.

Since this flag doesn't add value in the hotpath, remove it and always
provide a timestamp if the SKB flag has been set.

A following change will fix the reset path to properly restore user
timestamping configuration completely.

This went unnoticed for some time because one of the most common
applications using Tx timestamps, ptp4l, will reconfigure the socket as
part of its fault recovery logic.

Fixes: ea9b847cda64 ("ice: enable transmit timestamps for E810 devices")
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/intel/ice/ice_ptp.c
drivers/net/ethernet/intel/ice/ice_txrx.c
drivers/net/ethernet/intel/ice/ice_txrx.h

index 1eddcbe89b0c47c18aaaa288839149f4443a94f7..affd90622a68476caf3df43116c876c9b1be7e05 100644 (file)
@@ -280,20 +280,6 @@ static void ice_ptp_configure_tx_tstamp(struct ice_pf *pf, bool on)
  */
 static void ice_set_tx_tstamp(struct ice_pf *pf, bool on)
 {
-       struct ice_vsi *vsi;
-       u16 i;
-
-       vsi = ice_get_main_vsi(pf);
-       if (!vsi)
-               return;
-
-       /* Set the timestamp enable flag for all the Tx rings */
-       ice_for_each_txq(vsi, i) {
-               if (!vsi->tx_rings[i])
-                       continue;
-               vsi->tx_rings[i]->ptp_tx = on;
-       }
-
        if (pf->ptp.tx_interrupt_mode == ICE_PTP_TX_INTERRUPT_SELF)
                ice_ptp_configure_tx_tstamp(pf, on);
 
index 52d0a126eb6161852bb96457b9025a35e5641578..9e97ea8630686720bca3903cc3f6ae86c6807316 100644 (file)
@@ -2306,9 +2306,6 @@ ice_tstamp(struct ice_tx_ring *tx_ring, struct sk_buff *skb,
        if (likely(!(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)))
                return;
 
-       if (!tx_ring->ptp_tx)
-               return;
-
        /* Tx timestamps cannot be sampled when doing TSO */
        if (first->tx_flags & ICE_TX_FLAGS_TSO)
                return;
index 166413fc33f48f71a459009819a75d000601b03f..daf7b9dbb1435ad45a6c5efd0acfc84563434e02 100644 (file)
@@ -380,7 +380,6 @@ struct ice_tx_ring {
 #define ICE_TX_FLAGS_RING_VLAN_L2TAG2  BIT(2)
        u8 flags;
        u8 dcb_tc;                      /* Traffic class of ring */
-       u8 ptp_tx;
 } ____cacheline_internodealigned_in_smp;
 
 static inline bool ice_ring_uses_build_skb(struct ice_rx_ring *ring)