mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
libxl: fix dom0 autoballooning with Xen 4.8
xen.git commit 57f8b13c changed several of the libxl memory get/set functions to take 64 bit parameters. The libvirt libxl driver still uses uint32_t variables for these various parameters, which is particularly problematic for the libxl_set_memory_target() function. When dom0 autoballooning is enabled, libvirt (like xl) determines the memory needed to start a domain and the memory available. If memory available is less than memory needed, dom0 is ballooned down by passing a negative value to libxl_set_memory_target() 'target_memkb' parameter. Prior to xen.git commit 57f8b13c, 'target_memkb' was an int32_t. Subtracting a larger uint32 from a smaller uint32 and assigning it to int32 resulted in a negative number. After commit 57f8b13c, the same subtraction is widened to a int64, resulting in a large positive number. The simple fix taken by this patch is to assign the difference of the uint32 values to a temporary int32 variable, which is then passed to 'target_memkb' parameter of libxl_set_memory_target(). Note that it is undesirable to change libvirt to use 64 bit variables since it requires setting LIBXL_API_VERSION to 0x040800. Currently libvirt supports LIBXL_API_VERSION >= 0x040400, essentially Xen >= 4.4.
This commit is contained in:
parent
5550dde150
commit
f86a7a8372
@ -909,6 +909,7 @@ libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
|
||||
{
|
||||
uint32_t needed_mem;
|
||||
uint32_t free_mem;
|
||||
int32_t target_mem;
|
||||
int tries = 3;
|
||||
int wait_secs = 10;
|
||||
|
||||
@ -922,7 +923,8 @@ libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
|
||||
if (free_mem >= needed_mem)
|
||||
return 0;
|
||||
|
||||
if (libxl_set_memory_target(ctx, 0, free_mem - needed_mem,
|
||||
target_mem = free_mem - needed_mem;
|
||||
if (libxl_set_memory_target(ctx, 0, target_mem,
|
||||
/* relative */ 1, 0) < 0)
|
||||
goto error;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user