RDMA/efa: Add shutdown notifier
authorMichael Margolin <mrgolin@amazon.com>
Thu, 25 Apr 2024 17:18:14 +0000 (17:18 +0000)
committerJason Gunthorpe <jgg@nvidia.com>
Mon, 29 Apr 2024 12:02:58 +0000 (09:02 -0300)
Add driver function to stop the device and release any active IRQs as
preparation for shutdown. This should fix issues caused by unexpected AQ
interrupts when booting kernel using kexec and possible data integrity
issues when the system is being shutdown during traffic.

Link: https://lore.kernel.org/r/20240425171814.25216-1-mrgolin@amazon.com
Reviewed-by: Firas Jahjah <firasj@amazon.com>
Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
Signed-off-by: Michael Margolin <mrgolin@amazon.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/efa/efa_main.c

index 5fa3603c80d82f83416f9cc8f514ee32f841b38b..d1a48f988f6c037a8e7f3226925c1b5d0d862b09 100644 (file)
@@ -671,11 +671,22 @@ static void efa_remove(struct pci_dev *pdev)
        efa_remove_device(pdev);
 }
 
+static void efa_shutdown(struct pci_dev *pdev)
+{
+       struct efa_dev *dev = pci_get_drvdata(pdev);
+
+       efa_destroy_eqs(dev);
+       efa_com_dev_reset(&dev->edev, EFA_REGS_RESET_SHUTDOWN);
+       efa_free_irq(dev, &dev->admin_irq);
+       efa_disable_msix(dev);
+}
+
 static struct pci_driver efa_pci_driver = {
        .name           = DRV_MODULE_NAME,
        .id_table       = efa_pci_tbl,
        .probe          = efa_probe,
        .remove         = efa_remove,
+       .shutdown       = efa_shutdown,
 };
 
 module_pci_driver(efa_pci_driver);