# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1280146761 -3600
# Node ID cc6592055443e9beaa0b39b28db0648146e15149
# Parent 113b04a7e60718c8730368a045a49ddd56e64fac
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 113b04a7e607 -r cc6592055443 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c Mon Jul 26 11:36:03 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c Mon Jul 26 13:19:21 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;
}
@@ -1384,7 +1388,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;
@@ -1395,9 +1399,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) {
@@ -1424,7 +1428,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]));
@@ -1435,7 +1439,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) );
@@ -1499,7 +1503,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);
}
@@ -1522,7 +1526,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);
@@ -1550,9 +1554,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);
@@ -2088,8 +2092,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;
@@ -2109,8 +2111,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
|