This is a fairly simple NFC patch which changes the QEMU driver to use
the virDomainDefPtr object when building command line arguments instead
of the virDomainObjPtr. The command line building only needs the config,
and none of the state, so virDomainDefPtr was more applicable.
This was a pre-requisite for another patch I wrote, but have since
thrown away. I think this one is worth applying anyway as a general
cleanup.
Daniel
diff -r bd965abde333 src/qemu_conf.c
--- a/src/qemu_conf.c Tue Apr 14 13:00:20 2009 +0100
+++ b/src/qemu_conf.c Thu Apr 16 10:34:10 2009 +0100
@@ -756,7 +756,7 @@ static int qemudBuildCommandLineChrDevSt
*/
int qemudBuildCommandLine(virConnectPtr conn,
struct qemud_driver *driver,
- virDomainObjPtr vm,
+ virDomainDefPtr def,
unsigned int qemuCmdFlags,
const char ***retargv,
const char ***retenv,
@@ -782,7 +782,7 @@ int qemudBuildCommandLine(virConnectPtr
uname_normalize(&ut);
- virUUIDFormat(vm->def->uuid, uuid);
+ virUUIDFormat(def->uuid, uuid);
/* Migration is very annoying due to wildly varying syntax & capabilities
* over time of KVM / QEMU codebases
@@ -811,9 +811,9 @@ int qemudBuildCommandLine(virConnectPtr
}
}
- emulator = vm->def->emulator;
+ emulator = def->emulator;
if (!emulator)
- emulator = virDomainDefDefaultEmulator(conn, vm->def, driver->caps);
+ emulator = virDomainDefDefaultEmulator(conn, def, driver->caps);
if (!emulator)
return -1;
@@ -824,8 +824,8 @@ int qemudBuildCommandLine(virConnectPtr
* 3. The qemu binary has the -no-kqemu flag
*/
if ((qemuCmdFlags & QEMUD_CMD_FLAG_KQEMU) &&
- STREQ(ut.machine, vm->def->os.arch) &&
- vm->def->virtType == VIR_DOMAIN_VIRT_QEMU)
+ STREQ(ut.machine, def->os.arch) &&
+ def->virtType == VIR_DOMAIN_VIRT_QEMU)
disableKQEMU = 1;
/* Need to explicitly disable KVM if
@@ -834,8 +834,8 @@ int qemudBuildCommandLine(virConnectPtr
* 3. The qemu binary has the -no-kvm flag
*/
if ((qemuCmdFlags & QEMUD_CMD_FLAG_KVM) &&
- STREQ(ut.machine, vm->def->os.arch) &&
- vm->def->virtType == VIR_DOMAIN_VIRT_QEMU)
+ STREQ(ut.machine, def->os.arch) &&
+ def->virtType == VIR_DOMAIN_VIRT_QEMU)
disableKVM = 1;
/*
@@ -850,7 +850,7 @@ int qemudBuildCommandLine(virConnectPtr
* 1. guest OS is i686
* 2. emulator is qemu-system-x86_64
*/
- if (STREQ(vm->def->os.arch, "i686") &&
+ if (STREQ(def->os.arch, "i686") &&
((STREQ(ut.machine, "x86_64") &&
strstr(emulator, "kvm")) ||
strstr(emulator, "x86_64")))
@@ -931,10 +931,10 @@ int qemudBuildCommandLine(virConnectPtr
* is set post-startup using the balloon driver. If balloon driver
* is not supported, then they're out of luck anyway
*/
- snprintf(memory, sizeof(memory), "%lu", vm->def->maxmem/1024);
- snprintf(vcpus, sizeof(vcpus), "%lu", vm->def->vcpus);
- snprintf(domid, sizeof(domid), "%d", vm->def->id);
- pidfile = virFilePid(driver->stateDir, vm->def->name);
+ snprintf(memory, sizeof(memory), "%lu", def->maxmem/1024);
+ snprintf(vcpus, sizeof(vcpus), "%lu", def->vcpus);
+ snprintf(domid, sizeof(domid), "%d", def->id);
+ pidfile = virFilePid(driver->stateDir, def->name);
if (!pidfile)
goto error;
@@ -955,9 +955,9 @@ int qemudBuildCommandLine(virConnectPtr
* a machine in the capabilities data for QEMU. So this
* check is just here as a safety in case the unexpected
* happens */
- if (vm->def->os.machine) {
+ if (def->os.machine) {
ADD_ARG_LIT("-M");
- ADD_ARG_LIT(vm->def->os.machine);
+ ADD_ARG_LIT(def->os.machine);
}
if (cpu) {
ADD_ARG_LIT("-cpu");
@@ -975,7 +975,7 @@ int qemudBuildCommandLine(virConnectPtr
if (qemuCmdFlags & QEMUD_CMD_FLAG_NAME) {
ADD_ARG_LIT("-name");
- ADD_ARG_LIT(vm->def->name);
+ ADD_ARG_LIT(def->name);
}
if (qemuCmdFlags & QEMUD_CMD_FLAG_UUID) {
ADD_ARG_LIT("-uuid");
@@ -993,7 +993,7 @@ int qemudBuildCommandLine(virConnectPtr
* if you ask for nographic. So we have to make sure we override
* these defaults ourselves...
*/
- if (!vm->def->graphics)
+ if (!def->graphics)
ADD_ARG_LIT("-nographic");
ADD_ARG_LIT("-monitor");
@@ -1002,19 +1002,19 @@ int qemudBuildCommandLine(virConnectPtr
ADD_ARG_LIT("-pidfile");
ADD_ARG(pidfile);
- if (vm->def->localtime)
+ if (def->localtime)
ADD_ARG_LIT("-localtime");
if ((qemuCmdFlags & QEMUD_CMD_FLAG_NO_REBOOT) &&
- vm->def->onReboot != VIR_DOMAIN_LIFECYCLE_RESTART)
+ def->onReboot != VIR_DOMAIN_LIFECYCLE_RESTART)
ADD_ARG_LIT("-no-reboot");
- if (!(vm->def->features & (1 << VIR_DOMAIN_FEATURE_ACPI)))
+ if (!(def->features & (1 << VIR_DOMAIN_FEATURE_ACPI)))
ADD_ARG_LIT("-no-acpi");
- if (!vm->def->os.bootloader) {
- for (i = 0 ; i < vm->def->os.nBootDevs ; i++) {
- switch (vm->def->os.bootDevs[i]) {
+ if (!def->os.bootloader) {
+ for (i = 0 ; i < def->os.nBootDevs ; i++) {
+ switch (def->os.bootDevs[i]) {
case VIR_DOMAIN_BOOT_CDROM:
boot[i] = 'd';
break;
@@ -1032,29 +1032,29 @@ int qemudBuildCommandLine(virConnectPtr
break;
}
}
- boot[vm->def->os.nBootDevs] = '\0';
+ boot[def->os.nBootDevs] = '\0';
ADD_ARG_LIT("-boot");
ADD_ARG_LIT(boot);
- if (vm->def->os.kernel) {
+ if (def->os.kernel) {
ADD_ARG_LIT("-kernel");
- ADD_ARG_LIT(vm->def->os.kernel);
+ ADD_ARG_LIT(def->os.kernel);
}
- if (vm->def->os.initrd) {
+ if (def->os.initrd) {
ADD_ARG_LIT("-initrd");
- ADD_ARG_LIT(vm->def->os.initrd);
+ ADD_ARG_LIT(def->os.initrd);
}
- if (vm->def->os.cmdline) {
+ if (def->os.cmdline) {
ADD_ARG_LIT("-append");
- ADD_ARG_LIT(vm->def->os.cmdline);
+ ADD_ARG_LIT(def->os.cmdline);
}
} else {
ADD_ARG_LIT("-bootloader");
- ADD_ARG_LIT(vm->def->os.bootloader);
+ ADD_ARG_LIT(def->os.bootloader);
}
- for (i = 0 ; i < vm->def->ndisks ; i++) {
- virDomainDiskDefPtr disk = vm->def->disks[i];
+ for (i = 0 ; i < def->ndisks ; i++) {
+ virDomainDiskDefPtr disk = def->disks[i];
if (disk->driverName != NULL &&
!STREQ(disk->driverName, "qemu")) {
@@ -1071,8 +1071,8 @@ int qemudBuildCommandLine(virConnectPtr
/* If QEMU supports boot=on for -drive param... */
if (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE_BOOT) {
- for (i = 0 ; i < vm->def->os.nBootDevs ; i++) {
- switch (vm->def->os.bootDevs[i]) {
+ for (i = 0 ; i < def->os.nBootDevs ; i++) {
+ switch (def->os.bootDevs[i]) {
case VIR_DOMAIN_BOOT_CDROM:
bootCD = 1;
break;
@@ -1086,11 +1086,11 @@ int qemudBuildCommandLine(virConnectPtr
}
}
- for (i = 0 ; i < vm->def->ndisks ; i++) {
+ for (i = 0 ; i < def->ndisks ; i++) {
virBuffer opt = VIR_BUFFER_INITIALIZER;
char *optstr;
int bootable = 0;
- virDomainDiskDefPtr disk = vm->def->disks[i];
+ virDomainDiskDefPtr disk = def->disks[i];
int idx = virDiskNameToIndex(disk->dst);
const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus);
@@ -1159,10 +1159,10 @@ int qemudBuildCommandLine(virConnectPtr
ADD_ARG(optstr);
}
} else {
- for (i = 0 ; i < vm->def->ndisks ; i++) {
+ for (i = 0 ; i < def->ndisks ; i++) {
char dev[NAME_MAX];
char file[PATH_MAX];
- virDomainDiskDefPtr disk = vm->def->disks[i];
+ virDomainDiskDefPtr disk = def->disks[i];
if (disk->bus == VIR_DOMAIN_DISK_BUS_USB) {
if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
@@ -1200,14 +1200,14 @@ int qemudBuildCommandLine(virConnectPtr
}
}
- if (!vm->def->nnets) {
+ if (!def->nnets) {
ADD_ARG_LIT("-net");
ADD_ARG_LIT("none");
} else {
int vlan = 0;
- for (i = 0 ; i < vm->def->nnets ; i++) {
+ for (i = 0 ; i < def->nnets ; i++) {
char nic[100];
- virDomainNetDefPtr net = vm->def->nets[i];
+ virDomainNetDefPtr net = def->nets[i];
if (snprintf(nic, sizeof(nic),
"nic,macaddr=%02x:%02x:%02x:%02x:%02x:%02x,vlan=%d%s%s",
@@ -1306,13 +1306,13 @@ int qemudBuildCommandLine(virConnectPtr
}
}
- if (!vm->def->nserials) {
+ if (!def->nserials) {
ADD_ARG_LIT("-serial");
ADD_ARG_LIT("none");
} else {
- for (i = 0 ; i < vm->def->nserials ; i++) {
+ for (i = 0 ; i < def->nserials ; i++) {
char buf[4096];
- virDomainChrDefPtr serial = vm->def->serials[i];
+ virDomainChrDefPtr serial = def->serials[i];
if (qemudBuildCommandLineChrDevStr(serial, buf, sizeof(buf)) < 0)
goto error;
@@ -1322,13 +1322,13 @@ int qemudBuildCommandLine(virConnectPtr
}
}
- if (!vm->def->nparallels) {
+ if (!def->nparallels) {
ADD_ARG_LIT("-parallel");
ADD_ARG_LIT("none");
} else {
- for (i = 0 ; i < vm->def->nparallels ; i++) {
+ for (i = 0 ; i < def->nparallels ; i++) {
char buf[4096];
- virDomainChrDefPtr parallel = vm->def->parallels[i];
+ virDomainChrDefPtr parallel = def->parallels[i];
if (qemudBuildCommandLineChrDevStr(parallel, buf, sizeof(buf)) < 0)
goto error;
@@ -1339,8 +1339,8 @@ int qemudBuildCommandLine(virConnectPtr
}
ADD_ARG_LIT("-usb");
- for (i = 0 ; i < vm->def->ninputs ; i++) {
- virDomainInputDefPtr input = vm->def->inputs[i];
+ for (i = 0 ; i < def->ninputs ; i++) {
+ virDomainInputDefPtr input = def->inputs[i];
if (input->bus == VIR_DOMAIN_INPUT_BUS_USB) {
ADD_ARG_LIT("-usbdevice");
@@ -1348,21 +1348,21 @@ int qemudBuildCommandLine(virConnectPtr
}
}
- if (vm->def->graphics &&
- vm->def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
+ if (def->graphics &&
+ def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
virBuffer opt = VIR_BUFFER_INITIALIZER;
char *optstr;
if (qemuCmdFlags & QEMUD_CMD_FLAG_VNC_COLON) {
- if (vm->def->graphics->data.vnc.listenAddr)
- virBufferAdd(&opt, vm->def->graphics->data.vnc.listenAddr,
-1);
+ if (def->graphics->data.vnc.listenAddr)
+ virBufferAdd(&opt, def->graphics->data.vnc.listenAddr, -1);
else if (driver->vncListen)
virBufferAdd(&opt, driver->vncListen, -1);
virBufferVSprintf(&opt, ":%d",
- vm->def->graphics->data.vnc.port - 5900);
+ def->graphics->data.vnc.port - 5900);
- if (vm->def->graphics->data.vnc.passwd ||
+ if (def->graphics->data.vnc.passwd ||
driver->vncPassword)
virBufferAddLit(&opt, ",password");
@@ -1387,7 +1387,7 @@ int qemudBuildCommandLine(virConnectPtr
}
} else {
virBufferVSprintf(&opt, "%d",
- vm->def->graphics->data.vnc.port - 5900);
+ def->graphics->data.vnc.port - 5900);
}
if (virBufferError(&opt))
goto no_memory;
@@ -1396,22 +1396,22 @@ int qemudBuildCommandLine(virConnectPtr
ADD_ARG_LIT("-vnc");
ADD_ARG(optstr);
- if (vm->def->graphics->data.vnc.keymap) {
+ if (def->graphics->data.vnc.keymap) {
ADD_ARG_LIT("-k");
- ADD_ARG_LIT(vm->def->graphics->data.vnc.keymap);
+ ADD_ARG_LIT(def->graphics->data.vnc.keymap);
}
- } else if (vm->def->graphics &&
- vm->def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) {
+ } else if (def->graphics &&
+ def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) {
char *xauth = NULL;
char *display = NULL;
- if (vm->def->graphics->data.sdl.xauth &&
+ if (def->graphics->data.sdl.xauth &&
virAsprintf(&xauth, "XAUTHORITY=%s",
- vm->def->graphics->data.sdl.xauth) < 0)
+ def->graphics->data.sdl.xauth) < 0)
goto no_memory;
- if (vm->def->graphics->data.sdl.display &&
+ if (def->graphics->data.sdl.display &&
virAsprintf(&display, "DISPLAY=%s",
- vm->def->graphics->data.sdl.display) < 0) {
+ def->graphics->data.sdl.display) < 0) {
VIR_FREE(xauth);
goto no_memory;
}
@@ -1420,19 +1420,19 @@ int qemudBuildCommandLine(virConnectPtr
ADD_ENV(xauth);
if (display)
ADD_ENV(display);
- if (vm->def->graphics->data.sdl.fullscreen)
+ if (def->graphics->data.sdl.fullscreen)
ADD_ARG_LIT("-full-screen");
}
/* Add sound hardware */
- if (vm->def->nsounds) {
+ if (def->nsounds) {
int size = 100;
char *modstr;
if (VIR_ALLOC_N(modstr, size+1) < 0)
goto no_memory;
- for (i = 0 ; i < vm->def->nsounds && size > 0 ; i++) {
- virDomainSoundDefPtr sound = vm->def->sounds[i];
+ for (i = 0 ; i < def->nsounds && size > 0 ; i++) {
+ virDomainSoundDefPtr sound = def->sounds[i];
const char *model = virDomainSoundModelTypeToString(sound->model);
if (!model) {
VIR_FREE(modstr);
@@ -1442,7 +1442,7 @@ int qemudBuildCommandLine(virConnectPtr
}
strncat(modstr, model, size);
size -= strlen(model);
- if (i < (vm->def->nsounds - 1))
+ if (i < (def->nsounds - 1))
strncat(modstr, ",", size--);
}
ADD_ARG_LIT("-soundhw");
@@ -1450,11 +1450,11 @@ int qemudBuildCommandLine(virConnectPtr
}
/* Add host passthrough hardware */
- for (i = 0 ; i < vm->def->nhostdevs ; i++) {
+ for (i = 0 ; i < def->nhostdevs ; i++) {
int ret;
char* usbdev;
char* pcidev;
- virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
+ virDomainHostdevDefPtr hostdev = def->hostdevs[i];
/* USB */
if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
diff -r bd965abde333 src/qemu_conf.h
--- a/src/qemu_conf.h Tue Apr 14 13:00:20 2009 +0100
+++ b/src/qemu_conf.h Thu Apr 16 10:34:10 2009 +0100
@@ -124,7 +124,7 @@ int qemudExtractVersionInfo
int qemudBuildCommandLine (virConnectPtr conn,
struct qemud_driver *driver,
- virDomainObjPtr dom,
+ virDomainDefPtr def,
unsigned int qemuCmdFlags,
const char ***retargv,
const char ***retenv,
diff -r bd965abde333 src/qemu_driver.c
--- a/src/qemu_driver.c Tue Apr 14 13:00:20 2009 +0100
+++ b/src/qemu_driver.c Thu Apr 16 10:34:10 2009 +0100
@@ -1390,7 +1390,7 @@ static int qemudStartVMDaemon(virConnect
goto cleanup;
vm->def->id = driver->nextvmid++;
- if (qemudBuildCommandLine(conn, driver, vm,
+ if (qemudBuildCommandLine(conn, driver, vm->def,
qemuCmdFlags, &argv, &progenv,
&tapfds, &ntapfds, migrateFrom) < 0)
goto cleanup;
diff -r bd965abde333 tests/qemuxml2argvtest.c
--- a/tests/qemuxml2argvtest.c Tue Apr 14 13:00:20 2009 +0100
+++ b/tests/qemuxml2argvtest.c Thu Apr 16 10:34:10 2009 +0100
@@ -34,7 +34,6 @@ static int testCompareXMLToArgvFiles(con
const char **tmp = NULL;
int ret = -1, len, flags;
virDomainDefPtr vmdef = NULL;
- virDomainObj vm;
if (virtTestLoadFile(cmd, &expectargv, MAX_FILE) < 0)
goto fail;
@@ -43,20 +42,17 @@ static int testCompareXMLToArgvFiles(con
VIR_DOMAIN_XML_INACTIVE)))
goto fail;
- memset(&vm, 0, sizeof vm);
- vm.def = vmdef;
if (extraFlags & QEMUD_CMD_FLAG_DOMID)
- vm.def->id = 6;
+ vmdef->id = 6;
else
- vm.def->id = -1;
- vm.pid = -1;
+ vmdef->id = -1;
flags = QEMUD_CMD_FLAG_VNC_COLON |
QEMUD_CMD_FLAG_NO_REBOOT |
extraFlags;
if (qemudBuildCommandLine(NULL, &driver,
- &vm, flags, &argv, &qenv,
+ vmdef, flags, &argv, &qenv,
NULL, NULL, migrateFrom) < 0)
goto fail;
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|