f4b2d15476
- SLE12 SP2 bugs merged via version updates of the Factory libvirt package: bsc#986718 - SLE12 SP2 FATEs merged via version updates of the Factory libvirt package: FATE#316228, FATE#316628, FATE#319531, FATE#319810, FATE#320490 - Replaced libxl-dom0-balloon-fix.patch with upstream patch f86a7a83-libxl-dom0-balloon-fix.patch OBS-URL: https://build.opensuse.org/request/show/454329 OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=581
53 lines
2.2 KiB
Diff
53 lines
2.2 KiB
Diff
commit f86a7a837207a1260ff7a8e4469b9057fbde11c8
|
|
Author: Jim Fehlig <jfehlig@suse.com>
|
|
Date: Tue Jan 17 15:11:32 2017 -0700
|
|
|
|
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.
|
|
|
|
Index: libvirt-3.0.0/src/libxl/libxl_domain.c
|
|
===================================================================
|
|
--- libvirt-3.0.0.orig/src/libxl/libxl_domain.c
|
|
+++ libvirt-3.0.0/src/libxl/libxl_domain.c
|
|
@@ -909,6 +909,7 @@ libxlDomainFreeMem(libxl_ctx *ctx, libxl
|
|
{
|
|
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
|
|
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;
|
|
|