]> git.baikalelectronics.ru Git - kernel.git/commitdiff
qede: make driver reliable on unload after failures
authorIgor Russkikh <irusskikh@marvell.com>
Sun, 23 Aug 2020 11:19:34 +0000 (14:19 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 25 Aug 2020 01:01:33 +0000 (18:01 -0700)
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>
drivers/net/ethernet/qlogic/qede/qede_main.c

index 58e1a6e542eb24f9be2a8f441802a9dde0aa24d4..20d2296beb7995c4e2d35f841a65d01e1632fd10 100644 (file)
@@ -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;
 }