Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp1586455ybb; Thu, 26 Mar 2020 03:42:51 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtHImqyrxWKw+h3yo9wMybP3TOE/Q25ZVEg7LB1Nuls7wCAHJur6U1FHsR/ad6pHAiouCT5 X-Received: by 2002:aca:d985:: with SMTP id q127mr1247860oig.132.1585219371104; Thu, 26 Mar 2020 03:42:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585219371; cv=none; d=google.com; s=arc-20160816; b=nK5WhPdhzIesoQazFDkbSSCpZMDR2jFKhh+bp4IOQ3kcnwUqBKkXQjmcuE9T7HvMwY 9ZT9enhfH0XsyFP1H/lzwaQS74Jt1RVyFUnIgJtHnpYv7UGTX+orNmW2k/89mrM9uNyW IDybVqqt8/lar1znRdTuUuT8c+iyswG4SaixnI4e3JnZapkgHAJwwsuwqk1guCYz4TvK k9vECipI3cCXy7uVu+WTsVF7F/obs2HnGbOZ0Uw5pSX2nTUpmQcxMWTXCL5gKG66NAuf zTgeYvXFu4/41h9b+AwXPyXzE43Wak3cvXPwYq6VZBax5y1OWxeNI40xrALW5YTEZatJ PqHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:references:message-id :content-transfer-encoding:cc:date:in-reply-to:from:subject :mime-version; bh=tCIT8Il7CE3WNOOfY2+VhLFLWcSD1Zp+Z5LvSE+RrnM=; b=Z3tTjIFfCYq0WUgpPMDKhpz/dER5AyTTIK8PDL9Ynq8rBFjPit/GLsoG7P3O+95rPR n8E6YEpIok1+h2QZEvk84nJHTwoEn+LMEtVm3A+26M79kwzcRrBry3v6kBzVdUsyhe3e teWmTcUOtiPsf+qsDuMiiEX5Bdd27Y9k8xmLIp7ygOjvXoTpxL4oDEu7FIuXqam/z17s SWmELpygZ0BF12FZa7cFBRg/IkJ36d9gUoTQhYZegzXlRTAxCl3bWtIO8kjpZj7ePfFw jEFQm8KhMI++x4e91Hfrlxly+QYLRPJXMaS+Q4xmQaUdlFeV0an4mXU6XFL3A5YXDxmS iHhA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j78si905222oih.19.2020.03.26.03.42.38; Thu, 26 Mar 2020 03:42:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727991AbgCZKlg convert rfc822-to-8bit (ORCPT + 99 others); Thu, 26 Mar 2020 06:41:36 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:34698 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727560AbgCZKlf (ORCPT ); Thu, 26 Mar 2020 06:41:35 -0400 Received: from mail-pg1-f198.google.com ([209.85.215.198]) by youngberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1jHPx7-00047x-8J for linux-kernel@vger.kernel.org; Thu, 26 Mar 2020 10:41:33 +0000 Received: by mail-pg1-f198.google.com with SMTP id 185so4360935pgc.22 for ; Thu, 26 Mar 2020 03:41:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=UeRJQevSUHXBRlf/4ze6OiB+Fx/GsXnxWvYb+Xd4brE=; b=NikCLABUC157DpTI09kr5MLHqNu4f580OM7SQQOIgVOedIYYclUzev2FHBbxRAQmib qY9NPnCaA7APOEKlmLazHqSn3viBTTAGgoV346RyEgms4KcoMBiMfQNiE8I0EgqYM4+9 hr8on9QnPATnFIT/VQBHhpeNdUFtuhBW+ehwsd22YX2RVvtcgt2UAXKr1niOmt3OIVZe r2ZgwBYYd7AXBBFxIDl1rUsaeBw6mdDOghjWt2/54QK1Y9yMzO6N+VU9cZ3kn7a07gZ0 /pG+FBpifG1b8ifLQG94Ou9G/LmIjEDt0Dspl5sE0xobI4fmnYeAAa1+cy2S/he8nexH iy+g== X-Gm-Message-State: ANhLgQ02Hpr/vEAdGdY8XplI/auHN2h3cuRePQmRH4cQwnLFug+62KWU vyZAg07AZX4nyHijj8dNpQ7d3GnhYJDooPK3b0h2qPQe9j8Fs2DRyPUuOv4gYkw0nXGJab/ENHm HOuPDSdavU0AVaTch7LvuU1Tifjv3FdZ4hMZ3QAPFQA== X-Received: by 2002:a17:90a:1784:: with SMTP id q4mr2309535pja.174.1585219291696; Thu, 26 Mar 2020 03:41:31 -0700 (PDT) X-Received: by 2002:a17:90a:1784:: with SMTP id q4mr2309504pja.174.1585219291245; Thu, 26 Mar 2020 03:41:31 -0700 (PDT) Received: from [192.168.1.208] (220-133-187-190.HINET-IP.hinet.net. [220.133.187.190]) by smtp.gmail.com with ESMTPSA id mm18sm1341970pjb.39.2020.03.26.03.41.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Mar 2020 03:41:30 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.60.0.2.5\)) Subject: Re: [PATCH] igb: Use a sperate mutex insead of rtnl_lock() From: Kai-Heng Feng In-Reply-To: <20200326103926.20888-1-kai.heng.feng@canonical.com> Date: Thu, 26 Mar 2020 18:41:28 +0800 Cc: "Brown, Aaron F" , "David S. Miller" , "moderated list:INTEL ETHERNET DRIVERS" , "open list:NETWORKING DRIVERS" , open list Content-Transfer-Encoding: 8BIT Message-Id: References: <20200326103926.20888-1-kai.heng.feng@canonical.com> To: "Kirsher, Jeffrey T" X-Mailer: Apple Mail (2.3608.60.0.2.5) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, > On Mar 26, 2020, at 18:39, Kai-Heng Feng wrote: > > Commit 9474933caf21 ("igb: close/suspend race in netif_device_detach") > fixed race condition between close and power management ops by using > rtnl_lock(). > > This fix is a preparation for next patch, to prevent a dead lock under > rtnl_lock() when calling runtime resume routine. > > However, we can't use device_lock() in igb_close() because when module > is getting removed, the lock is already held for igb_remove(), and > igb_close() gets called during unregistering the netdev, hence causing a > deadlock. So let's introduce a new mutex so we don't cause a deadlock > with driver core or netdev core. > > Signed-off-by: Kai-Heng Feng Please drop "igb: Use device_lock() insead of rtnl_lock()" and use this one instead. Thanks! Kai-Heng > --- > drivers/net/ethernet/intel/igb/igb_main.c | 19 +++++++++++++------ > 1 file changed, 13 insertions(+), 6 deletions(-) > > diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c > index b46bff8fe056..dc7ed5dd216b 100644 > --- a/drivers/net/ethernet/intel/igb/igb_main.c > +++ b/drivers/net/ethernet/intel/igb/igb_main.c > @@ -288,6 +288,8 @@ static const struct igb_reg_info igb_reg_info_tbl[] = { > {} > }; > > +static DEFINE_MUTEX(igb_mutex); > + > /* igb_regdump - register printout routine */ > static void igb_regdump(struct e1000_hw *hw, struct igb_reg_info *reginfo) > { > @@ -4026,9 +4028,14 @@ static int __igb_close(struct net_device *netdev, bool suspending) > > int igb_close(struct net_device *netdev) > { > + int err = 0; > + > + mutex_lock(&igb_mutex); > if (netif_device_present(netdev) || netdev->dismantle) > - return __igb_close(netdev, false); > - return 0; > + err = __igb_close(netdev, false); > + mutex_unlock(&igb_mutex); > + > + return err; > } > > /** > @@ -8760,7 +8767,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, > u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol; > bool wake; > > - rtnl_lock(); > + mutex_lock(&igb_mutex); > netif_device_detach(netdev); > > if (netif_running(netdev)) > @@ -8769,7 +8776,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake, > igb_ptp_suspend(adapter); > > igb_clear_interrupt_scheme(adapter); > - rtnl_unlock(); > + mutex_unlock(&igb_mutex); > > status = rd32(E1000_STATUS); > if (status & E1000_STATUS_LU) > @@ -8897,13 +8904,13 @@ static int __maybe_unused igb_resume(struct device *dev) > > wr32(E1000_WUS, ~0); > > - rtnl_lock(); > + mutex_lock(&igb_mutex); > if (!err && netif_running(netdev)) > err = __igb_open(netdev, true); > > if (!err) > netif_device_attach(netdev); > - rtnl_unlock(); > + mutex_unlock(&igb_mutex); > > return err; > } > -- > 2.17.1 >