From: "Li, ZhenHua" <zhen-hual@hp.com>
To: Sathya Perla <Sathya.Perla@Emulex.Com>
Cc: Subramanian Seetharaman <subbu.seetharaman@Emulex.Com>,
Ajit Khaparde <Ajit.Khaparde@Emulex.Com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"Li, ZhenHua" <zhen-hual@hp.com>
Subject: Re: [PATCH 1/1] driver/net: add missing rtnl lock/unlock for benet
Date: Tue, 15 Apr 2014 17:02:14 +0800 [thread overview]
Message-ID: <534CF596.3010609@hp.com> (raw)
In-Reply-To: <b4855c2a-5a63-47a5-ba61-f9ce736f6401@CMEXHTCAS1.ad.emulex.com>
Because netif_running() is called in netif_device_detach and
netif_device_attach. To avoid dev status changed while
netif_device_detach/attach is not finished, I think a rtnl_lock and
unlock should be called to avoid this.
Thanks
Zhenhua
On 04/15/2014 04:07 PM, Sathya Perla wrote:
>> -----Original Message-----
>> From: Li, Zhen-Hua [mailto:zhen-hual@hp.com]
>>
>> In benet driver, netif_device_detach and netif_device_attach should be
>> called between rtnl_lock and rtnl_unlock.
>
> Zhen, it's not clear to me why rtnl_lock is needed around netif_device_attach().
> Can you pls explain what exact data-structure you are protecting with the lock?
>
> Are you see warning stack trace? I don't see ASSERT_RTNL() called anywhere from netif_device_attach/detach()?
>
> thanks!
>
>>
>> Signed-off-by: Li, Zhen-Hua <zhen-hual@hp.com>
>> ---
>> drivers/net/ethernet/emulex/benet/be_main.c | 17 ++++++++++++++---
>> 1 file changed, 14 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/emulex/benet/be_main.c
>> b/drivers/net/ethernet/emulex/benet/be_main.c
>> index 3e6df47..9c44b3f 100644
>> --- a/drivers/net/ethernet/emulex/benet/be_main.c
>> +++ b/drivers/net/ethernet/emulex/benet/be_main.c
>> @@ -4555,8 +4555,11 @@ static void be_func_recovery_task(struct work_struct *work)
>> rtnl_unlock();
>>
>> status = lancer_recover_func(adapter);
>> - if (!status)
>> + if (!status) {
>> + rtnl_lock();
>> netif_device_attach(adapter->netdev);
>> + rtnl_unlock();
>> + }
>> }
>>
>> /* In Lancer, for all errors other than provisioning error (-EAGAIN),
>> @@ -4784,12 +4787,12 @@ static int be_suspend(struct pci_dev *pdev, pm_message_t
>> state)
>> be_intr_set(adapter, false);
>> cancel_delayed_work_sync(&adapter->func_recovery_work);
>>
>> + rtnl_lock();
>> netif_device_detach(netdev);
>> if (netif_running(netdev)) {
>> - rtnl_lock();
>> be_close(netdev);
>> - rtnl_unlock();
>> }
>> + rtnl_unlock();
>> be_clear(adapter);
>>
>> pci_save_state(pdev);
>> @@ -4804,7 +4807,9 @@ static int be_resume(struct pci_dev *pdev)
>> struct be_adapter *adapter = pci_get_drvdata(pdev);
>> struct net_device *netdev = adapter->netdev;
>>
>> + rtnl_lock();
>> netif_device_detach(netdev);
>> + rtnl_unlock();
>>
>> status = pci_enable_device(pdev);
>> if (status)
>> @@ -4832,7 +4837,9 @@ static int be_resume(struct pci_dev *pdev)
>>
>> schedule_delayed_work(&adapter->func_recovery_work,
>> msecs_to_jiffies(1000));
>> + rtnl_lock();
>> netif_device_attach(netdev);
>> + rtnl_unlock();
>>
>> if (adapter->wol_en)
>> be_setup_wol(adapter, false);
>> @@ -4853,7 +4860,9 @@ static void be_shutdown(struct pci_dev *pdev)
>> cancel_delayed_work_sync(&adapter->work);
>> cancel_delayed_work_sync(&adapter->func_recovery_work);
>>
>> + rtnl_lock();
>> netif_device_detach(adapter->netdev);
>> + rtnl_unlock();
>>
>> be_cmd_reset_function(adapter);
>>
>> @@ -4957,7 +4966,9 @@ static void be_eeh_resume(struct pci_dev *pdev)
>>
>> schedule_delayed_work(&adapter->func_recovery_work,
>> msecs_to_jiffies(1000));
>> + rtnl_lock();
>> netif_device_attach(netdev);
>> + rtnl_unlock();
>> return;
>> err:
>> dev_err(&adapter->pdev->dev, "EEH resume failed\n");
>> --
>> 1.7.10.4
>
next prev parent reply other threads:[~2014-04-15 9:03 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-15 6:45 [PATCH 1/1] driver/net: add missing rtnl lock/unlock for benet Li, Zhen-Hua
2014-04-15 8:07 ` Sathya Perla
2014-04-15 9:02 ` Li, ZhenHua [this message]
2014-04-15 11:57 ` Sathya Perla
2014-04-15 12:59 ` Li, Zhen-Hua
2014-04-15 12:59 ` Li, Zhen-Hua
2014-04-15 19:09 ` David Miller
2014-04-16 6:30 ` Li, ZhenHua
2014-04-16 7:09 ` Li, ZhenHua
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=534CF596.3010609@hp.com \
--to=zhen-hual@hp.com \
--cc=Ajit.Khaparde@Emulex.Com \
--cc=Sathya.Perla@Emulex.Com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=subbu.seetharaman@Emulex.Com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.