From: Li Zhang <zhlcindy(a)linux.vnet.ibm.com>
On PPC64 platform, it sets USB option in -machine option. It is
set as the following:
-machine pseries,usb=off
This will disable USB, which avoids creating one USB controller
implicitly in the platform's initialization. Libvirt will add one
USB controller if there is no definition in XML file. Users also can
add one specific USB controller in the XML file as the following:
<controller type='usb' index='0' model='pci-ohci'>
</controller>
Signed-off-by: Li Zhang <zhlcindy(a)linux.vnet.ibm.com>
---
src/qemu/qemu_command.c | 29 ++++++++++++--------
.../qemuxml2argv-machine-core-off.args | 2 +-
.../qemuxml2argv-machine-core-on.args | 2 +-
.../qemuxml2argv-pseries-basic.args | 2 +-
.../qemuxml2argv-pseries-vio-user-assigned.args | 2 +-
.../qemuxml2argvdata/qemuxml2argv-pseries-vio.args | 2 +-
6 files changed, 22 insertions(+), 17 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index ef16d27..6a90ed5 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -4535,6 +4535,8 @@ qemuBuildMachineArgStr(virCommandPtr cmd,
const virDomainDefPtr def,
qemuCapsPtr caps)
{
+
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
/* This should *never* be NULL, since we always provide
* a machine in the capabilities data for QEMU. So this
* check is just here as a safety in case the unexpected
@@ -4542,27 +4544,30 @@ qemuBuildMachineArgStr(virCommandPtr cmd,
if (!def->os.machine)
return 0;
- if (!def->mem.dump_core) {
+ if (!def->mem.dump_core && def->os.arch != VIR_ARCH_PPC64) {
/* if no parameter to the machine type is needed, we still use
* '-M' to keep the most of the compatibility with older versions.
*/
virCommandAddArgList(cmd, "-M", def->os.machine, NULL);
} else {
- if (!qemuCapsGet(caps, QEMU_CAPS_DUMP_GUEST_CORE)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- "%s", _("dump-guest-core is not available
"
- " with this QEMU binary"));
- return -1;
- }
-
/* However, in case there is a parameter to be added, we need to
* use the "-machine" parameter because qemu is not parsing the
* "-M" correctly */
virCommandAddArg(cmd, "-machine");
- virCommandAddArgFormat(cmd,
- "%s,dump-guest-core=%s",
- def->os.machine,
- virDomainMemDumpTypeToString(def->mem.dump_core));
+ virBufferAsprintf(&buf, "%s,usb=off", def->os.machine);
+
+ if (def->mem.dump_core) {
+ if (!qemuCapsGet(caps, QEMU_CAPS_DUMP_GUEST_CORE)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ "%s", _("dump-guest-core is not available
"
+ " with this QEMU binary"));
+ return -1;
+ }
+
+ virBufferAsprintf(&buf, ",dump-guest-core=%s",
+ virDomainMemDumpTypeToString(def->mem.dump_core));
+ }
+ virCommandAddArg(cmd, virBufferContentAndReset(&buf));
}
return 0;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-core-off.args
b/tests/qemuxml2argvdata/qemuxml2argv-machine-core-off.args
index 57c1aa3..d5b3614 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-core-off.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-core-off.args
@@ -1,5 +1,5 @@
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu \
--S -machine pc,dump-guest-core=off -m 214 -smp 1 -nographic \
+-S -machine pc,usb=off,dump-guest-core=off -m 214 -smp 1 -nographic \
-monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb \
-hda /dev/HostVG/QEMUGuest1 -net none -serial \
none -parallel none
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-core-on.args
b/tests/qemuxml2argvdata/qemuxml2argv-machine-core-on.args
index 4e57b21..f7e3ed0 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-core-on.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-core-on.args
@@ -1,5 +1,5 @@
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu \
--S -machine pc,dump-guest-core=on -m 214 -smp 1 -nographic \
+-S -machine pc,usb=off,dump-guest-core=on -m 214 -smp 1 -nographic \
-monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb \
-hda /dev/HostVG/QEMUGuest1 -net none -serial \
none -parallel none
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args
index 745910b..f3bc7e9 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args
@@ -1 +1 @@
-LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu-system-ppc64 -S
-M pseries -m 512 -smp 1 -nographic -nodefconfig -nodefaults -chardev
socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon
chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -usb -chardev
pty,id=charserial0 -device spapr-vty,chardev=charserial0,reg=0x30000000
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu-system-ppc64 -S
-machine pseries,usb=off -m 512 -smp 1 -nographic -nodefconfig -nodefaults -chardev
socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon
chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -usb -chardev
pty,id=charserial0 -device spapr-vty,chardev=charserial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args
index 16a4f10..c997a0a 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args
@@ -1,5 +1,5 @@
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu-system-ppc64 \
--S -M pseries -m 512 -smp 1 -nographic -nodefconfig -nodefaults \
+-S -machine pseries,usb=off -m 512 -smp 1 -nographic -nodefconfig -nodefaults \
-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
-device spapr-vscsi,id=scsi0,reg=0x2000 \
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args
b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args
index 9bbc662..75b8696 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args
@@ -1,5 +1,5 @@
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu-system-ppc64 \
--S -M pseries -m 512 -smp 1 -nographic -nodefconfig -nodefaults \
+-S -machine pseries,usb=off -m 512 -smp 1 -nographic -nodefconfig -nodefaults \
-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
-device spapr-vscsi,id=scsi0,reg=0x2000 \
--
1.7.10.1