mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
qemu: Introduce virQEMUCapsAccel structure
This is container for capabilities data that depend on the accelerator. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
fe893a19eb
commit
8f0948767b
@ -579,6 +579,13 @@ struct _virQEMUCapsHostCPUData {
|
|||||||
virCPUDefPtr full;
|
virCPUDefPtr full;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct _virQEMUCapsAccel virQEMUCapsAccel;
|
||||||
|
typedef virQEMUCapsAccel *virQEMUCapsAccelPtr;
|
||||||
|
struct _virQEMUCapsAccel {
|
||||||
|
virQEMUCapsHostCPUData hostCPU;
|
||||||
|
qemuMonitorCPUDefsPtr cpuModels;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update the XML parser/formatter when adding more
|
* Update the XML parser/formatter when adding more
|
||||||
* information to this struct so that it gets cached
|
* information to this struct so that it gets cached
|
||||||
@ -610,8 +617,6 @@ struct _virQEMUCaps {
|
|||||||
virArch arch;
|
virArch arch;
|
||||||
|
|
||||||
virHashTablePtr domCapsCache;
|
virHashTablePtr domCapsCache;
|
||||||
qemuMonitorCPUDefsPtr kvmCPUModels;
|
|
||||||
qemuMonitorCPUDefsPtr tcgCPUModels;
|
|
||||||
|
|
||||||
size_t nmachineTypes;
|
size_t nmachineTypes;
|
||||||
struct virQEMUCapsMachineType *machineTypes;
|
struct virQEMUCapsMachineType *machineTypes;
|
||||||
@ -621,8 +626,9 @@ struct _virQEMUCaps {
|
|||||||
|
|
||||||
virSEVCapability *sevCapabilities;
|
virSEVCapability *sevCapabilities;
|
||||||
|
|
||||||
virQEMUCapsHostCPUData kvmCPU;
|
/* Capabilities which may differ depending on the accelerator. */
|
||||||
virQEMUCapsHostCPUData tcgCPU;
|
virQEMUCapsAccel kvm;
|
||||||
|
virQEMUCapsAccel tcg;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct virQEMUCapsSearchData {
|
struct virQEMUCapsSearchData {
|
||||||
@ -1620,11 +1626,11 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
|
|||||||
|
|
||||||
ret->arch = qemuCaps->arch;
|
ret->arch = qemuCaps->arch;
|
||||||
|
|
||||||
ret->kvmCPUModels = qemuMonitorCPUDefsCopy(qemuCaps->kvmCPUModels);
|
ret->kvm.cpuModels = qemuMonitorCPUDefsCopy(qemuCaps->kvm.cpuModels);
|
||||||
ret->tcgCPUModels = qemuMonitorCPUDefsCopy(qemuCaps->tcgCPUModels);
|
ret->tcg.cpuModels = qemuMonitorCPUDefsCopy(qemuCaps->tcg.cpuModels);
|
||||||
|
|
||||||
if (virQEMUCapsHostCPUDataCopy(&ret->kvmCPU, &qemuCaps->kvmCPU) < 0 ||
|
if (virQEMUCapsHostCPUDataCopy(&ret->kvm.hostCPU, &qemuCaps->kvm.hostCPU) < 0 ||
|
||||||
virQEMUCapsHostCPUDataCopy(&ret->tcgCPU, &qemuCaps->tcgCPU) < 0)
|
virQEMUCapsHostCPUDataCopy(&ret->tcg.hostCPU, &qemuCaps->tcg.hostCPU) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0)
|
if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0)
|
||||||
@ -1670,8 +1676,8 @@ void virQEMUCapsDispose(void *obj)
|
|||||||
VIR_FREE(qemuCaps->machineTypes);
|
VIR_FREE(qemuCaps->machineTypes);
|
||||||
|
|
||||||
virHashFree(qemuCaps->domCapsCache);
|
virHashFree(qemuCaps->domCapsCache);
|
||||||
virObjectUnref(qemuCaps->kvmCPUModels);
|
virObjectUnref(qemuCaps->kvm.cpuModels);
|
||||||
virObjectUnref(qemuCaps->tcgCPUModels);
|
virObjectUnref(qemuCaps->tcg.cpuModels);
|
||||||
|
|
||||||
virBitmapFree(qemuCaps->flags);
|
virBitmapFree(qemuCaps->flags);
|
||||||
|
|
||||||
@ -1683,8 +1689,8 @@ void virQEMUCapsDispose(void *obj)
|
|||||||
|
|
||||||
virSEVCapabilitiesFree(qemuCaps->sevCapabilities);
|
virSEVCapabilitiesFree(qemuCaps->sevCapabilities);
|
||||||
|
|
||||||
virQEMUCapsHostCPUDataClear(&qemuCaps->kvmCPU);
|
virQEMUCapsHostCPUDataClear(&qemuCaps->kvm.hostCPU);
|
||||||
virQEMUCapsHostCPUDataClear(&qemuCaps->tcgCPU);
|
virQEMUCapsHostCPUDataClear(&qemuCaps->tcg.hostCPU);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1849,10 +1855,10 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps,
|
|||||||
size_t start;
|
size_t start;
|
||||||
qemuMonitorCPUDefsPtr defs = NULL;
|
qemuMonitorCPUDefsPtr defs = NULL;
|
||||||
|
|
||||||
if (type == VIR_DOMAIN_VIRT_KVM && qemuCaps->kvmCPUModels)
|
if (type == VIR_DOMAIN_VIRT_KVM && qemuCaps->kvm.cpuModels)
|
||||||
defs = qemuCaps->kvmCPUModels;
|
defs = qemuCaps->kvm.cpuModels;
|
||||||
else if (type == VIR_DOMAIN_VIRT_QEMU && qemuCaps->tcgCPUModels)
|
else if (type == VIR_DOMAIN_VIRT_QEMU && qemuCaps->tcg.cpuModels)
|
||||||
defs = qemuCaps->tcgCPUModels;
|
defs = qemuCaps->tcg.cpuModels;
|
||||||
|
|
||||||
if (defs) {
|
if (defs) {
|
||||||
start = defs->ncpus;
|
start = defs->ncpus;
|
||||||
@ -1866,9 +1872,9 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (type == VIR_DOMAIN_VIRT_KVM)
|
if (type == VIR_DOMAIN_VIRT_KVM)
|
||||||
qemuCaps->kvmCPUModels = defs;
|
qemuCaps->kvm.cpuModels = defs;
|
||||||
else
|
else
|
||||||
qemuCaps->tcgCPUModels = defs;
|
qemuCaps->tcg.cpuModels = defs;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
@ -1920,9 +1926,9 @@ virQEMUCapsGetCPUModels(virQEMUCapsPtr qemuCaps,
|
|||||||
qemuMonitorCPUDefsPtr defs;
|
qemuMonitorCPUDefsPtr defs;
|
||||||
|
|
||||||
if (type == VIR_DOMAIN_VIRT_KVM)
|
if (type == VIR_DOMAIN_VIRT_KVM)
|
||||||
defs = qemuCaps->kvmCPUModels;
|
defs = qemuCaps->kvm.cpuModels;
|
||||||
else
|
else
|
||||||
defs = qemuCaps->tcgCPUModels;
|
defs = qemuCaps->tcg.cpuModels;
|
||||||
|
|
||||||
if (!defs)
|
if (!defs)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1936,9 +1942,9 @@ virQEMUCapsGetHostCPUData(virQEMUCapsPtr qemuCaps,
|
|||||||
virDomainVirtType type)
|
virDomainVirtType type)
|
||||||
{
|
{
|
||||||
if (type == VIR_DOMAIN_VIRT_KVM)
|
if (type == VIR_DOMAIN_VIRT_KVM)
|
||||||
return &qemuCaps->kvmCPU;
|
return &qemuCaps->kvm.hostCPU;
|
||||||
else
|
else
|
||||||
return &qemuCaps->tcgCPU;
|
return &qemuCaps->tcg.hostCPU;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2000,9 +2006,9 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
|
|||||||
|
|
||||||
case VIR_CPU_MODE_CUSTOM:
|
case VIR_CPU_MODE_CUSTOM:
|
||||||
if (type == VIR_DOMAIN_VIRT_KVM)
|
if (type == VIR_DOMAIN_VIRT_KVM)
|
||||||
cpus = qemuCaps->kvmCPUModels;
|
cpus = qemuCaps->kvm.cpuModels;
|
||||||
else
|
else
|
||||||
cpus = qemuCaps->tcgCPUModels;
|
cpus = qemuCaps->tcg.cpuModels;
|
||||||
return cpus && cpus->ncpus > 0;
|
return cpus && cpus->ncpus > 0;
|
||||||
|
|
||||||
case VIR_CPU_MODE_LAST:
|
case VIR_CPU_MODE_LAST:
|
||||||
@ -2530,9 +2536,9 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
|
if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
|
||||||
qemuCaps->tcgCPUModels = defs;
|
qemuCaps->tcg.cpuModels = defs;
|
||||||
else
|
else
|
||||||
qemuCaps->kvmCPUModels = defs;
|
qemuCaps->kvm.cpuModels = defs;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3549,9 +3555,9 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (type == VIR_DOMAIN_VIRT_KVM)
|
if (type == VIR_DOMAIN_VIRT_KVM)
|
||||||
qemuCaps->kvmCPUModels = g_steal_pointer(&defs);
|
qemuCaps->kvm.cpuModels = g_steal_pointer(&defs);
|
||||||
else
|
else
|
||||||
qemuCaps->tcgCPUModels = g_steal_pointer(&defs);
|
qemuCaps->tcg.cpuModels = g_steal_pointer(&defs);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3978,10 +3984,10 @@ virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps,
|
|||||||
|
|
||||||
if (type == VIR_DOMAIN_VIRT_KVM) {
|
if (type == VIR_DOMAIN_VIRT_KVM) {
|
||||||
typeStr = "kvm";
|
typeStr = "kvm";
|
||||||
defs = qemuCaps->kvmCPUModels;
|
defs = qemuCaps->kvm.cpuModels;
|
||||||
} else {
|
} else {
|
||||||
typeStr = "tcg";
|
typeStr = "tcg";
|
||||||
defs = qemuCaps->tcgCPUModels;
|
defs = qemuCaps->tcg.cpuModels;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!defs)
|
if (!defs)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user