From: Paolo Bonzini <pbonzini@redhat.com>
To: Hu Tao <hutao@cn.fujitsu.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
Gleb Natapov <gleb@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Jan Kiszka <jan.kiszka@siemens.com>,
qemu-devel <qemu-devel@nongnu.org>,
Markus Armbruster <armbru@redhat.com>,
Blue Swirl <blauwirbel@gmail.com>,
Orit Wasserman <owasserm@redhat.com>,
kvm list <kvm@vger.kernel.org>,
Juan Quintela <quintela@redhat.com>,
Alexander Graf <agraf@suse.de>, Andrew Jones <drjones@redhat.com>,
Alex Williamson <alex.williamson@redhat.com>,
Sasha Levin <levinsasha928@gmail.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Luiz Capitulino <lcapitulino@redhat.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Kevin Wolf <kwolf@redhat.com>,
Anthony Liguori <aliguori@us.ibm.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v13 1/8] save/load cpu runstate
Date: Mon, 04 Mar 2013 10:30:48 +0100 [thread overview]
Message-ID: <513469C8.30602@redhat.com> (raw)
In-Reply-To: <df20999140db716e8b1ccd57a7cbcb0fa343a78c.1362051582.git.hutao@cn.fujitsu.com>
Il 28/02/2013 13:13, Hu Tao ha scritto:
> This patch enables preservation of cpu runstate during save/load vm.
> So when a vm is restored from snapshot, the cpu runstate is restored,
> too.
I don't think this feature is worth breaking backwards migration
compatibility. It is usually handled at a higher-level (management,
like libvirt).
Please make this a separate patch.
Paolo
> See following example:
>
> # save two vms: one is running, the other is paused
> (qemu) info status
> VM status: running
> (qemu) savevm running
> (qemu) stop
> (qemu) info status
> VM status: paused
> (qemu) savevm paused
>
> # restore the one running
> (qemu) info status
> VM status: paused
> (qemu) loadvm running
> (qemu) info status
> VM status: running
>
> # restore the one paused
> (qemu) loadvm paused
> (qemu) info status
> VM status: paused
> (qemu) cont
> (qemu)info status
> VM status: running
>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> ---
> include/sysemu/sysemu.h | 2 ++
> migration.c | 6 +-----
> monitor.c | 5 ++---
> savevm.c | 1 +
> vl.c | 34 ++++++++++++++++++++++++++++++++++
> 5 files changed, 40 insertions(+), 8 deletions(-)
>
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index b19ec95..f121213 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -19,6 +19,8 @@ extern uint8_t qemu_uuid[];
> int qemu_uuid_parse(const char *str, uint8_t *uuid);
> #define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
>
> +void save_run_state(void);
> +void load_run_state(void);
> bool runstate_check(RunState state);
> void runstate_set(RunState new_state);
> int runstate_is_running(void);
> diff --git a/migration.c b/migration.c
> index 11725ae..c29830e 100644
> --- a/migration.c
> +++ b/migration.c
> @@ -107,11 +107,7 @@ static void process_incoming_migration_co(void *opaque)
> /* Make sure all file formats flush their mutable metadata */
> bdrv_invalidate_cache_all();
>
> - if (autostart) {
> - vm_start();
> - } else {
> - runstate_set(RUN_STATE_PAUSED);
> - }
> + load_run_state();
> }
>
> void process_incoming_migration(QEMUFile *f)
> diff --git a/monitor.c b/monitor.c
> index 32a6e74..bf974b4 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -2059,13 +2059,12 @@ void qmp_closefd(const char *fdname, Error **errp)
>
> static void do_loadvm(Monitor *mon, const QDict *qdict)
> {
> - int saved_vm_running = runstate_is_running();
> const char *name = qdict_get_str(qdict, "name");
>
> vm_stop(RUN_STATE_RESTORE_VM);
>
> - if (load_vmstate(name) == 0 && saved_vm_running) {
> - vm_start();
> + if (load_vmstate(name) == 0) {
> + load_run_state();
> }
> }
>
> diff --git a/savevm.c b/savevm.c
> index a8a53ef..aa631eb 100644
> --- a/savevm.c
> +++ b/savevm.c
> @@ -2143,6 +2143,7 @@ void do_savevm(Monitor *mon, const QDict *qdict)
> }
>
> saved_vm_running = runstate_is_running();
> + save_run_state();
> vm_stop(RUN_STATE_SAVE_VM);
>
> memset(sn, 0, sizeof(*sn));
> diff --git a/vl.c b/vl.c
> index febd2ea..7991f2e 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -523,6 +523,7 @@ static int default_driver_check(QemuOpts *opts, void *opaque)
> /* QEMU state */
>
> static RunState current_run_state = RUN_STATE_PRELAUNCH;
> +static RunState saved_run_state = RUN_STATE_RUNNING;
>
> typedef struct {
> RunState from;
> @@ -546,6 +547,7 @@ static const RunStateTransition runstate_transitions_def[] = {
> { RUN_STATE_PAUSED, RUN_STATE_FINISH_MIGRATE },
>
> { RUN_STATE_POSTMIGRATE, RUN_STATE_RUNNING },
> + { RUN_STATE_POSTMIGRATE, RUN_STATE_PAUSED },
> { RUN_STATE_POSTMIGRATE, RUN_STATE_FINISH_MIGRATE },
>
> { RUN_STATE_PRELAUNCH, RUN_STATE_RUNNING },
> @@ -556,6 +558,7 @@ static const RunStateTransition runstate_transitions_def[] = {
> { RUN_STATE_FINISH_MIGRATE, RUN_STATE_POSTMIGRATE },
>
> { RUN_STATE_RESTORE_VM, RUN_STATE_RUNNING },
> + { RUN_STATE_RESTORE_VM, RUN_STATE_PAUSED },
>
> { RUN_STATE_RUNNING, RUN_STATE_DEBUG },
> { RUN_STATE_RUNNING, RUN_STATE_INTERNAL_ERROR },
> @@ -585,11 +588,39 @@ static const RunStateTransition runstate_transitions_def[] = {
>
> static bool runstate_valid_transitions[RUN_STATE_MAX][RUN_STATE_MAX];
>
> +void save_run_state(void)
> +{
> + saved_run_state = current_run_state;
> +}
> +
> +void load_run_state(void)
> +{
> + if (saved_run_state == RUN_STATE_RUNNING) {
> + vm_start();
> + } else if (!runstate_check(saved_run_state)) {
> + runstate_set(saved_run_state);
> + } else {
> + ; /* leave unchanged */
> + }
> +}
> +
> bool runstate_check(RunState state)
> {
> return current_run_state == state;
> }
>
> +static void runstate_save(QEMUFile *f, void *opaque)
> +{
> + qemu_put_byte(f, saved_run_state);
> +}
> +
> +static int runstate_load(QEMUFile *f, void *opaque, int version_id)
> +{
> + saved_run_state = qemu_get_byte(f);
> +
> + return 0;
> +}
> +
> static void runstate_init(void)
> {
> const RunStateTransition *p;
> @@ -599,6 +630,9 @@ static void runstate_init(void)
> for (p = &runstate_transitions_def[0]; p->from != RUN_STATE_MAX; p++) {
> runstate_valid_transitions[p->from][p->to] = true;
> }
> +
> + register_savevm(NULL, "runstate", 0, 1,
> + runstate_save, runstate_load, NULL);
> }
>
> /* This function will abort() on invalid state transitions */
>
WARNING: multiple messages have this Message-ID (diff)
From: Paolo Bonzini <pbonzini@redhat.com>
To: Hu Tao <hutao@cn.fujitsu.com>
Cc: kvm list <kvm@vger.kernel.org>,
qemu-devel <qemu-devel@nongnu.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"Daniel P. Berrange" <berrange@redhat.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Jan Kiszka <jan.kiszka@siemens.com>,
Gleb Natapov <gleb@redhat.com>, Blue Swirl <blauwirbel@gmail.com>,
Eric Blake <eblake@redhat.com>, Andrew Jones <drjones@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Sasha Levin <levinsasha928@gmail.com>,
Luiz Capitulino <lcapitulino@redhat.com>,
Anthony Liguori <aliguori@us.ibm.com>,
Markus Armbruster <armbru@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Juan Quintela <quintela@redhat.com>,
Orit Wasserman <owasserm@redhat.com>,
Kevin Wolf <kwolf@redhat.com>,
Wen Congyang <wency@cn.fujitsu.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Alexander Graf <agraf@suse.de>,
Alex Williamson <alex.williamson@redhat.com>,
Peter Maydell <peter.maydell@linaro.org>
Subject: Re: [PATCH v13 1/8] save/load cpu runstate
Date: Mon, 04 Mar 2013 10:30:48 +0100 [thread overview]
Message-ID: <513469C8.30602@redhat.com> (raw)
In-Reply-To: <df20999140db716e8b1ccd57a7cbcb0fa343a78c.1362051582.git.hutao@cn.fujitsu.com>
Il 28/02/2013 13:13, Hu Tao ha scritto:
> This patch enables preservation of cpu runstate during save/load vm.
> So when a vm is restored from snapshot, the cpu runstate is restored,
> too.
I don't think this feature is worth breaking backwards migration
compatibility. It is usually handled at a higher-level (management,
like libvirt).
Please make this a separate patch.
Paolo
> See following example:
>
> # save two vms: one is running, the other is paused
> (qemu) info status
> VM status: running
> (qemu) savevm running
> (qemu) stop
> (qemu) info status
> VM status: paused
> (qemu) savevm paused
>
> # restore the one running
> (qemu) info status
> VM status: paused
> (qemu) loadvm running
> (qemu) info status
> VM status: running
>
> # restore the one paused
> (qemu) loadvm paused
> (qemu) info status
> VM status: paused
> (qemu) cont
> (qemu)info status
> VM status: running
>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> ---
> include/sysemu/sysemu.h | 2 ++
> migration.c | 6 +-----
> monitor.c | 5 ++---
> savevm.c | 1 +
> vl.c | 34 ++++++++++++++++++++++++++++++++++
> 5 files changed, 40 insertions(+), 8 deletions(-)
>
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index b19ec95..f121213 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -19,6 +19,8 @@ extern uint8_t qemu_uuid[];
> int qemu_uuid_parse(const char *str, uint8_t *uuid);
> #define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
>
> +void save_run_state(void);
> +void load_run_state(void);
> bool runstate_check(RunState state);
> void runstate_set(RunState new_state);
> int runstate_is_running(void);
> diff --git a/migration.c b/migration.c
> index 11725ae..c29830e 100644
> --- a/migration.c
> +++ b/migration.c
> @@ -107,11 +107,7 @@ static void process_incoming_migration_co(void *opaque)
> /* Make sure all file formats flush their mutable metadata */
> bdrv_invalidate_cache_all();
>
> - if (autostart) {
> - vm_start();
> - } else {
> - runstate_set(RUN_STATE_PAUSED);
> - }
> + load_run_state();
> }
>
> void process_incoming_migration(QEMUFile *f)
> diff --git a/monitor.c b/monitor.c
> index 32a6e74..bf974b4 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -2059,13 +2059,12 @@ void qmp_closefd(const char *fdname, Error **errp)
>
> static void do_loadvm(Monitor *mon, const QDict *qdict)
> {
> - int saved_vm_running = runstate_is_running();
> const char *name = qdict_get_str(qdict, "name");
>
> vm_stop(RUN_STATE_RESTORE_VM);
>
> - if (load_vmstate(name) == 0 && saved_vm_running) {
> - vm_start();
> + if (load_vmstate(name) == 0) {
> + load_run_state();
> }
> }
>
> diff --git a/savevm.c b/savevm.c
> index a8a53ef..aa631eb 100644
> --- a/savevm.c
> +++ b/savevm.c
> @@ -2143,6 +2143,7 @@ void do_savevm(Monitor *mon, const QDict *qdict)
> }
>
> saved_vm_running = runstate_is_running();
> + save_run_state();
> vm_stop(RUN_STATE_SAVE_VM);
>
> memset(sn, 0, sizeof(*sn));
> diff --git a/vl.c b/vl.c
> index febd2ea..7991f2e 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -523,6 +523,7 @@ static int default_driver_check(QemuOpts *opts, void *opaque)
> /* QEMU state */
>
> static RunState current_run_state = RUN_STATE_PRELAUNCH;
> +static RunState saved_run_state = RUN_STATE_RUNNING;
>
> typedef struct {
> RunState from;
> @@ -546,6 +547,7 @@ static const RunStateTransition runstate_transitions_def[] = {
> { RUN_STATE_PAUSED, RUN_STATE_FINISH_MIGRATE },
>
> { RUN_STATE_POSTMIGRATE, RUN_STATE_RUNNING },
> + { RUN_STATE_POSTMIGRATE, RUN_STATE_PAUSED },
> { RUN_STATE_POSTMIGRATE, RUN_STATE_FINISH_MIGRATE },
>
> { RUN_STATE_PRELAUNCH, RUN_STATE_RUNNING },
> @@ -556,6 +558,7 @@ static const RunStateTransition runstate_transitions_def[] = {
> { RUN_STATE_FINISH_MIGRATE, RUN_STATE_POSTMIGRATE },
>
> { RUN_STATE_RESTORE_VM, RUN_STATE_RUNNING },
> + { RUN_STATE_RESTORE_VM, RUN_STATE_PAUSED },
>
> { RUN_STATE_RUNNING, RUN_STATE_DEBUG },
> { RUN_STATE_RUNNING, RUN_STATE_INTERNAL_ERROR },
> @@ -585,11 +588,39 @@ static const RunStateTransition runstate_transitions_def[] = {
>
> static bool runstate_valid_transitions[RUN_STATE_MAX][RUN_STATE_MAX];
>
> +void save_run_state(void)
> +{
> + saved_run_state = current_run_state;
> +}
> +
> +void load_run_state(void)
> +{
> + if (saved_run_state == RUN_STATE_RUNNING) {
> + vm_start();
> + } else if (!runstate_check(saved_run_state)) {
> + runstate_set(saved_run_state);
> + } else {
> + ; /* leave unchanged */
> + }
> +}
> +
> bool runstate_check(RunState state)
> {
> return current_run_state == state;
> }
>
> +static void runstate_save(QEMUFile *f, void *opaque)
> +{
> + qemu_put_byte(f, saved_run_state);
> +}
> +
> +static int runstate_load(QEMUFile *f, void *opaque, int version_id)
> +{
> + saved_run_state = qemu_get_byte(f);
> +
> + return 0;
> +}
> +
> static void runstate_init(void)
> {
> const RunStateTransition *p;
> @@ -599,6 +630,9 @@ static void runstate_init(void)
> for (p = &runstate_transitions_def[0]; p->from != RUN_STATE_MAX; p++) {
> runstate_valid_transitions[p->from][p->to] = true;
> }
> +
> + register_savevm(NULL, "runstate", 0, 1,
> + runstate_save, runstate_load, NULL);
> }
>
> /* This function will abort() on invalid state transitions */
>
WARNING: multiple messages have this Message-ID (diff)
From: Paolo Bonzini <pbonzini@redhat.com>
To: Hu Tao <hutao@cn.fujitsu.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
Gleb Natapov <gleb@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Jan Kiszka <jan.kiszka@siemens.com>,
qemu-devel <qemu-devel@nongnu.org>,
Markus Armbruster <armbru@redhat.com>,
Blue Swirl <blauwirbel@gmail.com>,
Orit Wasserman <owasserm@redhat.com>,
kvm list <kvm@vger.kernel.org>,
Juan Quintela <quintela@redhat.com>,
Alexander Graf <agraf@suse.de>, Andrew Jones <drjones@redhat.com>,
Alex Williamson <alex.williamson@redhat.com>,
Sasha Levin <levinsasha928@gmail.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Luiz Capitulino <lcapitulino@redhat.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Kevin Wolf <kwolf@redhat.com>,
Anthony Liguori <aliguori@us.ibm.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [Qemu-devel] [PATCH v13 1/8] save/load cpu runstate
Date: Mon, 04 Mar 2013 10:30:48 +0100 [thread overview]
Message-ID: <513469C8.30602@redhat.com> (raw)
In-Reply-To: <df20999140db716e8b1ccd57a7cbcb0fa343a78c.1362051582.git.hutao@cn.fujitsu.com>
Il 28/02/2013 13:13, Hu Tao ha scritto:
> This patch enables preservation of cpu runstate during save/load vm.
> So when a vm is restored from snapshot, the cpu runstate is restored,
> too.
I don't think this feature is worth breaking backwards migration
compatibility. It is usually handled at a higher-level (management,
like libvirt).
Please make this a separate patch.
Paolo
> See following example:
>
> # save two vms: one is running, the other is paused
> (qemu) info status
> VM status: running
> (qemu) savevm running
> (qemu) stop
> (qemu) info status
> VM status: paused
> (qemu) savevm paused
>
> # restore the one running
> (qemu) info status
> VM status: paused
> (qemu) loadvm running
> (qemu) info status
> VM status: running
>
> # restore the one paused
> (qemu) loadvm paused
> (qemu) info status
> VM status: paused
> (qemu) cont
> (qemu)info status
> VM status: running
>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> ---
> include/sysemu/sysemu.h | 2 ++
> migration.c | 6 +-----
> monitor.c | 5 ++---
> savevm.c | 1 +
> vl.c | 34 ++++++++++++++++++++++++++++++++++
> 5 files changed, 40 insertions(+), 8 deletions(-)
>
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index b19ec95..f121213 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -19,6 +19,8 @@ extern uint8_t qemu_uuid[];
> int qemu_uuid_parse(const char *str, uint8_t *uuid);
> #define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
>
> +void save_run_state(void);
> +void load_run_state(void);
> bool runstate_check(RunState state);
> void runstate_set(RunState new_state);
> int runstate_is_running(void);
> diff --git a/migration.c b/migration.c
> index 11725ae..c29830e 100644
> --- a/migration.c
> +++ b/migration.c
> @@ -107,11 +107,7 @@ static void process_incoming_migration_co(void *opaque)
> /* Make sure all file formats flush their mutable metadata */
> bdrv_invalidate_cache_all();
>
> - if (autostart) {
> - vm_start();
> - } else {
> - runstate_set(RUN_STATE_PAUSED);
> - }
> + load_run_state();
> }
>
> void process_incoming_migration(QEMUFile *f)
> diff --git a/monitor.c b/monitor.c
> index 32a6e74..bf974b4 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -2059,13 +2059,12 @@ void qmp_closefd(const char *fdname, Error **errp)
>
> static void do_loadvm(Monitor *mon, const QDict *qdict)
> {
> - int saved_vm_running = runstate_is_running();
> const char *name = qdict_get_str(qdict, "name");
>
> vm_stop(RUN_STATE_RESTORE_VM);
>
> - if (load_vmstate(name) == 0 && saved_vm_running) {
> - vm_start();
> + if (load_vmstate(name) == 0) {
> + load_run_state();
> }
> }
>
> diff --git a/savevm.c b/savevm.c
> index a8a53ef..aa631eb 100644
> --- a/savevm.c
> +++ b/savevm.c
> @@ -2143,6 +2143,7 @@ void do_savevm(Monitor *mon, const QDict *qdict)
> }
>
> saved_vm_running = runstate_is_running();
> + save_run_state();
> vm_stop(RUN_STATE_SAVE_VM);
>
> memset(sn, 0, sizeof(*sn));
> diff --git a/vl.c b/vl.c
> index febd2ea..7991f2e 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -523,6 +523,7 @@ static int default_driver_check(QemuOpts *opts, void *opaque)
> /* QEMU state */
>
> static RunState current_run_state = RUN_STATE_PRELAUNCH;
> +static RunState saved_run_state = RUN_STATE_RUNNING;
>
> typedef struct {
> RunState from;
> @@ -546,6 +547,7 @@ static const RunStateTransition runstate_transitions_def[] = {
> { RUN_STATE_PAUSED, RUN_STATE_FINISH_MIGRATE },
>
> { RUN_STATE_POSTMIGRATE, RUN_STATE_RUNNING },
> + { RUN_STATE_POSTMIGRATE, RUN_STATE_PAUSED },
> { RUN_STATE_POSTMIGRATE, RUN_STATE_FINISH_MIGRATE },
>
> { RUN_STATE_PRELAUNCH, RUN_STATE_RUNNING },
> @@ -556,6 +558,7 @@ static const RunStateTransition runstate_transitions_def[] = {
> { RUN_STATE_FINISH_MIGRATE, RUN_STATE_POSTMIGRATE },
>
> { RUN_STATE_RESTORE_VM, RUN_STATE_RUNNING },
> + { RUN_STATE_RESTORE_VM, RUN_STATE_PAUSED },
>
> { RUN_STATE_RUNNING, RUN_STATE_DEBUG },
> { RUN_STATE_RUNNING, RUN_STATE_INTERNAL_ERROR },
> @@ -585,11 +588,39 @@ static const RunStateTransition runstate_transitions_def[] = {
>
> static bool runstate_valid_transitions[RUN_STATE_MAX][RUN_STATE_MAX];
>
> +void save_run_state(void)
> +{
> + saved_run_state = current_run_state;
> +}
> +
> +void load_run_state(void)
> +{
> + if (saved_run_state == RUN_STATE_RUNNING) {
> + vm_start();
> + } else if (!runstate_check(saved_run_state)) {
> + runstate_set(saved_run_state);
> + } else {
> + ; /* leave unchanged */
> + }
> +}
> +
> bool runstate_check(RunState state)
> {
> return current_run_state == state;
> }
>
> +static void runstate_save(QEMUFile *f, void *opaque)
> +{
> + qemu_put_byte(f, saved_run_state);
> +}
> +
> +static int runstate_load(QEMUFile *f, void *opaque, int version_id)
> +{
> + saved_run_state = qemu_get_byte(f);
> +
> + return 0;
> +}
> +
> static void runstate_init(void)
> {
> const RunStateTransition *p;
> @@ -599,6 +630,9 @@ static void runstate_init(void)
> for (p = &runstate_transitions_def[0]; p->from != RUN_STATE_MAX; p++) {
> runstate_valid_transitions[p->from][p->to] = true;
> }
> +
> + register_savevm(NULL, "runstate", 0, 1,
> + runstate_save, runstate_load, NULL);
> }
>
> /* This function will abort() on invalid state transitions */
>
next prev parent reply other threads:[~2013-03-04 9:30 UTC|newest]
Thread overview: 136+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-28 12:13 [PATCH v13 0/8] pv event interface between host and guest Hu Tao
2013-02-28 12:13 ` Hu Tao
2013-02-28 12:13 ` [PATCH v13] kvm: notify host when the guest is panicked Hu Tao
2013-02-28 12:13 ` Hu Tao
2013-02-28 12:13 ` [PATCH v13 1/8] save/load cpu runstate Hu Tao
2013-02-28 12:13 ` Hu Tao
2013-02-28 21:12 ` Eric Blake
2013-02-28 21:12 ` Eric Blake
2013-03-01 7:36 ` Hu Tao
2013-03-01 7:36 ` [Qemu-devel] " Hu Tao
2013-03-01 7:36 ` Hu Tao
2013-03-01 16:29 ` Eric Blake
2013-03-01 16:29 ` [Qemu-devel] " Eric Blake
2013-03-01 16:29 ` Eric Blake
2013-03-04 9:30 ` Paolo Bonzini [this message]
2013-03-04 9:30 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 9:30 ` Paolo Bonzini
2013-03-05 2:33 ` Hu Tao
2013-03-05 2:33 ` [Qemu-devel] " Hu Tao
2013-03-05 2:33 ` Hu Tao
2013-03-05 8:24 ` Paolo Bonzini
2013-03-05 8:24 ` [Qemu-devel] " Paolo Bonzini
2013-03-05 8:24 ` Paolo Bonzini
2013-02-28 12:13 ` [PATCH v13 2/8] start vm after resetting it Hu Tao
2013-02-28 12:13 ` Hu Tao
2013-02-28 13:23 ` Jan Kiszka
2013-02-28 13:23 ` Jan Kiszka
2013-03-05 3:05 ` Hu Tao
2013-03-05 3:05 ` [Qemu-devel] " Hu Tao
2013-03-05 3:05 ` Hu Tao
2013-03-04 9:32 ` Paolo Bonzini
2013-03-04 9:32 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 9:32 ` Paolo Bonzini
2013-03-05 3:06 ` Hu Tao
2013-03-05 3:06 ` [Qemu-devel] " Hu Tao
2013-03-05 3:06 ` Hu Tao
2013-02-28 12:13 ` [PATCH v13 3/8] update kernel headers Hu Tao
2013-02-28 12:13 ` Hu Tao
2013-02-28 12:13 ` [PATCH v13 4/8] add a new runstate: RUN_STATE_GUEST_PANICKED Hu Tao
2013-02-28 12:13 ` Hu Tao
2013-03-04 9:40 ` Paolo Bonzini
2013-03-04 9:40 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 9:40 ` Paolo Bonzini
2013-03-05 3:17 ` Hu Tao
2013-03-05 3:17 ` [Qemu-devel] " Hu Tao
2013-03-05 3:17 ` Hu Tao
2013-03-05 8:26 ` Paolo Bonzini
2013-03-05 8:26 ` [Qemu-devel] " Paolo Bonzini
2013-03-05 8:26 ` Paolo Bonzini
2013-03-06 9:03 ` Hu Tao
2013-03-06 9:03 ` [Qemu-devel] " Hu Tao
2013-03-06 9:03 ` Hu Tao
2013-02-28 12:13 ` [PATCH v13 5/8] add a new qevent: QEVENT_GUEST_PANICKED Hu Tao
2013-02-28 12:13 ` Hu Tao
2013-03-01 16:31 ` Eric Blake
2013-03-01 16:31 ` [Qemu-devel] " Eric Blake
2013-03-01 16:31 ` Eric Blake
2013-03-05 3:17 ` Hu Tao
2013-03-05 3:17 ` [Qemu-devel] " Hu Tao
2013-03-05 3:17 ` Hu Tao
2013-03-04 9:40 ` Paolo Bonzini
2013-03-04 9:40 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 9:40 ` Paolo Bonzini
2013-02-28 12:13 ` [PATCH v13 6/8] introduce a new qom device to deal with panicked event Hu Tao
2013-02-28 12:13 ` Hu Tao
2013-03-04 9:42 ` Paolo Bonzini
2013-03-04 9:42 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 9:42 ` Paolo Bonzini
2013-03-04 10:10 ` Christian Borntraeger
2013-03-04 10:10 ` [Qemu-devel] " Christian Borntraeger
2013-03-04 10:21 ` Paolo Bonzini
2013-03-04 10:21 ` [Qemu-devel] " Paolo Bonzini
2013-02-28 12:13 ` [PATCH v13 7/8] allower the user to disable pv event support Hu Tao
2013-02-28 12:13 ` Hu Tao
2013-03-04 9:47 ` Paolo Bonzini
2013-03-04 9:47 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 9:47 ` Paolo Bonzini
2013-02-28 12:13 ` [PATCH v13 8/8] pv event: add document to describe the usage Hu Tao
2013-02-28 12:13 ` Hu Tao
2013-03-03 9:17 ` [PATCH v13 0/8] pv event interface between host and guest Gleb Natapov
2013-03-03 9:17 ` [Qemu-devel] " Gleb Natapov
2013-03-03 9:17 ` Gleb Natapov
2013-03-04 10:05 ` Paolo Bonzini
2013-03-04 10:05 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 10:05 ` Paolo Bonzini
2013-03-04 10:21 ` Gleb Natapov
2013-03-04 10:21 ` [Qemu-devel] " Gleb Natapov
2013-03-04 10:21 ` Gleb Natapov
2013-03-04 10:28 ` Paolo Bonzini
2013-03-04 10:28 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 10:43 ` Gleb Natapov
2013-03-04 10:43 ` [Qemu-devel] " Gleb Natapov
2013-03-04 10:43 ` Gleb Natapov
2013-03-04 10:49 ` Paolo Bonzini
2013-03-04 10:49 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 10:49 ` Paolo Bonzini
2013-03-04 10:59 ` Gleb Natapov
2013-03-04 10:59 ` [Qemu-devel] " Gleb Natapov
2013-03-04 10:59 ` Gleb Natapov
2013-03-04 11:10 ` Paolo Bonzini
2013-03-04 11:10 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 11:10 ` Paolo Bonzini
2013-03-04 11:20 ` Gleb Natapov
2013-03-04 11:20 ` [Qemu-devel] " Gleb Natapov
2013-03-04 11:20 ` Gleb Natapov
2013-03-04 11:35 ` Paolo Bonzini
2013-03-04 11:35 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 11:35 ` Paolo Bonzini
2013-03-04 11:52 ` Gleb Natapov
2013-03-04 11:52 ` [Qemu-devel] " Gleb Natapov
2013-03-04 11:52 ` Gleb Natapov
2013-03-04 12:21 ` Paolo Bonzini
2013-03-04 12:21 ` [Qemu-devel] " Paolo Bonzini
2013-03-04 12:21 ` Paolo Bonzini
2013-03-06 8:56 ` Hu Tao
2013-03-06 8:56 ` [Qemu-devel] " Hu Tao
2013-03-06 8:56 ` Hu Tao
2013-03-06 9:07 ` Paolo Bonzini
2013-03-06 9:07 ` [Qemu-devel] " Paolo Bonzini
2013-03-06 9:28 ` li guang
2013-03-06 9:28 ` li guang
2013-03-06 9:38 ` Gleb Natapov
2013-03-06 9:38 ` [Qemu-devel] " Gleb Natapov
2013-03-06 9:38 ` Gleb Natapov
2013-03-06 9:48 ` Paolo Bonzini
2013-03-06 9:48 ` [Qemu-devel] " Paolo Bonzini
2013-03-06 9:48 ` Paolo Bonzini
2013-03-06 9:59 ` Gleb Natapov
2013-03-06 9:59 ` [Qemu-devel] " Gleb Natapov
2013-03-06 9:59 ` Gleb Natapov
2013-03-06 8:46 ` Hu Tao
2013-03-06 8:46 ` [Qemu-devel] " Hu Tao
2013-03-06 8:46 ` Hu Tao
2013-03-06 9:37 ` Gleb Natapov
2013-03-06 9:37 ` [Qemu-devel] " Gleb Natapov
2013-03-06 9:37 ` Gleb Natapov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=513469C8.30602@redhat.com \
--to=pbonzini@redhat.com \
--cc=agraf@suse.de \
--cc=alex.williamson@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=armbru@redhat.com \
--cc=blauwirbel@gmail.com \
--cc=drjones@redhat.com \
--cc=gleb@redhat.com \
--cc=hutao@cn.fujitsu.com \
--cc=jan.kiszka@siemens.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kvm@vger.kernel.org \
--cc=kwolf@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=levinsasha928@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=mtosatti@redhat.com \
--cc=owasserm@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.