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.cb/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(structice_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>