ixgbe rx & tx locks

John Baldwin jhb at freebsd.org
Thu Aug 16 21:37:00 UTC 2012


On Thursday, August 16, 2012 8:35:53 am John Baldwin wrote:
> On Monday, August 13, 2012 6:17:53 pm Jack Vogel wrote:
> > After looking at the code again I think this is just what's happening,
> > mq_start
> > will schedule the task when it can't get the lock (due to the interrupt
> > already
> > holding it presumeably), so you get the tasklet code in contention with the
> > interrupt.
> > 
> > Anyone with a clever notion of how to do things better?
> 
> Are you queueing a task that does both RX and TX?  That was a bug I fixed
> in igb that caused out-of-order packet processing for RX with igb.  igb
> uses a smaller task for when it's start routine fails that only tries to
> restart transmission but doesn't do fullblown interrupt handling.
> 
> Here's a possible patch (compiles, not run-tested) to implement this for 
> ixgbe:
> 
> http://www.FreeBSD.org/~jhb/patches/ixgbe_txq_task.patch

Actually, it looks like recent changes to the watchdog handling have
reintroduced a variant of this bug.  They schedule the full RX/TX task
to run anytime the timer fires and there are pending TX completions
that are in progress.  This seems a bit odd as in the normal case you
will get a TX completion interrupt once there is something to do.  OTOH,
it adds another instance of duplicate RX processing which is much worse
than what this is trying to fix.  I've updated this patch to disable
that bit of the watchdog handler in both igb and ixgbe:

http://www.FreeBSD.org/~jhb/patches/ixgbe_txq_task2.patch

-- 
John Baldwin


More information about the freebsd-net mailing list