Message ID | 20231103234658.511859-2-jacob.e.keller@intel.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | ice: restore timestamp config after reset | expand |
On Fri, Nov 03, 2023 at 04:46:56PM -0700, Jacob Keller wrote: > 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>
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of Jacob Keller > Sent: Saturday, November 4, 2023 5:17 AM > To: Nguyen, Anthony L <anthony.l.nguyen@intel.com> > Cc: Keller, Jacob E <jacob.e.keller@intel.com>; netdev@vger.kernel.org; Intel Wired LAN <intel-wired-lan@lists.osuosl.org>; Brandeburg, Jesse <jesse.brandeburg@intel.com> > Subject: [Intel-wired-lan] [PATCH iwl-net 1/3] ice: remove ptp_tx ring parameter flag > > 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> > --- > drivers/net/ethernet/intel/ice/ice_ptp.c | 14 -------------- > drivers/net/ethernet/intel/ice/ice_txrx.c | 3 --- > drivers/net/ethernet/intel/ice/ice_txrx.h | 1 - > 3 files changed, 18 deletions(-) > Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c index 1eddcbe89b0c..affd90622a68 100644 --- a/drivers/net/ethernet/intel/ice/ice_ptp.c +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c @@ -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); diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c b/drivers/net/ethernet/intel/ice/ice_txrx.c index 52d0a126eb61..9e97ea863068 100644 --- a/drivers/net/ethernet/intel/ice/ice_txrx.c +++ b/drivers/net/ethernet/intel/ice/ice_txrx.c @@ -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; diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.h b/drivers/net/ethernet/intel/ice/ice_txrx.h index 166413fc33f4..daf7b9dbb143 100644 --- a/drivers/net/ethernet/intel/ice/ice_txrx.h +++ b/drivers/net/ethernet/intel/ice/ice_txrx.h @@ -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)