mirror of https://gitee.com/openkylin/libvirt.git
qemu: Prepare qemuCaps for multiple host CPU defs
Soon we will need to store multiple host CPU definitions in virQEMUCapsHostCPUData and qemuCaps users will want to request the one they need. This patch introduces virQEMUCapsHostCPUType enum which will be used for specifying the requested CPU definition. Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
b0a84ffb7f
commit
1fe517c68d
|
@ -2475,11 +2475,17 @@ virQEMUCapsGetHostCPUData(virQEMUCapsPtr qemuCaps,
|
|||
|
||||
virCPUDefPtr
|
||||
virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps,
|
||||
virDomainVirtType type)
|
||||
virDomainVirtType type,
|
||||
virQEMUCapsHostCPUType cpuType)
|
||||
{
|
||||
virQEMUCapsHostCPUDataPtr cpuData = virQEMUCapsGetHostCPUData(qemuCaps, type);
|
||||
|
||||
return cpuData->reported;
|
||||
switch (cpuType) {
|
||||
case VIR_QEMU_CAPS_HOST_CPU_REPORTED:
|
||||
return cpuData->reported;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2508,7 +2514,8 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
|
|||
virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch);
|
||||
|
||||
case VIR_CPU_MODE_HOST_MODEL:
|
||||
return !!virQEMUCapsGetHostModel(qemuCaps, type);
|
||||
return !!virQEMUCapsGetHostModel(qemuCaps, type,
|
||||
VIR_QEMU_CAPS_HOST_CPU_REPORTED);
|
||||
|
||||
case VIR_CPU_MODE_CUSTOM:
|
||||
if (type == VIR_DOMAIN_VIRT_KVM)
|
||||
|
@ -5521,7 +5528,8 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps,
|
|||
|
||||
if (virQEMUCapsIsCPUModeSupported(qemuCaps, caps, domCaps->virttype,
|
||||
VIR_CPU_MODE_HOST_MODEL)) {
|
||||
virCPUDefPtr cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype);
|
||||
virCPUDefPtr cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype,
|
||||
VIR_QEMU_CAPS_HOST_CPU_REPORTED);
|
||||
domCaps->cpu.hostModel = virCPUDefCopy(cpu);
|
||||
}
|
||||
|
||||
|
|
|
@ -449,8 +449,16 @@ int virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
|
|||
virDomainVirtType type,
|
||||
char ***names,
|
||||
size_t *count);
|
||||
|
||||
typedef enum {
|
||||
/* Host CPU definition reported in domain capabilities. */
|
||||
VIR_QEMU_CAPS_HOST_CPU_REPORTED,
|
||||
} virQEMUCapsHostCPUType;
|
||||
|
||||
virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps,
|
||||
virDomainVirtType type);
|
||||
virDomainVirtType type,
|
||||
virQEMUCapsHostCPUType cpuType);
|
||||
|
||||
bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
|
||||
virCapsPtr caps,
|
||||
virDomainVirtType type,
|
||||
|
|
|
@ -6899,7 +6899,8 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
|
|||
if (def->cpu->mode == VIR_CPU_MODE_CUSTOM)
|
||||
cpuDef = def->cpu;
|
||||
else if (def->cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH)
|
||||
cpuDef = virQEMUCapsGetHostModel(qemuCaps, def->virtType);
|
||||
cpuDef = virQEMUCapsGetHostModel(qemuCaps, def->virtType,
|
||||
VIR_QEMU_CAPS_HOST_CPU_REPORTED);
|
||||
|
||||
if (cpuDef) {
|
||||
int svm = virCPUCheckFeature(def->os.arch, cpuDef, "svm");
|
||||
|
|
|
@ -5304,12 +5304,14 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def,
|
|||
|
||||
if (def->cpu->check == VIR_CPU_CHECK_PARTIAL &&
|
||||
virCPUCompare(caps->host.arch,
|
||||
virQEMUCapsGetHostModel(qemuCaps, def->virtType),
|
||||
virQEMUCapsGetHostModel(qemuCaps, def->virtType,
|
||||
VIR_QEMU_CAPS_HOST_CPU_REPORTED),
|
||||
def->cpu, true) < 0)
|
||||
return -1;
|
||||
|
||||
if (virCPUUpdate(def->os.arch, def->cpu,
|
||||
virQEMUCapsGetHostModel(qemuCaps, def->virtType)) < 0)
|
||||
virQEMUCapsGetHostModel(qemuCaps, def->virtType,
|
||||
VIR_QEMU_CAPS_HOST_CPU_REPORTED)) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType,
|
||||
|
|
Loading…
Reference in New Issue