Intel 82574L interface wedging - em7.3.2/8.2-STABLE
John Baldwin
jhb at freebsd.org
Fri Mar 16 15:32:59 UTC 2012
On Thursday, March 15, 2012 7:41:09 pm Sean Bruno wrote:
>
> >
> > Hmm, so I have yet to test this, but I found several bugs related to
transmit
> > in em(4) and igb(4) recently just reading the code. (Mostly unnecessary
> > scheduling of tasks for transmit.) I've included your change of
restarting
> > TX when link becomes active. I've also updated it to fix resume for em
> > and igb to DTRT when buf_ring is used, and to not include old-style start
> > routines at all when using multiq. It is at
> > http://www.freebsd.org/~jhb/patches/e1000_txeof2.patch
> >
>
> I think that some of the code being removed originated from our universe
> over here at Yahoo. We were seeing the driver assert IFF_OACTIVE and
> never clearing out.
>
> Reviewing this patch at a glance I note that the check of IFF_OACTIVE
> was removed, if the kernel can get us out of that state without the
> IFF_OACTIVE checks, then I'm good with it.
Yes, it was buggy before in that it would just sit and poll unnecessarily.
The problem was that it wasn't actually kicking off retransmits in some cases
(e.g. igb_msix_que and em_msix_tx). That was the real cause of it hanging
on OACTIVE. The current code schedules more tasks as a much more expensive
workaround and I remove all that.
> Sean
>
> ref:
>
> @@ -1497,10 +1509,11 @@
> if (!drbr_empty(ifp, txr->br))
> em_mq_start_locked(ifp, txr, NULL);
> #else
> - em_start_locked(ifp, txr);
> + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
> + em_start_locked(ifp, txr);
> #endif
> EM_TX_UNLOCK(txr);
> - if (more || (ifp->if_drv_flags & IFF_DRV_OACTIVE)) {
> + if (more) {
> taskqueue_enqueue(adapter->tq, &adapter->que_task);
> return;
>
>
>
>
--
John Baldwin
More information about the freebsd-net
mailing list