Date: Sat, 7 Mar 2009 12:11:46 -0800 From: Kip Macy <kmacy@freebsd.org> To: Ivan Voras <ivoras@freebsd.org> Cc: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: Re: svn commit: r189470 - in user/kmacy/releng_7_net_backport/sys: amd64/include arm/include dev/bce dev/mxge i386/include ia64/include powerpc/include sparc64/include sun4v/include Message-ID: <3c1674c90903071211y29ea8ee6u412352faf9cd108f@mail.gmail.com> In-Reply-To: <9bbcef730903070240t2068f43em9b0017b10ba992e4@mail.gmail.com> References: <200903070118.n271IL5p034118@svn.freebsd.org> <9bbcef730903070240t2068f43em9b0017b10ba992e4@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
The names are what are used in Linux. There are a number of drivers in the tree that share code with Linux that #define them in a platform dependent way. -Kip On Sat, Mar 7, 2009 at 2:40 AM, Ivan Voras <ivoras@freebsd.org> wrote: > Hi, > > Are these names taken from some standard? I'm not strongly arguing > against them but naming something "mb" and such introduces great > potential for conflicts with local code. (Not the actual choice of > letters but that they are two and three-characters long identifiers). > Maybe something like membar, membar_read, membar_write would be > better? > > But I see this is merged from existing code so it's probably too late... > > > 2009/3/7 Kip Macy <kmacy@freebsd.org>: >> Author: kmacy >> Date: Sat Mar =A07 01:18:21 2009 >> New Revision: 189470 >> URL: http://svn.freebsd.org/changeset/base/189470 >> >> Log: >> =A0 multiq step 1: >> =A0 - atomic_barriers: add atomic barriers to atomic.h on all architectu= res >> >> Modified: >> =A0user/kmacy/releng_7_net_backport/sys/amd64/include/atomic.h >> =A0user/kmacy/releng_7_net_backport/sys/arm/include/atomic.h >> =A0user/kmacy/releng_7_net_backport/sys/dev/bce/if_bcereg.h >> =A0user/kmacy/releng_7_net_backport/sys/dev/mxge/if_mxge.c >> =A0user/kmacy/releng_7_net_backport/sys/dev/mxge/if_mxge_var.h >> =A0user/kmacy/releng_7_net_backport/sys/i386/include/atomic.h >> =A0user/kmacy/releng_7_net_backport/sys/ia64/include/atomic.h >> =A0user/kmacy/releng_7_net_backport/sys/powerpc/include/atomic.h >> =A0user/kmacy/releng_7_net_backport/sys/sparc64/include/atomic.h >> =A0user/kmacy/releng_7_net_backport/sys/sun4v/include/atomic.h >> >> Modified: user/kmacy/releng_7_net_backport/sys/amd64/include/atomic.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- user/kmacy/releng_7_net_backport/sys/amd64/include/atomic.h Sat Mar = =A07 01:17:13 2009 =A0 =A0 =A0 =A0(r189469) >> +++ user/kmacy/releng_7_net_backport/sys/amd64/include/atomic.h Sat Mar = =A07 01:18:21 2009 =A0 =A0 =A0 =A0(r189470) >> @@ -32,6 +32,10 @@ >> =A0#error this file needs sys/cdefs.h as a prerequisite >> =A0#endif >> >> +#define mb() =A0 __asm__ __volatile__ ("mfence;": : :"memory") >> +#define wmb() =A0__asm__ __volatile__ ("sfence;": : :"memory") >> +#define rmb() =A0__asm__ __volatile__ ("lfence;": : :"memory") >> + >> =A0/* >> =A0* Various simple operations on memory, each of which is atomic in the >> =A0* presence of interrupts and multiple processors. >> >> Modified: user/kmacy/releng_7_net_backport/sys/arm/include/atomic.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- user/kmacy/releng_7_net_backport/sys/arm/include/atomic.h =A0 Sat Ma= r =A07 01:17:13 2009 =A0 =A0 =A0 =A0(r189469) >> +++ user/kmacy/releng_7_net_backport/sys/arm/include/atomic.h =A0 Sat Ma= r =A07 01:18:21 2009 =A0 =A0 =A0 =A0(r189470) >> @@ -45,6 +45,10 @@ >> >> =A0#include <sys/types.h> >> >> +#define =A0 =A0 =A0 =A0mb() >> +#define =A0 =A0 =A0 =A0wmb() >> +#define =A0 =A0 =A0 =A0rmb() >> + >> =A0#ifndef I32_bit >> =A0#define I32_bit (1 << 7) =A0 =A0 =A0 =A0/* IRQ disable */ >> =A0#endif >> >> Modified: user/kmacy/releng_7_net_backport/sys/dev/bce/if_bcereg.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- user/kmacy/releng_7_net_backport/sys/dev/bce/if_bcereg.h =A0 =A0Sat = Mar =A07 01:17:13 2009 =A0 =A0 =A0 =A0(r189469) >> +++ user/kmacy/releng_7_net_backport/sys/dev/bce/if_bcereg.h =A0 =A0Sat = Mar =A07 01:18:21 2009 =A0 =A0 =A0 =A0(r189470) >> @@ -557,6 +557,8 @@ >> >> =A0#endif /* BCE_DEBUG */ >> >> + >> +#if __FreeBSD_version < 701101 >> =A0#if defined(__i386__) || defined(__amd64__) >> =A0#define mb() =A0 =A0__asm volatile("mfence" ::: "memory") >> =A0#define wmb() =A0 __asm volatile("sfence" ::: "memory") >> @@ -566,6 +568,7 @@ >> =A0#define rmb() >> =A0#define wmb() >> =A0#endif >> +#endif >> >> =A0/********************************************************************= ********/ >> =A0/* Device identification definitions. =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 */ >> >> Modified: user/kmacy/releng_7_net_backport/sys/dev/mxge/if_mxge.c >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- user/kmacy/releng_7_net_backport/sys/dev/mxge/if_mxge.c =A0 =A0 Sat = Mar =A07 01:17:13 2009 =A0 =A0 =A0 =A0(r189469) >> +++ user/kmacy/releng_7_net_backport/sys/dev/mxge/if_mxge.c =A0 =A0 Sat = Mar =A07 01:18:21 2009 =A0 =A0 =A0 =A0(r189470) >> @@ -747,9 +747,9 @@ mxge_load_firmware_helper(mxge_softc_t * >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0mxge_pio_copy(sc->sram + MXGE_FW_OFFSET += i, >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0inflate_buffe= r + i, >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0min(256U, (un= signed)(fw_len - i))); >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0dummy =3D *sc->sram; >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0} >> >> =A0 =A0 =A0 =A0*limit =3D fw_len; >> @@ -782,7 +782,7 @@ mxge_dummy_rdma(mxge_softc_t *sc, int en >> =A0 =A0 =A0 =A0/* clear confirmation addr */ >> =A0 =A0 =A0 =A0confirm =3D (volatile uint32_t *)sc->cmd; >> =A0 =A0 =A0 =A0*confirm =3D 0; >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> >> =A0 =A0 =A0 =A0/* send an rdma command to the PCIe engine, and wait for = the >> =A0 =A0 =A0 =A0 =A0 response in the confirmation address. =A0The firmwar= e should >> @@ -804,9 +804,9 @@ mxge_dummy_rdma(mxge_softc_t *sc, int en >> =A0 =A0 =A0 =A0submit =3D (volatile char *)(sc->sram + MXGEFW_BOOT_DUMMY= _RDMA); >> >> =A0 =A0 =A0 =A0mxge_pio_copy(submit, buf, 64); >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0DELAY(1000); >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0i =3D 0; >> =A0 =A0 =A0 =A0while (*confirm !=3D 0xffffffff && i < 20) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0DELAY(1000); >> @@ -844,7 +844,7 @@ mxge_send_cmd(mxge_softc_t *sc, uint32_t >> =A0 =A0 =A0 =A0buf->response_addr.high =3D htobe32(dma_high); >> =A0 =A0 =A0 =A0mtx_lock(&sc->cmd_mtx); >> =A0 =A0 =A0 =A0response->result =3D 0xffffffff; >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0mxge_pio_copy((volatile void *)cmd_addr, buf, sizeof (*bu= f)); >> >> =A0 =A0 =A0 =A0/* wait up to 20ms */ >> @@ -852,7 +852,7 @@ mxge_send_cmd(mxge_softc_t *sc, uint32_t >> =A0 =A0 =A0 =A0for (sleep_total =3D 0; sleep_total < =A020; sleep_total+= +) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0bus_dmamap_sync(sc->cmd_dma.dmat, >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0sc->cmd_d= ma.map, BUS_DMASYNC_POSTREAD); >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0switch (be32toh(response->result)) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0case 0: >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0data->data0 =3D be32toh(r= esponse->data); >> @@ -980,7 +980,7 @@ mxge_load_firmware(mxge_softc_t *sc, int >> =A0 =A0 =A0 =A0/* clear confirmation addr */ >> =A0 =A0 =A0 =A0confirm =3D (volatile uint32_t *)sc->cmd; >> =A0 =A0 =A0 =A0*confirm =3D 0; >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0/* send a reload command to the bootstrap MCP, and wait f= or the >> =A0 =A0 =A0 =A0 =A0 response in the confirmation address. =A0The firmwar= e should >> =A0 =A0 =A0 =A0 =A0 write a -1 there to indicate it is alive and well >> @@ -1005,9 +1005,9 @@ mxge_load_firmware(mxge_softc_t *sc, int >> >> =A0 =A0 =A0 =A0submit =3D (volatile char *)(sc->sram + MXGEFW_BOOT_HANDO= FF); >> =A0 =A0 =A0 =A0mxge_pio_copy(submit, buf, 64); >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0DELAY(1000); >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0i =3D 0; >> =A0 =A0 =A0 =A0while (*confirm !=3D 0xffffffff && i < 20) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0DELAY(1000*10); >> @@ -1668,7 +1668,7 @@ mxge_submit_req_backwards(mxge_tx_ring_t >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 idx =3D (starting_slot + cnt) & tx->mask= ; >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mxge_pio_copy(&tx->lanai[idx], >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0&src[cnt], si= zeof(*src)); >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0mb(); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0wmb(); >> =A0 =A0 =A0 =A0 } >> =A0} >> >> @@ -1694,14 +1694,14 @@ mxge_submit_req(mxge_tx_ring_t *tx, mcp_ >> >> =A0 =A0 =A0 =A0last_flags =3D src->flags; >> =A0 =A0 =A0 =A0src->flags =3D 0; >> - =A0 =A0 =A0 =A0mb(); >> + =A0 =A0 =A0 =A0wmb(); >> =A0 =A0 =A0 =A0 dst =3D dstp =3D &tx->lanai[idx]; >> =A0 =A0 =A0 =A0 srcp =3D src; >> >> =A0 =A0 =A0 =A0 if ((idx + cnt) < tx->mask) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 for (i =3D 0; i < (cnt - 1); i +=3D 2) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mxge_pio_copy(dstp, srcp= , 2 * sizeof(*src)); >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0mb(); /* force write ev= ery 32 bytes */ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0wmb(); /* force write e= very 32 bytes */ >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 srcp +=3D 2; >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dstp +=3D 2; >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } >> @@ -1714,7 +1714,7 @@ mxge_submit_req(mxge_tx_ring_t *tx, mcp_ >> =A0 =A0 =A0 =A0 if (i < cnt) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* submit the first request */ >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mxge_pio_copy(dstp, srcp, sizeof(*src)); >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0mb(); /* barrier before setting valid f= lag */ >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0wmb(); /* barrier before setting valid = flag */ >> =A0 =A0 =A0 =A0 } >> >> =A0 =A0 =A0 =A0 /* re-write the last 32-bits with the valid flags */ >> @@ -1725,7 +1725,7 @@ mxge_submit_req(mxge_tx_ring_t *tx, mcp_ >> =A0 =A0 =A0 =A0 dst_ints+=3D3; >> =A0 =A0 =A0 =A0 *dst_ints =3D =A0*src_ints; >> =A0 =A0 =A0 =A0 tx->req +=3D cnt; >> - =A0 =A0 =A0 =A0mb(); >> + =A0 =A0 =A0 =A0wmb(); >> =A0} >> >> =A0#if IFCAP_TSO4 >> @@ -2144,12 +2144,12 @@ mxge_submit_8rx(volatile mcp_kreq_ether_ >> =A0 =A0 =A0 =A0low =3D src->addr_low; >> =A0 =A0 =A0 =A0src->addr_low =3D 0xffffffff; >> =A0 =A0 =A0 =A0mxge_pio_copy(dst, src, 4 * sizeof (*src)); >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0mxge_pio_copy(dst + 4, src + 4, 4 * sizeof (*src)); >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0src->addr_low =3D low; >> =A0 =A0 =A0 =A0dst->addr_low =3D low; >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0} >> >> =A0static int >> @@ -2736,7 +2736,7 @@ mxge_intr(void *arg) >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0send_done_count =3D be32t= oh(stats->send_done_count); >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (sc->legacy_irq && mxge_deassert_wait) >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0} while (*((volatile uint8_t *) &stats->valid)); >> >> =A0 =A0 =A0 =A0if (__predict_false(stats->stats_updated)) { >> @@ -3385,7 +3385,7 @@ mxge_close(mxge_softc_t *sc) >> =A0 =A0 =A0 =A0callout_stop(&sc->co_hdl); >> =A0 =A0 =A0 =A0sc->ifp->if_drv_flags &=3D ~IFF_DRV_RUNNING; >> =A0 =A0 =A0 =A0old_down_cnt =3D sc->down_cnt; >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0err =3D mxge_send_cmd(sc, MXGEFW_CMD_ETHERNET_DOWN, &cmd)= ; >> =A0 =A0 =A0 =A0if (err) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0device_printf(sc->dev, "Couldn't bring do= wn link\n"); >> @@ -3394,7 +3394,7 @@ mxge_close(mxge_softc_t *sc) >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* wait for down irq */ >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0DELAY(10 * sc->intr_coal_delay); >> =A0 =A0 =A0 =A0} >> - =A0 =A0 =A0 mb(); >> + =A0 =A0 =A0 wmb(); >> =A0 =A0 =A0 =A0if (old_down_cnt =3D=3D sc->down_cnt) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0device_printf(sc->dev, "never got down ir= q\n"); >> =A0 =A0 =A0 =A0} >> >> Modified: user/kmacy/releng_7_net_backport/sys/dev/mxge/if_mxge_var.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- user/kmacy/releng_7_net_backport/sys/dev/mxge/if_mxge_var.h Sat Mar = =A07 01:17:13 2009 =A0 =A0 =A0 =A0(r189469) >> +++ user/kmacy/releng_7_net_backport/sys/dev/mxge/if_mxge_var.h Sat Mar = =A07 01:18:21 2009 =A0 =A0 =A0 =A0(r189470) >> @@ -282,6 +282,8 @@ struct mxge_media_type >> =A0/* implement our own memory barriers, since bus_space_barrier >> =A0 =A0cannot handle write-combining regions */ >> >> +#if __FreeBSD_version < 701101 >> + >> =A0#if defined (__GNUC__) >> =A0 #if #cpu(i386) || defined __i386 || defined i386 || defined __i386__= || #cpu(x86_64) || defined __x86_64__ >> =A0 =A0 #define mb() =A0__asm__ __volatile__ ("sfence;": : :"memory") >> @@ -296,6 +298,8 @@ struct mxge_media_type >> =A0 #error "unknown compiler" >> =A0#endif >> >> +#endif >> + >> =A0static inline void >> =A0mxge_pio_copy(volatile void *to_v, void *from_v, size_t size) >> =A0{ >> >> Modified: user/kmacy/releng_7_net_backport/sys/i386/include/atomic.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- user/kmacy/releng_7_net_backport/sys/i386/include/atomic.h =A0Sat Ma= r =A07 01:17:13 2009 =A0 =A0 =A0 =A0(r189469) >> +++ user/kmacy/releng_7_net_backport/sys/i386/include/atomic.h =A0Sat Ma= r =A07 01:18:21 2009 =A0 =A0 =A0 =A0(r189470) >> @@ -32,6 +32,47 @@ >> =A0#error this file needs sys/cdefs.h as a prerequisite >> =A0#endif >> >> +#if defined(_KERNEL) >> +#include <machine/cpufunc.h> >> +#include <machine/specialreg.h> >> +#define =A0 =A0 =A0 =A0mb() =A0 =A0__asm __volatile( =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ >> + =A0 =A0 =A0 "testl =A0%0,cpu_feature =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 je =A0 =A0 =A02f =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 mfence =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> +1: =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \n\ >> + =A0 =A0 =A0 .section .text.offpath =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0\n\ >> +2: =A0 =A0 lock =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 addl =A0 =A0$0,cpu_feature =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 jmp =A0 =A0 1b =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 .text =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \n\ >> +" =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ >> + =A0 =A0 =A0 : : "i"(CPUID_SSE2) : "memory") >> +#define =A0 =A0 =A0 =A0wmb() =A0 __asm __volatile( =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 \ >> + =A0 =A0 =A0 "testl =A0%0,cpu_feature =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 je =A0 =A0 =A02f =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 sfence =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> +1: =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \n\ >> + =A0 =A0 =A0 .section .text.offpath =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0\n\ >> +2: =A0 =A0 lock =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 addl =A0 =A0$0,cpu_feature =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 jmp =A0 =A0 1b =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 .text =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \n\ >> +" =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ >> + =A0 =A0 =A0 : : "i"(CPUID_XMM) : "memory") >> +#define =A0 =A0 =A0 =A0rmb() =A0 __asm __volatile( =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 \ >> + =A0 =A0 =A0 "testl =A0%0,cpu_feature =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 je =A0 =A0 =A02f =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 lfence =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> +1: =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \n\ >> + =A0 =A0 =A0 .section .text.offpath =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0\n\ >> +2: =A0 =A0 lock =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 addl =A0 =A0$0,cpu_feature =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 jmp =A0 =A0 1b =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\n\ >> + =A0 =A0 =A0 .text =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \n\ >> +" =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ >> + =A0 =A0 =A0 : : "i"(CPUID_SSE2) : "memory") >> +#endif >> + >> =A0/* >> =A0* Various simple operations on memory, each of which is atomic in the >> =A0* presence of interrupts and multiple processors. >> >> Modified: user/kmacy/releng_7_net_backport/sys/ia64/include/atomic.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- user/kmacy/releng_7_net_backport/sys/ia64/include/atomic.h =A0Sat Ma= r =A07 01:17:13 2009 =A0 =A0 =A0 =A0(r189469) >> +++ user/kmacy/releng_7_net_backport/sys/ia64/include/atomic.h =A0Sat Ma= r =A07 01:18:21 2009 =A0 =A0 =A0 =A0(r189470) >> @@ -29,6 +29,10 @@ >> =A0#ifndef _MACHINE_ATOMIC_H_ >> =A0#define =A0 =A0 =A0 =A0_MACHINE_ATOMIC_H_ >> >> +#define =A0 =A0 =A0 =A0mb() >> +#define =A0 =A0 =A0 =A0wmb() >> +#define =A0 =A0 =A0 =A0rmb() >> + >> =A0/* >> =A0* Various simple arithmetic on memory which is atomic in the presence >> =A0* of interrupts and SMP safe. >> >> Modified: user/kmacy/releng_7_net_backport/sys/powerpc/include/atomic.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- user/kmacy/releng_7_net_backport/sys/powerpc/include/atomic.h =A0 = =A0 =A0 Sat Mar =A07 01:17:13 2009 =A0 =A0 =A0 =A0(r189469) >> +++ user/kmacy/releng_7_net_backport/sys/powerpc/include/atomic.h =A0 = =A0 =A0 Sat Mar =A07 01:18:21 2009 =A0 =A0 =A0 =A0(r189470) >> @@ -39,6 +39,10 @@ >> =A0#define =A0 =A0 =A0 =A0__ATOMIC_BARRIER =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ >> =A0 =A0 __asm __volatile("sync" : : : "memory") >> >> +#define mb() =A0 __ATOMIC_BARRIER >> +#define =A0 =A0 =A0 =A0wmb() =A0 mb() >> +#define =A0 =A0 =A0 =A0rmb() =A0 mb() >> + >> =A0/* >> =A0* atomic_add(p, v) >> =A0* { *p +=3D v; } >> >> Modified: user/kmacy/releng_7_net_backport/sys/sparc64/include/atomic.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- user/kmacy/releng_7_net_backport/sys/sparc64/include/atomic.h =A0 = =A0 =A0 Sat Mar =A07 01:17:13 2009 =A0 =A0 =A0 =A0(r189469) >> +++ user/kmacy/releng_7_net_backport/sys/sparc64/include/atomic.h =A0 = =A0 =A0 Sat Mar =A07 01:18:21 2009 =A0 =A0 =A0 =A0(r189470) >> @@ -40,6 +40,10 @@ >> =A0#define =A0 =A0 =A0 =A0__ASI_ATOMIC =A0 =A0ASI_P >> =A0#endif >> >> +#define mb() =A0 __asm__ __volatile__ ("membar #MemIssue": : :"memory") >> +#define wmb() =A0mb() >> +#define rmb() =A0mb() >> + >> =A0/* >> =A0* Various simple arithmetic on memory which is atomic in the presence >> =A0* of interrupts and multiple processors. =A0See atomic(9) for details= . >> >> Modified: user/kmacy/releng_7_net_backport/sys/sun4v/include/atomic.h >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D >> --- user/kmacy/releng_7_net_backport/sys/sun4v/include/atomic.h Sat Mar = =A07 01:17:13 2009 =A0 =A0 =A0 =A0(r189469) >> +++ user/kmacy/releng_7_net_backport/sys/sun4v/include/atomic.h Sat Mar = =A07 01:18:21 2009 =A0 =A0 =A0 =A0(r189470) >> @@ -33,6 +33,10 @@ >> >> =A0#include <machine/cpufunc.h> >> >> +#define mb() =A0 __asm__ __volatile__ ("membar #MemIssue": : :"memory") >> +#define wmb() =A0mb() >> +#define rmb() =A0mb() >> + >> =A0/* Userland needs different ASI's. */ >> =A0#ifdef _KERNEL >> =A0#define =A0 =A0 =A0 =A0__ASI_ATOMIC =A0 =A0ASI_N >> >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3c1674c90903071211y29ea8ee6u412352faf9cd108f>