From owner-freebsd-arch Wed Jan 2 16:39:47 2002 Delivered-To: freebsd-arch@freebsd.org Received: from netau1.alcanet.com.au (ntp.alcanet.com.au [203.62.196.27]) by hub.freebsd.org (Postfix) with ESMTP id 0CCA637B41A; Wed, 2 Jan 2002 16:39:43 -0800 (PST) Received: from mfg1.cim.alcatel.com.au (mfg1.cim.alcatel.com.au [139.188.23.1]) by netau1.alcanet.com.au (8.9.3 (PHNE_22672)/8.9.3) with ESMTP id LAA04333; Thu, 3 Jan 2002 11:39:23 +1100 (EDT) Received: from gsmx07.alcatel.com.au by cim.alcatel.com.au (PMDF V5.2-32 #37641) with ESMTP id <01KCMSW7KKS0VFJIUZ@cim.alcatel.com.au>; Thu, 3 Jan 2002 11:38:30 +1100 Received: (from jeremyp@localhost) by gsmx07.alcatel.com.au (8.11.6/8.11.6) id g030dKo01470; Thu, 03 Jan 2002 11:39:20 +1100 Content-return: prohibited Date: Thu, 03 Jan 2002 11:39:20 +1100 From: Peter Jeremy Subject: Re: When to use atomic_ functions? (was: 64 bit counters) In-reply-to: <20020103002521.GB53199@cicely9.cicely.de>; from ticso@cicely9.cicely.de on Thu, Jan 03, 2002 at 01:25:22AM +0100 To: Bernd Walter Cc: Michal Mertl , Matthew Dillon , Bruce Evans , Mike Smith , Bernd Walter , arch@FreeBSD.ORG Mail-Followup-To: Bernd Walter , Michal Mertl , Matthew Dillon , Bruce Evans , Mike Smith , Bernd Walter , arch@FreeBSD.ORG Message-id: <20020103113919.E561@gsmx07.alcatel.com.au> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-disposition: inline User-Agent: Mutt/1.2.5i References: <200201012349.g01NnKA40071@apollo.backplane.com> <20020103095701.B561@gsmx07.alcatel.com.au> <20020103002521.GB53199@cicely9.cicely.de> Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On 2002-Jan-03 01:25:22 +0100, Bernd Walter wrote: >On Thu, Jan 03, 2002 at 09:57:02AM +1100, Peter Jeremy wrote: >> Also, many RISC processors (eg Alpha) don't have locked read-modify- >> write primitives. On the Alpha, you need an instruction sequence: >> loop: load_locked memory->register >> update register >> store_conditional register->memory >> if not success goto loop >> with a few memory barriers added to ensure that the load/store are >> visible to other CPUs. The store_conditional will fail if your CPU >> was interrupted or if another CPU updated an implementation-defined >> region including the specified memory address. (64-bit atomic >> operations on the IA32 use the same approach - using CMPXCHG8B as the >> store_conditional instruction). > >My Alpha Architecture Handbook says that the barrier is unneeded. >I have no clue why they are there. You're right. Version 2, section 5.5 shows that they aren't needed when a single datum is being atomically updated (as needed here). They're only needed where the atomic operation is seizing a lock so that a larger structure can be atomically updated. Peter To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message