Thread (17 messages) 17 messages, 5 authors, 3d ago

RE: [PATCH 5/5] ice: quiesce PTP periodic work before system suspend

flat view

From: Loktionov, Aleksandr <hidden>
Date: 2026-10-21 12:14:56
Also in: intel-wired-lan, lkml

quoted hunk ↗ jump to hunk
-----Original Message-----
From: Aaron Ma <redacted>
Sent: Monday, October 19, 2026 12:52 PM
To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel, Przemyslaw
[off-list ref]; Andrew Lunn [off-list ref];
David S. Miller [off-list ref]; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Lobakin, Aleksander [off-list ref];
Richard Cochran [off-list ref]; netdev@vger.kernel.org;
linux-kernel@vger.kernel.org
Cc: Dan Nowlin <redacted>; Brett Creeley
[off-list ref]; Keller, Jacob E [off-list ref];
moderated list:INTEL ETHERNET DRIVERS [off-list ref]
Subject: [PATCH 5/5] ice: quiesce PTP periodic work before system
suspend

ice_suspend() stops the main service task but leaves PTP work active.
The PTP kworker is not freezable, so it can continue issuing MMIO
accesses after the PCI function has entered D3hot. Both the periodic
work updating the cached PHC time and the E822 offset calibration work,
which reschedules itself while calibration is pending, are affected.

Synchronously cancel both works when PTP is ready, after disabling the
VSIs and before shutting down the control queues.

Fixes: 77a781155a65 ("ice: enable receive hardware timestamping")
Fixes: a69f1cb62aec ("ice: exit bypass mode once hardware finishes
timestamp calibration")
Signed-off-by: Aaron Ma <redacted>
---
 drivers/net/ethernet/intel/ice/ice_main.c | 6 ++++++
 1 file changed, 6 insertions(+)
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c
b/drivers/net/ethernet/intel/ice/ice_main.c
index ddebb28b2454f..3962910759067 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -5450,6 +5450,12 @@ static void ice_prepare_for_shutdown(struct
ice_pf *pf)
 	/* disable the VSIs and their queues that are not already DOWN */
 	ice_pf_dis_all_vsi(pf, false);

+	if (test_bit(ICE_FLAG_PTP_SUPPORTED, pf->flags) &&
+	    pf->ptp.state == ICE_PTP_READY) {
+		kthread_cancel_delayed_work_sync(&pf->ptp.work);
+		kthread_cancel_delayed_work_sync(&pf->ptp.port.ov_work);
+	}
+
 	ice_for_each_vsi(pf, v)
 		if (pf->vsi[v])
 			pf->vsi[v]->vsi_num = 0;
--
2.53.0
Reviewed-by: Aleksandr Loktionov <redacted>

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help