#18922: eth1 (ag71xx): transmit queue 0 timed out
------------------------+--------------------------------
Reporter: fpv2000@… | Owner: developers
Type: defect | Status: reopened
Priority: normal | Milestone: Chaos Calmer 15.05
Component: kernel | Version: Trunk
Resolution: | Keywords:
------------------------+--------------------------------
Changes (by ivaradi):
* status: closed => reopened
* resolution: fixed =>
Comment:
I have debugged the ksoftirqd storms I experienced (described earlier)
with the latest fixes.
It turned out, that during such storms ag71xx_poll() is called repeatedly.
It does nothing most of the time, however, the TX_STATUS_PS bit is
constantly set, so it stays in polling mode.
Further analysis revealed the reason to be that ag71xx_tx_packets() is
called with flush set to true. In this case it basically sets the dirty
pointer to the current one. However, the DMA descriptors still remain
there in a non-empty state and are eventually transmitted. This increments
the sent packet counter, which is then never decremented, because the ring
is empty. Of course, if new packets arrive, the counter is incremented
then decremented, but the initial increment remains there. This causes the
TX_STATUS_PS bit to remain in 1. I guess, the counter sometimes overflows
and thus the bit can eventually reset, causing the softirq storm to
disappear. But it depends on what kind of traffic there is and how fast
the kernel processes the packets, so the storm can last indefinitely even.
Now, I think a possible solution could be to mark the descriptors EMPTY
when flushing, then issuing a wmb() and decrement the counter as many
times as the number of descriptors processed.
However, I am wondering if this flushing is actually needed. The packets
seem to be transmitted anyway, and do not seem to cause any trouble.
--
Ticket URL: <https://dev.openwrt.org/ticket/18922#comment:37>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets