RE: [Intel-wired-lan] [PATCH v2] ice: wait for reset completion in ice_resume()

From: Loktionov, Aleksandr

Date: Fri Apr 24 2026 - 11:28:41 EST




> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@xxxxxxxxxx> On Behalf
> Of Aaron Ma via Intel-wired-lan
> Sent: Friday, April 24, 2026 5:04 AM
> To: Nguyen, Anthony L <anthony.l.nguyen@xxxxxxxxx>; Kitszel,
> Przemyslaw <przemyslaw.kitszel@xxxxxxxxx>; Andrew Lunn
> <andrew+netdev@xxxxxxx>; David S. Miller <davem@xxxxxxxxxxxxx>; Eric
> Dumazet <edumazet@xxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo
> Abeni <pabeni@xxxxxxxxxx>; netdev@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx
> Cc: Akeem G Abodunrin <akeem.g.abodunrin@xxxxxxxxx>; Jesse Brandeburg
> <jesse.brandeburg@xxxxxxxxx>; intel-wired-lan@xxxxxxxxxxxxxxxx; Kohei
> Enju <kohei@xxxxxxxx>
> Subject: [Intel-wired-lan] [PATCH v2] ice: wait for reset completion
> in ice_resume()
>
> ice_resume() schedules an asynchronous PF reset and returns
> immediately. The reset runs later in ice_service_task(). If userspace
> tries to bring up the net device before the reset finishes, ice_open()
> fails with -EBUSY:
>
> ice_resume()
> ice_schedule_reset() # sets ICE_PFR_REQ, returns
> ...
> ice_open()
> ice_is_reset_in_progress() # ICE_PFR_REQ still set, -EBUSY
> ...
> ice_service_task()
> ice_do_reset()
> ice_rebuild() # clears ICE_PFR_REQ, too late
>
> Reproduced on E800 series NICs during suspend/resume with irdma
> enabled, where the aux device probe widens the race window.
>
> Wait for the reset to complete before returning from ice_resume().
>
> Fixes: 769c500dcc1e ("ice: Add advanced power mgmt for WoL")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Aaron Ma <aaron.ma@xxxxxxxxxxxxx>
> ---
> v2: reword comment to clarify best-effort semantics (Kohei Enju)
>
> drivers/net/ethernet/intel/ice/ice_main.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c
> b/drivers/net/ethernet/intel/ice/ice_main.c
> index 5f92377d4dfc2..a81eb21ea87c1 100644
> --- a/drivers/net/ethernet/intel/ice/ice_main.c
> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
> @@ -5635,6 +5635,15 @@ static int ice_resume(struct device *dev)
> /* Restart the service task */
> mod_timer(&pf->serv_tmr, round_jiffies(jiffies + pf-
> >serv_tmr_period));
>
> + /* Best-effort wait for the scheduled reset to finish so that
> the
> + * device is operational before returning. Without this,
> userspace
> + * (e.g. NetworkManager) may try to open the net device while
> the
> + * asynchronous reset is still in progress, hitting -EBUSY.
> + */
> + ret = ice_wait_for_reset(pf, 10 * HZ);
> + if (ret)
> + dev_err(dev, "Wait for reset failed during resume:
> %d\n", ret);
> +
> return 0;
> }
>
> --
> 2.43.0


Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@xxxxxxxxx>