Merge remote-tracking branch 'upstream/master' into passive_receive_adrian
It turns out that prior to running pthread tls destructors, the
current value stored under the given key is set to NULL, so any
attempt to retrieve the key value in the destructor (yes, it is passed
in as an argument, but...subroutines) yields a NULL.  This is now
worked around by setting the key value anew in the destructor, then
setting it back to NULL prior to exit.

Also fixed a bug where the uma tls destructor would have tried to
drain the local caches with a NULL zone pointer due to being called
before the first allocation by that thread in the given zone.
Packet interface output bytes were being double-counted in the
statistics.
Merge remote-tracking branch 'upstream/master' into passive_receive_adrian
Now that uma zones are properly fast, allocate MTAG_PROMISCINET m_tags
from a zone instead of using the default m_tag malloc allocation.
Zone allocations are several times faster than malloc(), and one of
these tags is allocated and freed for every inbound and outbound
packet on promiscuous-inet mode interfaces, so this adds up to
noticeable savings.
Rework uinet_if_netmap transmit path, avoiding the inherent hazards in
using IFF_DRV_OACTIVE and IFQ_DRV_IS_EMPTY() and replacing
mutex_sleep()/wakeup() with a more efficient condition variable.
Merge remote-tracking branch 'upstream/master' into passive_receive_adrian