diff mbox

[net-next] r8169: Serialise some operations from open close

Message ID 20150714202311.GA5189@192-168-0-3.rdsnet.ro
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

Corcodel Marian July 14, 2015, 8:23 p.m. UTC
This is a multi-part message in MIME format.
--------------mine-boundary-string
Content-Type: text/plain; charset=UTF-8; format=fixed
Content-Transfer-Encoding: 8bit


Serialize some operations from open close function especial when write
read from main structure(struct rtl8169_private).Ensure that alls op is
executed.On slow proc this is good.
 Committer: Corcodel Marian <corcodel.marian@gmail.com>

 On branch master
 Your branch is ahead of 'origin/master' by 14 commits.
   (use "git push" to publish your local commits)

 Changes to be committed:
	modified:   drivers/net/ethernet/realtek/r8169.c

Signed-off-by: Corcodel Marian <asu@192-168-0-3.rdsnet.ro>
---
 drivers/net/ethernet/realtek/r8169.c | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)


--------------mine-boundary-string
Content-Type: text/x-patch; name="0001-Signed-off-by-Corcodel-Marian-corcodel.marian-gmail..patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0001-Signed-off-by-Corcodel-Marian-corcodel.marian-gmail..patch"


--------------mine-boundary-string--


--
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

Comments

David Miller July 14, 2015, 9:29 p.m. UTC | #1
Please do not post patches as attachments.

Instead, inline them as unmolested ASCII text in the main message
body along with your commit message.

From Documentation/email-clients.txt:

====================
General Preferences
----------------------------------------------------------------------
Patches for the Linux kernel are submitted via email, preferably as
inline text in the body of the email.  Some maintainers accept
attachments, but then the attachments should have content-type
"text/plain".  However, attachments are generally frowned upon because
it makes quoting portions of the patch more difficult in the patch
review process.
====================
--
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
Francois Romieu July 14, 2015, 11:40 p.m. UTC | #2
Corcodel Marian <corcodel.marian@gmail.com> :
[...]
> diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
> index 410c1ee..be67873 100644
> --- a/drivers/net/ethernet/realtek/r8169.c
> +++ b/drivers/net/ethernet/realtek/r8169.c
> @@ -7555,11 +7555,13 @@ static int rtl8169_close(struct net_device *dev)
>  
>  	rtl_lock_work(tp);
>  	clear_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
> -
> -	rtl8169_down(dev);
>  	rtl_unlock_work(tp);
>  
> +	rtl8169_down(dev);
> +	//rtl_unlock_work(tp);
> +        rtl_lock_work(tp);
>  	cancel_work_sync(&tp->wk.work);
> +	rtl_unlock_work(tp);
>  
>  	free_irq(pdev->irq, dev);

tab/spaces mix. Stray commented code.

rtl_lock_work/cancel_work_sync/rtl_unlock_work makes no sense.

[...]
> @@ -7611,10 +7614,12 @@ static int rtl_open(struct net_device *dev)
>  	if (retval < 0)
>  		goto err_free_rx_1;
>  
> +        rtl_lock_work(tp);
>  	INIT_WORK(&tp->wk.work, rtl_task);
> -
> +        rtl_unlock_work(tp);
>  	smp_mb();

?

Irq has not been requested : this code isn't racing with NAPI.

I don't see either how it could race with a runtime resume handler.

Care to elaborate what it is supposed to race with ?

>  
> +        rtl_lock_work(tp);
>  	rtl_request_firmware(tp);
>  
>  	retval = request_irq(pdev->irq, rtl8169_interrupt,
> @@ -7623,7 +7628,7 @@ static int rtl_open(struct net_device *dev)
>  	if (retval < 0)
>  		goto err_release_fw_2;

You forgot to balance rtl_lock_work after the err_release_fw_2 label.

:o/
Corcodel Marian July 15, 2015, 8:12 a.m. UTC | #3
This it.On me rtl 8101/8102 start now an full duplex with maximum
speed , some times need to restart autoneg in order to start .After
mutex_init access on main structure(struct rtl8169_private)  have only
on mutex_lock , mutex_unlock.

2015-07-15 2:40 GMT+03:00 Francois Romieu <romieu@fr.zoreil.com>:
> Corcodel Marian <corcodel.marian@gmail.com> :
> [...]
>> diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
>> index 410c1ee..be67873 100644
>> --- a/drivers/net/ethernet/realtek/r8169.c
>> +++ b/drivers/net/ethernet/realtek/r8169.c
>> @@ -7555,11 +7555,13 @@ static int rtl8169_close(struct net_device *dev)
>>
>>       rtl_lock_work(tp);
>>       clear_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
>> -
>> -     rtl8169_down(dev);
>>       rtl_unlock_work(tp);
>>
>> +     rtl8169_down(dev);
>> +     //rtl_unlock_work(tp);
>> +        rtl_lock_work(tp);
>>       cancel_work_sync(&tp->wk.work);
>> +     rtl_unlock_work(tp);
>>
>>       free_irq(pdev->irq, dev);
>
> tab/spaces mix. Stray commented code.
>
> rtl_lock_work/cancel_work_sync/rtl_unlock_work makes no sense.
>
> [...]
>> @@ -7611,10 +7614,12 @@ static int rtl_open(struct net_device *dev)
>>       if (retval < 0)
>>               goto err_free_rx_1;
>>
>> +        rtl_lock_work(tp);
>>       INIT_WORK(&tp->wk.work, rtl_task);
>> -
>> +        rtl_unlock_work(tp);
>>       smp_mb();
>
> ?
>
> Irq has not been requested : this code isn't racing with NAPI.
>
> I don't see either how it could race with a runtime resume handler.
>
> Care to elaborate what it is supposed to race with ?
>
>>
>> +        rtl_lock_work(tp);
>>       rtl_request_firmware(tp);
>>
>>       retval = request_irq(pdev->irq, rtl8169_interrupt,
>> @@ -7623,7 +7628,7 @@ static int rtl_open(struct net_device *dev)
>>       if (retval < 0)
>>               goto err_release_fw_2;
>
> You forgot to balance rtl_lock_work after the err_release_fw_2 label.
>
> :o/
>
> --
> Ueimor
--
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 mbox

Patch

diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 410c1ee..be67873 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -7555,11 +7555,13 @@  static int rtl8169_close(struct net_device *dev)
 
 	rtl_lock_work(tp);
 	clear_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
-
-	rtl8169_down(dev);
 	rtl_unlock_work(tp);
 
+	rtl8169_down(dev);
+	//rtl_unlock_work(tp);
+        rtl_lock_work(tp);
 	cancel_work_sync(&tp->wk.work);
+	rtl_unlock_work(tp);
 
 	free_irq(pdev->irq, dev);
 
@@ -7567,9 +7569,10 @@  static int rtl8169_close(struct net_device *dev)
 			  tp->RxPhyAddr);
 	dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
 			  tp->TxPhyAddr);
+	rtl_lock_work(tp);
 	tp->TxDescArray = NULL;
 	tp->RxDescArray = NULL;
-
+        rtl_unlock_work(tp);
 	pm_runtime_put_sync(&pdev->dev);
 
 	return 0;
@@ -7611,10 +7614,12 @@  static int rtl_open(struct net_device *dev)
 	if (retval < 0)
 		goto err_free_rx_1;
 
+        rtl_lock_work(tp);
 	INIT_WORK(&tp->wk.work, rtl_task);
-
+        rtl_unlock_work(tp);
 	smp_mb();
 
+        rtl_lock_work(tp);
 	rtl_request_firmware(tp);
 
 	retval = request_irq(pdev->irq, rtl8169_interrupt,
@@ -7623,7 +7628,7 @@  static int rtl_open(struct net_device *dev)
 	if (retval < 0)
 		goto err_release_fw_2;
 
-	rtl_lock_work(tp);
+	//rtl_lock_work(tp);
 
 	set_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
 
@@ -7634,17 +7639,21 @@  static int rtl_open(struct net_device *dev)
        //__rtl8169_set_features(dev, dev->features);
 
 	rtl_pll_power_up(tp);
+	rtl_unlock_work(tp);
 
 	rtl_hw_start(dev);
 
 	netif_start_queue(dev);
 
-	rtl_unlock_work(tp);
-
+	rtl_lock_work(tp);
 	tp->saved_wolopts = 0;
-	pm_runtime_put_noidle(&pdev->dev);
+	rtl_unlock_work(tp);
 
+	pm_runtime_put_noidle(&pdev->dev)
+		;
+        rtl_lock_work(tp);
 	rtl8169_check_link_status(dev, tp, ioaddr);
+	rtl_unlock_work(tp);
 out:
 	return retval;