qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH for-5.0] vl.c: fix migration failure for 3.1 and older machine types
@ 2020-03-04 17:27 Igor Mammedov
  2020-03-08 10:18 ` Lukáš Doktor
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Igor Mammedov @ 2020-03-04 17:27 UTC (permalink / raw)
  To: qemu-devel; +Cc: ldoktor, pbonzini, dgilbert, marcandre.lureau

Migration from QEMU(v4.0) fails when using 3.1 or older machine
type. For example if one attempts to migrate
QEMU-2.12 started as
  qemu-system-ppc64 -nodefaults -M pseries-2.12 -m 4096 -mem-path /tmp/
to current master, it will fail with
  qemu-system-ppc64: Unknown ramblock "ppc_spapr.ram", cannot accept migration
  qemu-system-ppc64: error while loading state for instance 0x0 of device 'ram'
  qemu-system-ppc64: load of migration failed: Invalid argument

Caused by 900c0ba373 commit which switches main RAM allocation to
memory backends and the fact in 3.1 and older QEMU, backends used
full[***] QOM path as memory region name instead of backend's name.
That was changed after 3.1 to use prefix-less names by default
(fa0cb34d22) for new machine types.
*** effectively makes main RAM memory region names defined by
MachineClass::default_ram_id being altered with '/objects/' prefix
and therefore migration fails as old QEMU sends prefix-less
name while new QEMU expects name with prefix when using 3.1 and
older machine types.

Fix it by forcing implicit[1] memory backend to always use
prefix-less names for its memory region by setting
  'x-use-canonical-path-for-ramblock-id'
property to false.

1) i.e. memory backend created by compat glue which maps
-m/-mem-path/-mem-prealloc/default RAM size into
appropriate backend type/options to match old CLI format.

Fixes: 900c0ba373
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reported-by: Lukáš Doktor <ldoktor@redhat.com>
---
CC: ldoktor@redhat.com
CC: marcandre.lureau@redhat.com
CC: dgilbert@redhat.com
---
 softmmu/vl.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/softmmu/vl.c b/softmmu/vl.c
index 5549f4b619..1101b1cb41 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -2800,6 +2800,9 @@ static void create_default_memdev(MachineState *ms, const char *path)
     object_property_set_int(obj, ms->ram_size, "size", &error_fatal);
     object_property_add_child(object_get_objects_root(), mc->default_ram_id,
                               obj, &error_fatal);
+    /* Ensure backend's memory region name is equal to mc->default_ram_id */
+    object_property_set_bool(obj, false, "x-use-canonical-path-for-ramblock-id",
+                             &error_fatal);
     user_creatable_complete(USER_CREATABLE(obj), &error_fatal);
     object_unref(obj);
     object_property_set_str(OBJECT(ms), mc->default_ram_id, "memory-backend",
-- 
2.18.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH for-5.0] vl.c: fix migration failure for 3.1 and older machine types
  2020-03-04 17:27 [PATCH for-5.0] vl.c: fix migration failure for 3.1 and older machine types Igor Mammedov
@ 2020-03-08 10:18 ` Lukáš Doktor
  2020-03-09 15:14 ` Marc-André Lureau
  2020-03-17 16:52 ` Igor Mammedov
  2 siblings, 0 replies; 5+ messages in thread
From: Lukáš Doktor @ 2020-03-08 10:18 UTC (permalink / raw)
  To: Igor Mammedov, qemu-devel; +Cc: pbonzini, dgilbert, marcandre.lureau


[-- Attachment #1.1: Type: text/plain, Size: 2955 bytes --]

Dne 04. 03. 20 v 18:27 Igor Mammedov napsal(a):
> Migration from QEMU(v4.0) fails when using 3.1 or older machine
> type. For example if one attempts to migrate
> QEMU-2.12 started as
>   qemu-system-ppc64 -nodefaults -M pseries-2.12 -m 4096 -mem-path /tmp/
> to current master, it will fail with
>   qemu-system-ppc64: Unknown ramblock "ppc_spapr.ram", cannot accept migration
>   qemu-system-ppc64: error while loading state for instance 0x0 of device 'ram'
>   qemu-system-ppc64: load of migration failed: Invalid argument
> 
> Caused by 900c0ba373 commit which switches main RAM allocation to
> memory backends and the fact in 3.1 and older QEMU, backends used
> full[***] QOM path as memory region name instead of backend's name.
> That was changed after 3.1 to use prefix-less names by default
> (fa0cb34d22) for new machine types.
> *** effectively makes main RAM memory region names defined by
> MachineClass::default_ram_id being altered with '/objects/' prefix
> and therefore migration fails as old QEMU sends prefix-less
> name while new QEMU expects name with prefix when using 3.1 and
> older machine types.
> 
> Fix it by forcing implicit[1] memory backend to always use
> prefix-less names for its memory region by setting
>   'x-use-canonical-path-for-ramblock-id'
> property to false.
> 
> 1) i.e. memory backend created by compat glue which maps
> -m/-mem-path/-mem-prealloc/default RAM size into
> appropriate backend type/options to match old CLI format.
> 
> Fixes: 900c0ba373
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> Reported-by: Lukáš Doktor <ldoktor@redhat.com>
> ---
> CC: ldoktor@redhat.com
> CC: marcandre.lureau@redhat.com
> CC: dgilbert@redhat.com
> ---
>  softmmu/vl.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 5549f4b619..1101b1cb41 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -2800,6 +2800,9 @@ static void create_default_memdev(MachineState *ms, const char *path)
>      object_property_set_int(obj, ms->ram_size, "size", &error_fatal);
>      object_property_add_child(object_get_objects_root(), mc->default_ram_id,
>                                obj, &error_fatal);
> +    /* Ensure backend's memory region name is equal to mc->default_ram_id */
> +    object_property_set_bool(obj, false, "x-use-canonical-path-for-ramblock-id",
> +                             &error_fatal);
>      user_creatable_complete(USER_CREATABLE(obj), &error_fatal);
>      object_unref(obj);
>      object_property_set_str(OBJECT(ms), mc->default_ram_id, "memory-backend",
> 

Tested-by: Lukáš Doktor <ldoktor@redhat.com> 

I can't say anything about the code, but functional-wise it addresses the issue and fixes post_copy hugepages migration in my mini-CI (variants 2.10, 2.12, 3.0, 3.1, 4.0 -> master and vice-versa are failing with master and passing with this patch).

Regards,
Lukáš


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH for-5.0] vl.c: fix migration failure for 3.1 and older machine types
  2020-03-04 17:27 [PATCH for-5.0] vl.c: fix migration failure for 3.1 and older machine types Igor Mammedov
  2020-03-08 10:18 ` Lukáš Doktor
@ 2020-03-09 15:14 ` Marc-André Lureau
  2020-03-17 16:52 ` Igor Mammedov
  2 siblings, 0 replies; 5+ messages in thread
From: Marc-André Lureau @ 2020-03-09 15:14 UTC (permalink / raw)
  To: Igor Mammedov; +Cc: ldoktor, Paolo Bonzini, QEMU, Dr. David Alan Gilbert

Hi

On Wed, Mar 4, 2020 at 6:28 PM Igor Mammedov <imammedo@redhat.com> wrote:
>
> Migration from QEMU(v4.0) fails when using 3.1 or older machine
> type. For example if one attempts to migrate
> QEMU-2.12 started as
>   qemu-system-ppc64 -nodefaults -M pseries-2.12 -m 4096 -mem-path /tmp/
> to current master, it will fail with
>   qemu-system-ppc64: Unknown ramblock "ppc_spapr.ram", cannot accept migration
>   qemu-system-ppc64: error while loading state for instance 0x0 of device 'ram'
>   qemu-system-ppc64: load of migration failed: Invalid argument
>
> Caused by 900c0ba373 commit which switches main RAM allocation to
> memory backends and the fact in 3.1 and older QEMU, backends used
> full[***] QOM path as memory region name instead of backend's name.
> That was changed after 3.1 to use prefix-less names by default
> (fa0cb34d22) for new machine types.
> *** effectively makes main RAM memory region names defined by
> MachineClass::default_ram_id being altered with '/objects/' prefix
> and therefore migration fails as old QEMU sends prefix-less
> name while new QEMU expects name with prefix when using 3.1 and
> older machine types.
>
> Fix it by forcing implicit[1] memory backend to always use
> prefix-less names for its memory region by setting
>   'x-use-canonical-path-for-ramblock-id'
> property to false.

ahah, ok. If main RAM allocation was always using prefix-less name,
then that should be good enough:
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


>
> 1) i.e. memory backend created by compat glue which maps
> -m/-mem-path/-mem-prealloc/default RAM size into
> appropriate backend type/options to match old CLI format.
>
> Fixes: 900c0ba373
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> Reported-by: Lukáš Doktor <ldoktor@redhat.com>
> ---
> CC: ldoktor@redhat.com
> CC: marcandre.lureau@redhat.com
> CC: dgilbert@redhat.com
> ---
>  softmmu/vl.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 5549f4b619..1101b1cb41 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -2800,6 +2800,9 @@ static void create_default_memdev(MachineState *ms, const char *path)
>      object_property_set_int(obj, ms->ram_size, "size", &error_fatal);
>      object_property_add_child(object_get_objects_root(), mc->default_ram_id,
>                                obj, &error_fatal);
> +    /* Ensure backend's memory region name is equal to mc->default_ram_id */
> +    object_property_set_bool(obj, false, "x-use-canonical-path-for-ramblock-id",
> +                             &error_fatal);
>      user_creatable_complete(USER_CREATABLE(obj), &error_fatal);
>      object_unref(obj);
>      object_property_set_str(OBJECT(ms), mc->default_ram_id, "memory-backend",
> --
> 2.18.1
>
>


-- 
Marc-André Lureau


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH for-5.0] vl.c: fix migration failure for 3.1 and older machine types
  2020-03-04 17:27 [PATCH for-5.0] vl.c: fix migration failure for 3.1 and older machine types Igor Mammedov
  2020-03-08 10:18 ` Lukáš Doktor
  2020-03-09 15:14 ` Marc-André Lureau
@ 2020-03-17 16:52 ` Igor Mammedov
  2020-03-24 18:59   ` Dr. David Alan Gilbert
  2 siblings, 1 reply; 5+ messages in thread
From: Igor Mammedov @ 2020-03-17 16:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: ldoktor, pbonzini, dgilbert, marcandre.lureau

On Wed,  4 Mar 2020 12:27:48 -0500
Igor Mammedov <imammedo@redhat.com> wrote:

> Migration from QEMU(v4.0) fails when using 3.1 or older machine
> type. For example if one attempts to migrate
> QEMU-2.12 started as
>   qemu-system-ppc64 -nodefaults -M pseries-2.12 -m 4096 -mem-path /tmp/
> to current master, it will fail with
>   qemu-system-ppc64: Unknown ramblock "ppc_spapr.ram", cannot accept migration
>   qemu-system-ppc64: error while loading state for instance 0x0 of device 'ram'
>   qemu-system-ppc64: load of migration failed: Invalid argument
> 
> Caused by 900c0ba373 commit which switches main RAM allocation to
> memory backends and the fact in 3.1 and older QEMU, backends used
> full[***] QOM path as memory region name instead of backend's name.
> That was changed after 3.1 to use prefix-less names by default
> (fa0cb34d22) for new machine types.
> *** effectively makes main RAM memory region names defined by
> MachineClass::default_ram_id being altered with '/objects/' prefix
> and therefore migration fails as old QEMU sends prefix-less
> name while new QEMU expects name with prefix when using 3.1 and
> older machine types.
> 
> Fix it by forcing implicit[1] memory backend to always use
> prefix-less names for its memory region by setting
>   'x-use-canonical-path-for-ramblock-id'
> property to false.
> 
> 1) i.e. memory backend created by compat glue which maps
> -m/-mem-path/-mem-prealloc/default RAM size into
> appropriate backend type/options to match old CLI format.
> 
> Fixes: 900c0ba373
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> Reported-by: Lukáš Doktor <ldoktor@redhat.com>


ping,

so we don't forget to merge it

> ---
> CC: ldoktor@redhat.com
> CC: marcandre.lureau@redhat.com
> CC: dgilbert@redhat.com
> ---
>  softmmu/vl.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 5549f4b619..1101b1cb41 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -2800,6 +2800,9 @@ static void create_default_memdev(MachineState *ms, const char *path)
>      object_property_set_int(obj, ms->ram_size, "size", &error_fatal);
>      object_property_add_child(object_get_objects_root(), mc->default_ram_id,
>                                obj, &error_fatal);
> +    /* Ensure backend's memory region name is equal to mc->default_ram_id */
> +    object_property_set_bool(obj, false, "x-use-canonical-path-for-ramblock-id",
> +                             &error_fatal);
>      user_creatable_complete(USER_CREATABLE(obj), &error_fatal);
>      object_unref(obj);
>      object_property_set_str(OBJECT(ms), mc->default_ram_id, "memory-backend",



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH for-5.0] vl.c: fix migration failure for 3.1 and older machine types
  2020-03-17 16:52 ` Igor Mammedov
@ 2020-03-24 18:59   ` Dr. David Alan Gilbert
  0 siblings, 0 replies; 5+ messages in thread
From: Dr. David Alan Gilbert @ 2020-03-24 18:59 UTC (permalink / raw)
  To: Igor Mammedov; +Cc: ldoktor, pbonzini, qemu-devel, marcandre.lureau

* Igor Mammedov (imammedo@redhat.com) wrote:
> On Wed,  4 Mar 2020 12:27:48 -0500
> Igor Mammedov <imammedo@redhat.com> wrote:
> 
> > Migration from QEMU(v4.0) fails when using 3.1 or older machine
> > type. For example if one attempts to migrate
> > QEMU-2.12 started as
> >   qemu-system-ppc64 -nodefaults -M pseries-2.12 -m 4096 -mem-path /tmp/
> > to current master, it will fail with
> >   qemu-system-ppc64: Unknown ramblock "ppc_spapr.ram", cannot accept migration
> >   qemu-system-ppc64: error while loading state for instance 0x0 of device 'ram'
> >   qemu-system-ppc64: load of migration failed: Invalid argument
> > 
> > Caused by 900c0ba373 commit which switches main RAM allocation to
> > memory backends and the fact in 3.1 and older QEMU, backends used
> > full[***] QOM path as memory region name instead of backend's name.
> > That was changed after 3.1 to use prefix-less names by default
> > (fa0cb34d22) for new machine types.
> > *** effectively makes main RAM memory region names defined by
> > MachineClass::default_ram_id being altered with '/objects/' prefix
> > and therefore migration fails as old QEMU sends prefix-less
> > name while new QEMU expects name with prefix when using 3.1 and
> > older machine types.
> > 
> > Fix it by forcing implicit[1] memory backend to always use
> > prefix-less names for its memory region by setting
> >   'x-use-canonical-path-for-ramblock-id'
> > property to false.
> > 
> > 1) i.e. memory backend created by compat glue which maps
> > -m/-mem-path/-mem-prealloc/default RAM size into
> > appropriate backend type/options to match old CLI format.
> > 
> > Fixes: 900c0ba373
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > Reported-by: Lukáš Doktor <ldoktor@redhat.com>
> 
> 
> ping,
> 
> so we don't forget to merge it

I'm queueing this.

> > ---
> > CC: ldoktor@redhat.com
> > CC: marcandre.lureau@redhat.com
> > CC: dgilbert@redhat.com
> > ---
> >  softmmu/vl.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/softmmu/vl.c b/softmmu/vl.c
> > index 5549f4b619..1101b1cb41 100644
> > --- a/softmmu/vl.c
> > +++ b/softmmu/vl.c
> > @@ -2800,6 +2800,9 @@ static void create_default_memdev(MachineState *ms, const char *path)
> >      object_property_set_int(obj, ms->ram_size, "size", &error_fatal);
> >      object_property_add_child(object_get_objects_root(), mc->default_ram_id,
> >                                obj, &error_fatal);
> > +    /* Ensure backend's memory region name is equal to mc->default_ram_id */
> > +    object_property_set_bool(obj, false, "x-use-canonical-path-for-ramblock-id",
> > +                             &error_fatal);
> >      user_creatable_complete(USER_CREATABLE(obj), &error_fatal);
> >      object_unref(obj);
> >      object_property_set_str(OBJECT(ms), mc->default_ram_id, "memory-backend",
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-03-24 19:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-04 17:27 [PATCH for-5.0] vl.c: fix migration failure for 3.1 and older machine types Igor Mammedov
2020-03-08 10:18 ` Lukáš Doktor
2020-03-09 15:14 ` Marc-André Lureau
2020-03-17 16:52 ` Igor Mammedov
2020-03-24 18:59   ` Dr. David Alan Gilbert

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).