* [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).