Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp577246imj; Sat, 9 Feb 2019 03:52:39 -0800 (PST) X-Google-Smtp-Source: AHgI3IaWWjqRRMOYoDI9UA85XoXC93tRdDDLio0wQMyaR1klBA6I/7wS/2aH7Gdnwsp+UXY8uW1y X-Received: by 2002:a63:295:: with SMTP id 143mr9566141pgc.362.1549713159856; Sat, 09 Feb 2019 03:52:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549713159; cv=none; d=google.com; s=arc-20160816; b=AUaxW0pXht0+LMSVTKSdmNAe8olj2TaQtSW2N04im7j25wrSnJV82LseQNnK05H+3M 2v2C2tW7B7TRqFSVLMYE0v2dMm+0TSaICZbIM+D7zzXg5ycjTo0YcD8XY6VOfxVps5yY 70pBVe8cYSiotBGLROT1HzPIH8CBimUh7g/IEvIsFNrROrekvnxyZpWdLDU7je5CArBk LjxJZdT/jXsq16p1d2BLpvj1D4V04gntFaYFXP+++h4nW7J38d5hgLSJN8P2ozxYs++B /GKLhfIRfTtX+wkvRxXLbP4PmnpRWhglgRkOkxeZN2HBNtsDHI+B5VC273+obMEVm/zE Znlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=bSUUYBlanP9nIDRmrIFACNR9KpJW0mr0GVpI2Y34ctk=; b=TiHSy+wNVZqQTqXLbOi1zdvu+XFH0S/7kDTAUMNmNcP+ALSKZElkhqpkBePYqT8vg6 1nCsL+iAgN08bFdk1FIF6VkLioarg7MpdzNriwZxSZPlUCzVTAcVWC+ZPq1u4AYtSnCA A8jEaCUc6BeSvZ53gi5n3cBSrErvgf7TGYntngCrVHAcZTj4LCe7+Aqlc7HUyEjSjyAG wcWLyAym0ww58isuCZuQbpFpVJNOEev1XFQQru9E3LErlSp4I5gpYkygxYJAEw9E/I55 Hge2YxBoZJbGKOrT7/32rwyjStGJMu1GfM+vxwp30iipX50FeIsr5NeM+Nz9fmK24szT NxKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=cJnHneK2; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g33si5223414plb.426.2019.02.09.03.51.57; Sat, 09 Feb 2019 03:52:39 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=cJnHneK2; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726858AbfBILuN (ORCPT + 99 others); Sat, 9 Feb 2019 06:50:13 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:35767 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726670AbfBILuN (ORCPT ); Sat, 9 Feb 2019 06:50:13 -0500 Received: by mail-wm1-f66.google.com with SMTP id t200so7952453wmt.0; Sat, 09 Feb 2019 03:50:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=bSUUYBlanP9nIDRmrIFACNR9KpJW0mr0GVpI2Y34ctk=; b=cJnHneK2nhlzeuM3/2TGjfyPyt+0e1GD1FIYPQa1gSNGTbv5EqkO9+Mvx8ruivJFOg 1jBp8511G1dTzbZXyUbZGcwOAwLMKDoJ0vBjEtCN/9U9dRbC9ataieqR6T2NeBS+l/4d KXM3VQJomdDMKtsofMjHTXgBQV7ull9zyqYDR/m5S8riRh5cDczNd93wzElDLhnovljC B/7CdT4Z+j/wVUzDXye2DcYFoifyfxVtJ3R8fgIMNYM01a2JTL6H8iQymlABqSKPpQB/ E3YlU2G4/bu/MuaEVpiHDYBS5oxd36D1jNI21UdijmOepZIl+m3C2UN/BzDPizkv9U9h f2KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=bSUUYBlanP9nIDRmrIFACNR9KpJW0mr0GVpI2Y34ctk=; b=M1TMyN8D+ElyW7kelBde+uRH994tAjfNkjeZ81jOLRHMRViqn4tTLJ1H92OB0gDTRo mUYUJUaA7sTAY1VLyLccWWUu7+UNAv/le9fHq8DtWkd2VNYEoLYOJlxbPOO3lrRpaij/ I8EYaajIA3oE/2x6drQn16BGjcI9EygIxCZ04AkqgwRHZos2+i9aCmCkfV96xHHqFtPc js2X+GlZlaT0068Y+jqaKN4DeJLMmgs3QjWlaro1nAY3ndnz5tbnY4QxaR69MMALF60d Gmmzn+gkjL4gUK0FiNeNByo7jIXhTSGljXQrAR+2A/BWjlhNPPojmtUysK1TRluEVb6A NFeQ== X-Gm-Message-State: AHQUAubGYeJRFZQizmlINQu+dhg0AU+re3YfIPP34OgtEnKg9B1p3HGM g5pVeBaxXI5aEgR/LkvafvxRZyIN X-Received: by 2002:a7b:ce8e:: with SMTP id q14mr2807585wmj.10.1549713009395; Sat, 09 Feb 2019 03:50:09 -0800 (PST) Received: from ?IPv6:2003:ea:8bf1:e200:aca4:3d:8205:4c97? (p200300EA8BF1E200ACA4003D82054C97.dip0.t-ipconnect.de. [2003:ea:8bf1:e200:aca4:3d:8205:4c97]) by smtp.googlemail.com with ESMTPSA id t9sm2236027wrx.73.2019.02.09.03.50.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 09 Feb 2019 03:50:08 -0800 (PST) Subject: Re: Linux 5.0 regression: rtl8169 / kernel BUG at lib/dynamic_queue_limits.c:27! To: Sander Eikelenboom , Eric Dumazet , Realtek linux nic maintainers , Eric Dumazet Cc: Linus Torvalds , linux-kernel , netdev References: <6c389fde-4c8d-300b-8c3c-300d6105c30a@eikelenboom.it> <0f605e50-56fe-06b5-9b66-6aed89a608ce@gmail.com> <471e550b-c227-22e6-19fd-5f9abd450e5f@eikelenboom.it> <1265d424-4943-e571-a74b-b1512ebec179@gmail.com> <059e59c6-2264-fd5c-068f-3656e39539c1@eikelenboom.it> <140d0df7-1775-5457-aa03-b21ece250a72@gmail.com> <6b4e8aa0-03c5-c0a8-439e-77daabb07416@eikelenboom.it> <70e9a3fe-158a-c3a2-a427-2343bc6c9031@gmail.com> <88b80a6b-42e0-ce4e-8aad-4e23a17c7e65@eikelenboom.it> From: Heiner Kallweit Message-ID: <824acd0b-920c-7554-4a63-d80c7de2a8b6@gmail.com> Date: Sat, 9 Feb 2019 12:50:03 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.5.0 MIME-Version: 1.0 In-Reply-To: <88b80a6b-42e0-ce4e-8aad-4e23a17c7e65@eikelenboom.it> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09.02.2019 11:07, Sander Eikelenboom wrote: > On 09/02/2019 10:59, Heiner Kallweit wrote: >> On 09.02.2019 10:34, Sander Eikelenboom wrote: >>> On 09/02/2019 10:02, Heiner Kallweit wrote: >>>> On 09.02.2019 00:09, Eric Dumazet wrote: >>>>> >>>>> >>>>> On 02/08/2019 01:50 PM, Heiner Kallweit wrote: >>>>>> On 08.02.2019 22:45, Sander Eikelenboom wrote: >>>>>>> On 08/02/2019 22:22, Heiner Kallweit wrote: >>>>>>>> On 08.02.2019 21:55, Sander Eikelenboom wrote: >>>>>>>>> On 08/02/2019 19:52, Heiner Kallweit wrote: >>>>>>>>>> On 08.02.2019 19:29, Sander Eikelenboom wrote: >>>>>>>>>>> L.S., >>>>>>>>>>> >>>>>>>>>>> While testing a linux 5.0-rc5 kernel (with some patches on top but they don't seem related) under Xen i the nasty splat below, >>>>>>>>>>> that I haven encountered with Linux 4.20.x. >>>>>>>>>>> >>>>>>>>>>> Unfortunately I haven't got a clear reproducer for this and bisecting could be nasty due to another (networking related) kernel bug. >>>>>>>>>>> >>>>>>>>>>> If you need more info, want me to run a debug patch etc., please feel free to ask. >>>>>>>>>>> >>>>>>>>>> Thanks for the report. However I see no change in the r8169 driver between >>>>>>>>>> 4.20 and 5.0 with regard to BQL code. Having said that the root cause could >>>>>>>>>> be somewhere else. Therefore I'm afraid a bisect will be needed. >>>>>>>>> >>>>>>>>> Hmm i did some diging and i think: >>>>>>>>> bd7153bd83b806bfcc2e79b7a6f43aa653d06ef3 r8169: remove unneeded mmiowb barriers >>>>>>>>> 2e6eedb4813e34d8d84ac0eb3afb668966f3f356 r8169: make use of xmit_more and __netdev_sent_queue >>>>>>>>> 620344c43edfa020bbadfd81a144ebe5181fc94f net: core: add __netdev_sent_queue as variant of __netdev_tx_sent_queue >>>>>>>>> >>>>>>>> You're right. Thought this was added in 4.20 already. >>>>>>>> The BQL code pattern I copied from the mlx4 driver and so far I haven't heard about >>>>>>>> this issue from any user of physical hw. And due to the fact that a lot of mainboards >>>>>>>> have onboard Realtek network I have quite a few testers out there. >>>>>>>> Does the issue occur under specific circumstances like very high load? >>>>>>> >>>>>>> Yep, the box is already quite contented with the Xen VM's and if I remember correctly it occurred while kernel compiling >>>>>>> on the host. >>>>>>> >>>>>>>> If indeed the xmit_more patch causes the issue, I think we have to involve Eric Dumazet >>>>>>>> as author of the underlying changes. >>>>>>> >>>>>>> It could also be the barriers weren't that unneeded as assumed. >>>>>> >>>>>> The barriers were removed after adding xmit_more handling. Therefore it would be good to >>>>>> test also with only >>>>>> bd7153bd83b806bfcc2e79b7a6f43aa653d06ef3 r8169: remove unneeded mmiowb barriers >>>>>> removed. >>>>>> >>>>>>> Since we are almost at RC6 i took the liberty to CC Eric now. >>>>>>> >>>>>> Sure, thanks. >>>>>> >>>>>>> BTW am i correct these patches are merely optimizations ? >>>>>> >>>>>> Yes >>>>>> >>>>>>> If so and concluding they revert cleanly, perhaps it should be considered at this point in the RC's >>>>>>> to revert them for 5.0 and try again for 5.1 ? >>>>>>> >>>>>> Before removing both it would be good to test with only the barrier-removal removed. >>>>>> >>>>> >>>>> Commit 2e6eedb4813e34d8d84ac0eb3afb668966f3f356 r8169: make use of xmit_more and __netdev_sent_queue >>>>> looks buggy to me, since the skb might have been freed already on another cpu when you call >>>>> >>>>> You could try : >>>>> >>>>> diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c >>>>> index 3624e67aef72c92ed6e908e2c99ac2d381210126..f907d484165d9fd775e81bf2bfb9aa4ddedb1c93 100644 >>>>> --- a/drivers/net/ethernet/realtek/r8169.c >>>>> +++ b/drivers/net/ethernet/realtek/r8169.c >>>>> @@ -6070,6 +6070,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, >>>>> dma_addr_t mapping; >>>>> u32 opts[2], len; >>>>> bool stop_queue; >>>>> + bool door_bell; >>>>> int frags; >>>>> >>>>> if (unlikely(!rtl_tx_slots_avail(tp, skb_shinfo(skb)->nr_frags))) { >>>>> @@ -6116,6 +6117,8 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, >>>>> /* Force memory writes to complete before releasing descriptor */ >>>>> dma_wmb(); >>>>> >>>>> + door_bell = __netdev_sent_queue(dev, skb->len, skb->xmit_more); >>>>> + >>>>> txd->opts1 = rtl8169_get_txd_opts1(opts[0], len, entry); >>>>> >>>>> /* Force all memory writes to complete before notifying device */ >>>>> @@ -6127,7 +6130,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, >>>>> if (unlikely(stop_queue)) >>>>> netif_stop_queue(dev); >>>>> >>>>> - if (__netdev_sent_queue(dev, skb->len, skb->xmit_more)) { >>>>> + if (door_bell) { >>>>> RTL_W8(tp, TxPoll, NPQ); >>>>> mmiowb(); >>>>> } >>>>> >>>> Thanks a lot for checking and for the proposed fix. >>>> Sander, can you try with this patch on top of 5.0-rc5 w/o removing two two commits? >>> >>> I have done that already during the night .. the results: >>> - I can confirm 2e6eedb4813e34d8d84ac0eb3afb668966f3f356 is the first commit which causes hitting the BUG_ON in lib/dynamic_queue_limits.c. >>> (in other word, with only reverting bd7153bd83b806bfcc2e79b7a6f43aa653d06ef3 it still blows up). >>> >>> - The Eric's patch only applies cleanly with bd7153bd83b806bfcc2e79b7a6f43aa653d06ef3 reverted, so that's what I tested. >>> The patch seems to prevent hitting the BUG_ON in lib/dynamic_queue_limits.c, it has run this night and I gave done a few kernel compiles >>> this morning. How ever during these kernel compiles i'm getting a transmit queue timeout which i haven't seen with 4.20.x, although i regularly >>> compile kernels in the same way as I do now. The only thing I can't say if that is due to this change, or if it's again something else. >>> Which makes me somewhat inclined to go testing the complete revert some more and see if I can trigger the queue timeout on that or not. >>> >>> If I can, it is a separate issue. >>> If I can't it seems even with a patch it still seems as a regression in comparison with 4.20.x, for which >>> a revert would be the right thing to do (since as you indicated these are merely optimizations), >>> which would give us more time for 5.1 to try to solve things on top of the 5.0-release-to-be. >>> (especially since I seem to still have other issues which need to be sorted out and time is limited) >>> >>> The timeout in question: >>> [28336.869479] NETDEV WATCHDOG: eth1 (r8169): transmit queue 0 timed out >>> [28336.881498] WARNING: CPU: 0 PID: 6925 at net/sched/sch_generic.c:461 dev_watchdog+0x20b/0x210 >>> [28336.893358] Modules linked in: >>> [28336.904106] CPU: 0 PID: 6925 Comm: cc1 Tainted: G D 5.0.0-rc5-20190208-thp-net-florian-rtl8169-eric-doflr+ #1 >>> [28336.917385] Hardware name: MSI MS-7640/890FXA-GD70 (MS-7640) , BIOS V1.8B1 09/13/2010 >>> [28336.928988] RIP: e030:dev_watchdog+0x20b/0x210 >>> [28336.940623] Code: 00 49 63 4e e0 eb 90 4c 89 e7 c6 05 ad d8 f1 00 01 e8 a9 32 fd ff 89 d9 48 89 c2 4c 89 e6 48 c7 c7 50 59 89 82 e8 e5 92 4d ff <0f> 0b eb c0 90 48 c7 47 08 00 00 00 00 48 c7 07 00 00 00 00 0f b7 >>> [28336.965265] RSP: e02b:ffff88807d403ea0 EFLAGS: 00010286 >>> [28336.977465] RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffffffff82a69db8 >>> [28336.991265] RDX: 0000000000000001 RSI: 0000000000000001 RDI: 0000000000000200 >>> [28337.008865] RBP: ffff88807936e41c R08: 0000000000000000 R09: 0000000000000819 >>> [28337.022250] R10: 0000000000000202 R11: ffffffff8247ca80 R12: ffff88807936e000 >>> [28337.035204] R13: 0000000000000000 R14: ffff88807936e440 R15: 0000000000000001 >>> [28337.049832] FS: 00007f53e9bf3840(0000) GS:ffff88807d400000(0000) knlGS:0000000000000000 >>> [28337.062524] CS: e030 DS: 0000 ES: 0000 CR0: 0000000080050033 >>> [28337.075086] CR2: 00007f53e60c4000 CR3: 000000001a0be000 CR4: 0000000000000660 >>> [28337.090052] Call Trace: >>> [28337.103615] >>> [28337.116587] ? qdisc_destroy+0x120/0x120 >>> [28337.128905] call_timer_fn+0x19/0x90 >>> [28337.141892] expire_timers+0x8b/0xa0 >>> [28337.153354] run_timer_softirq+0x7e/0x160 >>> [28337.165931] ? handle_irq_event_percpu+0x4c/0x70 >>> [28337.176548] ? handle_percpu_irq+0x32/0x50 >>> [28337.186734] __do_softirq+0xed/0x229 >>> [28337.196404] ? hypervisor_callback+0xa/0x20 >>> [28337.207822] irq_exit+0xb7/0xc0 >>> [28337.218978] xen_evtchn_do_upcall+0x27/0x40 >>> [28337.230763] xen_do_hypervisor_callback+0x29/0x40 >>> [28337.241261] >>> [28337.253283] RIP: e033:0xff7e62 >>> [28337.264899] Code: 35 43 0f c7 00 4c 89 ef e8 8b 6d 67 ff 0f 1f 00 44 89 e0 44 89 e2 c1 e8 06 83 e2 3f 48 8b 0c c5 40 8d c6 01 48 0f a3 d1 72 0e <48> 8b 04 c5 50 8d c6 01 48 0f a3 d0 73 0b 44 89 e6 4c 89 ef e8 b5 >>> [28337.288677] RSP: e02b:00007fff0fc6a340 EFLAGS: 00000202 >>> [28337.299234] RAX: 0000000000000000 RBX: 00007f53e60c3580 RCX: 0000000000000000 >>> [28337.309577] RDX: 0000000000000034 RSI: 0000000001e71a98 RDI: 00007fff0fc6a538 >>> [28337.320724] RBP: 00007fff0fc6a4b0 R08: 0000000000000000 R09: 0000000000000000 >>> [28337.331829] R10: 0000000000000001 R11: 00000000020cb3d0 R12: 0000000000000034 >>> [28337.343900] R13: 00007fff0fc6a538 R14: 0000000000000000 R15: 0000000000000001 >>> [28337.353977] ---[ end trace 6ff49f09286816b7 ]--- >>> >> Thanks for your efforts. As usual this tx timeout trace says basically nothing except >> "timeout" and root cause could be anything. Earlier you reported a memory allocation error, >> did that occur again? >> If we decide to revert, I'd leave removal of the memory barriers in (as it doesn't seem to >> contribute to the issue) and just submit a patch to effectively revert >> 2e6eedb4813e34d8d84ac0eb3afb668966f3f356. > > I can't say if that is correct, because i haven't tested that. > > Another thing I could test is: > - putting all the r8169 patches (and prerequisites) that went into 5.0 > up to bd7153bd83b806bfcc2e79b7a6f43aa653d06ef3, onto 4.20.7 and see what that does. > If that would be feasible (not too many needed prerequisites out of r8169) and if > you could spare me some time and prep such a branch somewhere so i can pull and compile that, > that would be great. > Unfortunately there's quite a number of changes. Regarding __netdev_tx_sent_queue() and watchdog timeout I found the following comment in drivers/net/ethernet/sfc/tx.c, efx_enqueue_skb(): if (__netdev_tx_sent_queue(tx_queue->core_txq, skb_len, xmit_more)) { struct efx_tx_queue *txq2 = efx_tx_queue_partner(tx_queue); /* There could be packets left on the partner queue if those * SKBs had skb->xmit_more set. If we do not push those they * could be left for a long time and cause a netdev watchdog. */ if (txq2->xmit_more_available) efx_nic_push_buffers(txq2); But I'm not sure whether the situation in r8169 is comparable. The following patch implements what I mentioned earlier: It leaves all other 5.0 changes in place and effectively reverts 2e6eedb4813e34d8d84ac0eb3afb668966f3f356. Would be great if you could give it a try. diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index e8a112149..3cca2ffb2 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -6192,7 +6192,6 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, struct device *d = tp_to_dev(tp); dma_addr_t mapping; u32 opts[2], len; - bool stop_queue; int frags; if (unlikely(!rtl_tx_slots_avail(tp, skb_shinfo(skb)->nr_frags))) { @@ -6234,6 +6233,8 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, txd->opts2 = cpu_to_le32(opts[1]); + netdev_sent_queue(dev, skb->len); + skb_tx_timestamp(skb); /* Force memory writes to complete before releasing descriptor */ @@ -6246,14 +6247,14 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, tp->cur_tx += frags + 1; - stop_queue = !rtl_tx_slots_avail(tp, MAX_SKB_FRAGS); - if (unlikely(stop_queue)) - netif_stop_queue(dev); - - if (__netdev_sent_queue(dev, skb->len, skb->xmit_more)) - RTL_W8(tp, TxPoll, NPQ); + RTL_W8(tp, TxPoll, NPQ); - if (unlikely(stop_queue)) { + if (!rtl_tx_slots_avail(tp, MAX_SKB_FRAGS)) { + /* Avoid wrongly optimistic queue wake-up: rtl_tx thread must + * not miss a ring update when it notices a stopped queue. + */ + smp_wmb(); + netif_stop_queue(dev); /* Sync with rtl_tx: * - publish queue status and cur_tx ring index (write barrier) * - refresh dirty_tx ring index (read barrier). -- 2.20.1