[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xl: move device structs into struct domain_config
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1280247429 -3600 # Node ID adbc1ad1e81b176b0e13b9ae630c0e9e17323e3e # Parent c895d3e3d094af95d8fa7ae65f5ce7151177749a xl: move device structs into struct domain_config Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- tools/libxl/xl_cmdimpl.c | 361 ++++++++++++++++++++++------------------------- 1 files changed, 172 insertions(+), 189 deletions(-) diff -r c895d3e3d094 -r adbc1ad1e81b tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Tue Jul 27 17:09:11 2010 +0100 +++ b/tools/libxl/xl_cmdimpl.c Tue Jul 27 17:17:09 2010 +0100 @@ -127,6 +127,15 @@ struct domain_config { struct domain_config { libxl_domain_create_info c_info; libxl_domain_build_info b_info; + + int num_disks, num_vifs, num_vif2s, num_pcidevs, num_vfbs, num_vkbs; + + libxl_device_disk *disks; + libxl_device_nic *vifs; + libxl_device_net2 *vif2s; + libxl_device_pci *pcidevs; + libxl_device_vfb *vfbs; + libxl_device_vkb *vkbs; enum action_on_shutdown on_poweroff; enum action_on_shutdown on_reboot; @@ -358,16 +367,6 @@ static void init_console_info(libxl_devi static void printf_info(int domid, struct domain_config *d_config, - libxl_device_disk *disks, - int num_disks, - libxl_device_nic *vifs, - int num_vifs, - libxl_device_pci *pcidevs, - int num_pcidevs, - libxl_device_vfb *vfbs, - int num_vfbs, - libxl_device_vkb *vkb, - int num_vkbs, libxl_device_model_info *dm_info) { int i; @@ -452,58 +451,66 @@ static void printf_info(int domid, } printf("\t)\n"); - for (i = 0; i < num_disks; i++) { + for (i = 0; i < d_config->num_disks; i++) { printf("\t(device\n"); printf("\t\t(tap\n"); - printf("\t\t\t(backend_domid %d)\n", disks[i].backend_domid); - printf("\t\t\t(domid %d)\n", disks[i].domid); - printf("\t\t\t(physpath %s)\n", disks[i].physpath); - printf("\t\t\t(phystype %d)\n", disks[i].phystype); - printf("\t\t\t(virtpath %s)\n", disks[i].virtpath); - printf("\t\t\t(unpluggable %d)\n", disks[i].unpluggable); - printf("\t\t\t(readwrite %d)\n", disks[i].readwrite); - printf("\t\t\t(is_cdrom %d)\n", disks[i].is_cdrom); + printf("\t\t\t(backend_domid %d)\n", d_config->disks[i].backend_domid); + printf("\t\t\t(domid %d)\n", d_config->disks[i].domid); + printf("\t\t\t(physpath %s)\n", d_config->disks[i].physpath); + printf("\t\t\t(phystype %d)\n", d_config->disks[i].phystype); + printf("\t\t\t(virtpath %s)\n", d_config->disks[i].virtpath); + printf("\t\t\t(unpluggable %d)\n", d_config->disks[i].unpluggable); + printf("\t\t\t(readwrite %d)\n", d_config->disks[i].readwrite); + printf("\t\t\t(is_cdrom %d)\n", d_config->disks[i].is_cdrom); printf("\t\t)\n"); printf("\t)\n"); } - for (i = 0; i < num_vifs; i++) { + for (i = 0; i < d_config->num_vifs; i++) { printf("\t(device\n"); printf("\t\t(vif\n"); - printf("\t\t\t(backend_domid %d)\n", vifs[i].backend_domid); - printf("\t\t\t(domid %d)\n", vifs[i].domid); - printf("\t\t\t(devid %d)\n", vifs[i].devid); - printf("\t\t\t(mtu %d)\n", vifs[i].mtu); - printf("\t\t\t(model %s)\n", vifs[i].model); - printf("\t\t\t(mac %02x%02x%02x%02x%02x%02x)\n", vifs[i].mac[0], vifs[i].mac[1], vifs[i].mac[2], vifs[i].mac[3], vifs[i].mac[4], vifs[i].mac[5]); + printf("\t\t\t(backend_domid %d)\n", d_config->vifs[i].backend_domid); + printf("\t\t\t(domid %d)\n", d_config->vifs[i].domid); + printf("\t\t\t(devid %d)\n", d_config->vifs[i].devid); + printf("\t\t\t(mtu %d)\n", d_config->vifs[i].mtu); + printf("\t\t\t(model %s)\n", d_config->vifs[i].model); + printf("\t\t\t(mac %02x%02x%02x%02x%02x%02x)\n", + d_config->vifs[i].mac[0], d_config->vifs[i].mac[1], + d_config->vifs[i].mac[2], d_config->vifs[i].mac[3], + d_config->vifs[i].mac[4], d_config->vifs[i].mac[5]); printf("\t\t)\n"); printf("\t)\n"); } - for (i = 0; i < num_pcidevs; i++) { + for (i = 0; i < d_config->num_pcidevs; i++) { printf("\t(device\n"); printf("\t\t(pci\n"); - printf("\t\t\t(pci dev "PCI_BDF_VDEVFN")\n", pcidevs[i].domain, pcidevs[i].bus, pcidevs[i].dev, pcidevs[i].func, pcidevs[i].vdevfn); - printf("\t\t\t(opts msitranslate %d power_mgmt %d)\n", pcidevs[i].msitranslate, pcidevs[i].power_mgmt); + printf("\t\t\t(pci dev "PCI_BDF_VDEVFN")\n", + d_config->pcidevs[i].domain, d_config->pcidevs[i].bus, + d_config->pcidevs[i].dev, d_config->pcidevs[i].func, + d_config->pcidevs[i].vdevfn); + printf("\t\t\t(opts msitranslate %d power_mgmt %d)\n", + d_config->pcidevs[i].msitranslate, + d_config->pcidevs[i].power_mgmt); printf("\t\t)\n"); printf("\t)\n"); } - for (i = 0; i < num_vfbs; i++) { + for (i = 0; i < d_config->num_vfbs; i++) { printf("\t(device\n"); printf("\t\t(vfb\n"); - printf("\t\t\t(backend_domid %d)\n", vfbs[i].backend_domid); - printf("\t\t\t(domid %d)\n", vfbs[i].domid); - printf("\t\t\t(devid %d)\n", vfbs[i].devid); - printf("\t\t\t(vnc %d)\n", vfbs[i].vnc); - printf("\t\t\t(vnclisten %s)\n", vfbs[i].vnclisten); - printf("\t\t\t(vncdisplay %d)\n", vfbs[i].vncdisplay); - printf("\t\t\t(vncunused %d)\n", vfbs[i].vncunused); - printf("\t\t\t(keymap %s)\n", vfbs[i].keymap); - printf("\t\t\t(sdl %d)\n", vfbs[i].sdl); - printf("\t\t\t(opengl %d)\n", vfbs[i].opengl); - printf("\t\t\t(display %s)\n", vfbs[i].display); - printf("\t\t\t(xauthority %s)\n", vfbs[i].xauthority); + printf("\t\t\t(backend_domid %d)\n", d_config->vfbs[i].backend_domid); + printf("\t\t\t(domid %d)\n", d_config->vfbs[i].domid); + printf("\t\t\t(devid %d)\n", d_config->vfbs[i].devid); + printf("\t\t\t(vnc %d)\n", d_config->vfbs[i].vnc); + printf("\t\t\t(vnclisten %s)\n", d_config->vfbs[i].vnclisten); + printf("\t\t\t(vncdisplay %d)\n", d_config->vfbs[i].vncdisplay); + printf("\t\t\t(vncunused %d)\n", d_config->vfbs[i].vncunused); + printf("\t\t\t(keymap %s)\n", d_config->vfbs[i].keymap); + printf("\t\t\t(sdl %d)\n", d_config->vfbs[i].sdl); + printf("\t\t\t(opengl %d)\n", d_config->vfbs[i].opengl); + printf("\t\t\t(display %s)\n", d_config->vfbs[i].display); + printf("\t\t\t(xauthority %s)\n", d_config->vfbs[i].xauthority); printf("\t\t)\n"); printf("\t)\n"); } @@ -530,18 +537,6 @@ static void parse_config_data(const char const char *configfile_data, int configfile_len, struct domain_config *d_config, - libxl_device_disk **disks, - int *num_disks, - libxl_device_nic **vifs, - int *num_vifs, - libxl_device_net2 **vif2s, - int *num_vif2s, - libxl_device_pci **pcidevs, - int *num_pcidevs, - libxl_device_vfb **vfbs, - int *num_vfbs, - libxl_device_vkb **vkbs, - int *num_vkbs, libxl_device_model_info *dm_info) { const char *buf; @@ -710,72 +705,72 @@ static void parse_config_data(const char } if (!xlu_cfg_get_list (config, "disk", &vbds, 0)) { - *num_disks = 0; - *disks = NULL; - while ((buf = xlu_cfg_get_listitem (vbds, *num_disks)) != NULL) { + d_config->num_disks = 0; + d_config->disks = NULL; + while ((buf = xlu_cfg_get_listitem (vbds, d_config->num_disks)) != NULL) { char *buf2 = strdup(buf); char *p, *p2; - *disks = (libxl_device_disk *) realloc(*disks, sizeof (libxl_device_disk) * ((*num_disks) + 1)); - (*disks)[*num_disks].backend_domid = 0; - (*disks)[*num_disks].domid = 0; - (*disks)[*num_disks].unpluggable = 0; + d_config->disks = (libxl_device_disk *) realloc(d_config->disks, sizeof (libxl_device_disk) * (d_config->num_disks + 1)); + d_config->disks[d_config->num_disks].backend_domid = 0; + d_config->disks[d_config->num_disks].domid = 0; + d_config->disks[d_config->num_disks].unpluggable = 0; p = strtok(buf2, ",:"); while (*p == ' ') p++; if (!strcmp(p, "phy")) { - (*disks)[*num_disks].phystype = PHYSTYPE_PHY; + d_config->disks[d_config->num_disks].phystype = PHYSTYPE_PHY; } else if (!strcmp(p, "file")) { - (*disks)[*num_disks].phystype = PHYSTYPE_FILE; + d_config->disks[d_config->num_disks].phystype = PHYSTYPE_FILE; } else if (!strcmp(p, "tap")) { p = strtok(NULL, ":"); if (!strcmp(p, "aio")) { - (*disks)[*num_disks].phystype = PHYSTYPE_AIO; + d_config->disks[d_config->num_disks].phystype = PHYSTYPE_AIO; } else if (!strcmp(p, "vhd")) { - (*disks)[*num_disks].phystype = PHYSTYPE_VHD; + d_config->disks[d_config->num_disks].phystype = PHYSTYPE_VHD; } else if (!strcmp(p, "qcow")) { - (*disks)[*num_disks].phystype = PHYSTYPE_QCOW; + d_config->disks[d_config->num_disks].phystype = PHYSTYPE_QCOW; } else if (!strcmp(p, "qcow2")) { - (*disks)[*num_disks].phystype = PHYSTYPE_QCOW2; + d_config->disks[d_config->num_disks].phystype = PHYSTYPE_QCOW2; } } p = strtok(NULL, ","); while (*p == ' ') p++; - (*disks)[*num_disks].physpath= strdup(p); + d_config->disks[d_config->num_disks].physpath= strdup(p); p = strtok(NULL, ","); while (*p == ' ') p++; p2 = strchr(p, ':'); if (p2 == NULL) { - (*disks)[*num_disks].virtpath = strdup(p); - (*disks)[*num_disks].is_cdrom = 0; - (*disks)[*num_disks].unpluggable = 1; + d_config->disks[d_config->num_disks].virtpath = strdup(p); + d_config->disks[d_config->num_disks].is_cdrom = 0; + d_config->disks[d_config->num_disks].unpluggable = 1; } else { *p2 = '\0'; - (*disks)[*num_disks].virtpath = strdup(p); + d_config->disks[d_config->num_disks].virtpath = strdup(p); if (!strcmp(p2 + 1, "cdrom")) { - (*disks)[*num_disks].is_cdrom = 1; - (*disks)[*num_disks].unpluggable = 1; + d_config->disks[d_config->num_disks].is_cdrom = 1; + d_config->disks[d_config->num_disks].unpluggable = 1; } else - (*disks)[*num_disks].is_cdrom = 0; + d_config->disks[d_config->num_disks].is_cdrom = 0; } p = strtok(NULL, ","); while (*p == ' ') p++; - (*disks)[*num_disks].readwrite = (p[0] == 'w') ? 1 : 0; + d_config->disks[d_config->num_disks].readwrite = (p[0] == 'w') ? 1 : 0; free(buf2); - *num_disks = (*num_disks) + 1; + d_config->num_disks = d_config->num_disks + 1; } } if (!xlu_cfg_get_list (config, "vif", &nics, 0)) { - *num_vifs = 0; - *vifs = NULL; - while ((buf = xlu_cfg_get_listitem (nics, *num_vifs)) != NULL) { + d_config->num_vifs = 0; + d_config->vifs = NULL; + while ((buf = xlu_cfg_get_listitem (nics, d_config->num_vifs)) != NULL) { char *buf2 = strdup(buf); char *p, *p2; - *vifs = (libxl_device_nic *) realloc(*vifs, sizeof (libxl_device_nic) * ((*num_vifs) + 1)); - init_nic_info((*vifs) + (*num_vifs), (*num_vifs)); + d_config->vifs = (libxl_device_nic *) realloc(d_config->vifs, sizeof (libxl_device_nic) * (d_config->num_vifs+1)); + init_nic_info(d_config->vifs + d_config->num_vifs, d_config->num_vifs); p = strtok(buf2, ","); if (!p) goto skip; @@ -786,39 +781,39 @@ static void parse_config_data(const char break; *p2 = '\0'; if (!strcmp(p, "model")) { - (*vifs)[*num_vifs].model = strdup(p2 + 1); + d_config->vifs[d_config->num_vifs].model = strdup(p2 + 1); } else if (!strcmp(p, "mac")) { char *p3 = p2 + 1; *(p3 + 2) = '\0'; - (*vifs)[*num_vifs].mac[0] = strtol(p3, NULL, 16); + d_config->vifs[d_config->num_vifs].mac[0] = strtol(p3, NULL, 16); p3 = p3 + 3; *(p3 + 2) = '\0'; - (*vifs)[*num_vifs].mac[1] = strtol(p3, NULL, 16); + d_config->vifs[d_config->num_vifs].mac[1] = strtol(p3, NULL, 16); p3 = p3 + 3; *(p3 + 2) = '\0'; - (*vifs)[*num_vifs].mac[2] = strtol(p3, NULL, 16); + d_config->vifs[d_config->num_vifs].mac[2] = strtol(p3, NULL, 16); p3 = p3 + 3; *(p3 + 2) = '\0'; - (*vifs)[*num_vifs].mac[3] = strtol(p3, NULL, 16); + d_config->vifs[d_config->num_vifs].mac[3] = strtol(p3, NULL, 16); p3 = p3 + 3; *(p3 + 2) = '\0'; - (*vifs)[*num_vifs].mac[4] = strtol(p3, NULL, 16); + d_config->vifs[d_config->num_vifs].mac[4] = strtol(p3, NULL, 16); p3 = p3 + 3; *(p3 + 2) = '\0'; - (*vifs)[*num_vifs].mac[5] = strtol(p3, NULL, 16); + d_config->vifs[d_config->num_vifs].mac[5] = strtol(p3, NULL, 16); } else if (!strcmp(p, "bridge")) { - (*vifs)[*num_vifs].bridge = strdup(p2 + 1); + d_config->vifs[d_config->num_vifs].bridge = strdup(p2 + 1); } else if (!strcmp(p, "type")) { if (!strcmp(p2 + 1, "ioemu")) - (*vifs)[*num_vifs].nictype = NICTYPE_IOEMU; + d_config->vifs[d_config->num_vifs].nictype = NICTYPE_IOEMU; else - (*vifs)[*num_vifs].nictype = NICTYPE_VIF; + d_config->vifs[d_config->num_vifs].nictype = NICTYPE_VIF; } else if (!strcmp(p, "ip")) { - inet_pton(AF_INET, p2 + 1, &((*vifs)[*num_vifs].ip)); + inet_pton(AF_INET, p2 + 1, &d_config->vifs[d_config->num_vifs].ip); } else if (!strcmp(p, "script")) { - (*vifs)[*num_vifs].script = strdup(p2 + 1); + d_config->vifs[d_config->num_vifs].script = strdup(p2 + 1); } else if (!strcmp(p, "vifname")) { - (*vifs)[*num_vifs].ifname = strdup(p2 + 1); + d_config->vifs[d_config->num_vifs].ifname = strdup(p2 + 1); } else if (!strcmp(p, "rate")) { fprintf(stderr, "the rate parameter for vifs is currently not supported\n"); } else if (!strcmp(p, "accel")) { @@ -827,63 +822,63 @@ static void parse_config_data(const char } while ((p = strtok(NULL, ",")) != NULL); skip: free(buf2); - *num_vifs = (*num_vifs) + 1; + d_config->num_vifs = d_config->num_vifs + 1; } } if (!xlu_cfg_get_list(config, "vif2", &net2s, 0)) { - *num_vif2s = 0; - *vif2s = NULL; - while ((buf = xlu_cfg_get_listitem(net2s, *num_vif2s))) { + d_config->num_vif2s = 0; + d_config->vif2s = NULL; + while ((buf = xlu_cfg_get_listitem(net2s, d_config->num_vif2s))) { char *buf2 = strdup(buf); char *p; - *vif2s = realloc(*vif2s, sizeof (libxl_device_net2) * (*num_vif2s + 1)); - init_net2_info(*vif2s + *num_vif2s, *num_vif2s); + d_config->vif2s = realloc(d_config->vif2s, sizeof (libxl_device_net2) * (d_config->num_vif2s + 1)); + init_net2_info(d_config->vif2s + d_config->num_vif2s, d_config->num_vif2s); for (p = strtok(buf2, ","); p; p = strtok(buf2, ",")) { while (isblank(*p)) p++; if (!strncmp("front_mac=", p, 10)) { - libxl_strtomac(p + 10, (*vif2s)[*num_vif2s].front_mac); + libxl_strtomac(p + 10, d_config->vif2s[d_config->num_vif2s].front_mac); } else if (!strncmp("back_mac=", p, 9)) { - libxl_strtomac(p + 9, (*vif2s)[*num_vif2s].back_mac); + libxl_strtomac(p + 9, d_config->vif2s[d_config->num_vif2s].back_mac); } else if (!strncmp("backend=", p, 8)) { - domain_qualifier_to_domid(p + 8, &((*vif2s)[*num_vif2s].backend_domid), 0); + domain_qualifier_to_domid(p + 8, &d_config->vif2s[d_config->num_vif2s].backend_domid, 0); } else if (!strncmp("trusted=", p, 8)) { - (*vif2s)[*num_vif2s].trusted = (*(p + 8) == '1'); + d_config->vif2s[d_config->num_vif2s].trusted = (*(p + 8) == '1'); } else if (!strncmp("back_trusted=", p, 13)) { - (*vif2s)[*num_vif2s].back_trusted = (*(p + 13) == '1'); + d_config->vif2s[d_config->num_vif2s].back_trusted = (*(p + 13) == '1'); } else if (!strncmp("bridge=", p, 7)) { - (*vif2s)[*num_vif2s].bridge = strdup(p + 13); + d_config->vif2s[d_config->num_vif2s].bridge = strdup(p + 13); } else if (!strncmp("filter_mac=", p, 11)) { - (*vif2s)[*num_vif2s].filter_mac = (*(p + 11) == '1'); + d_config->vif2s[d_config->num_vif2s].filter_mac = (*(p + 11) == '1'); } else if (!strncmp("front_filter_mac=", p, 17)) { - (*vif2s)[*num_vif2s].front_filter_mac = (*(p + 17) == '1'); + d_config->vif2s[d_config->num_vif2s].front_filter_mac = (*(p + 17) == '1'); } else if (!strncmp("pdev=", p, 5)) { - (*vif2s)[*num_vif2s].pdev = strtoul(p + 5, NULL, 10); + d_config->vif2s[d_config->num_vif2s].pdev = strtoul(p + 5, NULL, 10); } else if (!strncmp("max_bypasses=", p, 13)) { - (*vif2s)[*num_vif2s].max_bypasses = strtoul(p + 13, NULL, 10); + d_config->vif2s[d_config->num_vif2s].max_bypasses = strtoul(p + 13, NULL, 10); } } free(buf2); - ++(*num_vif2s); + ++d_config->num_vif2s; } } if (!xlu_cfg_get_list (config, "vfb", &cvfbs, 0)) { - *num_vfbs = 0; - *num_vkbs = 0; - *vfbs = NULL; - *vkbs = NULL; - while ((buf = xlu_cfg_get_listitem (cvfbs, *num_vfbs)) != NULL) { + d_config->num_vfbs = 0; + d_config->num_vkbs = 0; + d_config->vfbs = NULL; + d_config->vkbs = NULL; + while ((buf = xlu_cfg_get_listitem (cvfbs, d_config->num_vfbs)) != NULL) { char *buf2 = strdup(buf); char *p, *p2; - *vfbs = (libxl_device_vfb *) realloc(*vfbs, sizeof(libxl_device_vfb) * ((*num_vfbs) + 1)); - init_vfb_info((*vfbs) + (*num_vfbs), (*num_vfbs)); - - *vkbs = (libxl_device_vkb *) realloc(*vkbs, sizeof(libxl_device_vkb) * ((*num_vkbs) + 1)); - init_vkb_info((*vkbs) + (*num_vkbs), (*num_vkbs)); + d_config->vfbs = (libxl_device_vfb *) realloc(d_config->vfbs, sizeof(libxl_device_vfb) * (d_config->num_vfbs + 1)); + init_vfb_info(d_config->vfbs + d_config->num_vfbs, d_config->num_vfbs); + + d_config->vkbs = (libxl_device_vkb *) realloc(d_config->vkbs, sizeof(libxl_device_vkb) * (d_config->num_vkbs + 1)); + init_vkb_info(d_config->vkbs + d_config->num_vkbs, d_config->num_vkbs); p = strtok(buf2, ","); if (!p) @@ -895,31 +890,31 @@ skip: break; *p2 = '\0'; if (!strcmp(p, "vnc")) { - (*vfbs)[*num_vfbs].vnc = atoi(p2 + 1); + d_config->vfbs[d_config->num_vfbs].vnc = atoi(p2 + 1); } else if (!strcmp(p, "vnclisten")) { - (*vfbs)[*num_vfbs].vnclisten = strdup(p2 + 1); + d_config->vfbs[d_config->num_vfbs].vnclisten = strdup(p2 + 1); } else if (!strcmp(p, "vncpasswd")) { - (*vfbs)[*num_vfbs].vncpasswd = strdup(p2 + 1); + d_config->vfbs[d_config->num_vfbs].vncpasswd = strdup(p2 + 1); } else if (!strcmp(p, "vncdisplay")) { - (*vfbs)[*num_vfbs].vncdisplay = atoi(p2 + 1); + d_config->vfbs[d_config->num_vfbs].vncdisplay = atoi(p2 + 1); } else if (!strcmp(p, "vncunused")) { - (*vfbs)[*num_vfbs].vncunused = atoi(p2 + 1); + d_config->vfbs[d_config->num_vfbs].vncunused = atoi(p2 + 1); } else if (!strcmp(p, "keymap")) { - (*vfbs)[*num_vfbs].keymap = strdup(p2 + 1); + d_config->vfbs[d_config->num_vfbs].keymap = strdup(p2 + 1); } else if (!strcmp(p, "sdl")) { - (*vfbs)[*num_vfbs].sdl = atoi(p2 + 1); + d_config->vfbs[d_config->num_vfbs].sdl = atoi(p2 + 1); } else if (!strcmp(p, "opengl")) { - (*vfbs)[*num_vfbs].opengl = atoi(p2 + 1); + d_config->vfbs[d_config->num_vfbs].opengl = atoi(p2 + 1); } else if (!strcmp(p, "display")) { - (*vfbs)[*num_vfbs].display = strdup(p2 + 1); + d_config->vfbs[d_config->num_vfbs].display = strdup(p2 + 1); } else if (!strcmp(p, "xauthority")) { - (*vfbs)[*num_vfbs].xauthority = strdup(p2 + 1); + d_config->vfbs[d_config->num_vfbs].xauthority = strdup(p2 + 1); } } while ((p = strtok(NULL, ",")) != NULL); skip_vfb: free(buf2); - *num_vfbs = (*num_vfbs) + 1; - *num_vkbs = (*num_vkbs) + 1; + d_config->num_vfbs = d_config->num_vfbs + 1; + d_config->num_vkbs = d_config->num_vkbs + 1; } } @@ -930,14 +925,14 @@ skip_vfb: pci_power_mgmt = l; if (!xlu_cfg_get_list (config, "pci", &pcis, 0)) { - *num_pcidevs = 0; - *pcidevs = NULL; - while ((buf = xlu_cfg_get_listitem (pcis, *num_pcidevs)) != NULL) { + d_config->num_pcidevs = 0; + d_config->pcidevs = NULL; + while ((buf = xlu_cfg_get_listitem (pcis, d_config->num_pcidevs)) != NULL) { unsigned int domain = 0, bus = 0, dev = 0, func = 0, vdevfn = 0; char *buf2 = strdup(buf); char *p; - *pcidevs = (libxl_device_pci *) realloc(*pcidevs, sizeof (libxl_device_pci) * ((*num_pcidevs) + 1)); - memset(*pcidevs + *num_pcidevs, 0x00, sizeof(libxl_device_pci)); + d_config->pcidevs = (libxl_device_pci *) realloc(d_config->pcidevs, sizeof (libxl_device_pci) * (d_config->num_pcidevs + 1)); + memset(d_config->pcidevs + d_config->num_pcidevs, 0x00, sizeof(libxl_device_pci)); p = strtok(buf2, ","); if (!p) goto skip_pci; @@ -948,21 +943,21 @@ skip_vfb: goto skip_pci; } } - libxl_device_pci_init(*pcidevs + *num_pcidevs, domain, bus, dev, func, vdevfn); - (*pcidevs)[*num_pcidevs].msitranslate = pci_msitranslate; - (*pcidevs)[*num_pcidevs].power_mgmt = pci_power_mgmt; + libxl_device_pci_init(d_config->pcidevs + d_config->num_pcidevs, domain, bus, dev, func, vdevfn); + d_config->pcidevs[d_config->num_pcidevs].msitranslate = pci_msitranslate; + d_config->pcidevs[d_config->num_pcidevs].power_mgmt = pci_power_mgmt; while ((p = strtok(NULL, ",=")) != NULL) { while (*p == ' ') p++; if (!strcmp(p, "msitranslate")) { p = strtok(NULL, ",="); - (*pcidevs)[*num_pcidevs].msitranslate = atoi(p); + d_config->pcidevs[d_config->num_pcidevs].msitranslate = atoi(p); } else if (!strcmp(p, "power_mgmt")) { p = strtok(NULL, ",="); - (*pcidevs)[*num_pcidevs].power_mgmt = atoi(p); + d_config->pcidevs[d_config->num_pcidevs].power_mgmt = atoi(p); } } - *num_pcidevs = (*num_pcidevs) + 1; + d_config->num_pcidevs = d_config->num_pcidevs + 1; skip_pci: free(buf2); } @@ -1199,12 +1194,6 @@ static int create_domain(struct domain_c libxl_domain_build_state state; libxl_device_model_info dm_info; - libxl_device_disk *disks = NULL; - libxl_device_nic *vifs = NULL; - libxl_device_net2 *vif2s = NULL; - libxl_device_pci *pcidevs = NULL; - libxl_device_vfb *vfbs = NULL; - libxl_device_vkb *vkbs = NULL; libxl_device_console console; int debug = dom_info->debug; @@ -1216,7 +1205,6 @@ static int create_domain(struct domain_c int migrate_fd = dom_info->migrate_fd; char **migration_domname_r = dom_info->migration_domname_r; - int num_disks = 0, num_vifs = 0, num_vif2s = 0, num_pcidevs = 0, num_vfbs = 0, num_vkbs = 0; int i, fd; int need_daemon = 1; int ret, rc; @@ -1227,7 +1215,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(&d_config, 0x00, sizeof(d_config)); memset(&dm_info, 0x00, sizeof(dm_info)); if (restore_file) { @@ -1330,7 +1318,7 @@ 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, &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, &dm_info); if (dom_info->dryrun) return 0; @@ -1350,7 +1338,7 @@ static int create_domain(struct domain_c } if (debug) - printf_info(-1, &d_config, disks, num_disks, vifs, num_vifs, pcidevs, num_pcidevs, vfbs, num_vfbs, vkbs, num_vkbs, &dm_info); + printf_info(-1, &d_config, &dm_info); start: domid = 0; @@ -1382,7 +1370,7 @@ start: */ dom_info->console_autoconnect = 0; - ret = libxl_run_bootloader(&ctx, &d_config.b_info, num_disks > 0 ? &disks[0] : NULL, domid); + ret = libxl_run_bootloader(&ctx, &d_config.b_info, d_config.num_disks > 0 ? &d_config.disks[0] : NULL, domid); if (ret) { fprintf(stderr, "failed to run bootloader: %d\n", ret); goto error_out; @@ -1404,18 +1392,18 @@ start: goto error_out; } - for (i = 0; i < num_disks; i++) { - disks[i].domid = domid; - ret = libxl_device_disk_add(&ctx, domid, &disks[i]); + for (i = 0; i < d_config.num_disks; i++) { + d_config.disks[i].domid = domid; + ret = libxl_device_disk_add(&ctx, domid, &d_config.disks[i]); if (ret) { fprintf(stderr, "cannot add disk %d to domain: %d\n", i, ret); ret = ERROR_FAIL; goto error_out; } } - for (i = 0; i < num_vifs; i++) { - vifs[i].domid = domid; - ret = libxl_device_nic_add(&ctx, domid, &vifs[i]); + for (i = 0; i < d_config.num_vifs; i++) { + d_config.vifs[i].domid = domid; + ret = libxl_device_nic_add(&ctx, domid, &d_config.vifs[i]); if (ret) { fprintf(stderr, "cannot add nic %d to domain: %d\n", i, ret); ret = ERROR_FAIL; @@ -1423,9 +1411,9 @@ start: } } 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])); + for (i = 0; i < d_config.num_vif2s; i++) { + d_config.vif2s[i].domid = domid; + ret = libxl_device_net2_add(&ctx, domid, &d_config.vif2s[i]); if (ret) { fprintf(stderr, "cannot add net2 %d to domain: %d\n", i, ret); ret = ERROR_FAIL; @@ -1435,28 +1423,30 @@ start: } 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) ); + MUST( libxl_create_device_model(&ctx, &dm_info, + d_config.disks, d_config.num_disks, + d_config.vifs, d_config.num_vifs, + &dm_starting) ); } else { - for (i = 0; i < num_vfbs; i++) { - vfbs[i].domid = domid; - libxl_device_vfb_add(&ctx, domid, &vfbs[i]); - vkbs[i].domid = domid; - libxl_device_vkb_add(&ctx, domid, &vkbs[i]); + for (i = 0; i < d_config.num_vfbs; i++) { + d_config.vfbs[i].domid = domid; + libxl_device_vfb_add(&ctx, domid, &d_config.vfbs[i]); + d_config.vkbs[i].domid = domid; + libxl_device_vkb_add(&ctx, domid, &d_config.vkbs[i]); } init_console_info(&console, 0, &state); console.domid = domid; - if (num_vfbs) + if (d_config.num_vfbs) console.constype = CONSTYPE_IOEMU; libxl_device_console_add(&ctx, domid, &console); - if (num_vfbs) - libxl_create_xenpv_qemu(&ctx, vfbs, 1, &console, &dm_starting); + if (d_config.num_vfbs) + libxl_create_xenpv_qemu(&ctx, d_config.vfbs, 1, &console, &dm_starting); } if (dm_starting) MUST( libxl_confirm_device_model_startup(&ctx, dm_starting) ); - for (i = 0; i < num_pcidevs; i++) - libxl_device_pci_add(&ctx, domid, &pcidevs[i]); + for (i = 0; i < d_config.num_pcidevs; i++) + libxl_device_pci_add(&ctx, domid, &d_config.pcidevs[i]); if (!paused) libxl_domain_unpause(&ctx, domid); @@ -1521,9 +1511,9 @@ start: } LOG("Waiting for domain %s (domid %d) to die [pid %ld]", d_config.c_info.name, domid, (long)getpid()); - w1 = (libxl_waiter*) xmalloc(sizeof(libxl_waiter) * num_disks); + w1 = (libxl_waiter*) xmalloc(sizeof(libxl_waiter) * d_config.num_disks); w2 = (libxl_waiter*) xmalloc(sizeof(libxl_waiter)); - libxl_wait_for_disk_ejects(&ctx, domid, disks, num_disks, w1); + libxl_wait_for_disk_ejects(&ctx, domid, d_config.disks, d_config.num_disks, w1); libxl_wait_for_domain_death(&ctx, domid, w2); libxl_get_wait_fd(&ctx, &fd); while (1) { @@ -2086,14 +2076,7 @@ void list_domains_details(void) char *config_file; 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_device_model_info dm_info; - libxl_device_disk *disks = NULL; - libxl_device_nic *vifs = NULL; - libxl_device_net2 *vif2s = NULL; - libxl_device_pci *pcidevs = NULL; - libxl_device_vfb *vfbs = NULL; - libxl_device_vkb *vkbs = NULL; info = libxl_list_domain(&ctx, &nb_domain); @@ -2106,9 +2089,9 @@ void list_domains_details(void) if (rc) continue; CHK_ERRNO(asprintf(&config_file, "<domid %d data>", info[i].domid)); - 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); + memset(&d_config, 0x00, sizeof(d_config)); + parse_config_data(config_file, (char *)data, len, &d_config, &dm_info); + printf_info(info[i].domid, &d_config, &dm_info); free(data); free(config_file); } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |