Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-4.6
libvirt-7.0.0
libvirt.8bc6a55f1bb5bfc3887240c9c62363500be563b...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libvirt.8bc6a55f1bb5bfc3887240c9c62363500be563b1.patch of Package libvirt-7.0.0
From: Olaf Hering <olaf@aepfle.de> Date: Thu, 25 Mar 2021 17:26:11 +0100 Subject: 8bc6a55f1bb5bfc3887240c9c62363500be563b1 libxl: add API wrapper for libxl_set_memory_target Upcoming changes will use different LIBXL_API_VERSION variants. Prepare libxl_set_memory_target, which changed the storage size of parameter "target_memkb" in Xen 4.8. No functional change intended. Signed-off-by: Olaf Hering <olaf@aepfle.de> Reviewed-by: Jim Fehlig <jfehlig@suse.com> --- src/libxl/libxl_api_wrapper.h | 27 +++++++++++++++++++++++++++ src/libxl/libxl_domain.c | 6 +++--- src/libxl/libxl_driver.c | 4 ++-- 3 files changed, 32 insertions(+), 5 deletions(-) --- a/src/libxl/libxl_api_wrapper.h +++ b/src/libxl/libxl_api_wrapper.h @@ -11,24 +11,25 @@ * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * <http://www.gnu.org/licenses/>. */ #pragma once +#include <limits.h> #include <libxl.h> static inline int libxlDomainCreateRestoreWrapper(libxl_ctx *ctx, libxl_domain_config *d_config, uint32_t *domid, int restore_fd, const libxl_domain_restore_params *params, const libxl_asyncprogress_how *aop_console_how) { int ret; @@ -179,12 +180,38 @@ libxlSendTriggerWrapper(libxl_ctx *ctx, uint32_t vcpuid) { int ret; #if LIBXL_API_VERSION < 0x041300 ret = libxl_send_trigger(ctx, domid, trigger, vcpuid); #else ret = libxl_send_trigger(ctx, domid, trigger, vcpuid, NULL); #endif return ret; } + +static inline int +libxlSetMemoryTargetWrapper(libxl_ctx *ctx, + uint32_t domid, + uint64_t target_memkb, + int relative, + int enforce) +{ + int ret = -1; + + /* Technically this guard could be LIBXL_HAVE_MEMKB_64BITS */ +#if LIBXL_API_VERSION < 0x040800 + if (target_memkb < UINT_MAX) { + uint32_t val32 = target_memkb; + + ret = libxl_set_memory_target(ctx, domid, val32, relative, enforce); + } +#else + if (target_memkb < LLONG_MAX) { + int64_t val64 = target_memkb; + ret = libxl_set_memory_target(ctx, domid, val64, relative, enforce); + } +#endif + + return ret; +} --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -1007,41 +1007,41 @@ libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver, virDomainObjPtr vm) ret = 0; cleanup: libxl_bitmap_dispose(&map); return ret; } static int libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config) { uint64_t needed_mem; uint64_t free_mem; - int32_t target_mem; + uint64_t target_mem; int tries = 3; int wait_secs = 10; if (libxlDomainNeedMemoryWrapper(ctx, d_config, &needed_mem) < 0) goto error; do { if (libxlGetFreeMemoryWrapper(ctx, &free_mem) < 0) goto error; if (free_mem >= needed_mem) return 0; target_mem = free_mem - needed_mem; - if (libxl_set_memory_target(ctx, 0, target_mem, - /* relative */ 1, 0) < 0) + if (libxlSetMemoryTargetWrapper(ctx, 0, target_mem, + /* relative */ 1, 0) < 0) goto error; if (libxl_wait_for_memory_target(ctx, 0, wait_secs) < 0) goto error; tries--; } while (tries > 0); error: virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Failed to balloon domain0 memory")); return -1; --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -1686,26 +1686,26 @@ libxlDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, if (newmem > virDomainDefGetMemoryTotal(vm->def)) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("cannot set memory higher than max memory")); goto endjob; } if (flags & VIR_DOMAIN_MEM_LIVE) { int res; /* Unlock virDomainObj while ballooning memory */ virObjectUnlock(vm); - res = libxl_set_memory_target(cfg->ctx, vm->def->id, newmem, 0, - /* force */ 1); + res = libxlSetMemoryTargetWrapper(cfg->ctx, vm->def->id, newmem, 0, + /* force */ 1); virObjectLock(vm); if (res < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to set memory for domain '%d'" " with libxenlight"), vm->def->id); goto endjob; } vm->def->mem.cur_balloon = newmem; } if (flags & VIR_DOMAIN_MEM_CONFIG) { sa_assert(persistentDef);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor