From: Simon Horman <horms@kernel.org>
To: Grzegorz Nitka <grzegorz.nitka@intel.com>
Cc: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, richardcochran@gmail.com,
andrew+netdev@lunn.ch, przemyslaw.kitszel@intel.com,
anthony.l.nguyen@intel.com, arkadiusz.kubalewski@intel.com,
davem@davemloft.net, edumazet@google.com,
Maciek Machnikowski <maciej.machnikowski@intel.com>,
Marc Neustadter <marc.neustadter@intel.com>,
Sergey Temerkhanov <sergey.temerkhanov@intel.com>,
Milena Olech <milena.olech@intel.com>
Subject: Re: [PATCH iwl-net 1/2] ice: ptp: serialize E825 PHY timer start with PTP lock and incval
Date: Sat, 26 Sep 2026 18:05:43 +0100 [thread overview]
Message-ID: <20260926170543.GA13925@horms.kernel.org> (raw)
In-Reply-To: <20260925222824.270640-2-grzegorz.nitka@intel.com>
On Sat, Sep 26, 2026 at 12:28:23AM +0200, Grzegorz Nitka wrote:
> From: Maciek Machnikowski <maciej.machnikowski@intel.com>
>
> ice_start_phy_timer_eth56g() programmed the PHY increment value and
> performed the PHY-to-PHC phase synchronization in two separate PTP
> semaphore critical sections, and touched the shared source command
> register (GLTSYN_CMD via ice_ptp_src_cmd()) and read the source incval
> before acquiring the semaphore at all.
>
> Because GLTSYN_CMD is a single global register latched for the source
> timer and all PHY ports by GLTSYN_CMD_SYNC, a concurrent adjtime (small
> offset, <= S32_MAX) or adjfine could clobber the source command between
> the incval-init and the phase-sync steps. In the worst case the source
> timer command written by ice_ptp_adj_clock() (ICE_PTP_ADJ_TIME) was
> overwritten by the unlocked ICE_PTP_NOP from ice_start_phy_timer_eth56g(),
> so the adjustment was applied to the PHY ports but not to the PHC. This
> left the E825 PHY clock permanently offset from the PHC, showing up as an
> intermittent clock drift.
>
> Hold the PTP semaphore across the entire start sequence: acquire it
> before the first shared-register access (ice_ptp_src_cmd()), keep it held
> through the incval read, PHY incval init, and the phase synchronization,
> then release it once. Since the hardware semaphore is not recursive, split
> the phase-sync helper into ice_sync_phy_timer_eth56g_unlocked(), which
> assumes the caller already holds the lock, and call it directly from
> ice_start_phy_timer_eth56g(). The locking wrapper is removed as it no
> longer has any callers.
>
> Fixes: 781ff8f2d575 ("ice: ptp: serialize E825 PHY timer start with PTP lock")
> Signed-off-by: Maciek Machnikowski <maciej.machnikowski@intel.com>
> Co-developed-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
> Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
> Suggested-by: Marc Neustadter <marc.neustadter@intel.com>
> Reviewed-by: Sergey Temerkhanov <sergey.temerkhanov@intel.com>
> Reviewed-by: Milena Olech <milena.olech@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
> ---
> drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 48 +++++++++------------
> 1 file changed, 21 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
> index 20bd1813650f..d3e4aeb7e496 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp_hw.c
> @@ -2045,7 +2045,7 @@ static int ice_read_phy_and_phc_time_eth56g(struct ice_hw *hw, u8 port,
> }
>
> /**
> - * ice_sync_phy_timer_eth56g - Synchronize the PHY timer with PHC timer
> + * ice_sync_phy_timer_eth56g_unlocked - Synchronize the PHY timer with PHC timer
nit: I'm not entirely sure renaming the function is warranted.
But it's your call.
> * @hw: pointer to the HW struct
> * @port: the PHY port to synchronize
> *
...
next prev parent reply other threads:[~2026-09-26 17:05 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-25 22:28 [PATCH iwl-net 0/2] ice: fix E825 PTP timer race and drop redundant cross-timestamp access Grzegorz Nitka
2026-09-25 22:28 ` [PATCH iwl-net 1/2] ice: ptp: serialize E825 PHY timer start with PTP lock and incval Grzegorz Nitka
2026-09-26 17:05 ` Simon Horman [this message]
2026-09-28 15:19 ` Loktionov, Aleksandr
2026-09-25 22:28 ` [PATCH iwl-net 2/2] ice: remove redundant cross-timestamp PTP command Grzegorz Nitka
2026-09-26 17:06 ` Simon Horman
2026-09-28 15:19 ` Loktionov, Aleksandr
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=20260926170543.GA13925@horms.kernel.org \
--to=horms@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=anthony.l.nguyen@intel.com \
--cc=arkadiusz.kubalewski@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=grzegorz.nitka@intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.machnikowski@intel.com \
--cc=marc.neustadter@intel.com \
--cc=milena.olech@intel.com \
--cc=netdev@vger.kernel.org \
--cc=przemyslaw.kitszel@intel.com \
--cc=richardcochran@gmail.com \
--cc=sergey.temerkhanov@intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.