From: Ian Jackson Date: Fri, 12 Jan 2018 15:02:15 +0000 (+0000) Subject: libxl: pvh: Use accessor macros internally X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=f41fd2fef2c58143593c701e2294890e33906361;p=people%2Froyger%2Fxen.git libxl: pvh: Use accessor macros internally This prepares the way for the pvh guest type, which will duplicate some of the fields in the hvm libxl_domain_build_info. (In 4.10 these fields were extracted into the top level but that is an ABI break so is not suitable for 4.8/4.9.) No functional change. Signed-off-by: Ian Jackson --- diff --git a/tools/libxl/libxl_bootloader.c b/tools/libxl/libxl_bootloader.c index 2cfc8cfaf2..2b6b051419 100644 --- a/tools/libxl/libxl_bootloader.c +++ b/tools/libxl/libxl_bootloader.c @@ -51,7 +51,7 @@ static void make_bootloader_args(libxl__gc *gc, libxl__bootloader_state *bl, { const libxl_domain_build_info *info = bl->info; - bl->argsspace = 9 + libxl_string_list_length(&info->u.pv.bootloader_args); + bl->argsspace = 9 + libxl_string_list_length(U_PV_F(info,bootloader_args)); GCNEW_ARRAY(bl->args, bl->argsspace); @@ -70,8 +70,8 @@ static void make_bootloader_args(libxl__gc *gc, libxl__bootloader_state *bl, ARG("--output-format=simple0"); ARG(GCSPRINTF("--output-directory=%s", bl->outputdir)); - if (info->u.pv.bootloader_args) { - char **p = info->u.pv.bootloader_args; + if (*U_PV_F(info,bootloader_args)) { + char **p = *U_PV_F(info,bootloader_args); while (*p) { ARG(*p); p++; @@ -326,7 +326,7 @@ void libxl__bootloader_run(libxl__egc *egc, libxl__bootloader_state *bl) goto out_ok; } - if (!info->u.pv.bootloader) { + if (!*U_PV_F(info,bootloader)) { LOG(DEBUG, "no bootloader configured, using user supplied kernel"); bl->kernel->path = bl->info->kernel; bl->ramdisk->path = bl->info->ramdisk; @@ -409,13 +409,13 @@ static void bootloader_disk_attached_cb(libxl__egc *egc, goto out; } - LOG(DEBUG, "Config bootloader value: %s", info->u.pv.bootloader); + LOG(DEBUG, "Config bootloader value: %s", *U_PV_F(info,bootloader)); - if ( !strcmp(info->u.pv.bootloader, "/usr/bin/pygrub") ) + if ( !strcmp(*U_PV_F(info,bootloader), "/usr/bin/pygrub") ) LOG(WARN, "bootloader='/usr/bin/pygrub' is deprecated; use " \ "bootloader='pygrub' instead"); - bootloader = info->u.pv.bootloader; + bootloader = *U_PV_F(info,bootloader); /* If the full path is not specified, check in the libexec path */ if ( bootloader[0] != '/' ) { diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 7c1695a1fd..824689b726 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -65,7 +65,7 @@ void libxl__rdm_setdefault(libxl__gc *gc, libxl_domain_build_info *b_info) int libxl__domain_build_info_setdefault(libxl__gc *gc, libxl_domain_build_info *b_info) { - int i; + int i, rc; if (b_info->type != LIBXL_DOMAIN_TYPE_HVM && b_info->type != LIBXL_DOMAIN_TYPE_PV) { @@ -94,7 +94,6 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, if (b_info->device_model_version == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) { const char *dm; - int rc; dm = libxl__domain_device_model(gc, b_info); rc = access(dm, X_OK); @@ -307,9 +306,8 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, break; } - if (b_info->u.hvm.timer_mode == LIBXL_TIMER_MODE_DEFAULT) - b_info->u.hvm.timer_mode = - LIBXL_TIMER_MODE_NO_DELAY_FOR_MISSED_TICKS; + if (libxl__timer_mode_is_default(&b_info->u.hvm.timer_mode)) + b_info->u.hvm.timer_mode = LIBXL_TIMER_MODE_NO_DELAY_FOR_MISSED_TICKS; libxl_defbool_setdefault(&b_info->u.hvm.pae, true); libxl_defbool_setdefault(&b_info->u.hvm.apic, true); diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index d519c8d440..f36712aaa8 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -190,7 +190,7 @@ static int numa_place_domain(libxl__gc *gc, uint32_t domid, static unsigned long timer_mode(const libxl_domain_build_info *info) { - const libxl_timer_mode mode = info->u.hvm.timer_mode; + const libxl_timer_mode mode = *U_HVM_F(info,timer_mode); assert(mode >= LIBXL_TIMER_MODE_DELAY_FOR_MISSED_TICKS && mode <= LIBXL_TIMER_MODE_ONE_MISSED_TICK_PENDING); return ((unsigned long)mode); @@ -801,7 +801,7 @@ static int hvm_build_set_params(xc_interface *handle, uint32_t domid, return ERROR_FAIL; va_hvm = (struct hvm_info_table *)(va_map + HVM_INFO_OFFSET); - va_hvm->apic_mode = libxl_defbool_val(info->u.hvm.apic); + va_hvm->apic_mode = libxl_defbool_val(*U_HVM_F(info,apic)); va_hvm->nr_vcpus = info->max_vcpus; memset(va_hvm->vcpu_online, 0, sizeof(va_hvm->vcpu_online)); memcpy(va_hvm->vcpu_online, info->avail_vcpus.map, info->avail_vcpus.size); @@ -1086,7 +1086,7 @@ int libxl__build_hvm(libxl__gc *gc, uint32_t domid, dom->mmio_size = HVM_BELOW_4G_MMIO_LENGTH; else if (dom->mmio_size == 0 && !device_model) { #if defined(__i386__) || defined(__x86_64__) - if (libxl_defbool_val(info->u.hvm.apic)) { + if (libxl_defbool_val(*U_HVM_F(info,apic))) { /* Make sure LAPIC_BASE_ADDRESS is below special pages */ assert(((((X86_HVM_END_SPECIAL_REGION - X86_HVM_NR_SPECIAL_PAGES) << XC_PAGE_SHIFT) - LAPIC_BASE_ADDRESS)) >= XC_PAGE_SIZE); diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 60f012be8a..dd1db906af 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -165,6 +165,15 @@ /* Convert pfn to physical address space. */ #define pfn_to_paddr(x) ((uint64_t)(x) << XC_PAGE_SHIFT) +/* see libxl.h's definitions of LIBXL_BUILDINFO_SUBFIELD_PVH etc. */ +# define U_PV_OK( b) LIBXL_BUILDINFO_ACCESS_PVH_PV_OK( (b)) +# define U_HVM_OK(b) LIBXL_BUILDINFO_ACCESS_PVH_HVM_OK((b)) +# define U_PV_F( b, f) LIBXL_BUILDINFO_ACCESS_PVH_PV( (b),f) +# define U_HVM_F(b, f) LIBXL_BUILDINFO_ACCESS_PVH_HVM((b),f) +# define U_PVH LIBXL_BUILDINFO_SUBFIELD_PVH +# define U_PV LIBXL_BUILDINFO_SUBFIELD_PV +# define U_HVM LIBXL_BUILDINFO_SUBFIELD_HVM + /* logging */ _hidden void libxl__logv(libxl_ctx *ctx, xentoollog_level msglevel, int errnoval, const char *file /* may be 0 */, int line /* ignored if !file */, diff --git a/tools/libxl/libxl_x86_acpi.c b/tools/libxl/libxl_x86_acpi.c index 173188f73e..535b11c6a4 100644 --- a/tools/libxl/libxl_x86_acpi.c +++ b/tools/libxl/libxl_x86_acpi.c @@ -111,7 +111,7 @@ static int init_acpi_config(libxl__gc *gc, hvminfo = libxl__zalloc(gc, sizeof(*hvminfo)); - hvminfo->apic_mode = libxl_defbool_val(b_info->u.hvm.apic); + hvminfo->apic_mode = libxl_defbool_val(*U_HVM_F(b_info,apic)); if (dom->nr_vnodes) { unsigned int *vcpu_to_vnode, *vdistance;