mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
libxl_set_memory_target: retain the same maxmem offset on top of the current target
In libxl_set_memory_target when setting the new maxmem, retain the same offset on top of the current target. In the future the offset will include memory allocated by QEMU for rom files. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Acked-by: Wei Liu <wei.liu2@citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
1 parent
ed6dd1db77
commit
0c029c4da2
1 file changed
+10
-14
+10
-14
@@ -4676,11 +4676,16 @@ int libxl_set_memory_target(libxl_ctx *ctx, uint32_t domid,
|
||||
uint32_t current_max_memkb = 0;
|
||||
char *memmax, *endptr, *videoram_s = NULL, *target = NULL;
|
||||
char *dompath = libxl__xs_get_dompath(gc, domid);
|
||||
xc_domaininfo_t info;
|
||||
libxl_dominfo ptr;
|
||||
char *uuid;
|
||||
xs_transaction_t t;
|
||||
|
||||
libxl_dominfo_init(&ptr);
|
||||
if (libxl_domain_info(ctx, &ptr, domid) < 0)
|
||||
goto out_no_transaction;
|
||||
|
||||
uuid = libxl__uuid2string(gc, ptr.uuid);
|
||||
|
||||
retry_transaction:
|
||||
t = xs_transaction_start(ctx->xsh);
|
||||
|
||||
@@ -4756,13 +4761,12 @@ retry_transaction:
|
||||
}
|
||||
|
||||
if (enforce) {
|
||||
memorykb = new_target_memkb + videoram;
|
||||
rc = xc_domain_setmaxmem(ctx->xch, domid, memorykb +
|
||||
LIBXL_MAXMEM_CONSTANT);
|
||||
memorykb = ptr.max_memkb - current_target_memkb + new_target_memkb;
|
||||
rc = xc_domain_setmaxmem(ctx->xch, domid, memorykb);
|
||||
if (rc != 0) {
|
||||
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
|
||||
"xc_domain_setmaxmem domid=%d memkb=%d failed "
|
||||
"rc=%d\n", domid, memorykb + LIBXL_MAXMEM_CONSTANT, rc);
|
||||
"rc=%d\n", domid, memorykb, rc);
|
||||
abort_transaction = 1;
|
||||
goto out;
|
||||
}
|
||||
@@ -4781,18 +4785,9 @@ retry_transaction:
|
||||
|
||||
libxl__xs_write(gc, t, libxl__sprintf(gc, "%s/memory/target",
|
||||
dompath), "%"PRIu32, new_target_memkb);
|
||||
rc = xc_domain_getinfolist(ctx->xch, domid, 1, &info);
|
||||
if (rc != 1 || info.domain != domid) {
|
||||
abort_transaction = 1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
libxl_dominfo_init(&ptr);
|
||||
xcinfo2xlinfo(ctx, &info, &ptr);
|
||||
uuid = libxl__uuid2string(gc, ptr.uuid);
|
||||
libxl__xs_write(gc, t, libxl__sprintf(gc, "/vm/%s/memory", uuid),
|
||||
"%"PRIu32, new_target_memkb / 1024);
|
||||
libxl_dominfo_dispose(&ptr);
|
||||
|
||||
out:
|
||||
if (!xs_transaction_end(ctx->xsh, t, abort_transaction)
|
||||
@@ -4801,6 +4796,7 @@ out:
|
||||
goto retry_transaction;
|
||||
|
||||
out_no_transaction:
|
||||
libxl_dominfo_dispose(&ptr);
|
||||
GC_FREE;
|
||||
return rc;
|
||||
}
|
||||
|
||||