On 2018-11-14 11:47, Peter Xu wrote: > On Thu, Nov 01, 2018 at 10:12:26AM +0800, Zhang Chen wrote: >> This compilation issue will occur when user use --disable-replication >> to config Qemu. >> >> Reported-by: Thomas Huth <th...@redhat.com> >> Signed-off-by: Zhang Chen <zhangc...@gmail.com> > > Hi, > > How's the status of this patch? Are we gonna merge it for 3.1? > > I just posted a similar one without knowing this (until Dave pointed > it out). IMHO it can be a good candidate for 3.1.
Maybe Peter Maydell could apply this directly to the repo as a built fix? And maybe one of our docker wizards could add a test to check compilation with everything disabled a la: ./configure --enable-werror --disable-tcg --disable-slirp \ --disable-libxml2 --disable-capstone --disable-live-block-migration \ --disable-glusterfs --disable-replication --disable-coroutine-pool \ --disable-smartcard --disable-guest-agent --disable-curses \ --disable-curl --disable-tpm --disable-qom-cast-debug \ --disable-spice --disable-vhost-vsock --disable-vhost-net \ --disable-vhost-crypto --disable-vhost-user ? I don't use docker (yet), but I've had this in my gitlab ci patch, that's how I noticed this problem (see https://www.mail-archive.com/qemu-devel@nongnu.org/msg559990.html) Thomas > >> --- >> migration/colo.c | 28 +++++++++++++++++++++++++++- >> 1 file changed, 27 insertions(+), 1 deletion(-) >> >> diff --git a/migration/colo.c b/migration/colo.c >> index 956ac236b7..fcff04c78c 100644 >> --- a/migration/colo.c >> +++ b/migration/colo.c >> @@ -59,6 +59,8 @@ static bool colo_runstate_is_stopped(void) >> >> static void secondary_vm_do_failover(void) >> { >> +/* COLO needs enable block-replication */ >> +#ifdef CONFIG_REPLICATION >> int old_state; >> MigrationIncomingState *mis = migration_incoming_get_current(); >> Error *local_err = NULL; >> @@ -121,10 +123,14 @@ static void secondary_vm_do_failover(void) >> if (mis->migration_incoming_co) { >> qemu_coroutine_enter(mis->migration_incoming_co); >> } >> +#else >> + abort(); >> +#endif >> } >> >> static void primary_vm_do_failover(void) >> { >> +#ifdef CONFIG_REPLICATION >> MigrationState *s = migrate_get_current(); >> int old_state; >> Error *local_err = NULL; >> @@ -165,6 +171,9 @@ static void primary_vm_do_failover(void) >> >> /* Notify COLO thread that failover work is finished */ >> qemu_sem_post(&s->colo_exit_sem); >> +#else >> + abort(); >> +#endif >> } >> >> COLOMode get_colo_mode(void) >> @@ -415,11 +424,16 @@ static int >> colo_do_checkpoint_transaction(MigrationState *s, >> /* Disable block migration */ >> migrate_set_block_enabled(false, &local_err); >> qemu_mutex_lock_iothread(); >> + >> +#ifdef CONFIG_REPLICATION >> replication_do_checkpoint_all(&local_err); >> if (local_err) { >> qemu_mutex_unlock_iothread(); >> goto out; >> } >> +#else >> + abort(); >> +#endif >> >> colo_send_message(s->to_dst_file, COLO_MESSAGE_VMSTATE_SEND, >> &local_err); >> if (local_err) { >> @@ -523,11 +537,15 @@ static void colo_process_checkpoint(MigrationState *s) >> object_unref(OBJECT(bioc)); >> >> qemu_mutex_lock_iothread(); >> +#ifdef CONFIG_REPLICATION >> replication_start_all(REPLICATION_MODE_PRIMARY, &local_err); >> if (local_err) { >> qemu_mutex_unlock_iothread(); >> goto out; >> } >> +#else >> + abort(); >> +#endif >> >> vm_start(); >> qemu_mutex_unlock_iothread(); >> @@ -690,11 +708,15 @@ void *colo_process_incoming_thread(void *opaque) >> object_unref(OBJECT(bioc)); >> >> qemu_mutex_lock_iothread(); >> +#ifdef CONFIG_REPLICATION >> replication_start_all(REPLICATION_MODE_SECONDARY, &local_err); >> if (local_err) { >> qemu_mutex_unlock_iothread(); >> goto out; >> } >> +#else >> + abort(); >> +#endif >> vm_start(); >> trace_colo_vm_state_change("stop", "run"); >> qemu_mutex_unlock_iothread(); >> @@ -785,18 +807,22 @@ void *colo_process_incoming_thread(void *opaque) >> goto out; >> } >> >> +#ifdef CONFIG_REPLICATION >> replication_get_error_all(&local_err); >> if (local_err) { >> qemu_mutex_unlock_iothread(); >> goto out; >> } >> + >> /* discard colo disk buffer */ >> replication_do_checkpoint_all(&local_err); >> if (local_err) { >> qemu_mutex_unlock_iothread(); >> goto out; >> } >> - >> +#else >> + abort(); >> +#endif >> /* Notify all filters of all NIC to do checkpoint */ >> colo_notify_filters_event(COLO_EVENT_CHECKPOINT, &local_err); >> >> -- >> 2.17.1 >> >> > > Regards, >