Patchwork [qom-cpu,for-1.6] cpu: Fix VMSTATE_CPU() semantics

login
register
mail settings
Submitter Andreas Färber
Date July 29, 2013, 2:20 a.m.
Message ID <1375064446-15467-1-git-send-email-afaerber@suse.de>
Download mbox | patch
Permalink /patch/262644/
State New
Headers show

Comments

Andreas Färber - July 29, 2013, 2:20 a.m.
Commit 1a1562f5ea3da17d45d3829e35b5f49da9ec2db5 prepared a VMSTATE_CPU()
macro for device-style VMStateDescription registration, but missed to
adapt cpu_exec_init(), so that the "cpu_common" VMStateDescription was
still registered for AlphaCPU (fe31e7374299c0c6172ce618b29bf2fecbd881c7)
and OpenRISCCPU (da69721460e652072b6a3dd52b7693da21ffe237). Fix this.

Cc: Richard Henderson <rth@twiddle.net>
Cc: Jia Liu <proljc@gmail.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 exec.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
Jia Liu - July 29, 2013, 3:44 a.m.
On Mon, Jul 29, 2013 at 10:20 AM, Andreas Färber <afaerber@suse.de> wrote:
> Commit 1a1562f5ea3da17d45d3829e35b5f49da9ec2db5 prepared a VMSTATE_CPU()
> macro for device-style VMStateDescription registration, but missed to
> adapt cpu_exec_init(), so that the "cpu_common" VMStateDescription was
> still registered for AlphaCPU (fe31e7374299c0c6172ce618b29bf2fecbd881c7)
> and OpenRISCCPU (da69721460e652072b6a3dd52b7693da21ffe237). Fix this.
>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: Jia Liu <proljc@gmail.com>
> Signed-off-by: Andreas Färber <afaerber@suse.de>
> ---
>  exec.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/exec.c b/exec.c
> index c4f2894..3ca9381 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -402,11 +402,14 @@ void cpu_exec_init(CPUArchState *env)
>  #if defined(CONFIG_USER_ONLY)
>      cpu_list_unlock();
>  #endif
> -    vmstate_register(NULL, cpu_index, &vmstate_cpu_common, cpu);
> +    if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
> +        vmstate_register(NULL, cpu_index, &vmstate_cpu_common, cpu);
> +    }
>  #if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
>      register_savevm(NULL, "cpu", cpu_index, CPU_SAVE_VERSION,
>                      cpu_save, cpu_load, env);
>      assert(cc->vmsd == NULL);
> +    assert(qdev_get_vmsd(DEVICE(cpu)) == NULL);
>  #endif
>      if (cc->vmsd != NULL) {
>          vmstate_register(NULL, cpu_index, cc->vmsd, cpu);

Tested-by: Jia Liu <proljc@gmail.com>

> --
> 1.8.1.4
>

Regards,
Jia

Patch

diff --git a/exec.c b/exec.c
index c4f2894..3ca9381 100644
--- a/exec.c
+++ b/exec.c
@@ -402,11 +402,14 @@  void cpu_exec_init(CPUArchState *env)
 #if defined(CONFIG_USER_ONLY)
     cpu_list_unlock();
 #endif
-    vmstate_register(NULL, cpu_index, &vmstate_cpu_common, cpu);
+    if (qdev_get_vmsd(DEVICE(cpu)) == NULL) {
+        vmstate_register(NULL, cpu_index, &vmstate_cpu_common, cpu);
+    }
 #if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
     register_savevm(NULL, "cpu", cpu_index, CPU_SAVE_VERSION,
                     cpu_save, cpu_load, env);
     assert(cc->vmsd == NULL);
+    assert(qdev_get_vmsd(DEVICE(cpu)) == NULL);
 #endif
     if (cc->vmsd != NULL) {
         vmstate_register(NULL, cpu_index, cc->vmsd, cpu);