From: Jiri Denemark <[email protected]> Each CPU mode is filled in its own dedicated function.
Signed-off-by: Jiri Denemark <[email protected]> Reviewed-by: Peter Krempa <[email protected]> --- Notes: Version 2: - no change src/qemu/qemu_capabilities.c | 96 ++++++++++++++++++++++++------------ 1 file changed, 64 insertions(+), 32 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 12af7c4616..90bd43e628 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -6606,6 +6606,66 @@ virQEMUCapsFillDomainOSCaps(virDomainCapsOS *os, } +static void +virQEMUCapsFillDomainCPUHostPassthrough(virQEMUCaps *qemuCaps, + virDomainCaps *domCaps) +{ + domCaps->cpu.hostPassthrough = true; + + domCaps->cpu.hostPassthroughMigratable.report = true; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_MIGRATABLE)) { + VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.hostPassthroughMigratable, + VIR_TRISTATE_SWITCH_ON); + } + VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.hostPassthroughMigratable, + VIR_TRISTATE_SWITCH_OFF); +} + + +static void +virQEMUCapsFillDomainCPUMaximum(virDomainCaps *domCaps) +{ + domCaps->cpu.maximum = true; + + domCaps->cpu.maximumMigratable.report = true; + VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable, + VIR_TRISTATE_SWITCH_ON); + VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable, + VIR_TRISTATE_SWITCH_OFF); +} + + +static void +virQEMUCapsFillDomainCPUHostModel(virQEMUCaps *qemuCaps, + virDomainCaps *domCaps) +{ + virCPUDef *cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype, + VIR_QEMU_CAPS_HOST_CPU_REPORTED); + + domCaps->cpu.hostModel = virCPUDefCopy(cpu); + domCaps->cpu.hostModel->addr = virQEMUCapsGetHostPhysAddr(qemuCaps, + domCaps->virttype); +} + + +static void +virQEMUCapsFillDomainCPUCustom(virQEMUCaps *qemuCaps, + virDomainCaps *domCaps) +{ + const char *forbidden[] = { "host", NULL }; + g_auto(GStrv) models = NULL; + + if (virCPUGetModels(domCaps->arch, &models) >= 0) { + domCaps->cpu.custom = virQEMUCapsGetCPUModels(qemuCaps, + domCaps->virttype, + (const char **)models, + forbidden); + } else { + domCaps->cpu.custom = NULL; + } +} + + static void virQEMUCapsFillDomainCPUCaps(virQEMUCaps *qemuCaps, virArch hostarch, @@ -6614,53 +6674,25 @@ virQEMUCapsFillDomainCPUCaps(virQEMUCaps *qemuCaps, if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype, VIR_CPU_MODE_HOST_PASSTHROUGH, domCaps->machine)) { - domCaps->cpu.hostPassthrough = true; - - domCaps->cpu.hostPassthroughMigratable.report = true; - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_MIGRATABLE)) { - VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.hostPassthroughMigratable, - VIR_TRISTATE_SWITCH_ON); - } - VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.hostPassthroughMigratable, - VIR_TRISTATE_SWITCH_OFF); + virQEMUCapsFillDomainCPUHostPassthrough(qemuCaps, domCaps); } if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype, VIR_CPU_MODE_MAXIMUM, domCaps->machine)) { - domCaps->cpu.maximum = true; - - domCaps->cpu.maximumMigratable.report = true; - VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable, - VIR_TRISTATE_SWITCH_ON); - VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable, - VIR_TRISTATE_SWITCH_OFF); + virQEMUCapsFillDomainCPUMaximum(domCaps); } if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype, VIR_CPU_MODE_HOST_MODEL, domCaps->machine)) { - virCPUDef *cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype, - VIR_QEMU_CAPS_HOST_CPU_REPORTED); - domCaps->cpu.hostModel = virCPUDefCopy(cpu); - domCaps->cpu.hostModel->addr = virQEMUCapsGetHostPhysAddr(qemuCaps, - domCaps->virttype); + virQEMUCapsFillDomainCPUHostModel(qemuCaps, domCaps); } if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype, VIR_CPU_MODE_CUSTOM, domCaps->machine)) { - const char *forbidden[] = { "host", NULL }; - g_auto(GStrv) models = NULL; - - if (virCPUGetModels(domCaps->arch, &models) >= 0) { - domCaps->cpu.custom = virQEMUCapsGetCPUModels(qemuCaps, - domCaps->virttype, - (const char **)models, - forbidden); - } else { - domCaps->cpu.custom = NULL; - } + virQEMUCapsFillDomainCPUCustom(qemuCaps, domCaps); } } -- 2.54.0
