Re: [Intel-wired-lan] [PATCH iwl-net v2] ice: suppress DPLL errors during reset recovery

"Loktionov, Aleksandr" <[email protected]> Thu, 23 Jul 2026 09:22:52 +0000
Newsgroups org.osuosl.intel-wired-lan,org.kernel.vger.netdev
Message-ID <IA3PR11MB8986BE99F5DF5FA58BD2F8F4E5C02@IA3PR11MB8986.namprd11.prod.outlook.com>

> -----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]>