> -----Original Message----- > From: Intel-wired-lan <[email protected]> On Behalf Of Robert > Malz > Sent: Tuesday, May 20, 2025 10:32 AM > To: [email protected]; [email protected]; Nguyen, Anthony > L > <[email protected]>; Kitszel, Przemyslaw > <[email protected]>; [email protected]; > [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; > [email protected]; Keller, Jacob E <[email protected]> > Subject: [Intel-wired-lan] [PATCH v3 2/2] i40e: retry VFLR handling if there > is > ongoing VF reset > > When a VFLR interrupt is received during a VF reset initiated from a different > source, the VFLR may be not fully handled. This can leave the VF in an > undefined > state. > To address this, set the I40E_VFLR_EVENT_PENDING bit again during VFLR > handling if the reset is not yet complete. This ensures the driver will > properly > complete the VF reset in such scenarios. > > Fixes: 52424f974bc5 ("i40e: Fix VF hang when reset is triggered on another > VF") > Signed-off-by: Robert Malz <[email protected]> > --- > drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c > b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c > index 22d5b1ec2289..88e6bef69342 100644 > --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c > +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c > @@ -4328,7 +4328,10 @@ int i40e_vc_process_vflr_event(struct i40e_pf *pf) > reg = rd32(hw, I40E_GLGEN_VFLRSTAT(reg_idx)); > if (reg & BIT(bit_idx)) > /* i40e_reset_vf will clear the bit in GLGEN_VFLRSTAT */ > - i40e_reset_vf(vf, true); > + if (!i40e_reset_vf(vf, true)) { > + /* At least one VF did not finish resetting, > retry > next time */ > + set_bit(__I40E_VFLR_EVENT_PENDING, pf- > >state); > + } > } > > return 0; > -- > 2.34.1
Tested-by: Rafal Romanowski <[email protected]>
