On Tue, Nov 8, 2011 at 10:21 AM, Hooman Fazaeli <hoomanfaza...@gmail.com>wrote:
> I have allocated more time to the problem and guess I can explain what > your problem is. > > With MSIX disabled, the driver uses fast interrupt handler (em_irq_fast) > which calls rx/tx task and then checks for link status change. This > implies that rx/tx task is executed with every link state change. This is > not efficient, as it is a waste of time to start transmission when link is > down. > However, it has the effect that after a temporary link loss > (active->inactive->active), > _start is executed and transmission continues normally. The value of > link_toggles (3) > clearly indicates that you had such a transition when the problem occured. > > With MSIX enabled, the link task (em_handle_link) does _not_ triggers > _start when the link changes state from inactive to active (which it > should). > If if_snd quickly fills up during a temporary link loss, transmission is > stopped forever and the driver never recovers from that state. > > The last patch should have reduced the frequency of the problem > but it assumes every IFQ_ENQUEUE is followed by a if_start which > is not a true assumption. > > If you are willing to test, I can prepare another patch for you to fix > the issue in a different and more reliable way. > > Hooman, Thanks again for the assist, it sounds like this may also be why we see a bit higher latency with MSI-X disabled on this chipset. I'm happy to test any patches as I have a handful of boxes set aside to 'research' this issue. Hopefully the testing here helps along any patches to the tree for others benefit also. Jason _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"