Hi Mark,
If you need a box for testing purpose on this issue.
I can provide you bug reports when I will get a spare box which trigger
the watchdog timeout.
In my case it's only with trunk device on failover mode so far.
Regards,
Alexis VACHETTE*
*
On 05/10/2015 22:45, Mark Kettenis wrote:
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;