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

Reply via email to