Message ID | alpine.LRH.2.00.1007151448260.25472@localhost.localdomain |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
From: Shreyas Bhatewara <sbhatewara@vmware.com> Date: Thu, 15 Jul 2010 18:20:52 -0700 (PDT) > Is this what you suggest : > > --- > > Hold rtnl_lock to get the right link state. It ought to work, but make sure that it is legal to take the RTNL semaphore in all contexts in which this code block might be called. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 15 Jul 2010, David Miller wrote: > From: Shreyas Bhatewara <sbhatewara@vmware.com> > Date: Thu, 15 Jul 2010 18:20:52 -0700 (PDT) > > > Is this what you suggest : > > > > --- > > > > Hold rtnl_lock to get the right link state. > > It ought to work, but make sure that it is legal to take the > RTNL semaphore in all contexts in which this code block > might be called. > This code block is called only from the workqueue handler, which runs in process context, so it is legal to take rtnl semaphore. Tested this code by simulating event interrupts (which schedule this code) at considerable frequency while the interface was brought up and down in a loop. Similar stress testing had revealed the bug originally. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Shreyas Bhatewara <sbhatewara@vmware.com> Date: Fri, 16 Jul 2010 01:17:29 -0700 (PDT) > > > On Thu, 15 Jul 2010, David Miller wrote: > >> From: Shreyas Bhatewara <sbhatewara@vmware.com> >> Date: Thu, 15 Jul 2010 18:20:52 -0700 (PDT) >> >> > Is this what you suggest : >> > >> > --- >> > >> > Hold rtnl_lock to get the right link state. >> >> It ought to work, but make sure that it is legal to take the >> RTNL semaphore in all contexts in which this code block >> might be called. >> > > This code block is called only from the workqueue handler, which runs in > process context, so it is legal to take rtnl semaphore. > Tested this code by simulating event interrupts (which schedule this > code) at considerable frequency while the interface was brought up and > down in a loop. Similar stress testing had revealed the bug originally. Awesome, please submit this formally. The copy you sent lacked a commit message and signoff. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index 1b0ce8c..c4d7e42 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c @@ -2420,6 +2420,7 @@ vmxnet3_reset_work(struct work_struct *data) return; /* if the device is closed, we must leave it alone */ + rtnl_lock(); if (netif_running(adapter->netdev)) { printk(KERN_INFO "%s: resetting\n", adapter->netdev->name); vmxnet3_quiesce_dev(adapter); @@ -2428,6 +2429,7 @@ vmxnet3_reset_work(struct work_struct *data) } else { printk(KERN_INFO "%s: already closed\n", adapter->netdev->name); } + rtnl_unlock(); clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state); }