From ec1c34498ba37e534bf7aac0b53e3a886c74ecc6 Mon Sep 17 00:00:00 2001 From: Shivaprasad G Bhat Date: Fri, 22 Nov 2013 22:57:25 +0530 Subject: [PATCH] virsh domxml-from-native to treat SCSI as the bus type for pseries by default The bus type IDE being enum Zero, the bus type on pseries system appears as IDE for all the -hda/-cdrom and for disk drives with if="none" type. Pseries platform needs this to appear as SCSI instead of IDE. The ide being not supported, the explicit requests for ide devices will return an error. Signed-off-by: Shivaprasad G Bhat --- src/qemu/qemu_command.c | 25 ++++++++++-- tests/qemuargv2xmltest.c | 1 + .../qemuxml2argv-pseries-disk.args | 5 +++ .../qemuxml2argv-pseries-disk.xml | 40 +++++++++++++++++++ 4 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 8dc7e43e3a..01fe45b8b1 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10032,6 +10032,7 @@ error: static virDomainDiskDefPtr qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt, const char *val, + virDomainDefPtr dom, int nvirtiodisk, bool old_style_ceph_args) { @@ -10055,7 +10056,11 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt, if (VIR_ALLOC(def) < 0) goto cleanup; - def->bus = VIR_DOMAIN_DISK_BUS_IDE; + if (((dom->os.arch == VIR_ARCH_PPC64) && + dom->os.machine && STREQ(dom->os.machine, "pseries"))) + def->bus = VIR_DOMAIN_DISK_BUS_SCSI; + else + def->bus = VIR_DOMAIN_DISK_BUS_IDE; def->device = VIR_DOMAIN_DISK_DEVICE_DISK; def->type = VIR_DOMAIN_DISK_TYPE_FILE; @@ -10140,9 +10145,15 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt, def->type = VIR_DOMAIN_DISK_TYPE_FILE; } } else if (STREQ(keywords[i], "if")) { - if (STREQ(values[i], "ide")) + if (STREQ(values[i], "ide")) { def->bus = VIR_DOMAIN_DISK_BUS_IDE; - else if (STREQ(values[i], "scsi")) + if (((dom->os.arch == VIR_ARCH_PPC64) && + dom->os.machine && STREQ(dom->os.machine, "pseries"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("pseries systems do not support ide devices '%s'"), val); + goto error; + } + } else if (STREQ(values[i], "scsi")) def->bus = VIR_DOMAIN_DISK_BUS_SCSI; else if (STREQ(values[i], "virtio")) def->bus = VIR_DOMAIN_DISK_BUS_VIRTIO; @@ -11368,6 +11379,9 @@ qemuParseCommandLine(virCapsPtr qemuCaps, disk->type = VIR_DOMAIN_DISK_TYPE_FILE; if (STREQ(arg, "-cdrom")) { disk->device = VIR_DOMAIN_DISK_DEVICE_CDROM; + if (((def->os.arch == VIR_ARCH_PPC64) && + def->os.machine && STREQ(def->os.machine, "pseries"))) + disk->bus = VIR_DOMAIN_DISK_BUS_SCSI; if (VIR_STRDUP(disk->dst, "hdc") < 0) goto error; disk->readonly = true; @@ -11381,6 +11395,9 @@ qemuParseCommandLine(virCapsPtr qemuCaps, disk->bus = VIR_DOMAIN_DISK_BUS_IDE; else disk->bus = VIR_DOMAIN_DISK_BUS_SCSI; + if (((def->os.arch == VIR_ARCH_PPC64) && + def->os.machine && STREQ(def->os.machine, "pseries"))) + disk->bus = VIR_DOMAIN_DISK_BUS_SCSI; } if (VIR_STRDUP(disk->dst, arg + 1) < 0) goto error; @@ -11672,7 +11689,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps, } } else if (STREQ(arg, "-drive")) { WANT_VALUE(); - if (!(disk = qemuParseCommandLineDisk(xmlopt, val, + if (!(disk = qemuParseCommandLineDisk(xmlopt, val, def, nvirtiodisk, ceph_args != NULL))) goto error; diff --git a/tests/qemuargv2xmltest.c b/tests/qemuargv2xmltest.c index 6dd8bb0e10..0bf4c37d96 100644 --- a/tests/qemuargv2xmltest.c +++ b/tests/qemuargv2xmltest.c @@ -249,6 +249,7 @@ mymain(void) DO_TEST("hyperv"); DO_TEST("pseries-nvram"); + DO_TEST("pseries-disk"); DO_TEST("nosharepages"); diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.args new file mode 100644 index 0000000000..5fc0938c9f --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.args @@ -0,0 +1,5 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-ppc64 \ +-S -M pseries -m 512 -smp 1 \ +-no-acpi -boot c -usb \ +-boot c -hda /dev/HostVG/QEMUGuest1 -cdrom /root/boot.iso diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml new file mode 100644 index 0000000000..dbbd6aabf4 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-disk.xml @@ -0,0 +1,40 @@ + + QEMUGuest1 + 87eedafe-eedc-4336-8130-ed9fe5dc90c8 + 524288 + 524288 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu-system-ppc64 + + + + +
+ + + + + + +
+ + + + + + + + + +