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;
> };
>
> /**
>
next prev parent 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