From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759278Ab2C2McB (ORCPT ); Thu, 29 Mar 2012 08:32:01 -0400 Received: from e23smtp09.au.ibm.com ([202.81.31.142]:57071 "EHLO e23smtp09.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752583Ab2C2Mby (ORCPT ); Thu, 29 Mar 2012 08:31:54 -0400 Message-ID: <4F745628.9070505@linux.vnet.ibm.com> Date: Thu, 29 Mar 2012 18:01:36 +0530 From: "Srivatsa S. Bhat" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120316 Thunderbird/11.0 MIME-Version: 1.0 To: netdev@vger.kernel.org CC: Greg KH , zheng.z.yan@intel.com, aaron.f.brown@intel.com, jeffrey.t.kirsher@intel.com, "David S. Miller" , stable@vger.kernel.org, srivatsa.bhat@linux.vnet.ibm.com, "linux-kernel@vger.kernel.org" , alexander.h.duyck@intel.com, carolyn.wyborny@intel.com, eric.dumazet@gmail.com, Ben Hutchings Subject: Re: [PATCH -3.2.y] igb: Fix locking to silence ASSERT_RTNL() warning during suspend/resume References: <4F705BF5.8050006@linux.vnet.ibm.com> <1332777648.3500.93.camel@deadeye> In-Reply-To: <1332777648.3500.93.camel@deadeye> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit x-cbid: 12032903-3568-0000-0000-0000017030B3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ CC'ing netdev mailing list and lkml. I have put relevant info by hand to preserve the context, since I didn't find any archives for the stable mailing list, to give a link to. ] On 03/26/2012 09:30 PM, Ben Hutchings wrote: > On Mon, 2012-03-26 at 17:37 +0530, Srivatsa S. Bhat wrote: >> From: Zheng Yan >> >> [ Upstream commit 749ab2cd127046df79084b6b9165b23491b1db5f ] >> >> During suspend/resume (and possibly in other scenarios as well), the >> ASSERT_RTNL() warning is triggered in netif_set_real_num_tx/rx_queues() >> functions, something like: [ 374.073765] RTNL: assertion failed at net/core/dev.c (1718) [ 374.073767] Pid: 566, comm: kworker/u:4 Not tainted 3.2.13-0.0.0.2.0f8ab74-trace #1 [ 374.073769] RTNL: assertion failed at net/core/dev.c (1718) [ 374.073771] Call Trace: [ 374.073772] Pid: 5271, comm: kworker/u:10 Not tainted 3.2.13-0.0.0.2.0f8ab74-trace #1 [ 374.073775] Call Trace: [ 374.073780] [] netif_set_real_num_tx_queues+0x1ae/0x1d0 [ 374.073785] [] netif_set_real_num_tx_queues+0x1ae/0x1d0 [ 374.073792] [] igb_set_interrupt_capability+0x152/0x1f0 [igb] [ 374.073797] [] igb_set_interrupt_capability+0x152/0x1f0 [igb] [ 374.073814] [] igb_init_interrupt_scheme+0x28/0x330 [igb] [ 374.073819] [] igb_init_interrupt_scheme+0x28/0x330 [igb] [ 374.073823] [] igb_resume+0x9c/0x160 [igb] [ 374.073828] [] igb_resume+0x9c/0x160 [igb] [ 374.073831] [] pci_legacy_resume+0x42/0x60 [ 374.073835] [] pci_legacy_resume+0x42/0x60 [ 374.073837] [] pci_pm_resume+0x90/0xd0 [ 374.073840] [] pci_pm_resume+0x90/0xd0 [ 374.073843] [] pm_op+0x10c/0x1e0 [ 374.073847] [] pm_op+0x10c/0x1e0 [ 374.073849] [] device_resume+0x27a/0x2c0 [ 374.073852] [] device_resume+0x27a/0x2c0 [ 374.073854] [] async_resume+0x21/0x50 [ 374.073857] [] async_resume+0x21/0x50 [ 374.073860] [] async_run_entry_fn+0x84/0x180 [ 374.073864] [] async_run_entry_fn+0x84/0x180 [ 374.073867] [] process_one_work+0x171/0x350 [ 374.073871] [] process_one_work+0x171/0x350 [ 374.073874] [] ? async_schedule+0x20/0x20 [ 374.073876] [] ? async_schedule+0x20/0x20 [ 374.073879] [] worker_thread+0x18b/0x430 [ 374.073881] [] worker_thread+0x18b/0x430 [ 374.073884] [] ? manage_workers+0x120/0x120 [ 374.073887] [] ? manage_workers+0x120/0x120 [ 374.073890] [] kthread+0x9e/0xb0 [ 374.073892] [] kthread+0x9e/0xb0 [ 374.073896] [] kernel_thread_helper+0x4/0x10 [ 374.073899] [] kernel_thread_helper+0x4/0x10 [ 374.073902] [] ? retint_restore_args+0x13/0x13 [ 374.073905] [] ? retint_restore_args+0x13/0x13 [ 374.073907] [] ? kthread_worker_fn+0x1b0/0x1b0 [ 374.073911] [] ? kthread_worker_fn+0x1b0/0x1b0 [ 374.073913] [] ? gs_change+0x13/0x13 [ 374.073915] [] ? gs_change+0x13/0x13 >> diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c >> index 222954d..8775087 100644 >> --- a/drivers/net/ethernet/intel/igb/igb_main.c >> +++ b/drivers/net/ethernet/intel/igb/igb_main.c >> @@ -6697,7 +6697,18 @@ static int igb_resume(struct pci_dev *pdev) >> pci_enable_wake(pdev, PCI_D3hot, 0); >> pci_enable_wake(pdev, PCI_D3cold, 0); >> >> - if (igb_init_interrupt_scheme(adapter)) { >> + if (!rtnl_is_locked()) { > > This doesn't tell whether this process holds the lock. So it suppresses > the warning but doesn't fix the real bug. > > Ben. > > You mean to say that this issue needs to be revisited in mainline too? On 03/27/2012 07:57 PM, Ben Hutchings wrote: | Oh, yes. Because you said this was a smaller patch for stable, I didn't | realise that mainline had this problem too. > >> + /* >> + * 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) { >> dev_err(&pdev->dev, "Unable to allocate memory for queues\n"); >> return -ENOMEM; >> } > > Regards, Srivatsa S. Bhat