/* Ignore binary if extracting version info fails */
if (binary) {
- if (!(qemubinCaps = virQEMUCapsCacheLookup(caps, cache, binary))) {
+ if (!(qemubinCaps = virQEMUCapsCacheLookup(cache, binary))) {
virResetLastError();
VIR_FREE(binary);
}
if (!kvmbin)
continue;
- if (!(kvmbinCaps = virQEMUCapsCacheLookup(caps, cache, kvmbin))) {
+ if (!(kvmbinCaps = virQEMUCapsCacheLookup(cache, kvmbin))) {
virResetLastError();
VIR_FREE(kvmbin);
continue;
virCPUDefPtr
-virQEMUCapsProbeHostCPUForEmulator(virCapsPtr caps,
+virQEMUCapsProbeHostCPUForEmulator(virArch hostArch,
virQEMUCapsPtr qemuCaps,
virDomainVirtType type)
{
if (virQEMUCapsGetCPUDefinitions(qemuCaps, type, &models, &nmodels) < 0)
return NULL;
- cpu = virCPUGetHost(caps->host.arch, VIR_CPU_TYPE_GUEST, NULL,
+ cpu = virCPUGetHost(hostArch, VIR_CPU_TYPE_GUEST, NULL,
(const char **) models, nmodels);
virStringListFreeCount(models, nmodels);
return -1;
}
- qemucaps = virQEMUCapsCacheLookup(caps, capsCache, capsdata->emulator);
+ qemucaps = virQEMUCapsCacheLookup(capsCache, capsdata->emulator);
VIR_FREE(capsdata);
if (!qemucaps)
return -1;
void
virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps,
- virCapsPtr caps,
+ virArch hostArch,
virDomainVirtType type)
{
virCPUDefPtr cpu = NULL;
size_t i;
int rc;
- if (!caps || !virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch))
+ if (!virQEMUCapsGuestIsNative(hostArch, qemuCaps->arch))
return;
if (!(cpu = virQEMUCapsNewHostCPUModel()))
} else if (rc == 1) {
VIR_DEBUG("No host CPU model info from QEMU; probing host CPU directly");
- hostCPU = virQEMUCapsProbeHostCPUForEmulator(caps, qemuCaps, type);
+ hostCPU = virQEMUCapsProbeHostCPUForEmulator(hostArch, qemuCaps, type);
if (!hostCPU ||
virCPUDefCopyModelFilter(cpu, hostCPU, true,
virQEMUCapsCPUFilterFeatures,
* </qemuCaps>
*/
int
-virQEMUCapsLoadCache(virCapsPtr caps,
+virQEMUCapsLoadCache(virArch hostArch,
virQEMUCapsPtr qemuCaps,
const char *filename)
{
}
VIR_FREE(nodes);
- virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_KVM);
- virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_QEMU);
+ virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
+ virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
ret = 0;
cleanup:
static int
-virQEMUCapsInitCached(virCapsPtr caps,
- virQEMUCapsPtr *qemuCaps,
+virQEMUCapsInitCached(virQEMUCapsPtr *qemuCaps,
const char *binary,
const char *cacheDir,
virQEMUCapsCachePrivPtr priv)
if (VIR_STRDUP(qemuCapsNew->binary, binary) < 0)
goto discard;
- if (virQEMUCapsLoadCache(caps, qemuCapsNew, capsfile) < 0) {
+ if (virQEMUCapsLoadCache(priv->hostArch, qemuCapsNew, capsfile) < 0) {
VIR_WARN("Failed to load cached caps from '%s' for '%s': %s",
capsfile, qemuCapsNew->binary, virGetLastErrorMessage());
virResetLastError();
virQEMUCapsPtr
-virQEMUCapsNewForBinaryInternal(virCapsPtr caps,
+virQEMUCapsNewForBinaryInternal(virArch hostArch,
const char *binary,
const char *libDir,
uid_t runUid,
qemuCaps->libvirtCtime = virGetSelfLastChanged();
qemuCaps->libvirtVersion = LIBVIR_VERSION_NUMBER;
- virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_KVM);
- virQEMUCapsInitHostCPUModel(qemuCaps, caps, VIR_DOMAIN_VIRT_QEMU);
+ virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
+ virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
cleanup:
VIR_FREE(qmperr);
}
static virQEMUCapsPtr
-virQEMUCapsNewForBinary(virCapsPtr caps,
- const char *binary,
+virQEMUCapsNewForBinary(const char *binary,
const char *cacheDir,
virQEMUCapsCachePrivPtr priv)
{
int rv;
virQEMUCapsPtr qemuCaps = NULL;
- if ((rv = virQEMUCapsInitCached(caps, &qemuCaps, binary, cacheDir, priv)) < 0)
+ if ((rv = virQEMUCapsInitCached(&qemuCaps, binary, cacheDir, priv)) < 0)
goto error;
if (rv == 0) {
- if (!(qemuCaps = virQEMUCapsNewForBinaryInternal(caps, binary,
+ if (!(qemuCaps = virQEMUCapsNewForBinaryInternal(priv->hostArch,
+ binary,
priv->libDir,
priv->runUid,
priv->runGid,
if (VIR_STRDUP(cache->priv->libDir, libDir) < 0)
goto error;
+ cache->priv->hostArch = virArchFromHost();
+
cache->priv->runUid = runUid;
cache->priv->runGid = runGid;
static void ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
virQEMUCapsCacheValidate(virQEMUCapsCachePtr cache,
const char *binary,
- virCapsPtr caps,
virQEMUCapsPtr *qemuCaps)
{
if (*qemuCaps &&
if (!*qemuCaps) {
VIR_DEBUG("Creating capabilities for %s", binary);
- *qemuCaps = virQEMUCapsNewForBinary(caps, binary,
+ *qemuCaps = virQEMUCapsNewForBinary(binary,
cache->cacheDir,
cache->priv);
if (*qemuCaps) {
virQEMUCapsPtr
-virQEMUCapsCacheLookup(virCapsPtr caps,
- virQEMUCapsCachePtr cache,
+virQEMUCapsCacheLookup(virQEMUCapsCachePtr cache,
const char *binary)
{
virQEMUCapsPtr ret = NULL;
virMutexLock(&cache->lock);
ret = virHashLookup(cache->binaries, binary);
- virQEMUCapsCacheValidate(cache, binary, caps, &ret);
+ virQEMUCapsCacheValidate(cache, binary, &ret);
virObjectRef(ret);
virMutexUnlock(&cache->lock);
virQEMUCapsPtr
-virQEMUCapsCacheLookupCopy(virCapsPtr caps,
- virQEMUCapsCachePtr cache,
+virQEMUCapsCacheLookupCopy(virQEMUCapsCachePtr cache,
const char *binary,
const char *machineType)
{
- virQEMUCapsPtr qemuCaps = virQEMUCapsCacheLookup(caps, cache, binary);
+ virQEMUCapsPtr qemuCaps = virQEMUCapsCacheLookup(cache, binary);
virQEMUCapsPtr ret;
if (!qemuCaps)
virQEMUCapsPtr
-virQEMUCapsCacheLookupByArch(virCapsPtr caps,
- virQEMUCapsCachePtr cache,
+virQEMUCapsCacheLookupByArch(virQEMUCapsCachePtr cache,
virArch arch)
{
virQEMUCapsPtr ret = NULL;
if (VIR_STRDUP(binary, ret->binary) < 0) {
ret = NULL;
} else {
- virQEMUCapsCacheValidate(cache, binary, caps, &ret);
+ virQEMUCapsCacheValidate(cache, binary, &ret);
VIR_FREE(binary);
}
} else {