]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
bnxt_en: Issue PCIe FLR in kdump kernel to cleanup pending DMAs.
authorVasundhara Volam <vasundhara-v.volam@broadcom.com>
Thu, 20 Feb 2020 22:26:35 +0000 (17:26 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Mar 2020 15:45:02 +0000 (16:45 +0100)
[ Upstream commit 8743db4a9acfd51f805ac0c87bcaae92c42d1061 ]

If crashed kernel does not shutdown the NIC properly, PCIe FLR
is required in the kdump kernel in order to initialize all the
functions properly.

Fixes: d629522e1d66 ("bnxt_en: Reduce memory usage when running in kdump kernel.")
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index 1a90118370ea171759ef5efe5db64d8b216e8e38..cc86038b1d96ba3e6f97c4ef6e0e1556c3546645 100644 (file)
@@ -11775,6 +11775,14 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        if (version_printed++ == 0)
                pr_info("%s", version);
 
+       /* Clear any pending DMA transactions from crash kernel
+        * while loading driver in capture kernel.
+        */
+       if (is_kdump_kernel()) {
+               pci_clear_master(pdev);
+               pcie_flr(pdev);
+       }
+
        max_irqs = bnxt_get_max_irq(pdev);
        dev = alloc_etherdev_mq(sizeof(*bp), max_irqs);
        if (!dev)