From owner-svn-src-head@FreeBSD.ORG Sat Nov 22 21:55:02 2008 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 24EC41065673 for ; Sat, 22 Nov 2008 21:55:02 +0000 (UTC) (envelope-from mat.macy@gmail.com) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.231]) by mx1.freebsd.org (Postfix) with ESMTP id 0F0348FC1D for ; Sat, 22 Nov 2008 21:55:01 +0000 (UTC) (envelope-from mat.macy@gmail.com) Received: by rv-out-0506.google.com with SMTP id b25so1449026rvf.43 for ; Sat, 22 Nov 2008 13:55:01 -0800 (PST) Received: by 10.141.13.16 with SMTP id q16mr997789rvi.272.1227389186493; Sat, 22 Nov 2008 13:26:26 -0800 (PST) Received: by 10.141.153.21 with HTTP; Sat, 22 Nov 2008 13:26:26 -0800 (PST) Message-ID: <3c1674c90811221326m41e229f7p6abbc0eb473e900e@mail.gmail.com> Date: Sat, 22 Nov 2008 13:26:26 -0800 From: kmacy@freebsd.org To: "Kostik Belousov" In-Reply-To: <20081122112949.GA6408@deviant.kiev.zoral.com.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <200811220555.mAM5tuIJ007781@svn.freebsd.org> <20081122112949.GA6408@deviant.kiev.zoral.com.ua> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r185162 - in head: . sys/amd64/include sys/arm/include sys/conf sys/dev/bce sys/dev/cxgb sys/dev/cxgb/sys sys/dev/cxgb/ulp/iw_cxgb sys/dev/mxge sys/dev/nxge sys/i386/include sys/i386/in... X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 22 Nov 2008 21:55:02 -0000 This was a concern of mine - note that many driver writers assume they exist. Thoughts on efficiently handling it via checking cpuid at runtime? Alternatively we could have it be conditional on CPU_i786. On 11/22/08, Kostik Belousov wrote: > On Sat, Nov 22, 2008 at 05:55:56AM +0000, Kip Macy wrote: >> Author: kmacy >> Date: Sat Nov 22 05:55:56 2008 >> New Revision: 185162 >> URL: http://svn.freebsd.org/changeset/base/185162 >> >> Log: >> - bump __FreeBSD version to reflect added buf_ring, memory barriers, >> and ifnet functions >> >> - add memory barriers to > >> Modified: head/sys/i386/include/atomic.h >> ============================================================================== >> --- head/sys/i386/include/atomic.h Sat Nov 22 01:48:20 2008 (r185161) >> +++ head/sys/i386/include/atomic.h Sat Nov 22 05:55:56 2008 (r185162) >> @@ -32,6 +32,21 @@ >> #error this file needs sys/cdefs.h as a prerequisite >> #endif >> >> + >> +#if defined(I686_CPU) >> +#define mb() __asm__ __volatile__ ("mfence;": : :"memory") >> +#define wmb() __asm__ __volatile__ ("sfence;": : :"memory") >> +#define rmb() __asm__ __volatile__ ("lfence;": : :"memory") >> +#else >> +/* >> + * do we need a serializing instruction? >> + */ >> +#define mb() >> +#define wmb() >> +#define rmb() >> +#endif >> + >> + >> /* >> * Various simple operations on memory, each of which is atomic in the >> * presence of interrupts and multiple processors. > AFAIR, sfence instruction was added with the Pentium III processor (SSE), > while lfence was introduced with the Pentium 4 (SSE2). > > I think that #ifdef I686_CPU handling of the fences is wrong. We need to > use a serialized instruction on CPUs that does not support corresponding > fence, if needed. > -- If we desire respect for the law, we must first make the law respectable. - Louis D. Brandeis