From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergei Shtylyov Subject: Re: [net-next 3/6] ixgbe: release lock for the duration of ixgbe_suspend_close() Date: Fri, 18 May 2018 11:59:16 +0300 Message-ID: References: <20180517163732.30910-1-jeffrey.t.kirsher@intel.com> <20180517163732.30910-4-jeffrey.t.kirsher@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Pavel Tatashin , netdev@vger.kernel.org, nhorman@redhat.com, sassmann@redhat.com, jogreene@redhat.com To: Jeff Kirsher , davem@davemloft.net Return-path: Received: from mail-lf0-f68.google.com ([209.85.215.68]:43349 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753401AbeERI7U (ORCPT ); Fri, 18 May 2018 04:59:20 -0400 Received: by mail-lf0-f68.google.com with SMTP id n18-v6so12802975lfh.10 for ; Fri, 18 May 2018 01:59:19 -0700 (PDT) In-Reply-To: <20180517163732.30910-4-jeffrey.t.kirsher@intel.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: Hello! On 5/17/2018 7:37 PM, Jeff Kirsher wrote: > From: Pavel Tatashin > > 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: Pavel Tatashin > Tested-by: Andrew Bowers > Signed-off-by: Jeff Kirsher > --- > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > index a52d92e182ee..5ddfb93ed491 100644 > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > @@ -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 Parallelizing? Else the sentence doesn't parse for me. :-) > + * duration of this call. > + */ > + rtnl_unlock(); > ixgbe_close_suspend(adapter); > + rtnl_lock(); > + } > > ixgbe_clear_interrupt_scheme(adapter); > rtnl_unlock(); MBR, Sergei