Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6710f970 authored by Pavel Tatashin's avatar Pavel Tatashin Committed by Jeff Kirsher
Browse files

ixgbe: release lock for the duration of ixgbe_suspend_close()



Currently, during device_shutdown() ixgbe holds rtnl_lock for the duration
of lengthy ixgbe_close_suspend(). On machines with multiple ixgbe cards
this lock prevents scaling if device_shutdown() function is multi-threaded.

It is not necessary to hold this lock during ixgbe_close_suspend()
as it is not held when ixgbe_close() is called also during shutdown but for
kexec case.

Signed-off-by: default avatarPavel Tatashin <pasha.tatashin@oracle.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent b212d815
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -6698,8 +6698,15 @@ static int __ixgbe_shutdown(struct pci_dev *pdev, bool *enable_wake)
	rtnl_lock();
	netif_device_detach(netdev);

	if (netif_running(netdev))
	if (netif_running(netdev)) {
		/* Suspend takes a long time, device_shutdown may be
		 * parallelized this function, so drop lock for the
		 * duration of this call.
		 */
		rtnl_unlock();
		ixgbe_close_suspend(adapter);
		rtnl_lock();
	}

	ixgbe_clear_interrupt_scheme(adapter);
	rtnl_unlock();