[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [for-4.11][PATCH] libxl: arm: Fix build after c/s 74fd984ae



c/s 74fd984ae "tools/libxl: Drop xc_domain_configuration_t from
libxl__domain_build_state" removed state->config completely but missed
some conversion libxl_arm.c.

Furthermore, not all the fields of xc_domain_configuration_t have a
corresponding field in libxl_domain_build_info. This is the case of
clock_frequency. As the field should not be exposed to the user, add a
corresponding field in libxl__domain_build_state. This require some
modification in the prototype of libxl__domain_make in order to have the
state.

For all the other fields, use the up-to-date version in
libxl_domain_build-info.

Signed-off-by: Julien Grall <julien.grall@xxxxxxx>
---
 tools/libxl/libxl_arch.h     |  1 +
 tools/libxl/libxl_arm.c      | 25 +++++++++++++------------
 tools/libxl/libxl_create.c   |  5 +++--
 tools/libxl/libxl_dm.c       |  3 ++-
 tools/libxl/libxl_internal.h |  4 ++++
 tools/libxl/libxl_x86.c      |  1 +
 6 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/tools/libxl/libxl_arch.h b/tools/libxl/libxl_arch.h
index e3b6f5f41a..318c111bb4 100644
--- a/tools/libxl/libxl_arch.h
+++ b/tools/libxl/libxl_arch.h
@@ -25,6 +25,7 @@ int libxl__arch_domain_prepare_config(libxl__gc *gc,
 _hidden
 int libxl__arch_domain_save_config(libxl__gc *gc,
                                    libxl_domain_config *d_config,
+                                   libxl__domain_build_state *state,
                                    const xc_domain_configuration_t *xc_config);
 
 /* arch specific internal domain creation function */
diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c
index fbe8786a8e..8af9f6f992 100644
--- a/tools/libxl/libxl_arm.c
+++ b/tools/libxl/libxl_arm.c
@@ -25,12 +25,12 @@
 #define DT_IRQ_TYPE_LEVEL_HIGH     0x00000004
 #define DT_IRQ_TYPE_LEVEL_LOW      0x00000008
 
-static const char *gicv_to_string(uint8_t gic_version)
+static const char *gicv_to_string(libxl_gic_version gic_version)
 {
     switch (gic_version) {
-    case XEN_DOMCTL_CONFIG_GIC_V2:
+    case LIBXL_GIC_VERSION_V2:
         return "V2";
-    case XEN_DOMCTL_CONFIG_GIC_V3:
+    case LIBXL_GIC_VERSION_V3:
         return "V3";
     default:
         return "unknown";
@@ -110,6 +110,7 @@ int libxl__arch_domain_prepare_config(libxl__gc *gc,
 
 int libxl__arch_domain_save_config(libxl__gc *gc,
                                    libxl_domain_config *d_config,
+                                   libxl__domain_build_state *state,
                                    const xc_domain_configuration_t *xc_config)
 {
     switch (xc_config->gic_version) {
@@ -124,6 +125,8 @@ int libxl__arch_domain_save_config(libxl__gc *gc,
         return ERROR_FAIL;
     }
 
+    state->clock_frequency = xc_config->clock_frequency;
+
     return 0;
 }
 
@@ -846,9 +849,6 @@ static int libxl__prepare_dtb(libxl__gc *gc, 
libxl_domain_build_info *info,
     const libxl_version_info *vers;
     const struct arch_info *ainfo;
 
-    /* convenience aliases */
-    xc_domain_configuration_t *xc_config = &state->config;
-
     vers = libxl_get_version_info(CTX);
     if (vers == NULL) return ERROR_FAIL;
 
@@ -857,7 +857,8 @@ static int libxl__prepare_dtb(libxl__gc *gc, 
libxl_domain_build_info *info,
 
     LOG(DEBUG, "constructing DTB for Xen version %d.%d guest",
         vers->xen_version_major, vers->xen_version_minor);
-    LOG(DEBUG, " - vGIC version: %s", gicv_to_string(xc_config->gic_version));
+    LOG(DEBUG, " - vGIC version: %s",
+        gicv_to_string(info->arch_arm.gic_version));
 
     if (info->device_tree) {
         LOG(DEBUG, " - Partial device tree provided: %s", info->device_tree);
@@ -922,23 +923,23 @@ next_resize:
 
         FDT( make_memory_nodes(gc, fdt, dom) );
 
-        switch (xc_config->gic_version) {
-        case XEN_DOMCTL_CONFIG_GIC_V2:
+        switch (info->arch_arm.gic_version) {
+        case LIBXL_GIC_VERSION_V2:
             FDT( make_gicv2_node(gc, fdt,
                                  GUEST_GICD_BASE, GUEST_GICD_SIZE,
                                  GUEST_GICC_BASE, GUEST_GICC_SIZE) );
             break;
-        case XEN_DOMCTL_CONFIG_GIC_V3:
+        case LIBXL_GIC_VERSION_V3:
             FDT( make_gicv3_node(gc, fdt) );
             break;
         default:
             LOG(ERROR, "Unknown GIC version %s",
-                gicv_to_string(xc_config->gic_version));
+                gicv_to_string(info->arch_arm.gic_version));
             rc = ERROR_FAIL;
             goto out;
         }
 
-        FDT( make_timer_node(gc, fdt, ainfo, xc_config->clock_frequency) );
+        FDT( make_timer_node(gc, fdt, ainfo, state->clock_frequency) );
         FDT( make_hypervisor_node(gc, fdt, vers) );
 
         if (info->arch_arm.vuart == LIBXL_VUART_TYPE_SBSA_UART)
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index 692461a5a1..b5e27a7766 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -538,6 +538,7 @@ out:
 }
 
 int libxl__domain_make(libxl__gc *gc, libxl_domain_config *d_config,
+                       libxl__domain_build_state *state,
                        uint32_t *domid)
 {
     libxl_ctx *ctx = libxl__gc_owner(gc);
@@ -590,7 +591,7 @@ int libxl__domain_make(libxl__gc *gc, libxl_domain_config 
*d_config,
             goto out;
         }
 
-        rc = libxl__arch_domain_save_config(gc, d_config, &xc_config);
+        rc = libxl__arch_domain_save_config(gc, d_config, state, &xc_config);
         if (rc < 0)
             goto out;
     }
@@ -958,7 +959,7 @@ static void initiate_domain_create(libxl__egc *egc,
         goto error_out;
     }
 
-    ret = libxl__domain_make(gc, d_config, &domid);
+    ret = libxl__domain_make(gc, d_config, &dcs->build_state, &domid);
     if (ret) {
         LOGD(ERROR, domid, "cannot make domain: %d", ret);
         dcs->guest_domid = domid;
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 7f795a4ffd..b662395b2e 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -1960,7 +1960,8 @@ void libxl__spawn_stub_dm(libxl__egc *egc, 
libxl__stub_dm_spawn_state *sdss)
     stubdom_state->pv_ramdisk.path = "";
 
     /* fixme: this function can leak the stubdom if it fails */
-    ret = libxl__domain_make(gc, dm_config, &sdss->pvqemu.guest_domid);
+    ret = libxl__domain_make(gc, dm_config, stubdom_state,
+                             &sdss->pvqemu.guest_domid);
     if (ret)
         goto out;
     uint32_t dm_domid = sdss->pvqemu.guest_domid;
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 584410d705..6352380644 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -1147,6 +1147,9 @@ typedef struct {
 
     xen_pfn_t vuart_gfn;
     evtchn_port_t vuart_port;
+
+    /* ARM only to deal with broken firmware */
+    uint32_t clock_frequency;
 } libxl__domain_build_state;
 
 _hidden int libxl__build_pre(libxl__gc *gc, uint32_t domid,
@@ -1655,6 +1658,7 @@ _hidden  void libxl__exec(libxl__gc *gc, int stdinfd, int 
stdoutfd,
   * on exit (even error exit), domid may be valid and refer to a domain */
 _hidden int libxl__domain_make(libxl__gc *gc,
                                libxl_domain_config *d_config,
+                               libxl__domain_build_state *state,
                                uint32_t *domid);
 
 _hidden int libxl__domain_build(libxl__gc *gc,
diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c
index 78affdd37a..4573d6764d 100644
--- a/tools/libxl/libxl_x86.c
+++ b/tools/libxl/libxl_x86.c
@@ -26,6 +26,7 @@ int libxl__arch_domain_prepare_config(libxl__gc *gc,
 
 int libxl__arch_domain_save_config(libxl__gc *gc,
                                    libxl_domain_config *d_config,
+                                   libxl__domain_build_state *state,
                                    const xc_domain_configuration_t *xc_config)
 {
     return 0;
-- 
2.11.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.