PowerPC pseries based VMs do not support a floppy disk controller.
This prohibits libvirt from creating qemu command with floppy device.
Signed-off-by: Kothapally Madhu Pavan <kmp(a)linux.vnet.ibm.com>
---
src/qemu/qemu_command.c | 47 +++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 45 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 42906a8..93f84e2 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -9486,6 +9486,12 @@ qemuBuildCommandLine(virConnectPtr conn,
boot[i] = 'd';
break;
case VIR_DOMAIN_BOOT_FLOPPY:
+ /* PowerPC pseries based VMs do not support floppy device */
+ if (ARCH_IS_PPC64(def->os.arch) &&
STRPREFIX(def->os.machine, "pseries")) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("PowerPC pseries machines do not support floppy
device"));
+ goto error;
+ }
boot[i] = 'a';
break;
case VIR_DOMAIN_BOOT_DISK:
@@ -9769,6 +9775,12 @@ qemuBuildCommandLine(virConnectPtr conn,
bootCD = 0;
break;
case VIR_DOMAIN_DISK_DEVICE_FLOPPY:
+ /* PowerPC pseries based VMs do not support floppy device */
+ if (ARCH_IS_PPC64(def->os.arch) &&
STRPREFIX(def->os.machine, "pseries")) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("PowerPC pseries machines do not support floppy
device"));
+ goto error;
+ }
bootindex = bootFloppy;
bootFloppy = 0;
break;
@@ -9812,6 +9824,12 @@ qemuBuildCommandLine(virConnectPtr conn,
if (withDeviceArg) {
if (disk->bus == VIR_DOMAIN_DISK_BUS_FDC) {
+ /* PowerPC pseries based VMs do not support floppy device */
+ if (ARCH_IS_PPC64(def->os.arch) &&
STRPREFIX(def->os.machine, "pseries")) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("PowerPC pseries machines do not support
floppy device"));
+ goto error;
+ }
if (virAsprintf(&optstr, "drive%c=drive-%s",
disk->info.addr.drive.unit ? 'B' :
'A',
disk->info.alias) < 0)
@@ -9854,6 +9872,12 @@ qemuBuildCommandLine(virConnectPtr conn,
/* Newer Q35 machine types require an explicit FDC controller */
virBufferTrim(&fdc_opts, ",", -1);
if ((fdc_opts_str = virBufferContentAndReset(&fdc_opts))) {
+ /* PowerPC pseries based VMs do not support floppy device */
+ if (ARCH_IS_PPC64(def->os.arch) && STRPREFIX(def->os.machine,
"pseries")) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("PowerPC pseries machines do not support floppy
device"));
+ goto error;
+ }
virCommandAddArg(cmd, "-device");
virCommandAddArgFormat(cmd, "isa-fdc,%s", fdc_opts_str);
VIR_FREE(fdc_opts_str);
@@ -9918,10 +9942,17 @@ qemuBuildCommandLine(virConnectPtr conn,
_("cannot create virtual FAT disks in read-write
mode"));
goto error;
}
- if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY)
+ if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
+ /* PowerPC pseries based VMs do not support floppy device */
+ if (ARCH_IS_PPC64(def->os.arch) &&
STRPREFIX(def->os.machine, "pseries")) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("PowerPC pseries machines do not support
floppy device"));
+ goto error;
+ }
fmt = "fat:floppy:%s";
- else
+ } else {
fmt = "fat:%s";
+ }
if (virAsprintf(&file, fmt, disk->src) < 0)
goto error;
@@ -11674,6 +11705,12 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
def->device = VIR_DOMAIN_DISK_DEVICE_CDROM;
def->src->readonly = true;
} else if (STREQ(values[i], "floppy")) {
+ /* PowerPC pseries based VMs do not support floppy device */
+ if (ARCH_IS_PPC64(dom->os.arch) &&
STRPREFIX(dom->os.machine, "pseries")) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("PowerPC pseries machines do not support floppy
device"));
+ goto error;
+ }
def->device = VIR_DOMAIN_DISK_DEVICE_FLOPPY;
}
} else if (STREQ(keywords[i], "format")) {
@@ -12908,6 +12945,12 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
disk->src->readonly = true;
} else {
if (STRPREFIX(arg, "-fd")) {
+ /* PowerPC pseries based VMs do not support floppy device */
+ if (ARCH_IS_PPC64(def->os.arch) &&
STRPREFIX(def->os.machine, "pseries")) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("PowerPC pseries machines do not support
floppy device"));
+ goto error;
+ }
disk->device = VIR_DOMAIN_DISK_DEVICE_FLOPPY;
disk->bus = VIR_DOMAIN_DISK_BUS_FDC;
} else {