]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
qede: Free netdevice only after stoping slowpath
authorMintz, Yuval <Yuval.Mintz@cavium.com>
Mon, 20 Feb 2017 20:43:35 +0000 (22:43 +0200)
committerChuck Anderson <chuck.anderson@oracle.com>
Mon, 6 Mar 2017 05:00:30 +0000 (21:00 -0800)
Orabug: 25477939

qed needs to be informed of the removal of the qede interface
prior to its actual removal, as qede has some registered callbacks
that might get called async to the removal flow.

Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 885185dfc49bde35b45046bb6b7384eca68e404f)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Conflicts:
drivers/net/ethernet/qlogic/qede/qede_main.c

drivers/net/ethernet/qlogic/qede/qede_main.c

index 1134ee10372cfde59bab5889d983952f1651aae9..57267e54c69e8ec352292e0b4101183458695a4d 100644 (file)
@@ -2738,14 +2738,20 @@ static void __qede_remove(struct pci_dev *pdev, enum qede_remove_mode mode)
 
        pci_set_drvdata(pdev, NULL);
 
-       free_netdev(ndev);
-
        /* Use global ops since we've freed edev */
        qed_ops->common->slowpath_stop(cdev);
        if (system_state == SYSTEM_POWER_OFF)
                return;
        qed_ops->common->remove(cdev);
 
+       /* Since this can happen out-of-sync with other flows,
+        * don't release the netdevice until after slowpath stop
+        * has been called to guarantee various other contexts
+        * [e.g., QED register callbacks] won't break anything when
+        * accessing the netdevice.
+        */
+        free_netdev(ndev);
+
        dev_info(&pdev->dev, "Ending qede_remove successfully\n");
 }