> -----Original Message-----
> From: Korba, Przemyslaw <[email protected]>
> Sent: Wednesday, May 20, 2026 1:50 PM
> To: [email protected]
> Cc: [email protected]; Nguyen, Anthony L
> <[email protected]>; Kitszel, Przemyslaw
> <[email protected]>; Loktionov, Aleksandr
> <[email protected]>; Kubalewski, Arkadiusz
> <[email protected]>; [email protected]; Korba, Przemyslaw
> <[email protected]>
> Subject: [PATCH iwl-net v2] ice: suppress DPLL errors during reset
> recovery
>
> During reset recovery, the admin queue returns EBUSY which is expected
> behavior. However, the DPLL subsystem was logging these as errors and
> incrementing the error counter, potentially leading to unnecessary
> warnings and even disabling the DPLL periodic worker if the threshold
> was reached.
>
> Suppress error logging and error counter increments when the admin
> queue returns EBUSY, as this is expected during reset recovery and not
> a real failure condition.
>
> test case:
> - ethtool --reset eth3 irq-shared dma-shared filter-shared offload-
> shared mac-shared phy-shared ram-shared
> - observe if dmesg EBUSY errors are gone
>
> Fixes: d7999f5ea64b ("ice: implement dpll interface to control cgu")
> Signed-off-by: Przemyslaw Korba <[email protected]>
> ---
> v2:
> add missing EBUSY check in ice_dpll_pps_update_phase_offsets()
> v1:
> https://lore.kernel.org/intel-wired-lan/20260520105311.5336-1-
> [email protected]/T/#u
> ---
> drivers/net/ethernet/intel/ice/ice_dpll.c | 19 ++++++++++++-------
> 1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_dpll.c
> b/drivers/net/ethernet/intel/ice/ice_dpll.c
> index 0704e92ab043..815792567a94 100644
> --- a/drivers/net/ethernet/intel/ice/ice_dpll.c
> +++ b/drivers/net/ethernet/intel/ice/ice_dpll.c
> @@ -784,7 +784,7 @@ ice_dpll_pin_state_update(struct ice_pf *pf,
> struct ice_dpll_pin *pin,
> ret,
> libie_aq_str(pf-
> >hw.adminq.sq_last_status),
> pin_type_name[pin_type], pin->idx);
> - else
> + else if (pf->hw.adminq.sq_last_status != LIBIE_AQ_RC_EBUSY)
> dev_err_ratelimited(ice_pf_to_dev(pf),
> "err:%d %s failed to update %s
> pin:%u\n",
> ret,
> @@ -2821,7 +2821,8 @@ static int
> ice_dpll_pps_update_phase_offsets(struct ice_pf *pf,
> *phase_offset_pins_updated = 0;
> ret = ice_aq_get_cgu_input_pin_measure(&pf->hw, DPLL_TYPE_PPS,
> meas,
> ARRAY_SIZE(meas));
> - if (ret && pf->hw.adminq.sq_last_status == LIBIE_AQ_RC_EAGAIN)
> {
> + if (ret && (pf->hw.adminq.sq_last_status == LIBIE_AQ_RC_EAGAIN
> ||
> + pf->hw.adminq.sq_last_status == LIBIE_AQ_RC_EBUSY))
> {
> return 0;
> } else if (ret) {
> dev_err(ice_pf_to_dev(pf),
> @@ -2883,10 +2884,12 @@ ice_dpll_update_state(struct ice_pf *pf,
> struct ice_dpll *d, bool init)
> d->dpll_idx, d->prev_input_idx, d->input_idx,
> d->dpll_state, d->prev_dpll_state, d->mode);
> if (ret) {
> - dev_err(ice_pf_to_dev(pf),
> - "update dpll=%d state failed, ret=%d %s\n",
> - d->dpll_idx, ret,
> - libie_aq_str(pf->hw.adminq.sq_last_status));
> + /* EBUSY is expected during reset recovery, don't log
> error */
> + if (pf->hw.adminq.sq_last_status != LIBIE_AQ_RC_EBUSY)
> + dev_err(ice_pf_to_dev(pf),
> + "update dpll=%d state failed, ret=%d %s\n",
> + d->dpll_idx, ret,
> + libie_aq_str(pf-
> >hw.adminq.sq_last_status));
> return ret;
> }
> if (init) {
> @@ -2955,7 +2958,9 @@ static void ice_dpll_periodic_work(struct
> kthread_work *work)
> d->periodic_counter % dp->phase_offset_monitor_period == 0)
> ret = ice_dpll_pps_update_phase_offsets(pf,
> &phase_offset_ntf);
> if (ret) {
> - d->cgu_state_acq_err_num++;
> + /* EBUSY is expected during reset recovery */
> + if (pf->hw.adminq.sq_last_status != LIBIE_AQ_RC_EBUSY)
> + d->cgu_state_acq_err_num++;
> /* stop rescheduling this worker */
> if (d->cgu_state_acq_err_num >
> ICE_CGU_STATE_ACQ_ERR_THRESHOLD) {
>
> base-commit: 7fd738d8cf34f46a7ec485426e2a5423ade8a63b
> prerequisite-patch-id: 45f595ded339d5f7feea2ea7ff196db3c08e3503
> --
> 2.43.0
Reviewed-by: Aleksandr Loktionov <[email protected]>