qemu_capabilities: Change virQEMUCapsFillDomainCaps signature

Up till now the virQEMUCapsFillDomainCaps() was type of void as
there was no way for it to fail. This is, however, going to
change in the next commit.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Michal Privoznik 2014-09-17 11:33:35 +02:00
parent c7abf2c856
commit 2b2e4a7acf
4 changed files with 32 additions and 19 deletions

View File

@ -3608,7 +3608,7 @@ virQEMUCapsGetDefaultMachine(virQEMUCapsPtr qemuCaps)
} }
static void static int
virQEMUCapsFillDomainLoaderCaps(virQEMUCapsPtr qemuCaps, virQEMUCapsFillDomainLoaderCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsLoaderPtr loader, virDomainCapsLoaderPtr loader,
virArch arch) virArch arch)
@ -3629,10 +3629,11 @@ virQEMUCapsFillDomainLoaderCaps(virQEMUCapsPtr qemuCaps,
VIR_DOMAIN_CAPS_ENUM_SET(loader->readonly, VIR_DOMAIN_CAPS_ENUM_SET(loader->readonly,
VIR_TRISTATE_BOOL_YES, VIR_TRISTATE_BOOL_YES,
VIR_TRISTATE_BOOL_NO); VIR_TRISTATE_BOOL_NO);
return 0;
} }
static void static int
virQEMUCapsFillDomainOSCaps(virQEMUCapsPtr qemuCaps, virQEMUCapsFillDomainOSCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsOSPtr os, virDomainCapsOSPtr os,
virArch arch) virArch arch)
@ -3640,11 +3641,13 @@ virQEMUCapsFillDomainOSCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsLoaderPtr loader = &os->loader; virDomainCapsLoaderPtr loader = &os->loader;
os->device.supported = true; os->device.supported = true;
virQEMUCapsFillDomainLoaderCaps(qemuCaps, loader, arch); if (virQEMUCapsFillDomainLoaderCaps(qemuCaps, loader, arch) < 0)
return -1;
return 0;
} }
static void static int
virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps, virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsDeviceDiskPtr disk) virDomainCapsDeviceDiskPtr disk)
{ {
@ -3667,10 +3670,11 @@ virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps,
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_STORAGE)) if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_STORAGE))
VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_USB); VIR_DOMAIN_CAPS_ENUM_SET(disk->bus, VIR_DOMAIN_DISK_BUS_USB);
return 0;
} }
static void static int
virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps, virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsDeviceHostdevPtr hostdev) virDomainCapsDeviceHostdevPtr hostdev)
{ {
@ -3715,10 +3719,11 @@ virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps,
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT, VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT,
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM); VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM);
} }
return 0;
} }
void int
virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps, virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
virQEMUCapsPtr qemuCaps) virQEMUCapsPtr qemuCaps)
{ {
@ -3729,7 +3734,9 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
domCaps->maxvcpus = maxvcpus; domCaps->maxvcpus = maxvcpus;
virQEMUCapsFillDomainOSCaps(qemuCaps, os, domCaps->arch); if (virQEMUCapsFillDomainOSCaps(qemuCaps, os, domCaps->arch) < 0 ||
virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, disk); virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, disk) < 0 ||
virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev); virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev) < 0)
return -1;
return 0;
} }

View File

@ -324,7 +324,7 @@ int virQEMUCapsInitGuestFromBinary(virCapsPtr caps,
virQEMUCapsPtr kvmbinCaps, virQEMUCapsPtr kvmbinCaps,
virArch guestarch); virArch guestarch);
void virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps, int virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
virQEMUCapsPtr qemuCaps); virQEMUCapsPtr qemuCaps);
#endif /* __QEMU_CAPABILITIES_H__*/ #endif /* __QEMU_CAPABILITIES_H__*/

View File

@ -17357,7 +17357,8 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
if (!(domCaps = virDomainCapsNew(emulatorbin, machine, arch, virttype))) if (!(domCaps = virDomainCapsNew(emulatorbin, machine, arch, virttype)))
goto cleanup; goto cleanup;
virQEMUCapsFillDomainCaps(domCaps, qemuCaps); if (virQEMUCapsFillDomainCaps(domCaps, qemuCaps) < 0)
goto cleanup;
ret = virDomainCapsFormat(domCaps); ret = virDomainCapsFormat(domCaps);
cleanup: cleanup:

View File

@ -28,13 +28,13 @@
#define VIR_FROM_THIS VIR_FROM_NONE #define VIR_FROM_THIS VIR_FROM_NONE
typedef void (*virDomainCapsFill)(virDomainCapsPtr domCaps, typedef int (*virDomainCapsFill)(virDomainCapsPtr domCaps,
void *opaque); void *opaque);
#define SET_ALL_BITS(x) \ #define SET_ALL_BITS(x) \
memset(&(x.values), 0xff, sizeof(x.values)) memset(&(x.values), 0xff, sizeof(x.values))
static void static int
fillAll(virDomainCapsPtr domCaps, fillAll(virDomainCapsPtr domCaps,
void *opaque ATTRIBUTE_UNUSED) void *opaque ATTRIBUTE_UNUSED)
{ {
@ -60,18 +60,20 @@ fillAll(virDomainCapsPtr domCaps,
SET_ALL_BITS(hostdev->subsysType); SET_ALL_BITS(hostdev->subsysType);
SET_ALL_BITS(hostdev->capsType); SET_ALL_BITS(hostdev->capsType);
SET_ALL_BITS(hostdev->pciBackend); SET_ALL_BITS(hostdev->pciBackend);
return 0;
} }
#ifdef WITH_QEMU #ifdef WITH_QEMU
# include "testutilsqemu.h" # include "testutilsqemu.h"
static void static int
fillQemuCaps(virDomainCapsPtr domCaps, fillQemuCaps(virDomainCapsPtr domCaps,
void *opaque) void *opaque)
{ {
virQEMUCapsPtr qemuCaps = (virQEMUCapsPtr) opaque; virQEMUCapsPtr qemuCaps = (virQEMUCapsPtr) opaque;
virQEMUCapsFillDomainCaps(domCaps, qemuCaps); if (virQEMUCapsFillDomainCaps(domCaps, qemuCaps) < 0)
return -1;
/* The function above tries to query host's KVM & VFIO capabilities by /* The function above tries to query host's KVM & VFIO capabilities by
* calling qemuHostdevHostSupportsPassthroughLegacy() and * calling qemuHostdevHostSupportsPassthroughLegacy() and
@ -82,6 +84,7 @@ fillQemuCaps(virDomainCapsPtr domCaps,
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT, VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT,
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM, VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM,
VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO); VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO);
return 0;
} }
#endif /* WITH_QEMU */ #endif /* WITH_QEMU */
@ -99,8 +102,10 @@ buildVirDomainCaps(const char *emulatorbin,
if (!(domCaps = virDomainCapsNew(emulatorbin, machine, arch, type))) if (!(domCaps = virDomainCapsNew(emulatorbin, machine, arch, type)))
goto cleanup; goto cleanup;
if (fillFunc) if (fillFunc && fillFunc(domCaps, opaque) < 0) {
fillFunc(domCaps, opaque); virObjectUnref(domCaps);
domCaps = NULL;
}
cleanup: cleanup:
return domCaps; return domCaps;