diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 836057a4fff3049474ba07ebc7badfd40a97a307..0cee8dcd859724eee5048b4316e1ba814b80c048 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5309,24 +5309,30 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, for (i = 0; i < def->nhostdevs; i++) { virDomainHostdevDefPtr hostdev = def->hostdevs[i]; virDomainHostdevSubsysPtr subsys = &hostdev->source.subsys; + virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi; + virDomainHostdevSubsysMediatedDevPtr mdevsrc = &subsys->u.mdev; g_autofree char *devstr = NULL; + g_autofree char *drvstr = NULL; + g_autofree char *vhostfdName = NULL; + unsigned int bootIndex = hostdev->info->bootIndex; + int vhostfd = -1; - /* USB */ - if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && - subsys->type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) { + if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) + continue; + switch ((virDomainHostdevSubsysType) subsys->type) { + /* USB */ + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: virCommandAddArg(cmd, "-device"); if (!(devstr = qemuBuildUSBHostdevDevStr(def, hostdev, qemuCaps))) return -1; virCommandAddArg(cmd, devstr); - } - /* PCI */ - if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && - subsys->type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) { - unsigned int bootIndex = hostdev->info->bootIndex; + break; + /* PCI */ + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: /* bootNet will be non-0 if boot order was set and no other * net devices were encountered */ @@ -5343,14 +5349,11 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, if (!devstr) return -1; virCommandAddArg(cmd, devstr); - } - /* SCSI */ - if (virHostdevIsSCSIDevice(hostdev)) { - virDomainHostdevSubsysSCSIPtr scsisrc = - &hostdev->source.subsys.u.scsi; - g_autofree char *drvstr = NULL; + break; + /* SCSI */ + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &scsisrc->u.iscsi; @@ -5372,15 +5375,13 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, if (!(devstr = qemuBuildSCSIHostdevDevStr(def, hostdev))) return -1; virCommandAddArg(cmd, devstr); - } + + break; /* SCSI_host */ - if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && - subsys->type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST) { + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: if (hostdev->source.subsys.u.scsi_host.protocol == VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_VHOST) { - g_autofree char *vhostfdName = NULL; - int vhostfd = -1; if (virSCSIVHostOpenVhostSCSI(&vhostfd) < 0) return -1; @@ -5399,12 +5400,11 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, virCommandAddArg(cmd, devstr); } - } - /* MDEV */ - if (virHostdevIsMdevDevice(hostdev)) { - virDomainHostdevSubsysMediatedDevPtr mdevsrc = &subsys->u.mdev; + break; + /* MDEV */ + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: switch ((virMediatedDeviceModelType) mdevsrc->model) { case VIR_MDEV_MODEL_TYPE_VFIO_PCI: case VIR_MDEV_MODEL_TYPE_VFIO_CCW: @@ -5422,6 +5422,11 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, qemuBuildHostdevMediatedDevStr(def, hostdev, qemuCaps))) return -1; virCommandAddArg(cmd, devstr); + + break; + + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST: + break; } }