From: Jiri Denemark <[email protected]> We will need to generate the capabilities in a different way based on the flags.
Signed-off-by: Jiri Denemark <[email protected]> --- Notes: Version 2: - some hunks were included in v1 by accident and were moved to the correct patch in v2 src/qemu/qemu_capabilities.c | 34 ++++++++++++++++++++++++---------- src/qemu/qemu_capabilities.h | 3 ++- src/qemu/qemu_conf.c | 6 ++++-- src/qemu/qemu_conf.h | 3 ++- src/qemu/qemu_driver.c | 15 ++------------- tests/domaincapstest.c | 2 +- 6 files changed, 35 insertions(+), 28 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 90bd43e628..7b1c0b2372 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -6637,14 +6637,26 @@ virQEMUCapsFillDomainCPUMaximum(virDomainCaps *domCaps) static void virQEMUCapsFillDomainCPUHostModel(virQEMUCaps *qemuCaps, - virDomainCaps *domCaps) + virDomainCaps *domCaps, + unsigned int flags) { - virCPUDef *cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype, - VIR_QEMU_CAPS_HOST_CPU_REPORTED); + virQEMUCapsHostCPUType cpuType = VIR_QEMU_CAPS_HOST_CPU_REPORTED; + virCPUDef *cpu; - domCaps->cpu.hostModel = virCPUDefCopy(cpu); - domCaps->cpu.hostModel->addr = virQEMUCapsGetHostPhysAddr(qemuCaps, - domCaps->virttype); + cpu = virCPUDefCopy(virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype, + cpuType)); + + cpu->addr = virQEMUCapsGetHostPhysAddr(qemuCaps, domCaps->virttype); + + if (flags & VIR_CONNECT_GET_DOMAIN_CAPABILITIES_DISABLE_DEPRECATED_FEATURES) { + virQEMUCapsUpdateCPUDeprecatedFeatures(qemuCaps, domCaps->virttype, + cpu, VIR_CPU_FEATURE_DISABLE); + } + + if (flags & VIR_CONNECT_GET_DOMAIN_CAPABILITIES_EXPAND_CPU_FEATURES) + virCPUExpandFeatures(domCaps->arch, cpu); + + domCaps->cpu.hostModel = cpu; } @@ -6669,7 +6681,8 @@ virQEMUCapsFillDomainCPUCustom(virQEMUCaps *qemuCaps, static void virQEMUCapsFillDomainCPUCaps(virQEMUCaps *qemuCaps, virArch hostarch, - virDomainCaps *domCaps) + virDomainCaps *domCaps, + unsigned int flags) { if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype, VIR_CPU_MODE_HOST_PASSTHROUGH, @@ -6686,7 +6699,7 @@ virQEMUCapsFillDomainCPUCaps(virQEMUCaps *qemuCaps, if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype, VIR_CPU_MODE_HOST_MODEL, domCaps->machine)) { - virQEMUCapsFillDomainCPUHostModel(qemuCaps, domCaps); + virQEMUCapsFillDomainCPUHostModel(qemuCaps, domCaps, flags); } if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype, @@ -7315,7 +7328,8 @@ virQEMUCapsFillDomainCaps(virQEMUDriverConfig *cfg, virQEMUCaps *qemuCaps, virArch hostarch, virDomainCaps *domCaps, - bool privileged) + bool privileged, + unsigned int flags) { virDomainCapsOS *os = &domCaps->os; virDomainCapsDeviceDisk *disk = &domCaps->disk; @@ -7358,7 +7372,7 @@ virQEMUCapsFillDomainCaps(virQEMUDriverConfig *cfg, firmwares, nfirmwares) < 0) return -1; - virQEMUCapsFillDomainCPUCaps(qemuCaps, hostarch, domCaps); + virQEMUCapsFillDomainCPUCaps(qemuCaps, hostarch, domCaps, flags); virQEMUCapsFillDomainMemoryBackingCaps(qemuCaps, memoryBacking); virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, domCaps->machine, disk); virQEMUCapsFillDomainDeviceGraphicsCaps(cfg, qemuCaps, graphics); diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index c26e06104d..b26b5d3145 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -903,7 +903,8 @@ int virQEMUCapsFillDomainCaps(virQEMUDriverConfig *cfg, virQEMUCaps *qemuCaps, virArch hostarch, virDomainCaps *domCaps, - bool privileged); + bool privileged, + unsigned int flags); void virQEMUCapsFillDomainMemoryBackingCaps(virQEMUCaps *qemuCaps, virDomainCapsMemoryBacking *memoryBacking); diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 9c32310096..9b94733a38 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1753,7 +1753,8 @@ virQEMUDriverGetDomainCapabilities(virQEMUDriver *driver, virQEMUCaps *qemuCaps, const char *machine, virArch arch, - virDomainVirtType virttype) + virDomainVirtType virttype, + unsigned int flags) { g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); g_autoptr(virDomainCaps) domCaps = NULL; @@ -1787,7 +1788,8 @@ virQEMUDriverGetDomainCapabilities(virQEMUDriver *driver, qemuCaps, driver->hostarch, domCaps, - driver->privileged) < 0) + driver->privileged, + flags) < 0) return NULL; return g_steal_pointer(&domCaps); diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index 511ab77f71..a2ca4ddbdb 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -383,7 +383,8 @@ virQEMUDriverGetDomainCapabilities(virQEMUDriver *driver, virQEMUCaps *qemuCaps, const char *machine, virArch arch, - virDomainVirtType virttype); + virDomainVirtType virttype, + unsigned int flags); int qemuDriverAllocateID(virQEMUDriver *driver); virDomainXMLOption *virQEMUDriverCreateXMLConf(virQEMUDriver *driver, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index bcafacfb60..c351ce40af 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -16982,21 +16982,10 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn, if (!(domCaps = virQEMUDriverGetDomainCapabilities(driver, qemuCaps, machine, - arch, virttype))) + arch, virttype, + flags))) return NULL; - if (flags & VIR_CONNECT_GET_DOMAIN_CAPABILITIES_DISABLE_DEPRECATED_FEATURES) { - virQEMUCapsUpdateCPUDeprecatedFeatures(qemuCaps, virttype, - domCaps->cpu.hostModel, - VIR_CPU_FEATURE_DISABLE); - } - - if (flags & VIR_CONNECT_GET_DOMAIN_CAPABILITIES_EXPAND_CPU_FEATURES) { - virCPUDef *cpu = domCaps->cpu.hostModel; - if (cpu && virCPUExpandFeatures(arch, cpu) < 0) - return NULL; - } - return virDomainCapsFormat(domCaps); } diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index 5b2fc80f0a..f2248c2435 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -101,7 +101,7 @@ fillQemuCaps(virDomainCaps *domCaps, if (virQEMUCapsFillDomainCaps(cfg, qemuCaps, domCaps->arch, domCaps, - false) < 0) + false, 0) < 0) return -1; /* As of f05b6a918e28 we are expecting to see OVMF_CODE.fd file which -- 2.54.0
