diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 0a7b0e20e0330e3fffe39bde2ebc4ccf669844bb..e9c53da96a00fb066e4d08b17bfb6e8b6d980537 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -6546,7 +6546,9 @@ qemu-kvm -net nic,model=? /dev/null
since 1.0.2, isa-serial
(usable
with x86 guests), usb-serial
(usable whenever USB support
is available) and pci-serial
(usable whenever PCI support
- is available).
+ is available); since 3.10.0,
+ spapr-vio-serial
(usable with ppc64/pseries guests)
+ is available as well.
@@ -6556,7 +6558,9 @@ qemu-kvm -net nic,model=? /dev/null
isa-serial
(usable with the isa-serial
target
type); usb-serial
(usable with the usb-serial
target type); pci-serial
- (usable with the pci-serial
target type).
+ (usable with the pci-serial
target type);
+ spapr-vty
(usable with the spapr-vio-serial
+ target type).
@@ -6568,8 +6572,9 @@ qemu-kvm -net nic,model=? /dev/null
All of the target types support configuring the guest-visible device
address as documented above; more
specifically, acceptable address types are isa
(for
- isa-serial
), usb
(for usb-serial
)
- and pci
(for pci-serial
).
+ isa-serial
), usb
(for usb-serial
),
+ pci
(for pci-serial
) and spapr-vio
+ (for spapr-vio-serial
).
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index fbba092d1d2a3101f873054562a0f77a5b0aa2d4..1f6d25e1bf34ea6da4104fc28ddff508a6450355 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -3585,6 +3585,7 @@
isa-serial
usb-serial
pci-serial
+ spapr-vio-serial
@@ -3596,6 +3597,7 @@
isa-serial
usb-serial
pci-serial
+ spapr-vty
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 5df5f3aaec856d78b26935012340cc1e86dca3db..62d54560eb544a75013ae883823711e523ab3db9 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -451,7 +451,9 @@ VIR_ENUM_IMPL(virDomainChrSerialTarget,
"none",
"isa-serial",
"usb-serial",
- "pci-serial")
+ "pci-serial",
+ "spapr-vio-serial",
+);
VIR_ENUM_IMPL(virDomainChrChannelTarget,
VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST,
@@ -478,6 +480,7 @@ VIR_ENUM_IMPL(virDomainChrSerialTargetModel,
"isa-serial",
"usb-serial",
"pci-serial",
+ "spapr-vty",
);
VIR_ENUM_IMPL(virDomainChrDevice, VIR_DOMAIN_CHR_DEVICE_TYPE_LAST,
@@ -4057,6 +4060,7 @@ virDomainDefAddConsoleCompat(virDomainDefPtr def)
switch ((virDomainChrSerialTargetType) def->serials[0]->targetType) {
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO:
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE: {
/* Create a stub console to match the serial port.
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 7895dea55ecb40638e84d7d7ba09746aefef3e0e..35f5c63c2fe5322478f9ba2465a9d6465a2d82eb 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1081,6 +1081,7 @@ typedef enum {
VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA,
VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB,
VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI,
+ VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO,
VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST
} virDomainChrSerialTargetType;
@@ -1113,6 +1114,7 @@ typedef enum {
VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL,
VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_USB_SERIAL,
VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL,
+ VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY,
VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_LAST
} virDomainChrSerialTargetModel;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 8249c6237ee5cce028a41f6b0b4144dc641790d8..fecf5ce5f2c86be28729abaa6575eee4fd4cb7bb 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -9231,6 +9231,8 @@ qemuChrSerialTargetModelToCaps(virDomainChrSerialTargetModel targetModel)
return QEMU_CAPS_DEVICE_USB_SERIAL;
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL:
return QEMU_CAPS_DEVICE_PCI_SERIAL;
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY:
+ return QEMU_CAPS_DEVICE_SPAPR_VTY;
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL:
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE:
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_LAST:
@@ -10383,52 +10385,39 @@ qemuBuildSerialChrDeviceStr(char **deviceStr,
virBuffer cmd = VIR_BUFFER_INITIALIZER;
virQEMUCapsFlags caps;
- if (qemuDomainIsPSeries(def)) {
- if (serial->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
- serial->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) {
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_SPAPR_VTY)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("spapr-vty not supported in this QEMU binary"));
- goto error;
- }
-
- virBufferAsprintf(&cmd, "spapr-vty,chardev=char%s",
- serial->info.alias);
- }
- } else {
- switch ((virDomainChrSerialTargetModel) serial->targetModel) {
- case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_USB_SERIAL:
- case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL:
-
- caps = qemuChrSerialTargetModelToCaps(serial->targetModel);
-
- if (caps && !virQEMUCapsGet(qemuCaps, caps)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("'%s' is not supported in this QEMU binary"),
- virDomainChrSerialTargetModelTypeToString(serial->targetModel));
- goto error;
- }
- break;
+ switch ((virDomainChrSerialTargetModel) serial->targetModel) {
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_USB_SERIAL:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY:
- case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL:
- break;
+ caps = qemuChrSerialTargetModelToCaps(serial->targetModel);
- case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE:
- case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_LAST:
- /* Except from _LAST, which is just a guard value and will never
- * be used, all of the above are platform devices, which means
- * qemuBuildSerialCommandLine() will have taken the appropriate
- * branch and we will not have ended up here. */
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Invalid target model for serial device"));
+ if (caps && !virQEMUCapsGet(qemuCaps, caps)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("'%s' is not supported in this QEMU binary"),
+ virDomainChrSerialTargetModelTypeToString(serial->targetModel));
goto error;
}
+ break;
- virBufferAsprintf(&cmd, "%s,chardev=char%s,id=%s",
- virDomainChrSerialTargetModelTypeToString(serial->targetModel),
- serial->info.alias, serial->info.alias);
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL:
+ break;
+
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_LAST:
+ /* Except from _LAST, which is just a guard value and will never
+ * be used, all of the above are platform devices, which means
+ * qemuBuildSerialCommandLine() will have taken the appropriate
+ * branch and we will not have ended up here. */
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Invalid target model for serial device"));
+ goto error;
}
+ virBufferAsprintf(&cmd, "%s,chardev=char%s,id=%s",
+ virDomainChrSerialTargetModelTypeToString(serial->targetModel),
+ serial->info.alias, serial->info.alias);
+
if (qemuBuildDeviceAddressStr(&cmd, def, &serial->info, qemuCaps) < 0)
goto error;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 0b033f4968e9dffd4ce602edc50672f7ffcdd0b8..d8ab6ed525e6934825c32648ec8f921cab1f1916 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -3470,6 +3470,8 @@ qemuDomainChrSerialTargetTypeToAddressType(int targetType)
return VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB;
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI:
return VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO:
+ return VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST:
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE:
break;
@@ -3489,6 +3491,8 @@ qemuDomainChrSerialTargetModelToTargetType(int targetModel)
return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB;
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL:
return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI;
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY:
+ return VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO;
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE:
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_LAST:
break;
@@ -3499,8 +3503,7 @@ qemuDomainChrSerialTargetModelToTargetType(int targetModel)
static int
-qemuDomainChrTargetDefValidate(const virDomainDef *def,
- const virDomainChrDef *chr)
+qemuDomainChrTargetDefValidate(const virDomainChrDef *chr)
{
int expected;
@@ -3512,11 +3515,7 @@ qemuDomainChrTargetDefValidate(const virDomainDef *def,
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA:
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB:
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI:
-
- /* Hack required until we have a proper type for pSeries
- * serial consoles */
- if (qemuDomainIsPSeries(def))
- return 0;
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO:
expected = qemuDomainChrSerialTargetTypeToAddressType(chr->targetType);
@@ -3540,6 +3539,7 @@ qemuDomainChrTargetDefValidate(const virDomainDef *def,
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL:
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_USB_SERIAL:
case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY:
expected = qemuDomainChrSerialTargetModelToTargetType(chr->targetModel);
@@ -3577,7 +3577,7 @@ qemuDomainChrDefValidate(const virDomainChrDef *dev,
if (qemuDomainChrSourceDefValidate(dev->source) < 0)
return -1;
- if (qemuDomainChrTargetDefValidate(def, dev) < 0)
+ if (qemuDomainChrTargetDefValidate(dev) < 0)
return -1;
if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL &&
@@ -3587,6 +3587,26 @@ qemuDomainChrDefValidate(const virDomainChrDef *dev,
return -1;
}
+ if (dev->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL) {
+ bool isCompatible = true;
+
+ if (!qemuDomainIsPSeries(def) &&
+ (dev->targetType == VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO ||
+ dev->targetModel == VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY)) {
+ isCompatible = false;
+ }
+
+ if (!isCompatible) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Serial device with target type '%s' and "
+ "target model '%s' not compatible with guest "
+ "architecture or machine type"),
+ virDomainChrSerialTargetTypeToString(dev->targetType),
+ virDomainChrSerialTargetModelTypeToString(dev->targetModel));
+ return -1;
+ }
+ }
+
return 0;
}
@@ -4226,10 +4246,7 @@ qemuDomainChrDefPostParse(virDomainChrDefPtr chr,
if (ARCH_IS_X86(def->os.arch)) {
chr->targetType = VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA;
} else if (qemuDomainIsPSeries(def)) {
- /* Setting TYPE_ISA here is just a temporary hack to reduce test
- * suite churn. Later on we will have a proper serial type for
- * pSeries and this line will be updated accordingly. */
- chr->targetType = VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA;
+ chr->targetType = VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO;
}
}
@@ -4246,6 +4263,9 @@ qemuDomainChrDefPostParse(virDomainChrDefPtr chr,
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI:
chr->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL;
break;
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO:
+ chr->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY;
+ break;
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE:
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST:
/* Nothing to do */
@@ -5151,6 +5171,31 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver,
goto cleanup;
}
+ for (i = 0; i < def->nserials; i++) {
+ virDomainChrDefPtr serial = def->serials[i];
+
+ /* Historically, the native console type for some machine types
+ * was not set at all, which means it defaulted to ISA even
+ * though that was not even remotely accurate. To ensure migration
+ * towards older libvirt versions works for such guests, we switch
+ * it back to the default here */
+ if (flags & VIR_DOMAIN_XML_MIGRATABLE) {
+ switch ((virDomainChrSerialTargetType) serial->targetType) {
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO:
+ serial->targetType = VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE;
+ serial->targetModel = VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE;
+ break;
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST:
+ /* Nothing to do */
+ break;
+ }
+ }
+ }
+
/* Replace the CPU definition updated according to QEMU with the one
* used for starting the domain. The updated def will be sent
* separately for backward compatibility.
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index 989c0e6c937ec50a3e81a70397e616b84223ba3c..2319e503eb481d5187ff8cc243405a8e630211e7 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -782,6 +782,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA:
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB:
+ case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO:
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE:
case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST:
return 0;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args
index 97a7057ba036cb306aa2da7e1a0a7bc5ae24940d..789d9f679ec7ee605f1f8e1516664791c6a61356 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-basic.args
@@ -20,4 +20,4 @@ server,nowait \
-boot c \
-usb \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-native.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-native.args
new file mode 120000
index 0000000000000000000000000000000000000000..d6c830ecdf0f155eb3bf56ee05a51ceb4d5df909
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-native.args
@@ -0,0 +1 @@
+qemuxml2argv-pseries-serial-native.args
\ No newline at end of file
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-native.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-native.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9f37bf0deca141d35d52accc4e2b084326767f3c
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-native.xml
@@ -0,0 +1,17 @@
+
+ guest
+ 1ccfd97d-5eb4-478a-bbe6-88d254c16db7
+ 524288
+ 1
+
+ hvm
+
+
+ /usr/bin/qemu-system-ppc64
+
+
+
+
+
+
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-virtio.args
new file mode 100644
index 0000000000000000000000000000000000000000..343018fb3eed22e189722bd9c535ef5605e92e0a
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-virtio.args
@@ -0,0 +1,23 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/home/test \
+USER=test \
+LOGNAME=test \
+QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-ppc64 \
+-name guest \
+-S \
+-M pseries \
+-m 512 \
+-smp 1,sockets=1,cores=1,threads=1 \
+-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
+-nographic \
+-nodefconfig \
+-nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-guest/monitor.sock,\
+server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=readline \
+-boot c \
+-device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x1 \
+-chardev pty,id=charconsole0 \
+-device virtconsole,chardev=charconsole0,id=console0
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-virtio.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-virtio.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0190ab63acab6030ded882aac37534cf1c4ee172
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-console-virtio.xml
@@ -0,0 +1,19 @@
+
+ guest
+ 1ccfd97d-5eb4-478a-bbe6-88d254c16db7
+ 524288
+ 1
+
+ hvm
+
+
+ /usr/bin/qemu-system-ppc64
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat-power9.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat-power9.args
index af93d63dc94a02e94ddab136e9f2884d8f1e72ea..9bb375aebac186e3b6a378e81833d7302908f504 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat-power9.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat-power9.args
@@ -21,4 +21,4 @@ server,nowait \
-boot c \
-usb \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args
index 7740e2f5a91e419bf16595a432dd2e5bc929e79f..5174aa760e11999bf50c34ca50a14093242f38d7 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args
@@ -21,4 +21,4 @@ server,nowait \
-boot c \
-usb \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
index d2c99a7fa318c67992b29cdfb7049c4ea00e7102..3790deca8cf967fabf9d707304ab9e199e2c802d 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
@@ -21,4 +21,4 @@ server,nowait \
-boot c \
-usb \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-le.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-le.args
index 97a7057ba036cb306aa2da7e1a0a7bc5ae24940d..789d9f679ec7ee605f1f8e1516664791c6a61356 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-le.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-le.args
@@ -20,4 +20,4 @@ server,nowait \
-boot c \
-usb \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-missing.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-missing.args
index 97a7057ba036cb306aa2da7e1a0a7bc5ae24940d..789d9f679ec7ee605f1f8e1516664791c6a61356 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-missing.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-missing.args
@@ -20,4 +20,4 @@ server,nowait \
-boot c \
-usb \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-no-address.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-no-address.args
index 97a7057ba036cb306aa2da7e1a0a7bc5ae24940d..789d9f679ec7ee605f1f8e1516664791c6a61356 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-no-address.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-panic-no-address.args
@@ -20,4 +20,4 @@ server,nowait \
-boot c \
-usb \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial+console-native.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial+console-native.args
new file mode 120000
index 0000000000000000000000000000000000000000..d6c830ecdf0f155eb3bf56ee05a51ceb4d5df909
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial+console-native.args
@@ -0,0 +1 @@
+qemuxml2argv-pseries-serial-native.args
\ No newline at end of file
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial+console-native.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial+console-native.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2733baa980a60de26d9054dfd3253f9876ae9850
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial+console-native.xml
@@ -0,0 +1,18 @@
+
+ guest
+ 1ccfd97d-5eb4-478a-bbe6-88d254c16db7
+ 524288
+ 1
+
+ hvm
+
+
+ /usr/bin/qemu-system-ppc64
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-compat.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-compat.args
new file mode 120000
index 0000000000000000000000000000000000000000..d6c830ecdf0f155eb3bf56ee05a51ceb4d5df909
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-compat.args
@@ -0,0 +1 @@
+qemuxml2argv-pseries-serial-native.args
\ No newline at end of file
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-compat.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-compat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2e182edbd05aab5eb48290fc8ad911b6a45f38c2
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-compat.xml
@@ -0,0 +1,19 @@
+
+ guest
+ 1ccfd97d-5eb4-478a-bbe6-88d254c16db7
+ 524288
+ 1
+
+ hvm
+
+
+ /usr/bin/qemu-system-ppc64
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-invalid-machine.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-invalid-machine.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5482146a577edae1f9b4dcbdf4dbccecd018ac9b
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-invalid-machine.xml
@@ -0,0 +1,19 @@
+
+ guest
+ 1ccfd97d-5eb4-478a-bbe6-88d254c16db7
+ 524288
+ 1
+
+ hvm
+
+
+ /usr/bin/qemu-system-x86_64
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-native.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-native.args
new file mode 100644
index 0000000000000000000000000000000000000000..f72b8b625927e279a5cc9c8919fb8df868f48ab3
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-native.args
@@ -0,0 +1,22 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/home/test \
+USER=test \
+LOGNAME=test \
+QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-ppc64 \
+-name guest \
+-S \
+-M pseries \
+-m 512 \
+-smp 1,sockets=1,cores=1,threads=1 \
+-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
+-nographic \
+-nodefconfig \
+-nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-guest/monitor.sock,\
+server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=readline \
+-boot c \
+-chardev pty,id=charserial0 \
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-native.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-native.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6cec4bc9d3df8080aa366e8a31d6495a616da3c4
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-serial-native.xml
@@ -0,0 +1,16 @@
+
+ guest
+ 1ccfd97d-5eb4-478a-bbe6-88d254c16db7
+ 524288
+ 1
+
+ hvm
+
+
+ /usr/bin/qemu-system-ppc64
+
+
+
+
+
+
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
index a92b1e01b1c52b96f69199a35a7318c4a13a25b0..37c0594032c1302b824707c43ccf739f2b1a1900 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-default.args
@@ -20,4 +20,4 @@ server,nowait \
-boot c \
-device pci-ohci,id=usb,bus=pci.0,addr=0x1 \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
index caaccdbb8e05a9e860f5bd690285fcd4cf103aa9..838b80453a52d4f068d0f8b4f43217b52ade4943 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
@@ -20,5 +20,5 @@ server,nowait \
-boot c \
-device pci-ohci,id=usb,bus=pci.0,addr=0x1 \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000 \
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000 \
-device usb-kbd,id=input0,bus=usb.0,port=1
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-multi.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-multi.args
index b9bd905a5d3f458e6322cc546c7045f23910e84c..56bc1d67ef73d31bffe6f94ee31cb132aeff1d9c 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-multi.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-multi.args
@@ -21,4 +21,4 @@ server,nowait \
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1 \
-device pci-ohci,id=usb1,bus=pci.0,addr=0x2 \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args
index 63cf3c18301bf2040d2c59aaaae9cf05ffeb0f10..0fcfbe37967c9868e3af89a385227d89468e0d58 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio-user-assigned.args
@@ -25,6 +25,6 @@ server,nowait \
-device scsi-disk,bus=scsi1.0,channel=0,scsi-id=0,lun=0,\
drive=drive-scsi1-0-0-0,id=scsi1-0-0-0 \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x20000000 \
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x20000000 \
-chardev pty,id=charserial1 \
--device spapr-vty,chardev=charserial1,reg=0x30001000
+-device spapr-vty,chardev=charserial1,id=serial1,reg=0x30001000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args
index 0294067bc8e53215965d4b3c4f50c58249ba257c..8a9bdcc4cd0957c30b6ef8a68b20d041a555be52 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-vio.args
@@ -25,6 +25,6 @@ server,nowait \
-device scsi-disk,bus=scsi1.0,channel=0,scsi-id=0,lun=0,\
drive=drive-scsi1-0-0-0,id=scsi1-0-0-0 \
-chardev pty,id=charserial0 \
--device spapr-vty,chardev=charserial0,reg=0x30000000 \
+-device spapr-vty,chardev=charserial0,id=serial0,reg=0x30000000 \
-chardev pty,id=charserial1 \
--device spapr-vty,chardev=charserial1,reg=0x30001000
+-device spapr-vty,chardev=charserial1,id=serial1,reg=0x30001000
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 29df253b889a22a03ade0c1376b1059c8da3834d..5827a47e55576bbcd4c90403ee7787a4d3c63ae1 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -1877,6 +1877,22 @@ mymain(void)
QEMU_CAPS_MACHINE_OPT,
QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
+ DO_TEST("pseries-serial-native",
+ QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_DEVICE_SPAPR_VTY);
+ DO_TEST("pseries-serial+console-native",
+ QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_DEVICE_SPAPR_VTY);
+ DO_TEST("pseries-serial-compat",
+ QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_DEVICE_SPAPR_VTY);
+ DO_TEST("pseries-console-native",
+ QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_DEVICE_SPAPR_VTY);
+ DO_TEST("pseries-console-virtio",
+ QEMU_CAPS_NODEFCONFIG);
+ DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);
+
DO_TEST("disk-ide-drive-split",
QEMU_CAPS_NODEFCONFIG,
QEMU_CAPS_IDE_CD);
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml
index 496df0696c61cb843f4784f4df12a842751ae2a3..484fe4cfa60c4d6bf9bca390c2136d74f60904e3 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-panic-pseries.xml
@@ -22,8 +22,8 @@
-
-
+
+
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-console-native.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-console-native.xml
new file mode 120000
index 0000000000000000000000000000000000000000..b0e645fc03e7cf18a1ed2b26e7caecc1b5bca6cf
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-console-native.xml
@@ -0,0 +1 @@
+qemuxml2xmlout-pseries-serial-native.xml
\ No newline at end of file
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-console-virtio.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-console-virtio.xml
new file mode 100644
index 0000000000000000000000000000000000000000..48760f2824b6dc8e1aaaf51b3800d72e12f83ad0
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-console-virtio.xml
@@ -0,0 +1,31 @@
+
+ guest
+ 1ccfd97d-5eb4-478a-bbe6-88d254c16db7
+ 524288
+ 524288
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu-system-ppc64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-compat-power9.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-compat-power9.xml
index 9d4c5efe678205aa1106dd800047c5f36fa0d40f..404bb0c768ac0de8787c580952ab9b4f320dfbe7 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-compat-power9.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-compat-power9.xml
@@ -25,8 +25,8 @@
-
-
+
+
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-compat.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-compat.xml
index 6059859abd5d0ca5a8329390a020921826d2ca70..1891fa5f48b606d6652e980f8acaf399795cfe54 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-compat.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-compat.xml
@@ -25,8 +25,8 @@
-
-
+
+
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-exact.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-exact.xml
index f3216523edac9562abcbdc1fb8e064f93c3320af..f08f3e005f7bea92f699510b51fa5a7f3288b318 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-exact.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-cpu-exact.xml
@@ -26,8 +26,8 @@
-
-
+
+
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml
index 496df0696c61cb843f4784f4df12a842751ae2a3..484fe4cfa60c4d6bf9bca390c2136d74f60904e3 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-missing.xml
@@ -22,8 +22,8 @@
-
-
+
+
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml
index 496df0696c61cb843f4784f4df12a842751ae2a3..484fe4cfa60c4d6bf9bca390c2136d74f60904e3 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-panic-no-address.xml
@@ -22,8 +22,8 @@
-
-
+
+
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-serial+console-native.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-serial+console-native.xml
new file mode 120000
index 0000000000000000000000000000000000000000..b0e645fc03e7cf18a1ed2b26e7caecc1b5bca6cf
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-serial+console-native.xml
@@ -0,0 +1 @@
+qemuxml2xmlout-pseries-serial-native.xml
\ No newline at end of file
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-serial-compat.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-serial-compat.xml
new file mode 120000
index 0000000000000000000000000000000000000000..b0e645fc03e7cf18a1ed2b26e7caecc1b5bca6cf
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-serial-compat.xml
@@ -0,0 +1 @@
+qemuxml2xmlout-pseries-serial-native.xml
\ No newline at end of file
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-serial-native.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-serial-native.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fae7c54d5b6c0e8ded835adac6e6b4f81829f74d
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-serial-native.xml
@@ -0,0 +1,35 @@
+
+ guest
+ 1ccfd97d-5eb4-478a-bbe6-88d254c16db7
+ 524288
+ 524288
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu-system-ppc64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index d66cf155d4713e4e04f2ab6dd576565706258c66..4318ae5036d8eb1dd9bea50e07613b03153f2e9a 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -768,6 +768,21 @@ mymain(void)
QEMU_CAPS_MACHINE_OPT,
QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
+ DO_TEST("pseries-serial-native",
+ QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_DEVICE_SPAPR_VTY);
+ DO_TEST("pseries-serial+console-native",
+ QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_DEVICE_SPAPR_VTY);
+ DO_TEST("pseries-serial-compat",
+ QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_DEVICE_SPAPR_VTY);
+ DO_TEST("pseries-console-native",
+ QEMU_CAPS_NODEFCONFIG,
+ QEMU_CAPS_DEVICE_SPAPR_VTY);
+ DO_TEST("pseries-console-virtio",
+ QEMU_CAPS_NODEFCONFIG);
+
DO_TEST("balloon-device-auto", NONE);
DO_TEST("balloon-device-period", NONE);
DO_TEST("channel-virtio-auto", NONE);