From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:52431) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TC4Z3-0003ed-Vt for qemu-devel@nongnu.org; Thu, 13 Sep 2012 04:14:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TC4Yy-0007M2-AH for qemu-devel@nongnu.org; Thu, 13 Sep 2012 04:14:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:3581) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TC4Yy-0007Lx-1v for qemu-devel@nongnu.org; Thu, 13 Sep 2012 04:14:16 -0400 Message-ID: <505195CF.8040002@redhat.com> Date: Thu, 13 Sep 2012 11:14:07 +0300 From: Avi Kivity MIME-Version: 1.0 References: <1347349912-15611-1-git-send-email-qemulist@gmail.com> <1347349912-15611-2-git-send-email-qemulist@gmail.com> <504EF077.9080107@redhat.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH V3 01/11] atomic: introduce atomic operations List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: liu ping fan Cc: Jan Kiszka , Marcelo Tosatti , qemu-devel@nongnu.org, Anthony Liguori , Paolo Bonzini On 09/13/2012 09:54 AM, liu ping fan wrote: >>> +typedef struct Atomic { >>> + int counter; >>> +} Atomic; >> >> Best to mark counter 'volatile'. >> >>> + >>> +static inline void atomic_set(Atomic *v, int i) >>> +{ >>> + v->counter = i; >>> +} >>> + >>> +static inline int atomic_read(Atomic *v) >>> +{ >>> + return v->counter; >>> +} >>> >> >> So these two operations don't get mangled by the optimizer. >> > Browsing linux code and reading lkml, find some similar material. But > they have moved volatile from ->counter to function - atomic_read(). > As to atomic_read(), I think it need to prevent optimizer from > refetching issue, but as to atomic_set(), do we need ? I think so, to prevent reordering. -- error compiling committee.c: too many arguments to function