svn commit: r205221 - head/sys/dev/bge

Pyun YongHyeon yongari at FreeBSD.org
Tue Mar 16 17:45:17 UTC 2010


Author: yongari
Date: Tue Mar 16 17:45:16 2010
New Revision: 205221
URL: http://svn.freebsd.org/changeset/base/205221

Log:
  Revert r205090.
  It's hard to know when the mail box register write will get flushed to
  the hardware and it may take longer.
  
  Pointed out by:	scottl

Modified:
  head/sys/dev/bge/if_bge.c

Modified: head/sys/dev/bge/if_bge.c
==============================================================================
--- head/sys/dev/bge/if_bge.c	Tue Mar 16 16:55:12 2010	(r205220)
+++ head/sys/dev/bge/if_bge.c	Tue Mar 16 17:45:16 2010	(r205221)
@@ -3654,22 +3654,6 @@ bge_intr(void *xsc)
 #endif
 
 	/*
-	 * Do the mandatory PCI flush as well as get the link status.
-	 */
-	statusword = CSR_READ_4(sc, BGE_MAC_STS) & BGE_MACSTAT_LINK_CHANGED;
-
-	/* Make sure the descriptor ring indexes are coherent. */
-	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
-	    sc->bge_cdata.bge_status_map,
-	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
-	rx_prod = sc->bge_ldata.bge_status_block->bge_idx[0].bge_rx_prod_idx;
-	tx_cons = sc->bge_ldata.bge_status_block->bge_idx[0].bge_tx_cons_idx;
-	sc->bge_ldata.bge_status_block->bge_status = 0;
-	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
-	    sc->bge_cdata.bge_status_map,
-	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
-
-	/*
 	 * Ack the interrupt by writing something to BGE_MBX_IRQ0_LO.  Don't
 	 * disable interrupts by writing nonzero like we used to, since with
 	 * our current organization this just gives complications and
@@ -3691,6 +3675,22 @@ bge_intr(void *xsc)
 	 */
 	bge_writembx(sc, BGE_MBX_IRQ0_LO, 0);
 
+	/*
+	 * Do the mandatory PCI flush as well as get the link status.
+	 */
+	statusword = CSR_READ_4(sc, BGE_MAC_STS) & BGE_MACSTAT_LINK_CHANGED;
+
+	/* Make sure the descriptor ring indexes are coherent. */
+	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
+	    sc->bge_cdata.bge_status_map,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+	rx_prod = sc->bge_ldata.bge_status_block->bge_idx[0].bge_rx_prod_idx;
+	tx_cons = sc->bge_ldata.bge_status_block->bge_idx[0].bge_tx_cons_idx;
+	sc->bge_ldata.bge_status_block->bge_status = 0;
+	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
+	    sc->bge_cdata.bge_status_map,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+
 	if ((sc->bge_asicrev == BGE_ASICREV_BCM5700 &&
 	    sc->bge_chipid != BGE_CHIPID_BCM5700_B2) ||
 	    statusword || sc->bge_link_evt)


More information about the svn-src-head mailing list