mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 19:47:08 +02:00
RDMA/efa: Reset device on probe failure
Make sure the device is being reset on driver exit whatever the reason is, to keep the device aligned and allow it to close shared resources (e.g. admin queue). Reviewed-by: Firas Jahjah <firasj@amazon.com> Reviewed-by: Yonatan Nachum <ynachum@amazon.com> Signed-off-by: Michael Margolin <mrgolin@amazon.com> Link: https://patch.msgid.link/20241225131548.15155-1-mrgolin@amazon.com Reviewed-by: Gal Pressman <gal.pressman@linux.dev> Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
20b6d8a7b9
commit
123c13f10e
|
|
@ -470,7 +470,6 @@ static void efa_ib_device_remove(struct efa_dev *dev)
|
|||
ibdev_info(&dev->ibdev, "Unregister ib device\n");
|
||||
ib_unregister_device(&dev->ibdev);
|
||||
efa_destroy_eqs(dev);
|
||||
efa_com_dev_reset(&dev->edev, EFA_REGS_RESET_NORMAL);
|
||||
efa_release_doorbell_bar(dev);
|
||||
}
|
||||
|
||||
|
|
@ -643,12 +642,14 @@ static struct efa_dev *efa_probe_device(struct pci_dev *pdev)
|
|||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
static void efa_remove_device(struct pci_dev *pdev)
|
||||
static void efa_remove_device(struct pci_dev *pdev,
|
||||
enum efa_regs_reset_reason_types reset_reason)
|
||||
{
|
||||
struct efa_dev *dev = pci_get_drvdata(pdev);
|
||||
struct efa_com_dev *edev;
|
||||
|
||||
edev = &dev->edev;
|
||||
efa_com_dev_reset(edev, reset_reason);
|
||||
efa_com_admin_destroy(edev);
|
||||
efa_free_irq(dev, &dev->admin_irq);
|
||||
efa_disable_msix(dev);
|
||||
|
|
@ -676,7 +677,7 @@ static int efa_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
return 0;
|
||||
|
||||
err_remove_device:
|
||||
efa_remove_device(pdev);
|
||||
efa_remove_device(pdev, EFA_REGS_RESET_INIT_ERR);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
@ -685,7 +686,7 @@ static void efa_remove(struct pci_dev *pdev)
|
|||
struct efa_dev *dev = pci_get_drvdata(pdev);
|
||||
|
||||
efa_ib_device_remove(dev);
|
||||
efa_remove_device(pdev);
|
||||
efa_remove_device(pdev, EFA_REGS_RESET_NORMAL);
|
||||
}
|
||||
|
||||
static void efa_shutdown(struct pci_dev *pdev)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user