mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-25 23:25:24 +00:00
qemu: Introduce virQEMUCapsIsCPUModeSupported
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
21dead6370
commit
803497a8ac
@ -2371,6 +2371,32 @@ virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps)
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
|
||||
virCapsPtr caps,
|
||||
virDomainVirtType type,
|
||||
virCPUMode mode)
|
||||
{
|
||||
switch (mode) {
|
||||
case VIR_CPU_MODE_HOST_PASSTHROUGH:
|
||||
return type == VIR_DOMAIN_VIRT_KVM &&
|
||||
virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch);
|
||||
|
||||
case VIR_CPU_MODE_HOST_MODEL:
|
||||
return !!qemuCaps->hostCPUModel;
|
||||
|
||||
case VIR_CPU_MODE_CUSTOM:
|
||||
return qemuCaps->cpuDefinitions &&
|
||||
qemuCaps->cpuDefinitions->nmodels > 0;
|
||||
|
||||
case VIR_CPU_MODE_LAST:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
int virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps,
|
||||
size_t *nmachines,
|
||||
virCapsGuestMachinePtr **machines)
|
||||
@ -4358,22 +4384,26 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps,
|
||||
virQEMUCapsPtr qemuCaps,
|
||||
virDomainCapsPtr domCaps)
|
||||
{
|
||||
virDomainCapsCPUModelsPtr filtered = NULL;
|
||||
char **models = NULL;
|
||||
|
||||
if (domCaps->virttype == VIR_DOMAIN_VIRT_KVM &&
|
||||
virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch))
|
||||
if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype,
|
||||
VIR_CPU_MODE_HOST_PASSTHROUGH))
|
||||
domCaps->cpu.hostPassthrough = true;
|
||||
|
||||
domCaps->cpu.hostModel = virCPUDefCopy(qemuCaps->hostCPUModel);
|
||||
if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype,
|
||||
VIR_CPU_MODE_HOST_MODEL))
|
||||
domCaps->cpu.hostModel = virCPUDefCopy(qemuCaps->hostCPUModel);
|
||||
|
||||
if (qemuCaps->cpuDefinitions &&
|
||||
cpuGetModels(domCaps->arch, &models) >= 0) {
|
||||
filtered = virDomainCapsCPUModelsFilter(qemuCaps->cpuDefinitions,
|
||||
(const char **) models);
|
||||
virStringFreeList(models);
|
||||
if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype,
|
||||
VIR_CPU_MODE_CUSTOM)) {
|
||||
virDomainCapsCPUModelsPtr filtered = NULL;
|
||||
char **models = NULL;
|
||||
|
||||
if (cpuGetModels(domCaps->arch, &models) >= 0) {
|
||||
filtered = virDomainCapsCPUModelsFilter(qemuCaps->cpuDefinitions,
|
||||
(const char **) models);
|
||||
virStringFreeList(models);
|
||||
}
|
||||
domCaps->cpu.custom = filtered;
|
||||
}
|
||||
domCaps->cpu.custom = filtered;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -430,6 +430,10 @@ int virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
|
||||
char ***names,
|
||||
size_t *count);
|
||||
virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps);
|
||||
bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
|
||||
virCapsPtr caps,
|
||||
virDomainVirtType type,
|
||||
virCPUMode mode);
|
||||
const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps,
|
||||
const char *name);
|
||||
int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps,
|
||||
|
Loading…
Reference in New Issue
Block a user