qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC PATCH V3] Use atomic cmpxchg to atomically check t


From: Peter Maydell
Subject: Re: [Qemu-devel] [RFC PATCH V3] Use atomic cmpxchg to atomically check the exclusive value in a STREX
Date: Thu, 18 Jun 2015 20:53:04 +0100

On 18 June 2015 at 19:32, Mark Burton <address@hidden> wrote:
> for the 1<<size thing - I think that code has been used elsewhere, which is a 
> little worrying - I’ll check.
>
>> On 18 Jun 2015, at 17:56, Peter Maydell <address@hidden> wrote:
>>
>> On 18 June 2015 at 16:44,  <address@hidden> wrote:
>>> +        uint64_t oldval, *p;
>>> +        p = address_space_map(cs->as, paddr, &len, true);
>>> +        if (len == 8 << size) {
>>> +            oldval = (uint64_t)env->exclusive_val;
>>> +            result = (atomic_cmpxchg(p, oldval, (uint64_t)newval) == 
>>> oldval);
>>
>> You can't do an atomic operation on a type that's larger than
>> the pointer size of the host system. That means that for
>> code that isn't host specific, like this, in practice you
>> can't do an atomic operation on a larger size than 4 bytes.
>>
>
> I thought they were polymorphic across all types, I didn’t notice
> the caveat of the size, sorry about that. That makes things more
> entertaining :-)

It's polymorphic across most types... It's been suggested
that the macros should refuse types with size > ptrsize
on all systems, so you don't have to get bitten by a
ppc32 compile failure after the fact, but I don't think that
anybody's written the patch yet.

-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]