From: Karol Kolacinski The offset verification work task for E822 is executed after a PHY restart to complete vernier calibration. In the event that either Tx or Rx calibration hasn't finished, it may still be executing when a reset occurs. The ice_ptp_wait_for_offsets() function does check if the driver is resetting, and will reschedule itself. However, it is possible that a given execution is already past this check. The function may then fail to access the sideband queue. It treats failures as a reason to re-schedule and check again later. This re-schedule will then see the updated reset state via ice_is_reset_in_progress() and will keep re-scheduling until the reset finishes. However, a device reset will result in the PHY being reconfigured either as part of the clock owner resetting or due to the ice_ptp_link_change() call at the end of the rebuild. Preemptively cancel the task to avoid doing unnecessary checks while resetting. Fixes: 95af1f1c4c9f ("ice: reschedule ice_ptp_wait_for_offset_valid during reset") Signed-off-by: Karol Kolacinski Reviewed-by: Aleksandr Loktionov Signed-off-by: Arkadiusz Kubalewski Signed-off-by: Przemyslaw Korba Reviewed-by: Maciek Machnikowski Signed-off-by: Jacob Keller Signed-off-by: Tony Nguyen --- drivers/net/ethernet/intel/ice/ice_ptp.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c index 828d46a73f29..629777380694 100644 --- a/drivers/net/ethernet/intel/ice/ice_ptp.c +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c @@ -3006,6 +3006,9 @@ void ice_ptp_prepare_for_reset(struct ice_pf *pf, enum ice_reset_req reset_type) kthread_cancel_delayed_work_sync(&ptp->work); + if (hw->mac_type == ICE_MAC_GENERIC) + kthread_cancel_delayed_work_sync(&ptp->port.ov_work); + if (reset_type == ICE_RESET_PFR) return; -- 2.47.1