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;



Reply via email to