mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-31 10:05:31 +00:00
qemu: Copy CPU models in virQEMUCapsGetCPUDefinitions
Rather than returning a direct pointer the list stored in qemuCaps the function now creates a new copy of the CPU models list. The main purpose of this seemingly useless change is to update callers to free the result returned by virQEMUCapsGetCPUDefinitions because the internals of this function will change significantly in the following patches. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
de0ad11263
commit
e20a11eecf
@ -139,6 +139,8 @@ struct _virDomainCapsCPUModels {
|
||||
virDomainCapsCPUModelPtr models;
|
||||
};
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainCapsCPUModels, virObjectUnref);
|
||||
|
||||
typedef struct _virDomainCapsCPU virDomainCapsCPU;
|
||||
typedef virDomainCapsCPU *virDomainCapsCPUPtr;
|
||||
struct _virDomainCapsCPU {
|
||||
|
@ -1885,10 +1885,17 @@ virDomainCapsCPUModelsPtr
|
||||
virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
|
||||
virDomainVirtType type)
|
||||
{
|
||||
virDomainCapsCPUModelsPtr cpuModels;
|
||||
|
||||
if (type == VIR_DOMAIN_VIRT_KVM)
|
||||
return qemuCaps->kvmCPUModels;
|
||||
cpuModels = qemuCaps->kvmCPUModels;
|
||||
else
|
||||
return qemuCaps->tcgCPUModels;
|
||||
cpuModels = qemuCaps->tcgCPUModels;
|
||||
|
||||
if (!cpuModels)
|
||||
return NULL;
|
||||
|
||||
return virDomainCapsCPUModelsCopy(cpuModels);
|
||||
}
|
||||
|
||||
|
||||
@ -3115,6 +3122,7 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps,
|
||||
virCPUDefPtr cpu,
|
||||
bool migratable)
|
||||
{
|
||||
g_autoptr(virDomainCapsCPUModels) cpuModels = NULL;
|
||||
virCPUDataPtr data = NULL;
|
||||
int ret = -1;
|
||||
|
||||
@ -3124,7 +3132,9 @@ virQEMUCapsInitCPUModelX86(virQEMUCapsPtr qemuCaps,
|
||||
if (!(data = virQEMUCapsGetCPUModelX86Data(qemuCaps, model, migratable)))
|
||||
goto cleanup;
|
||||
|
||||
if (cpuDecode(cpu, data, virQEMUCapsGetCPUDefinitions(qemuCaps, type)) < 0)
|
||||
cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type);
|
||||
|
||||
if (cpuDecode(cpu, data, cpuModels) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
@ -3207,10 +3217,13 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps,
|
||||
if ((rc = virQEMUCapsInitCPUModel(qemuCaps, type, cpu, false)) < 0) {
|
||||
goto error;
|
||||
} else if (rc == 1) {
|
||||
g_autoptr(virDomainCapsCPUModels) cpuModels = NULL;
|
||||
|
||||
VIR_DEBUG("No host CPU model info from QEMU; probing host CPU directly");
|
||||
|
||||
hostCPU = virQEMUCapsProbeHostCPU(hostArch,
|
||||
virQEMUCapsGetCPUDefinitions(qemuCaps, type));
|
||||
cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type);
|
||||
hostCPU = virQEMUCapsProbeHostCPU(hostArch, cpuModels);
|
||||
|
||||
if (!hostCPU ||
|
||||
virCPUDefCopyModelFilter(cpu, hostCPU, true,
|
||||
virQEMUCapsCPUFilterFeatures,
|
||||
|
@ -13684,7 +13684,7 @@ qemuConnectBaselineHypervisorCPU(virConnectPtr conn,
|
||||
g_autoptr(virQEMUCaps) qemuCaps = NULL;
|
||||
virArch arch;
|
||||
virDomainVirtType virttype;
|
||||
virDomainCapsCPUModelsPtr cpuModels;
|
||||
g_autoptr(virDomainCapsCPUModels) cpuModels = NULL;
|
||||
bool migratable;
|
||||
virCPUDefPtr cpu = NULL;
|
||||
char *cpustr = NULL;
|
||||
|
@ -6040,6 +6040,8 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def,
|
||||
|
||||
/* nothing to update for host-passthrough */
|
||||
if (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH) {
|
||||
g_autoptr(virDomainCapsCPUModels) cpuModels = NULL;
|
||||
|
||||
if (def->cpu->check == VIR_CPU_CHECK_PARTIAL &&
|
||||
virCPUCompare(caps->host.arch,
|
||||
virQEMUCapsGetHostModel(qemuCaps, def->virtType,
|
||||
@ -6052,8 +6054,9 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def,
|
||||
VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE)) < 0)
|
||||
return -1;
|
||||
|
||||
if (virCPUTranslate(def->os.arch, def->cpu,
|
||||
virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType)) < 0)
|
||||
cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType);
|
||||
|
||||
if (virCPUTranslate(def->os.arch, def->cpu, cpuModels) < 0)
|
||||
return -1;
|
||||
|
||||
def->cpu->fallback = VIR_CPU_FALLBACK_FORBID;
|
||||
|
@ -543,7 +543,6 @@ cpuTestGetCPUModels(const struct data *data,
|
||||
return -1;
|
||||
|
||||
*models = virQEMUCapsGetCPUDefinitions(qemuCaps, VIR_DOMAIN_VIRT_KVM);
|
||||
virObjectRef(*models);
|
||||
|
||||
virObjectUnref(qemuCaps);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user