Message ID | 20150714202311.GA5189@192-168-0-3.rdsnet.ro |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
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
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/
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 --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;
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