qemu: conf: add virQEMUDriverGetDomainCapabilities

For now it's just a helper for building a qemu virDomainCapsPtr,
used in qemuConnectGetDomainCapabilities

Reviewed-by: Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
This commit is contained in:
Cole Robinson 2019-04-04 17:31:00 -04:00
parent 928508f669
commit d05bdff79b
3 changed files with 49 additions and 16 deletions

View File

@ -1363,6 +1363,45 @@ virCapsPtr virQEMUDriverGetCapabilities(virQEMUDriverPtr driver,
return ret;
}
/**
* virQEMUDriverGetDomainCapabilities:
*
* Build a virDomainCapsPtr instance for the passed data.
*
* Returns: a reference to a virDomainCapsPtr instance or NULL
*/
virDomainCapsPtr
virQEMUDriverGetDomainCapabilities(virQEMUDriverPtr driver,
virQEMUCapsPtr qemuCaps,
const char *machine,
virArch arch,
virDomainVirtType virttype)
{
virDomainCapsPtr ret = NULL, domCaps = NULL;
virCapsPtr caps = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
goto cleanup;
if (!(domCaps = virDomainCapsNew(virQEMUCapsGetBinary(qemuCaps), machine,
arch, virttype)))
goto cleanup;
if (virQEMUCapsFillDomainCaps(caps, domCaps, qemuCaps, driver->privileged,
cfg->firmwares, cfg->nfirmwares) < 0)
goto cleanup;
VIR_STEAL_PTR(ret, domCaps);
cleanup:
virObjectUnref(domCaps);
virObjectUnref(cfg);
virObjectUnref(caps);
return ret;
}
struct _qemuSharedDeviceEntry {
size_t ref;
char **domains; /* array of domain names */

View File

@ -315,6 +315,13 @@ virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver);
virCapsPtr virQEMUDriverGetCapabilities(virQEMUDriverPtr driver,
bool refresh);
virDomainCapsPtr
virQEMUDriverGetDomainCapabilities(virQEMUDriverPtr driver,
virQEMUCapsPtr qemuCaps,
const char *machine,
virArch arch,
virDomainVirtType virttype);
typedef struct _qemuSharedDeviceEntry qemuSharedDeviceEntry;
typedef qemuSharedDeviceEntry *qemuSharedDeviceEntryPtr;

View File

@ -20606,19 +20606,12 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
virArch arch;
virDomainVirtType virttype;
virDomainCapsPtr domCaps = NULL;
virQEMUDriverConfigPtr cfg = NULL;
virCapsPtr caps = NULL;
virCheckFlags(0, ret);
if (virConnectGetDomainCapabilitiesEnsureACL(conn) < 0)
return ret;
cfg = virQEMUDriverGetConfig(driver);
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
goto cleanup;
qemuCaps = virQEMUCapsCacheLookupDefault(driver->qemuCapsCache,
emulatorbin,
arch_str,
@ -20628,19 +20621,13 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
if (!qemuCaps)
goto cleanup;
if (!(domCaps = virDomainCapsNew(virQEMUCapsGetBinary(qemuCaps), machine,
arch, virttype)))
goto cleanup;
if (virQEMUCapsFillDomainCaps(caps, domCaps, qemuCaps,
driver->privileged,
cfg->firmwares, cfg->nfirmwares) < 0)
if (!(domCaps = virQEMUDriverGetDomainCapabilities(driver,
qemuCaps, machine,
arch, virttype)))
goto cleanup;
ret = virDomainCapsFormat(domCaps);
cleanup:
virObjectUnref(cfg);
virObjectUnref(caps);
virObjectUnref(domCaps);
virObjectUnref(qemuCaps);
return ret;