[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH V3 01/11] atomic: introduce atomic operations
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH V3 01/11] atomic: introduce atomic operations |
Date: |
Thu, 13 Sep 2012 10:19:34 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120828 Thunderbird/15.0 |
Il 13/09/2012 10:14, Avi Kivity ha scritto:
>>>> >>> +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.
Agreed. Alternatively, stick a barrier() before and after the
assignment and read.
But I don't really see the point in wrapping atomically-accessed
variables in a struct. Are we going to add a variant for long, a
variant for pointers, etc.?
I already proposed my version of this at
http://github.com/bonzini/qemu/commit/1b439343.
Paolo
Re: [Qemu-devel] [PATCH V3 01/11] atomic: introduce atomic operations, Peter Maydell, 2012/09/11
[Qemu-devel] [PATCH V3 02/11] qom: apply atomic on object's refcount, Liu Ping Fan, 2012/09/11