From owner-freebsd-arch@FreeBSD.ORG Wed Aug 22 19:31:55 2007 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7D38416A417 for ; Wed, 22 Aug 2007 19:31:55 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: from nf-out-0910.google.com (nf-out-0910.google.com [64.233.182.190]) by mx1.freebsd.org (Postfix) with ESMTP id EAF1313C48E for ; Wed, 22 Aug 2007 19:31:54 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: by nf-out-0910.google.com with SMTP id b2so240748nfb for ; Wed, 22 Aug 2007 12:31:53 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references:x-google-sender-auth; b=N2N+/FpMRuwVW62cMEdnWXT9hc8jgCu1aPsBHkdd9SV97yXoYMGbOxtTO5iCKas5PfuJZrZoNHDFeZt06qrxTMMV322gN6s+HlvG3gmpyCDLc338HJczR58Yis2k9GKvqHfkEg/b82dAmnkD92tKMCvGjSvnFPKqdkP7A+cFlh8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references:x-google-sender-auth; b=adeq/78YsS6doBrcTqFCBbAyOKxpaFamwUClxRe+eIGdoCK0zrwixOqFT5yELuxRnHOQB6gIPgdnBVnaftaLJmZgmYdtZoQdHMCdgyJueVuhau9IHOrwJAsrvVt8UTFRItS8OwgJAczvug4IOzm9Sfe18MEOvqyglx1/yc0dPDc= Received: by 10.78.172.20 with SMTP id u20mr679550hue.1187809374087; Wed, 22 Aug 2007 12:02:54 -0700 (PDT) Received: by 10.78.97.18 with HTTP; Wed, 22 Aug 2007 12:02:53 -0700 (PDT) Message-ID: <3bbf2fe10708221202h44b3258cyf5ca5e9b867ac0e7@mail.gmail.com> Date: Wed, 22 Aug 2007 21:02:53 +0200 From: "Attilio Rao" Sender: asmrookie@gmail.com To: "Pawel Jakub Dawidek" In-Reply-To: <20070821202136.GB4187@garage.freebsd.pl> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <20070818120056.GA6498@garage.freebsd.pl> <20070818155041.GY90381@elvis.mu.org> <20070818161449.GE6498@garage.freebsd.pl> <200708211403.29293.jhb@freebsd.org> <20070821191902.GA4187@garage.freebsd.pl> <20070821202136.GB4187@garage.freebsd.pl> X-Google-Sender-Auth: 142814e6a6dc283f Cc: Alfred Perlstein , freebsd-arch@freebsd.org Subject: Re: Lockless uidinfo. X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Aug 2007 19:31:55 -0000 2007/8/21, Pawel Jakub Dawidek : > > New patch is here: > > http://people.freebsd.org/~pjd/patches/uidinfo_waitfree.patch --- sys/ia64/include/atomic.h.orig +++ sys/ia64/include/atomic.h @@ -370,4 +370,15 @@ #define atomic_fetchadd_int atomic_fetchadd_32 +static __inline u_long +atomic_fetchadd_long(volatile u_long *p, u_long v) +{ + u_long value; + + do { + value = *p; + } while (!atomic_cmpset_64(p, value, value + v)); + return (value); +} + In cycles like those, as you get spinning, I would arrange things in order to do a cpu_spinwait(). Like this: for (;;) { value = *p; if (atomic_cmpset_64(p, value, value + v)) break; cpu_spinwait(); } Thanks, Attilio -- Peace can only be achieved by understanding - A. Einstein