Message ID | 20230119202317.2741092-1-neelx@redhat.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [v3] ice/ptp: fix the PTP worker retrying indefinitely if the link went down | expand |
On 1/19/2023 12:23 PM, Daniel Vacek wrote: > When the link goes down the ice_ptp_tx_tstamp() may loop re-trying to > process the packets till the 2 seconds timeout finally drops them. > In such a case it makes sense to just drop them right away. > > Signed-off-by: Daniel Vacek <neelx@redhat.com> This version looks fine to me, thanks for responding to feedback. Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> > --- > drivers/net/ethernet/intel/ice/ice_ptp.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c > index d63161d73eb16..3c39ae3ed2426 100644 > --- a/drivers/net/ethernet/intel/ice/ice_ptp.c > +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c > @@ -680,6 +680,7 @@ static bool ice_ptp_tx_tstamp(struct ice_ptp_tx *tx) > struct ice_pf *pf; > struct ice_hw *hw; > u64 tstamp_ready; > + bool link_up; > int err; > u8 idx; > > @@ -695,11 +696,14 @@ static bool ice_ptp_tx_tstamp(struct ice_ptp_tx *tx) > if (err) > return false; > > + /* Drop packets if the link went down */ > + link_up = ptp_port->link_up; > + > for_each_set_bit(idx, tx->in_use, tx->len) { > struct skb_shared_hwtstamps shhwtstamps = {}; > u8 phy_idx = idx + tx->offset; > u64 raw_tstamp = 0, tstamp; > - bool drop_ts = false; > + bool drop_ts = !link_up; > struct sk_buff *skb; > > /* Drop packets which have waited for more than 2 seconds */ > @@ -728,7 +732,7 @@ static bool ice_ptp_tx_tstamp(struct ice_ptp_tx *tx) > ice_trace(tx_tstamp_fw_req, tx->tstamps[idx].skb, idx); > > err = ice_read_phy_tstamp(hw, tx->block, phy_idx, &raw_tstamp); > - if (err) > + if (err && !drop_ts) > continue; > > ice_trace(tx_tstamp_fw_done, tx->tstamps[idx].skb, idx);
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of > Daniel Vacek > Sent: Friday, January 20, 2023 1:53 AM > To: Brandeburg, Jesse <jesse.brandeburg@intel.com>; Nguyen, Anthony L > <anthony.l.nguyen@intel.com>; David S. Miller <davem@davemloft.net>; > Eric Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; > Paolo Abeni <pabeni@redhat.com>; Richard Cochran > <richardcochran@gmail.com> > Cc: netdev@vger.kernel.org; intel-wired-lan@lists.osuosl.org; Daniel Vacek > <neelx@redhat.com>; linux-kernel@vger.kernel.org > Subject: [Intel-wired-lan] [PATCH v3] ice/ptp: fix the PTP worker retrying > indefinitely if the link went down > > When the link goes down the ice_ptp_tx_tstamp() may loop re-trying to > process the packets till the 2 seconds timeout finally drops them. > In such a case it makes sense to just drop them right away. > > Signed-off-by: Daniel Vacek <neelx@redhat.com> > --- > drivers/net/ethernet/intel/ice/ice_ptp.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > Tested-by: Gurucharan G <gurucharanx.g@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 d63161d73eb16..3c39ae3ed2426 100644 --- a/drivers/net/ethernet/intel/ice/ice_ptp.c +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c @@ -680,6 +680,7 @@ static bool ice_ptp_tx_tstamp(struct ice_ptp_tx *tx) struct ice_pf *pf; struct ice_hw *hw; u64 tstamp_ready; + bool link_up; int err; u8 idx; @@ -695,11 +696,14 @@ static bool ice_ptp_tx_tstamp(struct ice_ptp_tx *tx) if (err) return false; + /* Drop packets if the link went down */ + link_up = ptp_port->link_up; + for_each_set_bit(idx, tx->in_use, tx->len) { struct skb_shared_hwtstamps shhwtstamps = {}; u8 phy_idx = idx + tx->offset; u64 raw_tstamp = 0, tstamp; - bool drop_ts = false; + bool drop_ts = !link_up; struct sk_buff *skb; /* Drop packets which have waited for more than 2 seconds */ @@ -728,7 +732,7 @@ static bool ice_ptp_tx_tstamp(struct ice_ptp_tx *tx) ice_trace(tx_tstamp_fw_req, tx->tstamps[idx].skb, idx); err = ice_read_phy_tstamp(hw, tx->block, phy_idx, &raw_tstamp); - if (err) + if (err && !drop_ts) continue; ice_trace(tx_tstamp_fw_done, tx->tstamps[idx].skb, idx);
When the link goes down the ice_ptp_tx_tstamp() may loop re-trying to process the packets till the 2 seconds timeout finally drops them. In such a case it makes sense to just drop them right away. Signed-off-by: Daniel Vacek <neelx@redhat.com> --- drivers/net/ethernet/intel/ice/ice_ptp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)