[PATCH 0/3] Implement paeg-per-vq to virtio devices

The the paeg-per-vq option controlles the VQ Notification Virtio Capability, added since QEMU 2.8(commit d9997d89a4). It could bring some flexibility[1][2] to vhost_vdpa. Gavi, I am not very clear about how it can help with vhost_vdpa. So I paste some description from the doc of your previous patch[3]. And feel free to rely with your "Signed-off-by: " :) Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1925363 Reference: [1]: https://doc.dpdk.org/guides/sample_app_ug/vdpa.html [2]: https://lkml.org/lkml/2020/6/1/1688 [3]: https://listman.redhat.com/archives/libvir-list/2021-May/msg00143.html Han Han (3): qemu_capabilities: Add flag QEMU_CAPS_VIRTIO_PAGE_PER_VQ conf: Add page_per_vq for driver element qemu: Add support for virtio device option paeg-per-vq docs/formatdomain.rst | 9 +++++ docs/schemas/domaincommon.rng | 5 +++ src/conf/domain_conf.c | 16 ++++++++ src/conf/domain_conf.h | 1 + src/conf/domain_validate.c | 7 ++++ src/qemu/qemu_capabilities.c | 6 +++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 4 ++ src/qemu/qemu_hotplug.c | 3 +- src/qemu/qemu_validate.c | 8 ++++ .../caps_2.11.0.s390x.xml | 1 + .../caps_2.11.0.x86_64.xml | 1 + .../caps_2.12.0.aarch64.xml | 1 + .../caps_2.12.0.ppc64.xml | 1 + .../caps_2.12.0.s390x.xml | 1 + .../caps_2.12.0.x86_64.xml | 1 + .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 1 + .../qemucapabilitiesdata/caps_3.0.0.s390x.xml | 1 + .../caps_3.0.0.x86_64.xml | 1 + .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 1 + .../caps_3.1.0.x86_64.xml | 1 + .../caps_4.0.0.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 1 + .../caps_4.0.0.riscv32.xml | 1 + .../caps_4.0.0.riscv64.xml | 1 + .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 1 + .../caps_4.0.0.x86_64.xml | 1 + .../caps_4.1.0.x86_64.xml | 1 + .../caps_4.2.0.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 + .../caps_4.2.0.x86_64.xml | 1 + .../caps_5.0.0.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + .../caps_5.0.0.riscv64.xml | 1 + .../caps_5.0.0.x86_64.xml | 1 + .../caps_5.1.0.x86_64.xml | 1 + .../caps_5.2.0.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_5.2.0.ppc64.xml | 1 + .../caps_5.2.0.riscv64.xml | 1 + .../qemucapabilitiesdata/caps_5.2.0.s390x.xml | 1 + .../caps_5.2.0.x86_64.xml | 1 + .../caps_6.0.0.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_6.0.0.s390x.xml | 1 + .../caps_6.0.0.x86_64.xml | 1 + .../caps_6.1.0.x86_64.xml | 1 + .../virtio-options-controller-page_per_vq.err | 1 + ...-controller-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-controller-page_per_vq.xml | 38 ++++++++++++++++++ .../virtio-options-disk-page_per_vq.err | 1 + ...ptions-disk-page_per_vq.x86_64-latest.args | 39 +++++++++++++++++++ .../virtio-options-disk-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-fs-page_per_vq.err | 1 + ...-options-fs-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-fs-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-input-page_per_vq.err | 1 + ...tions-input-page_per_vq.x86_64-latest.args | 35 +++++++++++++++++ .../virtio-options-input-page_per_vq.xml | 30 ++++++++++++++ .../virtio-options-memballoon-page_per_vq.err | 1 + ...-memballoon-page_per_vq.x86_64-latest.args | 33 ++++++++++++++++ .../virtio-options-memballoon-page_per_vq.xml | 23 +++++++++++ .../virtio-options-net-page_per_vq.err | 1 + ...options-net-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-net-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-rng-page_per_vq.err | 1 + ...options-rng-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-rng-page_per_vq.xml | 32 +++++++++++++++ .../virtio-options-video-page_per_vq.err | 1 + ...tions-video-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-video-page_per_vq.xml | 36 +++++++++++++++++ .../virtio-options.x86_64-latest.args | 26 ++++++------- tests/qemuxml2argvdata/virtio-options.xml | 26 ++++++------- tests/qemuxml2argvtest.c | 22 +++++++++++ 73 files changed, 704 insertions(+), 27 deletions(-) create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.xml -- 2.31.1

The qemu capability will be used for the page_per_vq option of virtio devices. Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 6 ++++++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml | 1 + 38 files changed, 43 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 70c3ec2f0c..b4f597742d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -638,6 +638,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "query-display-options", /* QEMU_CAPS_QUERY_DISPLAY_OPTIONS */ "s390-pv-guest", /* QEMU_CAPS_S390_PV_GUEST */ "set-action", /* QEMU_CAPS_SET_ACTION */ + "virtio.page-per-vq", /* QEMU_CAPS_VIRTIO_PAGE_PER_VQ */ ); @@ -1373,6 +1374,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioBalloon[] { "packed", QEMU_CAPS_VIRTIO_PACKED_QUEUES, NULL }, { "free-page-reporting", QEMU_CAPS_VIRTIO_BALLOON_FREE_PAGE_REPORTING, NULL }, { "acpi-index", QEMU_CAPS_ACPI_INDEX, NULL }, + { "page-per-vq", QEMU_CAPS_VIRTIO_PAGE_PER_VQ, NULL }, }; @@ -1406,6 +1408,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioBlk[] = { { "werror", QEMU_CAPS_STORAGE_WERROR, NULL }, { "packed", QEMU_CAPS_VIRTIO_PACKED_QUEUES, NULL }, { "acpi-index", QEMU_CAPS_ACPI_INDEX, NULL }, + { "page-per-vq", QEMU_CAPS_VIRTIO_PAGE_PER_VQ, NULL }, }; static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioNet[] = { @@ -1420,6 +1423,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioNet[] = { { "failover", QEMU_CAPS_VIRTIO_NET_FAILOVER, NULL }, { "packed", QEMU_CAPS_VIRTIO_PACKED_QUEUES, NULL }, { "acpi-index", QEMU_CAPS_ACPI_INDEX, NULL }, + { "page-per-vq", QEMU_CAPS_VIRTIO_PAGE_PER_VQ, NULL }, }; static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsPCIeRootPort[] = { @@ -1441,6 +1445,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioSCSI[] = { { "ats", QEMU_CAPS_VIRTIO_PCI_ATS, NULL }, { "packed", QEMU_CAPS_VIRTIO_PACKED_QUEUES, NULL }, { "acpi-index", QEMU_CAPS_ACPI_INDEX, NULL }, + { "page-per-vq", QEMU_CAPS_VIRTIO_PAGE_PER_VQ, NULL }, }; static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVfioPCI[] = { @@ -1513,6 +1518,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioGpu[] = { { "ats", QEMU_CAPS_VIRTIO_PCI_ATS, NULL }, { "packed", QEMU_CAPS_VIRTIO_PACKED_QUEUES, NULL }, { "acpi-index", QEMU_CAPS_ACPI_INDEX, NULL }, + { "page-per-vq", QEMU_CAPS_VIRTIO_PAGE_PER_VQ, NULL }, }; static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsICH9[] = { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index bc762d1916..b348865390 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -618,6 +618,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_QUERY_DISPLAY_OPTIONS, /* 'query-display-options' qmp command present */ QEMU_CAPS_S390_PV_GUEST, /* -object s390-pv-guest,... */ QEMU_CAPS_SET_ACTION, /* 'set-action' QMP command */ + QEMU_CAPS_VIRTIO_PAGE_PER_VQ, /* virtio.page_per_vq */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml index 32c25f9e99..13b42766ca 100644 --- a/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml @@ -109,6 +109,7 @@ <flag name='fsdev.createmode'/> <flag name='vnc-opts'/> <flag name='input-linux'/> + <flag name='virtio.page-per-vq'/> <version>2011000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>39100288</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml index 8a3c9c53c6..c0b040e402 100644 --- a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml @@ -190,6 +190,7 @@ <flag name='cpu-max'/> <flag name='vnc-opts'/> <flag name='input-linux'/> + <flag name='virtio.page-per-vq'/> <version>2011000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100288</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml index 3cd71919bc..15c7732c7f 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml @@ -158,6 +158,7 @@ <flag name='vnc-opts'/> <flag name='rotation-rate'/> <flag name='input-linux'/> + <flag name='virtio.page-per-vq'/> <version>2012000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>61700289</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml index 2081592b51..04e8f676e9 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml @@ -157,6 +157,7 @@ <flag name='cpu-max'/> <flag name='vnc-opts'/> <flag name='input-linux'/> + <flag name='virtio.page-per-vq'/> <version>2011090</version> <kvmVersion>0</kvmVersion> <microcodeVersion>42900289</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml index deabb614ba..58f342df81 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml @@ -122,6 +122,7 @@ <flag name='vhost-user-blk'/> <flag name='vnc-opts'/> <flag name='input-linux'/> + <flag name='virtio.page-per-vq'/> <version>2012000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>39100289</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml index 3cc5c86e4d..f59b6ebb6f 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml @@ -201,6 +201,7 @@ <flag name='cpu-max'/> <flag name='vnc-opts'/> <flag name='input-linux'/> + <flag name='virtio.page-per-vq'/> <version>2011090</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100289</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml index 19af15c345..3075fa06e6 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml @@ -159,6 +159,7 @@ <flag name='cpu-max'/> <flag name='vnc-opts'/> <flag name='input-linux'/> + <flag name='virtio.page-per-vq'/> <version>2012050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>42900239</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml b/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml index 8e90d32de9..e580d26884 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml @@ -125,6 +125,7 @@ <flag name='vhost-user-blk'/> <flag name='vnc-opts'/> <flag name='input-linux'/> + <flag name='virtio.page-per-vq'/> <version>3000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>39100239</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml index ff9f88d873..b327266407 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml @@ -207,6 +207,7 @@ <flag name='cpu-max'/> <flag name='vnc-opts'/> <flag name='input-linux'/> + <flag name='virtio.page-per-vq'/> <version>3000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100239</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml index 9c217263ca..5630083d04 100644 --- a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml @@ -164,6 +164,7 @@ <flag name='cpu-max'/> <flag name='vnc-opts'/> <flag name='input-linux'/> + <flag name='virtio.page-per-vq'/> <version>3000091</version> <kvmVersion>0</kvmVersion> <microcodeVersion>42900240</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml index a80d381b71..a8bd3a82f1 100644 --- a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml @@ -211,6 +211,7 @@ <flag name='vnc-opts'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>3000092</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100240</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml index efb891fa01..5d38321715 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml @@ -174,6 +174,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>61700240</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml index 1e2b7c7fe6..abd13e8b55 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml @@ -181,6 +181,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>42900240</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml b/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml index 5872ecd491..c613048cc4 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml @@ -173,6 +173,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>0</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml index bb76faae2b..e925fba2fb 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml @@ -173,6 +173,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>0</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml index 51074b4f37..08eea3502b 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml @@ -137,6 +137,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>39100240</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml index 19b8a49394..2a28ac7834 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml @@ -219,6 +219,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100240</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml index 841b753518..ef56dc0437 100644 --- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml @@ -226,6 +226,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4001000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100241</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml index 8116624181..56d343bf9f 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml @@ -189,6 +189,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4001050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>61700242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml index d37c9b3426..29802b7db9 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml @@ -188,6 +188,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4001050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>42900242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml index 258e382232..4b143446e1 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml @@ -150,6 +150,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4002000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>39100242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml index 6e3aa7f5d9..dddc7d316d 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml @@ -237,6 +237,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>4002000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml index 4ce8244540..4db455781d 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml @@ -199,6 +199,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>5000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>61700241</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml index 07e00008ee..6b8850daaa 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml @@ -207,6 +207,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>5000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>42900241</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml index 1bbb9b98cd..ee0c6e3c02 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml @@ -193,6 +193,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>5000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>0</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml index 0c28645f69..7aec75dbcf 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml @@ -244,6 +244,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>5000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100241</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml index fd77d9bbc9..b073b63fc0 100644 --- a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml @@ -246,6 +246,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>5001000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml index 4e31d8245e..b8493dc5d6 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml @@ -203,6 +203,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>5002000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>61700243</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml index ac81364857..a4effd8217 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml @@ -209,6 +209,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>5002000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>42900243</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.riscv64.xml b/tests/qemucapabilitiesdata/caps_5.2.0.riscv64.xml index 21a1a5c3dd..ba485ee1c5 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.riscv64.xml @@ -195,6 +195,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>5002000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>0</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml index 13caca9626..8f9f725931 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml @@ -157,6 +157,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>5002000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>39100243</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml index 234ac8f7ef..1be5d4fcfd 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml @@ -247,6 +247,7 @@ <flag name='rotation-rate'/> <flag name='input-linux'/> <flag name='query-display-options'/> + <flag name='virtio.page-per-vq'/> <version>5002000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100243</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml index dcc41ed067..3d19385073 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0.aarch64.xml @@ -211,6 +211,7 @@ <flag name='confidential-guest-support'/> <flag name='query-display-options'/> <flag name='set-action'/> + <flag name='virtio.page-per-vq'/> <version>6000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>61700242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml b/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml index ebcca6e114..fc0576dea2 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0.s390x.xml @@ -165,6 +165,7 @@ <flag name='query-display-options'/> <flag name='s390-pv-guest'/> <flag name='set-action'/> + <flag name='virtio.page-per-vq'/> <version>6000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>39100242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml index 4951644354..39e5db26c9 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml @@ -255,6 +255,7 @@ <flag name='confidential-guest-support'/> <flag name='query-display-options'/> <flag name='set-action'/> + <flag name='virtio.page-per-vq'/> <version>6000000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml index eca9facf80..208aa6a7cc 100644 --- a/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml @@ -257,6 +257,7 @@ <flag name='confidential-guest-support'/> <flag name='query-display-options'/> <flag name='set-action'/> + <flag name='virtio.page-per-vq'/> <version>6001000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100243</microcodeVersion> -- 2.31.1

Signed-off-by: Han Han <hhan@redhat.com> --- docs/formatdomain.rst | 9 +++++++++ docs/schemas/domaincommon.rng | 5 +++++ src/conf/domain_conf.c | 16 ++++++++++++++++ src/conf/domain_conf.h | 1 + src/conf/domain_validate.c | 7 +++++++ 5 files changed, 38 insertions(+) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 479a3acfbb..961676ac6b 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -3546,6 +3546,15 @@ virtqueues are actually used depends on the feature negotiation between QEMU, vhost backends and guest drivers. Possible values are ``on`` or ``off``. :since:`Since 6.3.0 (QEMU and KVM only)` +This optional attribute ``page_per_vq`` controls the layout of the notification +capabilities exposed to the guest. When enabled, each virtio queue will have a +dedicated page on the device BAR exposed to the guest. It is recommended to be +used when vDPA is enabled on the hypervisor, as it enables mapping the +notification area to the physical device, which is only supported in page +granularity. The default is determined by QEMU. :since:`Since 7.8.0` +Note: In general you should leave this option alone, unless you are very certain +you know what you are doing. + :anchor:`<a id="elementsVirtioTransitional"/>` Virtio transitional devices diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 11fa24f398..fb97364e15 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -6789,6 +6789,11 @@ <ref name="virOnOff"/> </attribute> </optional> + <optional> + <attribute name="page_per_vq"> + <ref name="virOnOff"/> + </attribute> + </optional> </define> <define name="usbmaster"> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 6127513117..1abfe29dd9 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1629,6 +1629,10 @@ virDomainVirtioOptionsParseXML(xmlNodePtr driver, &(*virtio)->packed) < 0) return -1; + if (virXMLPropTristateSwitch(driver, "page_per_vq", VIR_XML_PROP_NONE, + &(*virtio)->page_per_vq) < 0) + return -1; + return 0; } @@ -6311,6 +6315,10 @@ virDomainVirtioOptionsFormat(virBuffer *buf, virBufferAsprintf(buf, " packed='%s'", virTristateSwitchTypeToString(virtio->packed)); } + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(buf, " page_per_vq='%s'", + virTristateSwitchTypeToString(virtio->page_per_vq)); + } } @@ -20699,6 +20707,14 @@ virDomainVirtioOptionsCheckABIStability(virDomainVirtioOptions *src, virTristateSwitchTypeToString(src->packed)); return false; } + if (src->page_per_vq != dst->page_per_vq) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Target device page_per_vq option '%s' does not " + "match source '%s'"), + virTristateSwitchTypeToString(dst->page_per_vq), + virTristateSwitchTypeToString(src->page_per_vq)); + return false; + } return true; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c7e6df7981..e21683a71f 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2725,6 +2725,7 @@ struct _virDomainVirtioOptions { virTristateSwitch iommu; virTristateSwitch ats; virTristateSwitch packed; + virTristateSwitch page_per_vq; }; diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 60f7ccdddd..f22f952464 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -134,6 +134,13 @@ virDomainCheckVirtioOptionsAreAbsent(virDomainVirtioOptions *virtio) "for virtio devices")); return -1; } + + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("page_per_vq option is only supported " + "for virtio devices")); + return -1; + } return 0; } -- 2.31.1

On Mon, Sep 6, 2021 at 9:07 AM Han Han <hhan@redhat.com> wrote:
Signed-off-by: Han Han <hhan@redhat.com> --- docs/formatdomain.rst | 9 +++++++++ docs/schemas/domaincommon.rng | 5 +++++ src/conf/domain_conf.c | 16 ++++++++++++++++ src/conf/domain_conf.h | 1 + src/conf/domain_validate.c | 7 +++++++ 5 files changed, 38 insertions(+)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 479a3acfbb..961676ac6b 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -3546,6 +3546,15 @@ virtqueues are actually used depends on the feature negotiation between QEMU, vhost backends and guest drivers. Possible values are ``on`` or ``off``. :since:`Since 6.3.0 (QEMU and KVM only)`
+This optional attribute ``page_per_vq`` controls the layout of the notification
Minor quibble: "This optional attribute" should be "The optional attribute"
+capabilities exposed to the guest. When enabled, each virtio queue will have a +dedicated page on the device BAR exposed to the guest. It is recommended to be +used when vDPA is enabled on the hypervisor, as it enables mapping the +notification area to the physical device, which is only supported in page +granularity. The default is determined by QEMU. :since:`Since 7.8.0` +Note: In general you should leave this option alone, unless you are very certain +you know what you are doing. + :anchor:`<a id="elementsVirtioTransitional"/>`
Virtio transitional devices diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 11fa24f398..fb97364e15 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -6789,6 +6789,11 @@ <ref name="virOnOff"/> </attribute> </optional> + <optional> + <attribute name="page_per_vq"> + <ref name="virOnOff"/> + </attribute> + </optional> </define>
<define name="usbmaster"> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 6127513117..1abfe29dd9 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1629,6 +1629,10 @@ virDomainVirtioOptionsParseXML(xmlNodePtr driver, &(*virtio)->packed) < 0) return -1;
+ if (virXMLPropTristateSwitch(driver, "page_per_vq", VIR_XML_PROP_NONE, + &(*virtio)->page_per_vq) < 0) + return -1; + return 0; }
@@ -6311,6 +6315,10 @@ virDomainVirtioOptionsFormat(virBuffer *buf, virBufferAsprintf(buf, " packed='%s'", virTristateSwitchTypeToString(virtio->packed)); } + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(buf, " page_per_vq='%s'", + virTristateSwitchTypeToString(virtio->page_per_vq)); + } }
@@ -20699,6 +20707,14 @@ virDomainVirtioOptionsCheckABIStability(virDomainVirtioOptions *src, virTristateSwitchTypeToString(src->packed)); return false; } + if (src->page_per_vq != dst->page_per_vq) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Target device page_per_vq option '%s' does not " + "match source '%s'"), + virTristateSwitchTypeToString(dst->page_per_vq), + virTristateSwitchTypeToString(src->page_per_vq)); + return false; + } return true; }
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c7e6df7981..e21683a71f 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2725,6 +2725,7 @@ struct _virDomainVirtioOptions { virTristateSwitch iommu; virTristateSwitch ats; virTristateSwitch packed; + virTristateSwitch page_per_vq; };
diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 60f7ccdddd..f22f952464 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -134,6 +134,13 @@ virDomainCheckVirtioOptionsAreAbsent(virDomainVirtioOptions *virtio) "for virtio devices")); return -1; } + + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("page_per_vq option is only supported " + "for virtio devices")); + return -1; + } return 0; }
-- 2.31.1

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1925363 Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_command.c | 4 ++ src/qemu/qemu_hotplug.c | 3 +- src/qemu/qemu_validate.c | 8 ++++ .../virtio-options-controller-page_per_vq.err | 1 + ...-controller-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-controller-page_per_vq.xml | 38 ++++++++++++++++++ .../virtio-options-disk-page_per_vq.err | 1 + ...ptions-disk-page_per_vq.x86_64-latest.args | 39 +++++++++++++++++++ .../virtio-options-disk-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-fs-page_per_vq.err | 1 + ...-options-fs-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-fs-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-input-page_per_vq.err | 1 + ...tions-input-page_per_vq.x86_64-latest.args | 35 +++++++++++++++++ .../virtio-options-input-page_per_vq.xml | 30 ++++++++++++++ .../virtio-options-memballoon-page_per_vq.err | 1 + ...-memballoon-page_per_vq.x86_64-latest.args | 33 ++++++++++++++++ .../virtio-options-memballoon-page_per_vq.xml | 23 +++++++++++ .../virtio-options-net-page_per_vq.err | 1 + ...options-net-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-net-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-rng-page_per_vq.err | 1 + ...options-rng-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-rng-page_per_vq.xml | 32 +++++++++++++++ .../virtio-options-video-page_per_vq.err | 1 + ...tions-video-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-video-page_per_vq.xml | 36 +++++++++++++++++ .../virtio-options.x86_64-latest.args | 26 ++++++------- tests/qemuxml2argvdata/virtio-options.xml | 26 ++++++------- tests/qemuxml2argvtest.c | 22 +++++++++++ 30 files changed, 623 insertions(+), 27 deletions(-) create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.xml diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b230314f7f..549f11dbe8 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -645,6 +645,10 @@ qemuBuildVirtioOptionsStr(virBuffer *buf, virBufferAsprintf(buf, ",packed=%s", virTristateSwitchTypeToString(virtio->packed)); } + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(buf, ",page-per-vq=%s", + virTristateSwitchTypeToString(virtio->page_per_vq)); + } } static int diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9c16ab4567..f2553a6831 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3678,7 +3678,8 @@ qemuDomainChangeNet(virQEMUDriver *driver, (olddev->virtio && newdev->virtio && (olddev->virtio->iommu != newdev->virtio->iommu || olddev->virtio->ats != newdev->virtio->ats || - olddev->virtio->packed != newdev->virtio->packed))) { + olddev->virtio->packed != newdev->virtio->packed || + olddev->virtio->page_per_vq != newdev->virtio->page_per_vq))) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("cannot modify virtio network device driver options")); goto cleanup; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 1a470f1ff5..93e8b55651 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1478,6 +1478,14 @@ qemuValidateDomainVirtioOptions(const virDomainVirtioOptions *virtio, "QEMU binary")); return -1; } + + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PAGE_PER_VQ)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("the page_per_vq setting is not supported with this " + "QEMU binary")); + return -1; + } return 0; } diff --git a/tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.err b/tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.err new file mode 100644 index 0000000000..475aa8be43 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.err @@ -0,0 +1 @@ +unsupported configuration: the page_per_vq setting is not supported with this QEMU binary diff --git a/tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.x86_64-latest.args new file mode 100644 index 0000000000..3b11574410 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.x86_64-latest.args @@ -0,0 +1,37 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \ +-cpu qemu64 \ +-m 214 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-device virtio-scsi-pci,page-per-vq=on,id=scsi0,bus=pci.0,addr=0x2 \ +-device virtio-scsi-pci,page-per-vq=off,id=scsi1,bus=pci.0,addr=0x3 \ +-device virtio-serial-pci,id=virtio-serial0,page-per-vq=on,bus=pci.0,addr=0x4 \ +-device virtio-serial-pci,id=virtio-serial1,page-per-vq=off,bus=pci.0,addr=0x5 \ +-audiodev id=audio1,driver=none \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.xml b/tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.xml new file mode 100644 index 0000000000..395142ba8a --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.xml @@ -0,0 +1,38 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pci-root'/> + <controller type='scsi' index='0' model='virtio-scsi'> + <driver page_per_vq='on'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </controller> + <controller type='scsi' index='1' model='virtio-scsi'> + <driver page_per_vq='off'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </controller> + <controller type='virtio-serial' index='0'> + <driver page_per_vq='on'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </controller> + <controller type='virtio-serial' index='1'> + <driver page_per_vq='off'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> + </controller> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.err b/tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.err new file mode 100644 index 0000000000..475aa8be43 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.err @@ -0,0 +1 @@ +unsupported configuration: the page_per_vq setting is not supported with this QEMU binary diff --git a/tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.x86_64-latest.args new file mode 100644 index 0000000000..cd29709f48 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.x86_64-latest.args @@ -0,0 +1,39 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \ +-cpu qemu64 \ +-m 214 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/img1","node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw","file":"libvirt-2-storage"}' \ +-device virtio-blk-pci,page-per-vq=on,bus=pci.0,addr=0x2,drive=libvirt-2-format,id=virtio-disk0,bootindex=1 \ +-blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/img2","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \ +-device virtio-blk-pci,page-per-vq=off,bus=pci.0,addr=0x3,drive=libvirt-1-format,id=virtio-disk1 \ +-audiodev id=audio1,driver=none \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.xml b/tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.xml new file mode 100644 index 0000000000..8040685f7a --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.xml @@ -0,0 +1,34 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pci-root'/> + <disk type='file' device='disk'> + <driver name='qemu' type='raw' page_per_vq='on'/> + <source file='/var/lib/libvirt/images/img1'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </disk> + <disk type='file' device='disk'> + <driver name='qemu' type='raw' page_per_vq='off'/> + <source file='/var/lib/libvirt/images/img2'/> + <target dev='vdb' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </disk> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.err b/tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.err new file mode 100644 index 0000000000..475aa8be43 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.err @@ -0,0 +1 @@ +unsupported configuration: the page_per_vq setting is not supported with this QEMU binary diff --git a/tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.x86_64-latest.args new file mode 100644 index 0000000000..ee276aacfc --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.x86_64-latest.args @@ -0,0 +1,37 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \ +-cpu qemu64 \ +-m 214 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-fsdev local,security_model=passthrough,id=fsdev-fs0,path=/export/fs1 \ +-device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=fs1,page-per-vq=on,bus=pci.0,addr=0x2 \ +-fsdev local,security_model=passthrough,id=fsdev-fs1,path=/export/fs2 \ +-device virtio-9p-pci,id=fs1,fsdev=fsdev-fs1,mount_tag=fs2,page-per-vq=off,bus=pci.0,addr=0x3 \ +-audiodev id=audio1,driver=none \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.xml b/tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.xml new file mode 100644 index 0000000000..abf89ab53b --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.xml @@ -0,0 +1,34 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pci-root'/> + <filesystem type='mount' accessmode='passthrough'> + <driver page_per_vq='on'/> + <source dir='/export/fs1'/> + <target dir='fs1'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </filesystem> + <filesystem type='mount' accessmode='passthrough'> + <driver page_per_vq='off'/> + <source dir='/export/fs2'/> + <target dir='fs2'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </filesystem> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/virtio-options-input-page_per_vq.err b/tests/qemuxml2argvdata/virtio-options-input-page_per_vq.err new file mode 100644 index 0000000000..475aa8be43 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-input-page_per_vq.err @@ -0,0 +1 @@ +unsupported configuration: the page_per_vq setting is not supported with this QEMU binary diff --git a/tests/qemuxml2argvdata/virtio-options-input-page_per_vq.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-options-input-page_per_vq.x86_64-latest.args new file mode 100644 index 0000000000..96c3bb9d49 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-input-page_per_vq.x86_64-latest.args @@ -0,0 +1,35 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \ +-cpu qemu64 \ +-m 214 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-device virtio-mouse-pci,id=input0,bus=pci.0,addr=0x2,page-per-vq=on \ +-device virtio-keyboard-pci,id=input1,bus=pci.0,addr=0x3,page-per-vq=off \ +-audiodev id=audio1,driver=none \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/virtio-options-input-page_per_vq.xml b/tests/qemuxml2argvdata/virtio-options-input-page_per_vq.xml new file mode 100644 index 0000000000..e08234786b --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-input-page_per_vq.xml @@ -0,0 +1,30 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='virtio'> + <driver page_per_vq='on'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </input> + <input type='keyboard' bus='virtio'> + <driver page_per_vq='off'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </input> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.err b/tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.err new file mode 100644 index 0000000000..475aa8be43 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.err @@ -0,0 +1 @@ +unsupported configuration: the page_per_vq setting is not supported with this QEMU binary diff --git a/tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.x86_64-latest.args new file mode 100644 index 0000000000..790888af7f --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.x86_64-latest.args @@ -0,0 +1,33 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \ +-cpu qemu64 \ +-m 214 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-audiodev id=audio1,driver=none \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2,page-per-vq=on \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.xml b/tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.xml new file mode 100644 index 0000000000..cf7c3da971 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.xml @@ -0,0 +1,23 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pci-root'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + <driver page_per_vq='on'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/virtio-options-net-page_per_vq.err b/tests/qemuxml2argvdata/virtio-options-net-page_per_vq.err new file mode 100644 index 0000000000..475aa8be43 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-net-page_per_vq.err @@ -0,0 +1 @@ +unsupported configuration: the page_per_vq setting is not supported with this QEMU binary diff --git a/tests/qemuxml2argvdata/virtio-options-net-page_per_vq.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-options-net-page_per_vq.x86_64-latest.args new file mode 100644 index 0000000000..60a64ada5c --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-net-page_per_vq.x86_64-latest.args @@ -0,0 +1,37 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \ +-cpu qemu64 \ +-m 214 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-netdev user,id=hostnet0 \ +-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:56:58:5a:5c,bus=pci.0,addr=0x2,page-per-vq=on \ +-netdev user,id=hostnet1 \ +-device virtio-net-pci,netdev=hostnet1,id=net1,mac=62:64:66:68:6a:6c,bus=pci.0,addr=0x3,page-per-vq=off \ +-audiodev id=audio1,driver=none \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/virtio-options-net-page_per_vq.xml b/tests/qemuxml2argvdata/virtio-options-net-page_per_vq.xml new file mode 100644 index 0000000000..2c38daa0d5 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-net-page_per_vq.xml @@ -0,0 +1,34 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pci-root'/> + <interface type='user'> + <mac address='52:54:56:58:5a:5c'/> + <model type='virtio'/> + <driver page_per_vq='on'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </interface> + <interface type='user'> + <mac address='62:64:66:68:6a:6c'/> + <model type='virtio'/> + <driver page_per_vq='off'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </interface> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.err b/tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.err new file mode 100644 index 0000000000..475aa8be43 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.err @@ -0,0 +1 @@ +unsupported configuration: the page_per_vq setting is not supported with this QEMU binary diff --git a/tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.x86_64-latest.args new file mode 100644 index 0000000000..e1b18c1bd3 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.x86_64-latest.args @@ -0,0 +1,37 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \ +-cpu qemu64 \ +-m 214 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-audiodev id=audio1,driver=none \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 \ +-object '{"qom-type":"rng-random","id":"objrng0","filename":"/dev/random"}' \ +-device virtio-rng-pci,rng=objrng0,id=rng0,page-per-vq=on,bus=pci.0,addr=0x2 \ +-object '{"qom-type":"rng-random","id":"objrng1","filename":"/dev/random"}' \ +-device virtio-rng-pci,rng=objrng1,id=rng1,page-per-vq=off,bus=pci.0,addr=0x3 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.xml b/tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.xml new file mode 100644 index 0000000000..c93d70156c --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.xml @@ -0,0 +1,32 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pci-root'/> + <rng model='virtio'> + <backend model='random'>/dev/random</backend> + <driver page_per_vq='on'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </rng> + <rng model='virtio'> + <backend model='random'>/dev/random</backend> + <driver page_per_vq='off'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </rng> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/virtio-options-video-page_per_vq.err b/tests/qemuxml2argvdata/virtio-options-video-page_per_vq.err new file mode 100644 index 0000000000..475aa8be43 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-video-page_per_vq.err @@ -0,0 +1 @@ +unsupported configuration: the page_per_vq setting is not supported with this QEMU binary diff --git a/tests/qemuxml2argvdata/virtio-options-video-page_per_vq.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-options-video-page_per_vq.x86_64-latest.args new file mode 100644 index 0000000000..905f3fe388 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-video-page_per_vq.x86_64-latest.args @@ -0,0 +1,37 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \ +-cpu qemu64 \ +-m 214 \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-audiodev id=audio1,driver=none \ +-chardev socket,id=chr-vu-video0,fd=1729 \ +-chardev socket,id=chr-vu-video1,fd=1729 \ +-device vhost-user-vga,id=video0,max_outputs=1,chardev=chr-vu-video0,bus=pci.0,addr=0x2,page-per-vq=on \ +-device vhost-user-gpu-pci,id=video1,max_outputs=1,chardev=chr-vu-video1,bus=pci.0,addr=0x3,page-per-vq=off \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/virtio-options-video-page_per_vq.xml b/tests/qemuxml2argvdata/virtio-options-video-page_per_vq.xml new file mode 100644 index 0000000000..2d79932135 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-options-video-page_per_vq.xml @@ -0,0 +1,36 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <controller type='pci' index='0' model='pci-root'/> + <video> + <driver page_per_vq='on' name='vhostuser'/> + <model type='virtio' heads='1' primary='yes'> + <acceleration accel3d='yes' rendernode='/dev/dri/test'/> + </model> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </video> + <video> + <driver page_per_vq='off' name='vhostuser'/> + <model type='virtio' heads='1' primary='no'> + <acceleration accel3d='yes' rendernode='/dev/dri/test'/> + </model> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </video> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/virtio-options.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-options.x86_64-latest.args index 06a4520036..4b69080502 100644 --- a/tests/qemuxml2argvdata/virtio-options.x86_64-latest.args +++ b/tests/qemuxml2argvdata/virtio-options.x86_64-latest.args @@ -27,26 +27,26 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ -no-acpi \ -boot strict=on \ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ --device virtio-scsi-pci,iommu_platform=on,ats=on,packed=on,id=scsi0,bus=pci.0,addr=0x8 \ --device virtio-serial-pci,id=virtio-serial0,iommu_platform=on,ats=on,packed=on,bus=pci.0,addr=0x9 \ +-device virtio-scsi-pci,iommu_platform=on,ats=on,packed=on,page-per-vq=on,id=scsi0,bus=pci.0,addr=0x8 \ +-device virtio-serial-pci,id=virtio-serial0,iommu_platform=on,ats=on,packed=on,page-per-vq=on,bus=pci.0,addr=0x9 \ -blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/img1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \ --device virtio-blk-pci,iommu_platform=on,ats=on,packed=on,bus=pci.0,addr=0xa,drive=libvirt-1-format,id=virtio-disk0,bootindex=1 \ +-device virtio-blk-pci,iommu_platform=on,ats=on,packed=on,page-per-vq=on,bus=pci.0,addr=0xa,drive=libvirt-1-format,id=virtio-disk0,bootindex=1 \ -fsdev local,security_model=passthrough,id=fsdev-fs0,path=/export/fs1 \ --device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=fs1,iommu_platform=on,ats=on,packed=on,bus=pci.0,addr=0x3 \ +-device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=fs1,iommu_platform=on,ats=on,packed=on,page-per-vq=on,bus=pci.0,addr=0x3 \ -fsdev local,security_model=mapped,writeout=immediate,id=fsdev-fs1,path=/export/fs2 \ --device virtio-9p-pci,id=fs1,fsdev=fsdev-fs1,mount_tag=fs2,iommu_platform=on,ats=on,packed=on,bus=pci.0,addr=0x4 \ +-device virtio-9p-pci,id=fs1,fsdev=fsdev-fs1,mount_tag=fs2,iommu_platform=on,ats=on,packed=on,page-per-vq=on,bus=pci.0,addr=0x4 \ -netdev user,id=hostnet0 \ --device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:56:58:5a:5c,bus=pci.0,addr=0x6,iommu_platform=on,ats=on,packed=on \ --device virtio-mouse-pci,id=input0,bus=pci.0,addr=0xe,iommu_platform=on,ats=on,packed=on \ --device virtio-keyboard-pci,id=input1,bus=pci.0,addr=0x10,iommu_platform=on,ats=on,packed=on \ --device virtio-tablet-pci,id=input2,bus=pci.0,addr=0x11,iommu_platform=on,ats=on,packed=on \ --device virtio-input-host-pci,id=input3,evdev=/dev/input/event1234,bus=pci.0,addr=0x12,iommu_platform=on,ats=on,packed=on \ +-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:56:58:5a:5c,bus=pci.0,addr=0x6,iommu_platform=on,ats=on,packed=on,page-per-vq=on \ +-device virtio-mouse-pci,id=input0,bus=pci.0,addr=0xe,iommu_platform=on,ats=on,packed=on,page-per-vq=on \ +-device virtio-keyboard-pci,id=input1,bus=pci.0,addr=0x10,iommu_platform=on,ats=on,packed=on,page-per-vq=on \ +-device virtio-tablet-pci,id=input2,bus=pci.0,addr=0x11,iommu_platform=on,ats=on,packed=on,page-per-vq=on \ +-device virtio-input-host-pci,id=input3,evdev=/dev/input/event1234,bus=pci.0,addr=0x12,iommu_platform=on,ats=on,packed=on,page-per-vq=on \ -audiodev id=audio1,driver=none \ -chardev socket,id=chr-vu-video0,fd=1729 \ --device vhost-user-vga,id=video0,max_outputs=1,chardev=chr-vu-video0,bus=pci.0,addr=0x2,iommu_platform=on,ats=on,packed=on \ --device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0xc,iommu_platform=on,ats=on,packed=on \ +-device vhost-user-vga,id=video0,max_outputs=1,chardev=chr-vu-video0,bus=pci.0,addr=0x2,iommu_platform=on,ats=on,packed=on,page-per-vq=on \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0xc,iommu_platform=on,ats=on,packed=on,page-per-vq=on \ -object '{"qom-type":"rng-random","id":"objrng0","filename":"/dev/random"}' \ --device virtio-rng-pci,rng=objrng0,id=rng0,iommu_platform=on,ats=on,packed=on,bus=pci.0,addr=0xd \ +-device virtio-rng-pci,rng=objrng0,id=rng0,iommu_platform=on,ats=on,packed=on,page-per-vq=on,bus=pci.0,addr=0xd \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxml2argvdata/virtio-options.xml b/tests/qemuxml2argvdata/virtio-options.xml index 9c9b80d5c4..59e293d8e9 100644 --- a/tests/qemuxml2argvdata/virtio-options.xml +++ b/tests/qemuxml2argvdata/virtio-options.xml @@ -18,7 +18,7 @@ <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> <disk type='file' device='disk'> - <driver name='qemu' type='raw' iommu='on' ats='on' packed='on'/> + <driver name='qemu' type='raw' iommu='on' ats='on' packed='on' page_per_vq='on'/> <source file='/var/lib/libvirt/images/img1'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> @@ -30,22 +30,22 @@ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='scsi' index='0' model='virtio-scsi'> - <driver iommu='on' ats='on' packed='on'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </controller> <controller type='pci' index='0' model='pci-root'/> <controller type='virtio-serial' index='0'> - <driver iommu='on' ats='on' packed='on'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> </controller> <filesystem type='mount' accessmode='passthrough'> - <driver iommu='on' ats='on' packed='on'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on'/> <source dir='/export/fs1'/> <target dir='fs1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </filesystem> <filesystem type='mount' accessmode='mapped'> - <driver type='path' wrpolicy='immediate' iommu='on' ats='on' packed='on'/> + <driver type='path' wrpolicy='immediate' iommu='on' ats='on' packed='on' page_per_vq='on'/> <source dir='/export/fs2'/> <target dir='fs2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> @@ -53,23 +53,23 @@ <interface type='user'> <mac address='52:54:56:58:5a:5c'/> <model type='virtio'/> - <driver iommu='on' ats='on' packed='on'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </interface> <input type='mouse' bus='virtio'> - <driver iommu='on' ats='on' packed='on'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/> </input> <input type='keyboard' bus='virtio'> - <driver iommu='on' ats='on' packed='on'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/> </input> <input type='tablet' bus='virtio'> - <driver iommu='on' ats='on' packed='on'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x11' function='0x0'/> </input> <input type='passthrough' bus='virtio'> - <driver iommu='on' ats='on' packed='on'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on'/> <source evdev='/dev/input/event1234'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x12' function='0x0'/> </input> @@ -77,7 +77,7 @@ <input type='keyboard' bus='ps2'/> <audio id='1' type='none'/> <video> - <driver iommu='on' ats='on' packed='on' name='vhostuser'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on' name='vhostuser'/> <model type='virtio' heads='1' primary='yes'> <acceleration accel3d='yes' rendernode='/dev/dri/test'/> </model> @@ -85,11 +85,11 @@ </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/> - <driver iommu='on' ats='on' packed='on'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on'/> </memballoon> <rng model='virtio'> <backend model='random'>/dev/random</backend> - <driver iommu='on' ats='on' packed='on'/> + <driver iommu='on' ats='on' packed='on' page_per_vq='on'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/> </rng> </devices> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 3b331d5fd4..67ec433a06 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -3348,6 +3348,14 @@ mymain(void) DO_TEST_CAPS_LATEST("virtio-options-net-packed"); DO_TEST_CAPS_LATEST("virtio-options-rng-packed"); DO_TEST_CAPS_LATEST("virtio-options-video-packed"); + DO_TEST_CAPS_LATEST("virtio-options-disk-page_per_vq"); + DO_TEST_CAPS_LATEST("virtio-options-controller-page_per_vq"); + DO_TEST_CAPS_LATEST("virtio-options-fs-page_per_vq"); + DO_TEST_CAPS_LATEST("virtio-options-net-page_per_vq"); + DO_TEST_CAPS_LATEST("virtio-options-memballoon-page_per_vq"); + DO_TEST_CAPS_LATEST("virtio-options-video-page_per_vq"); + DO_TEST_CAPS_LATEST("virtio-options-input-page_per_vq"); + DO_TEST_CAPS_LATEST("virtio-options-rng-page_per_vq"); DO_TEST_PARSE_ERROR("virtio-options-controller-iommu", QEMU_CAPS_VIRTIO_SCSI); DO_TEST_PARSE_ERROR_NOCAPS("virtio-options-disk-iommu"); DO_TEST_PARSE_ERROR_NOCAPS("virtio-options-fs-iommu"); @@ -3388,6 +3396,20 @@ mymain(void) QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_VIRTIO_GPU_VIRGL, QEMU_CAPS_DEVICE_VHOST_USER_GPU); + DO_TEST_PARSE_ERROR("virtio-options-controller-page_per_vq", QEMU_CAPS_VIRTIO_SCSI); + DO_TEST_PARSE_ERROR_NOCAPS("virtio-options-disk-page_per_vq"); + DO_TEST_PARSE_ERROR_NOCAPS("virtio-options-fs-page_per_vq"); + DO_TEST_PARSE_ERROR("virtio-options-input-page_per_vq", QEMU_CAPS_VIRTIO_MOUSE, + QEMU_CAPS_VIRTIO_KEYBOARD); + DO_TEST_PARSE_ERROR_NOCAPS("virtio-options-memballoon-page_per_vq"); + DO_TEST_PARSE_ERROR_NOCAPS("virtio-options-memballoon-freepage-reporting"); + DO_TEST_PARSE_ERROR_NOCAPS("virtio-options-net-page_per_vq"); + DO_TEST_PARSE_ERROR("virtio-options-rng-page_per_vq", QEMU_CAPS_DEVICE_VIRTIO_RNG, + QEMU_CAPS_OBJECT_RNG_RANDOM); + DO_TEST_PARSE_ERROR("virtio-options-video-page_per_vq", QEMU_CAPS_DEVICE_VIRTIO_GPU, + QEMU_CAPS_DEVICE_VIRTIO_GPU, + QEMU_CAPS_VIRTIO_GPU_VIRGL, + QEMU_CAPS_DEVICE_VHOST_USER_GPU); DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_KVM); -- 2.31.1

On 9/6/21 4:06 PM, Han Han wrote:
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1925363
Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_command.c | 4 ++ src/qemu/qemu_hotplug.c | 3 +- src/qemu/qemu_validate.c | 8 ++++ .../virtio-options-controller-page_per_vq.err | 1 + ...-controller-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-controller-page_per_vq.xml | 38 ++++++++++++++++++ .../virtio-options-disk-page_per_vq.err | 1 + ...ptions-disk-page_per_vq.x86_64-latest.args | 39 +++++++++++++++++++ .../virtio-options-disk-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-fs-page_per_vq.err | 1 + ...-options-fs-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-fs-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-input-page_per_vq.err | 1 + ...tions-input-page_per_vq.x86_64-latest.args | 35 +++++++++++++++++ .../virtio-options-input-page_per_vq.xml | 30 ++++++++++++++ .../virtio-options-memballoon-page_per_vq.err | 1 + ...-memballoon-page_per_vq.x86_64-latest.args | 33 ++++++++++++++++ .../virtio-options-memballoon-page_per_vq.xml | 23 +++++++++++ .../virtio-options-net-page_per_vq.err | 1 + ...options-net-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-net-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-rng-page_per_vq.err | 1 + ...options-rng-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-rng-page_per_vq.xml | 32 +++++++++++++++ .../virtio-options-video-page_per_vq.err | 1 + ...tions-video-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-video-page_per_vq.xml | 36 +++++++++++++++++ .../virtio-options.x86_64-latest.args | 26 ++++++------- tests/qemuxml2argvdata/virtio-options.xml | 26 ++++++------- tests/qemuxml2argvtest.c | 22 +++++++++++ 30 files changed, 623 insertions(+), 27 deletions(-) create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.xml
Wow, that's a lot of test cases. Do we need all of them?
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b230314f7f..549f11dbe8 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -645,6 +645,10 @@ qemuBuildVirtioOptionsStr(virBuffer *buf, virBufferAsprintf(buf, ",packed=%s", virTristateSwitchTypeToString(virtio->packed)); } + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(buf, ",page-per-vq=%s", + virTristateSwitchTypeToString(virtio->page_per_vq)); + } }
static int diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9c16ab4567..f2553a6831 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3678,7 +3678,8 @@ qemuDomainChangeNet(virQEMUDriver *driver, (olddev->virtio && newdev->virtio && (olddev->virtio->iommu != newdev->virtio->iommu || olddev->virtio->ats != newdev->virtio->ats || - olddev->virtio->packed != newdev->virtio->packed))) { + olddev->virtio->packed != newdev->virtio->packed || + olddev->virtio->page_per_vq != newdev->virtio->page_per_vq))) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("cannot modify virtio network device driver options")); goto cleanup; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 1a470f1ff5..93e8b55651 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1478,6 +1478,14 @@ qemuValidateDomainVirtioOptions(const virDomainVirtioOptions *virtio, "QEMU binary")); return -1; } + + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PAGE_PER_VQ)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("the page_per_vq setting is not supported with this " + "QEMU binary"));
While we like lines to be 80 chars most we have an exception for error messages so that they can be easily 'git grep'-ped. I can fix this before pushing, but please let me know if we really need all the test cases. They seem to be very similar thus I'm in doubt. Michal

On Thu, Sep 9, 2021 at 6:51 AM Michal Prívozník <mprivozn@redhat.com> wrote:
On 9/6/21 4:06 PM, Han Han wrote:
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1925363
Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_command.c | 4 ++ src/qemu/qemu_hotplug.c | 3 +- src/qemu/qemu_validate.c | 8 ++++ .../virtio-options-controller-page_per_vq.err | 1 + ...-controller-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-controller-page_per_vq.xml | 38 ++++++++++++++++++ .../virtio-options-disk-page_per_vq.err | 1 + ...ptions-disk-page_per_vq.x86_64-latest.args | 39 +++++++++++++++++++ .../virtio-options-disk-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-fs-page_per_vq.err | 1 + ...-options-fs-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-fs-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-input-page_per_vq.err | 1 + ...tions-input-page_per_vq.x86_64-latest.args | 35 +++++++++++++++++ .../virtio-options-input-page_per_vq.xml | 30 ++++++++++++++ .../virtio-options-memballoon-page_per_vq.err | 1 + ...-memballoon-page_per_vq.x86_64-latest.args | 33 ++++++++++++++++ .../virtio-options-memballoon-page_per_vq.xml | 23 +++++++++++ .../virtio-options-net-page_per_vq.err | 1 + ...options-net-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-net-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-rng-page_per_vq.err | 1 + ...options-rng-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-rng-page_per_vq.xml | 32 +++++++++++++++ .../virtio-options-video-page_per_vq.err | 1 + ...tions-video-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-video-page_per_vq.xml | 36 +++++++++++++++++ .../virtio-options.x86_64-latest.args | 26 ++++++------- tests/qemuxml2argvdata/virtio-options.xml | 26 ++++++------- tests/qemuxml2argvtest.c | 22 +++++++++++ 30 files changed, 623 insertions(+), 27 deletions(-) create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.xml
Wow, that's a lot of test cases. Do we need all of them?
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b230314f7f..549f11dbe8 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -645,6 +645,10 @@ qemuBuildVirtioOptionsStr(virBuffer *buf, virBufferAsprintf(buf, ",packed=%s", virTristateSwitchTypeToString(virtio->packed)); } + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(buf, ",page-per-vq=%s", + virTristateSwitchTypeToString(virtio->page_per_vq)); + } }
static int diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9c16ab4567..f2553a6831 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3678,7 +3678,8 @@ qemuDomainChangeNet(virQEMUDriver *driver, (olddev->virtio && newdev->virtio && (olddev->virtio->iommu != newdev->virtio->iommu || olddev->virtio->ats != newdev->virtio->ats || - olddev->virtio->packed != newdev->virtio->packed))) { + olddev->virtio->packed != newdev->virtio->packed || + olddev->virtio->page_per_vq != newdev->virtio->page_per_vq))) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("cannot modify virtio network device driver options")); goto cleanup; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 1a470f1ff5..93e8b55651 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1478,6 +1478,14 @@ qemuValidateDomainVirtioOptions(const virDomainVirtioOptions *virtio, "QEMU binary")); return -1; } + + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PAGE_PER_VQ)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("the page_per_vq setting is not supported with this " + "QEMU binary"));
While we like lines to be 80 chars most we have an exception for error messages so that they can be easily 'git grep'-ped.
I can fix this before pushing, but please let me know if we really need all the test cases. They seem to be very similar thus I'm in doubt.
Michal
Also, please fix the typo in the commit message: "paeg" -> "page" Jonathon

On Fri, Sep 17, 2021 at 3:17 PM Jonathon Jongsma <jjongsma@redhat.com> wrote:
On Thu, Sep 9, 2021 at 6:51 AM Michal Prívozník <mprivozn@redhat.com> wrote:
On 9/6/21 4:06 PM, Han Han wrote:
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1925363
Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_command.c | 4 ++ src/qemu/qemu_hotplug.c | 3 +- src/qemu/qemu_validate.c | 8 ++++ .../virtio-options-controller-page_per_vq.err | 1 + ...-controller-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-controller-page_per_vq.xml | 38 ++++++++++++++++++ .../virtio-options-disk-page_per_vq.err | 1 + ...ptions-disk-page_per_vq.x86_64-latest.args | 39 +++++++++++++++++++ .../virtio-options-disk-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-fs-page_per_vq.err | 1 + ...-options-fs-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-fs-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-input-page_per_vq.err | 1 + ...tions-input-page_per_vq.x86_64-latest.args | 35 +++++++++++++++++ .../virtio-options-input-page_per_vq.xml | 30 ++++++++++++++ .../virtio-options-memballoon-page_per_vq.err | 1 + ...-memballoon-page_per_vq.x86_64-latest.args | 33 ++++++++++++++++ .../virtio-options-memballoon-page_per_vq.xml | 23 +++++++++++ .../virtio-options-net-page_per_vq.err | 1 + ...options-net-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-net-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-rng-page_per_vq.err | 1 + ...options-rng-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-rng-page_per_vq.xml | 32 +++++++++++++++ .../virtio-options-video-page_per_vq.err | 1 + ...tions-video-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-video-page_per_vq.xml | 36 +++++++++++++++++ .../virtio-options.x86_64-latest.args | 26 ++++++------- tests/qemuxml2argvdata/virtio-options.xml | 26 ++++++------- tests/qemuxml2argvtest.c | 22 +++++++++++ 30 files changed, 623 insertions(+), 27 deletions(-) create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.xml
Wow, that's a lot of test cases. Do we need all of them?
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b230314f7f..549f11dbe8 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -645,6 +645,10 @@ qemuBuildVirtioOptionsStr(virBuffer *buf, virBufferAsprintf(buf, ",packed=%s", virTristateSwitchTypeToString(virtio->packed)); } + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(buf, ",page-per-vq=%s", + virTristateSwitchTypeToString(virtio->page_per_vq)); + } }
static int diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9c16ab4567..f2553a6831 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3678,7 +3678,8 @@ qemuDomainChangeNet(virQEMUDriver *driver, (olddev->virtio && newdev->virtio && (olddev->virtio->iommu != newdev->virtio->iommu || olddev->virtio->ats != newdev->virtio->ats || - olddev->virtio->packed != newdev->virtio->packed))) { + olddev->virtio->packed != newdev->virtio->packed || + olddev->virtio->page_per_vq != newdev->virtio->page_per_vq))) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("cannot modify virtio network device driver options")); goto cleanup; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 1a470f1ff5..93e8b55651 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1478,6 +1478,14 @@ qemuValidateDomainVirtioOptions(const virDomainVirtioOptions *virtio, "QEMU binary")); return -1; } + + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PAGE_PER_VQ)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("the page_per_vq setting is not supported with this " + "QEMU binary"));
While we like lines to be 80 chars most we have an exception for error messages so that they can be easily 'git grep'-ped.
I can fix this before pushing, but please let me know if we really need all the test cases. They seem to be very similar thus I'm in doubt.
Michal
Also, please fix the typo in the commit message: "paeg" -> "page"
Jonathon
Han, this patch series has been sitting for a few weeks now. Would you like help tying up the final loose ends and getting it upstream? Jonathon

On Wed, Oct 6, 2021 at 3:27 AM Jonathon Jongsma <jjongsma@redhat.com> wrote:
On Fri, Sep 17, 2021 at 3:17 PM Jonathon Jongsma <jjongsma@redhat.com> wrote:
On Thu, Sep 9, 2021 at 6:51 AM Michal Prívozník <mprivozn@redhat.com>
wrote:
On 9/6/21 4:06 PM, Han Han wrote:
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1925363
Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_command.c | 4 ++ src/qemu/qemu_hotplug.c | 3 +- src/qemu/qemu_validate.c | 8 ++++ .../virtio-options-controller-page_per_vq.err | 1 + ...-controller-page_per_vq.x86_64-latest.args | 37
++++++++++++++++++
.../virtio-options-controller-page_per_vq.xml | 38 ++++++++++++++++++ .../virtio-options-disk-page_per_vq.err | 1 + ...ptions-disk-page_per_vq.x86_64-latest.args | 39 +++++++++++++++++++ .../virtio-options-disk-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-fs-page_per_vq.err | 1 + ...-options-fs-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-fs-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-input-page_per_vq.err | 1 + ...tions-input-page_per_vq.x86_64-latest.args | 35 +++++++++++++++++ .../virtio-options-input-page_per_vq.xml | 30 ++++++++++++++ .../virtio-options-memballoon-page_per_vq.err | 1 + ...-memballoon-page_per_vq.x86_64-latest.args | 33 ++++++++++++++++ .../virtio-options-memballoon-page_per_vq.xml | 23 +++++++++++ .../virtio-options-net-page_per_vq.err | 1 + ...options-net-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-net-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-rng-page_per_vq.err | 1 + ...options-rng-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-rng-page_per_vq.xml | 32 +++++++++++++++ .../virtio-options-video-page_per_vq.err | 1 + ...tions-video-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-video-page_per_vq.xml | 36 +++++++++++++++++ .../virtio-options.x86_64-latest.args | 26 ++++++------- tests/qemuxml2argvdata/virtio-options.xml | 26 ++++++------- tests/qemuxml2argvtest.c | 22 +++++++++++ 30 files changed, 623 insertions(+), 27 deletions(-) create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.xml
Wow, that's a lot of test cases. Do we need all of them?
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b230314f7f..549f11dbe8 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -645,6 +645,10 @@ qemuBuildVirtioOptionsStr(virBuffer *buf, virBufferAsprintf(buf, ",packed=%s",
virTristateSwitchTypeToString(virtio->packed));
} + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(buf, ",page-per-vq=%s", +
virTristateSwitchTypeToString(virtio->page_per_vq));
+ } }
static int diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9c16ab4567..f2553a6831 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3678,7 +3678,8 @@ qemuDomainChangeNet(virQEMUDriver *driver, (olddev->virtio && newdev->virtio && (olddev->virtio->iommu != newdev->virtio->iommu || olddev->virtio->ats != newdev->virtio->ats || - olddev->virtio->packed != newdev->virtio->packed))) { + olddev->virtio->packed != newdev->virtio->packed || + olddev->virtio->page_per_vq != newdev->virtio->page_per_vq))) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("cannot modify virtio network device driver options")); goto cleanup; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 1a470f1ff5..93e8b55651 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1478,6 +1478,14 @@ qemuValidateDomainVirtioOptions(const virDomainVirtioOptions *virtio, "QEMU binary")); return -1; } + + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PAGE_PER_VQ)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("the page_per_vq setting is not supported with this " + "QEMU binary"));
While we like lines to be 80 chars most we have an exception for error messages so that they can be easily 'git grep'-ped.
I can fix this before pushing, but please let me know if we really need all the test cases. They seem to be very similar thus I'm in doubt.
Michal
Also, please fix the typo in the commit message: "paeg" -> "page"
Jonathon
Han, this patch series has been sitting for a few weeks now. Would you like help tying up the final loose ends and getting it upstream?
OK. New version: https://listman.redhat.com/archives/libvir-list/2021-October/msg00489.html
Jonathon

On Thu, Sep 9, 2021 at 7:43 PM Michal Prívozník <mprivozn@redhat.com> wrote:
On 9/6/21 4:06 PM, Han Han wrote:
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1925363
Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_command.c | 4 ++ src/qemu/qemu_hotplug.c | 3 +- src/qemu/qemu_validate.c | 8 ++++ .../virtio-options-controller-page_per_vq.err | 1 + ...-controller-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-controller-page_per_vq.xml | 38 ++++++++++++++++++ .../virtio-options-disk-page_per_vq.err | 1 + ...ptions-disk-page_per_vq.x86_64-latest.args | 39 +++++++++++++++++++ .../virtio-options-disk-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-fs-page_per_vq.err | 1 + ...-options-fs-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-fs-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-input-page_per_vq.err | 1 + ...tions-input-page_per_vq.x86_64-latest.args | 35 +++++++++++++++++ .../virtio-options-input-page_per_vq.xml | 30 ++++++++++++++ .../virtio-options-memballoon-page_per_vq.err | 1 + ...-memballoon-page_per_vq.x86_64-latest.args | 33 ++++++++++++++++ .../virtio-options-memballoon-page_per_vq.xml | 23 +++++++++++ .../virtio-options-net-page_per_vq.err | 1 + ...options-net-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-net-page_per_vq.xml | 34 ++++++++++++++++ .../virtio-options-rng-page_per_vq.err | 1 + ...options-rng-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-rng-page_per_vq.xml | 32 +++++++++++++++ .../virtio-options-video-page_per_vq.err | 1 + ...tions-video-page_per_vq.x86_64-latest.args | 37 ++++++++++++++++++ .../virtio-options-video-page_per_vq.xml | 36 +++++++++++++++++ .../virtio-options.x86_64-latest.args | 26 ++++++------- tests/qemuxml2argvdata/virtio-options.xml | 26 ++++++------- tests/qemuxml2argvtest.c | 22 +++++++++++ 30 files changed, 623 insertions(+), 27 deletions(-) create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-controller-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-disk-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-fs-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-input-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-memballoon-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-net-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-rng-page_per_vq.xml create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.err create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/virtio-options-video-page_per_vq.xml
Wow, that's a lot of test cases. Do we need all of them?
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b230314f7f..549f11dbe8 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -645,6 +645,10 @@ qemuBuildVirtioOptionsStr(virBuffer *buf, virBufferAsprintf(buf, ",packed=%s",
virTristateSwitchTypeToString(virtio->packed));
} + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(buf, ",page-per-vq=%s", +
+ } }
static int diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9c16ab4567..f2553a6831 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -3678,7 +3678,8 @@ qemuDomainChangeNet(virQEMUDriver *driver, (olddev->virtio && newdev->virtio && (olddev->virtio->iommu != newdev->virtio->iommu || olddev->virtio->ats != newdev->virtio->ats || - olddev->virtio->packed != newdev->virtio->packed))) { + olddev->virtio->packed != newdev->virtio->packed || + olddev->virtio->page_per_vq != newdev->virtio->page_per_vq))) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", _("cannot modify virtio network device driver
virTristateSwitchTypeToString(virtio->page_per_vq)); options"));
goto cleanup; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 1a470f1ff5..93e8b55651 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1478,6 +1478,14 @@ qemuValidateDomainVirtioOptions(const
virDomainVirtioOptions *virtio,
"QEMU binary")); return -1; } + + if (virtio->page_per_vq != VIR_TRISTATE_SWITCH_ABSENT && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PAGE_PER_VQ)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("the page_per_vq setting is not supported
with this "
+ "QEMU binary"));
While we like lines to be 80 chars most we have an exception for error messages so that they can be easily 'git grep'-ped.
I can fix this before pushing, but please let me know if we really need all the test cases. They seem to be very similar thus I'm in doubt.
I recheck it and dropped some cases in v2: https://listman.redhat.com/archives/libvir-list/2021-October/msg00492.html BTW, is there any way to add Gavi(gavi@nvidia.com) as co-writer when merging the patches? Because the most contents of docs/formatdomain.rst in the patch 2/3 come from his patch https://listman.redhat.com/archives/libvir-list/2021-May/msg00143.html
Michal

On 10/9/21 11:47 AM, Han Han wrote:
On Thu, Sep 9, 2021 at 7:43 PM Michal Prívozník <mprivozn@redhat.com> wrote:
On 9/6/21 4:06 PM, Han Han wrote:
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1925363
Signed-off-by: Han Han <hhan@redhat.com> ---
BTW, is there any way to add Gavi(gavi@nvidia.com) as co-writer when merging the patches? Because the most contents of docs/formatdomain.rst in the patch 2/3 come from his patch https://listman.redhat.com/archives/libvir-list/2021-May/msg00143.html
You can keep his Signed-off-by line and add yours. But since you posted v2 I can do that during review. Michal
participants (3)
-
Han Han
-
Jonathon Jongsma
-
Michal Prívozník