From owner-freebsd-hackers@FreeBSD.ORG Mon Oct 3 14:47:57 2011 Return-Path: Delivered-To: hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 41BE8106564A for ; Mon, 3 Oct 2011 14:47:57 +0000 (UTC) (envelope-from mdf356@gmail.com) Received: from mail-qw0-f54.google.com (mail-qw0-f54.google.com [209.85.216.54]) by mx1.freebsd.org (Postfix) with ESMTP id 060478FC0A for ; Mon, 3 Oct 2011 14:47:56 +0000 (UTC) Received: by qadz30 with SMTP id z30so2053466qad.13 for ; Mon, 03 Oct 2011 07:47:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=QTwE4j5w5nPWHOHQQV5C20AIVBHCDsovjNjYX+4C0d8=; b=F9frXHUMzrqnYjTGC2OmxnR9SqU6gIfEXXrHC5is7dGFBxFI8W4xDK0fV0937Xfy6x +HHsO/BFSXI4O4gRT8iRHBFLfcLzcpsPGRfqmHvLMdzWlMWjLzaXFI+oUTaiPC3yGCSC /6aVDcvrTyOS3pDUQrnLwZ6uq6ZG4a2+Y1JAU= MIME-Version: 1.0 Received: by 10.224.87.82 with SMTP id v18mr8059qal.74.1317651552846; Mon, 03 Oct 2011 07:19:12 -0700 (PDT) Sender: mdf356@gmail.com Received: by 10.229.83.196 with HTTP; Mon, 3 Oct 2011 07:19:12 -0700 (PDT) In-Reply-To: <558829232.20111003133754@serebryakov.spb.ru> References: <558829232.20111003133754@serebryakov.spb.ru> Date: Mon, 3 Oct 2011 07:19:12 -0700 X-Google-Sender-Auth: a20qC71k5RSbe_Igf3gfekOqTPE Message-ID: From: mdf@FreeBSD.org To: lev@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: hackers@freebsd.org Subject: Re: Atomic increment and get? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Oct 2011 14:47:57 -0000 2011/10/3 Lev Serebryakov : > =A0Is here atomic increment and get (or add and get) operation in > =A0kernel? I cannot find one. Here is atomic_add_32(), but it doesn't > =A0return result. And here is no atomic_add_64() on 32 bit system :( See atomic_fetchadd_int. Not all hardware has 64-bit atomic instructions available in 32-bit mode so it's not machine-independent. Generally, for this case (and potentially for sub-32-bit atomic operations [1]) a lock is used. [1] with masking and shifting 32-bit atomics can be used to set data in an 8 or 16 bit variable; see a recent commit to sys/vm. Cheers, matthew