mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-20 08:29:55 +07:00
ice: Gracefully handle reset failure in ice_alloc_vfs()
Currently if ice_reset_all_vfs() fails in ice_alloc_vfs() we fail to free some resources, reset variables, and return an error value. Fix this by adding another unroll case to free the pf->vf array, set the pf->num_alloc_vfs to 0, and return an error code. Without this, if ice_reset_all_vfs() fails in ice_alloc_vfs() we will not be able to do SRIOV without hard rebooting the system because rmmod'ing the driver does not work. Signed-off-by: Brett Creeley <brett.creeley@intel.com> Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
a17a5ff681
commit
72f9c20398
@ -1134,7 +1134,7 @@ static int ice_alloc_vfs(struct ice_pf *pf, u16 num_alloc_vfs)
|
||||
GFP_KERNEL);
|
||||
if (!vfs) {
|
||||
ret = -ENOMEM;
|
||||
goto err_unroll_sriov;
|
||||
goto err_pci_disable_sriov;
|
||||
}
|
||||
pf->vf = vfs;
|
||||
|
||||
@ -1154,12 +1154,19 @@ static int ice_alloc_vfs(struct ice_pf *pf, u16 num_alloc_vfs)
|
||||
pf->num_alloc_vfs = num_alloc_vfs;
|
||||
|
||||
/* VF resources get allocated during reset */
|
||||
if (!ice_reset_all_vfs(pf, true))
|
||||
if (!ice_reset_all_vfs(pf, true)) {
|
||||
ret = -EIO;
|
||||
goto err_unroll_sriov;
|
||||
}
|
||||
|
||||
goto err_unroll_intr;
|
||||
|
||||
err_unroll_sriov:
|
||||
pf->vf = NULL;
|
||||
devm_kfree(&pf->pdev->dev, vfs);
|
||||
vfs = NULL;
|
||||
pf->num_alloc_vfs = 0;
|
||||
err_pci_disable_sriov:
|
||||
pci_disable_sriov(pf->pdev);
|
||||
err_unroll_intr:
|
||||
/* rearm interrupts here */
|
||||
|
Loading…
Reference in New Issue
Block a user