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