SHA256
1
0
forked from pool/libvirt
libvirt/f86a7a83-libxl-dom0-balloon-fix.patch
James Fehlig f4b2d15476 Accepting request 454329 from home:jfehlig:branches:Virtualization
- 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
2017-02-03 00:07:15 +00:00

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;