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

Matthew Macy mat.macy at gmail.com
Mon Nov 24 12:40:03 PST 2008


Sorry about that. There are about half a dozen different drivers with
their own definitions. Since you use Linux naming I overlooked the
fact that you defined it differently.

-Kip



On Mon, Nov 24, 2008 at 7:00 PM, Andrew Gallatin <gallatin at freebsd.org> wrote:
> 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"
>



-- 
If we desire respect for the law, we must first make the law respectable.
- Louis D. Brandeis


More information about the svn-src-all mailing list