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

[Xen-devel] [PATCH 1 of 3] xl: move create and build info to struct domain_config



# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1280225499 -3600
# Node ID 0d225bbe6ffa904d081ca34cd736cb121d7c67b2
# Parent  519187e3e2b1bbeb244d64d79153e350ca3ba0bf
xl: move create and build info to struct domain_config

All three are passed around together and this begins to reduce some of
the exceptionally long parameter lists.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r 519187e3e2b1 -r 0d225bbe6ffa tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Tue Jul 27 11:11:38 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Tue Jul 27 11:11:39 2010 +0100
@@ -125,6 +125,9 @@ static char *action_on_shutdown_names[] 
 };
 
 struct domain_config {
+    libxl_domain_create_info c_info;
+    libxl_domain_build_info b_info;
+
     enum action_on_shutdown on_poweroff;
     enum action_on_shutdown on_reboot;
     enum action_on_shutdown on_watchdog;
@@ -354,8 +357,7 @@ static void init_console_info(libxl_devi
 }
 
 static void printf_info(int domid,
-                        libxl_domain_create_info *c_info,
-                        libxl_domain_build_info *b_info,
+                        struct domain_config *d_config,
                         libxl_device_disk *disks,
                         int num_disks,
                         libxl_device_nic *vifs,
@@ -369,6 +371,10 @@ static void printf_info(int domid,
                         libxl_device_model_info *dm_info)
 {
     int i;
+
+    libxl_domain_create_info *c_info = &d_config->c_info;
+    libxl_domain_build_info *b_info = &d_config->b_info;
+
     printf("(domain\n\t(domid %d)\n", domid);
     printf("\t(domain_create_info)\n");
     printf("\t(hvm %d)\n", c_info->hvm);
@@ -523,8 +529,6 @@ static void parse_config_data(const char
 static void parse_config_data(const char *configfile_filename_report,
                               const char *configfile_data,
                               int configfile_len,
-                              libxl_domain_create_info *c_info,
-                              libxl_domain_build_info *b_info,
                               struct domain_config *d_config,
                               libxl_device_disk **disks,
                               int *num_disks,
@@ -547,6 +551,9 @@ static void parse_config_data(const char
     int pci_power_mgmt = 0;
     int pci_msitranslate = 1;
     int e;
+
+    libxl_domain_create_info *c_info = &d_config->c_info;
+    libxl_domain_build_info *b_info = &d_config->b_info;
 
     config= xlu_cfg_init(stderr, configfile_filename_report);
     if (!config) {
@@ -1068,7 +1075,6 @@ int autoconnect_console(int hvm)
 
 /* Returns 1 if domain should be restarted, 2 if domain should be renamed then 
restarted  */
 static int handle_domain_death(struct libxl_ctx *ctx, uint32_t domid, 
libxl_event *event,
-                               libxl_domain_create_info *c_info,
                                struct domain_config *d_config, struct 
libxl_dominfo *info)
 {
     int restart = 0;
@@ -1097,7 +1103,7 @@ static int handle_domain_death(struct li
         char *corefile;
         int rc;
 
-        if (asprintf(&corefile, "/var/xen/dump/%s", c_info->name) < 0) {
+        if (asprintf(&corefile, "/var/xen/dump/%s", d_config->c_info.name) < 
0) {
             LOG("failed to construct core dump path");
         } else {
             LOG("dumping core to %s", corefile);
@@ -1138,7 +1144,6 @@ static int handle_domain_death(struct li
 }
 
 static int preserve_domain(struct libxl_ctx *ctx, uint32_t domid, libxl_event 
*event,
-                           libxl_domain_create_info *c_info,
                            struct domain_config *d_config, struct 
libxl_dominfo *info)
 {
     time_t now;
@@ -1168,8 +1173,8 @@ static int preserve_domain(struct libxl_
 
     random_uuid(&new_uuid[0]);
 
-    LOG("Preserving domain %d %s with suffix%s", domid, c_info->name, stime);
-    rc = libxl_domain_preserve(ctx, domid, c_info, stime, new_uuid);
+    LOG("Preserving domain %d %s with suffix%s", domid, d_config->c_info.name, 
stime);
+    rc = libxl_domain_preserve(ctx, domid, &d_config->c_info, stime, new_uuid);
 
     return rc == 0 ? 1 : 0;
 }
@@ -1192,8 +1197,6 @@ static int create_domain(struct domain_c
 {
     struct domain_config d_config;
 
-    libxl_domain_create_info c_info;
-    libxl_domain_build_info b_info;
     libxl_domain_build_state state;
     libxl_device_model_info dm_info;
     libxl_device_disk *disks = NULL;
@@ -1224,6 +1227,7 @@ static int create_domain(struct domain_c
     int restore_fd = -1;
     struct save_file_header hdr;
 
+    memset(&d_config, 0x00, sizeof(d_config);
     memset(&dm_info, 0x00, sizeof(dm_info));
 
     if (restore_file) {
@@ -1326,32 +1330,32 @@ static int create_domain(struct domain_c
     if (!dom_info->quiet)
         printf("Parsing config file %s\n", config_file);
 
-    parse_config_data(config_file, config_data, config_len, &c_info, &b_info, 
&d_config, &disks, &num_disks, &vifs, &num_vifs, &vif2s, &num_vif2s, &pcidevs, 
&num_pcidevs, &vfbs, &num_vfbs, &vkbs, &num_vkbs, &dm_info);
+    parse_config_data(config_file, config_data, config_len, &d_config, &disks, 
&num_disks, &vifs, &num_vifs, &vif2s, &num_vif2s, &pcidevs, &num_pcidevs, 
&vfbs, &num_vfbs, &vkbs, &num_vkbs, &dm_info);
 
     if (dom_info->dryrun)
         return 0;
 
     if (migrate_fd >= 0) {
-        if (c_info.name) {
+        if (d_config.c_info.name) {
             /* when we receive a domain we get its name from the config
              * file; and we receive it to a temporary name */
             assert(!common_domname);
-            common_domname = c_info.name;
-            if (asprintf(migration_domname_r, "%s--incoming", c_info.name) < 
0) {
+            common_domname = d_config.c_info.name;
+            if (asprintf(migration_domname_r, "%s--incoming", 
d_config.c_info.name) < 0) {
                 fprintf(stderr, "Failed to allocate memory in asprintf\n");
                 exit(1);
             }
-            c_info.name = *migration_domname_r;
+            d_config.c_info.name = *migration_domname_r;
         }
     }
 
     if (debug)
-        printf_info(-1, &c_info, &b_info, disks, num_disks, vifs, num_vifs, 
pcidevs, num_pcidevs, vfbs, num_vfbs, vkbs, num_vkbs, &dm_info);
+        printf_info(-1, &d_config, disks, num_disks, vifs, num_vifs, pcidevs, 
num_pcidevs, vfbs, num_vfbs, vkbs, num_vkbs, &dm_info);
 
 start:
     domid = 0;
 
-    ret = libxl_domain_make(&ctx, &c_info, &domid);
+    ret = libxl_domain_make(&ctx, &d_config.c_info, &domid);
     if (ret) {
         fprintf(stderr, "cannot make domain: %d\n", ret);
         ret = ERROR_FAIL;
@@ -1367,7 +1371,7 @@ start:
     }
 
     if (dom_info->console_autoconnect) {
-        ret = autoconnect_console(c_info.hvm);
+        ret = autoconnect_console(d_config.c_info.hvm);
         if (ret)
             goto error_out;
     }
@@ -1378,7 +1382,7 @@ start:
      */
     dom_info->console_autoconnect = 0;
 
-    ret = libxl_run_bootloader(&ctx, &b_info, num_disks > 0 ? &disks[0] : 
NULL, domid);
+    ret = libxl_run_bootloader(&ctx, &d_config.b_info, num_disks > 0 ? 
&disks[0] : NULL, domid);
     if (ret) {
         fprintf(stderr, "failed to run bootloader: %d\n", ret);
         goto error_out;
@@ -1389,9 +1393,9 @@ start:
             free(dm_info.saved_state);
             dm_info.saved_state = NULL;
         }
-        ret = libxl_domain_build(&ctx, &b_info, domid, &state);
-    } else {
-        ret = libxl_domain_restore(&ctx, &b_info, domid, restore_fd, &state, 
&dm_info);
+        ret = libxl_domain_build(&ctx, &d_config.b_info, domid, &state);
+    } else {
+        ret = libxl_domain_restore(&ctx, &d_config.b_info, domid, restore_fd, 
&state, &dm_info);
     }
 
     if (ret) {
@@ -1418,7 +1422,7 @@ start:
             goto error_out;
         }
     }
-    if (!c_info.hvm) {
+    if (!d_config.c_info.hvm) {
         for (i = 0; i < num_vif2s; i++) {
             vif2s[i].domid = domid;
             ret = libxl_device_net2_add(&ctx, domid, &(vif2s[i]));
@@ -1429,7 +1433,7 @@ start:
             }
         }
     }
-    if (c_info.hvm) {
+    if (d_config.c_info.hvm) {
         dm_info.domid = domid;
         MUST( libxl_create_device_model(&ctx, &dm_info, disks, num_disks,
                                         vifs, num_vifs, &dm_starting) );
@@ -1493,7 +1497,7 @@ start:
             exit(-1);
         }
 
-        if (asprintf(&name, "xl-%s", c_info.name) < 0) {
+        if (asprintf(&name, "xl-%s", d_config.c_info.name) < 0) {
             LOG("Failed to allocate memory in asprintf");
             exit(1);
         }
@@ -1516,7 +1520,7 @@ start:
         need_daemon = 0;
     }
     LOG("Waiting for domain %s (domid %d) to die [pid %ld]",
-        c_info.name, domid, (long)getpid());
+        d_config.c_info.name, domid, (long)getpid());
     w1 = (libxl_waiter*) xmalloc(sizeof(libxl_waiter) * num_disks);
     w2 = (libxl_waiter*) xmalloc(sizeof(libxl_waiter));
     libxl_wait_for_disk_ejects(&ctx, domid, disks, num_disks, w1);
@@ -1545,9 +1549,9 @@ start:
                 LOG("Domain %d is dead", domid);
 
                 if (ret) {
-                    switch (handle_domain_death(&ctx, domid, &event, &c_info, 
&d_config, &info)) {
+                    switch (handle_domain_death(&ctx, domid, &event, 
&d_config, &info)) {
                     case 2:
-                        if (!preserve_domain(&ctx, domid, &event, &c_info, 
&d_config, &info))
+                        if (!preserve_domain(&ctx, domid, &event, &d_config, 
&info))
                             /* If we fail then exit leaving the old domain in 
place. */
                             exit(-1);
 
@@ -2083,8 +2087,6 @@ void list_domains_details(void)
     uint8_t *data;
     int nb_domain, i, len, rc;
     int num_disks = 0, num_vifs = 0, num_vif2s = 0, num_pcidevs = 0, num_vfbs 
= 0, num_vkbs = 0;
-    libxl_domain_create_info c_info;
-    libxl_domain_build_info b_info;
     libxl_device_model_info dm_info;
     libxl_device_disk *disks = NULL;
     libxl_device_nic *vifs = NULL;
@@ -2104,8 +2106,9 @@ void list_domains_details(void)
         if (rc)
             continue;
         CHK_ERRNO(asprintf(&config_file, "<domid %d data>", info[i].domid));
-        parse_config_data(config_file, (char *)data, len, &c_info, &b_info, 
&d_config, &disks, &num_disks, &vifs, &num_vifs, &vif2s, &num_vif2s, &pcidevs, 
&num_pcidevs, &vfbs, &num_vfbs, &vkbs, &num_vkbs, &dm_info);
-        printf_info(info[i].domid, &c_info, &b_info, disks, num_disks, vifs, 
num_vifs, pcidevs, num_pcidevs, vfbs, num_vfbs, vkbs, num_vkbs, &dm_info);
+        memset(&d_config, 0x00, sizeof(d_config);
+        parse_config_data(config_file, (char *)data, len, &d_config, &disks, 
&num_disks, &vifs, &num_vifs, &vif2s, &num_vif2s, &pcidevs, &num_pcidevs, 
&vfbs, &num_vfbs, &vkbs, &num_vkbs, &dm_info);
+        printf_info(info[i].domid, &d_config, disks, num_disks, vifs, 
num_vifs, pcidevs, num_pcidevs, vfbs, num_vfbs, vkbs, num_vkbs, &dm_info);
         free(data);
         free(config_file);
     }

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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