Intel-Wired-Lan Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Jesse Brandeburg <jesse.brandeburg@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH intel-next] ice: Don't put stale timestamps in the skb
Date: Fri, 12 Nov 2021 17:09:05 -0800	[thread overview]
Message-ID: <b320f02c-a973-e478-e74e-0329b5db699b@intel.com> (raw)
In-Reply-To: <20211112135359.155502-1-karol.kolacinski@intel.com>

On 11/12/2021 5:53 AM, Karol Kolacinski wrote:
> The driver has to check if it does not accidentally put the timestamp in
> the SKB before previous timestamp gets overwritten.
> Timestamp values in the PHY are read only and do not get cleared except
> at hardware reset or when a new timestamp value is captured.
> The cached_tstamp field is used to detect the case where a new timestamp
> has not yet been captured, ensuring that we avoid sending stale
> timestamp data to the stack.

Missing sign off, please run checkpatch --strict and build tests on your 
patches before sending to the list.

> ---
>   drivers/net/ethernet/intel/ice/ice_ptp.c | 11 ++++-------
>   drivers/net/ethernet/intel/ice/ice_ptp.h |  6 ++++++
>   2 files changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
> index 2b3b2060b504..9a1a09661c78 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
> @@ -2069,19 +2069,16 @@ static void ice_ptp_tx_tstamp_work(struct kthread_work *work)
>   		if (err)
>   			continue;
>   
> -		/* Check if the timestamp is valid */
> -		if (!(raw_tstamp & ICE_PTP_TS_VALID))
> +		/* Check if the timestamp is invalid or stale */
> +		if (!(raw_tstamp & ICE_PTP_TS_VALID) ||
> +		    raw_tstamp == tx->tstamps[idx].cached_tstamp)
>   			continue;
>   
> -		/* clear the timestamp register, so that it won't show valid
> -		 * again when re-used.
> -		 */
> -		ice_clear_phy_tstamp(hw, tx->quad, phy_idx);
> -
>   		/* The timestamp is valid, so we'll go ahead and clear this
>   		 * index and then send the timestamp up to the stack.
>   		 */
>   		spin_lock(&tx->lock);
> +		tx->tstamps[idx].cached_tstamp = raw_tstamp;
>   		clear_bit(idx, tx->in_use);
>   		skb = tx->tstamps[idx].skb;
>   		tx->tstamps[idx].skb = NULL;
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.h b/drivers/net/ethernet/intel/ice/ice_ptp.h
> index 92b202ef3c15..eef8ec894871 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp.h
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.h
> @@ -55,15 +55,21 @@ struct ice_perout_channel {
>    * struct ice_tx_tstamp - Tracking for a single Tx timestamp
>    * @skb: pointer to the SKB for this timestamp request
>    * @start: jiffies when the timestamp was first requested
> + * @cached_tstamp: last read timestamp
>    *
>    * This structure tracks a single timestamp request. The SKB pointer is
>    * provided when initiating a request. The start time is used to ensure that
>    * we discard old requests that were not fulfilled within a 2 second time
>    * window.
> + * Timestamp values in the PHY are read only and do not get cleared except at
> + * hardware reset or when a new timestamp value is captured. The cached_tstamp
> + * field is used to detect the case where a new timestamp has not yet been
> + * captured, ensuring that we avoid sending stale timestamp data to the stack.
>    */
>   struct ice_tx_tstamp {
>   	struct sk_buff *skb;
>   	unsigned long start;
> +	u64 cached_tstamp;
>   };
>   
>   /**
> 


  reply	other threads:[~2021-11-13  1:09 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-12 13:53 [Intel-wired-lan] [PATCH intel-next] ice: Don't put stale timestamps in the skb Karol Kolacinski
2021-11-13  1:09 ` Jesse Brandeburg [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-11-16 12:07 Karol Kolacinski
2021-12-14  9:37 ` G, GurucharanX
2021-11-04 13:58 Karol Kolacinski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b320f02c-a973-e478-e74e-0329b5db699b@intel.com \
    --to=jesse.brandeburg@intel.com \
    --cc=intel-wired-lan@osuosl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox