[PATCH] libxl: Disable relocating memory for qemu-xen in stubdomain too

Marek Marczykowski-Górecki posted 1 patch 4 months ago
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/20231227023544.1253277-1-marmarek@invisiblethingslab.com
tools/libs/light/libxl_dm.c | 10 ++++++++++
1 file changed, 10 insertions(+)
[PATCH] libxl: Disable relocating memory for qemu-xen in stubdomain too
Posted by Marek Marczykowski-Górecki 4 months ago
According to comments (and experiments) qemu-xen cannot handle memory
reolcation done by hvmloader. The code was already disabled when running
qemu-xen in dom0 (see libxl__spawn_local_dm()), but it was missed when
adding qemu-xen support to stubdomain. Adjust libxl__spawn_stub_dm() to
be consistent in this regard.

Reported-by: Neowutran <xen@neowutran.ovh>
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
---
 tools/libs/light/libxl_dm.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
index 14b593110f7c..ed620a9d8e14 100644
--- a/tools/libs/light/libxl_dm.c
+++ b/tools/libs/light/libxl_dm.c
@@ -2432,6 +2432,16 @@ void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss)
                         "%s",
                         libxl_bios_type_to_string(guest_config->b_info.u.hvm.bios));
     }
+    /* Disable relocating memory to make the MMIO hole larger
+     * unless we're running qemu-traditional and vNUMA is not
+     * configured. */
+    libxl__xs_printf(gc, XBT_NULL,
+                     libxl__sprintf(gc, "%s/hvmloader/allow-memory-relocate",
+                                    libxl__xs_get_dompath(gc, guest_domid)),
+                     "%d",
+                     guest_config->b_info.device_model_version
+                        == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL &&
+                     !libxl__vnuma_configured(&guest_config->b_info));
     ret = xc_domain_set_target(ctx->xch, dm_domid, guest_domid);
     if (ret<0) {
         LOGED(ERROR, guest_domid, "setting target domain %d -> %d",
-- 
2.41.0


Re: [PATCH] libxl: Disable relocating memory for qemu-xen in stubdomain too
Posted by Andrew Cooper 3 months, 3 weeks ago
On 27/12/2023 2:35 am, Marek Marczykowski-Górecki wrote:
> According to comments (and experiments) qemu-xen cannot handle memory
> reolcation done by hvmloader. The code was already disabled when running
> qemu-xen in dom0 (see libxl__spawn_local_dm()), but it was missed when
> adding qemu-xen support to stubdomain. Adjust libxl__spawn_stub_dm() to
> be consistent in this regard.
>
> Reported-by: Neowutran <xen@neowutran.ovh>
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

It turns out that it's unconditionally clobbered in XenServer too.

https://github.com/xapi-project/xen-api/blob/53d2e8cdff76ca6805c7018948a9c414b9ac7c72/ocaml/xenopsd/scripts/qemu-wrapper#L146

Not that I'm surprised - this falls squarely into guest-physmap mess
which is broken in several well-documented ways already.

~Andrew

Re: [PATCH] libxl: Disable relocating memory for qemu-xen in stubdomain too
Posted by Jason Andryuk 4 months ago
On Tue, Dec 26, 2023 at 11:49 PM Marek Marczykowski-Górecki
<marmarek@invisiblethingslab.com> wrote:
>
> According to comments (and experiments) qemu-xen cannot handle memory
> reolcation done by hvmloader. The code was already disabled when running
> qemu-xen in dom0 (see libxl__spawn_local_dm()), but it was missed when
> adding qemu-xen support to stubdomain. Adjust libxl__spawn_stub_dm() to
> be consistent in this regard.
>
> Reported-by: Neowutran <xen@neowutran.ovh>
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>

Reviewed-by: Jason Andryuk <jandryuk@gmail.com>

Thanks,
Jason
Re: [PATCH] libxl: Disable relocating memory for qemu-xen in stubdomain too
Posted by Anthony PERARD 2 months, 1 week ago
On Wed, Dec 27, 2023 at 07:18:12PM -0500, Jason Andryuk wrote:
> On Tue, Dec 26, 2023 at 11:49 PM Marek Marczykowski-Górecki
> <marmarek@invisiblethingslab.com> wrote:
> >
> > According to comments (and experiments) qemu-xen cannot handle memory
> > reolcation done by hvmloader. The code was already disabled when running
> > qemu-xen in dom0 (see libxl__spawn_local_dm()), but it was missed when
> > adding qemu-xen support to stubdomain. Adjust libxl__spawn_stub_dm() to
> > be consistent in this regard.
> >
> > Reported-by: Neowutran <xen@neowutran.ovh>
> > Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
> 
> Reviewed-by: Jason Andryuk <jandryuk@gmail.com>

Acked-by: Anthony PERARD <anthony.perard@citrix.com>

Thanks,

-- 
Anthony PERARD

Re: [PATCH] libxl: Disable relocating memory for qemu-xen in stubdomain too
Posted by Neowutran 4 months ago
On 2023-12-27 03:12, Marek Marczykowski-Górecki wrote:
> According to comments (and experiments) qemu-xen cannot handle memory
> reolcation done by hvmloader. The code was already disabled when running
> qemu-xen in dom0 (see libxl__spawn_local_dm()), but it was missed when
> adding qemu-xen support to stubdomain. Adjust libxl__spawn_stub_dm() to
> be consistent in this regard.
> 
> Reported-by: Neowutran <xen@neowutran.ovh>
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
> ---
>  tools/libs/light/libxl_dm.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
> index 14b593110f7c..ed620a9d8e14 100644
> --- a/tools/libs/light/libxl_dm.c
> +++ b/tools/libs/light/libxl_dm.c
> @@ -2432,6 +2432,16 @@ void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss)
>                          "%s",
>                          libxl_bios_type_to_string(guest_config->b_info.u.hvm.bios));
>      }
> +    /* Disable relocating memory to make the MMIO hole larger
> +     * unless we're running qemu-traditional and vNUMA is not
> +     * configured. */
> +    libxl__xs_printf(gc, XBT_NULL,
> +                     libxl__sprintf(gc, "%s/hvmloader/allow-memory-relocate",
> +                                    libxl__xs_get_dompath(gc, guest_domid)),
> +                     "%d",
> +                     guest_config->b_info.device_model_version
> +                        == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL &&
> +                     !libxl__vnuma_configured(&guest_config->b_info));
>      ret = xc_domain_set_target(ctx->xch, dm_domid, guest_domid);
>      if (ret<0) {
>          LOGED(ERROR, guest_domid, "setting target domain %d -> %d",
> -- 
> 2.41.0

Seems to work as expected

Thanks, 
Neowutran


Re: [PATCH] libxl: Disable relocating memory for qemu-xen in stubdomain too
Posted by Jan Beulich 3 months, 3 weeks ago
On 27.12.2023 17:54, Neowutran wrote:
> On 2023-12-27 03:12, Marek Marczykowski-Górecki wrote:
>> According to comments (and experiments) qemu-xen cannot handle memory
>> reolcation done by hvmloader. The code was already disabled when running
>> qemu-xen in dom0 (see libxl__spawn_local_dm()), but it was missed when
>> adding qemu-xen support to stubdomain. Adjust libxl__spawn_stub_dm() to
>> be consistent in this regard.
>>
>> Reported-by: Neowutran <xen@neowutran.ovh>
>> Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
>> ---
>>  tools/libs/light/libxl_dm.c | 10 ++++++++++
>>  1 file changed, 10 insertions(+)
>>
>> diff --git a/tools/libs/light/libxl_dm.c b/tools/libs/light/libxl_dm.c
>> index 14b593110f7c..ed620a9d8e14 100644
>> --- a/tools/libs/light/libxl_dm.c
>> +++ b/tools/libs/light/libxl_dm.c
>> @@ -2432,6 +2432,16 @@ void libxl__spawn_stub_dm(libxl__egc *egc, libxl__stub_dm_spawn_state *sdss)
>>                          "%s",
>>                          libxl_bios_type_to_string(guest_config->b_info.u.hvm.bios));
>>      }
>> +    /* Disable relocating memory to make the MMIO hole larger
>> +     * unless we're running qemu-traditional and vNUMA is not
>> +     * configured. */
>> +    libxl__xs_printf(gc, XBT_NULL,
>> +                     libxl__sprintf(gc, "%s/hvmloader/allow-memory-relocate",
>> +                                    libxl__xs_get_dompath(gc, guest_domid)),
>> +                     "%d",
>> +                     guest_config->b_info.device_model_version
>> +                        == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL &&
>> +                     !libxl__vnuma_configured(&guest_config->b_info));
>>      ret = xc_domain_set_target(ctx->xch, dm_domid, guest_domid);
>>      if (ret<0) {
>>          LOGED(ERROR, guest_domid, "setting target domain %d -> %d",
>> -- 
>> 2.41.0
> 
> Seems to work as expected

May we translate this to Tested-by: ?

Jan