From patchwork Thu Apr 5 15:11:03 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Poirier X-Patchwork-Id: 150972 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id E22BFB7000 for ; Fri, 6 Apr 2012 01:12:29 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755051Ab2DEPLc (ORCPT ); Thu, 5 Apr 2012 11:11:32 -0400 Received: from mail-iy0-f174.google.com ([209.85.210.174]:49393 "EHLO mail-iy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755002Ab2DEPLa (ORCPT ); Thu, 5 Apr 2012 11:11:30 -0400 Received: by iagz16 with SMTP id z16so1876863iag.19 for ; Thu, 05 Apr 2012 08:11:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer; bh=0lssmZgymbM8biSnx0G0d9YxdF/4Z1w0gnpT5nsyXFU=; b=dHg3BjADGN6LFLAJsgWjcqQ0WAE3OeirabgzOI9AETe+M+dWTSmrS3SaVqdtsB6+Lb VToMD88mVdgF9LcfYJNiBkF+NiqxViW+6lkcHCdkBPsw3kaKgeH53ET2/7cyWTxt1Zt/ dvwlK1vxwOPUcsdqEFcOJjj9O7vVamjy2HHeLH4iR2Np3q3p5bASbMCJin0xEFjBKJvr feW+ZMedefASneLGdYPUxIosUveeK34/3aOwNM8jjJG/jRsxTIqtgOKy55H+5YtJ01D+ dYSGyqfaSOSUekmdAP5bk9tCcuuaaadiHjAx8l6/cH75Ps3InjmIEIoggfwZwSMHOZ5B Je7Q== Received: by 10.42.179.196 with SMTP id br4mr1809282icb.42.1333638689489; Thu, 05 Apr 2012 08:11:29 -0700 (PDT) Received: from localhost.localdomain (modemcable121.56-203-24.mc.videotron.ca. [24.203.56.121]) by mx.google.com with ESMTPS id gr1sm7578766igc.1.2012.04.05.08.11.26 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 05 Apr 2012 08:11:28 -0700 (PDT) From: Benjamin Poirier To: Jeff Kirsher Cc: Alex Duyck , Bruce Allan , Carolyn Wyborny , "David S. Miller" , Don Skidmore , e1000-devel@lists.sourceforge.net, Emil Tantilov , Eric Dumazet , Greg Rose , Jesse Brandeburg , John Fastabend , John Ronciak , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Peter P Waskiewicz Jr Subject: [PATCH 1/2] igb: fix rtnl race in PM resume path Date: Thu, 5 Apr 2012 11:11:03 -0400 Message-Id: <1333638664-17062-1-git-send-email-bpoirier@suse.de> X-Mailer: git-send-email 1.7.7 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Since the caller (PM resume code) is not the one holding rtnl, when taking the 'else' branch rtnl may be released at any moment, thereby defeating the whole purpose of this code block. Signed-off-by: Benjamin Poirier --- drivers/net/ethernet/intel/igb/igb_main.c | 20 ++++++-------------- 1 files changed, 6 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index f022ff7..4854ab6 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -1083,9 +1083,12 @@ msi_only: adapter->flags |= IGB_FLAG_HAS_MSI; out: /* Notify the stack of the (possibly) reduced queue counts. */ + rtnl_lock(); netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); - return netif_set_real_num_rx_queues(adapter->netdev, - adapter->num_rx_queues); + err = netif_set_real_num_rx_queues(adapter->netdev, + adapter->num_rx_queues); + rtnl_unlock(); + return err; } /** @@ -6646,18 +6649,7 @@ static int igb_resume(struct device *dev) pci_enable_wake(pdev, PCI_D3hot, 0); pci_enable_wake(pdev, PCI_D3cold, 0); - if (!rtnl_is_locked()) { - /* - * shut up ASSERT_RTNL() warning in - * netif_set_real_num_tx/rx_queues. - */ - rtnl_lock(); - err = igb_init_interrupt_scheme(adapter); - rtnl_unlock(); - } else { - err = igb_init_interrupt_scheme(adapter); - } - if (err) { + if (igb_init_interrupt_scheme(adapter)) { dev_err(&pdev->dev, "Unable to allocate memory for queues\n"); return -ENOMEM; }