}
-static int
+int
qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, int qemuCmdFlags)
{
if (qemuCmdFlags & QEMUD_CMD_FLAG_DRIVE) {
return 0;
}
+
+int
+qemuAssignDeviceHostdevAlias(virDomainDefPtr def, virDomainHostdevDefPtr hostdev, int idx)
+{
+ if (idx == -1) {
+ int i;
+ idx = 0;
+ for (i = 0 ; i < def->nhostdevs ; i++) {
+ int thisidx;
+ if ((thisidx = qemuDomainDeviceAliasIndex(&def->hostdevs[i]->info, "hostdev")) < 0) {
+ qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Unable to determine device index for hostdevwork device"));
+ return -1;
+ }
+ if (thisidx >= idx)
+ idx = thisidx + 1;
+ }
+ }
+
+ if (virAsprintf(&hostdev->info.alias, "hostdev%d", idx) < 0) {
+ virReportOOMError(NULL);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+int
+qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller)
+{
+ const char *prefix = virDomainControllerTypeToString(controller->type);
+
+ if (virAsprintf(&controller->info.alias, "%s%d", prefix,
+ controller->idx) < 0) {
+ virReportOOMError(NULL);
+ return -1;
+ }
+
+ return 0;
+}
+
+
static int
qemuAssignDeviceAliases(virDomainDefPtr def, int qemuCmdFlags)
{
goto no_memory;
}
for (i = 0; i < def->nhostdevs ; i++) {
- if (def->hostdevs[i]->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) {
- const char *prefix = virDomainHostdevSubsysTypeToString
- (def->hostdevs[i]->source.subsys.type);
- if (virAsprintf(&def->hostdevs[i]->info.alias, "host%s%d", prefix, i) < 0)
- goto no_memory;
- } else {
- if (virAsprintf(&def->hostdevs[i]->info.alias, "host%d",i) < 0)
- goto no_memory;
- }
+ if (qemuAssignDeviceHostdevAlias(def, def->hostdevs[i], i) < 0)
+ return -1;
}
for (i = 0; i < def->nvideos ; i++) {
if (virAsprintf(&def->videos[i]->info.alias, "video%d", i) < 0)
goto no_memory;
}
for (i = 0; i < def->ncontrollers ; i++) {
- const char *prefix = virDomainControllerTypeToString(def->controllers[i]->type);
- if (virAsprintf(&def->controllers[i]->info.alias, "%s%d", prefix, i) < 0)
- goto no_memory;
+ if (qemuAssignDeviceControllerAlias(def->controllers[i]) < 0)
+ return -1;
}
for (i = 0; i < def->ninputs ; i++) {
if (virAsprintf(&def->inputs[i]->info.alias, "input%d", i) < 0)
int qemuDomainNetVLAN(virDomainNetDefPtr def);
int qemuAssignDeviceNetAlias(virDomainDefPtr def, virDomainNetDefPtr net, int idx);
+int qemuAssignDeviceDiskAlias(virDomainDiskDefPtr def, int qemuCmdFlags);
+int qemuAssignDeviceHostdevAlias(virDomainDefPtr def, virDomainHostdevDefPtr net, int idx);
+int qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller);
#endif /* __QEMUD_CONF_H */
if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) {
if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &disk->info) < 0)
goto error;
+ if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0)
+ goto error;
if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCmdFlags)))
goto error;
}
}
- if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) &&
- qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &controller->info) < 0)
- goto cleanup;
+ if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) {
+ if (qemuDomainPCIAddressEnsureAddr(priv->pciaddrs, &controller->info) < 0)
+ goto cleanup;
+ if (qemuAssignDeviceControllerAlias(controller) < 0)
+ goto cleanup;
+ }
if (!(devstr = qemuBuildControllerDevStr(controller))) {
virReportOOMError(NULL);
driver->securityDriver->domainSetSecurityImageLabel(conn, vm, disk) < 0)
return -1;
- /* This func allocates the bus/unit IDs so must be before
- * we search for controller
- */
- if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCmdFlags)))
- goto error;
-
- if ((qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) &&
- !(devstr = qemuBuildDriveDevStr(NULL, disk)))
- goto error;
-
- /* We should have an adddress now, so make sure */
+ /* We should have an address already, so make sure */
if (disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) {
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
_("unexpected disk address type %s"),
goto error;
}
+ if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) {
+ if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0)
+ goto error;
+ if (!(devstr = qemuBuildDriveDevStr(NULL, disk)))
+ goto error;
+ }
+
+ if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCmdFlags)))
+ goto error;
+
for (i = 0 ; i <= disk->info.addr.drive.controller ; i++) {
cont = qemuDomainFindOrCreateSCSIDiskController(conn, driver, vm, i, qemuCmdFlags);
if (!cont)
}
if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) {
+ if (qemuAssignDeviceDiskAlias(disk, qemuCmdFlags) < 0)
+ goto error;
if (!(drivestr = qemuBuildDriveStr(disk, 0, qemuCmdFlags)))
goto error;
if (!(devstr = qemuBuildDriveDevStr(NULL, disk)))
-LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefaults -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda /dev/HostVG/QEMUGuest2 -usb -device pci-assign,host=06:12.5,id=hostpci0,bus=pci.0,addr=0x4 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefaults -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda /dev/HostVG/QEMUGuest2 -usb -device pci-assign,host=06:12.5,id=hostdev0,bus=pci.0,addr=0x4 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
-LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefaults -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -usb -device usb-host,hostbus=014,hostaddr=006,id=hostusb0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefaults -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -usb -device usb-host,hostbus=014,hostaddr=006,id=hostdev0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3