Patchwork pch_gbe: Fix the issue which a driver locks when rx offload is set by ethtool

login
register
mail settings
Submitter Toshiharu Okada
Date Feb. 8, 2011, 11:33 a.m.
Message ID <4D512A27.2030406@dsn.okisemi.com>
Download mbox | patch
Permalink /patch/82296/
State Rejected
Delegated to: David Miller
Headers show

Comments

Toshiharu Okada - Feb. 8, 2011, 11:33 a.m.
This driver will be in a deadlock, When the rx offload is set by ethtool.
So, The pch_gbe_reinit_locked function was modified.

Signed-off-by: Toshiharu Okada <toshiharu-linux@dsn.okisemi.com>
---
 drivers/net/pch_gbe/pch_gbe_main.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)
David Miller - Feb. 9, 2011, 12:40 a.m.
From: Toshiharu Okada <toshiharu-linux@dsn.okisemi.com>
Date: Tue, 08 Feb 2011 20:33:59 +0900

> @@ -531,12 +533,8 @@ void pch_gbe_reinit_locked(struct pch_gbe_adapter *adapter)
>  {
>  	struct net_device *netdev = adapter->netdev;
>  
> -	rtnl_lock();
> -	if (netif_running(netdev)) {
> -		pch_gbe_down(adapter);
> -		pch_gbe_up(adapter);
> -	}
> -	rtnl_unlock();
> +	pch_gbe_down(adapter);
> +	pch_gbe_up(adapter);

Are you sure you can just blindly delete the netif_running() check here?
--
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
Toshiharu Okada - Feb. 9, 2011, 2:04 a.m.
From: David Miller <davem@davemloft.net>
Date: Tue, 08 Feb 2011 16:40:30 -0800 (PST)

>> @@ -531,12 +533,8 @@ void pch_gbe_reinit_locked(struct pch_gbe_adapter 
>> *adapter)
>>  {
>>  struct net_device *netdev = adapter->netdev;
>>
>> - rtnl_lock();
>> - if (netif_running(netdev)) {
>> - pch_gbe_down(adapter);
>> - pch_gbe_up(adapter);
>> - }
>> - rtnl_unlock();
>> + pch_gbe_down(adapter);
>> + pch_gbe_up(adapter);
>
>Are you sure you can just blindly delete the netif_running() check here?

Yes, sure.
pch_gbe_reinit_locked() is called after confirming of netif_running() except 
for pch_gbe_reset_task() function.
This netif_running() was redundant.

Best regards
Toshiharu Okada(OKI semiconductor) 

--
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
David Miller - Feb. 9, 2011, 6:57 a.m.
From: "Toshiharu Okada" <toshiharu-linux@dsn.okisemi.com>
Date: Wed, 9 Feb 2011 11:04:11 +0900

> From: David Miller <davem@davemloft.net>
> Date: Tue, 08 Feb 2011 16:40:30 -0800 (PST)
> 
>>> @@ -531,12 +533,8 @@ void pch_gbe_reinit_locked(struct pch_gbe_adapter 
>>> *adapter)
>>>  {
>>>  struct net_device *netdev = adapter->netdev;
>>>
>>> - rtnl_lock();
>>> - if (netif_running(netdev)) {
>>> - pch_gbe_down(adapter);
>>> - pch_gbe_up(adapter);
>>> - }
>>> - rtnl_unlock();
>>> + pch_gbe_down(adapter);
>>> + pch_gbe_up(adapter);
>>
>>Are you sure you can just blindly delete the netif_running() check here?
> 
> Yes, sure.
> pch_gbe_reinit_locked() is called after confirming of netif_running() except 
> for pch_gbe_reset_task() function.
> This netif_running() was redundant.

Thanks for explaining, applied, thank you.
--
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
David Miller - Feb. 9, 2011, 7:04 a.m.
From: David Miller <davem@davemloft.net>
Date: Tue, 08 Feb 2011 22:57:02 -0800 (PST)

> From: "Toshiharu Okada" <toshiharu-linux@dsn.okisemi.com>
> Date: Wed, 9 Feb 2011 11:04:11 +0900
> 
>> From: David Miller <davem@davemloft.net>
>> Date: Tue, 08 Feb 2011 16:40:30 -0800 (PST)
>> 
>>>> @@ -531,12 +533,8 @@ void pch_gbe_reinit_locked(struct pch_gbe_adapter 
>>>> *adapter)
>>>>  {
>>>>  struct net_device *netdev = adapter->netdev;
>>>>
>>>> - rtnl_lock();
>>>> - if (netif_running(netdev)) {
>>>> - pch_gbe_down(adapter);
>>>> - pch_gbe_up(adapter);
>>>> - }
>>>> - rtnl_unlock();
>>>> + pch_gbe_down(adapter);
>>>> + pch_gbe_up(adapter);
>>>
>>>Are you sure you can just blindly delete the netif_running() check here?
>> 
>> Yes, sure.
>> pch_gbe_reinit_locked() is called after confirming of netif_running() except 
>> for pch_gbe_reset_task() function.
>> This netif_running() was redundant.
> 
> Thanks for explaining, applied, thank you.

Actually, I had to revert, this patch introduces an obvious compiler warning:

drivers/net/pch_gbe/pch_gbe_main.c: In function 'pch_gbe_reinit_locked':
drivers/net/pch_gbe/pch_gbe_main.c:533:21: warning: unused variable 'netdev'

Sloppy build issues like this reflects very poorly upon the patch
submitter.
--
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

Patch

diff --git a/drivers/net/pch_gbe/pch_gbe_main.c b/drivers/net/pch_gbe/pch_gbe_main.c
index 3248313..0e6922f 100644
--- a/drivers/net/pch_gbe/pch_gbe_main.c
+++ b/drivers/net/pch_gbe/pch_gbe_main.c
@@ -520,7 +520,9 @@  static void pch_gbe_reset_task(struct work_struct *work)
 	struct pch_gbe_adapter *adapter;
 	adapter = container_of(work, struct pch_gbe_adapter, reset_task);
 
+	rtnl_lock();
 	pch_gbe_reinit_locked(adapter);
+	rtnl_unlock();
 }
 
 /**
@@ -531,12 +533,8 @@  void pch_gbe_reinit_locked(struct pch_gbe_adapter *adapter)
 {
 	struct net_device *netdev = adapter->netdev;
 
-	rtnl_lock();
-	if (netif_running(netdev)) {
-		pch_gbe_down(adapter);
-		pch_gbe_up(adapter);
-	}
-	rtnl_unlock();
+	pch_gbe_down(adapter);
+	pch_gbe_up(adapter);
 }
 
 /**