What's the latest on fixing IFF_DRV_OACTIVE/if_start/etc?

John Baldwin jhb at freebsd.org
Mon Sep 17 17:16:50 UTC 2012


On Monday, September 17, 2012 11:49:59 am Ryan Stone wrote:
> I know that there have been a lot of discussions about fixing how
> packets are handed off to ifnets due to the current methods being
> extremely race-prone.  Has there been any consensus on how the problem
> is going to be solved?
> 
> In my particular case, I've seen an if_bridge interface whose if_snd
> queue is full, and once an ifnet reaches that point it will never
> transmit anything ever again unless its driver manually calls the
> start method somehow.
> 
> As a short-term fix I'm temped to call to if_start in IFQ_HANDOFF_ADJ
> even if IFQ_ENQUEUE returns an error, to ensure that the queue will be
> drained eventually, but I'm wondering if people are actively working
> on longer-term fixes.

I think for if_bridge the fix is that it no longer uses if_start. :)

For real hardware you will get some sort of TX completion interrupt that will 
restart the transmit queue.  Virtual software-only interfaces such as vlan(4)
and if_bridge(4) don't have that luxury though, and the best bet for them is
to probably have them use if_transmit instead.  vlan(4) and if_bridge(4) are
already fixed for that (if_bridge was only fixed a week or so ago in HEAD).

-- 
John Baldwin


More information about the freebsd-net mailing list