i40evf: remove flush_scheduled_work call in i40evf_remove
authorSudheer Mogilappagari <sudheer.mogilappagari@intel.com>
Mon, 18 Dec 2017 10:16:23 +0000 (05:16 -0500)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 23 Jan 2018 19:29:19 +0000 (11:29 -0800)
flush_schedule_work blocks until completion of all scheduled
work items in global work-queue. This can cause deadlock in some
cases. i40evf_remove() cleans up necessary work items with
cancel_delayed_work_sync and cancel_work_sync. This fix removes
flush_schedule_work call inside i40evf_remove().

Signed-off-by: Sudheer Mogilappagari <sudheer.mogilappagari@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40evf/i40evf_main.c

index f92587a..6472116 100644 (file)
@@ -3088,8 +3088,6 @@ static void i40evf_remove(struct pci_dev *pdev)
        if (adapter->watchdog_timer.function)
                del_timer_sync(&adapter->watchdog_timer);
 
-       flush_scheduled_work();
-
        i40evf_free_rss(adapter);
 
        if (hw->aq.asq.count)