diff mbox series

[v2] tools/libs/light: update xenstore entry when setting max domain memory

Message ID 20220420080426.7036-1-jgross@suse.com (mailing list archive)
State Superseded
Headers show
Series [v2] tools/libs/light: update xenstore entry when setting max domain memory | expand

Commit Message

Juergen Gross April 20, 2022, 8:04 a.m. UTC
libxl_domain_setmaxmem() called during "xl mem-max" should update the
domain's memory/static-max Xenstore node, as otherwise "xl mem-set"
won't be able to set the memory size to the new maximum.

Adjust the related comments and documentation accordingly.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V2:
- adjust comments and docs (Anthony Perard)
---
 tools/libs/light/libxl_mem.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

Comments

Anthony PERARD April 29, 2022, 2:52 p.m. UTC | #1
On Wed, Apr 20, 2022 at 10:04:26AM +0200, Juergen Gross wrote:
> libxl_domain_setmaxmem() called during "xl mem-max" should update the
> domain's memory/static-max Xenstore node, as otherwise "xl mem-set"
> won't be able to set the memory size to the new maximum.

Setting domain's memory higher than the original mem-max only works on
PV and maybe PVH guest, right? Because on HVM, QEMU is told about
maxmem when starting a guest, and allocates some stuff from this address
(vga buffer, pci rom I think) so trying to give HVM guest more memory
after the fact is probably not going to go smoothly.

> Adjust the related comments and documentation accordingly.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>
> ---
> V2:
> - adjust comments and docs (Anthony Perard)

Maybe `man xl` should be updated as well. In the section about `xl
mem-max`, there is:
    "Note however that the initial maxmem value is still used as an
    upper limit for xl mem-set.  Also note that calling xl mem-set will
    reset this value."

That wouldn't be true anymore with this patch.

Thanks,
Juergen Gross May 2, 2022, 8:16 a.m. UTC | #2
On 29.04.22 16:52, Anthony PERARD wrote:
> On Wed, Apr 20, 2022 at 10:04:26AM +0200, Juergen Gross wrote:
>> libxl_domain_setmaxmem() called during "xl mem-max" should update the
>> domain's memory/static-max Xenstore node, as otherwise "xl mem-set"
>> won't be able to set the memory size to the new maximum.
> 
> Setting domain's memory higher than the original mem-max only works on
> PV and maybe PVH guest, right? Because on HVM, QEMU is told about
> maxmem when starting a guest, and allocates some stuff from this address
> (vga buffer, pci rom I think) so trying to give HVM guest more memory
> after the fact is probably not going to go smoothly.

Works without a problem.

This area is marked in the e820 memory map, so the guest won't use it to
add memory.

> 
>> Adjust the related comments and documentation accordingly.
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> ---
>> V2:
>> - adjust comments and docs (Anthony Perard)
> 
> Maybe `man xl` should be updated as well. In the section about `xl
> mem-max`, there is:
>      "Note however that the initial maxmem value is still used as an
>      upper limit for xl mem-set.  Also note that calling xl mem-set will
>      reset this value."
> 
> That wouldn't be true anymore with this patch.

Weird. I did modify that man page, but obviously didn't check it was
really added to the patch. Sorry for that, will resend the patch with
that change included.


Juergen
diff mbox series

Patch

diff --git a/tools/libs/light/libxl_mem.c b/tools/libs/light/libxl_mem.c
index c739d00f39..92ec09f4cf 100644
--- a/tools/libs/light/libxl_mem.c
+++ b/tools/libs/light/libxl_mem.c
@@ -20,8 +20,7 @@ 
 /*
  * Set the maximum memory size of the domain in the hypervisor. There is no
  * change of the current memory size involved. The specified memory size can
- * even be above the configured maxmem size of the domain, but the related
- * Xenstore entry memory/static-max isn't modified!
+ * even be above the configured maxmem size of the domain.
  */
 int libxl_domain_setmaxmem(libxl_ctx *ctx, uint32_t domid, uint64_t max_memkb)
 {
@@ -82,6 +81,15 @@  int libxl_domain_setmaxmem(libxl_ctx *ctx, uint32_t domid, uint64_t max_memkb)
         goto out;
     }
 
+    rc = libxl__xs_printf(gc, XBT_NULL,
+                          GCSPRINTF("%s/memory/static-max", dompath),
+                          "%"PRIu64, max_memkb);
+    if (rc != 0) {
+        LOGED(ERROR, domid, "Couldn't set %s/memory/static-max, rc=%d\n",
+              dompath, rc);
+        goto out;
+    }
+
     rc = 0;
 out:
     libxl_domain_config_dispose(&d_config);