[libvirt] [PATCH 22/41] qemu: Propagate virCapsPtr to virQEMUCapsNewForBinaryInternal
John Ferlan
jferlan at redhat.com
Mon Aug 29 23:31:22 UTC 2016
On 08/12/2016 09:33 AM, Jiri Denemark wrote:
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
> src/qemu/qemu_capabilities.c | 25 +++++++++++++++----------
> src/qemu/qemu_capabilities.h | 6 ++++--
> src/qemu/qemu_capspriv.h | 3 ++-
> src/qemu/qemu_domain.c | 13 ++++++++-----
> src/qemu/qemu_driver.c | 9 ++++++---
> src/qemu/qemu_process.c | 14 +++++++++++---
> tests/qemucapsprobe.c | 2 +-
> 7 files changed, 47 insertions(+), 25 deletions(-)
>
OK I lied slightly... 21 ACK ...
build breaks here - probably because of new function
qemuDomainDefValidate... luckily caps is passed as ATTRIBUTE_UNUSED, so
it seems to be easily handled...
John
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 232ae1f..8f55fcc 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -837,7 +837,7 @@ virQEMUCapsInitGuest(virCapsPtr caps,
>
> /* Ignore binary if extracting version info fails */
> if (binary) {
> - if (!(qemubinCaps = virQEMUCapsCacheLookup(cache, binary))) {
> + if (!(qemubinCaps = virQEMUCapsCacheLookup(caps, cache, binary))) {
> virResetLastError();
> VIR_FREE(binary);
> }
> @@ -877,7 +877,7 @@ virQEMUCapsInitGuest(virCapsPtr caps,
> if (!kvmbin)
> continue;
>
> - if (!(kvmbinCaps = virQEMUCapsCacheLookup(cache, kvmbin))) {
> + if (!(kvmbinCaps = virQEMUCapsCacheLookup(caps, cache, kvmbin))) {
> virResetLastError();
> VIR_FREE(kvmbin);
> continue;
> @@ -1986,7 +1986,7 @@ int virQEMUCapsGetDefaultVersion(virCapsPtr caps,
> return -1;
> }
>
> - qemucaps = virQEMUCapsCacheLookup(capsCache, capsdata->emulator);
> + qemucaps = virQEMUCapsCacheLookup(caps, capsCache, capsdata->emulator);
> VIR_FREE(capsdata);
> if (!qemucaps)
> return -1;
> @@ -3783,7 +3783,8 @@ virQEMUCapsLogProbeFailure(const char *binary)
>
>
> virQEMUCapsPtr
> -virQEMUCapsNewForBinaryInternal(const char *binary,
> +virQEMUCapsNewForBinaryInternal(virCapsPtr caps ATTRIBUTE_UNUSED,
> + const char *binary,
> const char *libDir,
> const char *cacheDir,
> uid_t runUid,
> @@ -3861,13 +3862,14 @@ virQEMUCapsNewForBinaryInternal(const char *binary,
> }
>
> static virQEMUCapsPtr
> -virQEMUCapsNewForBinary(const char *binary,
> +virQEMUCapsNewForBinary(virCapsPtr caps,
> + const char *binary,
> const char *libDir,
> const char *cacheDir,
> uid_t runUid,
> gid_t runGid)
> {
> - return virQEMUCapsNewForBinaryInternal(binary, libDir, cacheDir,
> + return virQEMUCapsNewForBinaryInternal(caps, binary, libDir, cacheDir,
> runUid, runGid, false);
> }
>
> @@ -3960,7 +3962,9 @@ virQEMUCapsCacheNew(const char *libDir,
> const char *qemuTestCapsName;
>
> virQEMUCapsPtr
> -virQEMUCapsCacheLookup(virQEMUCapsCachePtr cache, const char *binary)
> +virQEMUCapsCacheLookup(virCapsPtr caps,
> + virQEMUCapsCachePtr cache,
> + const char *binary)
> {
> virQEMUCapsPtr ret = NULL;
>
> @@ -3980,7 +3984,7 @@ virQEMUCapsCacheLookup(virQEMUCapsCachePtr cache, const char *binary)
> if (!ret) {
> VIR_DEBUG("Creating capabilities for %s",
> binary);
> - ret = virQEMUCapsNewForBinary(binary, cache->libDir,
> + ret = virQEMUCapsNewForBinary(caps, binary, cache->libDir,
> cache->cacheDir,
> cache->runUid, cache->runGid);
> if (ret) {
> @@ -4000,11 +4004,12 @@ virQEMUCapsCacheLookup(virQEMUCapsCachePtr cache, const char *binary)
>
>
> virQEMUCapsPtr
> -virQEMUCapsCacheLookupCopy(virQEMUCapsCachePtr cache,
> +virQEMUCapsCacheLookupCopy(virCapsPtr caps,
> + virQEMUCapsCachePtr cache,
> const char *binary,
> const char *machineType)
> {
> - virQEMUCapsPtr qemuCaps = virQEMUCapsCacheLookup(cache, binary);
> + virQEMUCapsPtr qemuCaps = virQEMUCapsCacheLookup(caps, cache, binary);
> virQEMUCapsPtr ret;
>
> if (!qemuCaps)
> diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
> index 9fd38d9..df49809 100644
> --- a/src/qemu/qemu_capabilities.h
> +++ b/src/qemu/qemu_capabilities.h
> @@ -445,9 +445,11 @@ void virQEMUCapsSetGICCapabilities(virQEMUCapsPtr qemuCaps,
> virQEMUCapsCachePtr virQEMUCapsCacheNew(const char *libDir,
> const char *cacheDir,
> uid_t uid, gid_t gid);
> -virQEMUCapsPtr virQEMUCapsCacheLookup(virQEMUCapsCachePtr cache,
> +virQEMUCapsPtr virQEMUCapsCacheLookup(virCapsPtr caps,
> + virQEMUCapsCachePtr cache,
> const char *binary);
> -virQEMUCapsPtr virQEMUCapsCacheLookupCopy(virQEMUCapsCachePtr cache,
> +virQEMUCapsPtr virQEMUCapsCacheLookupCopy(virCapsPtr caps,
> + virQEMUCapsCachePtr cache,
> const char *binary,
> const char *machineType);
> virQEMUCapsPtr virQEMUCapsCacheLookupByArch(virQEMUCapsCachePtr cache,
> diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h
> index c409acb..ac3693b 100644
> --- a/src/qemu/qemu_capspriv.h
> +++ b/src/qemu/qemu_capspriv.h
> @@ -40,7 +40,8 @@ struct _virQEMUCapsCache {
> virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps);
>
> virQEMUCapsPtr
> -virQEMUCapsNewForBinaryInternal(const char *binary,
> +virQEMUCapsNewForBinaryInternal(virCapsPtr caps,
> + const char *binary,
> const char *libDir,
> const char *cacheDir,
> uid_t runUid,
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index efc46f9..9ba7cbd 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -2285,7 +2285,8 @@ qemuDomainDefPostParse(virDomainDefPtr def,
> !(def->emulator = virDomainDefGetDefaultEmulator(def, caps)))
> goto cleanup;
>
> - if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache,
> + if (!(qemuCaps = virQEMUCapsCacheLookup(caps,
> + driver->qemuCapsCache,
> def->emulator)))
> goto cleanup;
>
> @@ -2442,7 +2443,7 @@ qemuDomainChrDefDropDefaultPath(virDomainChrDefPtr chr,
> static int
> qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
> const virDomainDef *def,
> - virCapsPtr caps ATTRIBUTE_UNUSED,
> + virCapsPtr caps,
> unsigned int parseFlags,
> void *opaque)
> {
> @@ -2451,7 +2452,8 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
> virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
> int ret = -1;
>
> - qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache, def->emulator);
> + qemuCaps = virQEMUCapsCacheLookup(caps, driver->qemuCapsCache,
> + def->emulator);
>
> if (dev->type == VIR_DOMAIN_DEVICE_NET &&
> dev->data.net->type != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
> @@ -2628,7 +2630,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
>
> static int
> qemuDomainDefAssignAddresses(virDomainDef *def,
> - virCapsPtr caps ATTRIBUTE_UNUSED,
> + virCapsPtr caps,
> unsigned int parseFlags ATTRIBUTE_UNUSED,
> void *opaque)
> {
> @@ -2637,7 +2639,8 @@ qemuDomainDefAssignAddresses(virDomainDef *def,
> int ret = -1;
> bool newDomain = parseFlags & VIR_DOMAIN_DEF_PARSE_ABI_UPDATE;
>
> - if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache,
> + if (!(qemuCaps = virQEMUCapsCacheLookup(caps,
> + driver->qemuCapsCache,
> def->emulator)))
> goto cleanup;
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 7e4f4e7..695da14 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -8270,7 +8270,8 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
>
> if (priv->qemuCaps)
> qemuCaps = virObjectRef(priv->qemuCaps);
> - else if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache, vm->def->emulator)))
> + else if (!(qemuCaps = virQEMUCapsCacheLookup(caps, driver->qemuCapsCache,
> + vm->def->emulator)))
> goto endjob;
>
> if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
> @@ -15634,7 +15635,8 @@ static virDomainPtr qemuDomainQemuAttach(virConnectPtr conn,
> virAsprintf(&def->name, "attach-pid-%u", pid_value) < 0)
> goto cleanup;
>
> - if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache, def->emulator)))
> + if (!(qemuCaps = virQEMUCapsCacheLookup(caps, driver->qemuCapsCache,
> + def->emulator)))
> goto cleanup;
>
> if (qemuAssignDeviceAliases(def, qemuCaps) < 0)
> @@ -18533,7 +18535,8 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
> if (emulatorbin) {
> virArch arch_from_caps;
>
> - if (!(qemuCaps = virQEMUCapsCacheLookup(driver->qemuCapsCache,
> + if (!(qemuCaps = virQEMUCapsCacheLookup(caps,
> + driver->qemuCapsCache,
> emulatorbin)))
> goto cleanup;
>
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 4d709fc..ae94c21 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -3246,6 +3246,7 @@ qemuProcessReconnect(void *opaque)
> int ret;
> unsigned int stopFlags = 0;
> bool jobStarted = false;
> + virCapsPtr caps = NULL;
>
> VIR_FREE(data);
>
> @@ -3256,6 +3257,9 @@ qemuProcessReconnect(void *opaque)
> cfg = virQEMUDriverGetConfig(driver);
> priv = obj->privateData;
>
> + if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
> + goto error;
> +
> if (qemuDomainObjBeginJob(driver, obj, QEMU_JOB_MODIFY) < 0)
> goto error;
> jobStarted = true;
> @@ -3325,7 +3329,8 @@ qemuProcessReconnect(void *opaque)
> * caps in the domain status, so re-query them
> */
> if (!priv->qemuCaps &&
> - !(priv->qemuCaps = virQEMUCapsCacheLookupCopy(driver->qemuCapsCache,
> + !(priv->qemuCaps = virQEMUCapsCacheLookupCopy(caps,
> + driver->qemuCapsCache,
> obj->def->emulator,
> obj->def->os.machine)))
> goto error;
> @@ -3422,6 +3427,7 @@ qemuProcessReconnect(void *opaque)
> virDomainObjEndAPI(&obj);
> virObjectUnref(conn);
> virObjectUnref(cfg);
> + virObjectUnref(caps);
> virNWFilterUnlockFilterUpdates();
> return;
>
> @@ -4609,7 +4615,8 @@ qemuProcessInit(virQEMUDriverPtr driver,
>
> VIR_DEBUG("Determining emulator version");
> virObjectUnref(priv->qemuCaps);
> - if (!(priv->qemuCaps = virQEMUCapsCacheLookupCopy(driver->qemuCapsCache,
> + if (!(priv->qemuCaps = virQEMUCapsCacheLookupCopy(caps,
> + driver->qemuCapsCache,
> vm->def->emulator,
> vm->def->os.machine)))
> goto cleanup;
> @@ -6043,7 +6050,8 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
>
> VIR_DEBUG("Determining emulator version");
> virObjectUnref(priv->qemuCaps);
> - if (!(priv->qemuCaps = virQEMUCapsCacheLookupCopy(driver->qemuCapsCache,
> + if (!(priv->qemuCaps = virQEMUCapsCacheLookupCopy(caps,
> + driver->qemuCapsCache,
> vm->def->emulator,
> vm->def->os.machine)))
> goto error;
> diff --git a/tests/qemucapsprobe.c b/tests/qemucapsprobe.c
> index ced0512..fb9f3e9 100644
> --- a/tests/qemucapsprobe.c
> +++ b/tests/qemucapsprobe.c
> @@ -70,7 +70,7 @@ main(int argc, char **argv)
> if (virThreadCreate(&thread, false, eventLoop, NULL) < 0)
> return EXIT_FAILURE;
>
> - if (!(caps = virQEMUCapsNewForBinaryInternal(argv[1], "/tmp", NULL,
> + if (!(caps = virQEMUCapsNewForBinaryInternal(NULL, argv[1], "/tmp", NULL,
> -1, -1, true)))
> return EXIT_FAILURE;
>
>
More information about the libvir-list
mailing list