]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
i40e: hold the rtnl lock on clearing interrupt scheme
authorPatryk Małek <patryk.malek@intel.com>
Tue, 28 Aug 2018 17:16:03 +0000 (10:16 -0700)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 30 Aug 2018 20:53:04 +0000 (13:53 -0700)
Hold the rtnl lock when we're clearing interrupt scheme
in i40e_shutdown and in i40e_remove.

Signed-off-by: Patryk Małek <patryk.malek@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_main.c

index c30feb27e1c0dc60d8c4c43034168364b345a78d..112245f32d7d6ce4b2b9a893f3a4c9adccee6774 100644 (file)
@@ -14182,6 +14182,7 @@ static void i40e_remove(struct pci_dev *pdev)
        mutex_destroy(&hw->aq.asq_mutex);
 
        /* Clear all dynamic memory lists of rings, q_vectors, and VSIs */
+       rtnl_lock();
        i40e_clear_interrupt_scheme(pf);
        for (i = 0; i < pf->num_alloc_vsi; i++) {
                if (pf->vsi[i]) {
@@ -14190,6 +14191,7 @@ static void i40e_remove(struct pci_dev *pdev)
                        pf->vsi[i] = NULL;
                }
        }
+       rtnl_unlock();
 
        for (i = 0; i < I40E_MAX_VEB; i++) {
                kfree(pf->veb[i]);
@@ -14401,7 +14403,13 @@ static void i40e_shutdown(struct pci_dev *pdev)
        wr32(hw, I40E_PFPM_WUFC,
             (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0));
 
+       /* Since we're going to destroy queues during the
+        * i40e_clear_interrupt_scheme() we should hold the RTNL lock for this
+        * whole section
+        */
+       rtnl_lock();
        i40e_clear_interrupt_scheme(pf);
+       rtnl_unlock();
 
        if (system_state == SYSTEM_POWER_OFF) {
                pci_wake_from_d3(pdev, pf->wol_en);