qede: make driver reliable on unload after failures
In case recovery was not successful, netdev still should be present. But we should clear cdev if something bad happens on recovery. We also check cdev for null on dev close. That could be a case if recovery was not successful. Signed-off-by: Igor Russkikh <irusskikh@marvell.com> Signed-off-by: Alexander Lobakin <alobakin@marvell.com> Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c5c642c55e
commit
adc100d098
|
@ -1238,7 +1238,10 @@ static int __qede_probe(struct pci_dev *pdev, u32 dp_module, u8 dp_level,
|
|||
err4:
|
||||
qede_rdma_dev_remove(edev, (mode == QEDE_PROBE_RECOVERY));
|
||||
err3:
|
||||
free_netdev(edev->ndev);
|
||||
if (mode != QEDE_PROBE_RECOVERY)
|
||||
free_netdev(edev->ndev);
|
||||
else
|
||||
edev->cdev = NULL;
|
||||
err2:
|
||||
qed_ops->common->slowpath_stop(cdev);
|
||||
err1:
|
||||
|
@ -2473,7 +2476,8 @@ static int qede_close(struct net_device *ndev)
|
|||
|
||||
qede_unload(edev, QEDE_UNLOAD_NORMAL, false);
|
||||
|
||||
edev->ops->common->update_drv_state(edev->cdev, false);
|
||||
if (edev->cdev)
|
||||
edev->ops->common->update_drv_state(edev->cdev, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue