[libvirt] [PATCH 1/2] Caps: Disable floppy disk for PowerPC VM
Ján Tomko
jtomko at redhat.com
Tue Jul 28 11:49:20 UTC 2015
On Fri, Jul 24, 2015 at 03:30:14PM -0400, Kothapally Madhu Pavan wrote:
> PowerPC pseries based VMs do not support a floppy disk controller.
> This prohibits libvirt from adding floppy disk for a PowerPC pseries VM.
>
> Signed-off-by: Kothapally Madhu Pavan <kmp at linux.vnet.ibm.com>
> ---
> src/conf/domain_conf.c | 19 +++++++++++++++----
> src/qemu/qemu_capabilities.c | 15 +++++++++++----
> 2 files changed, 26 insertions(+), 8 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 73ac537..b9f35b4 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -6540,7 +6540,9 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
> virHashTablePtr bootHash,
> virSecurityLabelDefPtr* vmSeclabels,
> int nvmSeclabels,
> - unsigned int flags)
> + unsigned int flags,
> + virArch arch,
> + const char *machine)
> {
> virDomainDiskDefPtr def;
> xmlNodePtr sourceNode = NULL;
> @@ -7165,6 +7167,12 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
> }
> } else {
> if (def->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
> + /* PowerPC pseries based VMs do not support floppy device */
> + if (ARCH_IS_PPC64(arch) && STRPREFIX(machine, "pseries")) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> + _("PowerPC pseries machines do not support floppy device"));
> + goto error;
> + }
> def->bus = VIR_DOMAIN_DISK_BUS_FDC;
> } else if (!(flags & VIR_DOMAIN_DEF_PARSE_DISK_SOURCE)) {
> if (STRPREFIX(target, "hd"))
> @@ -12375,7 +12383,8 @@ virDomainDeviceDefParse(const char *xmlStr,
> if (!(dev->data.disk = virDomainDiskDefParseXML(xmlopt, node, ctxt,
> NULL, def->seclabels,
> def->nseclabels,
> - flags)))
> + flags, def->os.arch,
> + def->os.machine)))
The architecture and machine type do not affect parsing of the disk.
If we really want to forbid even parsing a domain with a floppy,
this would better be done somewhere in the virDomainDefPostParse
functions.
But I think we should happily parse this domain and only report an error
on startup, so all the domain_conf.c changes can be dropped.
> goto error;
> break;
> case VIR_DOMAIN_DEVICE_LEASE:
> @@ -12519,7 +12528,8 @@ virDomainDiskDefSourceParse(const char *xmlStr,
> if (!(disk = virDomainDiskDefParseXML(xmlopt, node, ctxt,
> NULL, def->seclabels,
> def->nseclabels,
> - flags)))
> + flags, def->os.arch,
> + def->os.machine)))
> goto cleanup;
>
> ret = disk->src;
> @@ -15539,7 +15549,8 @@ virDomainDefParseXML(xmlDocPtr xml,
> bootHash,
> def->seclabels,
> def->nseclabels,
> - flags);
> + flags, def->os.arch,
> + def->os.machine);
> if (!disk)
> goto error;
>
The rest looks good.
Jan
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index d8cb32d..e304473 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -3919,25 +3919,32 @@ virQEMUCapsFillDomainOSCaps(virQEMUCapsPtr qemuCaps,
>
> static int
> virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps,
> + const char *machine,
> virDomainCapsDeviceDiskPtr disk)
> {
> disk->device.supported = true;
> /* QEMU supports all of these */
> VIR_DOMAIN_CAPS_ENUM_SET(disk->diskDevice,
> VIR_DOMAIN_DISK_DEVICE_DISK,
> - VIR_DOMAIN_DISK_DEVICE_CDROM,
> - VIR_DOMAIN_DISK_DEVICE_FLOPPY);
> + VIR_DOMAIN_DISK_DEVICE_CDROM);
> +
> + /* PowerPC pseries based VMs do not support floppy device */
> + if (!(ARCH_IS_PPC64(qemuCaps->arch) && STRPREFIX(machine, "pseries")))
> + VIR_DOMAIN_CAPS_ENUM_SET(disk->diskDevice, VIR_DOMAIN_DISK_DEVICE_FLOPPY);
>
> if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_BLK_SG_IO))
> VIR_DOMAIN_CAPS_ENUM_SET(disk->diskDevice, VIR_DOMAIN_DISK_DEVICE_LUN);
>
> VIR_DOMAIN_CAPS_ENUM_SET(disk->bus,
> VIR_DOMAIN_DISK_BUS_IDE,
> - VIR_DOMAIN_DISK_BUS_FDC,
> VIR_DOMAIN_DISK_BUS_SCSI,
> VIR_DOMAIN_DISK_BUS_VIRTIO,
> /* VIR_DOMAIN_DISK_BUS_SD */);
>
> + /* PowerPC pseries based VMs do not support floppy device */
> + if (!(ARCH_IS_PPC64(qemuCaps->arch) && STRPREFIX(machine, "pseries")))
> + VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_FDC);
> +
> if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_STORAGE))
> VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_USB);
> return 0;
> @@ -4008,7 +4015,7 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
>
> if (virQEMUCapsFillDomainOSCaps(qemuCaps, os,
> loader, nloader) < 0 ||
> - virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, disk) < 0 ||
> + virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, domCaps->machine, disk) < 0 ||
> virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev) < 0)
> return -1;
> return 0;
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150728/2b603adc/attachment-0001.sig>
More information about the libvir-list
mailing list