Author: loos
Date: Thu Dec  1 02:35:15 2016
New Revision: 309345
URL: https://svnweb.freebsd.org/changeset/base/309345

Log:
  The RX_FREEBUFFER registers are a write to increment field.
  
  Writing the full queue size to it every time was makeing it overflow with a
  lot of bogus values.
  
  This fixes the interrupt storms on irq 40.
  
  Sponsored by: Rubicon Communications, LLC (Netgate)

Modified:
  head/sys/arm/ti/cpsw/if_cpsw.c

Modified: head/sys/arm/ti/cpsw/if_cpsw.c
==============================================================================
--- head/sys/arm/ti/cpsw/if_cpsw.c      Thu Dec  1 02:21:36 2016        
(r309344)
+++ head/sys/arm/ti/cpsw/if_cpsw.c      Thu Dec  1 02:35:15 2016        
(r309345)
@@ -1760,7 +1760,7 @@ cpsw_rx_enqueue(struct cpsw_softc *sc)
        sc->rx.queue_adds += added;
        sc->rx.avail_queue_len -= added;
        sc->rx.active_queue_len += added;
-       cpsw_write_4(sc, CPSW_CPDMA_RX_FREEBUFFER(0), sc->rx.active_queue_len);
+       cpsw_write_4(sc, CPSW_CPDMA_RX_FREEBUFFER(0), added);
        if (sc->rx.active_queue_len > sc->rx.max_active_queue_len) {
                sc->rx.max_active_queue_len = sc->rx.active_queue_len;
        }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to