Several people seem to complain on misc@ that they're seeing watchdog timeouts on em(4). But none of them bother to submit a proper bug report to bugs@. Anyway, here is a diff that might fix the issue. Please test, even if you're not experiencing any problems.
Thanks, Mark Index: if_em.c =================================================================== RCS file: /home/cvs/src/sys/dev/pci/if_em.c,v retrieving revision 1.306 diff -u -p -r1.306 if_em.c --- if_em.c 30 Sep 2015 11:25:08 -0000 1.306 +++ if_em.c 5 Oct 2015 20:35:13 -0000 @@ -1210,12 +1210,6 @@ em_encap(struct em_softc *sc, struct mbu } } - sc->next_avail_tx_desc = i; - if (sc->pcix_82544) - atomic_sub_int(&sc->num_tx_desc_avail, txd_used); - else - atomic_sub_int(&sc->num_tx_desc_avail, map->dm_nsegs); - #if NVLAN > 0 /* Find out if we are in VLAN mode */ if (m_head->m_flags & M_VLANTAG) { @@ -1249,6 +1243,14 @@ em_encap(struct em_softc *sc, struct mbu tx_buffer = &sc->tx_buffer_area[first]; tx_buffer->next_eop = last; + membar_producer(); + + sc->next_avail_tx_desc = i; + if (sc->pcix_82544) + atomic_sub_int(&sc->num_tx_desc_avail, txd_used); + else + atomic_sub_int(&sc->num_tx_desc_avail, map->dm_nsegs); + /* * Advance the Transmit Descriptor Tail (Tdt), * this tells the E1000 that this frame is @@ -2377,6 +2379,8 @@ em_transmit_checksum_setup(struct em_sof tx_buffer->m_head = NULL; tx_buffer->next_eop = -1; + + membar_producer(); if (++curr_txd == sc->num_tx_desc) curr_txd = 0;