Mark Kettenis([email protected]) on 2010.11.27 20:12:14 +0100: > > Date: Fri, 12 Nov 2010 14:39:41 -0700 > > From: Theo de Raadt <[email protected]> > > > > commit. someone will eventually fix MCLGETI, since it is in the tree. > > The problem is that re(4) has a "forever" loop from which we only > escape if none of the RL_INTRS_CPLUS bits are set in the interrupt > status register. One of those is the "Rx Descriptor Unavailable" bit > (RL_ISR_RX_OVERRUN). So if we run out of populated descriptors and > can't allocate any new ones, we'll spin forever. Obviously chances of > that happening are much larger with MCLGETI, but it may also happen > without if you run out of mbufs. > > The diff below fixes the issue for me (first diff is relative to the > code before the backout, second diff includes a revert of the > backout). This makes sure we drop out of the interrupt handler such > that we have a chance to free some mbufs. None of the drivers I'm > familliar with have this loop that repeatedly reads the interrupt > status register. Except for vr(4), which seems to suffer from the > same problem as re(4) with MCLGETI. > > I did some tests with tcpbench(1) and it seems throughput is slightly > smaller (compared to non-MCLGETI), but the difference is less than 1%. > > I'd appreciate it if the people that experienced the issues can test > this diff (use the 2nd diff if you have a -current source tree).
Hi, i tested the patch against 4.8 (as that was easier to test atm). no more hangs. /Benno
