提交 429f5454 编写于 作者: C Cole Robinson

qemu: command: Make BuildVirtioDevStr more generic

Switch qemuBuildVirtioDevStr to use virDomainDeviceSetData: callers
pass in the virDomainDeviceType and the void * DefPtr. This will
save us from having to repeatedly extend the function argument
list in subsequent patches.
Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
Signed-off-by: NCole Robinson <crobinso@redhat.com>
上级 4a4c4181
...@@ -396,14 +396,34 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, ...@@ -396,14 +396,34 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
} }
/**
* qemuBuildVirtioDevStr
* @buf: virBufferPtr to append the built string
* @baseName: qemu virtio device basename string. Ex: virtio-rng for <rng>
* @devtype: virDomainDeviceType of the device. Ex: VIR_DOMAIN_DEVICE_TYPE_RNG
* @devdata: *DefPtr of the device definition
*
* Build the qemu virtio -device name from the passed parameters. Currently
* this is mostly about attaching the correct string prefix to @baseName for
* the passed @type. So for @baseName "virtio-rng" and devdata->info.type
* VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI, generate "virtio-rng-pci"
*
* Returns: -1 on failure, 0 on success
*/
static int static int
qemuBuildVirtioDevStr(virBufferPtr buf, qemuBuildVirtioDevStr(virBufferPtr buf,
const char *baseName, const char *baseName,
virDomainDeviceAddressType type) virDomainDeviceType devtype,
void *devdata)
{ {
const char *implName = NULL; const char *implName = NULL;
virDomainDeviceDef device = { .type = devtype };
virDomainDeviceInfoPtr info;
switch (type) { virDomainDeviceSetData(&device, devdata);
info = virDomainDeviceGetInfo(&device);
switch ((virDomainDeviceAddressType) info->type) {
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI:
implName = "pci"; implName = "pci";
break; break;
...@@ -434,7 +454,7 @@ qemuBuildVirtioDevStr(virBufferPtr buf, ...@@ -434,7 +454,7 @@ qemuBuildVirtioDevStr(virBufferPtr buf,
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE: case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE:
case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST: case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST:
default: default:
virReportEnumRangeError(virDomainDeviceAddressType, type); virReportEnumRangeError(virDomainDeviceAddressType, info->type);
return -1; return -1;
} }
...@@ -443,7 +463,6 @@ qemuBuildVirtioDevStr(virBufferPtr buf, ...@@ -443,7 +463,6 @@ qemuBuildVirtioDevStr(virBufferPtr buf,
return 0; return 0;
} }
static int static int
qemuBuildVirtioOptionsStr(virBufferPtr buf, qemuBuildVirtioOptionsStr(virBufferPtr buf,
virDomainVirtioOptionsPtr virtio, virDomainVirtioOptionsPtr virtio,
...@@ -2050,8 +2069,10 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, ...@@ -2050,8 +2069,10 @@ qemuBuildDiskDeviceStr(const virDomainDef *def,
break; break;
case VIR_DOMAIN_DISK_BUS_VIRTIO: case VIR_DOMAIN_DISK_BUS_VIRTIO:
if (qemuBuildVirtioDevStr(&opt, "virtio-blk", disk->info.type) < 0) if (qemuBuildVirtioDevStr(&opt, "virtio-blk",
VIR_DOMAIN_DEVICE_DISK, disk) < 0) {
goto error; goto error;
}
if (disk->iothread) if (disk->iothread)
virBufferAsprintf(&opt, ",iothread=iothread%u", disk->iothread); virBufferAsprintf(&opt, ",iothread=iothread%u", disk->iothread);
...@@ -2639,8 +2660,10 @@ qemuBuildFSDevStr(const virDomainDef *def, ...@@ -2639,8 +2660,10 @@ qemuBuildFSDevStr(const virDomainDef *def,
goto error; goto error;
} }
if (qemuBuildVirtioDevStr(&opt, "virtio-9p", fs->info.type) < 0) if (qemuBuildVirtioDevStr(&opt, "virtio-9p",
VIR_DOMAIN_DEVICE_FS, fs) < 0) {
goto error; goto error;
}
virBufferAsprintf(&opt, ",id=%s", fs->info.alias); virBufferAsprintf(&opt, ",id=%s", fs->info.alias);
virBufferAsprintf(&opt, ",fsdev=%s%s", virBufferAsprintf(&opt, ",fsdev=%s%s",
...@@ -2845,8 +2868,10 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, ...@@ -2845,8 +2868,10 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
switch ((virDomainControllerModelSCSI) def->model) { switch ((virDomainControllerModelSCSI) def->model) {
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI:
if (qemuBuildVirtioDevStr(&buf, "virtio-scsi", def->info.type) < 0) if (qemuBuildVirtioDevStr(&buf, "virtio-scsi",
VIR_DOMAIN_DEVICE_CONTROLLER, def) < 0) {
goto error; goto error;
}
if (def->iothread) { if (def->iothread) {
virBufferAsprintf(&buf, ",iothread=iothread%u", virBufferAsprintf(&buf, ",iothread=iothread%u",
...@@ -2886,8 +2911,10 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef, ...@@ -2886,8 +2911,10 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
break; break;
case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL:
if (qemuBuildVirtioDevStr(&buf, "virtio-serial", def->info.type) < 0) if (qemuBuildVirtioDevStr(&buf, "virtio-serial",
VIR_DOMAIN_DEVICE_CONTROLLER, def) < 0) {
goto error; goto error;
}
virBufferAsprintf(&buf, ",id=%s", def->info.alias); virBufferAsprintf(&buf, ",id=%s", def->info.alias);
if (def->opts.vioserial.ports != -1) { if (def->opts.vioserial.ports != -1) {
...@@ -3655,8 +3682,10 @@ qemuBuildNicDevStr(virDomainDefPtr def, ...@@ -3655,8 +3682,10 @@ qemuBuildNicDevStr(virDomainDefPtr def,
char macaddr[VIR_MAC_STRING_BUFLEN]; char macaddr[VIR_MAC_STRING_BUFLEN];
if (virDomainNetIsVirtioModel(net)) { if (virDomainNetIsVirtioModel(net)) {
if (qemuBuildVirtioDevStr(&buf, "virtio-net", net->info.type) < 0) if (qemuBuildVirtioDevStr(&buf, "virtio-net",
VIR_DOMAIN_DEVICE_NET, net) < 0) {
goto error; goto error;
}
usingVirtio = true; usingVirtio = true;
} else { } else {
...@@ -4050,7 +4079,8 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd, ...@@ -4050,7 +4079,8 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd,
return 0; return 0;
if (qemuBuildVirtioDevStr(&buf, "virtio-balloon", if (qemuBuildVirtioDevStr(&buf, "virtio-balloon",
def->memballoon->info.type) < 0) { VIR_DOMAIN_DEVICE_MEMBALLOON,
def->memballoon) < 0) {
goto error; goto error;
} }
...@@ -4148,20 +4178,28 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def, ...@@ -4148,20 +4178,28 @@ qemuBuildVirtioInputDevStr(const virDomainDef *def,
switch ((virDomainInputType)dev->type) { switch ((virDomainInputType)dev->type) {
case VIR_DOMAIN_INPUT_TYPE_MOUSE: case VIR_DOMAIN_INPUT_TYPE_MOUSE:
if (qemuBuildVirtioDevStr(&buf, "virtio-mouse", dev->info.type) < 0) if (qemuBuildVirtioDevStr(&buf, "virtio-mouse",
VIR_DOMAIN_DEVICE_INPUT, dev) < 0) {
goto error; goto error;
}
break; break;
case VIR_DOMAIN_INPUT_TYPE_TABLET: case VIR_DOMAIN_INPUT_TYPE_TABLET:
if (qemuBuildVirtioDevStr(&buf, "virtio-tablet", dev->info.type) < 0) if (qemuBuildVirtioDevStr(&buf, "virtio-tablet",
VIR_DOMAIN_DEVICE_INPUT, dev) < 0) {
goto error; goto error;
}
break; break;
case VIR_DOMAIN_INPUT_TYPE_KBD: case VIR_DOMAIN_INPUT_TYPE_KBD:
if (qemuBuildVirtioDevStr(&buf, "virtio-keyboard", dev->info.type) < 0) if (qemuBuildVirtioDevStr(&buf, "virtio-keyboard",
VIR_DOMAIN_DEVICE_INPUT, dev) < 0) {
goto error; goto error;
}
break; break;
case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH:
if (qemuBuildVirtioDevStr(&buf, "virtio-input-host", dev->info.type) < 0) if (qemuBuildVirtioDevStr(&buf, "virtio-input-host",
VIR_DOMAIN_DEVICE_INPUT, dev) < 0) {
goto error; goto error;
}
break; break;
case VIR_DOMAIN_INPUT_TYPE_LAST: case VIR_DOMAIN_INPUT_TYPE_LAST:
default: default:
...@@ -4479,8 +4517,10 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, ...@@ -4479,8 +4517,10 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,
} }
if (STREQ(model, "virtio-gpu")) { if (STREQ(model, "virtio-gpu")) {
if (qemuBuildVirtioDevStr(&buf, "virtio-gpu", video->info.type) < 0) if (qemuBuildVirtioDevStr(&buf, "virtio-gpu",
VIR_DOMAIN_DEVICE_VIDEO, video) < 0) {
goto error; goto error;
}
} else { } else {
virBufferAsprintf(&buf, "%s", model); virBufferAsprintf(&buf, "%s", model);
} }
...@@ -4925,8 +4965,10 @@ qemuBuildSCSIVHostHostdevDevStr(const virDomainDef *def, ...@@ -4925,8 +4965,10 @@ qemuBuildSCSIVHostHostdevDevStr(const virDomainDef *def,
goto cleanup; goto cleanup;
} }
if (qemuBuildVirtioDevStr(&buf, "vhost-scsi", dev->info->type) < 0) if (qemuBuildVirtioDevStr(&buf, "vhost-scsi",
VIR_DOMAIN_DEVICE_HOSTDEV, dev) < 0) {
goto cleanup; goto cleanup;
}
virBufferAsprintf(&buf, ",wwpn=%s,vhostfd=%s,id=%s", virBufferAsprintf(&buf, ",wwpn=%s,vhostfd=%s,id=%s",
hostsrc->wwpn, hostsrc->wwpn,
...@@ -5873,8 +5915,10 @@ qemuBuildRNGDevStr(const virDomainDef *def, ...@@ -5873,8 +5915,10 @@ qemuBuildRNGDevStr(const virDomainDef *def,
dev->source.file)) dev->source.file))
goto error; goto error;
if (qemuBuildVirtioDevStr(&buf, "virtio-rng", dev->info.type) < 0) if (qemuBuildVirtioDevStr(&buf, "virtio-rng",
VIR_DOMAIN_DEVICE_RNG, dev) < 0) {
goto error; goto error;
}
virBufferAsprintf(&buf, ",rng=obj%s,id=%s", virBufferAsprintf(&buf, ",rng=obj%s,id=%s",
dev->info.alias, dev->info.alias); dev->info.alias, dev->info.alias);
...@@ -10346,8 +10390,10 @@ qemuBuildVsockDevStr(virDomainDefPtr def, ...@@ -10346,8 +10390,10 @@ qemuBuildVsockDevStr(virDomainDefPtr def,
char *ret = NULL; char *ret = NULL;
if (qemuBuildVirtioDevStr(&buf, "vhost-vsock", vsock->info.type) < 0) if (qemuBuildVirtioDevStr(&buf, "vhost-vsock",
VIR_DOMAIN_DEVICE_VSOCK, vsock) < 0) {
goto cleanup; goto cleanup;
}
virBufferAsprintf(&buf, ",id=%s", vsock->info.alias); virBufferAsprintf(&buf, ",id=%s", vsock->info.alias);
virBufferAsprintf(&buf, ",guest-cid=%u", vsock->guest_cid); virBufferAsprintf(&buf, ",guest-cid=%u", vsock->guest_cid);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册