On 28.09.2026 08:53, Linkui Xiao wrote:

> diff --git a/drivers/net/ethernet/intel/ice/ice_sriov.c 
> b/drivers/net/ethernet/intel/ice/ice_sriov.c
> index 95abc6704820..df84dbe12cba 100644
> --- a/drivers/net/ethernet/intel/ice/ice_sriov.c
> +++ b/drivers/net/ethernet/intel/ice/ice_sriov.c
> @@ -446,8 +446,10 @@ static int ice_init_vf_vsi_res(struct ice_vf *vf)
>               return -ENOMEM;
>  
>       vsi = ice_vf_vsi_setup(vf);
> -     if (!vsi)
> -             return -ENOMEM;
> +     if (!vsi) {
> +             err = -ENOMEM;
> +             goto free_irqs;
> +     }
>  
>       err = ice_vf_init_host_cfg(vf, vsi);
>       if (err)
> @@ -457,6 +459,9 @@ static int ice_init_vf_vsi_res(struct ice_vf *vf)
>  
>  release_vsi:
>       ice_vf_vsi_release(vf);
> +free_irqs:
> +     ice_virt_free_irqs(pf, vf->first_vector_idx, vf->num_msix);
> +
>       return err;
>  }
>  
> @@ -490,6 +495,8 @@ static int ice_start_vfs(struct ice_pf *pf)
>                               dev_err(ice_pf_to_dev(pf), "Failed to attach VF 
> %d to eswitch, error %d",
>                                       vf->vf_id, retval);
>                               ice_vf_vsi_release(vf);
> +                             ice_virt_free_irqs(pf, vf->first_vector_idx,
> +                                                vf->num_msix);

Nit: For consistency with the teardown: loop (which frees IRQs before releasing 
the VSI), consider swapping the order here too - currently this branch releases 
the VSI first, then frees IRQs, the opposite order. Not functionally 
significant, just readability.

>                               goto teardown;
>                       }
>               }

Reviewed-by: Tomasz Lichwala <[email protected]>


Reply via email to