
On 1/21/22 11:08, Peter Krempa wrote:
On Thu, Jan 20, 2022 at 10:52:11 -0300, Daniel Henrique Barboza wrote:
We're now able to boot a simple PowerNV8 domain in Libvirt.
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> --- tests/qemuxml2argvdata/powernv8-basic.args | 31 +++++++++++++++++++++ tests/qemuxml2argvdata/powernv8-basic.xml | 16 +++++++++++ tests/qemuxml2argvtest.c | 3 ++ tests/qemuxml2xmloutdata/powernv8-basic.xml | 28 +++++++++++++++++++ tests/qemuxml2xmltest.c | 3 ++ tests/testutilsqemu.c | 2 +- 6 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 tests/qemuxml2argvdata/powernv8-basic.args create mode 100644 tests/qemuxml2argvdata/powernv8-basic.xml create mode 100644 tests/qemuxml2xmloutdata/powernv8-basic.xml
[...]
diff --git a/tests/qemuxml2argvdata/powernv8-basic.xml b/tests/qemuxml2argvdata/powernv8-basic.xml new file mode 100644 index 0000000000..a92fc1282c --- /dev/null +++ b/tests/qemuxml2argvdata/powernv8-basic.xml @@ -0,0 +1,16 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>b20fcfe3-4a0a-4039-8735-9e024256e0f7</uuid> + <memory unit='KiB'>2097152</memory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='ppc64' machine='powernv8'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-ppc64</emulator> + <controller type='pci' index='0' model='pcie-root'/> + <console type='pty'> + <target type='serial' port='0'/> + </console> + </devices> +</domain>
Trying to start this config after this series is applied fails with:
error: internal error: process exited while connecting to monitor: 2022-01-21T14:04:54.119602Z qemu-system-ppc64: -device pnv-phb3,index=0,chip-id=0,id=pcie.0: Parameter 'driver' expects a pluggable device type
qemu-system-ppc-core-6.2.0-2.fc35.x86_64
You'll need QEMU upstream to test it. QEMU 6.2.0 doesn't allow the PHBs to be user created. I think I mentioned in the cover letter that I didn't find a good way to block Libvirt users from doing exactly as you attempted to do because the pnv-phb3 is presented, but it's unusable. The places where we bother checking QEMU version is on qemu_process.c when creating a log in qemuLogOperation() and in qemu_driver.c in qemuConnectGetVersion. I didn't find any other case where Libvirt checks for QEMU version to check whether a feature is valid or not, because well, Libvirt uses capabilities to avoid doing that in the first place.
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 9d2de2a569..7fcfcc83f1 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -2217,6 +2217,9 @@ mymain(void) DO_TEST_PARSE_ERROR_NOCAPS("seclabel-multiple"); DO_TEST_PARSE_ERROR_NOCAPS("seclabel-device-duplicates");
+ DO_TEST("powernv8-basic", + QEMU_CAPS_DEVICE_ISA_SERIAL);
All new test cases shoud use DO_TEST_CAPS_ARCH_LATEST instead of fake capabilities.
I'll fix it here and in all other tests I ended up adding in this series. Thanks, Daniel
+ DO_TEST("pseries-basic", QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, QEMU_CAPS_DEVICE_SPAPR_VTY);
[...]
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index cb665e501b..5d29125ffa 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -54,7 +54,7 @@ static const char *const arm_machines[] = { "vexpress-a9", "virt", NULL }; static const char *const ppc64_machines[] = { - "pseries", NULL + "pseries", "powernv8", NULL
NACK to this hunk. Use real capabilities instead.
}; static const char *const ppc_machines[] = { "ppce500", NULL -- 2.34.1