[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 06/30] migration: stop all cpus correctly
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 06/30] migration: stop all cpus correctly |
Date: |
Mon, 12 Nov 2012 12:44:35 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121016 Thunderbird/16.0.1 |
Il 18/10/2012 09:30, Juan Quintela ha scritto:
> You can only stop all cpus from the iothread or an vcpu. As we want
> to do it from the migration_thread, we need to do this dance with the
> botton handlers.
>
> This patch is a request for ideas. I can move this function to cpus.c, but
> wondered if there is an easy way of doing this?
The commit message here is stale (I think I had pointed this out
already). Also, first_time should be a member of MigrationState,
initialized in migrate_fd_connect.
Paolo
> Signed-off-by: Juan Quintela <address@hidden>
> ---
> migration.c | 29 +++++++++++++++++------------
> 1 file changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/migration.c b/migration.c
> index 02f4ffa..05ef1a3 100644
> --- a/migration.c
> +++ b/migration.c
> @@ -20,6 +20,7 @@
> #include "sysemu.h"
> #include "block.h"
> #include "qemu_socket.h"
> +#include "qemu-thread.h"
> #include "block-migration.h"
> #include "qmp-commands.h"
>
> @@ -322,11 +323,22 @@ ssize_t migrate_fd_put_buffer(MigrationState *s, const
> void *data,
> void migrate_fd_put_ready(MigrationState *s)
> {
> int ret;
> + static bool first_time = true;
>
> if (s->state != MIG_STATE_ACTIVE) {
> DPRINTF("put_ready returning because of non-active state\n");
> return;
> }
> + if (first_time) {
> + first_time = false;
> + DPRINTF("beginning savevm\n");
> + ret = qemu_savevm_state_begin(s->file, &s->params);
> + if (ret < 0) {
> + DPRINTF("failed, %d\n", ret);
> + migrate_fd_error(s);
> + return;
> + }
> + }
>
> DPRINTF("iterate\n");
> ret = qemu_savevm_state_iterate(s->file);
> @@ -339,7 +351,11 @@ void migrate_fd_put_ready(MigrationState *s)
> DPRINTF("done iterating\n");
> start_time = qemu_get_clock_ms(rt_clock);
> qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
> - vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
> + if (old_vm_running) {
> + vm_stop(RUN_STATE_FINISH_MIGRATE);
> + } else {
> + vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
> + }
>
> if (qemu_savevm_state_complete(s->file) < 0) {
> migrate_fd_error(s);
> @@ -428,19 +444,8 @@ bool migration_has_failed(MigrationState *s)
>
> void migrate_fd_connect(MigrationState *s)
> {
> - int ret;
> -
> s->state = MIG_STATE_ACTIVE;
> qemu_fopen_ops_buffered(s);
> -
> - DPRINTF("beginning savevm\n");
> - ret = qemu_savevm_state_begin(s->file, &s->params);
> - if (ret < 0) {
> - DPRINTF("failed, %d\n", ret);
> - migrate_fd_error(s);
> - return;
> - }
> - migrate_fd_put_ready(s);
> }
>
> static MigrationState *migrate_init(const MigrationParams *params)
>
- Re: [Qemu-devel] [PATCH 06/30] migration: stop all cpus correctly,
Paolo Bonzini <=