On 09/07/2017 02:09 AM, Liu Qing wrote: > Add qemu capabilities QEMU_CAPS_L2_CACHE_SIZE, > QEMU_CAPS_REFCOUNT_CACHE_SIZE, QEMU_CAPS_CACHE_CLEAN_INTERVAL. > Add testing for the above qemu capabilities. > > Signed-off-by: Liu Qing <liuqing@xxxxxxxxxx> > --- > > Patch 2 - a) use QMP instead of qemu version to identify qemu capabilities. > b) change capablity names with prefix drive.qcow2. > c) merge the three test cases to one. > > src/qemu/qemu_capabilities.c | 9 +++++ > src/qemu/qemu_capabilities.h | 3 ++ > src/qemu/qemu_command.c | 39 ++++++++++++++++++---- > tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml | 3 ++ > .../caps_2.6.0-gicv2.aarch64.xml | 3 ++ > .../caps_2.6.0-gicv3.aarch64.xml | 3 ++ > tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml | 3 ++ > tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml | 3 ++ > tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml | 3 ++ > tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml | 3 ++ > tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 3 ++ > tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml | 3 ++ > tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml | 3 ++ > tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml | 3 ++ > tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 3 ++ > .../qemuxml2argv-disk-drive-qcow2-cache.args | 28 ++++++++++++++++ > tests/qemuxml2argvtest.c | 4 +++ > 17 files changed, 113 insertions(+), 6 deletions(-) > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-qcow2-cache.args > > diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c > index e7ea6f4..e8cce38 100644 > --- a/src/qemu/qemu_capabilities.c > +++ b/src/qemu/qemu_capabilities.c > @@ -439,6 +439,9 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, > "virtio-net.tx_queue_size", > "chardev-reconnect", > "virtio-gpu.max_outputs", The format of the data has every 5th element counted, so this needs before the following: /* 270 */ > + "drive.qcow2.l2-cache-size", > + "drive.qcow2.refcount-cache-size", > + "drive.qcow2.cache-clean-interval", > ); > > > @@ -1811,6 +1814,12 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsIntelIOMMU[] = { > static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = { > { "blockdev-add/arg-type/options/+gluster/debug-level", QEMU_CAPS_GLUSTER_DEBUG_LEVEL}, > { "blockdev-add/arg-type/+gluster/debug", QEMU_CAPS_GLUSTER_DEBUG_LEVEL}, > + { "blockdev-add/arg-type/options/+qcow2/l2-cache-size", QEMU_CAPS_DRIVE_QCOW2_L2_CACHE_SIZE}, > + { "blockdev-add/arg-type/options/+qcow2/refcount-cache-size", QEMU_CAPS_DRIVE_QCOW2_REFCOUNT_CACHE_SIZE}, > + { "blockdev-add/arg-type/options/+qcow2/cache-clean-interval", QEMU_CAPS_DRIVE_QCOW2_CACHE_CLEAN_INTERVAL}, > + { "blockdev-add/arg-type/+qcow2/l2-cache-size", QEMU_CAPS_DRIVE_QCOW2_L2_CACHE_SIZE}, > + { "blockdev-add/arg-type/+qcow2/refcount-cache-size", QEMU_CAPS_DRIVE_QCOW2_REFCOUNT_CACHE_SIZE}, > + { "blockdev-add/arg-type/+qcow2/cache-clean-interval", QEMU_CAPS_DRIVE_QCOW2_CACHE_CLEAN_INTERVAL}, Ugh! I see the first 3 are necessary because of qemu changes similar to the +gluster debug setting, yuck. At least for that one, the argument appears to have changed name as well... Seems qemu 2.8 is the magic inflection point, though. > }; > > struct virQEMUCapsObjectTypeProps { > diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h > index f32687d..81fb759 100644 > --- a/src/qemu/qemu_capabilities.h > +++ b/src/qemu/qemu_capabilities.h > @@ -425,6 +425,9 @@ typedef enum { > QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE, /* virtio-net-*.tx_queue_size */ > QEMU_CAPS_CHARDEV_RECONNECT, /* -chardev reconnect */ > QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS, /* -device virtio-(vga|gpu-*),max-outputs= */ Similar formatting comment add before the following group: /* 270 */ Similar to patch1, I don't mind making the changes here. Especially since I already know I have some conflicts queued up in other patches on list that I'm trying to get reviewed/ACK'd. Secondarily, perhaps others may have comments about the new format and I'd rather see them addressed now rather than after pushing... John > + QEMU_CAPS_DRIVE_QCOW2_L2_CACHE_SIZE, /* -drive support qcow2 l2 cache size */ > + QEMU_CAPS_DRIVE_QCOW2_REFCOUNT_CACHE_SIZE, /* -drive support qcow2 refcount cache size */ > + QEMU_CAPS_DRIVE_QCOW2_CACHE_CLEAN_INTERVAL, /* -drive qcow2 cache clean interval */ > > 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 391aaba..e2592e0 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -1433,12 +1433,39 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, > qemuformat = "luks"; > virBufferAsprintf(buf, "format=%s,", qemuformat); > } > - if (disk->src->l2_cache_size > 0) > - virBufferAsprintf(buf, "l2-cache-size=%llu,", disk->src->l2_cache_size); > - if (disk->src->refcount_cache_size > 0) > - virBufferAsprintf(buf, "refcount-cache-size=%llu,", disk->src->refcount_cache_size); > - if (disk->src->cache_clean_interval > 0) > - virBufferAsprintf(buf, "cache-clean-interval=%llu,", disk->src->cache_clean_interval); > + > + if (disk->src->l2_cache_size > 0) { > + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_QCOW2_L2_CACHE_SIZE)) { > + virBufferAsprintf(buf, "l2-cache-size=%llu,", > + disk->src->l2_cache_size); > + } else { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("l2-cache-size is not supported by this QEMU")); > + goto cleanup; > + } > + } > + > + if (disk->src->refcount_cache_size > 0) { > + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_QCOW2_REFCOUNT_CACHE_SIZE)) { > + virBufferAsprintf(buf, "refcount-cache-size=%llu,", > + disk->src->refcount_cache_size); > + } else { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("refcount-cache-size is not supported by this QEMU")); > + goto cleanup; > + } > + } > + > + if (disk->src->cache_clean_interval > 0) { > + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_QCOW2_CACHE_CLEAN_INTERVAL)) { > + virBufferAsprintf(buf, "cache-clean-interval=%llu,", > + disk->src->cache_clean_interval); > + } else { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("cache-clean-interval is not supported by this QEMU")); > + goto cleanup; > + } > + } > > ret = 0; > > diff --git a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml > index 2ba40fc..2ccaca8 100644 > --- a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml > +++ b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml > @@ -194,6 +194,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2005000</version> > <kvmVersion>0</kvmVersion> > <package></package> > diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml > index 0b34fa3..2438de2 100644 > --- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml > +++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml > @@ -172,6 +172,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2006000</version> > <kvmVersion>0</kvmVersion> > <package></package> > diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml > index d41d578..b677d40 100644 > --- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml > +++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml > @@ -172,6 +172,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2006000</version> > <kvmVersion>0</kvmVersion> > <package></package> > diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml > index f1c9fc9..a680b62 100644 > --- a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml > +++ b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml > @@ -167,6 +167,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2006000</version> > <kvmVersion>0</kvmVersion> > <package></package> > diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml > index bdf006f..0ebf8a2 100644 > --- a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml > +++ b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml > @@ -204,6 +204,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2006000</version> > <kvmVersion>0</kvmVersion> > <package></package> > diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml > index fe7bca9..44bc54c 100644 > --- a/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml > +++ b/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml > @@ -134,6 +134,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2007000</version> > <kvmVersion>0</kvmVersion> > <package></package> > diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml > index 3fd28f0..3b6c1ed 100644 > --- a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml > +++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml > @@ -207,6 +207,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2007000</version> > <kvmVersion>0</kvmVersion> > <package> (v2.7.0)</package> > diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml > index 21bbb82..85f39fb 100644 > --- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml > +++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml > @@ -136,6 +136,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2007093</version> > <kvmVersion>0</kvmVersion> > <package></package> > diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml > index 761f9d1..d673891 100644 > --- a/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml > +++ b/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml > @@ -209,6 +209,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2008000</version> > <kvmVersion>0</kvmVersion> > <package> (v2.8.0)</package> > diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml b/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml > index a373a6d..b093244 100644 > --- a/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml > +++ b/tests/qemucapabilitiesdata/caps_2.9.0.ppc64le.xml > @@ -172,6 +172,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2009000</version> > <kvmVersion>0</kvmVersion> > <package> (v2.9.0)</package> > diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml > index e80782c..beba716 100644 > --- a/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml > +++ b/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml > @@ -137,6 +137,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2009000</version> > <kvmVersion>0</kvmVersion> > <package></package> > diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml > index 3641d03..64b99b0 100644 > --- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml > +++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml > @@ -220,6 +220,9 @@ > <flag name='vnc-multi-servers'/> > <flag name='chardev-reconnect'/> > <flag name='virtio-gpu.max_outputs'/> > + <flag name='drive.qcow2.l2-cache-size'/> > + <flag name='drive.qcow2.refcount-cache-size'/> > + <flag name='drive.qcow2.cache-clean-interval'/> > <version>2009000</version> > <kvmVersion>0</kvmVersion> > <package> (v2.9.0)</package> > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-qcow2-cache.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-qcow2-cache.args > new file mode 100644 > index 0000000..d13be92 > --- /dev/null > +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-drive-qcow2-cache.args > @@ -0,0 +1,28 @@ > +LC_ALL=C \ > +PATH=/bin \ > +HOME=/home/test \ > +USER=test \ > +LOGNAME=test \ > +QEMU_AUDIO_DRV=none \ > +/usr/bin/qemu-system-i686 \ > +-name QEMUGuest1 \ > +-S \ > +-M pc \ > +-m 214 \ > +-smp 1,sockets=1,cores=1,threads=1 \ > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ > +-nographic \ > +-nodefaults \ > +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ > +server,nowait \ > +-mon chardev=charmonitor,id=monitor,mode=readline \ > +-no-acpi \ > +-boot c \ > +-usb \ > +-drive file=/dev/HostVG/QEMUGuest1,format=qcow2,l2-cache-size=2097152,\ > +refcount-cache-size=524288,cache-clean-interval=900,if=none,id=drive-ide0-0-0,\ > +cache=none \ > +-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ > +-drive file=/dev/HostVG/QEMUGuest2,format=raw,if=none,media=cdrom,\ > +id=drive-ide0-1-0,readonly=on \ > +-device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 > diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c > index d6ada22..5baad68 100644 > --- a/tests/qemuxml2argvtest.c > +++ b/tests/qemuxml2argvtest.c > @@ -910,6 +910,10 @@ mymain(void) > QEMU_CAPS_DRIVE_CACHE_UNSAFE); > DO_TEST("disk-drive-copy-on-read", > QEMU_CAPS_DRIVE_COPY_ON_READ); > + DO_TEST("disk-drive-qcow2-cache", > + QEMU_CAPS_DRIVE_QCOW2_L2_CACHE_SIZE, > + QEMU_CAPS_DRIVE_QCOW2_REFCOUNT_CACHE_SIZE, > + QEMU_CAPS_DRIVE_QCOW2_CACHE_CLEAN_INTERVAL); > DO_TEST("disk-drive-network-nbd", NONE); > DO_TEST("disk-drive-network-nbd-export", NONE); > DO_TEST("disk-drive-network-nbd-ipv6", NONE); > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list