diff --git a/Compatible-with-libvirt-io_uring-function.patch b/Compatible-with-libvirt-io_uring-function.patch new file mode 100644 index 0000000000000000000000000000000000000000..c94961c7cb93c9ccd4bfc60b84a7586bd3987847 --- /dev/null +++ b/Compatible-with-libvirt-io_uring-function.patch @@ -0,0 +1,543 @@ +From 231f493a0c97fe9c75495b831052e850d501b11f Mon Sep 17 00:00:00 2001 +From: weishaokun +Date: Thu, 24 Nov 2022 10:00:14 +0800 +Subject: [PATCH] Compatible with libvirt io_uring function + +--- + docs/schemas/domaincommon.rng | 1 + + src/conf/domain_conf.c | 1 + + src/conf/domain_conf.h | 1 + + src/qemu/qemu_capabilities.c | 2 + + src/qemu/qemu_capabilities.h | 1 + + src/qemu/qemu_command.c | 9 +++ + tests/qemublocktest.c | 1 + + ...le-backing_basic-aio_io_uring-srconly.json | 44 +++++++++++++ + .../file-backing_basic-aio_io_uring.json | 66 +++++++++++++++++++ + .../file-backing_basic-aio_io_uring.xml | 47 +++++++++++++ + .../caps_5.0.0.aarch64.replies | 3 +- + .../caps_5.0.0.aarch64.xml | 1 + + .../caps_5.0.0.ppc64.replies | 3 +- + .../qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + + .../caps_5.0.0.x86_64.replies | 3 +- + .../caps_5.0.0.x86_64.xml | 1 + + .../disk-aio-io_uring.x86_64-latest.args | 41 ++++++++++++ + tests/qemuxml2argvdata/disk-aio-io_uring.xml | 30 +++++++++ + tests/qemuxml2argvtest.c | 1 + + .../disk-aio-io_uring.x86_64-latest.xml | 39 +++++++++++ + tests/qemuxml2xmltest.c | 1 + + 21 files changed, 294 insertions(+), 3 deletions(-) + create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring-srconly.json + create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.json + create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.xml + create mode 100644 tests/qemuxml2argvdata/disk-aio-io_uring.x86_64-latest.args + create mode 100644 tests/qemuxml2argvdata/disk-aio-io_uring.xml + create mode 100644 tests/qemuxml2xmloutdata/disk-aio-io_uring.x86_64-latest.xml + +diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng +index 1807df5..ebc9b0c 100644 +--- a/docs/schemas/domaincommon.rng ++++ b/docs/schemas/domaincommon.rng +@@ -2278,6 +2278,7 @@ + + threads + native ++ io_uring + + + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index b60b9d3..ca516c6 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -363,6 +363,7 @@ VIR_ENUM_IMPL(virDomainDiskIo, + "default", + "native", + "threads", ++ "io_uring", + ); + + VIR_ENUM_IMPL(virDomainDeviceSGIO, +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index c0a323d..d67e515 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -422,6 +422,7 @@ typedef enum { + VIR_DOMAIN_DISK_IO_DEFAULT = 0, + VIR_DOMAIN_DISK_IO_NATIVE, + VIR_DOMAIN_DISK_IO_THREADS, ++ VIR_DOMAIN_DISK_IO_URING, + + VIR_DOMAIN_DISK_IO_LAST + } virDomainDiskIo; +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index 790b67a..82bd676 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -574,6 +574,7 @@ VIR_ENUM_IMPL(virQEMUCaps, + "migration-param.xbzrle-cache-size", + + "object.qapified", ++ "aio.io_uring", + ); + + +@@ -1462,6 +1463,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = { + { "migrate-set-parameters/arg-type/downtime-limit", QEMU_CAPS_MIGRATION_PARAM_DOWNTIME }, + { "migrate-set-parameters/arg-type/xbzrle-cache-size", QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE }, + { "object-add/arg-type/qom-type/^secret", QEMU_CAPS_OBJECT_QAPIFIED }, ++ { "blockdev-add/arg-type/+file/aio/^io_uring", QEMU_CAPS_AIO_IO_URING }, + }; + + typedef struct _virQEMUCapsObjectTypeProps virQEMUCapsObjectTypeProps; +diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h +index ffb366f..0e64333 100644 +--- a/src/qemu/qemu_capabilities.h ++++ b/src/qemu/qemu_capabilities.h +@@ -555,6 +555,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ + QEMU_CAPS_MIGRATION_PARAM_XBZRLE_CACHE_SIZE, /* xbzrle-cache-size field in migrate-set-parameters */ + + QEMU_CAPS_OBJECT_QAPIFIED, /* parameters for object-add are formally described */ ++ QEMU_CAPS_AIO_IO_URING, /* -blockdev {...,"aio":"io_uring",...} */ + + QEMU_CAPS_LAST /* this must always be the last item */ + } virQEMUCapsFlags; +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 42f6e10..dda984b 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -1462,6 +1462,15 @@ qemuCheckDiskConfig(virDomainDiskDefPtr disk, + _("detect_zeroes is not supported by this QEMU binary")); + return -1; + } ++ ++ if (disk->iomode == VIR_DOMAIN_DISK_IO_URING) { ++ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_AIO_IO_URING)) { ++ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", ++ _("io uring is not supported by this QEMU binary")); ++ return -1; ++ } ++ } ++ + } + + if (disk->serial && +diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c +index 124eaea..0eac21f 100644 +--- a/tests/qemublocktest.c ++++ b/tests/qemublocktest.c +@@ -1198,6 +1198,7 @@ mymain(void) + TEST_DISK_TO_JSON("dir-fat-floppy"); + TEST_DISK_TO_JSON("file-raw-aio_native"); + TEST_DISK_TO_JSON("file-backing_basic-aio_threads"); ++ TEST_DISK_TO_JSON("file-backing_basic-aio_io_uring"); + TEST_DISK_TO_JSON("file-raw-luks"); + TEST_DISK_TO_JSON("file-qcow2-backing-chain-noopts"); + TEST_DISK_TO_JSON("file-qcow2-backing-chain-unterminated"); +diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring-srconly.json +new file mode 100644 +index 0000000..65a3773 +--- /dev/null ++++ b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring-srconly.json +@@ -0,0 +1,44 @@ ++( ++ source only properties: ++ { ++ "driver": "file", ++ "filename": "/var/lib/libvirt/images/a" ++ } ++ backing store string: ++ /var/lib/libvirt/images/a ++) ++( ++ source only properties: ++ { ++ "driver": "file", ++ "filename": "/var/lib/libvirt/images/b" ++ } ++ backing store string: ++ /var/lib/libvirt/images/b ++) ++( ++ source only properties: ++ { ++ "driver": "gluster", ++ "volume": "images", ++ "path": "c", ++ "server": [ ++ { ++ "type": "inet", ++ "host": "test.org", ++ "port": "24007" ++ } ++ ] ++ } ++ backing store string: ++ gluster://test.org:24007/images/c ++) ++( ++ source only properties: ++ { ++ "driver": "file", ++ "filename": "/var/lib/libvirt/images/d" ++ } ++ backing store string: ++ /var/lib/libvirt/images/d ++) +diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.json b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.json +new file mode 100644 +index 0000000..f510c43 +--- /dev/null ++++ b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.json +@@ -0,0 +1,66 @@ ++{ ++ "node-name": "node-a-f", ++ "read-only": false, ++ "driver": "qcow", ++ "file": "node-a-s", ++ "backing": "node-b-f" ++} ++{ ++ "driver": "file", ++ "filename": "/var/lib/libvirt/images/a", ++ "aio": "io_uring", ++ "node-name": "node-a-s", ++ "auto-read-only": true, ++ "discard": "unmap" ++} ++{ ++ "node-name": "node-b-f", ++ "read-only": true, ++ "driver": "qed", ++ "file": "node-b-s", ++ "backing": "node-c-f" ++} ++{ ++ "driver": "file", ++ "filename": "/var/lib/libvirt/images/b", ++ "aio": "io_uring", ++ "node-name": "node-b-s", ++ "auto-read-only": true, ++ "discard": "unmap" ++} ++{ ++ "node-name": "node-c-f", ++ "read-only": true, ++ "driver": "vmdk", ++ "file": "node-c-s", ++ "backing": "node-d-f" ++} ++{ ++ "driver": "gluster", ++ "volume": "images", ++ "path": "c", ++ "server": [ ++ { ++ "type": "inet", ++ "host": "test.org", ++ "port": "24007" ++ } ++ ], ++ "node-name": "node-c-s", ++ "auto-read-only": true, ++ "discard": "unmap" ++} ++{ ++ "node-name": "node-d-f", ++ "read-only": true, ++ "driver": "raw", ++ "file": "node-d-s" ++} ++{ ++ "driver": "file", ++ "filename": "/var/lib/libvirt/images/d", ++ "aio": "io_uring", ++ "node-name": "node-d-s", ++ "auto-read-only": true, ++ "discard": "unmap" ++} +diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.xml b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.xml +new file mode 100644 +index 0000000..610c091 +--- /dev/null ++++ b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.xml +@@ -0,0 +1,47 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies +index e848860..9b38ef5 100644 +--- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies ++++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies +@@ -19232,7 +19232,8 @@ + "meta-type": "enum", + "values": [ + "threads", +- "native" ++ "native", ++ "io_uring" + ] + }, + { +diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml +index af282f3..88365dd 100644 +--- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml ++++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml +@@ -188,6 +188,7 @@ + + + ++ + 4002050 + 0 + 61700241 +diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies +index 9e54e1f..fb03fab 100644 +--- a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies ++++ b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies +@@ -20735,7 +20735,8 @@ + "meta-type": "enum", + "values": [ + "threads", +- "native" ++ "native", ++ "io_uring" + ] + }, + { +diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml +index 6842b3c..9a76ab6 100644 +--- a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml ++++ b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml +@@ -193,6 +193,7 @@ + + + ++ + 4002050 + 0 + 42900241 +diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies +index 43ccf54..3d7fb58 100644 +--- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies ++++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies +@@ -21449,7 +21449,8 @@ + "meta-type": "enum", + "values": [ + "threads", +- "native" ++ "native", ++ "io_uring" + ] + }, + { +diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml +index 577b96e..0106e60 100644 +--- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml ++++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml +@@ -230,6 +230,7 @@ + + + ++ + 4002050 + 0 + 43100241 +diff --git a/tests/qemuxml2argvdata/disk-aio-io_uring.x86_64-latest.args b/tests/qemuxml2argvdata/disk-aio-io_uring.x86_64-latest.args +new file mode 100644 +index 0000000..0bcf8f5 +--- /dev/null ++++ b/tests/qemuxml2argvdata/disk-aio-io_uring.x86_64-latest.args +@@ -0,0 +1,41 @@ ++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 \ ++QEMU_AUDIO_DRV=none \ ++/usr/bin/qemu-system-x86_64 \ ++-name guest=QEMUGuest1,debug-threads=on \ ++-S \ ++-object secret,id=masterKey0,format=raw,\ ++file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ ++-machine pc,accel=tcg,usb=off,dump-guest-core=off \ ++-cpu qemu64 \ ++-m 214 \ ++-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,nowait \ ++-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":"host_device","filename":"/dev/HostVG/QEMUGuest1",\ ++"aio":"io_uring","node-name":"libvirt-1-storage","auto-read-only":true,\ ++"discard":"unmap"}' \ ++-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"qcow2",\ ++"file":"libvirt-1-storage"}' \ ++-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x9,drive=libvirt-1-format,\ ++id=virtio-disk0,bootindex=1 \ ++-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \ ++-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ ++resourcecontrol=deny \ ++-msg timestamp=on +diff --git a/tests/qemuxml2argvdata/disk-aio-io_uring.xml b/tests/qemuxml2argvdata/disk-aio-io_uring.xml +new file mode 100644 +index 0000000..9e6ea62 +--- /dev/null ++++ b/tests/qemuxml2argvdata/disk-aio-io_uring.xml +@@ -0,0 +1,30 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 1 ++ ++ hvm ++ ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu-system-x86_64 ++ ++ ++ ++ ++
++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c +index e07d6cf..cf03cb4 100644 +--- a/tests/qemuxml2argvtest.c ++++ b/tests/qemuxml2argvtest.c +@@ -1237,6 +1237,7 @@ mymain(void) + DO_TEST("disk-aio", NONE); + DO_TEST_CAPS_VER("disk-aio", "2.12.0"); + DO_TEST_CAPS_LATEST("disk-aio"); ++ DO_TEST_CAPS_LATEST("disk-aio-io_uring"); + DO_TEST("disk-source-pool", NONE); + DO_TEST("disk-source-pool-mode", NONE); + DO_TEST("disk-ioeventfd", +diff --git a/tests/qemuxml2xmloutdata/disk-aio-io_uring.x86_64-latest.xml b/tests/qemuxml2xmloutdata/disk-aio-io_uring.x86_64-latest.xml +new file mode 100644 +index 0000000..5b691e1 +--- /dev/null ++++ b/tests/qemuxml2xmloutdata/disk-aio-io_uring.x86_64-latest.xml +@@ -0,0 +1,39 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 1 ++ ++ hvm ++ ++ ++ ++ qemu64 ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu-system-x86_64 ++ ++ ++ ++ ++
++ ++ ++
++ ++ ++
++ ++ ++ ++ ++ ++
++ ++ ++ +diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c +index 3a25395..cf8ef9b 100644 +--- a/tests/qemuxml2xmltest.c ++++ b/tests/qemuxml2xmltest.c +@@ -312,6 +312,7 @@ mymain(void) + DO_TEST("migrate", NONE); + DO_TEST("qemu-ns-no-env", NONE); + DO_TEST("disk-aio", NONE); ++ DO_TEST_CAPS_LATEST("disk-aio-io_uring"); + DO_TEST("disk-cdrom", NONE); + DO_TEST_CAPS_LATEST("disk-cdrom-empty-network-invalid"); + DO_TEST("disk-cdrom-bus-other", NONE); +-- +2.27.0 + diff --git a/libvirt.spec b/libvirt.spec index eac8898806b53a0c996e06456ac280d6d6d4e5d6..c7ace9466dcbea0a2b7187690a232cc79b9bb556 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -101,7 +101,7 @@ Summary: Library providing a simple virtualization API Name: libvirt Version: 6.2.0 -Release: 45 +Release: 46 License: LGPLv2+ URL: https://libvirt.org/ @@ -368,6 +368,7 @@ Patch0255: migration-dirtyrate-Implement-qemuMonitorQueryDirtyR.patch Patch0256: migration-dirtyrate-Extend-dirtyrate-statistics-for-.patch Patch0257: migration-dirtyrate-Introduce-command-virsh-domstats.patch Patch0258: docs-Fix-template-matching-in-page.xsl.patch +Patch0259: Compatible-with-libvirt-io_uring-function.patch Requires: libvirt-daemon = %{version}-%{release} Requires: libvirt-daemon-config-network = %{version}-%{release} @@ -2102,6 +2103,9 @@ exit 0 %changelog +* Fri Nov 18 2022 weishaokun - 6.2.0-46 +- libvirt: Compatible with libvirt io_uring function + * Fri Nov 11 2022 yezengruan - 6.2.0-45 - docs: Fix template matching in page.xsl