On 30/03/2015 19:46, Dr. David Alan Gilbert wrote:
>>> > > +PostcopyState  postcopy_state_get(MigrationIncomingState *mis)
>>> > > +{
>>> > > +    return atomic_fetch_add(&mis->postcopy_state, 0);
>>> > > +}
>>> > > +
>>> > > +/* Set the state and return the old state */
>>> > > +PostcopyState postcopy_state_set(MigrationIncomingState *mis,
>>> > > +                                 PostcopyState new_state)
>>> > > +{
>>> > > +    return atomic_xchg(&mis->postcopy_state, new_state);
>>> > > +}
>> > 
>> > Which are the (multiple) threads are calling these functions?
> The main thread receiving the migration and the postcopy ram_listen_thread
> receiving the RAM pages.
> It's not actually racy between multiple threads updating it,
> it's sequenced so that the main thread initialises it and then
> hands over to the listen thread that takes it over from that point.

I would use atomic_mb_read/atomic_mb_set here.

Paolo

Reply via email to