* Paolo Bonzini (pbonz...@redhat.com) wrote:
> 
> 
> 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.

The benefit of the atomic_xchg is that I get the old value back so
that I can sanity check I was in the state I thought I should have
been.

Dave

> 
> Paolo
--
Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK

Reply via email to