From nobody Thu May 2 14:19:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1507120745245516.5475281680144; Wed, 4 Oct 2017 05:39:05 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4EE244A702; Wed, 4 Oct 2017 12:39:04 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2A4A862689; Wed, 4 Oct 2017 12:39:04 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id E19E162CED; Wed, 4 Oct 2017 12:39:03 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v94CKF0R014642 for ; Wed, 4 Oct 2017 08:20:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 08D6662461; Wed, 4 Oct 2017 12:20:15 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id E975D62690; Wed, 4 Oct 2017 12:20:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 4EE244A702 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 4 Oct 2017 14:20:02 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH 1/2] qemu: command: Separate validation from command line building for -drive X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Wed, 04 Oct 2017 12:39:04 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Remove validation code into a separate function so that it's not interleaved with actual building of the command line. --- src/qemu/qemu_command.c | 287 +++++++++++++++++++++++++++-----------------= ---- 1 file changed, 161 insertions(+), 126 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 4f141e0ac..698fef58d 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1481,24 +1481,16 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, } -char * -qemuBuildDriveStr(virDomainDiskDefPtr disk, - virQEMUDriverConfigPtr cfg, - bool bootable, - virQEMUCapsPtr qemuCaps) +static int +qemuBuildDriveStrValidate(virDomainDiskDefPtr disk, + virQEMUCapsPtr qemuCaps, + const char *bus, + int idx) { - virBuffer opt =3D VIR_BUFFER_INITIALIZER; - const char *bus =3D virDomainDiskQEMUBusTypeToString(disk->bus); - const char *trans =3D - virDomainDiskGeometryTransTypeToString(disk->geometry.trans); - int idx =3D virDiskNameToIndex(disk->dst); - int busid =3D -1, unitid =3D -1; - bool emitDeviceSyntax =3D qemuDiskBusNeedsDeviceArg(disk->bus); - if (idx < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("unsupported disk type '%s'"), disk->dst); - goto error; + return -1; } switch (disk->bus) { @@ -1506,7 +1498,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, if (disk->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("unexpected address type for scsi disk")); - goto error; + return -1; } /* Setting bus=3D attr for SCSI drives, causes a controller @@ -1515,53 +1507,173 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, if (disk->info.addr.drive.bus !=3D 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("SCSI controller only supports 1 bus")); - goto error; + return -1; } - busid =3D disk->info.addr.drive.controller; - unitid =3D disk->info.addr.drive.unit; break; case VIR_DOMAIN_DISK_BUS_IDE: if (disk->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("unexpected address type for ide disk")); - goto error; + return -1; } /* We can only have 1 IDE controller (currently) */ if (disk->info.addr.drive.controller !=3D 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Only 1 %s controller is supported"), bus); - goto error; + return -1; } - busid =3D disk->info.addr.drive.bus; - unitid =3D disk->info.addr.drive.unit; break; case VIR_DOMAIN_DISK_BUS_FDC: if (disk->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("unexpected address type for fdc disk")); - goto error; + return -1; } /* We can only have 1 FDC controller (currently) */ if (disk->info.addr.drive.controller !=3D 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Only 1 %s controller is supported"), bus); - goto error; + return -1; } /* We can only have 1 FDC bus (currently) */ if (disk->info.addr.drive.bus !=3D 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Only 1 %s bus is supported"), bus); - goto error; + return -1; } if (disk->info.addr.drive.target !=3D 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("target must be 0 for controller fdc")); - goto error; + return -1; } + break; + + case VIR_DOMAIN_DISK_BUS_VIRTIO: + case VIR_DOMAIN_DISK_BUS_XEN: + case VIR_DOMAIN_DISK_BUS_SD: + break; + } + + if (disk->src->readonly && + disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK) { + if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_IDE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("readonly ide disks are not supported")); + return -1; + } + + if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SATA) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("readonly sata disks are not supported")); + return -1; + } + } + + if (disk->transient) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("transient disks not supported yet")); + return -1; + } + + if (disk->serial && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_SERIAL)) { + if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SCSI && + disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_LUN) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("scsi-block 'lun' devices do not support the " + "serial property")); + return -1; + } + } + + if (disk->cachemode =3D=3D VIR_DOMAIN_DISK_CACHE_DIRECTSYNC && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disk cache mode 'directsync' is not supported by= this QEMU")); + return -1; + } + + if (disk->cachemode =3D=3D VIR_DOMAIN_DISK_CACHE_UNSAFE && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_UNSAFE)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disk cache mode 'unsafe' is not supported by thi= s QEMU")); + return -1; + } + + if (disk->iomode =3D=3D VIR_DOMAIN_DISK_IO_NATIVE && + disk->cachemode !=3D VIR_DOMAIN_DISK_CACHE_DIRECTSYNC && + disk->cachemode !=3D VIR_DOMAIN_DISK_CACHE_DISABLE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("native I/O needs either no disk cache " + "or directsync cache mode, QEMU will fallback " + "to aio=3Dthreads")); + return -1; + } + + if (disk->copy_on_read && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_COPY_ON_READ)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("copy_on_read is not supported by this QEMU binar= y")); + return -1; + } + + if (disk->discard && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_DISCARD)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("discard is not supported by this QEMU binary")); + return -1; + } + + if (disk->detect_zeroes && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_DETECT_ZEROES)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("detect_zeroes is not supported by this QEMU bina= ry")); + return -1; + } + + if (disk->iomode && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_AIO)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disk aio mode not supported with this QEMU binar= y")); + return -1; + } + + return 0; +} + + +char * +qemuBuildDriveStr(virDomainDiskDefPtr disk, + virQEMUDriverConfigPtr cfg, + bool bootable, + virQEMUCapsPtr qemuCaps) +{ + virBuffer opt =3D VIR_BUFFER_INITIALIZER; + const char *bus =3D virDomainDiskQEMUBusTypeToString(disk->bus); + const char *trans =3D + virDomainDiskGeometryTransTypeToString(disk->geometry.trans); + int idx =3D virDiskNameToIndex(disk->dst); + int busid =3D -1, unitid =3D -1; + bool emitDeviceSyntax =3D qemuDiskBusNeedsDeviceArg(disk->bus); + + if (qemuBuildDriveStrValidate(disk, qemuCaps, bus, idx) < 0) + goto error; + + switch (disk->bus) { + case VIR_DOMAIN_DISK_BUS_SCSI: + busid =3D disk->info.addr.drive.controller; unitid =3D disk->info.addr.drive.unit; + break; + case VIR_DOMAIN_DISK_BUS_IDE: + busid =3D disk->info.addr.drive.bus; + unitid =3D disk->info.addr.drive.unit; + break; + + case VIR_DOMAIN_DISK_BUS_FDC: + unitid =3D disk->info.addr.drive.unit; break; case VIR_DOMAIN_DISK_BUS_VIRTIO: @@ -1618,26 +1730,8 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_LUN) && disk->bus !=3D VIR_DOMAIN_DISK_BUS_IDE) virBufferAddLit(&opt, ",boot=3Don"); - if (disk->src->readonly) { - if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK) { - if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_IDE) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("readonly ide disks are not supported")); - goto error; - } - if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SATA) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("readonly sata disks are not supported")); - goto error; - } - } + if (disk->src->readonly) virBufferAddLit(&opt, ",readonly=3Don"); - } - if (disk->transient) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("transient disks not supported yet")); - goto error; - } /* generate geometry command string */ if (disk->geometry.cylinders > 0 && @@ -1657,95 +1751,43 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_SERIAL)) { if (qemuSafeSerialParamValue(disk->serial) < 0) goto error; - if (disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_SCSI && - disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_LUN) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("scsi-block 'lun' devices do not support the " - "serial property")); - goto error; - } virBufferAddLit(&opt, ",serial=3D"); virBufferEscape(&opt, '\\', " ", "%s", disk->serial); } if (disk->cachemode) { - const char *mode =3D NULL; - - mode =3D qemuDiskCacheV2TypeToString(disk->cachemode); - - if (disk->cachemode =3D=3D VIR_DOMAIN_DISK_CACHE_DIRECTSYNC && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("disk cache mode 'directsync' is not " - "supported by this QEMU")); - goto error; - } else if (disk->cachemode =3D=3D VIR_DOMAIN_DISK_CACHE_UNSAFE && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_UNSAFE)= ) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("disk cache mode 'unsafe' is not " - "supported by this QEMU")); - goto error; - } - - if (disk->iomode =3D=3D VIR_DOMAIN_DISK_IO_NATIVE && - disk->cachemode !=3D VIR_DOMAIN_DISK_CACHE_DIRECTSYNC && - disk->cachemode !=3D VIR_DOMAIN_DISK_CACHE_DISABLE) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("native I/O needs either no disk cache " - "or directsync cache mode, QEMU will fallback= " - "to aio=3Dthreads")); - goto error; - } - - virBufferAsprintf(&opt, ",cache=3D%s", mode); + virBufferAsprintf(&opt, ",cache=3D%s", + qemuDiskCacheV2TypeToString(disk->cachemode)); } else if (disk->src->shared && !disk->src->readonly) { virBufferAddLit(&opt, ",cache=3Dnone"); } if (disk->copy_on_read) { - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_COPY_ON_READ)) { - virBufferAsprintf(&opt, ",copy-on-read=3D%s", - virTristateSwitchTypeToString(disk->copy_on_= read)); - } else { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("copy_on_read is not supported by this QEMU b= inary")); - goto error; - } + virBufferAsprintf(&opt, ",copy-on-read=3D%s", + virTristateSwitchTypeToString(disk->copy_on_read= )); } if (disk->discard) { - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_DISCARD)) { - virBufferAsprintf(&opt, ",discard=3D%s", - virDomainDiskDiscardTypeToString(disk->disca= rd)); - } else { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("discard is not supported by this QEMU binary= ")); - goto error; - } + virBufferAsprintf(&opt, ",discard=3D%s", + virDomainDiskDiscardTypeToString(disk->discard)); } if (disk->detect_zeroes) { - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_DETECT_ZEROES)) { - int detect_zeroes =3D disk->detect_zeroes; - - /* - * As a convenience syntax, if discards are ignored and - * zero detection is set to 'unmap', then simply behave - * like zero detection is set to 'on'. But don't change - * it in the XML for easier adjustments. This behaviour - * is documented. - */ - if (disk->discard !=3D VIR_DOMAIN_DISK_DISCARD_UNMAP && - detect_zeroes =3D=3D VIR_DOMAIN_DISK_DETECT_ZEROES_UNMAP) - detect_zeroes =3D VIR_DOMAIN_DISK_DETECT_ZEROES_ON; + int detect_zeroes =3D disk->detect_zeroes; - virBufferAsprintf(&opt, ",detect-zeroes=3D%s", - virDomainDiskDetectZeroesTypeToString(detect= _zeroes)); - } else { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("detect_zeroes is not supported by this QEMU = binary")); - goto error; - } + /* + * As a convenience syntax, if discards are ignored and + * zero detection is set to 'unmap', then simply behave + * like zero detection is set to 'on'. But don't change + * it in the XML for easier adjustments. This behaviour + * is documented. + */ + if (disk->discard !=3D VIR_DOMAIN_DISK_DISCARD_UNMAP && + detect_zeroes =3D=3D VIR_DOMAIN_DISK_DETECT_ZEROES_UNMAP) + detect_zeroes =3D VIR_DOMAIN_DISK_DETECT_ZEROES_ON; + + virBufferAsprintf(&opt, ",detect-zeroes=3D%s", + virDomainDiskDetectZeroesTypeToString(detect_zer= oes)); } if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MONITOR_JSON)) { @@ -1774,15 +1816,8 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, } if (disk->iomode) { - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_AIO)) { - virBufferAsprintf(&opt, ",aio=3D%s", - virDomainDiskIoTypeToString(disk->iomode)); - } else { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("disk aio mode not supported with this " - "QEMU binary")); - goto error; - } + virBufferAsprintf(&opt, ",aio=3D%s", + virDomainDiskIoTypeToString(disk->iomode)); } if (qemuCheckDiskConfigBlkdeviotune(disk, qemuCaps) < 0) --=20 2.14.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 14:19:23 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1507120727994315.9183620537773; Wed, 4 Oct 2017 05:38:47 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DFA7AC0587C2; Wed, 4 Oct 2017 12:38:46 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BC70860487; Wed, 4 Oct 2017 12:38:46 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 867C118355C4; Wed, 4 Oct 2017 12:38:46 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v94CKGDO014647 for ; Wed, 4 Oct 2017 08:20:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 583F762461; Wed, 4 Oct 2017 12:20:16 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 55B5062697; Wed, 4 Oct 2017 12:20:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com DFA7AC0587C2 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Peter Krempa To: libvir-list@redhat.com Date: Wed, 4 Oct 2017 14:20:03 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH 2/2] qemu: command: Move PPC fdc check to domain validation X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 04 Oct 2017 12:38:47 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Apart from not littering the command line generator, the added benefit is that new configs with a FDC will be rejected at define stage. --- src/qemu/qemu_command.c | 8 -------- src/qemu/qemu_process.c | 11 ++++++++++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 698fef58d..95f99d4d9 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2247,14 +2247,6 @@ qemuBuildDiskDriveCommandLine(virCommandPtr cmd, qemuDomainSecretInfoPtr secinfo =3D diskPriv->secinfo; qemuDomainSecretInfoPtr encinfo =3D diskPriv->encinfo; - /* PowerPC pseries based VMs do not support floppy device */ - if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY && - qemuDomainIsPSeries(def)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("PowerPC pseries machines do not support flop= py device")); - return -1; - } - if (disk->info.bootIndex) { bootindex =3D disk->info.bootIndex; } else { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index bde3ba462..d8b721282 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4586,7 +4586,8 @@ qemuProcessStartValidateDisks(virDomainObjPtr vm, size_t i; for (i =3D 0; i < vm->def->ndisks; i++) { - virStorageSourcePtr src =3D vm->def->disks[i]->src; + virDomainDiskDefPtr disk =3D vm->def->disks[i]; + virStorageSourcePtr src =3D disk->src; /* This is a best effort check as we can only check if the command * option exists, but we cannot determine whether the running QEMU @@ -4599,6 +4600,14 @@ qemuProcessStartValidateDisks(virDomainObjPtr vm, "QEMU binary")); return -1; } + + /* PowerPC pseries based VMs do not support floppy device */ + if (disk->device =3D=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY && + qemuDomainIsPSeries(vm->def)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("PowerPC pseries machines do not support flop= py device")); + return -1; + } } return 0; --=20 2.14.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list