svn commit: r185255 - head/sys/dev/mxge

Andrew Gallatin gallatin at FreeBSD.org
Mon Nov 24 11:00:58 PST 2008


Author: gallatin
Date: Mon Nov 24 19:00:57 2008
New Revision: 185255
URL: http://svn.freebsd.org/changeset/base/185255

Log:
  Restore sfence semantics in mxge after the introduction
  of a global mfence based mb() in r185162

Modified:
  head/sys/dev/mxge/if_mxge.c
  head/sys/dev/mxge/if_mxge_var.h

Modified: head/sys/dev/mxge/if_mxge.c
==============================================================================
--- head/sys/dev/mxge/if_mxge.c	Mon Nov 24 17:39:39 2008	(r185254)
+++ head/sys/dev/mxge/if_mxge.c	Mon Nov 24 19:00:57 2008	(r185255)
@@ -731,9 +731,9 @@ mxge_load_firmware_helper(mxge_softc_t *
 		mxge_pio_copy(sc->sram + MXGE_FW_OFFSET + i,
 			      inflate_buffer + i,
 			      min(256U, (unsigned)(fw_len - i)));
-		mb();
+		wmb();
 		dummy = *sc->sram;
-		mb();
+		wmb();
 	}
 
 	*limit = fw_len;
@@ -766,7 +766,7 @@ mxge_dummy_rdma(mxge_softc_t *sc, int en
 	/* clear confirmation addr */
 	confirm = (volatile uint32_t *)sc->cmd;
 	*confirm = 0;
-	mb();
+	wmb();
 
 	/* send an rdma command to the PCIe engine, and wait for the
 	   response in the confirmation address.  The firmware should
@@ -788,9 +788,9 @@ mxge_dummy_rdma(mxge_softc_t *sc, int en
 	submit = (volatile char *)(sc->sram + MXGEFW_BOOT_DUMMY_RDMA);
 
 	mxge_pio_copy(submit, buf, 64);
-	mb();
+	wmb();
 	DELAY(1000);
-	mb();
+	wmb();
 	i = 0;
 	while (*confirm != 0xffffffff && i < 20) {
 		DELAY(1000);
@@ -828,7 +828,7 @@ mxge_send_cmd(mxge_softc_t *sc, uint32_t
 	buf->response_addr.high = htobe32(dma_high);
 	mtx_lock(&sc->cmd_mtx);
 	response->result = 0xffffffff;
-	mb();
+	wmb();
 	mxge_pio_copy((volatile void *)cmd_addr, buf, sizeof (*buf));
 
 	/* wait up to 20ms */
@@ -836,7 +836,7 @@ mxge_send_cmd(mxge_softc_t *sc, uint32_t
 	for (sleep_total = 0; sleep_total <  20; sleep_total++) {
 		bus_dmamap_sync(sc->cmd_dma.dmat, 
 				sc->cmd_dma.map, BUS_DMASYNC_POSTREAD);
-		mb();
+		wmb();
 		switch (be32toh(response->result)) {
 		case 0:
 			data->data0 = be32toh(response->data);
@@ -964,7 +964,7 @@ mxge_load_firmware(mxge_softc_t *sc, int
 	/* clear confirmation addr */
 	confirm = (volatile uint32_t *)sc->cmd;
 	*confirm = 0;
-	mb();
+	wmb();
 	/* send a reload command to the bootstrap MCP, and wait for the
 	   response in the confirmation address.  The firmware should
 	   write a -1 there to indicate it is alive and well
@@ -989,9 +989,9 @@ mxge_load_firmware(mxge_softc_t *sc, int
 
 	submit = (volatile char *)(sc->sram + MXGEFW_BOOT_HANDOFF);
 	mxge_pio_copy(submit, buf, 64);
-	mb();
+	wmb();
 	DELAY(1000);
-	mb();
+	wmb();
 	i = 0;
 	while (*confirm != 0xffffffff && i < 20) {
 		DELAY(1000*10);
@@ -1652,7 +1652,7 @@ mxge_submit_req_backwards(mxge_tx_ring_t
                 idx = (starting_slot + cnt) & tx->mask;
                 mxge_pio_copy(&tx->lanai[idx],
 			      &src[cnt], sizeof(*src));
-                mb();
+                wmb();
         }
 }
 
@@ -1678,14 +1678,14 @@ mxge_submit_req(mxge_tx_ring_t *tx, mcp_
 
 	last_flags = src->flags;
 	src->flags = 0;
-        mb();
+        wmb();
         dst = dstp = &tx->lanai[idx];
         srcp = src;
 
         if ((idx + cnt) < tx->mask) {
                 for (i = 0; i < (cnt - 1); i += 2) {
                         mxge_pio_copy(dstp, srcp, 2 * sizeof(*src));
-                        mb(); /* force write every 32 bytes */
+                        wmb(); /* force write every 32 bytes */
                         srcp += 2;
                         dstp += 2;
                 }
@@ -1698,7 +1698,7 @@ mxge_submit_req(mxge_tx_ring_t *tx, mcp_
         if (i < cnt) {
                 /* submit the first request */
                 mxge_pio_copy(dstp, srcp, sizeof(*src));
-                mb(); /* barrier before setting valid flag */
+                wmb(); /* barrier before setting valid flag */
         }
 
         /* re-write the last 32-bits with the valid flags */
@@ -1709,7 +1709,7 @@ mxge_submit_req(mxge_tx_ring_t *tx, mcp_
         dst_ints+=3;
         *dst_ints =  *src_ints;
         tx->req += cnt;
-        mb();
+        wmb();
 }
 
 #if IFCAP_TSO4
@@ -2128,12 +2128,12 @@ mxge_submit_8rx(volatile mcp_kreq_ether_
 	low = src->addr_low;
 	src->addr_low = 0xffffffff;
 	mxge_pio_copy(dst, src, 4 * sizeof (*src));
-	mb();
+	wmb();
 	mxge_pio_copy(dst + 4, src + 4, 4 * sizeof (*src));
-	mb();
+	wmb();
 	src->addr_low = low;
 	dst->addr_low = low;
-	mb();
+	wmb();
 }
 
 static int
@@ -2688,7 +2688,7 @@ mxge_intr(void *arg)
 			send_done_count = be32toh(stats->send_done_count);
 		}
 		if (sc->legacy_irq && mxge_deassert_wait)
-			mb();
+			wmb();
 	} while (*((volatile uint8_t *) &stats->valid));
 
 	if (__predict_false(stats->stats_updated)) {
@@ -3337,7 +3337,7 @@ mxge_close(mxge_softc_t *sc)
 	callout_stop(&sc->co_hdl);
 	sc->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 	old_down_cnt = sc->down_cnt;
-	mb();
+	wmb();
 	err = mxge_send_cmd(sc, MXGEFW_CMD_ETHERNET_DOWN, &cmd);
 	if (err) {
 		device_printf(sc->dev, "Couldn't bring down link\n");
@@ -3346,7 +3346,7 @@ mxge_close(mxge_softc_t *sc)
 		/* wait for down irq */
 		DELAY(10 * sc->intr_coal_delay);
 	}
-	mb();
+	wmb();
 	if (old_down_cnt == sc->down_cnt) {
 		device_printf(sc->dev, "never got down irq\n");
 	}

Modified: head/sys/dev/mxge/if_mxge_var.h
==============================================================================
--- head/sys/dev/mxge/if_mxge_var.h	Mon Nov 24 17:39:39 2008	(r185254)
+++ head/sys/dev/mxge/if_mxge_var.h	Mon Nov 24 19:00:57 2008	(r185255)
@@ -283,13 +283,13 @@ struct mxge_media_type
 
 #if defined (__GNUC__)
   #if #cpu(i386) || defined __i386 || defined i386 || defined __i386__ || #cpu(x86_64) || defined __x86_64__
-    #define mb()  __asm__ __volatile__ ("sfence;": : :"memory")
+    #define wmb()  __asm__ __volatile__ ("sfence;": : :"memory")
   #elif #cpu(sparc64) || defined sparc64 || defined __sparcv9 
-    #define mb()  __asm__ __volatile__ ("membar #MemIssue": : :"memory")
+    #define wmb()  __asm__ __volatile__ ("membar #MemIssue": : :"memory")
   #elif #cpu(sparc) || defined sparc || defined __sparc__
-    #define mb()  __asm__ __volatile__ ("stbar;": : :"memory")
+    #define wmb()  __asm__ __volatile__ ("stbar;": : :"memory")
   #else
-    #define mb() 	/* XXX just to make this compile */
+    #define wmb() 	/* XXX just to make this compile */
   #endif
 #else
   #error "unknown compiler"


More information about the svn-src-all mailing list