* zhanghailiang (zhang.zhanghaili...@huawei.com) wrote: > + error_report("Unkown error for failover, old_state=%d", old_state);
Tiny typo; 'Unknown'. Don't bother reposting just for that, we can fix it later; or fix it if you have to repost anyway. Dave > + return; > + } > /*TODO: Do failover work */ > } > > void failover_request_active(Error **errp) > { > + if (failover_set_state(FAILOVER_STATUS_NONE, FAILOVER_STATUS_REQUEST) > + != FAILOVER_STATUS_NONE) { > + error_setg(errp, "COLO failover is already actived"); > + return; > + } > failover_bh = qemu_bh_new(colo_failover_bh, NULL); > qemu_bh_schedule(failover_bh); > } > > +void failover_init_state(void) > +{ > + failover_state = FAILOVER_STATUS_NONE; > +} > + > +int failover_set_state(int old_state, int new_state) > +{ > + int old; > + > + old = atomic_cmpxchg(&failover_state, old_state, new_state); > + if (old == old_state) { > + trace_colo_failover_set_state(new_state); > + } > + return old; > +} > + > +int failover_get_state(void) > +{ > + return atomic_read(&failover_state); > +} > + > void qmp_x_colo_lost_heartbeat(Error **errp) > { > if (get_colo_mode() == COLO_MODE_UNKNOWN) { > diff --git a/migration/colo.c b/migration/colo.c > index b445279..9afc527 100644 > --- a/migration/colo.c > +++ b/migration/colo.c > @@ -232,6 +232,8 @@ static void colo_process_checkpoint(MigrationState *s) > Error *local_err = NULL; > int ret; > > + failover_init_state(); > + > s->rp_state.from_dst_file = qemu_file_get_return_path(s->to_dst_file); > if (!s->rp_state.from_dst_file) { > error_report("Open QEMUFile from_dst_file failed"); > @@ -331,6 +333,8 @@ void *colo_process_incoming_thread(void *opaque) > migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE, > MIGRATION_STATUS_COLO); > > + failover_init_state(); > + > mis->to_src_file = qemu_file_get_return_path(mis->from_src_file); > if (!mis->to_src_file) { > error_report("colo incoming thread: Open QEMUFile to_src_file > failed"); > diff --git a/migration/trace-events b/migration/trace-events > index 82dc7a0..d9f44ba 100644 > --- a/migration/trace-events > +++ b/migration/trace-events > @@ -214,3 +214,4 @@ migration_tls_incoming_handshake_complete(void) "" > colo_vm_state_change(const char *old, const char *new) "Change '%s' => '%s'" > colo_send_message(const char *msg) "Send '%s' message" > colo_receive_message(const char *msg) "Receive '%s' message" > +colo_failover_set_state(int new_state) "new state %d" > -- > 1.8.3.1 > > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK