Intel-Wired-Lan Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Jacob Keller <jacob.e.keller@intel.com>
To: Intel Wired LAN <intel-wired-lan@lists.osuosl.org>,
	 Maciej Machnikowski <maciej.machnikowski@intel.com>,
	 Jacob Keller <jacob.e.keller@intel.com>,
	 Przemyslaw Korba <przemyslaw.korba@intel.com>,
	 Anthony Nguyen <anthony.l.nguyen@intel.com>,
	 Grzegorz Nitka <grzegorz.nitka@intel.com>,
	 Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
Cc: Jacob Keller <jacob.e.keller@intel.com>
Subject: [PATCH iwl-net v3 01/15] ice: fix removal of PTP timestamp tracker during reset
Date: Fri, 25 Sep 2026 16:56:33 -0700	[thread overview]
Message-ID: <20260925-jk-e825c-timestamp-processing-logic-fixes-srcu-v3-1-6532598e8da8@intel.com> (raw)
In-Reply-To: <20260925-jk-e825c-timestamp-processing-logic-fixes-srcu-v3-0-6532598e8da8@intel.com>

Commit 7a25fe5cd5fb ("ice: stop destroying and reinitalizing Tx tracker
during reset") intended to modify the PTP reset flow of the driver so that
it stopped calling ice_ptp_reset_tx_tracker() during teardown and stopped
calling ice_ptp_init_tx_*() during rebuild.

Unfortunately, the commit only removed the calls to ice_ptp_init_tx_*().
This fixed a memory leak in PF reset. However, now a CORE, GLOBAL, or EMP
reset will leave the device unable to initiate Tx timestamp requests
indefinitely.

In practice the CORE and GLOBAL resets rarely happen in production
environments, while EMP resets happen after a firmware update that is often
followed by a platform reboot. This explains why this has not been caught
until now. However, it is trivial to verify by triggering the reset from
userspace via ethtool. For ice the following command will trigger a GLOBAL
reset:

  $ ethtool --reset eno8303np0 irq-shared dma-shared filter-shared \
                               offload-shared ram-shared mac-shared phy-shared

Remove the call of ice_ptp_release_tx_tracker() from
ice_ptp_prepare_for_reset(), to keep the tracker memory in place so that
timestamping can resume after a reset.

During review of a previous version of this change, sashiko pointed out
that the teardown flows for ice_ptp_init() and ice_ptp_release() could
potentially leak the PTP timestamp tracker.

Fix ice_ptp_init() so that it allocates the tracker before adding the port
to the port list, and properly calls ice_ptp_release_tx_tracker() as part
of its cleanup on error. Ensure the ps_lock mutex isn't destroyed until the
PF has been cleared from the port list.

Fix ice_ptp_release() so that it handles the cleanup if PTP is in the
error state by cancelling the kworker items and releasing the Tx tracker as
appropriate.

This was found by Sashiko review during feedback for an unrelated change,
and iterated based on further feedback from Sashiko after the initial fix
to remove the call to ice_ptp_release_tx_tracker();

Closes: https://sashiko.dev/#/patchset/20260821-jk-e825c-minimized-fixes-v1-0-9d0731eb4858%40intel.com?part=8
Closes: https://lore.kernel.org/netdev/20260916011213.1632286-1-kuba@kernel.org/
Fixes: 7a25fe5cd5fb ("ice: stop destroying and reinitalizing Tx tracker during reset")
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ptp.c | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
index eaec36ab6ae3..fe21cee4f9de 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -2939,8 +2939,6 @@ void ice_ptp_prepare_for_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
 	if (ice_pf_src_tmr_owned(pf) && hw->mac_type == ICE_MAC_GENERIC_3K_E825)
 		ice_ptp_prepare_rebuild_sec(pf, false, reset_type);
 
-	ice_ptp_release_tx_tracker(pf, &pf->ptp.port.tx);
-
 	/* Disable periodic outputs */
 	ice_ptp_disable_all_perout(pf);
 
@@ -3347,13 +3345,13 @@ void ice_ptp_init(struct ice_pf *pf)
 		}
 	}
 
-	err = ice_ptp_setup_pf(pf);
-	if (err)
-		goto err_exit;
-
 	err = ice_ptp_init_port(pf, &ptp->port);
 	if (err)
-		goto err_clean_pf;
+		goto err_destroy_ps_lock;
+
+	err = ice_ptp_setup_pf(pf);
+	if (err)
+		goto err_release_tx_tracker;
 
 	/* Start the PHY timestamping block */
 	ice_ptp_reset_phy_timestamping(pf);
@@ -3365,14 +3363,17 @@ void ice_ptp_init(struct ice_pf *pf)
 
 	err = ice_ptp_init_work(pf, ptp);
 	if (err)
-		goto err_exit;
+		goto err_clean_pf;
 
 	dev_info(ice_pf_to_dev(pf), "PTP init successful\n");
 	return;
 
 err_clean_pf:
-	mutex_destroy(&ptp->port.ps_lock);
 	ice_ptp_cleanup_pf(pf);
+err_release_tx_tracker:
+	ice_ptp_release_tx_tracker(pf, &pf->ptp.port.tx);
+err_destroy_ps_lock:
+	mutex_destroy(&ptp->port.ps_lock);
 err_exit:
 	/* If we registered a PTP clock, release it */
 	if (pf->ptp.clock) {
@@ -3399,12 +3400,20 @@ void ice_ptp_release(struct ice_pf *pf)
 		return;
 
 	if (pf->ptp.state != ICE_PTP_READY) {
-		mutex_destroy(&pf->ptp.port.ps_lock);
-		ice_ptp_cleanup_pf(pf);
+		if (pf->ptp.kworker) {
+			kthread_cancel_delayed_work_sync(&pf->ptp.work);
+			if (pf->hw.mac_type == ICE_MAC_GENERIC)
+				kthread_cancel_delayed_work_sync(&pf->ptp.port.ov_work);
+			kthread_destroy_worker(pf->ptp.kworker);
+			pf->ptp.kworker = NULL;
+		}
 		if (pf->ptp.clock) {
 			ptp_clock_unregister(pf->ptp.clock);
 			pf->ptp.clock = NULL;
 		}
+		ice_ptp_cleanup_pf(pf);
+		ice_ptp_release_tx_tracker(pf, &pf->ptp.port.tx);
+		mutex_destroy(&pf->ptp.port.ps_lock);
 		return;
 	}
 

-- 
2.56.0.rc0.395.gd1f3524e15dc


  reply	other threads:[~2026-09-25 23:58 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-25 23:56 [PATCH iwl-net v3 00/15] ice: E82x: timestamp processing logic fixes Jacob Keller
2026-09-25 23:56 ` Jacob Keller [this message]
2026-10-05 11:02   ` [PATCH iwl-net v3 01/15] ice: fix removal of PTP timestamp tracker during reset Loktionov, Aleksandr
2026-10-06  1:36   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 02/15] ice: use reference counting and SRCU for PTP port access Jacob Keller
2026-10-06  1:37   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 03/15] ice: fix PHY port restart serialization Jacob Keller
2026-10-06  1:38   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 04/15] ice: set in_use only after preparing Tx timestamp index Jacob Keller
2026-10-06  1:38   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 05/15] ice: call PTP link change only from link events Jacob Keller
2026-09-25 23:56 ` [PATCH iwl-net v3 06/15] ice: E822: keep Tx timestamps disabled during offset calibration Jacob Keller
2026-10-06  1:39   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 07/15] ice: E822: cancel offset verification work during reset preparation Jacob Keller
2026-10-06  1:40   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 08/15] ice: E825: stop clearing PHY_REG_TX_OFFSET_READY Jacob Keller
2026-10-05 11:03   ` Loktionov, Aleksandr
2026-10-06  1:41   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 09/15] ice: E825: clear PHY_REG_TX_MEMORY_STATUS prior to soft reset Jacob Keller
2026-10-05 11:04   ` Loktionov, Aleksandr
2026-10-06  1:41   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 10/15] ice: E825: perform a soft reset when starting the PHY timer Jacob Keller
2026-10-05 11:04   ` Loktionov, Aleksandr
2026-10-06  1:42   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 11/15] ice: wait for in-flight Tx timestamps before flushing the tracker Jacob Keller
2026-10-05 11:05   ` Loktionov, Aleksandr
2026-10-06  1:42   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 12/15] ice: keep Tx timestamp slots tracked until completion or timeout Jacob Keller
2026-10-05 11:01   ` Loktionov, Aleksandr
2026-10-06  1:43   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 13/15] ice: skip reading Tx ready bitmap on ports with no timestamps Jacob Keller
2026-10-06  1:44   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 14/15] ice: don't clear in_use until HW clears ready bitmap Jacob Keller
2026-10-06  1:45   ` Nowlin, Alexander
2026-09-25 23:56 ` [PATCH iwl-net v3 15/15] ice: Recalibrate PHY after settime64 on E825-C Jacob Keller
2026-10-06  1:46   ` Nowlin, Alexander

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=20260925-jk-e825c-timestamp-processing-logic-fixes-srcu-v3-1-6532598e8da8@intel.com \
    --to=jacob.e.keller@intel.com \
    --cc=anthony.l.nguyen@intel.com \
    --cc=arkadiusz.kubalewski@intel.com \
    --cc=grzegorz.nitka@intel.com \
    --cc=intel-wired-lan@lists.osuosl.org \
    --cc=maciej.machnikowski@intel.com \
    --cc=przemyslaw.korba@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox