[libvirt] [PATCH for 1.2.7 8/8] qemu: Implement virConnectGetDomainCapabilities

Daniel P. Berrange berrange at redhat.com
Thu Jul 3 10:00:44 UTC 2014


On Thu, Jul 03, 2014 at 11:55:44AM +0200, Michal Privoznik wrote:
> On 02.07.2014 16:56, Daniel P. Berrange wrote:
> >On Mon, Jun 30, 2014 at 05:31:51PM +0200, Michal Privoznik wrote:
> >>So far only information on disks and host devices are exposed in the
> >>capabilities XML. Well, at least something. Even a new test is
> >>introduced. The qemu capabilities are stolen from already existing
> >>qemucapabilities test. There's one tricky point though. Functions that
> >>checks host's KVM and VFIO capabilities, are impossible to mock
> >>currently. So in the test, we are setting the capabilities by hand.
> >>
> >>Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> >>---
> >>  src/libvirt_private.syms                           |   1 +
> >>  src/qemu/qemu_capabilities.c                       |  90 ++++++++++++++++++
> >>  src/qemu/qemu_capabilities.h                       |   4 +
> >>  src/qemu/qemu_driver.c                             | 101 +++++++++++++++++++++
> >>  tests/Makefile.am                                  |   5 +
> >>  .../domaincaps-qemu_1.6.50-1.xml                   |  44 +++++++++
> >>  tests/domaincapstest.c                             |  45 +++++++++
> >>  7 files changed, 290 insertions(+)
> >>  create mode 100644 tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
> >>
> >
> >
> >>+static void
> >>+virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps,
> >>+                                    virDomainCapsDeviceDiskPtr disk)
> >>+{
> >>+    disk->device.supported = true;
> >>+    /* QEMU supports all of these */
> >>+    VIR_DOMAIN_CAPS_ENUM_SET(disk->diskDevice,
> >>+                             VIR_DOMAIN_DISK_DEVICE_DISK,
> >>+                             VIR_DOMAIN_DISK_DEVICE_CDROM,
> >>+                             VIR_DOMAIN_DISK_DEVICE_FLOPPY);
> >>+
> >>+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_BLK_SG_IO))
> >>+        VIR_DOMAIN_CAPS_ENUM_SET(disk->diskDevice, VIR_DOMAIN_DISK_DEVICE_LUN);
> >>+
> >>+    VIR_DOMAIN_CAPS_ENUM_SET(disk->bus,
> >>+                             VIR_DOMAIN_DISK_BUS_IDE,
> >>+                             VIR_DOMAIN_DISK_BUS_FDC,
> >>+                             VIR_DOMAIN_DISK_BUS_SCSI,
> >>+                             VIR_DOMAIN_DISK_BUS_VIRTIO,
> >>+                             VIR_DOMAIN_DISK_BUS_SD);
> >
> >I have a feeling that 'SD' is not supported in all QEMU's we claim to
> >work with, though perhaps we've never checked this before when
> >building the CLI args.
> 
> Well, we don't. I haven't found any code that checks for 'SD' in qemu
> driver. I can remove it until the time we have a resolution.
> 
> >
> >>+
> >>+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_STORAGE))
> >>+        VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_USB);
> >>+}
> >>+
> >>+
> >
> >>+    <hostdev supported='yes'>
> >>+      <enum name='mode'/>
> >
> >Hmm, so that's claiming we don't support any values for
> >the mode attribute, but we support subsys.
> 
> Ouch, yeah. The problem is, I was not setting the correct struct member.
> Here's the fix:
> 
> index 9fc58ff..6ed85a9 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -3603,7 +3603,7 @@ virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr
> qemuCaps,
> 
>      hostdev->device.supported = true;
>      /* VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES is for containers only */
> -    VIR_DOMAIN_CAPS_ENUM_SET(hostdev->subsysType,
> +    VIR_DOMAIN_CAPS_ENUM_SET(hostdev->mode,
>                               VIR_DOMAIN_HOSTDEV_MODE_SUBSYS);
> 
>      VIR_DOMAIN_CAPS_ENUM_SET(hostdev->startupPolicy,
> diff --git a/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
> b/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
> index 562e2f4..b7d9c26 100644
> --- a/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
> +++ b/tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
> @@ -21,7 +21,9 @@
>        </enum>
>      </disk>
>      <hostdev supported='yes'>
> -      <enum name='mode'/>
> +      <enum name='mode'>
> +        <value>subsystem</value>
> +      </enum>
>        <enum name='startupPolicy'>
>          <value>default</value>
>          <value>mandatory</value>

ACK

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list